200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python数据分析与挖掘项目实战记录

python数据分析与挖掘项目实战记录

时间:2023-11-16 11:24:30

相关推荐

python数据分析与挖掘项目实战记录

python数据挖掘项目实战记录

取自《Python数据分析与挖掘实战》一书,整理各个项目中用到的数据处理方法:

数据预处理方法建立模型方法绘制图形

对于分类问题:用模型分类;混淆矩阵及其绘图;观测其ROC曲线;

对于聚类问题:划分类目数;获取划分类目中心;平行坐标系描述

(一)数据预处理的方法

在获取数据之后,会发现一些数据值错误

一、填补空值

二、观察数据分布

三、数据清洗,使数据值都合理存在

四、数据规约,提取重要属性

五、数据归一化,为了使用K-Means算法

数据读取

#SVM,bayes,ANN,D_Tree,等需要操作的数据是矩阵,需要data=data.as_matrix()#将series数据转为矩阵形式的训练集fromnumpy.randomimportshuffleshuffle(data)#随机打乱数据x_train=data_train[:,2:]*30#将特征放大importpicklepickle.dump(model,open('../tmp/svm.model','wb'))#保存模型model=pickle.load(open('../tmp/svm.model','rb'))#读取模型#将数据保存为固定文件格式pd.DataFrame(cm_train,index=range(5),columns=range(5)).to_excel(outputfile1)

一、拉格朗日插值法

fromscipy.interpolateimportlagrange#取数,两个列表尾接y=s[list(range(n-k,n))+list(range(n+1,n+1+k))]y=y[y.notnull()]res=lagrange(y.index,list(y))(n)#输入索引,和该列数据n为空值下标

二、series的内置插值法

df=pd.DataFrame(data,columns=[0,1,2])df.interpolate()

三、电量趋势描述

绘制折线图,观测电量下降趋势。

四、数据探索describe(include=’all).T

通过数据探索,发现异常值,不合逻辑的错误值,如果数据集很大就可以丢弃,否则可以填充

explore=data.describe(include='all').Texplore['null']=len(data)-explore['count']explore=explore[['null','max','min','std']]#count,unique,top,freq,mean,std,min,50%,max等选取几个属性#计算相关系数矩阵,data必须是n*n矩阵print(np.round(data.corr(method='pearson'),2))

五、数据清洗

类似集合的操作,对于不合逻辑的错误值,设置索引,排除。

data=data[data['SUM_YR_1'].notnull()&data['SUM_YR_2'].notnull()]index1=data['SUM_YR_1']!=0index2=data['SUM_YR_2']!=0index3=(data['SEG_KM_SUM']==0)&(data['avg_discount']==0)data=data[index1|index2|index3]

六、属性转换

数据的规约就是选取有用的数据属性,可以通过excel删除对应列即可实现。

#选取某列data=data[data['TARGET_ID']==184].copy()#获取该条件下的数据的副本data_group=data.groupby('COLLECTTIME')#以时间分组defattr_trans(x):#定义属性变换函数#创建新的seriesresult=pd.Series(index=['SYS_NAME','CWXT_DB:184:C:\\','CWXT_DB:184:D:\\','COLLECTTIME'])#设置列标result['SYS_NAME']=x['SYS_NAME'].iloc[0]#获取该属性值,唯一result['COLLECTTIME']=x['COLLECTTIME'].iloc[0]#获取该属性值,唯一result['CWXT_DB:184:C:\\']=x['VALUE'].iloc[0]#获取属性值Aresult['CWXT_DB:184:D:\\']=x['VALUE'].iloc[1]#获取属性值B,等等returnresultdata_processed=data_group.apply(attr_trans)#逐组处理

七、数据归一化和标准化

使用正态分布的标准正态分布标准化:x-u/σ

data=(data-data.mean(axis=0))/data.std(axis=0)#按列选取均值和标准差。矩阵操作

当发现数值范围对结果影响太大,不方便运算时,将数据标准化

data=(data-data.min())/(data.max()-data.min())data=data.reset_index()

八、数据离散化

应用在发掘频繁项时,需要把连续数据转变为离散数据。

foriinrange(len(keys)):#调用k-means算法,进行聚类离散化r1=pd.DataFrame(kmodel.cluster_centers_,columns=[typelabel[keys[i]]])#聚类中心,Ar2=pd.Series(kmodel.labels_).value_counts()#分类统计r2=pd.DataFrame(r2,columns=[typelabel[keys[i]]+'n'])#统计量,Anr=pd.DataFrame(pd.concat([r1,r2],axis=1))#聚类中心与类别数目匹配连接r=r.sort_values(typelabel[keys[i]])r.index=[1,2,3,4]r[typelabel[keys[i]]]=pd.rolling_mean(r[typelabel[keys[i]]],2)#rolling_mean()用来计算相邻2列的均值,以此作为边界点。r[typelabel[keys[i]]][1]=0.0#这两句代码将原来的聚类中心改为边界点。result=result.append(r.T)#转置添加result=result.sort_index()#以Index(A,B,C,D,E,F)顺序排序,保存result.to_excel(processedfile)

九、图像切割和颜色矩阵提取

1.一阶颜色矩:采用一阶原点矩,反应图像的整体明暗程度

Ei=1/N*∑(j:1-N)Pij

2.二阶颜色矩:反应图像颜色的分布范围

σi=(1/N*∑j:1-N(Pij-Ei)^2)^1/2

3.三阶颜色矩:反应图像颜色分布的对称性

十、时间序列算法

利用时间序列算法模型的流程,根据历史数据,来预测未来的数据情况

采用时间序列算法对模型输入数据进行模型拟合、检验与检测。依据误差公式,计算预测值与验证数据之间的误差,分析其是否属于业务接受的范围内。

