通用技术 数据分析 R 语言之基础图形绘制入门

思寒_seveniruby · December 29, 2014 · Last by 易寒 replied at January 15, 2015 · 2198 hits
本帖已被设为精华帖!

答应小 A 的文章, 拖了很久. 所以今天赶紧补上了.

R 简介

首先自己去官网下载 R 和 R-Studio, R 语言是什么, 我就不科普了. 粗浅的理解就是科学计算 + 绘图工具
R-Studio 是个简单的 IDE. 可用于基础的调试学习.
RScript 可以执行 R 脚本. 支持参数传递. 自己写的脚本有时候需要放到 jenkins 去跑, 就需要这个工具.
R 可以直接进入交互命令行. 一般在 linux 下调试用.
语法基本还是老式的 C 风格. R 继承自 S 语言.

读取数据

R 语言可以读取大部分的数据格式, 比如数据库, 文件 hadoop 的 HDFS 等.还包括其他的数据分析工具, 比如 IBM 的 SPSS 等等.

R 的读取输入的功能基本都在于 read.* 系列的函数. 最常用的是 read.csv 和 read.table. 因为其他格式数据基本都可以转换到这两个格式上.
我以 Testin 网站上公布的他们拥有的所有机型列表数据作为分析演示的数据.

首先读取数据

devices=read.csv("testin_devices.csv")

此时 devices 就是一个变量, 他表示一个行列数据, 类似于数据库中的数据表的概念.
他的 devices$ 品牌 表示品牌这一列的数据
R 语言的运算基于行列运算, 比如 devices$count=1 表示把所有的 count 那一列的数据全部变成 1.
正是这种计算方式导致了 R 的代码中很少看到 for 循环和 if 判断

基础绘图

可以直接使用 plot 绘图

plot(devices$品牌)

数据太多,看不到细节的数据. 把结果输出到一个很大的 png 图形中

png("4.png", width=12000, height=1200)
plot(devices$品牌)
dev.off()


这样的结果看起来也很费劲. 所以我们继续优化.
按照从大到小的顺序进行排列岂不是更好.

之前使用 plot 函数的时候, 会自动统计各个品牌的分布情况. 现在是我们要自己去排序
所以需要自己先计算每个品牌的总设备类型数

devices2=aggregate(count~品牌, devices, sum)
#然后根据count的结果, 进行反向的排序. 也就是高的在前, 低的在后
devices2 = transform(devices2, 品牌=reorder(品牌, -count))
#重新绘图
plot(devices2$品牌, devices2$count)

只看前二十名

devices4=devices3[rev(order(devices3$count))[1:20],]
plot(devices4$品牌, devices4$count)


这个时候会发现默认的 plot lines 很不人性化, 不够智能.

更好的 ggplot 绘图体系

这几年新的 ggplot2 库逐渐普及, 他可以更简单更友好的绘制图形.
所以我现在基本都使用 ggplot2 了
ggplot2 有自己的绘图理念, 他认为所有的绘图函数都应该可以通过 + 连接起来.
类似于函数式编程或者 bash 的管道概念.

#创建数据
g=ggplot(data=devices4, aes(品牌, count))
g+geom_bar(stat="identity")


切换下坐标方式, 实现更好的显示所有的品牌名字

g+geom_bar(stat="identity")+coord_flip()

调整下颜色

g+geom_bar(stat="identity", color="blue", fill="white")+coord_flip()

# 标记数字

g+geom_bar(stat="identity", color="blue", fill="white")+coord_flip()+geom_text(label=devices4$count, size=3, hjust=1.2)

参考资料

R 语言与网站分析
R 数据可视化手册
R 语言实战

待续

  1. 网络图的画法
  2. 机器学习算法在测试中的应用
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 17 条回复 时间 点赞

我也想学习下

mark,很棒,学习了

我已经推荐很多人学习 R 语言了,现在暂时没有太多的精力去学 R,对于那些经常要跟数据打交道的测试人员来说,R 语言可以为你们增色不少,再者,上海这座金融如此发达的城市里,学会 R 语言可以让职业道路更加宽广吧~

mark 学习

话说没有 d3js 那种很酷炫的图么?

这个必须顶、我也在学习 R

R 语言核心技术手册(第 2 版)
R 数据可视化手册
R 语言与网站分析
自己全买了诶

R 太高大上 le。。

#9 楼 @monkey 我觉得它和 awk 很像. awk 是基于行串行的字段处理. R 是基于列计算的统计软件. 语法也都是类 C 的. 只是 R 多了一个图形功能.

#8 楼 @sgq1117 厉害. 多练习下就行了 我今年又打算再入手四本高级版的书.

#6 楼 @lihuazhang 没有. 他只是绘图展示信息, 并不再看重美化效果. 而且也不具备交互效果. 只是静态图.
R 语言自己可以输出特定的格式来跟 d3, google map 之类的 api 交互, 网上有人写了不少扩展来实现和 D3 的融合.
R 本身还是偏科学计算和基础的信息表达.

#10 楼 @seveniruby 的确,不过 R 制图更牛逼

#13 楼 @monkey 自己分析用 R, 搞定了数据分析, 剩下的产品化就可以转成 js 来展现. 大多数人都是使用 R 做内部的分析和报告. js 的方式适合做成更强大的产品.

mark 学习

好东西,好好自学一下。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up