今天这篇介绍数据类型中因子变量的运用在R语言和Python中的实现。
因子变量是数据结构中用于描述分类事物的一类重要变量。其在现实生活中对应着大量具有实际意义的分类事物。
比如年龄段、性别、职位、爱好,星座等。
之所以给其单独列出一个篇幅进行讲解,除了其在数据结构中的特殊地位之外,在数据可视化和数据分析与建模过程中,因子变量往往也承担中描述某一事物重要维度特征的作用,其意义非同寻常,无论是在数据处理过程中还是后期的分析与建模,都不容忽视。
通常意义上,按照其所描述的维度实际意义,因子变量一般又可细分为无序因子(类别之间没有特定顺序,水平相等)和有序因子(类别中间存在某种约定俗成的顺序,如年龄段、职称、学历、体重等)。
在统计学中对变量进行了如下四类划分:定类变量、定序变量、定距变量、定比变量。而其中的定类和定比变量就对应着我们今天将要讲解的因子变量(无序因子和有序因子变量)。
因子变量从信息含量上来看,其要比单纯的定性变量(文本变量)所包含的描述信息多一些,但是又比数值型变量(定距变量和定比变量)所表述的信息含量少一些。
因而原则上来讲,数值型变量可以转换为因子变量,因子变量可以转换为文本型变量,但是以上顺序却是不可逆的(信息含量多的变量可以放弃信息量,转换为信息含量较少的变量类型,但是信息含量较少的变量却无法增加信息含量)。
以下将分别讲解在R语言和Python中如何生成因子变量、如何将数值型变量转换为因子变量、以及如何对因子变量进行重编码。
R语言因子变量处理函数:
在R语言中,通常使用factor直接生成因子变量,我们仅需一个向量(原则上可以是文本型、也可以是数字型,但是通常从实际意义上来说,被转换的应该是一个含有多类别的类别型文本变量)。
|
|
以上参数中,x即是我们将要转换的变量,levels是将要设定的因子水平(可选参数,省略则自动以向量中的不重复对象为因子水平),labels作为因子标签(可选参数,与前述因子水平对应,若设置,则打印时显示的是对应因子标签,省略则同因子水平一样,使用向量中不重复值【即类别】作为标签),ordered是逻辑参数,设定是否对因子水平排序。
通常来说,factor函数中,levels一般不用设置,函数会自动判断向量内有几个水平,但是倘若要生成有序因子的话,默认会根据字母顺序排列,如果自然顺序与目标有序因子顺序不一致,则一定要指定levels,labels则视具体需求而定,如果本身就是文本类别的话,一般无需设定标签。
如果是问卷类数据,而且编码为数值,则一定要通过labels标签的设定来还原每一个编码的真实意义。
因子变量与文本变量数值变量之间的互转则通过as.character()或者as.numeric()函数来实现。
|
|
R语言中的因子变量重编码
如果你有一个度量指标,需要将其转换为分段的因子变量,则可以通过cut函数来实现这种转换。
- cut函数参数如上,接受一个数值型向量,breaks接受一个数值向量(标识分割点)或者单个数值(分割 数目)。
- right是逻辑参数,设定分割带是左开右闭或者左闭右开。(默认左开右闭)。
- include.lowest则根据right的设定,决定是否应该包含端点值(如果right为TRUE,左开右闭区间,则包含最小值,如果right为FALSE,左闭右开区间则包含最大值),默认为FALSE。
- ordered则设定是否对因子水平进行排序。
|
|
另一种分割场景是使用分位数函数进行分割
以上分割方法在是较为常用的因子变量转换方法,当然你可以使用if函数进行类似分割,但是相比较来讲,使用cut函数进行分割要高效很多。
Python因子编码处理函数:
在Python中,Pandas库包含了处理因子变量的一整套完整语法函数。
|
|
在pandas中的官方在线文档中,给出了pandas因子变量的详细论述,并在适当位置与R语言进行了对比描述。
当利用pandas生成序列时,可以在序列函数内的dtype参数设定因子变量类型。
生成数据框时,也可以直接生成因子变量。
除了直接在生成序列或者数据框时生成因子变量之外,也可以通过一个特殊的函数pd.Categorical来完成在序列和数据框中创建因子变量。
因子顺序的添加可以通过设定序列或者数框框列的.astype来进行详细的操作。
无论是序列中还是数据框中的因子变量生成之后,都可以通过以下属性查看其具体的类型、因子类别、以及是否含有顺序。
|
|
一种比较迂回的方法是,先生成普通序列,然后通过设定序列类型完成因子变量的转化。而想要舍弃因子变量,还原成普通的文本序列,则同样只需再其astype中进行格式设定。
|
|
最后讲一下,如何在数据框中分割数值型变量为因子变量,pandas的数据框也有与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)
联系方式:
wechat:ljty1991
Mail:578708965@qq.com
个人公众号:数据小魔方(datamofang)
团队公众号:EasyCharts
qq交流群:[魔方学院]298236508
个人简介:
杜雨
财经专业研究僧;
伪数据可视化达人;
文科背景的编程小白;
喜欢研究商务图表与地理信息数据可视化,爱倒腾PowerBI、SAP DashBoard、Tableau、R ggplot2、Think-cell chart等诸如此类的数据可视化软件,创建并运营微信公众号“数据小魔方”。
Mail:578708965@qq.com
备注信息:
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。