前言

python数据处理与分析学习过程中,需要有这样的一种意识,即元“为什么选择了python而不是其他?”既然选择了python,那么在实际应用中,它到底哪里不一样?大家说的方便、快捷、高复用性具体体现在哪里?带着问题进行学习,会有事半功倍的效果,记忆力和识别能力也会有所提高。

在本文,小编跟大家分享的是数据处理与分析中的“离散化或面元”。8种python技巧,让连续数据离散化更简洁。

8种python技巧

为了便于分析,连续数据常常被离散化或拆分为“面元“(bin),假设有一组人员数据,而你希望将它们划分为不同的年龄组:

In [154]: ages=[20,22,25,27,21,23,37,31,61,45,41,32]

离散化或面元:cut()

接下来将这些数据划分为“18到25“、”26到35“、”35到60“以及”60以上“几个面元。要实现此功能,需要使用pandas的cut函数:

n [24]: ages=[20,22,25,27,21,23,37,31,61,45,41,32]
In [25]: bins=[18,25,35,60,100]
In [26]: cats=pd.cut(ages,bins)
In [27]: cats
Out[27]:
[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35],
(60, 100], (35, 60], (35, 60], (25, 35]]
Length: 12
Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]

codes属性:标号

In [29]: cats.codes

Out[29]: array([0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int8)

value_counts方法

该方法会按照离散化或面元结果,进行符合区间的值统计,具体使用方法如下:

In [30]: pd.value_counts(cats)
Out[30]:
(18, 25] 5
(35, 60] 3
(25, 35] 3
(60, 100] 1
dtype: int64

控制开/关:right=False

跟“区间“的数学符号一样,圆括号表示开端,而方括号则表示闭端(包括)。哪边是闭端可以通过right=False进行修改:

In [31]: pd.cut(ages,[18,26,36,61,100],right=False)

Out[31]:

[[18, 26), [18, 26), [18, 26), [26, 36), [18, 26), ..., [26, 36),

[61, 100), [36, 61), [36, 61), [26, 36)]

Length: 12

Categories (4, interval[int64]): [[18, 26) < [26, 36) < [36, 61) < [61, 100)]

设置面元名称:labels

设置自己的面元名称,将labels选项设置为一个列表或数组即可:

In [33]: group_names=['Youth','YoungAdult','MiddleAged','Senior']

In [34]: pd.cut(ages,bins,labels=group_names)

Out[34]:

[Youth, Youth, Youth, YoungAdult, Youth, ..., YoungAdult,

Senior, MiddleAged, MiddleAged, YoungAdult]

Length: 12

Categories (4, object): [Youth < YoungAdult < MiddleAged < Senior]

计算等长面元

如果向cut传入的是面元的数量而不是确切的面元边界,则它会根据数据的最小值和最大值计算等长面元。下面这个例子中,将一些均匀分布的数组分成四组:

In [35]: data=np.random.rand(20)

In [36]: pd.cut(data,4,precision=2)

Out[36]:

[(0.039, 0.27], (0.27, 0.5], (0.73, 0.95], (0.5, 0.73],

(0.039, 0.27], ..., (0.5, 0.73], (0.27, 0.5], (0.73, 0.95],

(0.039, 0.27], (0.73, 0.95]]

Length: 20

Categories (4, interval[float64]): [(0.039, 0.27] < (0.27, 0.5]

< (0.5, 0.73] < (0.73, 0.95]]

qcut()

qcut是一个非常类似于cut的函数,它可以根据样本分位数对数据进行面元划分。根据数据的分布情况,cut可能无法使各个面元中含有相同数量的数据点。而qcut由于使用的是样本分位数,因此可以得到大小基本相等的面元:

In [37]: data=np.random.randn(1000)

In [38]: cats=pd.qcut(data,4)

In [39]: cats

Out[39]:

[(-0.66, -0.0518], (0.68, 3.328], (-0.66, -0.0518], (0.68, 3.328],

(-3.452, -0.66], ..., (-3.452, -0.66], (0.68, 3.328], (-3.452, -0.66],

(-0.66, -0.0518], (-3.452, -0.66]]

Length: 1000

Categories (4, interval[float64]): [(-3.452, -0.66] < (-0.66, -0.0518]

< (-0.0518, 0.68] < (0.68, 3.328]]

In [40]: pd.value_counts(cats)

Out[40]:

(0.68, 3.328] 250

(-0.0518, 0.68] 250

(-0.66, -0.0518] 250

(-3.452, -0.66] 250

设置自定义分位数

跟cut一样,也可以设置自定义的分位数(0到1之间的数值,包含端点):

总结

离散化或面元是数据处理与分析中的常用方法。python提供了便捷、丰富的方法。该类方法通常是解决数据分析、机器学习或深度学习中,需要将连续性变量离散化的场景。8种不同的技巧均有其适用场景,无好与坏之分。大家可以实践操作进行体验,感谢大家关注!

cut out数据增强_被多种离散化场景困扰?8种python技巧!让数据处理更简单相关推荐

  1. cut out数据增强_谷歌大脑提出自动数据增强方法AutoAugment:可迁移至不同数据集...

    近日,来自谷歌大脑的研究者在 arXiv 上发表论文,提出一种自动搜索合适数据增强策略的方法 AutoAugment,该方法创建一个数据增强策略的搜索空间,利用搜索算法选取适合特定数据集的数据增强策略 ...

  2. 离散度计算公式 python_被多种离散化场景困扰?8种python技巧!让数据处理更简单...

    前言 python数据处理与分析学习过程中,需要有这样的一种意识,即元"为什么选择了python而不是其他?"既然选择了python,那么在实际应用中,它到底哪里不一样?大家说的方 ...

  3. cut out数据增强_数据增强:Mixup,Cutout,CutMix | Mosaic

    1.几种数据增强的比较 Mixup:将随机的两张样本按比例混合,分类的结果按比例分配: Cutout:随机的将样本中的部分区域cut掉,并且填充0像素值,分类的结果不变: CutMix:就是将一部分区 ...

  4. cut out数据增强_常见的数据增强项目和论文介绍

    在机器学习项目中,数据集对算法模型的性能是有很大的影响的,特别是现在深度学习,对于数据集的要求就更高了,经常我们都可能会遇到数据集数量太少的情况,这时候除了再人工搜集新的数据,另外一个做法就是数据增强 ...

  5. nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集

    nlp文本数据增强 Natural Language Processing (NLP) is one of the most important fields of study and researc ...

  6. 数据增强_浅析数据增强

    与计算机视觉中使用图像进行数据增强不同,NLP中文本数据增强是非常罕见的.这是因为图像的一些简单操作,如将图像旋转或将其转换为灰度,并不会改变其语义.语义不变变换的存在使增强成为计算机视觉研究中 举个 ...

  7. gan 总结 数据增强_白话GAN及其解决小样本问题的探讨

    作者:知乎-Curry 地址:https://www.zhihu.com/people/curry-5-28 一:白话GAN 本文尽量用少量的公式,浅显的语言来描述生成对抗网络,让未接触过GAN的人可 ...

  8. gan 总结 数据增强_[NLP]聊一聊,预处理和数据增强技术

    在基于margin-loss的句子相似度这个项目中,为了验证想法,找不到开放数据集,因此自己从新浪爱问爬取了数据.自己爬的数据和学界开放的数据对比,数据显得非常脏.这里有三个含义:第一:数据不规范,比 ...

  9. gan 总结 数据增强_吴恩达Deeplearning.ai国庆上新:GAN专项课程

    Coursera 刚刚上新了 GAN 的专项课程,或许在这个国庆假期,你应该学习一波了. 作者:蛋酱 生成对抗网络(Generative Adversarial Network,GAN)是当前功能最强 ...

最新文章

  1. python统计字符串中每个单词出现的次数_python中每个单词出现的次数是一组字符串?...
  2. LINUX检测服务并自动运行,一种Linux下的开机自动检测硬件信息的方法与流程
  3. 深入理解Java:注解(Annotation)基本概念、自定义注解、注解解析器
  4. 安装mysql5.15.7版本_YUM方法安装mysql5.7版本
  5. Shadow Brokers扬言兜售新漏洞攻击工具
  6. codeblock下载
  7. 19岁少女辍学就业,却遭身价2.5亿创业公司解雇
  8. C# dataGridView中的数据导出到excel
  9. 当当笔试java_20170921 当当和今日头条笔试题
  10. 部门年终总结会议有必要开吗?
  11. 麦克劳林公式求sin
  12. word中间有条横线怎么删除, 快捷生成的横线如何删除
  13. Win 10关机后电源灯不停闪烁的解决办法
  14. gtk设计简单的文本编辑器(1)
  15. 故障树手册(Fault Tree handbook)(4)
  16. eGPU 能否一战?- Tensorflow GPU 基准测试
  17. 保姆式教学:用Tableau制作盒须图(箱线图)
  18. python|安装skimage库报错:required to install pyproject.toml-based projects
  19. nib but the view outlet was not set 错误的解决办法。
  20. 输出1-100的奇数(每行输出6个)

热门文章

  1. C#调用系统的复制、移动、删除文件对话框
  2. [POJ1840 Eqs]
  3. 讲的是关于提高网站速度的内容|转自csdn
  4. DataTable/DataSet汇出Excel
  5. 04 Mysql之单表查询
  6. word2vec原理知识铺垫
  7. html5(八) IndexedDB
  8. C++ 中list、vector和deque比较[转]
  9. 设计模式12——中介者模式
  10. POJ 2817 状态DP 字符串找最多的重复