因学习中发现《Python数据分析与挖掘实战》中的代码,有些不能实现,自己学习的时候走了很多弯路,特此分享可直接实现的代码,希望能让有需要的朋友少走弯路。
8-1部分
#数据聚类离散化 from __future__ import print_function import pandas as pd from sklearn.cluster import KMeans inputfile='../8/data.xls' outfile='../8/data2.xls' k=4 data=pd.read_excel(inputfile) typelabel={u'肝气郁结证型系数':'A',u'热毒蕴结证型系数':'B',u'冲任失调证型系数':'C',u'气血两虚证型系数':'D',u'脾胃虚弱证型系数':'E',u'肝肾阴虚证型系数':'F'} keys=list(typelabel.keys()) result=pd.DataFrame() if __name__ == '__main__': for i in range(len(keys)): print(u'正在进行"%s"的聚类...'%keys[i]) kmodel=KMeans(n_clusters=k,n_jobs=4) kmodel.fit(data[[keys[i]]].as_matrix()) r1=pd.DataFrame(kmodel.cluster_centers_,columns=[typelabel[keys[i]]]) #聚类中心 r2=pd.Series(kmodel.labels_).value_counts() #分类统计 r2=pd.DataFrame(r2,columns=[typelabel[keys[i]]+'n']) r=pd.concat([r1,r2],axis=1).sort_values(typelabel[keys[i]]) r.index=[1,2,3,4]
r[typelabel[keys[i]]]=pd.Series.rolling(r[typelabel[keys[i]]],window=2,center=False).mean() #计算相邻两列的均值,作为边界点r[typelabel[keys[i]]][ 1]= 0.0 result=result.append(r.T) result=result.sort_index() result.to_excel(outfile)
8-2部分
import pandas as pd from apriori import * import time inputfile='../8/apriori.txt' data=pd.read_csv(inputfile,header=None,dtype=object) #dtype和type的区别 start=time.clock() #开始计时 print(u'转化原始数据至0-1矩阵...') #\n换行 ct=lambda x:pd.Series(1,index=x[pd.notnull(x)]) #匿名函数,将标签数据转化为1???????????? b=map(ct,data.as_matrix()) #as_matrix将目标转化为多维数组 c=list(b) data=pd.DataFrame(c).fillna(0) #DataFrame的参数不能是迭代器,所以转换下 end=time.clock() print(u'转化完毕,用时:%0.2f'%(end-start)) #0.2两位小数 del b,c support=0.06 confidence=0.75 ms='---' start=time.clock() print(u'开始搜索关联规则...') find_rule(data,support,confidence,ms) end=time.clock() print(u'搜索完成,用时:%0.2f'%(end-start))