模型识别AR,MA,ARMA

平稳性检验,白噪声检验,模型识别,模型检验,模型预测,模型评价,模型应用

十一、行为分析与服务推荐

连接数据库

系统过滤算法为主,其他为辅。

推荐

物品相似度:夹角余弦;杰卡德相似系数;相关系数

熟悉基于物品的协同过滤算法使用

#基于物品的协同过滤算法defJaccard(a,b):return1.0*(a*b).sum()/(a+b-a*b).sum()classRecommender():sim=Nonedefsimilarity(self,x,distance):y=np.ones((len(x),len(x)))foriinrange(len(x)):forjinrange(len(x)):y[i,j]=distance(x[i],x[j])returnydeffit(self,x,distance=Jaccard):#x传入的是矩阵(行:物品,列:用户)self.sim=self.similarity(x,distance)#计算相似度defrecommend(self,a):#传入预测用户的购买记录的矩阵.T=n*1returnnp.dot(self.sim,a)*(1-a)

十二、变量选择与灰色预测

使用Lasso函数对与处理数据变量选择

灰色预测得到关键影响因素的预测值

使用神经网络对财政收入进行预测

十三、文本预处理

#数据去重l1=len(data)data=pd.DataFrame(data[0].unique())#选取数据列进行unique()l2=len(data)data.to_csv(outputfile,index=False,header=False,encoding='utf-8')print(u'删除了%s条评论。'%(l1-l2))#机械压缩去词,去除连续重复语料,和短句子删除过滤较多垃圾信息#文本评论分词mycut=lambdas:''.join(jieba.cut(s))#自定义简单分词函数data1=data1[0].apply(mycut)#对于读入的数据执行分词函数data2=data2[0].apply(mycut)#通过“广播”形式分词,加快速度。#先将文本正负面评价分开,然后再进行LDA主题分析。COSTCM6中的情感分析做及其分类,生成正面情感和负面情感#正面主题分析fromgensimimportcorpora,modelspos_dict=corpora.Dictionary(pos[2])pos_corpus=[pos_dict.doc2bow(i)foriinpos[2]]pos_lda=models.LdaModel(pos_corpus,num_topics=3,id2word=pos_dict)foriinrange(3):neg_lda.print_topic(i)#输出每个主题

(二)、模型方法

一、神经网络

二、决策树

三、K-Means

一、LM神经网络

API:

add();compile();fit();save_weights();predict_classrs()

fromkeras.modelsimportSequentialfromkeras.layersimportDense,Activationnet=Sequential()net.add(Dense(input_dim=3,activation='relu',units=10))pile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])net.fit(train[:,:3],train[:,3],epochs=1000,batch_size=1)#传入的是矩阵,读取excel需要把数据.as_matrix()net.save_weights(netfile)predict_result=net.predict_classes(train[:,:3]).reshape(len(train))

二、CART决策树

API:

fit();predict();

#构建CART决策树模型fromsklearn.treeimportDecisionTreeClassifiertree=DecisionTreeClassifier()tree.fit(train[:,:3],train[:,3])plt=cm_plot(test[:,3],tree.predict(test[:,:3]))#获取结果plt.show()

三、K-MeansK聚类算法

fromsklearn.clusterimportKMeansimportpandasaspdinputFile='../data/zscoreddata.xls'data=pd.read_excel(inputFile)kmodel=KMeans(n_clusters=5,n_jobs=4)kmodel.fit(data)print(kmodel.cluster_centers_)

四、SVM支持向量机

fromsklearnimportsvmsmodel=svm.SVC()#建立模型smodel.fit(x_train,y_train)#训练模型res=smodel.predict(x_test)#预测测试集

(三)、绘制图形

模型建立后,需要可视化分析数据挖掘的合理性,准确性等

混淆矩阵:正确与错误分类的情况

ROC曲线:分类方法的性能

聚类群图:使数据值聚成n类,分析n类群体特征

混淆矩阵

预测准确度:RMSE;MAE

分类准确度:precesion=TP/TP+FP:表示用户对推荐产品感兴趣的可能性

recall=TP/(TP+FN):表示推荐的产品,占用户喜欢产品的概率

fromsklearn.metricsimportconfusion_matrix#导入混淆矩阵函数cm=confusion_matrix(y,yp)#混淆矩阵如下#CM[[TP,FP],[FN,TN]]#例如['TP','FP','FN','TN']==[46,2,7,4]cm_train=confusion_matrix(train_label,smodel.predict(trainSet))cm_test=confusion_matrix(test_label,smodel.predict(testSet))pd.DataFrame(cm_train).to_excel(outFile1)pd.DataFrame(cm_test).to_excel(outFile2)

ROC曲线

fromsklearn.metricsimportroc_curve#导入ROC曲线函数fpr,tpr,thresholds=roc_curve(test[:,3],tree.predict_proba(test[:,:3])[:,1],pos_label=1)plt.plot(fpr,tpr,linewidth=2,label='ROCofCART',color='green')#作出ROC曲线

聚类群图

importmatplotlib.pyplotaspltcenters=kmodel.cluster_centers_foriinrange(5):plt.plot([2,4,6,8,10],centers[i],label='group'+str(i),marker='o')#设置横轴纵轴分别对应5个点plt.ylabel('values')plt.xlabel('index:LRFMC')plt.show()

层次聚类谱图

importmatplotlib.pyplotaspltfromscipy.cluster.hierarchyimportlinkage,dendrogram#这里使用scipy的层次聚类函数Z=linkage(data_udf,method='ward',metric='euclidean')#谱系聚类图P=dendrogram(Z,0)#画谱系聚类图plt.show()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。