pandas:数据离散化与离散化数据的后期处理(one-hot)

简介: pandas:数据离散化与离散化数据的后期处理(one-hot)

1、什么是数据离散化?

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

 


2、为什么要进行数据离散化?

 数据离散化可以有效的降低时间复杂度和内存开销。

 对于某些机器学习算法来说,像决策树、随机森林、朴素贝叶斯。他们的数据集大多数都是针对的离散型数据。因此做出有效的数据离散化,对于降低计算复杂度和提高算法准确率有很重要的影响。

 离散型数据更容易理解。针对收入字段,一个人是3000,一个人是20000。如果将收入看成一个连续型变量,对于这么多数字,我们需要通过数字层面的比较才能知道,谁属于高薪,谁属于低薪,看起来并不直观。如果将收入转换为离散化数据类型(低薪、中薪、高薪),就能够很清楚的看出原始数字的含义。

 离散化后的特征对异常数据有很强的鲁棒性:对于年龄这个特征,如果年龄>30是1,否则0。假如特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。

 更多数据离散化的内容,可以参考如下文章:https://zhuanlan.zhihu.com/p/91181935

 


3、怎么进行数据离散化?

 对于获取到的数据集,会有很多个特征,也就是我们常说的字段。有的特征是连续性数据类型,有的数据本身就是离散型数据变量。

 已经是离散型数据变量,我们不用管。但是对于连续性数据变量,如果需要进行数据离散化,应该怎么办?


1)pd.cut()和pd.qcut()的参数说明

qcut():表示自动分组,一般用的不太多。

cut():表示自定义分组,这个用的最多。

语法:pd.cut(x, bins=, labels=, right=, )

x表示一个序列(列表、Series等),也就是我们想要离散化的数据类型。

bins在定义分组的时候,可以传入一个序列,进行自定义分组。

labels表示给每个分组起别名。

right=False表示左闭右开区间。默认是right=True表示左开右闭区间。

pd.cut()一般会与value_counts()进行搭配使用,用于统计每个分组的个数。

2)pd.cut()和pd.qcut()的使用说明

① pd.qcut()的使用说明

x = [165,174,160,180,159,163,192,184]
s = pd.Series(x,index=["NO1:165","NO1:174","NO1:160","NO1:180",\
                       "NO1:159","NO1:163","NO1:192","NO1:184"])
s_qcut = pd.qcut(s,3)
print(s_qcut)


结果如下:

image.png


② pd.cut()的使用说明

x = [165,174,160,180,159,163,192,184]
s = pd.Series(x,index=["NO1:165","NO1:174","NO1:160","NO1:180",\
                       "NO1:159","NO1:163","NO1:192","NO1:184"])
s_cut = pd.cut(s,bins=[150,165,180,195])
print(s_cut)
# 添加labels参数后
x = [165,174,160,180,159,163,192,184]
s = pd.Series(x,index=["NO1:165","NO1:174","NO1:160","NO1:180",\
                       "NO1:159","NO1:163","NO1:192","NO1:184"])
s_cut = pd.cut(s,bins=[150,165,180,195],labels=["低","中","高"])
print(s_cut)
# 添加right参数后
x = [165,174,160,180,159,163,192,184]
s = pd.Series(x,index=["NO1:165","NO1:174","NO1:160","NO1:180",\
                       "NO1:159","NO1:163","NO1:192","NO1:184"])
s_cut = pd.cut(s,bins=[150,165,180,195],labels=["低","中","高"],right=False)
print(s_cut)



结果如下:

image.png


3)pd.cut()配合value_counts()使用

import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
x = [165,174,160,180,159,163,192,184]
s = pd.Series(x,index=["NO1:165","NO1:174","NO1:160","NO1:180",\
                       "NO1:159","NO1:163","NO1:192","NO1:184"])
s_cut = pd.cut(s,bins=[150,165,180,195],labels=["低","中","高"],right=False)
count = s_cut.value_counts()
print(count)
count.plot(kind="bar")
plt.xticks(rotation=360)


结果如下:


image.png

4、离散化数据的后期处理(one-hot编码)

 不管是连续性数据变量,还是离散型数据编码,都是数据的一个特征,都有它独特的含义。但是对于离散型数据编码,一般展现出来的是文本字符串,我们虽然认识,但是机器不认识,因此在处理这些数据的时候,就需要将其变成数字。

 比如说,我们有这样两组数据。一组数据代表的是性别,一组数据代表的是物种,另外一组数据代表的是毛发。如下所示。

image.png

 从图中可以看出。对于性别来说,不是男、就是女,一般的处理方式都是采取二值编码,即“男=1”,“女=0”。对于物种来说,有很多个物种,图中我们采取的是1,2,3…这种格式的编码。对于毛发来说,我们采取的也是1,2,3…这种格式的编码。

 但是很显然不太合适,对于性别、物种来说,采用图中的编码方式,很显然3>2>1>0,计算机会将这样的数字会等效看代,因为存在着一种大小关系。但是对于毛发、学历来说,采用这种编码方式,却是可以的,因此毛发有多有少,学历有高有低,因此不同的数字大小,表示等级的不同。

 因此,我们需要使用one-hot编码处理一下,最终效果如下。

image.png


1)pd.get_dummies(data,prefix=)的使用

data表示数组、Series或DataFrame。

prefix表示给分组加前缀。

① data传入一个Series

x = [165,174,160,180,159,163,192,184]
s = pd.Series(x,index=["NO1:165","NO1:174","NO1:160","NO1:180",\
                       "NO1:159","NO1:163","NO1:192","NO1:184"])
s_cut = pd.cut(s,bins=[150,165,180,195],labels=["低","中","高"])
print(s_cut)
pd.get_dummies(s_cut)


结果如下:

