持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
注意:本案例使用 Jupyter Notebook 进行案例演示
1. 数据离散化
连续属性的离散化就是将连续属性的值域上,将值域划分成为若干个离散区间,最后用不同的符号或整数值代表落在每个子区间中的属性值
- one-hot编码(哑变量)
- 假设有一组原始身高的数据
- 我们按照身高分为几个区间段
- 这样我们将数据分到了三个区间段,我可以对应的标记为矮,中,高三个类别,最终要处理成一个哑变量矩阵
对数据进行分组:
- 自动分组:
pd.qcut(data, bins)
- data:传入数据
- bins:想要分的组数
- 自定义分组:
pd.cut(data, [])
- data:传入数据
- []:设定好的区间以列表的形式传进来
- 将分组好的结果转换成one-hot编码:pd.get_dummies(sr, predix)
- sr:上一步分组好的结果
- prefix:前缀(分组名字)
首先,导入相关库并读取数据
import numpy as np
import pandas as pd
# 1. 读取数据
stockkk = pd.read_csv("stock_new.csv")
stockkk.head()
运行结果如下图所示:
1.1 自动分组
下面对数据进行自动分组:
- 自动分组:pd.qcut(data, bins)
- data:传入数据,p_change
- bins:想要分的组数,10,分了10组
首先获取了p_change表中这一列数据,只针对这一列数据进行分组,我们想要将其分成10组,因此在
qcut中传入参数10。
p_change = stockkk["p_change"]
# 2. 数据离散化
## 2.1 自动分组
sr_stock = pd.qcut(p_change, 10)
sr_stock.value_counts()
运行结果如下图所示:其中将p_change数据按照从最小到最大之间分成了10组,并且.value_counts能够查看每组数据的样本个数。
对上一步分好组的数据进行离散化,将其转换成one-hot编码
- 将每个分好的组作为表头,并且在该表头之前加上“涨跌幅”字段
## 3. 离散化
pd.get_dummies(sr_stock, prefix="涨跌幅")
运行结果如下图所示:
1.2 自定义分组
- 自定义分组:
pd.cut(data, [])
- data:传入数据
[]:设定好的区间以列表的形式传进来
- 将分组好的结果转换成one-hot编码:pd.get_dummies(sr, predix)
- sr:上一步分组好的结果
- prefix:前缀(分组名字)
传入自己自定义的分组方式bins,然后使用.cut进行自定义分组
## 2.2 自定义分组
bins1 = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
sr_stock1 = pd.cut(p_change, bins1)
sr_stock1.value_counts()
自定义分组结果如下图所示:
对自定义分组后的数据进行one-hot编码
- 在每个分组表头前加上"rise"字段
# one-hot
stock_change = pd.get_dummies(sr_stock1, prefix="rise")
stock_change
运行结果如下图所示: