CWYAlpha

Just another WordPress.com site

Archive for 一月 2012

Thought this was cool: 什么是大数据(下)

leave a comment »

前文,大数据的特征除了规模以外还有快速和多样

快速(Velocity)

数据流入组织的速度越来越快,这使得数据的速度和规模同样重要。以前只有少数行业如金融交易公司需要关注快速传输数据,那么现在许多行业都将面临这个问题。

其原因何在?因为如今我们处于互联网和移动时代,网络会记录下人们对各种产品和服务的消费,这样产生了大量的数据并流回到供应商手中。例如网上零售商就能够记录下客户的每一次点击和交互。那些能够迅速地利用这些信息的企业就能获得竞争优势。智能手机时代的出现则再次增加了数据流入的速度,因为消费者能随身携带它们以获取地理信息数据。

如果仅仅涉及到数据流入速度的话倒还好办,高速的数据流可以存到大容量存储器中,以后方便时再作处理。重点问题在于对输入数据进行处理的速度,或者说反馈系统的响应速度。打个比方,如果你大脑的处理速度很慢,只能处理五分钟前的交通位置,你甚至没办法过马路。对于这种快速传输的数据,其行业术语就是“数据流”或“复杂事务处理”。

考虑处理数据流有两个主要原因。第一个原因是当数据流太快而超出存储能力的情况。比如在欧洲核子研究中心大型强子对撞机会产生极多的数据,以至于科学家们必须放弃绝大多数的数据。第二个原因是应用程序对数据快速响应的问题。由于移动应用和在线游戏的崛起,这是一个越来越常见的情况。目前处理数据流的产品有IBM的InfoSphere Streams,以及Twitter的Strom和雅虎的S4。

如上所述,相比输入数据而言,系统的反应速度更为重要。反馈回路更快就会获得更大的竞争优势。正是这种对速度的需要,带动了关键值存储和纵列数据库的发展。这些数据库的形式也正是NoSQL概念下的一个大类。

多样(Variety)

很少有数据以所需要的形式存在。大数据系统的一个共同主题就是:原始数据是多样的,而且不能落入整齐的关系结构中。这类数据可能包括社交网络文本、图像数据、直接从传感器得到的数据。这些数据都是异构的、缺乏整合。即使在网络上,计算机之间的通信数据也是凌乱的。不同的浏览器发送着不同的数据,用户隐瞒着自己的信息,他们可能会使用不同的软件或不同的版本进行沟通。

大数据处理的一个常见方法是采用非结构化数据,然后从中提取有序的内容。因为对源数据进行处理意味着某种程度上信息的丢失。而大数据处理强调一个原则:即在条件允许下保留一切。

尽管关系数据库非常流行也很好理解,但它并非永远是数据的唯一目标地。某些数据库能更好地适应某些数据类型。例如XML编码的文件,存放在一个原生XML数据库中(如MarkLogic)中能得到最大的用途。社交网络关系本质上是图形化的,用图形数据库(如Neo4j)对数据进行操作会更简单、更高效。

关系数据库的缺点是其架构的静态性质。在一个灵活、探索性的环境中,计算结果将会随着数据不断变化。半结构化的NoSQL数据库能满足这种灵活性的需要。

注:本文主要翻译自Edd Dumbill的文章

from 数据科学与R语言: http://xccds1977.blogspot.com/2012/01/blog-post_31.html

Written by cwyalpha

一月 31, 2012 at 7:38 上午

发表在 Uncategorized

Thought this was cool: 提高代码质量的方法有哪些?

leave a comment »

人跟人的能力千差万别,所以写出来的代码质量,肯定是不同的。有的人,写一个小逻辑,可能需要100行,而有的人,可能仅仅需要10行。代码永远会有Bug,在这方面没有最好只有更好。高效是程序员必须作到的事情,无错是程序员一生的追求。复用、分而治之、折衷是代码哲学的基本思想。模块化与面向对象是实现高效无错代码的方法。高效无错代码需要思想与实践的不断反复。

