楼主: henry_l
10300 6

[程序分享] 【案例】5步掌握Python数据分析挖掘基础应用 [推广有奖]

  • 7关注
  • 3粉丝

博士生

12%

还不是VIP/贵宾

-

威望
0
论坛币
-35 个
通用积分
0
学术水平
39 点
热心指数
43 点
信用等级
40 点
经验
5097 点
帖子
123
精华
0
在线时间
332 小时
注册时间
2015-3-4
最后登录
2018-5-15

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
文章首发
其他阅读渠道:
人大经济论坛微信公号
知乎

许许多多的人都非常容易爱上Python这门语言。自从1991年诞生以来,Python现在已经成为最受欢迎的动态编程语言之一,尤其进入21世纪以来,Python在行业应用和学术研究中进行科学计算的势头也越来越迅猛。

                                                                                                      ——《Python for Data Analysis》(Wes Mckinney)

Python不仅在编程方面有强大的实力,而且由于不断改进的第三方库,Python在数据处理方面也越来越突出;近年来,非常火爆的机器学习(Machine Learning)以及前沿的自然语言处理(Natural Language Processing)也选择Python作为基础工具。所以要想在数据科学领域有所进步的话,了解学习Python看来还是有所必要的。

本文通过简单案例,分享Python在数据处理方面的实际应用,属于基础学习范畴,希望刚刚接触Python学习的新手们能通过应用去解决实际问题从而巩固掌握Python操作,在这里与大家相互学习,也希望大神们轻拍:)


Without further ado,lets get started

#进入正题#

本文使用Python2.7版本,操作在集成开发坏境Spyder中进行;选择的数据集,是大名鼎鼎的鸢尾花数据集iris.csv,数据集网上公开请自行下载!


1. 数据集截图如下图1

该数据集包含数据有150行*5列。前4列分别是:花萼的长度、宽度,花瓣的长度、宽度;最后一列是花的分类,总共分3类。

shuju.png


图1.iris数据集截图


2. 读入数据,代码如下

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. from sklearn import * #机器学习库
  5. np.random.seed(123) #设置随机数种子

  6. iris=pd.read_csv("C:\\Users\\Administrator\\Desktop\\iris.csv",header=False)
  7. #操作请注意:输入文件实际路径
  8. print iris.shape #输出数据维度
  9. print iris.head() #查看前5行
复制代码

输出结果如下:

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. from sklearn import * #机器学习库
  5. np.random.seed(123) #设置随机数种子

  6. iris=pd.read_csv("C:\\Users\\Administrator\\Desktop\\iris.csv",header=False)
  7. #操作请注意:输入文件实际路径
  8. print iris.shape #输出数据维度
  9. print iris.head() #查看前5行
  10. (150, 5)
  11.    SepalLength  SepalWidth  PetalLength  PetalWidth         Name
  12. 0          5.1         3.5          1.4         0.2  Iris-setosa
  13. 1          4.9         3.0          1.4         0.2  Iris-setosa
  14. 2          4.7         3.2          1.3         0.2  Iris-setosa
  15. 3          4.6         3.1          1.5         0.2  Iris-setosa
  16. 4          5.0         3.6          1.4         0.2  Iris-setosa
复制代码


Python通过pandas库,读入数据,注意读取时文件路径的填写,需用“\\”或者“/”符号。同时,Python面向对象编程,shape及head函数建立在iris数据框对象之上,这与R语言不同,R语言更加“函数化”,dim及head等函数都是内置函数。


3. 描述性统计,代码如下

  1. print iris.describe().T #描述性统计
复制代码

输出结果如下:

  1. print iris.describe().T #描述性统计
  2.              count      mean       std  min  25%   50%  75%  max
  3. SepalLength    150  5.843333  0.828066  4.3  5.1  5.80  6.4  7.9
  4. SepalWidth     150  3.054000  0.433594  2.0  2.8  3.00  3.3  4.4
  5. PetalLength    150  3.758667  1.764420  1.0  1.6  4.35  5.1  6.9
  6. PetalWidth     150  1.198667  0.763161  0.1  0.3  1.30  1.8  2.5
复制代码

从输出结果中可以看到每列数据的平均值等统计数值,较简单不多说。


4. 聚类分析,代码如下:
  1. irisK3=cluster.KMeans(n_clusters=3,random_state=1) #分为3类
  2. irisFeatures=iris.ix[:,1:4] #去掉Name列
  3. #print irisFeatures.head()
  4. irisK3.fit(irisFeatures)
  5. print irisK3.labels_ #输出聚类结果
复制代码

输出结果如下:

  1. irisK3=cluster.KMeans(n_clusters=3,random_state=1) #分为3类
  2. irisFeatures=iris.ix[:,1:4] #去掉Name列
  3. #print irisFeatures.head()
  4. irisK3.fit(irisFeatures)
  5. print irisK3.labels_ #输出聚类结果
  6. [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  7. 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  8. 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 0 2 2 2 2
  9. 2 2 2 2 2 2 2 2 0 2 2 2 0 2 2 0 2 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2
  10. 2 2]
