dbeaver 数据转化 mapping_Python机器学习实例:数据竞赛-足球运动员身价估计

前言

1,背景介绍

  每个足球运动员在转会市场都有各自的价码。本次数据练习的目的是根据球员的各项信息和能力来预测该球员的市场价值。

2,数据来源

  FIFA2018

3,数据文件说明

  数据文件分为三个:

train.csv         训练集     文件大小为2.20MB

test.csv      预测集    文件大小为1.44KB

sample_submit.csv   提交示例 文件大小为65KB

  训练集共有10441条样本,预测集中有7000条样本。每条样本代表一位球员,数据中每个球员

有61项属性。数据中含有缺失值。

4,数据变量说明

id行编号,没有实际意义

club该球员所属的俱乐部。该信息已经被编码。

league该球员所在的联赛。已被编码。

birth_date生日。格式为月/日/年。

height_cm身高(厘米)

weight_kg体重(公斤)

nationality国籍。已被编码。

potential球员的潜力。数值变量。

pac球员速度。数值变量。

sho射门(能力值)。数值变量。

pas传球(能力值)。数值变量。

dri带球(能力值)。数值变量。

def防守(能力值)。数值变量。

phy身体对抗(能力值)。数值变量。

international_reputation国际知名度。数值变量。

skill_moves技巧动作。数值变量。

weak_foot非惯用脚的能力值。数值变量。

work_rate_att球员进攻的倾向。分类变量,Low, Medium, High。

work_rate_def球员防守的倾向。分类变量,Low, Medium, High。

preferred_foot惯用脚。1表示右脚、2表示左脚。

crossing传中(能力值)。数值变量。

finishing完成射门(能力值)。数值变量。

heading_accuracy头球精度(能力值)。数值变量。

short_passing短传(能力值)。数值变量。

volleys凌空球(能力值)。数值变量。

dribbling盘带(能力值)。数值变量。

curve弧线(能力值)。数值变量。

free_kick_accuracy定位球精度(能力值)。数值变量。

long_passing长传(能力值)。数值变量。

ball_control控球(能力值)。数值变量。

acceleration加速度(能力值)。数值变量。

sprint_speed冲刺速度(能力值)。数值变量。

agility灵活性(能力值)。数值变量。

reactions反应(能力值)。数值变量。

balance身体协调(能力值)。数值变量。

shot_power射门力量(能力值)。数值变量。

jumping弹跳(能力值)。数值变量。

stamina体能(能力值)。数值变量。

strength力量(能力值)。数值变量。

long_shots远射(能力值)。数值变量。

aggression侵略性(能力值)。数值变量。

interceptions拦截(能力值)。数值变量。

positioning位置感(能力值)。数值变量。

vision视野(能力值)。数值变量。

penalties罚点球(能力值)。数值变量。

marking卡位(能力值)。数值变量。

standing_tackle断球(能力值)。数值变量。

sliding_tackle铲球(能力值)。数值变量。

gk_diving门将扑救(能力值)。数值变量。

gk_handling门将控球(能力值)。数值变量。

gk_kicking门将开球(能力值)。数值变量。

gk_positioning门将位置感(能力值)。数值变量。

gk_reflexes门将反应(能力值)。数值变量。

rw球员在右边锋位置的能力值。数值变量。

rb球员在右后卫位置的能力值。数值变量。

st球员在射手位置的能力值。数值变量。

lw球员在左边锋位置的能力值。数值变量。

cf球员在锋线位置的能力值。数值变量。

cam球员在前腰位置的能力值。数值变量。

cm球员在中场位置的能力值。数值变量。

cdm球员在后腰位置的能力值。数值变量。

cb球员在中后卫的能力值。数值变量。

lb球员在左后卫置的能力值。数值变量。

gk球员在守门员的能力值。数值变量。

y该球员的市场价值(单位为万欧元)。这是要被预测的数值。

5,评估方法

  可以参考博文:机器学习笔记:常用评估方法

