数据挖掘中有些算法,特别是分类算法,只能在离散型数据上进行分析,然而大部分数据集常常是连续值和离散值并存的。因此,为了使这类算法发挥作用,需要对数据集中连续型属性进行离散化操作。

那么,如何对连续型属性离散化呢?常见的有等宽分箱法等频分箱法

等宽分箱法的思想是,将数据均匀划分成n等份,每份的间距相等

等频分箱法的思想是,将观察点均匀分成n等份,每份的观察点数相同

在对数据离散化前,需要先处理异常点敏感问题,即我们需要首先设定一个阈值将异常数据移除。有两种思路:

1.设定阈值为90%,将数据从小到大排序,移除全部数据最小的5%和最大的5%数据

2.  设定阈值为90%,将数据从小到大排序,然后对所有数据求和,并计算每个数据占总和的比例,移除占比10%的数据

在这里,我们实现的方法是等宽分箱法,针对连续型数据集,代码比较简单基础,在此抛砖引玉,大家可以在代码的基础上增添自己需要的功能。

先介绍2个方法:

等步长和等频

1. cut()
cut()函数可以将一个数组中的数据切分成几个部分。
将数据分为几个部分,就称为几个面元。
cut(数据数组,面元数组)>>> array = [3, 60, 43, 100, 52, 36, 37, 0, 80, 1000] # 数组
>>> bins = [0, 25, 50, 75, 100] # 切割成什么
>>> cat = pd.cut(array, bins)
>>> cat # cat是一个Categorical(类别型)类型
[(0, 25], (50, 75], (25, 50], (75, 100], (50, 75], (25, 50], (25, 50], NaN, (75, 100], NaN]
Categories (4, interval[int64]): [(0, 25] < (25, 50] < (50, 75] < (75, 100]]
>>> cat.codes # 数组原来的元素数据第几个面元
array([ 0,  2,  1,  3,  2,  1,  1, -1,  3, -1], dtype=int8)
>>> pd.value_counts(cat) # 每个面元有多少个元素
(25, 50]     3
(75, 100]    2
(50, 75]     2
(0, 25]      1
dtype: int64还可以不指定面元的界限,直接传入一个整数参数,cut()会按照指定的数字,将元素划分为相应的几部分。>>> pd.cut(array, 5)
[(-1.0, 200.0], (-1.0, 200.0], (-1.0, 200.0], (-1.0, 200.0], (-1.0, 200.0], (-1.0, 200.0], (-1.0, 200.0], (-1.0, 200.0], (-1.0, 200.0], (800.0, 1000.0]]
Categories (5, interval[float64]): [(-1.0, 200.0] < (200.0, 400.0] < (400.0, 600.0] < (600.0, 800.0] < (800.0, 1000.0]]
2. qcut()cut()函数划分得到的面元,每个面元的数量不同。而qcut()可以保证每个面元的数量相同,且每个面元的区间大小不等。
>>> pd.qcut(array, 5)
[(-0.001, 29.4], (55.2, 84.0], (40.6, 55.2], (84.0, 1000.0], (40.6, 55.2], (29.4, 40.6], (29.4, 40.6], (-0.001, 29.4], (55.2, 84.0], (84.0, 1000.0]]
Categories (5, interval[float64]): [(-0.001, 29.4] < (29.4, 40.6] < (40.6, 55.2] < (55.2, 84.0] < (84.0, 1000.0]]
>>> cat = pd.qcut(array, 5)
>>> pd.value_counts(cat)
(84.0, 1000.0]    2
(55.2, 84.0]      2
(40.6, 55.2]      2
(29.4, 40.6]      2
(-0.001, 29.4]    2
dtype: int64

下面这个例子:

离散化:数值属性(例如:年龄)的原始值用区间标签(0-10,11-20等)代替。

  1. x=[1,1,5,5,5,5,8,8,10,10,10,10,14,14,14,14,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,20,2,20,20,20,20,20,20,21,21,21,25,25,25,25,25,28,28,30,30,30]
  2. x=pd.Series(x)
  3. s=pd.cut(x,bins=[0,10,20,30])
  4. d=pd.get_dummies(s)

这里采用了哑编码,用OneHotEncoder也可以实现哑编码

sklearn的preprocessing预处理方法参考http://blog.csdn.net/nkwangjie/article/details/17471889