如何做到代码高效无错,提高代码质量的方法有哪些?又有哪些经验和技巧呢?本文整理自知乎网,与开发者们一起探讨该话题。如果您有好的想法,欢迎在评论中列出。

一起来看下编程界各位大牛如何为您支招:

互联网评论员 孙立伟

1. 代码风格和规范

多看看网上的一些代码规范,仔细思考一下制定这些规范的出发点是什么。例如Oracle(前SUN)公司的代码规范oracle.com,Google的代码规范googlecode

2. 学习最佳实践

在编码中遇到的各种大大小小的问题,首先不是自己去“闭门造车”的冥思苦想,多用Google,搜搜是否已经有现成的解决方案。

3. 阅读优秀的开源代码

网上有很多优秀的开源项目,针对你自己项目中遇到的问题,找找类似的开源项目,学习、研究,最重要的是变成自己的东西。

4. 学好英语

英语是目前所有编程语言的基础。你的文件名、类名、方法名、变量名都是需要一个好的英语基础才能够起得合适。任何的业务逻辑,都需要你使用以英语为基础的计算机语言表达出来。英语不好,你的代码永远看起来不专业。

互联网评论员 钟声

靠牛人带,靠代码Review,应该对初期成长很有帮助,不过受环境限制较大,可能并不是所有人都能有这种幸运。多看启发思路的书,多看开源代码,用辅助工具(lint、findbugs等),都是靠谱的答案,不过我还想补充一点,在这些标准答案背后,更重要的一点:要充分利用自己的敏感,当看着一堆需要自己负责的成品、半成品代码时,哪怕只有一点点的不爽,千万不要忍,而要勇敢地——改!大刀阔斧、大张旗鼓!

其实道理并不复杂:重复的东西可以合并,零散的逻辑可以集中。让一切保持有条不紊,只需要拆解得当。此时,那些曾经空洞的理论开始具现化,节省了思考的时间,也成为了顺手的工具。“DRY”一个词就可以说明白原则,“技术债务”一个词就可以争取到重构时间。

DSP软件程序员 冯旭辉

1.学会模块分割是提高代码质量的关键

人的精力有限,人的经验也有限,但把问题拆分成子问题,形成一个个独立的模块,这就可以让我们的精力更加集中于某个细微的问题,无论如何,都会大大提高模块的编写质量。

2.要从一开始就养成一个良好的编码风格

比如函数的头部注释的格式,函数间的分割方式,函数组的分割方式形成固定的程式。并使用编辑器的宏功能预先做好快捷方式,需要时直接生成出来这些格式化文本。

3.需要使用CVS之类的源代码版本管理工具

每完成一个小功能改进或者bug修复就提交,这样下来,你的工作就是逐步精化。

4.使用诸如MantisBT之类的bug管理工具

对每一个出现的bug,修改完成后,进行详细的处理过程描述,以备今后再犯类似的错误。

还有些码农认为,应该多读好的代码,比如著名开源框架的代码的写法,在保证功能、效率的基础上思考结构,回顾下自己编写的代码;反复评审代码,规范代码、改进实现方案的写法。同时还应该尽一切努力减少代码重复,将代码分解为自成体系,可测试的小块 ;最后测试,测试,再测试。

当然这还需要有很强的毅力。

转自:http://sd.csdn.net/a/20120129/311136.html

本文链接

from 博客园_业精于勤,荒于嬉;行成于思,毁于随: http://www.cnblogs.com/hnrainll/archive/2012/01/31/2332577.html

Written by cwyalpha

一月 31, 2012 at 2:24 上午

发表在 Uncategorized

Thought this was cool: 什么是大数据(Big Data)

leave a comment »

大数据(Big Data)是指那些超过传统数据库系统处理能力的数据。它的数据规模和转输速度要求很高,或者其结构不适合原本的数据库系统。为了获取大数据中的价值,我们必须选择另一种方式来处理它。

