如何理解R中因子(factor)的概念? | 您所在的位置:网站首页 › r语言stringsasfactors=T › 如何理解R中因子(factor)的概念? |
我们先从因子的起源说起。 我们生活中经常会遇到分类的问题,比如从性别上分能分成两类:男人和女人。如果从年龄上划分,又可将人群分为青年人(60岁)。我们可以将这一表示类别的数据称为分类数据。 分类数据有着重要的意义,比如我们可以对现在流行的共享单车用户按下面的类别进行分组研究。 对数据进行分组研究后,我们会发现90%用户在目的地与地铁/公交站相距3000米内时选择使用共享单车,共享单车成为最有效的“最后一公里”解决方案。 类别数据对于分组数据研究非常有用。那么,在数据分析中是如何来表示类别数据呢? 这个问题也源自大数据社群的内部讨论。今天我们以数据分析R语言为例,看下在R中是如何表示类别数据的。 1. 如何表示分类数据? 在R中数据的分类是用因子数据类型(factor)来表示的。那么什么是因子呢? 因子被用来表示类别数据,因此也被称为“类别变量”。举个具体的例子吧,你所在工作单位老板特别变态,要求每天上班打卡(我个人是非常痛恨上班打卡这种变态的行为的)。 你的老板电脑里就有所有员工每天打卡的记录数据,其中有姓名(name),性别(sex),是否打卡(card)等列。 这里的性别(男,女)有2个类别,就可以把姓名这一列作为因子变量来处理。而姓名这一列因为不是类别,毕竟每个人的姓名是不一样的,即使有两个人的姓名重名(加入都叫猴子),这两个人也不属于同一类。 不过也确实,这个世界说白了就是男人与女人的世界。 现在你明白了,因子就是用于表示一组数据中的类别,可以记录这组数据中的类别名称及类别数目。 在R中使用factor函数来创建因子,下面我们创建了性别向量为因子。 2. 使用分类数据的意义是什么? 实现研究对象的分组、分类计算很多时候,一些模型参数都需要传入变量类型为因子。同时,绘图时候因子可以帮助你自动实现分组绘图。下面我们具体看下。 根据一开始的例子,我们创建了一个打卡记录数据。 你会发现,只要是列里的值是字符串的,R都会自动将该列转换为因子类型。例如上面的姓名(name)列转换为因子类型,姓名叫“猴子”的有2个人。同样的,性别(sex)列也列出了每个类别的数据条数。 但是,姓名不是类别,我们不希望这一列是因子类型,需要将姓名这一列转换为字符串类型。 绘图后,我们看到每个性别的人数个数。现在你能理解了因子的作用了吧。正是因为性别(sex)这一列是因子类型,我们才能绘图是自动按照类别进行分组,计算出每一个类别的数目。 类别数据能帮助我们自动发现错误数据上面我们绘制的柱状图,你会发现性别里有个类别(feamle)并不是我们想要的,这有可能是原始数据本身的错误。 这时候,我们需要查找原始数据的值进行校验修改。校验后我们发现值为“feamle”的数据对应的值应该为性别“男”。我们现在来修改下。 删除废弃的类别后,你会发现性别(sex)这一列只有两个类别了。 3. 类别如何排序呢? 因子的类别默认排序都是按字母顺序来排序。但是有时候我们想制定类别的顺序。 例如学校让学生给老师教学打评分的类别有:良好,同意,不满意,非常同意,非常不满意。其实,按照正常的顺序你希望是这样的:非常不满意,不满意,良好,同意,非常同意。 下面我们以性别为例,将这一列的类别按照:女,男顺序来排序。 4. 因子的几个问题 1)数值类型转换成因子 直接用as.numeric转换会有问题,转换后的内容不是你想要的: 2)因子中 levels和lables的区别 levels代表原始类别名称,lables相当于对类别名称进行重命名。 下面我们将原始数据中所以类别为女的重命名为“female”,男的重命名为“male”。 上面只是列举了数据分析R语言中的分类问题处理。其实其他编程语言Python也类似。一个领域中的陌生知识如果搞不明白,我们就可以联想下这个知识可以和现实生活中的哪些常识对应起来,因为知识的发明根本上是为了解决生活中的问题的。 这个世界也正是有了男人和女人才变的那么有趣。 漫画来自Brightside ————领取福利分界线—————— 我是猴子,中科院硕士/前IBM高级软件工程师/豆瓣8分《数据分析思维》作者,我和知乎联合出品的「数据分析训练营」即将开课,3天带你掌握数据分析实用技巧,包含课程+实战带练,工作提效、升职加薪必备神器!报名还有独家Excel自学资料领取,点击开启数据分析升职加薪密码: |
CopyRight 2018-2019 实验室设备网 版权所有 |