原标题:左手用R右手Python系列——因子变量与分类重编码

欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习、问答、求职,一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

今天这篇介绍数据类型中因子变量的运用在R语言和Python中的实现。

因子变量是数据结构中用于描述分类事物的一类重要变量。其在现实生活中对应着大量具有实际意义的分类事物。

比如年龄段、性别、职位、爱好,星座等。

之所以给其单独列出一个篇幅进行讲解,除了其在数据结构中的特殊地位之外,在数据可视化和数据分析与建模过程中,因子变量往往也承担中描述某一事物重要维度特征的作用,其意义非同寻常,无论是在数据处理过程中还是后期的分析与建模,都不容忽视。

通常意义上,按照其所描述的维度实际意义,因子变量一般又可细分为无序因子(类别之间没有特定顺序,水平相等)和有序因子(类别中间存在某种约定俗成的顺序,如年龄段、职称、学历、体重等)。

在统计学中对变量进行了如下四类划分:定类变量、定序变量、定距变量、定比变量。而其中的定类和定比变量就对应着我们今天将要讲解的因子变量(无序因子和有序因子变量)。

因子变量从信息含量上来看,其要比单纯的定性变量(文本变量)所包含的描述信息多一些,但是又比数值型变量(定距变量和定比变量)所表述的信息含量少一些。

因而原则上来讲,数值型变量可以转换为因子变量,因子变量可以转换为文本型变量,但是以上顺序却是不可逆的(信息含量多的变量可以放弃信息量,转换为信息含量较少的变量类型,但是信息含量较少的变量却无法增加信息含量)。

以下将分别讲解在R语言和Python中如何生成因子变量、如何将数值型变量转换为因子变量、以及如何对因子变量进行重编码。

在R语言中,通常使用factor直接生成因子变量,我们仅需一个向量(原则上可以是文本型、也可以是数字型,但是通常从实际意义上来说,被转换的应该是一个含有多类别的类别型文本变量)。

factor(x, levels,labels=levels,ordered=)

以上参数中,x即是我们将要转换的变量,levels是将要设定的因子水平(可选参数,省略则自动以向量中的不重复对象为因子水平),labels作为因子标签(可选参数,与前述因子水平对应,若设置,则打印时显示的是对应因子标签,省略则同因子水平一样,使用向量中不重复值【即类别】作为标签),ordered是逻辑参数,设定是否对因子水平排序。

vector

myfactor

通常来说,factor函数中,levels一般不用设置,函数会自动判断向量内有几个水平,但是倘若要生成有序因子的话,默认会根据字母顺序排列,如果自然顺序与目标有序因子顺序不一致,则一定要指定levels,labels则视具体需求而定,如果本身就是文本类别的话,一般无需设定标签。

如果是问卷类数据,而且编码为数值,则一定要通过labels标签的设定来还原每一个编码的真实意义。

factor(vector,labels=c("AAA","BBB","CCC","DDD","EEE"),ordered=TRUE)

因子变量与文本变量数值变量之间的互转则通过as.character()或者as.numeric()函数来实现。

library(dplyr)

as.character(as.factor(1:10))%>%str()

as.numeric(as.factor(1:10))%>%str()

R语言中的因子变量重编码

如果你有一个度量指标,需要将其转换为分段的因子变量,则可以通过cut函数来实现这种转换。

scale

cut(x,breaks,labels=NULL,include.lowest=FALSE,right=TRUE,ordered=)

cut函数参数如上,接受一个数值型向量,breaks接受一个数值向量(标识分割点)或者单个数值(分割 数目)。

right是逻辑参数,设定分割带是左开右闭或者左闭右开。(默认左开右闭)。

include.lowest则根据right的设定,决定是否应该包含端点值(如果right为TRUE,左开右闭区间,则包含最小值,如果right为FALSE,左闭右开区间则包含最大值),默认为FALSE。

ordered则设定是否对因子水平进行排序。