数据中隐藏着有价值的模式和信息,在以往需要相当的时间和成本才能提取这些信息。如沃尔玛或谷歌这类领先企业都要付高昂的代价才能从大数据中挖掘信息。而当今的各种资源,如硬件、云架构和开源软件使得大数据的处理更为方便和廉价。即使是在车库中创业的公司也可以用较低的价格租用云服务时间了。

对于企业组织来讲,大数据的价值体现在两个方面:分析使用和二次开发。对大数据进行分析能揭示隐藏其中的信息,例如零售业中对门店销售、地理和社会信息的分析能提升对客户的理解。对大数据的二次开发则是那些成功的网络公司的长项。例如Facebook通过结合大量用户信息,定制出高度个性化的用户体验,并创造出一种新的广告模式。这种通过大数据创造出新产品和服务的商业行为并非巧合,谷歌、雅虎、亚马逊和Facebook,它们都是大数据时代的创新者。

大数据的特征
作为一个包罗万象的术语,“大数据”相当的含糊不清。同样的,“云”这个概念也涵盖了不同的技术。大数据系统的输入端可以列一个极长的表,包括了社会网络、Web服务器日志、流量传感器、卫星图像、广播音频流、银行交易、摇滚音乐MP3、网页的内容、政府文件扫描、GPS路线、金融市场数据等等。而这些数据本质上并非是相同的东西。

IBM公司把大数据的特征概括成三个“V”,也就是规模(Volume)快速(Velocity)多样(Variety)。这三个方面是观察数据本质和软件处理平台的有用视角。

规模(Volume)

能处理大数据所获得的好处在于能对大数据进行分析。更多的数据强于更好的模型,如果你的预测模型可以考虑到300个变量而非仅仅6个变量,其预测能力多半能更为准确。

大数据的规模是传统IT架构所面临的直接挑战。它要求可扩展的存储和分布式的方法来完成查询。许多公司已经拥有大量的存档数据,但却没有能力来处理它。传统的关系数据库无法处理大数据的规模,目前可选择的方法包括大规模并行处理架构、数据仓库、或类似Greenplum的数据库、以及Apache Hadoop解决方案。其中,数据仓库比较适合于预先确定的数据结构和变化缓慢的数据。而Apache Hadoop则没有这些限制。

Hadoop的核心是一个分布在多个服务器上的计算平台。它作为开放源码首先由雅虎开发并发布,它是谷歌所提出的MapReduce方法的实现。 Hadoop的MapReduce包括了两个阶段:向多个服务器和操作系统分发数据,即map阶段,然后重组并行计算结果,即reduce阶段。

Hadoop利用自身的分布式文件系统(HDFS)来存储数据,这使得多个计算节点能获取数据。一个典型的Hadoop使用模式包括三个阶段:加载数据到HDFS、MapReduce操作、从HDFS检索结果。这个过程本质上是一个批处理,适合于分析或者是非交互式的计算任务。正因为如此,Hadoop本身不是一个数据库或数据仓库的解决方案,而是分析的辅助。

最知名的Hadoop的用户之一是Facebook。它的MySQL数据库存储核心数据。然后再反映到Hadoop系统进行计算。计算结果会再次转移到MySQL,以提供给用户的页面使用。

注:本文主要翻译自Edd Dumbill的文章

from 数据科学与R语言: http://xccds1977.blogspot.com/2012/01/big-data.html

Written by cwyalpha

一月 30, 2012 at 10:23 上午

发表在 Uncategorized

Thought this was cool: ggplot2绘图入门系列之五:时间序列(完)

leave a comment »

ggplot2包也能对时间序列数据绘图,但在处理上需要有些注意的地方。下面我们以上证指数为例进行作图,首先利用quantmod包从yahoo数据源获取从1997年以来的数据,存于变量SSEC中,抽取收盘数字,然后分别提取时间数据和指数数值,绘图结果如下图。

library(quantmod)
library(ggplot2)
getSymbols('^SSEC',src='yahoo',from = '1997-01-01')
close=(Cl(SSEC))
time=index(close)
value=as.vector(close)
p <- ggplot(data.frame(time,value),aes(time,value))
p+geom_line()