6be9ce42e7260ae4652b364d03018365.png

6,完整代码,请移步小编的github

  传送门:https://github.com/LeBron-Jian/sofasofa-learn

数据预处理

  此处实战一下数据预处理的理论知识点:请点击知识点1,或者知识点2

1,本文数据预处理的主要步骤

  • (1) 删除和估算缺失值(removing and imputing missing values)
  • (2)获取分类数据(Getting categorical data into shape for machine learning)
  • (3)为模型构建选择相关特征(Selecting relevant features for the module construction)
  • (4)对原表的年份数据进行填充,比如格式是这样的09/10/89 ,因为要计算年龄,所以补为完整的09/10/1989
  • (5)将体重和身高转化为BMI指数
  • (6)将球员在各个位置上的能力值转化为球员最擅长位置上的得分

2,分类数据处理

  sklearn的官网地址:请点击我

  对于定量特征,其包含的有效信息为区间划分,例如本文中work_rate_att 和 work_rate_def 他们分别代表了球员进攻的倾向和球员防守的倾向。用Low,Medium,High表示。所以我们可能会将其转化为0 , 1,2 。

a6160852aee65c75c1891166173ae727.png

  这里使用标签编码来处理,首先举例说明一下标签编码

from sklearn import preprocessing

labelEncoding = preprocessing.LabelEncoder()

labelEncoding.fit(['Low','Medium','High'])

res = labelEncoding.transform(['Low','Medium','High','High','Low','Low'])

print(res)

# [1 2 0 0 1 1]

  又或者自己编码:

import pandas as pd

df = pd.DataFrame([

['green', 'M', 10.1, 'class1'],

['red', 'L', 13.5, 'class2'],

['blue', 'XL', 15.3, 'class1']])

print(df)

df.columns = ['color', 'size', 'prize', 'class label']

size_mapping = {

'XL':3,

'L':2,

'M':1

}

df['size'] = df['size'].map(size_mapping)

print(df)

class_mapping = {label:ind for ind,label in enumerate(set(df['class label']))}

df['class label'] = df['class label'].map(class_mapping)

print(df)

'''

0 1 2 3

0 green M 10.1 class1

1 red L 13.5 class2

2 blue XL 15.3 class1

color size prize class label

0 green 1 10.1 class1

1 red 2 13.5 class2

2 blue 3 15.3 class1

color size prize class label

0 green 1 10.1 0

1 red 2 13.5 1

2 blue 3 15.3 0

'''

  上面使用了两种方法,一种是将分类数据转换为数值型数据,一种是编码分类标签。

3,缺失值处理

3.1 统计空值情况

#using isnull() function to check NaN value

df.isnull().sum()

  本文中空值如下:

gk_positioning 0

gk_reflexes 0

rw 1126

rb 1126

st 1126

lw 1126

cf 1126

cam 1126

cm 1126

cdm 1126

cb 1126

lb 1126

gk 9315

y 0

Length: 65, dtype: int64

3.2 消除缺失值 dropna() 函数

  一个最简单的处理缺失值的方法就是直接删掉相关的特征值(一列数据)或者相关的样本(一行数据)。利用dropna()函数实现。

# 参数axis 表示轴选择,axis = 0 代表行 axis = 1 代表列

df.dropna(axis = 1)

df.dropna(axis = 0)

# how参数选择删除行列数据(any / all)

dropna(how = all)

# 删除值少于int个数的值

dropna(thresh = int)

# subset = [' '] 删除指定列中有空值的一行数据(整个样本)

  虽然直接删除很简单,但是直接删除会带来很多弊端。比如样本值删除太多导致不能进行可靠预测;或者特征值删除太多(列数据)可能会失去很多有价值的信息。

3.3 插值法 interpolation techniques

  比较常用的一种估值是平均值估计(mean imputation)。可以直接使用sklearn库中的imputer类实现。

class sklearn.preprocessing .Imputer

(missing_values = 'NaN', strategy = 'mean', axis = 0, verbose = 0, copy = True)

