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

发布于: 6 小时前

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 pd
import 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 排版

发布于: 6 小时前 阅读数: 3
用户头像

张利东

关注

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

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

评论

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