【机器学习】嘿马机器学习(科学计算库)第10篇:Pandas,5.8 高级处理-数据离散化【附代码文档】

举报
程序员一诺python 发表于 2025/09/22 20:27:33 2025/09/22
【摘要】 1.机器学习常用科学计算库包括基础定位、目标。2. 人工智能概述涵盖人工智能应用场景、人工智能小案例、人工智能发展必备三要素、人工智能机器学习和深度学习。3. 机器学习概述包括机器学习工作流程、什么是机器学习、模型评估(回归模型评估、拟合)、Azure机器学习模型搭建、完整机器学习项目流程。4. 机器学习基础环境安装与使用包括Jupyter Notebook使用(一级标题、Ju

🏆🏆🏆教程全知识点简介:1.机器学习常用科学计算库包括基础定位、目标。2. 人工智能概述涵盖人工智能应用场景、人工智能小案例、人工智能发展必备三要素、人工智能机器学习和深度学习。3. 机器学习概述包括机器学习工作流程、什么是机器学习、模型评估(回归模型评估、拟合)、Azure机器学习模型搭建、完整机器学习项目流程。4. 机器学习基础环境安装与使用包括Jupyter Notebook使用(一级标题、Jupyter Notebook中自动补全代码等相关功能拓展)。5. Matplotlib可视化涵盖Matplotlib HelloWorld(什么是Matplotlib、实现简单Matplotlib画图折线图、画出温度变化图、准备数据、创建画布、绘制折线图、显示图像、构造x轴刻度标签、修改坐标刻度显示、设置中文字体、设置正常显示符号、保存图片)、添加坐标轴刻度、添加网格显示、添加描述信息、图像保存、设置图形风格、常见图形绘制(常见图形种类意义、散点图绘制)。6. Numpy包括Numpy优势、N维数组ndarray(ndarray属性)、基本操作(生成数组方法、生成0和1数组、从现有数组生成、创建符合正态分布股某票涨跌幅数据)、数组间运算(数组与数的运算)。7. Pandas数据结构包括Series、DataFrame。8. 文件读取与存储涵盖CSV(read_csv)、HDF(read_hdf与to_hdf)、JSON(read_josn)。9. 高级处理数据离散化包括为什么要离散化、什么是数据离散化、股某票涨跌幅离散化(读取股某票数据、将股某票涨跌幅数据进行分组、股某票涨跌幅分组数据变成one_hot编码)、案例实现。


📚📚仓库code.zip 👉直接-->:   https://gitee.com/yinuo112/AI/blob/master/机器学习/嘿马机器学习(科学计算库)/note.md    🍅🍅

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

Pandas

学习目标

  • 了解Numpy与Pandas的不同
  • 说明Pandas的Series与Dataframe两种结构的区别
  • 了解Pandas的MultiIndex与panel结构
  • 应用Pandas实现基本数据操作
  • 应用Pandas实现数据的合并
  • 应用crosstab和pivot_table实现交叉表与透视表
  • 应用groupby和聚合函数实现数据的分组与聚合
  • 了解Pandas的plot画图功能
  • 应用Pandas实现数据的读取和存储

5.8 高级处理-数据离散化

学习目标

  • 目标

  • 应用cut、qcut实现数据的区间分组

  • 应用get_dummies实现数据的one-hot编码

1 为什么要离散化

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

2 什么是数据的离散化

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

离散化有很多种方法,这使用一种最简单的方式去操作

  • 原始人的身高数据:165,174,160,180,159,163,192,184
  • 假设按照身高分几个区间段:150~165, 165~180,180~195

这样 将数据分到了三个区间段,我可以对应的标记为矮、中、高三个类别,最终要处理成一个"哑变量"矩阵

3 股某票的涨跌幅离散化

对股某票每日的"p_change"进行离散化

3.1 读取股某票的数据

先读取股某票的数据,筛选出p_change数据

data = pd.read_csv("./data/stock_day.csv")
p_change= data['p_change']

3.2 将股某票涨跌幅数据进行分组

使用的工具:

  • pd.qcut(data, q):

  • 对数据进行分组将数据分组,一般会与value_counts搭配使用,统计每组的个数

  • series.value_counts():统计分组次数

# 自行分组


qcut = pd.qcut(p_change, 10)


# 计算分到每个组数据个数


qcut.value_counts()

自定义区间分组:

  • pd.cut(data, bins)
# 自己指定分组区间


bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = 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_counts, prefix="rise")