(factor1

另一种分割场景是使用分位数函数进行分割,

qa

(cut(scale,breaks=qa,labels=c("0%~20%","20%~40%","40%~60%","60%~80%","80%~100%"),include.lowest=TRUE,ordered=TRUE))

以上分割方法在是较为常用的因子变量转换方法,当然你可以使用if函数进行类似分割,但是相比较来讲,使用cut函数进行分割要高效很多。

Python

在Python中,Pandas库包含了处理因子变量的一整套完整语法函数。

import pandas as pd

import numpy as np

import string

在pandas中的官方在线文档中,给出了pandas因子变量的详细论述,并在适当位置与R语言进行了对比描述。

http://pandas.pydata.org/pandas-docs/stable/categorical.html#working-with-categories

当利用pandas生成序列时,可以在序列函数内的dtype参数设定因子变量类型。

s = pd.Series(["A","B","C","D","E"], dtype="category")

生成数据框时,也可以直接生成因子变量。

df = pd.DataFrame({"A":["a","b","c","a"]})

df["B"] = df["A"].astype('category')

除了直接在生成序列或者数据框时生成因子变量之外,也可以通过一个特殊的函数pd.Categorical来完成在序列和数据框中创建因子变量。

s = pd.Series(pd.Categorical(["a","b","c","a"], categories=["a","b","c"],ordered=False))

df = pd.DataFrame({"A":["a","b","c","a"]})

df["B"] =pd.Series(pd.Categorical(["a","b","c","a"], categories=["a","b","c"],ordered=False))

因子顺序的添加可以通过设定序列或者数框框列的.astype来进行详细的操作。

s = pd.Series(["a","b","c","a"])

s_cat = s.astype("category", categories=["a","b","c"], ordered=True)

无论是序列中还是数据框中的因子变量生成之后,都可以通过以下属性查看其具体的类型、因子类别、以及是否含有顺序。

s_cat.dtypes

s_cat.cat.categories

s_cat.cat.ordered

一种比较迂回的方法是,先生成普通序列,然后通过设定序列类型完成因子变量的转化。而想要舍弃因子变量,还原成普通的文本序列,则同样只需再其astype中进行格式设定。

s = pd.Series(["a","b","c","a"])

s2 = s.astype('category',categories=["a","b","c"],ordered=True)

s2.astype(str)

最后讲一下,如何在数据框中分割数值型变量为因子变量,pandas的数据框也有与R语言同名的函数——cut。

df = pd.DataFrame({'value': np.random.randint(0, 100, 20)})

labels = [ "{0} - {1}".format(i, i + 9) for i in range(0,100,10) ]

df['group'] = pd.cut(df.value, range(0, 105, 10), right=False, labels=labels)

pd.cut(x, bins, right=, labels=,include_lowest=False)

#df.value代表待风格的变量,第二项是bins可以是一个列表(作为分割点),也可以是一个整数(作为分割带箱数),right控制带宽是左开右闭还是左闭右开,labels设定输出显示标签,include_lowest=控制是否包含边界点(以上参数可以类比R语言中的cut函数)。

最后做一个小总结:

关于因子变量在R语言和Python中涉及到的操作函数;

R语言:

创建因子变量:

factor

转换因子变量:

as.factor

as.numeric(as.character)

分割因子变量:

cut函数

Python:

创建因子变量:

pd.Categorical(categories=,ordered=)

pd.Series(dtype="category")

转换因子变量:

df.astype('category',categories,ordered)

分割因子变量:

df.cut(df.value,breaks=,right=,labels)

天善学院svip包含Excel BI、Python爬虫案例、Python机器学习、Python数据科学家、大数据、数据分析报告、数据分析师体系、深度学习、R语言案例10套课程火爆报名中,欢迎大家关注 www.hellobi.com/svip

转载请保留以下内容:

本文来源自天善社区杜雨老师的博客(公众号)。

原文链接:https://ask.hellobi.com/blog/datamofang/8843返回搜狐,查看更多

责任编辑:

python中factor函数_左手用R右手Python系列——因子变量与分类重编码相关推荐

  1. python 变量 r_左手用R右手Python系列——因子变量与分类重编码

    今天这篇介绍数据类型中因子变量的运用在R语言和Python中的实现. 因子变量是数据结构中用于描述分类事物的一类重要变量.其在现实生活中对应着大量具有实际意义的分类事物. 比如年龄段.性别.职位.爱好 ...

  2. python正则表达式中的r与转义字符_左手用R右手Python系列13——字符串处理与正则表达式...

    原标题:左手用R右手Python系列13--字符串处理与正则表达式 杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化.个 ...

  3. python索引右往左_左手用R右手Python系列5——数据切片与索引

    数据框索引: 基于数据框本身提取 subset函数 filter+select函数 Python: 数据框自身的方法 ix方法 loc方法 iloc方法 query方法 数据框自身的方法 ix方法 l ...

  4. python中factor函数_【T】R中的因子(factor),levels, reorder

    该博文已整理到新地址: http://qinqianshan.com/factor.levels.reorder/ 变量可归结为类别(名义型),有序型,连续型变量(区间变量).类别变量和有序类别(有序 ...

  5. python用merge匹配和左连接_左手用R右手Python系列——数据合并与追加

    感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答.求职一站式搞定! 本文作者:天善智能社区专家杜雨 今天这篇跟大家介绍R语言 ...

  6. python中write函数_第9.7节 Python使用write函数写入文件内容

    一.语法 write(data) data为要写入的数据,可以为字符串str类型,也可以是bytes类型. 返回值为实际写入的数据数,在写入数据为str类型时,该数据为实际写入的UNIOCODE字符数 ...

  7. python中timeit函数_一日一技:Python中的timeit方法

    timeit()方法 python中的timeit()方法, 它用于获取代码的执行时间.该库将代码语句运行一百万次,并提供从集合中花费的最短时间.这是一种有用的方法,有助于检查代码的性能. 语法如下: ...

  8. python中strip函数_让你整明白python strip函数妙用

    以下为作者学习python时所做的学习笔记,用浅显的语言展示给大家,希望大家多多提交自己的意见.有问题的朋友也可以留言,看到会回复大家. 声明:s为字符串,str为要删除的字符序列 s.strip(s ...

  9. python的rbind_左手用R右手Python系列—数据合并与追加

    原标题:左手用R右手Python系列-数据合并与追加 感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答.求职一站式搞定! 今 ...

最新文章

  1. 哪个才是解决回归问题的最佳算法?线性回归、神经网络还是随机森林?
  2. 中职pHP课程标准,中等职业学校数课程标准.doc
  3. 【Paddle】解压文件到指定文件夹
  4. 计算机网络实验3:网络设备基本配置
  5. 华北水利水电大学c语言程序设计四_我校代表队在“中国高等计算机大赛——团体程序设计天梯赛” 中喜获佳绩...
  6. SMTP连接器的使用
  7. 1048 行 MySQL指令(经典)
  8. 山东CIO智库会员参观徐工信息公司
  9. Ubuntu Hudson 安装配置
  10. 两款扒站工具使用说明
  11. 可以用计算机控制手机的软件,还有这样的神奇软件!让你用PC操控手机的神器...
  12. 钢铁行业超低排放的前生今世
  13. Maven安装与Maven HelloWorld入门实例
  14. 移动App测试中的最佳做法
  15. 心得 ~ 使用 zlib库 解压缩 zip文件
  16. 高并发实时直播弹幕研发实践
  17. 关于SI (系统集成)
  18. 安卓上哔哩哔哩视频的导出
  19. 大一到大三一定要做完!
  20. Win10自带的邮件email上登录qq邮箱|解决无法访问此账户:xx问题

热门文章

  1. 安卓手机变Linux服务器丨AidLux上手体验
  2. 电信宽带连接不上无线可连接服务器,电信宽带连接为什么无线连接上宽带连接连不上...
  3. cardboard下载_如何在Android上设置Google Cardboard
  4. jQuery是一个JavaScript库极大的简化JavaScript编程
  5. JetPack之Room,Room基本使用
  6. 富豪版末日避难所曝光:导弹发射井改装,内部极奢华
  7. SPU和SKU都是什么意思
  8. UEFI开发与调试---edk2中的Package
  9. 移动端项目-黑马面面项目
  10. 苹果手机怎么备份所有数据_手机数据丢失怎么办?三种备份神技,手机告别数据丢失...