Pandas-05-数据离散化
1. 为什么要离散化
连续属性离散化的目的是为了简化数据结构,数据结构离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。
2. 什么是数据的离散化
连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数、值代表落在每个子区间中的属性值。
3. 股票的涨跌幅离散化
对股票每日的"p_change"进行离散化
3.1. 读取股票数据
data = pd.read_csv("./data/stock_day.csv")
p_change = data["p_change"]
2018-02-27 2.68
2018-02-26 3.02
2018-02-23 2.42
2018-02-22 1.64
2018-02-14 2.05
...
2015-03-06 8.51
2015-03-05 2.02
2015-03-04 1.57
2015-03-03 1.44
2015-03-02 2.62
Name: p_change, Length: 643, dtype: float64
3.2. 将股票涨跌幅数据进行分组
- pd.qcut(data, q):
- 对数据进行分组,q为组数,一般会与value_counts搭配使用,统计每组的个数
- series.values_counts():统计每组个数
# 自行分组
qcut = pd.qcut(p_change, 10)
# 计算分到每组数据个数
qcut.value_counts()
(5.27, 10.03] 65
(0.26, 0.94] 65
(-0.462, 0.26] 65
(-10.030999999999999, -4.836] 65
(2.938, 5.27] 64
(1.738, 2.938] 64
(-1.352, -0.462] 64
(-2.444, -1.352] 64
(-4.836, -2.444] 64
(0.94, 1.738] 63
Name: p_change, dtype: int64
自定义区间分组:
- pd.cut(data, bins):
- data:要分组的数据
- bins:列表,自定义的区间列表:[-2, -1, 0, 1, 2]
# 自己指定分区区间
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_cut = pd.cut(p_change, bins)
3.3. 股票涨跌幅分组数据变成one-hot编码
-
什么是one-hot编码
把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1。其又被称为热编码。
把下图中左边的表格转化为右边形式表示:

-
pandas.get_dummies(data, prefix=None)
- data:array-like,Series,or DataFrame
- prefix:分组名字前缀
# 得出one-hot编码矩阵 dummies = pd.get_dummies(p_cut, prefix="rise")
4. 总结
- 数据离散化
- 可以用来减少给定连续属性值的个数
- 在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。
- qcut、cut实现数据分组
- qcut:大致分为数量相同的几组
- cut:自定义分组区间
- get_dummies实现哑变量矩阵

浙公网安备 33010602011771号