「Python地理信息挖掘」8.4

8.4 将8.2和8.3计算的指标数据水平集成,获得各任务12个指标完整数据集,同时将该数据集分成两部分:一部分是已完成的任务数据,另一部分为未完成的任务数据。已完成的任务假设定价是合理的,能被广大会员接受。未完成的任务假设定价不合理,需要重新进行定价。请以完成的任务12个指标数据作为自变量X,其定价作为因变量Y,构建定价模型,并以未完成的任务12个指标数据作为定价模型输入变量,输出即为重新定价结果。

[知识点及要求] 任务定价模型的构建

示例代码如下:

import pandas as pd #导入pandas库import numpy as np #导入nmypy库import math #导入数学函数模import fun #导入定义的函数A=pd.read_excel('附件一:已结束项目任务数据.xls') B=pd.read_excel('附件二:会员信息数据.xlsx')Z=np.zeros((len(A),13))for t in range(len(A)): A_Wt=A.iloc[t,1] #第t个任务的维度 A_Jt=A.iloc[t,2] #第t个任务的经度 D1=np.zeros(len(A)) D2=np.zeros(len(B)) for i in range(len(A)): A_Wi=A.iloc[i,1] #第i个任务的维度 A_Ji=A.iloc[i,2] #第i个任务的经度 d1=111.19*math.sqrt((A_Wt-A_Wi)**2+(A_Jt-A_Ji)**2* math.cos((A_Wt+A_Wi)*math.pi/180)**2); D1[i]=d1 for k in range(len(B)): B_Wk=B.iloc[k,1] #第k个会员的维度 B_Jk=B.iloc[k,2] #第k个会员的经度 d2=111.19*math.sqrt((A_Wt-B_Wk)**2+(A_Jt-B_Jk)**2* math.cos((A_Wt+B_Wk)*math.pi/180)**2); D2[k]=d2 Z[t,0]=t Z[t,1]=len(D1[D1<=5]) Z[t,2]=A.iloc[D1<=5,3].mean() Z[t,3]=len(D2[D2<=5]) Z[t,4]=B.iloc[D2<=5,5].mean() Z[t,5]=B.iloc[D2<=5,3].sum() Z[t,6]=B.iloc[fun.find_I(6,30,6,30,D2,B),3].sum() Z[t,7]=B.iloc[fun.find_I(6,33,6,45,D2,B),3].sum() Z[t,8]=B.iloc[fun.find_I(6,48,7,3,D2,B),3].sum() Z[t,9]=B.iloc[fun.find_I(7,6,7,21,D2,B),3].sum() Z[t,10]=B.iloc[fun.find_I(7,24,7,39,D2,B),3].sum() Z[t,11]=B.iloc[fun.find_I(7,42,7,57,D2,B),3].sum() Z[t,12]=B.iloc[fun.find_I(8,0,8,0,D2,B),3].sum()np.save('Z',Z)import numpy as np import pandas as pdZ=np.load('Z.npy')#读取上面储存的二进制文件Data=pd.DataFrame(Z[:,1:])#将数据转化成数据框#空值处理Data=Data.fillna(0)#指标之间是否存在较强的相关性R=Data.corr()#均值-方差标准化from sklearn.preprocessing import StandardScalerscaler = StandardScaler()data=Data.as_matrix() #数据框转化为数组形式scaler.fit(data) data=scaler.transform(data) #主成分分析from sklearn.decomposition import PCApca=PCA(n_components=0.9) #累计贡献率提取90%以上pca.fit(data)x=pca.transform(data) #返回主成分tzxl=pca.components_ #特征向量 tz=pca.explained_variance_ #特征值 gxl=pca.explained_variance_ratio_ #累计贡献率 A=pd.read_excel('附件一:已结束项目任务数据.xls') A4=A.iloc[:,4].valuesx_0=x[A4==0,:] #未执行任务主成分数据x_1=x[A4==1,:] #执行任务主成分数据y=A.iloc[:,3].valuesy=y.reshape(len(y),1)y_0=y[A4==0]#未执行任务定价数据y_1=y[A4==1]#执行任务定价数据#构建多元线性回归模型from sklearn.linear_model import LinearRegression as LRlr = LR() #创建线性回归模型类lr.fit(x_1, y_1) #拟合Slr=lr.score(x_1,y_1) # 判定系数 R^2c_x=lr.coef_ # x对应的回归系数c_b=lr.intercept_ # 回归系数常数项print('判定系数: ',Slr)#非线性神经网络模型构建任务定价模型from sklearn.neural_network import MLPRegressor #两个隐含层300*5clf = MLPRegressor(solver='lbfgs', alpha=1e-5,hidden_layer_sizes=(300,5), random_state=1) clf.fit(x_1, y_1); rv1=clf.score(x_1,y_1)#拟合优度y_0r=clf.predict(x_0) #对未执行的任务,利用神经网络定价模型重新预测定价print('拟合优度: ',rv1)    

部分运行结果如下图:

(0)

相关推荐