miss_values :int 或者 NaN ,默认NaN(string类型)

strategy :默认mean。平均值填补

可选项:mean(平均值)

median(中位数)

most_frequent(众数)

axis : 指定轴向。axis = 0 列向(默认) axis =1 行向

verbose :int 默认值为0

copy :默认True ,创建数据集的副本

False:在任何合适的地方都可能进行插值

  下面举例说明:

# 创建CSV数据集

import pandas as pd

from io import StringIO

import warnings

warnings.filterwarnings('ignore')

# 数据不要打空格,IO流会读入空格

csv_data = '''

A,B,C,D

1.0,2.0,3.0,4.0

5.0,6.0,,8.0

10.0,11.0,12.0,

'''

df = pd.read_csv(StringIO(csv_data))

print(df)

# 均值填充

from sklearn.preprocessing import Imputer

# axis = 0 表示列向 ,采用每一列的平均值填充空值

imr = Imputer(missing_values='NaN',strategy='mean',axis=0)

imr = imr.fit(df.values)

imputed_data = imr.transform(df.values)

print(imputed_data)

'''

A B C D

0 1.0 2.0 3.0 4.0

1 5.0 6.0 NaN 8.0

2 10.0 11.0 12.0 NaN

[[ 1. 2. 3. 4. ]

[ 5. 6. 7.5 8. ]

[10. 11. 12. 6. ]]

'''

4,将出生日期转化为年龄

  如下,在这个比赛中,获取的数据中出现了出生日期的Series,下面我们对其进行转化。

2c9389e3676b760eb0ac0762e51102e6.png

  下面我截取了一部分数据:

5adeeac64a32739427c7dd619fd59eb4.png

  从数据来看,‘11/6/86’之类的数,最左边的数表示月份,中间表示日,最后的数表示年。

  实际上我们在分析时候并不需要人的出生日期,而是需要年龄,不同的年龄阶段会有不同的状态,有可能age就是一个很好地特征工程指示变量。

  那么如何将birth转化为age呢?这里使用到datetime这个库。

4.1 首先把birth_date转化为标准时间格式

# 将出生年月日转化为年龄

traindata['birth_date'] = pd.to_datetime(traindata['birth_date'])

print(traindata)

  结果如下:

6a593632160475a910ef39014d46df26.png

4.2 获取当前时间的年份,并减去birth_date 的年份

# 获取当前的年份

new_year = dt.datetime.today().year

traindata['birth_date'] = new_year - traindata.birth_date.dt.year

print(traindata)

  这里使用了dt.datetime.today().year来获取当前日期的年份,然后将birth数据中的年份数据提取出来(frame.birth.dt.year),两者相减就得到需要的年龄数据,如下:

56001fe38049dab71d939bfc45277841.png

5,身高体重转化为BMI

  官方的标杆模型对身高体重的处理使用的是BMI指数。

  BMI指数是身体质量指数,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。

f32088ab6bb798f0458cc2a3d7b7ba41.png
8566ae2e981d2a9fecd3dad93a8fb92c.png

  这里直接计算,公式如下:

# 计算球员的身体质量指数(BMI)

train['BMI'] = 10000. * train['weight_kg'] / (train['height_cm'] ** 2)

test['BMI'] = 10000. * test['weight_kg'] / (test['height_cm'] ** 2)

6,将球员各个位置上的评分转化为球员最擅长位置的评分

  目前打算将这11个特征转化为球员最擅长位置上的评分,这里计算方式只会取这11个特征中的最大值,当然这里也省去了对缺失值的判断,经过对数据的研究,我们发现有门将和射门球员的区分,如果使用最擅长位置的话就省去了这一步,但是如果这样直接取最大值的话会隐藏一些特征。

39572d07f3ad0fbf2abb9184c3922643.png

# 获得球员最擅长位置上的评分

positions = ['rw','rb','st','lw','cf','cam','cm','cdm','cb','lb','gk']

