本文转自:http://blog.csdn.net/qq_27469517/article/details/53482563

整个第四章都是数据预处理。

4.1是数据清洗。就是处理无关数据,缺失或者异常数据等等。

具体看书,就不赘述了,还是上代码实践。

书上给的代码是有问题的!

[python] view plain

copy

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jAWtEKzT-1625140728196)(https://code.csdn.net/assets/CODE_ico.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dm5KWCg6-1625140728201)(https://code.csdn.net/assets/ico_fork.svg)]

  1. #拉格朗日插值代码
  2. import pandas as pd #导入数据分析库Pandas
  3. from scipy.interpolate import lagrange #导入拉格朗日插值函数
    1. inputfile = ‘data/catering_sale.xls’ #销量数据路径
  4. outputfile = ‘tmp/sales.xls’ #输出数据路径
    1. data = pd.read_excel(inputfile) #读入数据
  5. data[u ‘销量’ ][(data[u ‘销量’ ] < 400 ) | (data[u ‘销量’ ] > 5000 )] = None #过滤异常值,将其变为空值
    1. #自定义列向量插值函数
  6. #s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
  7. def ployinterp_column(s, n, k= 5 ):
  8. y = s[list(range(n-k, n)) + list(range(n+ 1 , n+ 1 +k))] #取数
  9. y = y[y.notnull()] #剔除空值
  10. return lagrange(y.index, list(y))(n) #插值并返回拉格朗日插值结果
    1. #逐个元素判断是否需要插值
  11. for i in data.columns:
  12. for j in range(len(data)):
  13. if (data[i].isnull())[j]: #如果为空即插值。
  14. data[i][j] = ployinterp_column(data[i], j)
    1. data.to_excel(outputfile) #输出结果,写入文件

究其原因,应该是

[python] view plain

copy

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vWi8yavO-1625140728204)(https://code.csdn.net/assets/CODE_ico.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPbl52VH-1625140728209)(https://code.csdn.net/assets/ico_fork.svg)]

  1. data[u ‘销量’ ][(data[u ‘销量’ ] < 400 ) | (data[u ‘销量’ ] > 5000 )] = None #过滤异常值,将其变为空值

这句话有问题。

改正方法主要是 .loc 函数进行修改。

.loc 函数主要是选定指定列操作,参见 http://blog.csdn.net/chixujohnny/article/details/51095817

参考下面这个链接

http://blog.csdn.net/o1101574955/article/details/51627401

给出了修改版:

[python] view plain

copy

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2YXdM7H9-1625140728211)(https://code.csdn.net/assets/CODE_ico.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AGysG028-1625140728214)(https://code.csdn.net/assets/ico_fork.svg)]

  1. -- coding:utf-8 --

  2. #拉格朗日插值代码
  3. import pandas as pd #导入数据分析库Pandas
  4. from scipy.interpolate import lagrange #导入拉格朗日插值函数
    1. inputfile = ‘data/catering_sale.xls’ #销量数据路径
  5. outputfile = ‘tmp/sales.xls’ #输出数据路径
    1. data = pd.read_excel(inputfile) #读入数据
  6. #data[u’销量’][(data[u’销量’] < 400) | (data[u’销量’] > 5000)] = None #过滤异常值,将其变为空值
  7. row_indexs = (data[u ‘销量’ ] < 400 ) | (data[u ‘销量’ ] > 5000 ) #得到过滤数据的索引
  8. data.loc[row_indexs,u ‘销量’ ] = None #过滤数据
    1. #自定义列向量插值函数
  9. #s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
  10. def ployinterp_column(s, n, k= 5 ):
  11. y = s[list(range(n-k, n)) + list(range(n+ 1 , n+ 1 +k))] #取数
  12. y = y[y.notnull()] #剔除空值
  13. return lagrange(y.index, list(y))(n) #插值并返回拉格朗日插值结果
    1. #逐个元素判断是否需要插值
  14. for i in data.columns:
  15. for j in range(len(data)):
  16. if (data[i].isnull())[j]: #如果为空即插值。
  17. data[i][j] = ployinterp_column(data[i], j)

  18. data.loc[j,i] = ployinterp_column(data[i], j)
  19. data.to_excel(outputfile) #输出结果,写入文件

这时候我在 http://blog.csdn.net/aq_cainiao_aq/article/details/53257136
也看见一篇,我没试过,可以参考。

def那段代码应该要结合拉格朗日插值法具体看,现在简单分析一下:

s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5。

返回的拉格朗日函数有两个值,y.index应该是插值位置,list(y) 就是结果吧。

可惜没找到关于 lagrange 函数的说明,只能猜。

现在的问题是,日期全变成了 ######,想想怎么修改呢?

其实日期是没问题的,但是后面多了时分秒,太长了就变成了######。我不想要这个东西。

去百度搜索了很久,http://blog.csdn.net/dm_vincent/article/details/48696857
参考了一下这个,但是感觉没看懂。

不过呢,插值算是处理好了。

===================================================================================================

4.3讲的是数据变换

主要是数据的规范化处理,把数据转换成“适当的”形式。

代码就是狗屎,我自己补充了一下,给的代码不仅没有 print ,还tm少了一个 import,真的服了

[python] view plain

copy

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8rJZOfgw-1625140728215)(https://code.csdn.net/assets/CODE_ico.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fAKcQ8qY-1625140728216)(https://code.csdn.net/assets/ico_fork.svg)]

  1. #-- coding: utf-8 --
  2. #数据规范化
  3. import pandas as pd
  4. import numpy as np
    1. datafile = ‘data/normalization_data.xls’ #参数初始化
  5. data = pd.read_excel(datafile, header = None ) #读取数据
    1. print (data - data.min())/(data.max() - data.min()) #最小-最大规范化
  6. print (data - data.mean())/data.std() #零-均值规范化
  7. print data/ 10 **np.ceil(np.log10(data.abs().max())) #小数定标规范化

![](https://img-
blog.csdn.net/20161206112152305?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)

就是如此。

==================================================================================================

4.3.3讲的是连续属性离散化。 但是这代码都是什么鬼???

[python] view plain

copy

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDUWYvsM-1625140728218)(https://code.csdn.net/assets/CODE_ico.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WtnkAjDK-1625140728219)(https://code.csdn.net/assets/ico_fork.svg)]

  1. #-- coding: utf-8 --
  2. #数据规范化
  3. import pandas as pd
    1. datafile = ‘data/discretization_data.xls’ #参数初始化
  4. data = pd.read_excel(datafile) #读取数据
  5. data = data[u ‘肝气郁结证型系数’ ].copy()
  6. k = 4
    1. d1 = pd.cut(data, k, labels = range(k)) #等宽离散化,各个类比依次命名为0,1,2,3
  7. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html pd.cut

    1. #等频率离散化
  8. w = [ 1.0 *i/k for i in range(k+ 1 )]
  9. w = data.describe(percentiles = w)[ 4 : 4 +k+ 1 ] #使用describe函数自动计算分位数
  10. w[ 0 ] = w[ 0 ]*( 1 - 1e - 10 )
  11. d2 = pd.cut(data, w, labels = range(k))
    1. from sklearn.cluster import KMeans #引入KMeans
  12. kmodel = KMeans(n_clusters = k, n_jobs = 4 ) #建立模型,n_jobs是并行数,一般等于CPU数较好
  13. kmodel.fit(data.reshape((len(data), 1 ))) #训练模型
  14. c = pd.DataFrame(kmodel.cluster_centers_).sort( 0 ) #输出聚类中心,并且排序(默认是随机序的)
  15. w = pd.rolling_mean(c, 2 ).iloc[ 1 :] #相邻两项求中点,作为边界点
  16. w = [ 0 ] + list(w[ 0 ]) + [data.max()] #把首末边界点加上
  17. d3 = pd.cut(data, w, labels = range(k))
    1. def cluster_plot(d, k): #自定义作图函数来显示聚类结果
  18. import matplotlib.pyplot as plt
  19. plt.rcParams[ ‘font.sans-serif’ ] = [ ‘SimHei’ ] #用来正常显示中文标签
  20. plt.rcParams[ ‘axes.unicode_minus’ ] = False #用来正常显示负号
    1. plt.figure(figsize = ( 8 , 3 ))
  21. for j in range( 0 , k):
  22. plt.plot(data[dj], [j for i in d[dj]], ‘o’ )
    1. plt.ylim(- 0.5 , k- 0.5 )
  23. return plt
    1. cluster_plot(d1, k).show()
    1. cluster_plot(d2, k).show()
  24. cluster_plot(d3, k).show()

运行无限报错。回头再来试试。

以下内容转自http://blog.csdn.net/xuyaoqiaoyaoge/article/details/52678307

2.连续属性离散化

首先是确定分成几个区间,每个区间的范围多大,然后是将每个区间用符号或者整数值来表示。
1.等宽法
相同宽度的区间
2.等频法
将相同数量的记录放入每个区间
3.基于聚类的方法
先聚类,用K-Means,然后对簇进行处理,每个簇一个标记。
总之,区间的数量自己决定。

    #-*- coding: utf-8 -*-#数据离散化import pandas as pddatafile = 'E:/PythonMaterial/chapter4/demo/data/discretization_data.xls' #参数初始化data = pd.read_excel(datafile) #读取数据data = data[u'肝气郁结证型系数'].copy()#将这一列的数据抓出来k = 4#分成4个区间d1 = pd.cut(data, k, labels = range(k)) #等宽离散化,各个类比依次命名为0,1,2,3# print d1print pd.value_counts(d1)#等频率离散化,qcut函数就是用来做按照分位数切割的#如果是分成4个区间,可以使用qcut函数,4表示按照4分位数进行切割d2=pd.qcut(data,4,labels = range(k))# print d2print pd.value_counts(d2)#如果想分成10个等份,则如下w=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]d3 = pd.qcut(data, w, labels = range(10))# print d3print pd.value_counts(d3)#也可以按照任意的分位数进行分割,使得每个区间按照自己设定的个数展示w=[0,0.1,0.5,0.9,1]d4 = pd.qcut(data, w, labels = range(4))#labels是可以替换的,如:labels=['hao','zhong','yiban','huai']# print d4print pd.value_counts(d4)#基于聚类的划分from sklearn.cluster import KMeans #引入KMeanskmodel = KMeans(n_clusters = k, n_jobs = 1) #建立模型,n_jobs是并行数,一般等于CPU数较好kmodel.fit(data.reshape((len(data), 1))) #训练模型c = pd.DataFrame(kmodel.cluster_centers_).sort(0) #输出聚类中心,并且排序(默认是随机序的)w = pd.rolling_mean(c, 2).iloc[1:] #相邻两项求中点,作为边界点w = [0] + list(w[0]) + [data.max()] #把首末边界点加上d3 = pd.cut(data, w, labels = range(k))def cluster_plot(d, k): #自定义作图函数来显示聚类结果import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号plt.figure(figsize = (8, 3))for j in range(0, k):plt.plot(data[d==j], [j for i in d[d==j]], 'o')plt.ylim(-0.5, k-0.5)return pltcluster_plot(d1, k).show()cluster_plot(d2, k).show()cluster_plot(d3, k).show()
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

    1    5082    2750    1123     35Name: 肝气郁结证型系数, dtype: int641    2343    2330    2332    230Name: 肝气郁结证型系数, dtype: int646    970    974    952    948    939    921    925    917    903    89Name: 肝气郁结证型系数, dtype: int642    3711    3700     973     92Name: 肝气郁结证型系数, dtype: int64
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26



《Python数据分析与挖掘实战》代码问题相关推荐

  1. python数据分析与挖掘实战 配套资源_[课程学习]Python数据分析与挖掘实战 配套完整数据和源代码 rar文件[25.46MB]-码姐姐下载...

    该资源为<python数据分析与挖掘实战>一书的配套的资源代码,鉴于大多数读者很难找到此资源,特此分... 大小:20.99MB | 2020-05-14 19:07:04 本资源是pyt ...

  2. 《Python数据分析与挖掘实战》一3.1 数据质量分析

    本节书摘来自华章出版社<Python数据分析与挖掘实战>一书中的第3章,第3.1节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区"华章计算机"公众号 ...

  3. 《Python数据分析与挖掘实战》第7章-聚类+绘制雷达图

    本文是基于<Python数据分析与挖掘实战>的第七章的数据--<航空公司客户价值分析>做的分析对部分代码,做出补充,对原文中的雷达图进行了实现. 1. 背景与目标分析 此项目旨 ...

  4. (八)Python数据分析与挖掘实战(实战篇)——中医证型关联规则挖掘

    这个专栏用来记录我在学习和实践<Python数据分析与挖掘实战>一书时的一些知识点总结和代码实现. 文章目录 背景和目标 数据 原始属性表 脚本 discretization.py apr ...

  5. 《Python数据分析与挖掘实战》第8章——中医证型关联规则挖掘(Apriori关联)

    本文是基于<Python数据分析与挖掘实战>的实战部分的第八章的数据--<中医证型关联规则挖掘>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 主要有 ...

  6. 《Python数据分析与挖掘实战》Chapter8中医证型关联规则挖掘笔记

    最近在学习<Python数据分析与挖掘实战>中的案例,写写自己的心得. 代码分为两大部分:1.读取数据并进行聚类分析                                  2. ...

  7. Python数据分析与挖掘实战期末考复习(抱佛脚啦)

    期末三天赛高考我真的会谢,三天学完数据挖掘--真的很极限了的. 课本是那本绿色的Python数据分析与挖掘实战(第2版),作者张良均- 图片来自老师给的ppt,以下内容是我自己总结的,自己复习用,覆盖 ...

  8. 《Python数据分析与挖掘实战》第10章(下)——DNN2 筛选得“候选洗浴事件”3 构建模型

    本文是基于<Python数据分析与挖掘实战>的实战部分的第10章的数据--<家用电器用户行为分析与事件识别> 做的分析. 接着前一篇文章的内容,本篇博文重点是处理用水事件中的属 ...

  9. python数据分析与挖掘实战 之笔记2

    <python数据分析与挖掘实战>学习笔记2 经过前面章节的分析,即对数据进行探索和预处理,得到了处理后的数据.根据所得到的数据建立分类与预测.聚类分析.关联规则.时序模式.和偏差检测等模 ...

  10. 《Python数据分析与挖掘实战》第8章——Apriori关联规则

    本文是基于<Python数据分析与挖掘实战>的实战部分的第八章的数据--<中医证型关联规则挖掘>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 主要有 ...

最新文章

  1. B类产品的科学化设计与分析流程
  2. mysql查询表名匹配只有字母的_MySQL按某些匹配字母查询表
  3. Linux 内存管理与系统架构设计
  4. 如何做一名出色的屌丝码农?
  5. 自定义的Spinner文字居中
  6. Spring 在xml配置里配置事务
  7. html大小和浏览器可视区域一样吗,浏览器窗口可视区域大小和网页尺寸和网页卷去的距离与偏移量...
  8. linux用六维BT
  9. 【Spring-AOP】底层类ProxyConfig,ProxyProcessorSupport分析
  10. 知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3
  11. C语言指针 与字符串的学习
  12. 图片干扰背景处理,简单易懂
  13. 使用PDman进行数据库设计
  14. 六、利用ESP32搭建网络服务器(一)
  15. UVC之MJPEG流
  16. 迅为《i.MX8MM开发板使用手册1.4版》大更新
  17. ie 11 打印 iframe 404 降级解决方案
  18. 机房布线的至高境界,美到窒息
  19. Rancher 磁盘空间不足问题处理
  20. 订单23系统服务器,死亡搁浅寻物系统服务器任务内容介绍-死亡搁浅寻物系统服务器任务流程详情_牛游戏网...

热门文章

  1. html 实时计算字数,JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决...
  2. jasper report 子报表中嵌套子报表
  3. pyhton分类时画混淆矩阵
  4. 深入理解计算机系统(第三版)家庭作业 第八章
  5. RK3308 WIFI驱动调试
  6. Hadoop系列之-7、Hadoop3.x的介绍
  7. spring boot内嵌tomcat优雅的开启apr模式
  8. python干货分享/网址总结
  9. 【MC 网易-我的世界-mod开发基础笔记】 --- 创建第一个空白Mod
  10. 从一到无穷大 #3 对象存储.浅谈