python 数据离散化和面元划分相关推荐

  1. python数据离散化

    1.概述 离散化,就是把无限空间中有限的个体映射到有限的空间中.数据离散的操作大多是针对连续数据进行的,处理之后的数据值域分布将从连续属性变为离散属性. 离散化通常针对连续数据进行处理,但是在很多情况 ...

  2. python 数据离散化_数据离散化 - 等宽等频聚类离散 - Python代码

    数据离散化 - 等宽&等频&聚类离散 - Python代码 发布时间:2018-08-17 17:55, 浏览次数:1267 , 标签: Python 目录 等宽离散 等频离散 聚类离 ...

  3. 三种方法实现数据离散化-python实现

    #-*- coding: utf-8 -*- #数据规范化 import pandas as pddatafile = '../data/discretization_data.xls' #参数初始化 ...

  4. 数据离散化 - 等宽等频聚类离散 - Python代码

    目录 等宽离散 等频离散 聚类离散 附录: rolling_mean函数解释 cut函数解释 其他数据预处理方法 一些数据挖掘算法中,特别是某些分类算法(eg:ID3算法.Aprioroi算法等),要 ...

  5. 数据离散化之chimerge算法的实现(python版)(以莺尾花数据为例)

    今天介绍一种数据离散化方法--chimerge,该方法的主要思想是把所有的连续数据排序并分成多个区间,每次计算相邻两个区间的卡方(chi)值,(卡方见卡方分析,)每次取卡方值最小的两个区间进行合并. ...

  6. python 离散化_数据离散化与Python实现

    一.原理 数据离散化(也称,数据分组),指将连续的数据进行分组,使其变为一段离散化的区间. 根据离散化过程中是否考虑类别属性,可以将离散化算法分为:有监督算法和无监督算法.事实证明,由于有监督算法充分 ...

  7. 数据离散化与Python实现

    一.原理         数据离散化(也称,数据分组),指将连续的数据进行分组,使其变为一段离散化的区间. 根据离散化过程中是否考虑类别属性,可以将离散化算法分为:有监督算法和无监督算法.事实证明,由 ...

  8. python数据预处理

    最近在看python数据分析与挖掘实战这本书,所以就顺手做个笔记,方便日后忘记了查找.这本书前面五章主要讲的是数据挖掘的建模过程,包括数据探索.数据预处理以及挖掘建模常用算法等几个方面.后面十章是案例 ...

  9. 进行数据离散化的原因_数据离散化及其KMeans算法实现的理解

    摘要 这篇文章尝试借用数据离散化这个事给大家讲明白K-Means算法的含义. 数据离散化的理解 数据离散化是数据预处理的一个非常重要的步骤,就是将连续的数据分成几个段. 举个简单例子,好比我们一个班上 ...

最新文章

  1. 随行付微服务测试之静态代码扫描
  2. 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】
  3. php异常处理示例,php异常处理示例
  4. 自己写的socket 多线程 通讯
  5. cnpm在ubuntu19.10下面的安装以及vue.js中el的意思
  6. Spring Boot笔记-接收RabbitMQ队列中的消息
  7. python 线程池 map_python 线程池 map_python ThreadPoolExecutor线程池使用-阿里云开发者社区...
  8. 【译】数据显示:中国的程序员是世界上最牛的程序员?
  9. 20169212《Linux内核原理及分析》第十二周作业
  10. JVM的内存区域划分(转摘)
  11. web端访问远程桌面
  12. 手把手教你:人脸识别的视频打码(基于opencv的人脸打马赛克)
  13. vlan绑定_华为S5700交换机设置IP-MAC绑定功能
  14. 安卓手机玩游戏卡顿怎么解决_安卓手机卡顿如何解决?教你四招,流畅度立刻飙升!...
  15. Conhost.exe是什么进程?为什么会启动运行?图文详解
  16. sqlplus连接到远程数据库
  17. 中国普天并入中国电科,世界人工智能大会开幕,格力将接入鸿蒙
  18. C++ 流 文件操作(输入输出流)
  19. 停车场车位识别(一)
  20. AXIDMA 驱动的使用

热门文章

  1. 10年老电脑如何提速_告别求人!3个方法教你怎样让你的电脑快的嗖嗖的!
  2. c语言课程设计作业摇一摇,口才星教案第二册.doc
  3. php中mysql和mysqli_PHP中mysql和mysqli的区别
  4. 扫地机器人的特点描写_描写扫地机器人五年级作文500字
  5. python从mysql导出大量数据_python批量导出导入MySQL用户的方法
  6. python selenium鼠标点击_Python+Selenium学习--鼠标事件
  7. 大学文科计算机考试大纲,(文科)大学计算机信息技术课程考核大纲(文科)介绍.doc...
  8. 用户id生成规则_阿里/网易/美团/58用户画像中的ID体系建设
  9. java操作数据库挂死_如何在Java程序中处理数据库超时与死?
  10. c语言课程设计平时成绩,计算中心