4 小结

  • 数据离散化【知道】

  • 可以用来减少给定连续属性值的个数

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

  • qcut、cut实现数据分组【知道】

  • qcut:大致分为相同的几组

  • cut:自定义分组区间

  • get_dummies实现哑变量矩阵【知道】

5.9 高级处理-合并

学习目标

  • 目标

  • 应用pd.concat实现数据的合并

  • 应用pd.merge实现数据的合并

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

1 pd.concat实现数据合并

  • pd.concat([data1, data2], axis=1)

  • 按照行或列进行合并,axis=0为列索引,axis=1为行索引

比如 将刚才处理好的one-hot编码与原数据合并

# 按照行索引进行


pd.concat([data, dummies], axis=1)

2 pd.merge

  • pd.merge(left, right, how='inner', on=None)

  • 可以指定按照两组数据的共同键值对合并或者左右各自

  • left: DataFrame
  • right: 另一个DataFrame
  • on: 指定的共同键
  • how:按照什么方式连接
Merge method SQL Join Name Description
left LEFT OUTER JOIN Use keys from left frame only
right RIGHT OUTER JOIN Use keys from right frame only
outer FULL OUTER JOIN Use union of keys from both frames
inner INNER JOIN Use intersection of keys from both frames

2.1 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']})



# 默认内连接


result = pd.merge(left, right, on=['key1', 'key2'])

  • 左连接
result = pd.merge(left, right, how='left', on=['key1', 'key2'])

  • 右连接
result = pd.merge(left, right, how='right', on=['key1', 'key2'])

  • 外链接
result = pd.merge(left, right, how='outer', on=['key1', 'key2'])

3 总结

  • pd.concat([数据1, 数据2], axis=**)【知道】
  • pd.merge(left, right, how=, on=)【知道】

  • how -- 以何种方式连接

  • on -- 连接的键的依据是哪几个

5.10 高级处理-交叉表与透视表

学习目标

  • 目标

  • 应用crosstab和pivot_table实现交叉表与透视表


1 交叉表与透视表什么作用

探究股某票的涨跌与星期几有关?

以下图当中表示,week代表星期几,1,0代表这一天股某票的涨跌幅是好还是坏,里面的数据代表比例

可以理解为所有时间为星期一等等的数据当中涨跌幅好坏的比例

  • 交叉表:交叉表用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)
  • pd.crosstab(value1, value2)

  • 透视表:透视表是将原有的DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数

  • data.pivot_table()

    • DataFrame.pivot_table([], index=[])

2 案例分析

2.1 数据准备

  • 准备两列数据,星期数据以及涨跌幅是好是坏数据
  • 进行交叉表计算

[Starlette 文档]

# 寻找星期几跟股某票张得的关系




# 1、先把对应的日期找到星期几


date = pd.to_datetime(data.index).weekday
data['week'] = date



# 2、假如把p_change按照大小去分个类0为界限


data['posi_neg'] = np.where(data['p_change'] > 0, 1, 0)



# 通过交叉表找寻两列数据的关系


count = pd.crosstab(data['week'], data['posi_neg'])

[Python-dotenv 文档]

但是 看到count只是每个星期日子的好坏天数,并没有得到比例,该怎么去做?

  • 对于每个星期一等的总天数求和,运用除法运算求出比例
# 算数运算,先求和


sum = count.sum(axis=1).astype(np.float32)



# 进行相除操作,得出比例


pro = count.div(sum, axis=0)
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。