我们希望能够在图中加入一些其它的说明元素,以丰富视图中所包含的信息。这些信息包括用不同的颜色区块来表示二代核心和三代核心的执政时期,以及对中国证券市场的若干大事件进行标注。最后的代码和结果如下。

yrng=range(value)
xrng=range(time)
data=data.frame(start=as.Date(c('1997-01-01','2003-01-01')),end=as.Date(c('2002-12-30','2012-01-20')),core=c('jiang','hu'))
timepoint=as.Date(c('1999-07-02','2001-07-26','2005-04-29','2008-01-10','2010-03-31'))
events=c('证券法实施','国有股减持','股权分置改革','次贷危机爆发','融资融券试点')
data2=data.frame(timepoint,events,stock=value[time %in% timepoint])
p+geom_line()+
geom_rect(aes(NULL,NULL,xmin=start,xmax=end,fill=core),ymin=yrng[1],ymax=yrng[2],data=data)+
scale_fill_manual(values=alpha(c('blue','red'),0.2))+
geom_text(aes(timepoint,stock,label=events),data=data2,vjust=-2,size=5)+
geom_point(aes(timepoint,stock),data=data2,size=5,colour=alpha('red',0.5))


 

from 数据科学与R语言: http://xccds1977.blogspot.com/2012/01/ggplot2_29.html

Written by cwyalpha

一月 29, 2012 at 5:38 上午

发表在 Uncategorized

Thought this was cool: 概念化”增强学习”(二)

leave a comment »

就像做通信的都绕不过信息论,要研究增强学习也跑不掉MDP。

增强学习的基础理论:马尔科夫决策过程(MDP)

通过MDP可以符号化地定义一个多状态带时延反馈的增强学习过程。一个MDP包括一个状态集合S,一个操作集合A,一个反馈函数R:S×A->R,以及一个状态迁移概率函数T(s,a,s’): S×A->S。可以结合前文的图1里来理解这里符号的意义。

这个模型的求解很简单,要输出的最优策略\pi其实是一个状态到操作的映射函数S->A,即在什么状态下应采用什么操作是确定的(根据短时平稳性假设,至少是短时确定的)。为得到这样的策略,我们首先需要定义在状态s时不同操作所能获得的期望收益,并把这个收益最大化。以下公式即定义了这个期望最大的收益(这里使用的是无限视野带衰减的目标函数):


获得这个最大收益时所采取的策略:


这两个迭代式,在T和R都已知的情况下,可以通过初始化,然后迭代计算使得结果收敛,过程跟pagerank的计算差不多。而根据是对V*进行迭代还是对\pi进行迭代又产生了值迭代和策略迭代两种算法。性能上稍有不同,结果是一致的。值迭代又可以演化出增强学习的代表性算法Q-learning。

MDP是一个很理想化的模型,它假设了我们事先对环境的完全了解(转移概率函数T及反馈函数R),而增强学习要解决的问题恰恰是对环境信息的未知。虽然MDP模型并不具有现实可用的意义,但通过它我们定义了一整套的符号系统以及问题解决的途径,极大地简化了对问题的描述与求解。在理论上解决了一些抽象层面的问题后(如收敛性、计算复杂度),要把它推广到现实的应用,只要着眼于解决对T及R函数的估计或替代即可。那些看似没有实用价值的数学模型的意义就在于此。

一般情况下MDP的求解

在现实应用中,MDP的环境模型(T及R函数)的参数是未知的,所以增强学习的过程可以化归为一个参数估计问题,只要能通过逐步得到的数据迭代地修正模型参数或算法参数,就可以直接利用通过MDP推导得到的结果。要实现这个目的,也有两种方式:model-based(学习模型的参数并把估计得到的模型应用于策略输出)和model-free(不断根据数据输入调整策略的输出,而无需估计具体的模型)的。两种实现方式各有千秋,一般来说model-free的方法需要更多的迭代步数才能收敛,但需要更少的环境知识,而model-based的方法则正好相反。由于这里主要是概念性的描述,欲求更多细节与方法实现的,可参看文后的文献。

