Pandas数据离散化
数据离散化:
什么是数据的离散化:
- 连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。
为什么要离散化:
- 连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。
如何实现数据的离散化:
案例:将上面的例子用pandas实现。
准备数据:
- data = pd.Series([165,174,160,180,159,163,192,184], index=[‘No1:165’, ‘No2:174’,‘No3:160’, ‘No4:180’, ‘No5:159’, ‘No6:163’, ‘No7:192’, ‘No8:184’])
自动分组:
转换成one-hot编码:
统计各组中的数量:
自定义分组:
- bins = [150, 165, 180, 195]
转换成one-hot编码:
统计各组中的数量:
案例:股票涨跌幅离散化。
我们对股票每日的“p_change”进行离散化。
读取数据:
筛选出p_change数据:
自动分组:
统计各组中的数据:
离散化:
自定义分组:
- bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
统计各组中的数据:
离散化:
总结:
- 提示:如果你的数据由多张表组成,那么有时候需要将不同的内容合并在一起分析。
按方向合并pd.concat():
将这两个数据集先按照行索引进行合并:
将这两个数据集再按照列索引进行合并(对于这两个数据集按照列索引进行合并来说没有意义,会产生很多nan):
按索引合并pd.merge():
具体演示:
准备数据:
- left = pd.DataFrame({‘key1’: [‘K0’, ‘K0’, ‘K1’, ‘K2’],
‘key2’: [‘K0’, ‘K1’, ‘K0’, ‘K1’],
‘A’: [‘A0’, ‘A1’, ‘A2’, ‘A3’],
‘B’: [‘B0’, ‘B1’, ‘B2’, ‘B3’]}) - right = pd.DataFrame({‘key1’: [‘K0’, ‘K1’, ‘K1’, ‘K2’],
‘key2’: [‘K0’, ‘K0’, ‘K0’, ‘K0’],
‘C’: [‘C0’, ‘C1’, ‘C2’, ‘C3’],
‘D’: [‘D0’, ‘D1’, ‘D2’, ‘D3’]})
内连接:是实现中用的最多的。
- 这两个表共有的键都保留下来了,不共有的键就不要了。
默认就是内连接。
左连接:
右连接:
外连接:
总结:
交叉表与透视表:
交叉表与透视表有什么作用:
- 拿下面这个样本数据来说:星期0这一天股票涨了49.6%,跌了50.4%。
- 下面是画图进行展示:
使用crosstab(交叉表)实现:
api手册:pd.crosstab(星期数据列,涨跌幅数据列)
数据准备:
先来准备星期数据列:
将字符串类型的索引转换为日期类型的索引:
- 取出日期中的年份:
- 取出日期中的月份:
- 取出日期中的星期:
为源数据增加一个星期列:
- 这样就可以从源数据集中取出这个星期列数据:
- 准备涨跌幅数据列:
进行交叉表计算:
- 计算结果表示:星期0,涨了62个,跌了63个。
将交叉表的结果进行保存:
- 按列进行求和:
- 也可以:
- 也可以按行进行求和:
进行除法运算,得到比例数据:
画图进行显示:
在jupyter notebook中上面的代码需要运行两次才可以出图。
添加stacked=True以堆叠的形式进行显示:
分组与聚合
分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况,分组以后一般再会调用聚合函数,也就是人们常说的分组以后再聚合。
什么是分组与聚合:
分组与聚合API:
- 准备数据:
- col = pd.DataFrame({
“color”: [“white”, “red”, “green”, “red”, “green”],
“object”: [“pen”, “pencil”, “pencil”, “ashtray”, “pen”],
“price1”: [5.56, 4.20, 1.30, 0.56, 2.75],
“price2”: [4.75, 4.12, 1.60, 0.75, 3.15]
})
按颜色分组,再对price1进行聚合:
再使用一个聚合函数就可以将数据进行显示出来了:
也可以:
也可以:
除了求最大值以外,还可以求平均数,以前所学习过的都可以使用:
默认就是as_index=True:表示得到的最终结果为Series类型,如果为False得到的最终结果为DataFrame类型。
- 下面这种语法不能使用as_index=False:提示信息为:只能应用在DataFrame类型中,对Series类型不适用。