目录

数据离散化的应用场景和必要性

针对时间数据的离散化

针对多值离散数据的离散化

针对连续数据的离散化

针对连续数据的二值化

参考资料:《Python数据分析与数据化运营》宋天龙

数据离散化的应用场景和必要性

数据离散化大多是针对连续数据进行的,处理之后的数据将从连续属性变为离散属性。离散化处理的必要性:

  • 节约计算资源,提高计算效率。
  • 算法模型(尤其是分类模型)的计算需要。虽然很多模型,例如决策树可以支持输入连续型数据,但是决策树本身会先将连续型数据转化为离散型数据,因此离散化转换是一个必要步骤。
  • 增强模型的稳定性和准确度。数据离散化之后,处于异常状态的数据不会明显的突出异常特征,而是会被划分为一个子集中的一部分,因此异常数据对模型的影响会大大降低,尤其是基于距离计算的模型(例如K均值、协同过滤等)效果明显。
  • 特定数据处理和分析的必要步骤,尤其在图像处理方面应用广泛。大多数图像做特征检测(以及其他基于特征的分析)时,都需要先将图像做二值化处理,二值化也是离散化的一种。
  • 模型结果应用和部署的需要。如果原始数据的值域分布过多,或值域划分不符合业务逻辑,那么模型结果将很难被业务理解并应用。

说明:离散化通常针对连续数据进行处理,但是在很多情况下也可以针对已经是离散化的数据进行处理。这种场景一般是离散数据本身的划分过于复杂、琐碎甚至不符合业务逻辑,需要进一步做数据聚合或重新划分。

针对时间数据的离散化

针对时间数据的离散化主要用于以时间为主要特征的数据集中和粒度转换,离散化处理后将分散的时间特征转换为更高层次的时间特征。

常见的针对时间数据的离散化操作分为以下两类:

  • 针对一天中的时间离散化。一般是将时间戳转换为秒、分钟、小时或上下午。
  • 针对日粒度以上数据的离散化。一般是将日期转化为周数、周几、月、工作日或休息日、季度、年等。

针对多值离散数据的离散化

针对多值离散数据的离散化指的是要进行离散化处理的数据是分类或顺序数据。有可能是因为之前划分的逻辑有问题,需要重新划分,这种问题通常都是由于业务逻辑的变更。

针对连续数据的离散化

针对连续数据的离散化是主要的离散化应用,在分类或关联分析中应用尤其广泛,这些算法的结果以类别标识为基础。

常见实现连续数据离散化的方法包括:

  • 分位数法:使用四分位、五分位等分位数进行离散化处理,这种方法简单易行。
  • 距离区间法:可使用等距区间或自定义区间的方式进行离散化,这种操作更加灵活且能满足自定义需求,另外该方法(尤其是等距区间)可以较好的保持数据原有的分布。
  • 频率区间法:将数据按照不同数据的频率分布进行排序,然后按照等频率或指定频率离散化,这种方法会把数据变换成均匀分布,好处是各区间的观察值是相同的,不足是已经改变了原有数据的分布状态。
  • 聚类法:例如使用K均值将样本集分为多个离散化的簇。
  • 卡方:通过使用基于卡方的离散化方法,找出数据的最佳临近区间并合并,形成较大的区间。

针对连续数据的二值化

在很多场景下,我们可能需要将变量特征进行二值化操作:每个数据点跟阀值比较,大于阀值设置为固定值(例如1),小于阀值设置为固定值(例如0),然后得到一个二值化数据集。

说明:二值化后的值的设置取决于场景,例如大部分数据的处理可以设置为1或0;在图像处理中则会设置为0或255。

代码如下:

# 导入库
import pandas as pd
from sklearn.cluster import KMeans
from sklearn import preprocessing# 读取数据
df = pd.read_table('data.txt', names=['id', 'amount', 'income', 'datetime','age'])
print(df.head(5))  # 一、针对时间数据的离散化
for i, single_data in enumerate(df['datetime']):  single_data = pd.to_datetime(single_data)  # 将时间字符串格式转换为datetime格式df['datetime'][i] = single_data.weekday()  # 离散化为周几
print(df.head(5))  # 二、针对多值离散数据的离散化
map_df = pd.DataFrame([['0-10', '0-40'], ['10-20', '0-40'], ['20-30', '0-40'], ['30-40', '0-40'],['40-50', '40-80'],['50-60', '40-80'], ['60-70', '40-80'], ['70-80', '40-80'],['80-90', '>80'], ['>90', '>80']],columns=['age', 'age2'])  # 定义一个要转换的新区间
df_tmp = df.merge(map_df, how='inner')
df = df_tmp.drop('age', axis=1)
df=df.rename(columns={'age2':'age'})
print(df.head(5))  # 三、针对连续数据的离散化
# 方法1:自定义分箱区间实现离散化
bins = [0, 200, 1000, 5000, 10000]  # 自定义区间边界
df['amount1'] = pd.cut(df['amount'], bins)  # 使用边界做离散化
print(df.head(5))  # 方法2:使用4分位数实现离散化
df['amount2'] = pd.qcut(df['amount'], 4, labels=['bad', 'medium', 'good','awesome'])  # 按四分位数进行分隔
print(df.head(5))  # 方法3 使用聚类法实现离散化
kmeans_model = KMeans(n_clusters=4, random_state=0)  # 创建KMeans模型并指定要聚类数量
kmeans_result = kmeans_model.fit_predict(df[['amount']])  # 建模聚类
df['amount3'] = kmeans_result  # 新离散化的数据合并到原数据框
df = df.drop('amount', axis=1)
print(df.head(5))  # 四、针对连续数据的二值化
binarizer_scaler = preprocessing.Binarizer(threshold=df['income'].mean())  # 建立Binarizer模型对象
income_tmp = binarizer_scaler.fit_transform(df[['income']])  # Binarizer标准化转换
df['income'] = income_tmp
print(df.head(5))  