增强学习潜在的应用场景

由于增强学习解决的是一类问题,所以它在自适应控制、机器人控制、博弈等等领域都有广泛的应用。从增强学习与有监督学习的对比可以看到,增强学习特别适用于那些没有启动数据的环境。搞推荐系统的朋友,这个时候你是不是瞬间就想到了冷启动问题。

博弈论的情景

以我粗浅的理解,可以把博弈论所讨论的问题理解为群体式的增强学习。每一个agent都与其它agent交互,并把对方的反馈视为环境的输入,agent必须学习在这个环境里最优的生存法则。比增强学习更为复杂的是,这个时候的环境是非稳定的,你在调整策略的同时,其它agent也在调整着自身的策略。一个著名的例子是囚徒困境的实验,多位社会精英为自己的agent设计出理想的增强学习型算法,但最后获胜的却是最简单的策略:以牙还牙。个中的奥妙颇是耐人寻味,在multi-agent博弈的环境里,非线性的因素是不可建模亦不可被预测到的,回归到最基本的策略往往能得到出人意表的效果,虽然它缺乏学习(实际也可能是群体学习筛选的结果),它却也省去了过拟合的烦恼。延伸来说,如果你不能掌控一个系统的复杂性,用启发式的策略做一些力所能及的事情,比你搭建一个同样复杂的系统试图去理解它是更为合理的。

结文

到此,增强学习的基本概念与模型算是摆在面前了,应该不会有下文了,将来如果有,也会结合着我自己的实践体会来写。虽说只是一个缩略版,这些模式对于实际要做的事情也没有直接的帮助,但我们需要这样的对问题建构的范式,以设计出符合自己系统需要的模型来。

参考文献:

【1】Reinforcement learning: A survey;  Kaelbling, L.P. and Littman, M.L. and Moore, A.W.; Arxiv preprint cs/9605103; 1996

关于作者

阿稳, 豆瓣, 算法工程师
推荐系统;数据挖掘;算法架构及实现的可扩展性;R环境编程

如果你的问题已经能从我的博客中得到解答,就最好不过了:http://www.wentrue.net/blog/

from 不周山: http://www.wentrue.net/blog/?p=1426

Written by cwyalpha

一月 28, 2012 at 3:38 上午

发表在 Uncategorized

Thought this was cool: 基于电视节目社会化服务(Social TV)汇总

leave a comment »

一、基于电视社会化服务简介

基于电视社会化服务(Social TV)其实就是将社交媒体(例如微博和其他SNS等)同电视进行无缝地结合,让电视成为社交媒体的重要终端。这类服务的本质目的是为了不同地方的电视观众能够方便地共享和讨论他们正在观看的电视节目,基于电视通过社会化途径产生更好的互动,提供更好的观看电视的体验。基于电视的社会化服务也被认为是2012年的一个热点趋势

Social Television is a general term for technology that supports communication and social interaction in either the context of watching television, or related to TV content. It also includes the study of television-related social behavior, devices and networks. Social television systems can for example integrate voice communication, text chat, presence and context awareness, TV recommendations, ratings, or video-conferencing with the TV content either directly on the screen or by using ancillary devices.(Via Wikipedia)

二、国内基于电视社会化服务


1.新浪看点是新浪微博旗下基于微博好友关系的多媒体分发平台。在看点,你可以看新闻、听音乐、赏大片……并与微博好友边看边聊,支持一键分享节目亮点到微博,与全国微博网友边看边聊,自己动手,制作合集。春晚期间,看点上的视频总播放量超过了2000万,看点依托于微博,不容小视。

链接:http://kandian.com/


2.网易电视指南客iPhone版:用户通过它可了解当前的热播节目,并实时分享电视所带来的快乐与感动。主要功能:1)节目预告:免费好用的手机电视报2)热门排行:掌握本周最受关注节目3)编辑推荐:告诉你今晚可以看什么4)跟贴盖楼:一边看电视一边来评论5)定时提醒:精彩赛事剧集不再错过

链接:http://m.163.com/tveasy/


