R语言:可视化概览

栏目: R语言 · 发布时间: 4年前

内容简介:编者按:本文作者 Meng Qi,来自 Teradata Data Science 团队,牛津大学统计系 2013 届研究生。本期博文,就让我们了解一下 R 语言如何进行数据可视化。当统计学家最爱的 R 遇上 “A graph is worth a thousand words” 的可视化工具,会发生什么呢?目录R 的绘图系统

编者按:本文作者 Meng Qi,来自 Teradata Data Science 团队,牛津大学统计系 2013 届研究生。本期博文,就让我们了解一下 R 语言如何进行数据可视化。当统计学家最爱的 R 遇上 “A graph is worth a thousand words” 的可视化工具,会发生什么呢?

目录

R 的绘图系统

graphics

lattice

ggplot2

R Graph Gallery

R Shiny

总结

“The simple graph has brought more information to the data analyst’s mind than any other device.” — John Tukey

数据 可视化在学术界和 工业界都有广泛的应用——除了许多论文里的实验数据图表外,企业的KPI报表、股市的K线图、制造业的传感器数据监测、航空公司的上客监控,包括每年大家喜(ji)闻(si)乐(ren)见(le)的春运大数据,都是可视化的应用。 数据可视化可以让我们更直观地从数据中获取信息

R语言:可视化概览

