ITPub博客

首页 > 数据库 > 数据库开发技术 > 由男人和女人想到的分类问题

由男人和女人想到的分类问题

原创 数据库开发技术 作者:猴子数据分析 时间:2017-05-04 20:38:39 0 删除 编辑



我们生活中经常会遇到分类的问题,比如从性别上分能分成两类:男人和女人。如果从年龄上划分,又可将人群分为青年人(<-30岁),中年人(30-60岁),老年人(>60岁)。我们可以将这一表示类别的数据称为分类数据。


分类数据有着重要的意义,比如我们可以对现在流行的共享单车用户按下面的类别进行分组研究。



对数据进行分组研究后,我们会发现90%用户在目的地与地铁/公交站相距3000米内时选择使用共享单车,共享单车成为最有效的“最后一公里”解决方案。



类别数据对于分组数据研究非常有用。那么,在数据分析中是如何来表示类别数据呢?


这个问题也源自大数据社群的内部讨论。今天我们以数据分析R语言为例,看下在R中是如何表示类别数据的。




1. 如何表示分类数据?


在R中数据的分类是用因子数据类型(factor)来表示的。那么什么是因子呢?


因子被用来表示类别数据,因此也被称为“类别变量”。举个具体的例子吧,你所在工作单位老板特别变态,要求每天上班打卡(我个人是非常痛恨上班打卡这种变态的行为的)。



你的老板电脑里就有所有员工每天打卡的记录数据,其中有姓名(name),性别(sex),是否打卡(card)等列。


这里的性别(男,女)有2个类别,就可以把姓名这一列作为因子变量来处理。而姓名这一列因为不是类别,毕竟每个人的姓名是不一样的,即使有两个人的姓名重名(加入都叫猴子),这两个人也不属于同一类。


不过也确实,这个世界说白了就是男人与女人的世界。



现在你明白了,因子就是用于表示一组数据中的类别,可以记录这组数据中的类别名称及类别数目。


在R中使用factor函数来创建因子,下面我们创建了性别向量为因子。



我们用class来查看下性别(sex)的数据类型,发现是因子类型:



因子中具体有哪些类别,可以用levels()来查看。而有多少个类别可以nlevels()来查看。如下图,我们发现性别有2类,类别名称分别是:男,女。



2. 使用分类数据的意义是什么?


  • 实现研究对象的分组、分类计算


很多时候,一些模型参数都需要传入变量类型为因子。同时,绘图时候因子可以帮助你自动实现分组绘图。下面我们具体看下。


根据一开始的例子,我们创建了一个打卡记录数据。



我们使用summary()来具体看下创建的打卡数据的特征。



你会发现,只要是列里的值是字符串的,R都会自动将该列转换为因子类型。例如上面的姓名(name)列转换为因子类型,姓名叫“猴子”的有2个人。同样的,性别(sex)列也列出了每个类别的数据条数。


但是,姓名不是类别,我们不希望这一列是因子类型,需要将姓名这一列转换为字符串类型。



转换后,我们重新看下数据类型,姓名这里列就变为字符串类型了:



现在,我们用因子类型(性别)这一列来绘柱状图,看下每个性别的人数分布。




绘图后,我们看到每个性别的人数个数。现在你能理解了因子的作用了吧。正是因为性别(sex)这一列是因子类型,我们才能绘图是自动按照类别进行分组,计算出每一个类别的数目。


  • 类别数据能帮助我们自动发现错误数据


上面我们绘制的柱状图,你会发现性别里有个类别(feamle)并不是我们想要的,这有可能是原始数据本身的错误。



这时候,我们需要查找原始数据的值进行校验修改。校验后我们发现值为“feamle”的数据对应的值应该为性别“男”。我们现在来修改下。



我们再用summary()来看下数据的特征,发现性别(sex)这一列还存在feamle这个类别。



你可以使用droplevels()将废弃的类别删掉。



删除废弃的类别后,你会发现性别(sex)这一列只有两个类别了。



因子类型还有很多用处,当你后面学习到模型建立的时候,就会知道它的好处了。很多知识,只有你再用的过程中才会理解的更深刻。


3. 类别如何排序呢?


因子的类别默认排序都是按字母顺序来排序。但是有时候我们想制定类别的顺序。


例如学校让学生给老师教学打评分的类别有:良好,同意,不满意,非常同意,非常不满意。其实,按照正常的顺序你希望是这样的:非常不满意,不满意,良好,同意,非常同意。


下面我们以性别为例,将这一列的类别按照:女,男顺序来排序。



对因子排序有什么好处呢?排序后的因子类别可以按照排序顺序来显示。如下图,性别女的就显示在前面了。



4. 因子的几个问题


1)数值类型转换成因子


直接用as.numeric转换会有问题,转换后的内容不是你想要的:



正确的方法应该是这样的:



2)因子中 levels和lables的区别


levels代表原始类别名称,lables相当于对类别名称进行重命名。


下面我们将原始数据中所以类别为女的重命名为“female”,男的重命名为“male”。



最后所有数据按类别进行了对应的更新。



上面只是列举了数据分析R语言中的分类问题处理。其实其他编程语言Python也类似。一个领域中的陌生知识如果搞不明白,我们就可以联想下这个知识可以和现实生活中的哪些常识对应起来,因为知识的发明根本上是为了解决生活中的问题的。


这个世界也正是有了男人和女人才变的那么有趣。


漫画来自Brightside


原文作者:猴子数据分析;如有侵权,请联系管理员删除。

下一篇: 牛逼中的一家子
请登录后发表评论 登录
全部评论

注册时间:2017-01-16

  • 博文量
    865
  • 访问量
    345472