3.卫视通是凤凰网一款社交电视(Social TV)应用,通过卫视通您可以: 1. 了解全国几十家电视台今日播出的特色节目。 2. 按电视台分类查询特色节目的详细资料、播出时间。 3. 与朋友、观众、主持人交流,发表对节目的看法和投票、参与讨论。 4. 关注喜欢的节目,并在节目播出前指定时间获得通知提醒。 5. 将自己正在看的、关注的、参与讨论的节目分享给微博上的好友。

链接:http://wst.ifeng.com/


4.蜗牛 – iKan.TV: 当你看电视的时候,在手机上打开“蜗牛”,它让电视变得更有趣!目前支持Android和iPhone。

链接:http://www.woniutv.com/


5.电视切客:可以实时地对电视节目进行评论,同时和在看这个电视的朋友互动。目前已经改名为乐刻邦,转型为专注于美剧的剧集发现分享社区。

链接:http://tvqieke.com/


6.“TV-time” 是一款围绕电视节目的进行签到和评论的互动应用,用户可以在客厅一边看电视的同时,一边通过手机登陆TV-time,与观看相同节目的其他好友一起交流讨论,是用户观看电视的“第二屏幕”。目前提供了Android客户端。(Via

链接:http://www.tvtime.me/


7.火花 · 电视互动:提供实时互动功能,电视节目预告,热门节目等等,目前提供了iPhone客户端。

链接:http://huohua.tv/


8.电视e族:集合全国电视节目预告表,收藏喜欢的节目,在节目开播前将收到通知提醒,参与有奖竞猜、投票,发表对节目的看法,参与节目互动,谁在和你观看同一档节目,结识更多有趣的人,与TA聊天互动。

链接:http://www.tvezu.com/


9.甜芋头是一个可以让你便捷地分享正在做什么,并以此来找到趣味相投的朋友。用户可以方便的分享,自己在看的电视节目,在听的音乐,在参加的活动,在读的书,分享自己的想法,分享自己在玩的游戏等等,当然通过这样一个站你可能发现很多很你在做同样事情的人,并且你可以和他们方便的进行交流。(Via)目前网站已经下线。

链接:http://tianyutou.com/

三、国外基于电视社会化服务

1.Hot Potato是一个提供各类活动/事件的“签到”(check-in)的在线服务。用户可以Check-in的内容包括:正在看的电视,正在听的音乐,参加什么会议,正在看的书,正在想的事情,正在玩的游戏以及其他任何正在做的事情。当然通过这样一个站你可能发现很多很你在做同样事情的人,并且你可以和他们方便的进行交流。之前一度也传言Facebook要收购Hot Potato,这样一种服务和Facebook相结合可能确实会是一种不错的结合。(Via)目前已无法访问。

链接:http://hotpotato.com/

2.Miso是一个关于你正在看什么影视剧的在线平台。用户可以查看目前正在播放的影视剧,然后进行Check-in,你可以查看其他哪些用户也在使用这些类似的影视剧,并且可以查看哪些是目前大家收看最多的影视剧。Miso目前与视频网站Revision 3合作,用户在观看Revision 3网站上的视频时,可以随时通过Miso进行“签到“,告诉别人自己正在看哪些影视剧。(Via

链接:http://gomiso.com/

3.PlayPhilo主要模式是通过check-in的方式鼓励用户分享电视节目、赚取积分获得奖励。PlayPhilo的运营模式很简单,如同Foursquare用户是到了各个地点进行check-in,PlayPhilo是当用户看了某个电视 节目,比如某电视剧、真人秀、演唱会等,可以通过iPhone、Android等智能手机及Web平台进行check-in,分享你目前正在看什么电视节 目?有什么感想?等等。PlayPhilo旨在通过check-in这种方式帮助用户发现一种新的搜索并分享电视节目的方式,让手机、PC互联网、电视以另外一种形式融合 起来,当然为了鼓励用户,PlayPhilo也借鉴了Foursquare的赢取积分、争抢Mayor等激励方式,用户可以获得的实质性奖励还包括收看付 费节目、获取某电视剧DVD等。(Via

链接:http://www.playphilo.com/

4.GetGlue是一个个性化内容推荐系统,用户可以Check-in在看的书,在看的影视作品等,在用户为电影、书、游戏和音乐评分的同时,会不断有相关的推荐显示出来。通过这种Check-in用户也会赢得不同的书签。(Via

链接:http://getglue.com/

5.IntoNow可以用它来“签到”正在看的电视节目、电影、剧集,并且可以和好友进行分享。

链接:http://www.intonow.com/

四、小结

电视其实是一个很大的市场,依托于互联网和移动互联网的社会化也能让让用户在看电视时能够有更多和电视或者好友之间的互动和分享,所以这也是为何新浪微博做看点,当然对于国内这个领域的创业者,由于新浪本身自己做了这样的应用,会面临不少的挑战。在国外,Google TV和Apple TV其实更有机会在电视层面直接整合社会化,当然国内由于广电的存在,可能这个领域可能更多还是由广电自己来做吧!

来源:http://www.web20share.com/2012/01/social-tv-china-2.html


© 推荐 for 互联网的那点事, 2012. |
Permalink |
No comment |
Add to
del.icio.us

Post tags:

你可能也喜欢:


YouTube大改版,Google TV还会远吗? (@socialbeta)


谁正赢得Social TV?让Trendrr.tv 来告诉你 (@socialbeta)


【图说】纵看电视社会化的历程


浅谈社会化商业的组织模型


国内短租服务(类Airbnb)汇总

无觅

Feed enhanced by Better Feed from Ozh

from 互联网的那点事: http://www.alibuybuy.com/posts/70015.html

Written by cwyalpha

一月 27, 2012 at 2:53 下午

发表在 Uncategorized

Thought this was cool: ggplot2绘图入门系列之四:再说散点图

leave a comment »

前文中已初步介绍了散点图的绘制方法,本文介绍一些细节方面的参数设置。

1 色彩和形状的控制
数据特征不仅可以用坐标来表示,也可以用不同的色彩或形状来表示。仍以mpg数据集为例,所用到的变量有cty(城市中行驶距离),hwy(高速路行驶距离),displ(排量大小),year(生产年份)

library(ggplot2)
p <- ggplot(mpg, aes(cty, hwy))
p1 <- p + geom_point(aes(colour = factor(year),shape = factor(year), size = displ), alpha = 0.6, position = 'jitter')
print(p1)

我们将1999年生产车型用红色圆形表示,2008年用兰色三角形表示,排量用图形的大小表示,并且设置了透明度和jitter以避免样本点之间的重叠。可观察到2008年生产的大排量车型较多,从而油耗较高,单位油耗行驶距离较短。

2 坐标的控制
上图右上角数据点较为稀疏,这种情况下可用对数变换。为了演示ggplot2对图形坐标的控制,我们对X轴和Y轴均进行对数变换,然后对X轴的坐标显示加以限制,只显示X轴数据的均值,以及一倍标准差的坐标。

cty.mean=with(mpg,mean(cty))
cty.sd=with(mpg,sd(cty))
p1 + scale_x_continuous(trans='log',breaks=c(cty.mean-cty.sd,cty.mean,cty.mean+cty.sd), labels=c("high", "mean", "low")) + scale_y_continuous(trans='log')

3 文字说明
利用geom_text函数可添加文字说明以增强图形的可读性

p <- ggplot(mtcars, aes(x=wt, y=mpg,colour=factor(cyl),label=rownames(mtcars))) 
p + geom_text(hjust=0,vjust=-1,alpha=0.8)+ geom_point(size=3,aes(shape=factor(cyl)))

4 矩阵散点图
ggplot2包中也提供了矩阵散点图函数

plotmatrix(USArrests)+geom_smooth()

from 数据科学与R语言: http://xccds1977.blogspot.com/2012/01/ggplot2_27.html

Written by cwyalpha

一月 27, 2012 at 3:23 上午

发表在 Uncategorized