写点什么

用 R 语言打个印咋就这么费事儿呢

用户头像
张利东
关注
发布于: 2020 年 05 月 22 日

1. 引子

前两天还说 R 语言不是不好,(只是不适合咱用)[],今天就想收回这话了。这货用着也太别扭了,一个最简单的可视化差点憋死我。

就像马保国,名气大,实则很完蛋。

2. 问题

比如一个最简单的 csv,想打印成 Bar Plot。数据长的像下面这样

skillsnumbermachine learning7255communication skill2970fast pace1672software develop1356track record1079deep learning1065project management1047natural language958data mining939written communication926

再简单不过的一个表格,想按照上面顺序打印出来。于是导入以后调用 ggplot2 开始可视化

library(ggplot2)sdata = read.csv('skills.csv')ggplot(data=sdata) + geom_col(mapping = aes(x=skills, y=n)) +    theme(axis.text.x = element_text(angle = 90)) + coord_flip()
复制代码

但就这么简单个东西,问题就出来了,打印结果如下

不对吖,不应该是按照我数据的顺序打印么?这算怎么回事儿?仔细一看,丫的自作主张给我按照字母顺序排序打印了。

自作多情。谁稀罕你的排序啊。我就纳闷了,有多少次我们打印会按照字母顺序?直接按我原始数据指定的打印不好么?看 Python 多听话

import pandas as pdimport matplotlib.pyplot as plt
sdata = pd.read_csv("skills.csv", skipinitialspace=True)plt.style.use('ggplot')plt.barh(y=sdata.skills, width=sdata.numbers)plt.xticks(rotation=90)plt.gca().invert_yaxis()
复制代码

结果

3. 分析

上网搜了一下,有的文章说是因为 dataframe 把 categorical data 转换成了 factor,然后按照 factor 的 order 打印的。那我们把 factor 转换成 vector 是不是就可以了?

试试

sdata = read.csv('skills.csv')sdata$skills = as.character(sdata$skills)ggplot(data=sdata) + geom_col(mapping = aes(x=skills, y=numbers)) +    theme(axis.text.x = element_text(angle = 90)) + coord_flip()
复制代码

很遗憾,结果和之前一模一样

所以,应该是 R 在处理坐标轴排序的时候就是用的字母顺序,和 factor 还是 vector 没有关系。这个设计真是脑残。

既然想保持固定顺序,我们最后还是得回到能排序的东西上来。仔细看了看各种数据类型,也还是得靠 facto。不管是它的 level 属性,还是它的 ordered 属性,都是指定顺序的。指定 level 的时候,需要重新修改一下原来的 column

sdata = read.csv('skills.csv')s = as.character(sdata$skills)sdata$skills = factor(s, levels = rev(s))ggplot(data=sdata) + geom_col(mapping = aes(x=skills, y=numbers)) +    theme(axis.text.x = element_text(angle = 90)) + coord_flip()
复制代码

这回终于一切正常了

4. 总结

这两天用 R,各方面都很怪异。作为被 Python 惯坏的东哥,实在有点伺候不了这个性格怪异的家伙。

上网大致搜了一下,R 第一版发布于 1993 年,前驱的 S 语言则发布于 1976 年,算是上古语言了。Python 则发布于 1990 年,没有前驱语言;其计算包 NumPy 发布于 1995 年,分析包 pandas 发布于 2008 年。

这就是先发优势吧。虽然 Python 优雅简洁,奈何 R 语言已经在统计和科学计算方面有了统治级别的地位。想一时半会儿取而代之,还是颇有难度。尤其在学界。

但我是真有点受够她了。人生苦短,我为啥不用 Python。

5. 交流

独学而无友则孤陋寡闻。现有「数据与统计科学」微信交流群,内有数据行业资深从业人员、海外博士、硕士等,欢迎对数据科学、数据分析、机器学习、人工智能有兴趣的朋友加入,一起学习讨论。

大家可以扫描下面二维码,添加荔姐微信邀请加入,暗号:机器学习加群。

Lily

6. 扩展

6.1. 参考文献

  1. Dr. P. Prakash 和 A. S. K. Rao, R Data Structures and Algorithms. 2016.

  2. H. Wickham 和 G. Grolemund, R for data science: import, tidy, transform, visualize, and model data, First edition. Sebastopol, CA: O’Reilly, 2016.



Data2Science

本文使用 mdnice 排版


发布于: 2020 年 05 月 22 日阅读数: 55
用户头像

张利东

关注

运筹学与商业统计硕士 2019.02.13 加入

运筹学与商业统计硕士,擅长数据分析、数据挖掘、机器学习。欢迎关注公众号「统计与数据科学」Data2Science。

评论

发布
暂无评论
用 R 语言打个印咋就这么费事儿呢