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

1. 引子

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

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

2. 问题

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

skillsnumber
machine learning7255
communication skill2970
fast pace1672
software develop1356
track record1079
deep learning1065
project management1047
natural language958
data mining939
written 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值