train['best_pos'] = train[positions].max(axis =1)

test['best_pos'] = test[positions].max(axis = 1)

重要特征提取及其模型训练

1,使用随机森林提取重要特征

# 提取重要性特征

def RandomForestExtractFeature(traindata):

from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier

print(type(traindata)) #

X,y = traindata[:,1:-1],traindata[:,-1]

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=0)

# n_estimators 森林中树的数量

forest = RandomForestClassifier(n_estimators=100000,random_state=0,n_jobs=1)

forest.fit(X_train,y_train.astype('int'))

importances = forest.feature_importances_

return importances

模型训练及其结果展示

1,自己的Xgboost,没有做任何处理

#_*_ coding:utf-8_*_

import pandas as pd

import warnings

warnings.filterwarnings('ignore')

# 导入数据,并处理非数值型数据

def load_dataSet(filename):

'''

检查数据,发现出生日期是00/00/00类型,

work_rate_att work_rate_def 是Medium High Low

下面对这三个数据进行处理

然后对gk

:return:

'''

# 读取训练集

traindata = pd.read_csv(filename,header=0)

# 处理非数值型数据

label_mapping = {

'Low':0,

'Medium':1,

'High':2

}

traindata['work_rate_att'] = traindata['work_rate_att'].map(label_mapping)

traindata['work_rate_def'] = traindata['work_rate_def'].map(label_mapping)

# 将出生年月日转化为年龄

traindata['birth_date'] = pd.to_datetime(traindata['birth_date'])

import datetime as dt

# 获取当前的年份

new_year = dt.datetime.today().year

traindata['birth_date'] = new_year - traindata.birth_date.dt.year

# 处理缺失值

res = traindata.isnull().sum()

from sklearn.preprocessing import Imputer

imr = Imputer(missing_values='NaN',strategy='mean',axis=0)

imr = imr.fit(traindata.values)

imputed_data = imr.transform(traindata.values)

return imputed_data

# 直接训练回归模型

def xgboost_train(traindata,testdata):

from sklearn.model_selection import train_test_split

import xgboost as xgb

from xgboost import plot_importance

from matplotlib import pyplot as plt

from sklearn.externals import joblib

from sklearn.metrics import mean_squared_error

from sklearn.metrics import r2_score

X, y = traindata[:, 1:-1], traindata[:, -1]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234567)

# n_estimators 森林中树的数量

model = xgb.XGBRegressor(max_depth=5,learning_rate=0.1,n_estimators=160,

silent=True,objective='reg:gamma')

model.fit(X_train,y_train)

# 对测试集进行预测

y_pred = model.predict(X_test)

# print(y_pred)

# 计算准确率,下面的是计算模型分类的正确率,

MSE = mean_squared_error(y_test, y_pred)

print("accuaracy is %s "%MSE)

R2 = r2_score(y_test,y_pred)

print('r2_socre is %s'%R2)

# test_pred = model.predict(testdata[:,1:])

# 显示重要特征

# plot_importance(model)

# plt.show()

# 保存模型

joblib.dump(model,'Xgboost.m')

# 使用模型预测数据

def predict_data(xgbmodel,testdata,submitfile):

import numpy as np

ModelPredict = np.load(xgbmodel)

test = testdata[:,1:]

predict_y = ModelPredict.predict(test)

submit_data = pd.read_csv(submitfile)

submit_data['y'] = predict_y

submit_data.to_csv('my_SVM_prediction.csv', index=False)

return predict_y

if __name__ == '__main__':

TrainFile= 'data/train.csv'

TestFile = 'data/test.csv'

SubmitFile = 'submit1.csv'

xgbmodel = 'Xgboost.m'

TrainData = load_dataSet(TrainFile)

TestData = load_dataSet(TestFile)

# RandomForestExtractFeature(TrainData)

xgboost_train(TrainData,TestData)

predict_data(xgbmodel,TestData,SubmitFile)

198a5cc1f14a967189dedbe20e09e580.png