复制代码


在Python中利用sklearn库中的cluster.Kmeans对irisFeatures进行聚类分析,并输出聚类结果。


5.决策树模型,代码如下

  1. target=iris["Name"] #目标变量
  2. data=iris.ix[:,1:4] #自变量
  3. train_data,test_data,train_target,test_target=cross_validation.train_test_split(data,
  4.                 target,test_size=0.24,random_state=0) #分成训练集、测试集(占0.24)
  5. clf=tree.DecisionTreeClassifier(criterion='gini', max_depth=6,
  6.                                   min_samples_split=5) #CART算法
  7. clf_fit=clf.fit(train_data, train_target) #开始fit
  8. #print clf_fit
  9. train_est=clf.predict(train_data) #预测训练集
  10. test_est=clf.predict(test_data) #预测测试集
  11. sum=0
  12. for i in range(36):   
  13.     if test_est[i]==test_target[i]:
  14.         sum=sum+1        
  15. print 'test_accuracy=',"%.2f%%"%(sum*1.0/36*100) #测试集预测正确率

  16. sum=0
  17. for i in range(114):   
  18.     if train_est[i]==train_target[i]:
  19.         sum=sum+1        
  20. print 'tarin_accuracy=',"%.2f%%"%(sum*1.0/114*100) #训练集预测正确率
复制代码

输出结果:

  1. target=iris["Name"] #目标变量
  2. data=iris.ix[:,1:4] #自变量
  3. train_data,test_data,train_target,test_target=cross_validation.train_test_split(data,
  4.                 target,test_size=0.24,random_state=0) #分成训练集、测试集(占0.24)
  5. clf=tree.DecisionTreeClassifier(criterion='gini', max_depth=6,
  6.                                   min_samples_split=5) #CART算法
  7. clf_fit=clf.fit(train_data, train_target) #开始fit
  8. #print clf_fit
  9. train_est=clf.predict(train_data) #预测训练集
  10. test_est=clf.predict(test_data) #预测测试集
  11. sum=0
  12. for i in range(36):   
  13.     if test_est[i]==test_target[i]:
  14.         sum=sum+1        

  15. print 'test_accuracy=',"%.2f%%"%(sum*1.0/36*100) #测试集预测正确率

  16. sum=0
  17. for i in range(114):   
  18.     if train_est[i]==train_target[i]:
  19.         sum=sum+1        

  20. print 'tarin_accuracy=',"%.2f%%"%(sum*1.0/114*100) #训练集预测正确率

  21. test_accuracy= 97.22%
  22. tarin_accuracy= 98.25%
复制代码

利用CART算法对iris数据集建立模型,并预测结果,同时输出训练集测试集的预测正确率。相关说明及代码含义均在代码中已注释。


最后:以上仅为小例子,实际问题要比这个复杂的多:数据清洗、模型选择、调参等等!因为网上教程给出完整数据、代码及结果的资料不多,所以把自己的浅薄经验分享给大家!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Python数据分析 python 数据分析 classifier Validation 编程语言 第三方 文章 动态 而且

已有 4 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
李会超 + 80 精彩帖子
fantuanxiaot + 100 + 5 + 5 + 5 精彩帖子
客初 + 60 + 2 + 3 + 2 精彩帖子
jerker + 5 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 240  论坛币 + 5  学术水平 + 12  热心指数 + 13  信用等级 + 12   查看全部评分

沙发
jerker 发表于 2015-10-28 10:05:11 |只看作者 |坛友微信交流群
沙发?
已有 1 人评分经验 收起 理由
kychan + 100 精彩沙发

总评分: 经验 + 100   查看全部评分

使用道具

藤椅
henry_l 发表于 2015-10-28 10:12:56 |只看作者 |坛友微信交流群
jerker 发表于 2015-10-28 10:05
沙发?

使用道具

板凳
那就痛快点嘛 在职认证  发表于 2015-11-4 10:52:39 |只看作者 |坛友微信交流群
非常不错

使用道具

报纸
dream521 发表于 2015-11-5 09:05:33 |只看作者 |坛友微信交流群
很厉害

使用道具

地板
yungas 发表于 2016-4-20 18:35:02 |只看作者 |坛友微信交流群
我这边在实验的时候发现有几个问题是版本影响,需要注意
1、iris=pd.read_csv("C:\\Users\\Administrator\\Desktop\\iris.csv",header=False)
需要改为iris=pd.read_csv("C:\\Users\\Administrator\\Desktop\\iris.csv")
2、irisFeatures=iris.ix[:,1:4] #去掉Name列
需要改为irisFeatures=iris.ix[:,0:4] #去掉Name列
3、test_target属性为series,有index与values两个属性,可使用test_target.values查看Name值
因此程序中的test_target需要改为test_target.values,train_target改为train_target.values

使用道具

7
yungas 发表于 2016-4-20 18:37:04 |只看作者 |坛友微信交流群
这样才能查看相应元素,如test_target或train_target的值,进而用于比较计算

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 09:58