技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> 数据可视化初体验(R语言)

数据可视化初体验(R语言)

浏览:1927次  出处信息

我对数据可视化的认识

   前些天通过一张美丽的图片,闯进了FlowingData这个世界,开始真正去了解数据可视化。“The greatest value of a picture is when it forces us to notice what we never expected to see”是该网站about中的第一句话,在逛了不少可视化的网站和博客之后,个人觉得这句话是数据可视化最好的注解。大数据像是‘黑盒子’一样的新世界,现在我们用数据挖掘来探索这个世界的规则和信息。但是没有问题导向的数据挖掘需要花费大量的时间来探索。另外眼睛才是我们认识世界最直接有效的渠道,所以如果我们能够将数据世界具体化呈现出来,那么其实很多规则我们用眼睛就可以看得到。甚至看到更多隐藏的信息。数据可视化不仅仅是为了展示数据,而是通过图像残留来增加人思考的时间和质量,加大概率发现隐藏在数据背后的未知。

   这幅图是twitter近3亿用户按经纬度和语言的分布。逻辑上很简单的图,但当却耐人寻味。你可以把一张欧洲地理地图、公路铁路地图或者其他信息图与其进行对比,你会快速的清楚大部分的twitter用户所处的各种环境,甚至更多的信息,当然带来更多的思考点,而且这样的图形会经常浮现,让你整天处于思考状态。

   另外发现了很多非常有意思的数据可视化网站:纽约时报的可视化工作实验室(商业性强);Information is beautiful(想象力丰富,数据可视化比赛);Flowingdata(前沿技术应用、产品化)。  

R的可视化

   目前数据可视化大军大都在UCD方面,像百度的流量研究院,和腾讯的qq游戏地图这些都是优秀的数据可视化产品,完美的效果和用户体验。但对数据从事人员来说,数据可视化是锦上添花的一部分,他们更重要的工作是从数据中挖掘出规则和信息,然后才将这些结果可视化出来。说到这里就有一种语言浮出水面:R。R是一种优秀的具有很强数据可视化功能的数据分析语言。

   很些人总结出了一些数据可视化的步骤,如这里。这里我讲一下我的方法:类比代数学中的元素与映射,数据可视化本质上就是两样东西,一样是实体(你的研究对象,可以是任何范畴),一样是联系(就是两个或多个实体之间的关系)。其中实体和联系都有属性,比如把人当成实体,那么人有身高、体重等属性;而人与人之间的联系的属性有像亲密程度、贫富差距等属性。那我们需要的就是把这些信息最清晰的表现出来,我觉得这样的逻辑方式可以帮帮助我们对可视化进行分解,更容易解放想象力。 下面以中国航空数据图作为例子来讲一下。从这里可以得到机场的数据。从这里可以得到所有航线的数据。这两个数据集都是包含全世界的,需要从中将中国的数据提出。还需要做一些数据处理和分析工作,篇幅关系下面只给出了图形部分的代码。分几步来说:

1.将机场当成实体,它的一个属性是航线的数量。用直方图来体现

   boke_zhifan

ggplot(cnt) + geom_bar(aes(x = cnt$count))
2.机场有另外一个属性:地理位置。用地图来体现,并将航线数量展示上去

   boke_tu3

p=ggmap(get_googlemap(center='china',zoom=4,maptype='terrain'),extent='device')
p+geom_point(data=chinaport,aes(x=lon,y=lan),colour='blue',size(chinaport$count/10)
             alpha=0.6)
3.接下来就是将机场的联系展示上去。

   boke_7

ggmap(get_googlemap(center = 'china', zoom=4, maptype='roadmap'),extent='device')+#画地图
geom_point(data=chinaport,aes(x=lon,y=lan),colour = 'blue',
           size=(chinaport$count/20),alpha=0.8)+  #画机场
geom_line(data=dat,aes(x=lon,y=lan,group=group), size=0.1, #画航线
          alpha=0.05,color='red4')
4.有时候一张图是不足以体现数据的,这里用一张gif图来表现每个机场的航线数。(点击看大图)

   hanxian

require(animation) #导入所用包
draw = function(i){  #画图函数
   one = chinaport[1:i,]  
   p=ggmap(get_googlemap(center='china',zoom=4,maptype='terrain'),extent='device')  
   p+geom_point(data=one,aes(x=lon,y=lan),colour='blue',size(one$count/15),alpha=0.6)+  
   geom_point(data=one,aes(x=lon,y=lan),colour='red',alpha=0.6) 
                  } 
oopts = ani.options(ffmpeg = "D:/Program Files (x86)/ImageMagick-6.8.7-Q8/ffmpeg.exe") #设置ffmpeg 
saveVideo({  
    for(i in 1:36) print(draw(i)) #循环调用画图函数  
    ani.options(interval = 0.6, nmax = 230) },  
    video.name = "hanxian.gif", other.opts = "-b 500k")

可重复和自动化统计报告

   国内一个专注于R语言自动化报告的学者谢益辉,开发了一个基于R语言的Knitr包,主要用来实现可重复统计报告。Knitr包主要是实现在标记语言Markdown中嵌入R代码,然后执行Markdown脚本就可以生成一份具有R程序分析结果的报告。

   具体步骤为:

   1. 先在R中建一份R-Markdown(.md)文件,可直接在其中写Markdown脚本。

   2. 可以通过以下方式插入R脚本,并可以通过调参,控制R程序的输出包括表和图的各种属性控制。

   3. 最后通过Knitr来运行这份.md文件可直接生产一份html文档,也可通过latex进一步产生一份pdf报告。

   通过这个方案,其实我们可以定制一些日常可视化的数据分析报告,这不仅要比密密麻麻的数据报表来得要鲜活得多,而且支持更加深入的分析和针对性的结果展示.

   注:本文采用R中的ggplot包实现可视化,这是一个图层逻辑的可视化工具(跟本文的可视化逻辑很符合),在这并没有详细阐述,待接下来再写一篇来好好介绍一下神奇的ggplot。

建议继续学习:

  1. 好软件推荐 gnuplot 来做可视化数据    (阅读:2735)
  2. 给数据穿上美丽的外衣    (阅读:2723)
  3. 惊现!表面下的隐藏信息――浅谈信息可视化    (阅读:2474)
  4. 浅谈信息可视化――航空篇    (阅读:2273)
  5. 白话Block Formatting Context    (阅读:1955)
  6. 浅析来源分析的数据可视化    (阅读:2089)
  7. 信息可视化研究范畴及案例    (阅读:1791)
  8. 轻触,数据美丽的外衣    (阅读:1767)
  9. 一种基于flex的可视化多层流量切分界面的实现    (阅读:1442)
  10. iOS可视化编程 Tips 之“无需代码设置圆角”    (阅读:2068)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1