2,随机森林标杆模型

整理此随机森林训练模型的亮点

  • 1,将出生年月日转化为球员的岁数(数据处理必须的)
  • 2,将球员在各个位置的能力使用球员最擅长的位置表示(!!此处有待商榷)
  • 3,利用球员的身体质量指数(BMI)来代替球员体重和身高这两个特征值
  • 4,根据数据判断,发现各个位置的球员缺失值主要判断是否为守门员,此处按照是否为守门员来分别训练随机森林
  • 5,最终使用height_cm(身高),weight_kg(体重),potential(潜力),BMI(球员身体指数),phy(身体对抗能力),international_reputation(国际知名度),age(年龄),best_pos(最佳位置)这9个特征来预测结果

#_*_coding:utf-8_*_

import pandas as pd

import numpy as np

import datetime as dt

from sklearn.ensemble import RandomForestRegressor

# 读取数据

train = pd.read_csv('data/train.csv')

test = pd.read_csv('data/test.csv')

submit = pd.read_csv('data/sample_submit.csv')

# 获得球员年龄

today = dt.datetime.today().year

train['birth_date'] = pd.to_datetime(train['birth_date'])

train['age'] = today - train.birth_date.dt.year

test['birth_date'] = pd.to_datetime(test['birth_date'])

test['age'] = today - test.birth_date.dt.year

# 获取球员最擅长位置的评分

positions = ['rw','rb','st','lw','cf','cam','cm','cdm','cb','lb','gk']

train['best_pos'] = train[positions].max(axis=1)

test['best_pos'] = test[positions].max(axis=1)

# 计算球员的身体质量指数(BMI)

train['BMI'] = 10000. * train['weight_kg'] / (train['height_cm'] ** 2)

test['BMI'] = 10000. * test['weight_kg'] / (test['height_cm'] ** 2)

# 判断一个球员是否是守门员

train['is_gk'] = train['gk'] > 0

test['is_gk'] = test['gk'] > 0

# 用多个变量准备训练随机森林

test['pred'] = 0

cols = ['height_cm', 'weight_kg', 'potential', 'BMI', 'pac',

'phy', 'international_reputation', 'age', 'best_pos']

# 用非守门员的数据训练随机森林

reg_ngk = RandomForestRegressor(random_state=100)

reg_ngk.fit(train[train['is_gk'] == False][cols] , train[train['is_gk'] == False]['y'])

preds = reg_ngk.predict(test[test['is_gk'] == False][cols])

test.loc[test['is_gk'] == False , 'pred'] = preds

# 用守门员的数据训练随机森林

reg_gk = RandomForestRegressor(random_state=100)

reg_gk.fit(train[train['is_gk'] == True][cols] , train[train['is_gk'] == True]['y'])

preds = reg_gk.predict(test[test['is_gk'] == True][cols])

test.loc[test['is_gk'] == True , 'pred'] = preds

# 输出预测值

submit['y'] = np.array(test['pred'])

submit.to_csv('my_RF_prediction.csv',index = False)

为什么会有两个结果?

  这里解释一下,因为这里的标杆模型中的年龄的取值,是我以目前的时间为准,而不是以作者给的2018年为准,可能因为差了一岁导致球员的黄金年龄不同,价值也就不同。

82acb8de78fab1314df2ce50ac6cf716.png
8b21065f93243e6c03ea21f1f56af3c4.png

随机森林调参(网格搜索)

#_*_coding:utf-8_*_

import pandas as pd

import numpy as np

import datetime as dt

from sklearn.ensemble import RandomForestRegressor

# 读取数据

train = pd.read_csv('data/train.csv')

test = pd.read_csv('data/test.csv')

submit = pd.read_csv('data/sample_submit.csv')

# 获得球员年龄

today = dt.datetime.today().year

train['birth_date'] = pd.to_datetime(train['birth_date'])

train['age'] = today - train.birth_date.dt.year

