Pandas数据离散化

数据离散化:

什么是数据的离散化:

  • 连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。
    Pandas数据离散化

为什么要离散化:

  • 连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。

如何实现数据的离散化:

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’])
    Pandas数据离散化

自动分组:

Pandas数据离散化
Pandas数据离散化

转换成one-hot编码:

Pandas数据离散化

统计各组中的数量:

Pandas数据离散化

自定义分组:

  • bins = [150, 165, 180, 195]
    Pandas数据离散化
转换成one-hot编码:

Pandas数据离散化

统计各组中的数量:

Pandas数据离散化

案例:股票涨跌幅离散化。

我们对股票每日的“p_change”进行离散化。

读取数据:

Pandas数据离散化

筛选出p_change数据:

Pandas数据离散化
Pandas数据离散化

自动分组:

Pandas数据离散化

统计各组中的数据:

Pandas数据离散化

离散化:

Pandas数据离散化

自定义分组:

  • bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
    Pandas数据离散化
统计各组中的数据:

Pandas数据离散化

离散化:

Pandas数据离散化
Pandas数据离散化

总结:

Pandas数据离散化
Pandas数据离散化

  • 提示:如果你的数据由多张表组成,那么有时候需要将不同的内容合并在一起分析。

按方向合并pd.concat():

Pandas数据离散化
Pandas数据离散化

将这两个数据集先按照行索引进行合并:

Pandas数据离散化

将这两个数据集再按照列索引进行合并(对于这两个数据集按照列索引进行合并来说没有意义,会产生很多nan):

Pandas数据离散化

按索引合并pd.merge():

Pandas数据离散化
Pandas数据离散化
Pandas数据离散化
Pandas数据离散化
Pandas数据离散化
Pandas数据离散化
Pandas数据离散化

具体演示:

准备数据:

  • 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’]})
    Pandas数据离散化
    Pandas数据离散化
    Pandas数据离散化
内连接:是实现中用的最多的。

Pandas数据离散化

  • 这两个表共有的键都保留下来了,不共有的键就不要了。
默认就是内连接。

Pandas数据离散化

左连接:

Pandas数据离散化

右连接:

Pandas数据离散化

外连接:

Pandas数据离散化

总结:

Pandas数据离散化
Pandas数据离散化

交叉表与透视表:

交叉表与透视表有什么作用:
Pandas数据离散化
Pandas数据离散化

  • 拿下面这个样本数据来说:星期0这一天股票涨了49.6%,跌了50.4%。
    Pandas数据离散化
  • 下面是画图进行展示:
    Pandas数据离散化
使用crosstab(交叉表)实现:

Pandas数据离散化
Pandas数据离散化
Pandas数据离散化
Pandas数据离散化

api手册:pd.crosstab(星期数据列,涨跌幅数据列)

数据准备:
先来准备星期数据列:Pandas数据离散化
Pandas数据离散化
Pandas数据离散化
Pandas数据离散化

将字符串类型的索引转换为日期类型的索引:

Pandas数据离散化

  • 取出日期中的年份:
    Pandas数据离散化
  • 取出日期中的月份:
    Pandas数据离散化
  • 取出日期中的星期:
    Pandas数据离散化
为源数据增加一个星期列:

Pandas数据离散化
Pandas数据离散化

  • 这样就可以从源数据集中取出这个星期列数据:
    Pandas数据离散化
  • 准备涨跌幅数据列:
    Pandas数据离散化
进行交叉表计算:

Pandas数据离散化

  • 计算结果表示:星期0,涨了62个,跌了63个。
将交叉表的结果进行保存:

Pandas数据离散化

  • 按列进行求和:
    Pandas数据离散化
  • 也可以:
    Pandas数据离散化
  • 也可以按行进行求和:
    Pandas数据离散化
进行除法运算,得到比例数据:

Pandas数据离散化
Pandas数据离散化

画图进行显示:

Pandas数据离散化
在jupyter notebook中上面的代码需要运行两次才可以出图。
添加stacked=True以堆叠的形式进行显示:
Pandas数据离散化

分组与聚合

分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况,分组以后一般再会调用聚合函数,也就是人们常说的分组以后再聚合。

什么是分组与聚合:

Pandas数据离散化

分组与聚合API:

Pandas数据离散化

  • 准备数据:
  • 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]
    })
    Pandas数据离散化
    按颜色分组,再对price1进行聚合:
    Pandas数据离散化
    再使用一个聚合函数就可以将数据进行显示出来了:
    Pandas数据离散化
    也可以:

Pandas数据离散化
也可以:
Pandas数据离散化
Pandas数据离散化
Pandas数据离散化
除了求最大值以外,还可以求平均数,以前所学习过的都可以使用:
Pandas数据离散化

默认就是as_index=True:表示得到的最终结果为Series类型,如果为False得到的最终结果为DataFrame类型。

Pandas数据离散化
Pandas数据离散化

  • 下面这种语法不能使用as_index=False:提示信息为:只能应用在DataFrame类型中,对Series类型不适用。
    Pandas数据离散化