R语言用户画像:以上财两个班级为例
大学里,基本每一门课程选课的背后都有同学们的各种考量,特别是那些选择更加自由的选修课。
一个有趣的话题是:修习不同课程的同学有怎样的不同?
这个学期我教了两门课,一门R语言绘图,一门市场营销学。两门都是选修课。
R语言绘图是通识选修,开放给所有的本科同学。
市场营销学因为有多个平行班级,校方对每个班级的选修范围会稍有限制。
自我介绍作业
两门课第一周都布置了第一次作业:自我介绍
自我介绍要求包含以下的内容:
年级&专业
家乡所在城市
美照一枚
对课程的期望
任何愿意分享的想法
作业不限语言,中英文均可,并规范了作业文件的命名方式(姓名_学号)。
除此之外,还可以从提交的作业中提取两条重要的数据:
提交时间
作业字数
因此,短短的自我介绍里包含了两个班级同学的诸多信息,可以以此来绘制两个班级的画像,比较他们的异同。
R语言绘图
R语言是被广泛使用的统计计算和绘图语言,和Python并称为数据科学 (data science) 的两大语言。
R语言有着极其强大的绘图功能,这也是很多人爱上R的主要原因(呵呵,我也是)。
本文中所有图形都将由R语言来绘制。
图形选择
人类对图形有着天生的敏感和领悟。一张生动的图画所展示的信息胜过千言万语。
But,要生动准确地反映数据中包含的信息,必须选择适合数据特征的图形种类。
一幅好的图形一定是用最适合最简洁的方式对数据进行展示。
很多情况下,我们了解的图形种类太少、使用的作图工具不够灵活,使得统计图形在数据分析中应有的潜力没能充分挖掘出来。
在图形选择方面,我们的大脑永远比我们的工具重要。
红黑配色
本文所有的图形均采用红黑配色。
据说这两种神奇颜色的组合可以达到一种视觉和感受的完美平衡,让红色不在过度刺眼,让黑色不在过度高冷。
就像冰与火的组合一样,一冷一热,恰到好处。
Christian Louboutin经典红底高跟鞋
香奈儿山茶花系列唇膏
还有......
性别构成
首先来看两个班级男女生的比例。
性别是一个分类变量 (categorical variable)。我们分别统计两个班男生和女生的数量,用条状图予以展示。
条状图通过条的长度表示数值大小。可以看出,两个班男女生的构成比例几乎一样。
下图中,我们尝试用人形图标的方式展示两个班级的性别构成。
虽然第一眼看上去比较有趣,但其所表达的数据信息远不如上面的条状图来的清晰和直观。
Tips
该图由R基本画图包中的plot函数(确定图形坐标) + jpeg包中的readJPEG函数读取人形图标 (jpg格式) 绘制而成
年级分布
年级也是一个分类变量。我们按班级统计各个年级的学生数量,同样用条状图展示。
由于两个班级的人数相似 (市营: 43 vs R语言: 41),市营班级中大三同学的比例远高于R语言班级。
其主要原因在于,财大学生基本上被安排在大三期间选修市营这门课。
相比之下,R语言这门课没有这样的限制,选修的同学几乎都是大二和大三。
这从一个侧面说明,越来越多的同学意识到“工具”知识的掌握对于经管专业的重要性。
学院构成
我们按班级统计了来自于不同学院的学生数量。
好在上财是一个小学校,如果学院比较多,学生人数分散,用条状图就不合适了。
图中可见,市营班级同学有70+%来自信管学院。这种高比例是校方限制选修班级的结果。
R语言班级中人数最多的也是信管学院(30人)。这不奇怪,毕竟R语言是一门计算机编程语言。
人数次多的是统计学院(9人)。这个也不奇怪,因为R语言是一门统计计算的语言。
比较出人意料的是会计学院的同学人数排名第三(8人),而商学院和金融学院的同学人数只有区区3人和1人。
按照以往的经验,金融学院的同学人数一直比较多,今年可能是sampling error吧。
商学院的选课人数则历年来一直很少,这和R语言在商学的重要性似乎不太匹配。
文中所有的条状图都是用R基本画图包中的barplot函数绘制的
Tips
地域分布
地域也是分类变量,但由于选课同学来自多个不同的省份 (市营: 20,R语言: 17),条状图并不适合。
地域分布是一个地理的概念,一个好的选择是以地图的形式分班级展示,既形象又直观。
Tips
以下是用REmap包中的remapC函数绘制的两个班级学生地域分布的"热力"地图
REmap包中的中国地图还很贴心地包含了南海九段线部分,手动点赞!
市营班级学生地域分布
R语言班级学生地域分布
两幅地图都用红色来代表学生人数:红色越深表示来自该省份的学生越多,白色则代表来自该省份的学生人数为0。
两幅图中不同省份的颜色深浅不一,说明两个班级同学家乡的地域分布大不相同。
市营班级中有多位来自新疆的同学,R语言班级则是四川和广东的同学人数比较多。
不过,上海都是颜色最深的地区,因为我们是上海的高校嘛。
完成时长
BB系统中记录了每位同学提交作业的时间 (精确到秒),因此可以计算出每位同学的作业完成时长 (小时) = 作业提交时间 - 作业发布时间。
作业完成时长是一个连续变量。
连续变量的绘图选择比较多,我们主要尝试直方图(histogram)、箱线图(boxplot)、Cleveland 点图和豆荚图(beanplot)。
大家可自行比较各种图形的优劣。
直方图
直方图是描绘连续变量分布的常见工具。
通过下面的直方图可以看出,两个班级同学第一次作业的完成时间分布有着较为明显的差异。
相比R语言班级,市营班级同学的作业完成时间呈现出双头(two-mode)模式,更加集中于图形的头部和尾部。
也就是说,市营班级有相当一部分同学在24小时内就完成了,但也有不少同学一直拖到5天(120小时)以后才提交作业。
直方图在展示连续变量时比较缺乏对关键统计量的敏感性。接下来,我们尝试用箱线图从多个角度比较两个班级第一次作业完成时长的差异。
箱线图
图中左边的部分是分班级作业完成时长的箱线图。
显然,R语言班级同学完成时间的分布更加“紧凑”。
中段50%同学的完成时间位于30小时--100小时的区间,但个别拖拉的同学比市营班级的同学更拖拉(尾巴更长)。
图形右边的部分是按性别区分的完成时长箱线图。
很明显,女生完成时长的整体分布和各条分位线均“低于”男生,说明女生对作业的态度更为积极。
男生要加油啊~~
但是,完成时长的性别差异在两个班级间是一样的吗?
通过绘制按照班级×性别的完成时长箱线图,我们发现:
市营班级的男生最为拖拉,R语言班级的男生比女生作业完成的更快,且与市营班级的女生基本不相上下。
看起来,R语言班级的男生蒙受了“不白之冤”,市营的男生才是最需要加油的~~
感谢选修R语言的男生,为“工科男”正名!
另一个问题:不同年级同学作业完成快慢一样吗?
通过绘制按年级划分的完成时长箱线图可见(忽略最左边的大一):
大三同学的完成时间分布最为“紧凑”,但总的来说还是大二同学的态度相对更为积极一些。
我们还可以按照年级×性别进行划分,如下图所示。
细心的读者可能注意到,这张图中“箱体”的宽度不尽相同。
我们可以用“箱体”宽度来表示该类别下的样本大小。在这里,“箱体”的宽度比为不同类别下样本数的平方根之比。
散点图
我们一般用散点图(scatter plot)来展示两个连续变量之间的关系。
其实,一个连续变量一个分类变量的情况也可以采用类似的散点图。
下面的Cleveland 点图按班级展示了每一位同学第一次作业的完成时长以及每个班级的平均完成时长(红点)。
对于只有两个班级且人数有限的情形,Cleveland 点图是一个不错的选择。
接下来我们来看每个年级中区分班级的完成时长散点图。
这里主要做了两个处理:
(1)同一年级内用红黑色区别班级;
(2)为了避免数值相近的点相互重叠,使用了一个称为“jitter”的小技巧:对每一个点横向移动一个微小的随机距离。
在数据量较大或数值重叠比较严重的情况下,“jitter”是一个很有用的技巧:数据点可以横向也可以纵向移动,视需要而定。
烈焰红唇
我们还可以把两个班级同学完成时长的分布合在一起,画一张看起来酷炫一些的图:豆荚图(或称为小提琴图)。
经过平滑(smoothing)处理之后的两条分布曲线都呈现出双头(two-mode)的形状,上下相合,是不是很有烈焰红唇的感觉?!
图中上下两条垂线分别表示两个班级的平均完成时长。由于这两个均值非常接近,这两条垂线几乎连为一体。
这张豆荚图乍看起来很抓人眼球,特别是恰好形成了一张嘴唇的形状。
回想前面的直方图里,只有市营班级的分布类似这种双头模式。由于数据经过了平滑处理,豆荚图其实在一定程度上扭曲了数据的真实形状。
所以,选择图形时首先要看图形是否能够准确描绘数据的真实信息。
很多看起来酷炫的图形并不一定适合于你的数据。
Tips
文中所有箱线图都由R基本画图包中的boxplot函数绘制;Cleveland 点图由R基本画图包中的dotchart函数绘制;
散点图由R基本画图包中的plot函数绘制;
豆荚图由beanplot画图包中的beanplot函数绘制
作业字数
作业字数是完成时长之外另一个重要的连续变量。
首先分班级绘制字数的直方图。
图形显示,相比市营班级,R语言班级第一次作业字数的分布更往右偏,也就是写的更多。
市营班级绝大多数同学的作业都在400字以内,9位同学在100字以内,3位同学接近800字。
R语言班级只有3位同学的作业字数在100字以内,有2位同学超过了1000字。
以下是区分班级、性别和年级的箱线图:
如图所示,总的来说,R语言班级比市营班级、女生比男生、大二同学比其他年级同学作业写的更多。
和完成时长这个指标相比,作业字数出现了一定数量的异常值(outlier)。
也就是说,有些同学作业完成的特别认真,写了很多的内容。
写的最多的同学是R语言班级一位大三男生:1600+!
非常感谢这位同学对这门课程的兴趣~~
我们同样可以将班级、性别和年级三个分类变量两两组合绘制作业字数的箱线图。
以班级×性别组合为例:虽然R语言班级的男生比女生作业完成的更快,但女生比男生字数写的更多。
字数 vs 完成时长
作业完成快慢和字数多少之间有怎样的关系:
是做的越快写的越多还是做的越慢写的越多?
两个班级的情况一样吗?
我们用字数和完成时长的散点图加上分班级的回归线来回答上面的问题。
图中清晰可见:R语言班级的黑点大多位于市营班级红点的上方。
相应的,黑色的回归线也在红色的回归线之上,说明在相同的完成时长情况下,R语言班级同学的作业字数更多。
散点和回归线的趋势显示,字数和完成时长之间成反比,即字数和完成速度为正相关:完成的越快写的越多。
另外,由于两条回归线的斜率非常接近,说明这两个指标的关系强度在两个班级间基本一致。
为进一步探索这种关系是否因性别而异,我们使用ggplot2画图包按照班级×性别绘制一幅2×2的网格图。
如图所示,回答是NO。
语言&文件名
作业中还有两个有趣的指标:中文还是英文以及是否按要求对作业文件命名。
我们分班级统计了这两个指标不同取值上的学生数量,用条状图展示。
图形显示:
R语言班级比市营班级有更多的同学使用英语(8 vs 1)
R语言班级也有更多的同学按要求对作业文件命名(30 vs 25)
结语一
自我介绍是一份简短的作业,但从中可以提取不少有用有趣的信息,帮助我们绘制两个班级的画像,比较两个班级同学的异同。
通过R语言进行“用户”画像,我们发现两个班级同学在诸多方面存在差异,特别是在完成速度和作业字数这两个重要的指标上。
相对于市场营销这门课,选修R语言的同学会更多地出于个人的学习兴趣,因此在学习积极性上可能更胜一筹。
结语二
更为重要的是,希望通过这样一个小小的绘图“练习”,增强大家对数字的敏感性,思考怎样用适合的图形展示数据背后的信息和关联。
正如文中所一直强调的图表思维:
不要为了作图而作图
需要让图形来配合数据
而不是让数据配合图形
各种花式炫技其实都会来带不同程度的视觉呈现弊端,会让读图者分心,反而不能聚焦于图表本身所传达的信息。
我比较偏好简洁和干净的图形,用尽量简单的图形元素表达尽量多的数据信息,那种clean&clear的感觉~~
可能大家注意到,整篇文章都没有用到大家都很熟悉的饼图。
其实饼图表达数据的实际效果不如条状图或点图,因为人眼对角度大小的敏感性远不如长度。
因此很多时候应尽量避免使用饼图,无论我们多熟悉它。
结语三
文中用到的有些图形要求你具备一定的统计知识,比如箱线图里那些线段和点的含义,所以如果你对数据分析感兴趣,你需要学好统计。
关于统计学习,可参见早期推文《》(猛戳文字链接,文内有电子版下载哦)
Tips
图形的绘制有赖于背后的数据支持。
从提交的作业文本中提取有用的信息、清洗和整理数据到形成最后的数据表,加上图形参数的调试,着实花费了不菲的时间和精力。
对于某些图形来说,还需要先对数据做进一步汇总。比如绘制性别构成的条状图之前,要分别汇总两个班级男女生的数量(用table函数)。
因此,在每一幅图形的背后,都有着你没有看到的时间和努力。
Tips
文章真心有点长
希望你花费的阅读时间是值得的!
文 | Beagle
图 | Beagle & 网络
版 | Beagle
▇ 書市
一家有温度的大学生书籍交易
和学习交流服务平台