test['birth_date'] = pd.to_datetime(test['birth_date'])

test['age'] = today - test.birth_date.dt.year

# 获取球员最擅长位置的评分

positions = ['rw','rb','st','lw','cf','cam','cm','cdm','cb','lb','gk']

train['best_pos'] = train[positions].max(axis=1)

test['best_pos'] = test[positions].max(axis=1)

# 计算球员的身体质量指数(BMI)

train['BMI'] = 10000. * train['weight_kg'] / (train['height_cm'] ** 2)

test['BMI'] = 10000. * test['weight_kg'] / (test['height_cm'] ** 2)

# 判断一个球员是否是守门员

train['is_gk'] = train['gk'] > 0

test['is_gk'] = test['gk'] > 0

# 用多个变量准备训练随机森林

test['pred'] = 0

cols = ['height_cm', 'weight_kg', 'potential', 'BMI', 'pac',

'phy', 'international_reputation', 'age', 'best_pos']

# 用非守门员的数据训练随机森林

# 使用网格搜索微调模型

from sklearn.model_selection import GridSearchCV

param_grid = [

{'n_estimators':[3,10,30], 'max_features':[2,4,6,8]},

{'bootstrap':[False], 'n_estimators':[3,10],'max_features':[2,3,4]}

]

forest_reg = RandomForestRegressor()

grid_search = GridSearchCV(forest_reg, param_grid ,cv=5,

scoring='neg_mean_squared_error')

grid_search.fit(train[train['is_gk'] == False][cols] , train[train['is_gk'] == False]['y'])

preds = grid_search.predict(test[test['is_gk'] == False][cols])

test.loc[test['is_gk'] == False , 'pred'] = preds

# 用守门员的数据训练随机森林

# 使用网格搜索微调模型

from sklearn.model_selection import GridSearchCV

'''

先对estimators进行网格搜索,[3,10,30]

接着对最大深度max_depth

内部节点再划分所需要最小样本数min_samples_split 进行网格搜索

最后对最大特征数,ax_features进行调参

'''

param_grid1 = [

{'n_estimators':[3,10,30], 'max_features':[2,4,6,8]},

{'bootstrap':[False], 'n_estimators':[3,10],'max_features':[2,3,4]}

]

'''

parm_grid 告诉Scikit-learn 首先评估所有的列在第一个dict中的n_estimators 和

max_features的 3*4=12 种组合,然后尝试第二个dict中的超参数2*3 = 6 种组合,

这次会将超参数bootstrap 设为False 而不是True(后者是该超参数的默认值)

总之,网格搜索会探索 12 + 6 = 18 种RandomForestRegressor的超参数组合,会训练

每个模型五次,因为使用的是五折交叉验证,换句话说,训练总共有18 *5 = 90 轮,、

将花费大量的时间,完成后,就可以得到参数的最佳组合了

'''

forest_reg1 = RandomForestRegressor()

grid_search1 = GridSearchCV(forest_reg, param_grid1 ,cv=5,

scoring='neg_mean_squared_error')

grid_search1.fit(train[train['is_gk'] == True][cols] , train[train['is_gk'] == True]['y'])

preds = grid_search1.predict(test[test['is_gk'] == True][cols])

test.loc[test['is_gk'] == True , 'pred'] = preds

# 输出预测值

submit['y'] = np.array(test['pred'])

submit.to_csv('my_RF_prediction1.csv',index = False)

# 打印参数的最佳组合

print(grid_search.best_params_)

2f075315ad0a24b6b2d664b4f88f00ec.png

3,决策树标杆模型(四个特征)

整理此决策树训练模型的亮点

  • 1,将出生年月日转化为球员的岁数(数据处理必须的)
  • 2,将球员在各个位置的能力使用球员最擅长的位置表示(!!此处有待商榷)
  • 3,直接使用潜力,国际知名度,年龄,最擅长位置评分这四个变量建立决策树(我觉得有点草率)

#_*_coding:utf-8_*_

import pandas as pd

