《Python数据分析与挖掘实战》代码问题
本文转自: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)]
- #拉格朗日插值代码
- import pandas as pd #导入数据分析库Pandas
- from scipy.interpolate import lagrange #导入拉格朗日插值函数
- inputfile = ‘data/catering_sale.xls’ #销量数据路径
- outputfile = ‘tmp/sales.xls’ #输出数据路径
- data = pd.read_excel(inputfile) #读入数据
- data[u ‘销量’ ][(data[u ‘销量’ ] < 400 ) | (data[u ‘销量’ ] > 5000 )] = None #过滤异常值,将其变为空值
- #自定义列向量插值函数
- #s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
- def ployinterp_column(s, n, k= 5 ):
- y = s[list(range(n-k, n)) + list(range(n+ 1 , n+ 1 +k))] #取数
- y = y[y.notnull()] #剔除空值
- return lagrange(y.index, list(y))(n) #插值并返回拉格朗日插值结果
- #逐个元素判断是否需要插值
- for i in data.columns:
- for j in range(len(data)):
- if (data[i].isnull())[j]: #如果为空即插值。
- data[i][j] = ployinterp_column(data[i], j)
- 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)]
- 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)]
-- coding:utf-8 --
- #拉格朗日插值代码
- import pandas as pd #导入数据分析库Pandas
- from scipy.interpolate import lagrange #导入拉格朗日插值函数
- inputfile = ‘data/catering_sale.xls’ #销量数据路径
- outputfile = ‘tmp/sales.xls’ #输出数据路径
- data = pd.read_excel(inputfile) #读入数据
- #data[u’销量’][(data[u’销量’] < 400) | (data[u’销量’] > 5000)] = None #过滤异常值,将其变为空值
- row_indexs = (data[u ‘销量’ ] < 400 ) | (data[u ‘销量’ ] > 5000 ) #得到过滤数据的索引
- data.loc[row_indexs,u ‘销量’ ] = None #过滤数据
- #自定义列向量插值函数
- #s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
- def ployinterp_column(s, n, k= 5 ):
- y = s[list(range(n-k, n)) + list(range(n+ 1 , n+ 1 +k))] #取数
- y = y[y.notnull()] #剔除空值
- return lagrange(y.index, list(y))(n) #插值并返回拉格朗日插值结果
- #逐个元素判断是否需要插值
- for i in data.columns:
- for j in range(len(data)):
- if (data[i].isnull())[j]: #如果为空即插值。
data[i][j] = ployinterp_column(data[i], j)
- data.loc[j,i] = ployinterp_column(data[i], j)
- 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)]
- #-- coding: utf-8 --
- #数据规范化
- import pandas as pd
- import numpy as np
- datafile = ‘data/normalization_data.xls’ #参数初始化
- data = pd.read_excel(datafile, header = None ) #读取数据
- print (data - data.min())/(data.max() - data.min()) #最小-最大规范化
- print (data - data.mean())/data.std() #零-均值规范化
- 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)]
- #-- coding: utf-8 --
- #数据规范化
- import pandas as pd
- datafile = ‘data/discretization_data.xls’ #参数初始化
- data = pd.read_excel(datafile) #读取数据
- data = data[u ‘肝气郁结证型系数’ ].copy()
- k = 4
- d1 = pd.cut(data, k, labels = range(k)) #等宽离散化,各个类比依次命名为0,1,2,3
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html pd.cut
- #等频率离散化
- w = [ 1.0 *i/k for i in range(k+ 1 )]
- w = data.describe(percentiles = w)[ 4 : 4 +k+ 1 ] #使用describe函数自动计算分位数
- w[ 0 ] = w[ 0 ]*( 1 - 1e - 10 )
- d2 = pd.cut(data, w, labels = range(k))
- from sklearn.cluster import KMeans #引入KMeans
- kmodel = KMeans(n_clusters = k, n_jobs = 4 ) #建立模型,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 plt
- plt.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[dj], [j for i in d[dj]], ‘o’ )
- plt.ylim(- 0.5 , k- 0.5 )
- return plt
- cluster_plot(d1, k).show()
- cluster_plot(d2, k).show()
- 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数据分析与挖掘实战》代码问题相关推荐
- python数据分析与挖掘实战 配套资源_[课程学习]Python数据分析与挖掘实战 配套完整数据和源代码 rar文件[25.46MB]-码姐姐下载...
该资源为<python数据分析与挖掘实战>一书的配套的资源代码,鉴于大多数读者很难找到此资源,特此分... 大小:20.99MB | 2020-05-14 19:07:04 本资源是pyt ...
- 《Python数据分析与挖掘实战》一3.1 数据质量分析
本节书摘来自华章出版社<Python数据分析与挖掘实战>一书中的第3章,第3.1节,作者 张良均 王路 谭立云 苏剑林,更多章节内容可以访问云栖社区"华章计算机"公众号 ...
- 《Python数据分析与挖掘实战》第7章-聚类+绘制雷达图
本文是基于<Python数据分析与挖掘实战>的第七章的数据--<航空公司客户价值分析>做的分析对部分代码,做出补充,对原文中的雷达图进行了实现. 1. 背景与目标分析 此项目旨 ...
- (八)Python数据分析与挖掘实战(实战篇)——中医证型关联规则挖掘
这个专栏用来记录我在学习和实践<Python数据分析与挖掘实战>一书时的一些知识点总结和代码实现. 文章目录 背景和目标 数据 原始属性表 脚本 discretization.py apr ...
- 《Python数据分析与挖掘实战》第8章——中医证型关联规则挖掘(Apriori关联)
本文是基于<Python数据分析与挖掘实战>的实战部分的第八章的数据--<中医证型关联规则挖掘>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 主要有 ...
- 《Python数据分析与挖掘实战》Chapter8中医证型关联规则挖掘笔记
最近在学习<Python数据分析与挖掘实战>中的案例,写写自己的心得. 代码分为两大部分:1.读取数据并进行聚类分析 2. ...
- Python数据分析与挖掘实战期末考复习(抱佛脚啦)
期末三天赛高考我真的会谢,三天学完数据挖掘--真的很极限了的. 课本是那本绿色的Python数据分析与挖掘实战(第2版),作者张良均- 图片来自老师给的ppt,以下内容是我自己总结的,自己复习用,覆盖 ...
- 《Python数据分析与挖掘实战》第10章(下)——DNN2 筛选得“候选洗浴事件”3 构建模型
本文是基于<Python数据分析与挖掘实战>的实战部分的第10章的数据--<家用电器用户行为分析与事件识别> 做的分析. 接着前一篇文章的内容,本篇博文重点是处理用水事件中的属 ...
- python数据分析与挖掘实战 之笔记2
<python数据分析与挖掘实战>学习笔记2 经过前面章节的分析,即对数据进行探索和预处理,得到了处理后的数据.根据所得到的数据建立分类与预测.聚类分析.关联规则.时序模式.和偏差检测等模 ...
- 《Python数据分析与挖掘实战》第8章——Apriori关联规则
本文是基于<Python数据分析与挖掘实战>的实战部分的第八章的数据--<中医证型关联规则挖掘>做的分析. 旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码. 主要有 ...
最新文章
- B类产品的科学化设计与分析流程
- mysql查询表名匹配只有字母的_MySQL按某些匹配字母查询表
- Linux 内存管理与系统架构设计
- 如何做一名出色的屌丝码农?
- 自定义的Spinner文字居中
- Spring 在xml配置里配置事务
- html大小和浏览器可视区域一样吗,浏览器窗口可视区域大小和网页尺寸和网页卷去的距离与偏移量...
- linux用六维BT
- 【Spring-AOP】底层类ProxyConfig,ProxyProcessorSupport分析
- 知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3
- C语言指针 与字符串的学习
- 图片干扰背景处理,简单易懂
- 使用PDman进行数据库设计
- 六、利用ESP32搭建网络服务器(一)
- UVC之MJPEG流
- 迅为《i.MX8MM开发板使用手册1.4版》大更新
- ie 11 打印 iframe 404 降级解决方案
- 机房布线的至高境界,美到窒息
- Rancher 磁盘空间不足问题处理
- 订单23系统服务器,死亡搁浅寻物系统服务器任务内容介绍-死亡搁浅寻物系统服务器任务流程详情_牛游戏网...
热门文章
- html 实时计算字数,JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决...
- jasper report 子报表中嵌套子报表
- pyhton分类时画混淆矩阵
- 深入理解计算机系统(第三版)家庭作业 第八章
- RK3308 WIFI驱动调试
- Hadoop系列之-7、Hadoop3.x的介绍
- spring boot内嵌tomcat优雅的开启apr模式
- python干货分享/网址总结
- 【MC 网易-我的世界-mod开发基础笔记】 --- 创建第一个空白Mod
- 从一到无穷大 #3 对象存储.浅谈