百度地图春运出行仪表盘(http://qianxi.baidu.com) - 2019五一假期出行

英国新闻巨头BBC有一个数据新闻团队(Data Journalism),专注于“从大量数据中发现值得注意的事实”。近期,该团队分享了他们基于R开发的 工具 包bbplot,使大家能够简单方便地绘制出达到出版标准的图表。专业化的绘图工具正在被越来越多的行业所使用。本期博文,就让我们了解一下R语言如何进行数据可视化。

R 的绘图系统

R语言有两大绘图系统:基础绘图系统和Grid绘图系统,两者相互独立。基础绘图系统直接在图形设备上画图;而Grid系统将界面分成矩形区域(viewport),每个区域有自己独立的坐标体系,并且相互可以嵌套,使得Grid系统可以画出更复杂的图形。

用过R的朋友们知道,R的功能是通过一个个库(package)——也就是我们常说的工具包实现的。基础绘图系统依赖于graphics包。基于Grid系统的包有grid,lattice,ggplot2等。grid包仅提供低级的绘图功能(如点、线等),并不能画出完整的图形。更高级的图形是两个主流绘图包lattice和ggplot2来实现。

让我们来关注最常用的三个包:graphics, lattice、ggplot2。

graphics

基础绘图包graphics,在安装R时默认安装,启动R时默认加载。它囊括了常用的标准统计图形,如条形图,饼图,直方图,箱线图,散点图等。在R里运行:

demo(graphics)

会给出一些常用图形的样例(如下图),及生成这些图形的代码。

R语言:可视化概览

lattice

在使用之前,需要先加载lattice包。lattice包提供了大量新的绘图类型、默认颜色、图形排版等优化。同时,它还支持“条件多框图”—— 如下图,在不同月份(Month),观察臭氧浓度(Ozone)与气温(Temp)之间的关系。这里,“月份”就是我们所说的条件,条件多框图可以让我们更清楚地看到Ozone与Temp的关系是否受月份的影响而发生变化。

library(lattice)
xyplot(Temp ~ Ozone |factor(Month),
	data = airquality,
	main="Temp(F) vs Ozone(ppb) by Month",
	layout=c(5,1))

R语言:可视化概览

ggplot2

ggplot2由Hadley Wickham根据Grammar of Graphics(图形的语法)中提出的理论而开发。它将绘图视为一种映射,即从数学空间映射到图形元素空间。它的绘图方式类似于我们平时生活中画图,先创建一个画布,然后一层层往上叠加信息。ggplot2是R中最常用到同时也是功能最强大的绘图包(Python中也有了ggplot2的实现——plotnine,你只需要对R语言中的ggplot2代码稍作修改,就能直接在 Python 中运行)。

我们用ggplot2中自带的数据diamonds为例来描述绘图过程:绘制钻石克拉数(carat)与价格(price)的关系,同时将纯度(clarity)作为颜色变量。在代码中,carat, price, clarity分别被映射到了x轴,轴y及color。

library(ggplot2)
ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
	geom_point(aes(color=clarity))

R语言:可视化概览

如果我们想在图中增添统计变换,如两变量关系的平滑曲线,仅需增加一行代码

ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
	geom_point(aes(color=clarity))+stat_smooth()

R语言:可视化概览

同样的,如果我们想分析在不同切工(cut)下克拉数与价格的关系(类似于lattice中的条件多框图),也是一行代码的工作量

ggplot(data=diamonds, mappings=aes(x=carat, y=price))+
	geom_point(aes(color=clarity))+
	stat_smooth()+facet_wrap(~cut)

R语言:可视化概览

ggplo2的基本概念有:

  • 数据(data)和映射(mapping)

  • 几何对象(geometric)

  • 标度(scale)

  • 统计变换(statistics)

  • 坐标系统(coordinate)

  • 分面(facet)

使用ggplot2绘图的过程就是选择合适的几何对象、图形属性、标度、统计变换、坐标系统和分面等来充分展现数据中所含有的信息的过程。ggplot2的强大之处就在于它的灵活性,通过不同图层的叠加可以做出非常有意思的图形。

R Graph Gallery

除了上述提到的三个常用绘图包,R还有很多其他图形绘制的工具,如绘制3D图形的plot3d,rgl,绘制地图的ggmap,leaflet,交互式可视化plotly等等。在这里,我们介绍一个神奇的网站 THE R GRAPH GALLERY (https://www.r-graph-gallery.com)。这个网站为我们提供了平时常用的8大类46种共计数146个(日期:2019-05-13)可视化样例及代码,及他们使用的工具包。

R语言:可视化概览

R语言:可视化概览

R语言:可视化概览

R语言:可视化概览

例如,点击Sankey diagram(倒数第二行最后一个)的图标,会进入如下的界面。可以看到NetworkD3这个包能用来绘制Sankey图。

R语言:可视化概览

点击图形下的链接,网站会给出该图形的详细信息及实现的代码

R语言:可视化概览

THE R GRAPH GALLERY 网站不仅提供各类统计图形的R的实现方式,同时也在收录相对应的Python的实现,是学习可视化非常好的资源。

R Shiny

在我们的分析工作中,有时不仅要展示模型结果,还需要把分析历程展示给听众;同时,听众也希望能够参与到分析探索中来。这就需要我们将不同部分的分析 —— 如数据探索,模型构建及评估的过程整合到一起,同时增添可交互性。

Shiny (http://shiny.rstudio.com/)是由RStudio开发的一个开源的 R 包,它为使用 R 构建 Web 应用提供了一个有力的 Web 框架。使用Shiny,我们可以用R语言轻松开发交互式web应用。在Shiny的官网上给出了一些App的应用案例:

R语言:可视化概览

我们通过官网上Kmeans example的例子(Demo)来看一看Shiny App的基本功能。这个例子中用的是R自带的鸢尾花(iris)数据,用过R(或者Python)的朋友应该对这个数据非常熟悉。数据里包含了花萼长度(Sepal.Length),花萼宽度(Sepal.Width),花瓣长度(Pepal. Length),花瓣宽度(Pepal.Width)及花的品种(Species)信息。

在Demo中假设品种未知,通过其它变量将鸢尾花样本分群。默认选项是将样本按照Sepal.Length和 Sepal.Width分成3群。

R语言:可视化概览

通过Demo左侧的工具栏,我们可以选择不同的分群变量(Pepal. Length,Pepal.Width)及分群个数(2),来观察不同的分群效果

R语言:可视化概览

实现这样一个Shiny App的需要两部分脚本:用户交互(shinyUI)及服务器(shinyServer)脚本。

  • shinyUI部分控制页面的布置和展示。一方面,在这里可以定义一系列的小工具,如滑动条(sliderInput),选项卡(radioButtons),输入框(numericInput)等来接收用户传入的参数,储存在input变量里。另一方面,它接收shinyServer传来的output变量,并根据用户的定义把它展示在前端。

  • shinyServer生成所要展示的结果。它从shinyUI读取input变量,将其作为参数进行模型计算或图形绘制,然后将结果储存在output变量里,传给shinyUI前端。

总结来说,shinyUI用于根据用户的输入生成input,同时展示output结果,shinyServer接收input参数,计算生成output。有兴趣的朋友可以在Shiny的官网找到详细的培训教程。

总结

在本文,我们介绍了一些R的常用绘图包以及学习资源:graphics通常用于快速基本的分析绘图,个性化的图形建议使用ggplot2来实现。R Graph Gallery从需求出发,归纳总结了各类图形的使用案例。而Shiny整合前面的所有,生成可交互式的dashboard。这些都是工具,而作为数据科学家,我们要做的就是利用这些工具让数据“说话”。

Reference

  1. BBC Visual and Data Journalism cookbook for R graphics https://bbc.github.io/rcookbook/

  2. Paul Murrell(2011) R Graphics Second Edition

  3. ggplot2 Reference https://ggplot2.tidyverse.org/reference/

  4. THE R GRAPH GALLERY https://www.r-graph-gallery.com

  5. Shiny http://shiny.rstudio.com

R语言:可视化概览

点击阅读原文,同步关注知乎专栏,了解更多。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++Templates中文版

C++Templates中文版

David Vandevoorde、Nicolai M.Josuttis / 陈伟柱 / 人民邮电出版社 / 2008-2 / 69.00元

本书是C++模板编程的完全指南,旨在通过基本概念、常用技巧和应用实例3方面的有用资料,为读者打下C++模板知识的坚实基础。 全书共22章。第1章全面介绍了本书的内容结构和相关情况。第1部分(第2~7章)以教程的风格介绍了模板的基本概念,第2部分(第8~13章)阐述了模板的语言细节,第3部分(第14~18章)介绍了C++模板所支持的基本设计技术,第4部分(第19~22章)深入探讨了各种使用模板......一起来看看 《C++Templates中文版》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具