每个案例代码全部为书中源代码,出现错误按照每个案例下面给出的代码错误,原因,及怎样修改进行修改即可解决每个案例错误
#拉格朗日插值代码importpandasaspd#导入数据分析库Pandasfromscipy.interpolateimportlagrange#导入拉格朗日插值函数inputfile='F:/大二下合集/Python数据分析与挖掘/catering_sale.xls'#销量数据路径outputfile='F:/大二下合集/Python数据分析与挖掘/sales.xls'#输出数据路径data=pd.read_excel(inputfile)#读入数据data[u'销量'][(data[u'销量']<400)|(data[u'销量']>5000)]=None#过滤异常值,将其变为空值#自定义列向量插值函数#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5defployinterp_column(s,n,k=5):y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]#取数y=y[y.notnull()]#剔除空值returnlagrange(y.index,list(y))(n)#插值并返回插值结果#逐个元素判断是否需要插值foriindata.columns:forjinrange(len(data)):if(data[i].isnull())[j]:#如果为空即插值。data[i][j]=ployinterp_column(data[i],j)data.to_excel(outputfile)#输出结果,写入文件代码错误:
第一个错误原因:
data[u'销量'][(data[u'销量']<400)|(data[u'销量']>5000)]=None#过滤异常值,将其变为空值修改为:row_indexs=(data[u'销量']<400)|(data[u'销量']>5000)data.loc[row_indexs,u'销量']=None#过滤异常值,将其变为空值第二个错误原因:(需要改两个地方代码)
第①处
y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]#取数修改为:
y=s.reindex(list(range(n-k,n))+list(range(n+1,n+1+k)))#取数第②处
data[i][j]=ployinterp_column(data[i],j)修改为:
data[i,j]=ployinterp_column(data[i],j)4-2#-*-coding:utf-8-*-#数据规范化importpandasaspdimportnumpyasnpdatafile='F:/大二下合集/Python数据分析与挖掘/normalization_data.xls'#参数初始化data=pd.read_excel(datafile,header=None)#读取数据(data-data.min())/(data.max()-data.min())#最小-最大规范化(data-data.mean())/data.std()#零-均值规范化data/10**np.ceil(np.log10(data.abs().max()))#小数定标规范化代码错误:
没有报错,但是在idea中运行没有结果原因:
(data-data.min())/(data.max()-data.min())#最小-最大规范化(data-data.mean())/data.std()#零-均值规范化data/10**np.ceil(np.log10(data.abs().max()))#小数定标规范化修改为:
错误原因:(需要改两个地方代码)
第①个地方
kmodel.fit(data.reshape((len(data),1)))修改为:
kmodel.fit(data.values.reshape((len(data),1)))第②个地方
c=pd.DataFrame(kmodel.cluster_centers_).sort(0)修改为:
c=pd.DataFrame(kmodel.cluster_centers_).sort_values(0)解决完第一个错误再次运行发现错误2:
原因:
w=pd.rolling_mean(c,2).iloc[1:]修改为:
w=c.rolling(2).mean().iloc[1:]4-4#线损率属性构造importpandasaspdinputfile='F:/大二下合集/Python数据分析与挖掘/electricity_data.xls'#供入供出电量数据outputfile='F:/大二下合集/Python数据分析与挖掘/electricity_data.xls'#属性构造后数据文件data=pd.read_excel(inputfile)#读入数据data[u'线损率']=(data[u'供入电量']-data[u'供出电量'])/data[u'供入电量']data.to_excel(outputfile,index=False)#保存结果这个案例代码没问题
#-*-coding:utf-8-*-#利用小波分析进行特征分析#参数初始化inputfile='F:/大二下合集/Python数据分析与挖掘/leleccum.mat'#提取自Matlab的信号文件fromscipy.ioimportloadmat#mat是MATLAB专用格式,需要用loadmat读取它mat=loadmat(inputfile)signal=mat['leleccum'][0]importpywt#导入PyWaveletscoeffs=pywt.wavedec(signal,'bior3.7',level=5)#返回结果为level+1个数字,第一个数组为逼近系数数组,后面的依次是细节系数数组代码整体没有错误,但是运行没有结果需要在代码最后加一行
print(coeffs)4-6importpandasaspdinputfile='F:/大二下合集/Python数据分析与挖掘/principal_component.xls'outputfile='F:/大二下合集/Python数据分析与挖掘/1.xls'data=pd.read_excel(inputfile,header=None)fromsklearn.decompositionimportPCApca=PCA()pca.fit(data)pca.components_pca.explained_variance_ratio_print("-----------4-6.2-----------------")pca=PCA(3)pca.fit(data)low_d=pca.transform(data)pd.DataFrame(low_d).to_excel(outputfile)low_dpca.inverse_transform(low_d)代码错误:没有报错,但是在idea中运行没有结果,而且最后两行标红
①将:
pca.components_pca.explained_variance_ratio_修改为:(即添加print)
print(pca.components_)print(pca.explained_variance_ratio_)②将:
low_dpca.inverse_transform(low_d)修改为:(即添加print)
print(low_d)print(pca.inverse_transform(low_d))4-7(即预处理函数的两个实例)importnumpyasnpimportpandasaspdprint("-----------------unique---------------------")D=pd.Series([1,1,2,3,5])D.unique()np.unique(D)print("---------------isnull/notnull---------------------")fromsklearn.decompositionimportPCAD=np.random.rand(10,4)pca=PCA()pca.fit(D)pca.components_#返回模型的各个特征向量pca.explained_variance_ratio_代码错误:没有报错,但是在idea中运行没有结果,而且最后两行标红
D.unique()np.unique(D)修改为:(即添加print)
print(D.unique())print(np.unique(D))②将:
pca.fit(D)pca.components_#返回模型的各个特征向量pca.explained_variance_ratio_