【数据处理】Pandas库:数据离散化

165 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

注意:本案例使用 Jupyter Notebook 进行案例演示

1. 数据离散化

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

  • one-hot编码(哑变量)
  • 假设有一组原始身高的数据
  • 我们按照身高分为几个区间段
  • 这样我们将数据分到了三个区间段,我可以对应的标记为矮,中,高三个类别,最终要处理成一个哑变量矩阵

对数据进行分组:

  1. 自动分组:pd.qcut(data, bins)
  • data:传入数据
  • bins:想要分的组数
  1. 自定义分组:pd.cut(data, [])
  • data:传入数据
  • []:设定好的区间以列表的形式传进来
  1. 将分组好的结果转换成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()

运行结果如下图所示:

image.png

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能够查看每组数据的样本个数。

image.png

对上一步分好组的数据进行离散化,将其转换成one-hot编码

  • 将每个分好的组作为表头,并且在该表头之前加上“涨跌幅”字段
## 3. 离散化
pd.get_dummies(sr_stock, prefix="涨跌幅")

运行结果如下图所示:

image.png

1.2 自定义分组

  1. 自定义分组:pd.cut(data, [])
  • data:传入数据
  • []:设定好的区间以列表的形式传进来
  1. 将分组好的结果转换成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()

自定义分组结果如下图所示:

image.png

对自定义分组后的数据进行one-hot编码

  • 在每个分组表头前加上"rise"字段
# one-hot
stock_change = pd.get_dummies(sr_stock1, prefix="rise")
stock_change

运行结果如下图所示:

image.png