import datetime as dt

from sklearn.tree import DecisionTreeRegressor

# 读取数据

train = pd.read_csv('data/train.csv')

test = pd.read_csv('data/test.csv')

submit = pd.read_csv('data/sample_submit.csv')

# 获得球员年龄

today = dt.datetime.today().year

train['birth_date'] = pd.to_datetime(train['birth_date'])

train['age'] = today - train.birth_date.dt.year

test['birth_date'] = pd.to_datetime(test['birth_date'])

test['age'] = today - test.birth_date.dt.year

# 获得球员最擅长位置上的评分

positions = ['rw','rb','st','lw','cf','cam','cm','cdm','cb','lb','gk']

train['best_pos'] = train[positions].max(axis =1)

test['best_pos'] = test[positions].max(axis = 1)

# 用潜力,国际知名度,年龄,最擅长位置评分 这四个变量来建立决策树模型

col = ['potential','international_reputation','age','best_pos']

reg = DecisionTreeRegressor(random_state=100)

reg.fit(train[col],train['y'])

# 输出预测值

submit['y'] = reg.predict(test[col])

submit.to_csv('my_DT_prediction.csv',index=False)

  结果如下:

70da03d42f008eab2bf53f7f3ee45dd6.png
d8180510d427785db1151b47b6ecdbc4.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对SQL server、Oracle、MySQL和PostgreSQL进行OLTP性能测试(Benchmark)

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创,首发于 【掘金】📢作者格言:生活在于…

【完整版】当大师遇到了理工男,只能吐血了...

全世界有3.14 % 的人已经关注了爆炸吧知识1、青年问禅师:“大师,我很爱我的女朋友,她也有很多优点,但是总有几个缺点让我非常讨厌,有什么方法能让她改变?”禅师浅笑,答:“方法很简单…

[FW]软件开发中的11个系统思维定律

“我会更加努力地工作”——一匹名叫Boxer的马(出自乔治奥威尔的《动物农庄》) 彼得圣吉在其著作《第五项修炼》中提到的系统思维定律同样适用于软件开发。 1. 今日的问题源于昨日的解决方案(Today’s problems come from yesterday’s sol…

5单个编译总会编译全部_VS2019 v16.5 MSVC编译器后端更新汇总

MSVC更新汇总在Visual Studio 2019 v16.5中,我们已经对C后端进行了持续的改进更新,包括新增了一些新特性和优化点,编译时间优化,以及更好的安全性。下面我们来汇总一下目前关于MSVC编译器后端更新的要点:> Intel JC…

计算机职称 计算机二级证,国家计算机二级证书含金量有多高

首先感谢你的邀请,我们都知道在大学生涯考证中,计算机二级#计算机二级#基本是在校大学生必备的证书。当然我说的必考证书是针对已经了解计算机证书的,当然可能还有一些人不了解,那学姐简单来说一下,什么是全国计算机二…

无法使用此安装程序来安装 .net framework_NuGet是什么?理解与使用(上)

如果你了解python,那么它类似pip。如果你了解nodejs,那么它类似npm。如果你了解ruby,那么它类似gem。对,它就是一个包(package)管理平台,确切的说是 .net平台的包管理工具,它提供了一…

NoSQL 是否可以用来做日志中心 ?

咨询区 ikrain:请问大家在分布式程序中用 nosql 来做日志中心的经验?我做了一些研究,发现用 Mongodb 做日志中心是一个非常好的选择,而且我发现 log4net 对它也是直接集成的,比如: log4mongo-net 。不知道大家可推荐这…

长能耐了?想造反了?你老婆没了.......

1 提出问题的人一律直接解决掉▼2 今年的心理阴影是金字塔和钢琴键带来的▼3 广州考如何催收房租?▼4 想起了大雄的衣柜......▼5 这简直一毛一样▼6 我今天非要跳上去不可!突然想到我还有点急事,告辞……▼7 据说,有不少男…

php 无限查找下级业绩_PHP 面试踩过的坑

因为最近需要面试,所以特意整理了一下面试所经历的一些面试题。分享一下,希望对自己有用,也对其他人有用。尚未有答案的,后面会陆续更新,如果有补充答案的,也十分感激。1.get,post 的区别**显示有区别 **ge…

python获取历史双色球数据_你的梦想,我来买单!Python分析双色球中奖号码竟成功获取特等奖

关于双色球的话题估计大家都听的很多,毕竟成本很低,但是收获很高。毕竟当利润达到100%时,就有人敢于铤而走险。当利润达到200%时,他们就敢于冒上断头台的危险。 而当利润达到300%他们就会践踏人间的一切法律。更何况是n倍的利润刺…

分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起~~~

前言在真实的项目中,不管是功能日志、错误日志还是异常日志,已经是项目的重要组成部分。在原始的单体架构,通常看日志的方式简单粗暴,直接登录到服务器,把日志文件拷贝下来进行分析;而如今分布式、微服务架…

《TCP/IP详解卷1:协议》第6章 ICMP:Internet控制报文协议-读书笔记

章节回顾: 《TCP/IP详解卷1:协议》第1章 概述-读书笔记 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记 《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记 《TCP/IP详解卷1:协议…

10以内的分解与组成怎么教_狗狗酷炫的飞盘游戏怎么玩?分解步骤教你快速学会...

现在的铲屎官都喜欢训练自己的狗狗,训练狗狗不仅可以增加狗狗与主人的感情,还能增强狗狗的协调性,开发狗狗的智力,可谓一举两得。其中飞盘是大家都比较爱的活动,经常看看狗狗以华丽的身姿一跃接起主人扔的飞盘&#xf…

计算机组成与系统 报告,计算机组成与系统结构实验报告2

计算机组成与系统结构实验报告,西北工业大学评语: 课中检查完成的题号及题数: 成绩:自评成绩:95课后完成的题号与题数:实验报告实验名称: 班级:1.4 CPU 与简单模型机设计实验 日期: 2015.11.16 杨添文10011303 学号&am…

c++ 异步下获取线程执行结果_前端异步编程的那些事

啊一、异步编程的运行机制我们学习Javascript语言的时候就知道它的执行环境是”单线程“的。所谓”单线程“,就是指一次只能处理一个任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务。常见的浏览器无响应(假…

自动驾驶规划算法

本文将讲解BFS,Dijstra,A*,动态规划的算法原理,不正之处望读者指正,希望有兴趣的读者能在评论区提出一些这些算法的面试考点,共同学习,一起进步 0 图论基础 图有三种:无向图、有向…

印度网民集体删除中国APP,网友评论亮了

全世界只有3.14 % 的人关注了爆炸吧知识最近,国外有一款Remove China Apps火了。这款APP只有一个功能:可以一键扫描用户手机里的应用,识别出自中国公司的应用,并进行一键删除的骚操作。应用的主图标、界面,甚至特意使用…

SQL Server 负载均衡集群(转)

SQL Server 负载均衡集群一个应用系统随着业务量的提高,以及访问量和数据流量的快速增长,各个核 心部分的处理性能和计算强度也相应增大,使得单一设备根本无法承担。在此情况下,如果扔掉现有设备去做大量的硬件升级,必将造成现有资…

大前端快闪二:react开发模式 一键启动多个服务

最近全权负责了一个前后端分离的web项目,前端使用create-react-app[1], 后端使用golang做的api服务。npx create-react-app my-app cd my-app npm start歘歘歘,就搭建了一个react前端项目。前端老鸟都知道npm start或yarn start以开发模式启动react App&…

数据库比较工具SQL Delta

SQL Delta 版本4只支持SQL Server数据库 版本5支持Oracle 但是数据库中不可以有英文 否则连接时会报 ORA-12737: Instant Client Light: unsupported server character set ZHS16GBK的错误 配置如下所示: 转载于:https://blog.51cto.com/shuimomo/461266