image.png


② data传入一个DataFrame

df = pd.DataFrame({"性别":["男","女","男"],
                   "物种":["主","狗","猫"]})
print(df)
pd.get_dummies(df)


结果如下:

image.png

相关文章
|
27天前
|
存储 人工智能 自然语言处理
Pandas数据应用:自然语言处理
本文介绍Pandas在自然语言处理(NLP)中的应用,涵盖数据准备、文本预处理、分词、去除停用词等常见任务,并通过代码示例详细解释。同时,针对常见的报错如`MemoryError`、`ValueError`和`KeyError`提供了解决方案。适合初学者逐步掌握Pandas与NLP结合的技巧。
62 20
|
28天前
|
存储 数据挖掘 计算机视觉
Pandas数据应用:图像处理
Pandas 是一个强大的 Python 数据分析库,主要用于处理结构化数据。尽管它不是专门为图像处理设计的,但可以利用其功能辅助图像处理任务。本文介绍如何使用 Pandas 进行图像处理,包括图像读取、显示、基本操作及常见问题解决方法。通过代码案例解释如何将图像转换为 DataFrame 格式,并探讨数据类型不匹配、内存溢出和颜色通道混淆等问题的解决方案。总结中指出,虽然 Pandas 可作为辅助工具,但在实际项目中建议结合专门的图像处理库如 OpenCV 等使用。
57 18
|
22天前
|
机器学习/深度学习 存储 算法
Pandas数据应用:客户流失预测
本文介绍如何使用Pandas进行客户流失预测,涵盖数据加载、预处理、特征工程和模型训练。通过解决常见问题(如文件路径错误、编码问题、列名不一致等),确保数据分析顺利进行。特征工程中创建新特征并转换数据类型,为模型训练做准备。最后,划分训练集与测试集,选择合适的机器学习算法构建模型,并讨论数据不平衡等问题的解决方案。掌握这些技巧有助于有效应对实际工作中的复杂情况。
134 95
|
25天前
|
机器学习/深度学习 数据采集 JSON
Pandas数据应用:机器学习预处理
本文介绍如何使用Pandas进行机器学习数据预处理,涵盖数据加载、缺失值处理、类型转换、标准化与归一化及分类变量编码等内容。常见问题包括文件路径错误、编码不正确、数据类型不符、缺失值处理不当等。通过代码案例详细解释每一步骤,并提供解决方案,确保数据质量,提升模型性能。
143 88
|
1月前
|
分布式计算 数据可视化 数据挖掘
Pandas数据应用:社交媒体分析
本文介绍如何使用Pandas进行社交媒体数据分析,涵盖数据获取、预处理、探索性分析和建模的完整流程。通过API获取数据并转换为DataFrame格式,处理缺失值和数据类型转换问题。利用Matplotlib等库进行可视化,展示不同类型帖子的数量分布。针对大规模数据集提供内存优化方案,并结合TextBlob进行情感分析。最后总结常见问题及解决方案,帮助读者掌握Pandas在社交媒体数据分析中的应用。
156 96
|
19天前
|
数据采集 存储 供应链
Pandas数据应用:库存管理
本文介绍Pandas在库存管理中的应用,涵盖数据读取、清洗、查询及常见报错的解决方法。通过具体代码示例,讲解如何处理多样数据来源、格式不一致、缺失值和重复数据等问题,并解决KeyError、ValueError等常见错误,帮助提高库存管理效率和准确性。
95 72
|
2月前
|
存储 数据采集 数据可视化
Pandas数据应用:电子商务数据分析
本文介绍如何使用 Pandas 进行电子商务数据分析,涵盖数据加载、清洗、预处理、分析与可视化。通过 `read_csv` 等函数加载数据,利用 `info()` 和 `describe()` 探索数据结构和统计信息。针对常见问题如缺失值、重复记录、异常值等,提供解决方案,如 `dropna()`、`drop_duplicates()` 和正则表达式处理。结合 Matplotlib 等库实现数据可视化,探讨内存不足和性能瓶颈的应对方法,并总结常见报错及解决策略,帮助提升电商企业的数据分析能力。
143 73
|
30天前
|
数据采集 机器学习/深度学习 搜索推荐
Pandas数据应用:推荐系统
在数字化时代,推荐系统是互联网公司的重要组成部分,Pandas作为Python的强大数据分析库,在数据预处理和特征工程中发挥关键作用。常见问题包括缺失值、重复值处理及数据类型转换,解决方案分别为使用`fillna()`、`drop_duplicates()`和`astype()`等函数。常见报错如KeyError、ValueError和MemoryError可通过检查列名、确保数据格式正确及分块读取数据等方式解决。合理运用Pandas工具,可为构建高效推荐系统奠定坚实基础。
59 18
Pandas数据应用:推荐系统
|
23天前
|
数据采集 存储 算法
Pandas数据应用:市场篮子分析
市场篮子分析是一种用于发现商品间关联关系的数据挖掘技术,广泛应用于零售业。Pandas作为强大的数据分析库,在此领域具有显著优势。本文介绍了市场篮子分析的基础概念,如事务、项集、支持度、置信度和提升度,并探讨了数据预处理、算法选择、参数设置及结果解释中的常见问题与解决方案,帮助用户更好地进行市场篮子分析,为企业决策提供支持。
64 29
|
18天前
|
数据采集 供应链 数据可视化
Pandas数据应用:供应链优化
在当今全球化的商业环境中,供应链管理日益复杂。Pandas作为Python的强大数据分析库,能有效处理库存、物流和生产计划中的大量数据。本文介绍如何用Pandas优化供应链,涵盖数据导入、清洗、类型转换、分析与可视化,并探讨常见问题及解决方案,帮助读者在供应链项目中更加得心应手。
39 21