上述过程中,主要需要考虑的关键点是:如何根据不同的数据特点和建模需求选择最合适的离散化方式,因为离散化方式的是否合理会直接影响后续数据建模和应用效果。还需要说明的是,有些模型对于离散化有更多的要求:

  • 使用决策树时往往倾向于少量的离散化区间,原因是过多的离散化将使得规则过多受到碎片区间的影响。
  • 关联规则需要对所有特征一起离散化,原因是关联规则关注的是所有特征的关联关系,如果对每个列单独离散化将失去整体规则性。

数据预处理:数据离散化相关推荐

  1. 一、数据预处理——数据归一化 数据标准化

    一.数据预处理--数据归一化 & 数据标准化 点击标题即可获取文章相关的源代码文件哟! 1.1 数据无量纲化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据 ...

  2. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  3. python抽样_python数据预处理 :数据抽样解析

    何为数据抽样: 抽样是数据处理的一种基本方法,常常伴随着计算资源不足.获取全部数据困难.时效性要求等情况使用. 抽样方法: 一般有四种方法: 随机抽样 直接从整体数据中等概率抽取n个样本.这种方法优势 ...

  4. 数据预处理 -----数据分箱

    一.定义 数据分箱(Binning)作为数据预处理的一部分,也被称为离散分箱或数据分段.其实分箱的概念其实很好理解,它的本质上就是把数据进行分组. 分箱就是把数据按特定的规则进行分组,实现数据的离散化 ...

  5. Pandas数据预处理|数据清理

    Pandas数据预处理(Data Preprocess)-数据清理 日期:2021/4/27 作者:就叫易易好了 注:本篇文章采用的数据集为"vgsales.csv",下载链接:h ...

  6. Python数据预处理数据的方法总结(使用sklearn-preprocessing)

    文章目录 数据预处理思路 数据预处理方法 1 标准化:去均值,方差规模化 2 规模化稀疏数据 3 规模化有异常值的数据 4 正则化Normalization 5 二值化–特征的二值化 6 类别特征编码 ...

  7. 数据标准化处理方法_机器学习系列-数据预处理-数据标准化(归一化)-理论

    在做一个具体的机器学习项目中,拿到收集到的数据后,一般都是需要做数据预处理,而标准化(暂时不考虑标准化和归一化的主要区别)是数据预处理中一个比较重要的环节,那么为什么需要对数据进行标准化处理呢? 数据 ...

  8. 数据预处理+数据清理

    1.概述 实际的数据库极易受噪声.缺失值和不一致数据的侵扰,因为数据库太大,并且多半来自多个异种数据源.低质量的数据将会导致低质量的挖掘结果.有大量的数据预处理技术: - - 数据清理:可以用来清楚数 ...

  9. 超全面 pandas 数据预处理+数据概览 处理技巧整理(持续更新版)

    这篇文章主要是整理下使用pandas的一些技巧,因为经常不用它,这些指令忘得真的很快.前段时间在数模美赛中已经栽过跟头了,不希望以后遇到相关问题的时候还去网上查(主要是太杂了).可能读者跟我有一样的问 ...

  10. 数据认知与数据预处理--数据认知

    一.数据类型 1.属性的定义 每一条数据可以称为数据集的一个样本,而每一条数据要用不同的特征描述出来,特征也称为属性. 属性通常分为两大类. 一类是定性描述的属性,其可以划分为标称属性,布尔属性,序值 ...

最新文章

  1. Linux/Centos7系统管理之深入理解Linux文件系统与日志分析
  2. 数据库-事务并发操作问题及并发的控制
  3. GIT的Push和Pull,强制Pull覆盖本地命令
  4. 【数据结构与算法】浅谈队列的应用
  5. 未来码农或可以备份一个自己的大脑
  6. 【博士后招聘】浙江大学杨杰课题组-医学AI/大数据分析/自然语言处理
  7. Vue:数组的过滤排序显示客户端实现
  8. Struts2(三)
  9. (转)思科VPP源码分析(dpdk node分析)
  10. 图书馆占座系统(二)
  11. 【综合实训】图书管理系统——详细设计说明书
  12. Vue组件化|通用组件开发——Notification通知组件
  13. 阿里语音识别看这一篇就够了
  14. 绘制微信字体大小调节器
  15. android:RecyclerView交互动画(上下拖动,左右滑动删除)
  16. 思科配置成网站服务器,思科路由器的配置NTP服务器的基本方法
  17. Netty通过Nginx配置 wss 协议访问(实践可行)
  18. [论文笔记] [2014] Deeply-Supervised Nets
  19. SQL Server 2008连载之数据类型
  20. 实例化servlet类[web.LoginServlet]异常

热门文章

  1. 105-为什么会有两种形式的消电离层组合
  2. Win10系统在vmware/virtualbox上使用packer和vagrant安装Metasploitable3
  3. 左手坐标系和右手坐标系详解
  4. 2019KDD CUP | 2019国际知识发现和数据挖掘竞赛
  5. 面对经济危机的8大奇谈怪论
  6. 《非暴力沟通》读后感(一)
  7. tfidf代码整理及理解
  8. (8)UVM 学会消息管理才会让你在验证中游刃有余
  9. kali sublist3r
  10. 网络蜘蛛-搜狐博客批量下载(之一)