CWYAlpha

Just another WordPress.com site

Archive for 二月 2012

Thought this was cool: BM25算法简介

leave a comment »

BM25算法,通常用来作搜索相关性平分。一句话概况其主要思想:对Query进行语素解析,生成语素qi;然后,对于每个搜索结果D,计算每个语素qi与D的相关性得分,最后,将qi相对于D的相关性得分进行加权求和,从而得到Query与D的相关性得分。

BM25算法的一般性公式如下:

其中,Q表示Query,qi表示Q解析之后的一个语素(对中文而言,我们可以把对Query的分词作为语素分析,每个词看成语素qi。);d表示一个搜索结果文档;Wi表示语素qi的权重;R(qi,d)表示语素qi与文档d的相关性得分。

下面我们来看如何定义Wi。判断一个词与一个文档的相关性的权重,方法有多种,较常用的是IDF。这里以IDF为例,公式如下:

其中,N为索引中的全部文档数,n(qi)为包含了qi的文档数。

根据IDF的定义可以看出,对于给定的文档集合,包含了qi的文档数越多,qi的权重则越低。也就是说,当很多文档都包含了qi时,qi的区分度就不高,因此使用qi来判断相关性时的重要度就较低。

我们再来看语素qi与文档d的相关性得分R(qi,d)。首先来看BM25中相关性得分的一般形式:

其中,k1,k2,b为调节因子,通常根据经验设置,一般k1=2,b=0.75;fi为qi在d中的出现频率,qfi为qi在Query中的出现频率。dl为文档d的长度,avgdl为所有文档的平均长度。由于绝大部分情况下,qi在Query中只会出现一次,即qfi=1,因此公式可以简化为:

从K的定义中可以看到,参数b的作用是调整文档长度对相关性影响的大小。b越大,文档长度的对相关性得分的影响越大,反之越小。而文档的相对长度越长,K值将越大,则相关性得分会越小。这可以理解为,当文档较长时,包含qi的机会越大,因此,同等fi的情况下,长文档与qi的相关性应该比短文档与
qi的相关性弱。

综上,BM25算法的相关性得分公式可总结为:

从BM25的公式可以看到,通过使用不同的语素分析方法、语素权重判定方法,以及语素与文档的相关性判定方法,我们可以衍生出不同的搜索相关性得分计算方法,这就为我们设计算法提供了较大的灵活性。

 

参考资料:
1. Project2–Lucene的Ranking算法修改:BM25算法
2. Okapi BM25算法详解
3. 谈谈BM25评分

 

转载自:http://www.blogbus.com/public/tb.php/4323230/104136815/ff1e543891f9d4efa93e8186b391309e

 

更详细的BM25 Model的介绍内容在这里:http://nlp.uned.es/~jperezi/Lucene-BM25/

 

from 互联网旁观者: http://blog.sina.com.cn/s/blog_72995dcc01011wdd.html

Written by cwyalpha

二月 29, 2012 at 3:24 下午

发表在 Uncategorized

Thought this was cool: R语言编程入门之五:向量化运算

leave a comment »


和matlab一样,R语言以向量为基本运算对象。也就是说,当输入的对象为向量时,对其中的每个元素分别进行处理,然后以向量的形式输出。R语言中基本上所有的数据运算均能允许向量操作。不仅如此,R还包含了许多高效的向量运算函数,这也是它不同于其它软件的一个显著特征。向量化运算的好处在于避免使用循环,使代码更为简洁、高效和易于理解。本文来对apply族函数作一个简单的归纳,以便于大家理解其中的区别所在。

所谓apply族函数包括了apply,sapply,lappy,tapply等函数,这些函数在不同的情况下能高效的完成复杂的数据处理任务,但角色定位又有所不同。

apply()函数的处理对象是矩阵或数组,它逐行或逐列的处理数据,其输出的结果将是一个向量或是矩阵。下面的例子即对一个随机矩阵求每一行的均值。要注意的是apply与其它函数不同,它并不能明显改善计算效率,因为它本身内置为循环运算。

m.data <- matrix(rnorm(100),ncol=10)
apply(m.data,1,mean) 

lappy()的处理对象是向量、列表或其它对象,它将向量中的每个元素作为参数,输入到处理函数中,最后生成结果的格式为列表。在R中数据框是一种特殊的列表,所以数据框的列也将作为函数的处理对象。下面的例子即对一个数据框按列来计算中位数与标准差。

f.data <- data.frame(x=rnorm(10),y=runif(10))

lapply(f.data,FUN=function(x) list(median=median(x),sd=sd(x))



sapply()可能是使用最为频繁的向量化函数了,它和lappy()是非常相似的,但其输出格式则是较为友好的矩阵格式。
sapply(f.data,FUN=function(x) list(median=median(x),sd=sd(x)))

class(test)



tapply()的功能则又有不同,它是专门用来处理分组数据的,其参数要比sapply多一个。我们以iris数据集为例,可观察到Species列中存放了三种花的名称,我们的目的是要计算三种花瓣萼片宽度的均值。其输出结果是数组格式。

head(iris)
attach(iris)
tapply(Sepal.Width,INDEX=Species,FUN=mean)

与tapply功能非常相似的还有aggregate(),其输出是更为友好的数据框格式。而by()和上面两个函数是同门师兄弟。

另外还有一个非常有用的函数replicate(),它可以将某个函数重复运行N次,常常用来生成较复杂的随机数。下面的例子即先建立一个函数,模拟扔两个骰子的点数之和,然后重复运行10000次。
game <- function() {

    n <- sample(1:6,2,replace=T)
return(sum(n))
}
replicate(n=10000,game())
最后一个有趣的函数Vectorize(),它能将一个不能进行向量化运算的函数进行转化,使之具备向量化运算功能。

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

Written by cwyalpha

二月 29, 2012 at 3:08 下午

发表在 Uncategorized

Thought this was cool: What is a Leap Year?

leave a comment »

Why do some years have an extra leap day and what is it for? Also check out MinutePhysics’ video: http://www.youtube.com
From:
CGPGrey
Views:
27018
3969
ratings
Time:
03:59
More in
Education

from Uploads by CGPGrey: http://www.youtube.com/watch?v=xX96xng7sAE&feature=youtube_gdata

Written by cwyalpha

二月 29, 2012 at 2:08 上午

发表在 Uncategorized

Thought this was cool: 中国微博市场2011年度数据分析

leave a comment »

  中国微博的高速发展是从2010年开始的,这一年当中微博的概念得到了空前的传播,各大门户网站也在这一年纷纷开通微博频道,以新浪、腾讯为代表的微博之争愈演愈烈,微博以高速增长的态势引领着中国互联网服务的发展。经过这一年来的激烈竞争,2011年中国的微博依旧是比较受欢迎的服务,但总的增长速度有所降低,甚至出现了一定下降,这说明微博服务经过一两年的高速发展后,行业开始逐步进入平稳期,本文通过百度指数和谷歌趋势两个第三方系统对于目前国内各个门户微博进行一番统计。

  百度指数和谷歌趋势都是通过用户在百度和谷歌的搜索量为数据基础,以关键词为统计对象,分析并计算出各个关键词在搜索引擎网页搜索中搜索频次的加权和,并以曲线图的形式展现。谷歌网站趋势还可以分析所有网站的流量和受欢迎程度,类似Alexa工具。下面月光博客就以百度指数、谷歌趋势、谷歌网站趋势三个工具对于2011年的门户微博流量和搜索量进行一份统计和分析,门户微博选择流量较为排前的四大门户微博:新浪微博、腾讯微博、搜狐微博、网易微博。

  先使用百度指数来分析各个微博关键字的关注度,根据百度指数显示,在用户关注度上,“新浪微博”和“腾讯微博”的图表显示,新浪微博的知名度依然大为领先腾讯微博,但2011年新浪微博的增长势头放缓,甚至出现了下降趋势。

“新浪微博”和“腾讯微博”

  腾讯微博和网易微博,搜狐微博的用户关注度比较看,腾讯微博还是具有领先优势,并且呈现上升趋势,网易微博,搜狐微博的用户关注度平稳地下降。

门户微博

  四大微博在谷歌趋势上的关注度和百度指数的数据基本一致。

门户微博

  通过谷歌网站趋势可以大致估算出各个门户微博的实际流量情况,以下是四大门户的流量对比。

门户微博

  数据解读:

  1)谷歌网站趋势显示的流量数据与百度指数和谷歌趋势的关键字搜索量差距很大,其中腾讯微博的数据变化最大,新浪微博早先的“一枝独秀”忽然变成了和腾讯微博的“二龙戏珠”,可见腾讯微博的用户对于搜索引擎的使用率偏低,而过于依赖QQ客户端。

  2)谷歌趋势的流量数据显示,新浪微博在2011年4月份开启了新域名weibo.com,因此四月份之前没数据,而在2011年全年大部分时间里,腾讯微博流量数据均超过新浪微博,直到年底才被新浪微博反超,从这里也可以看出,新浪微博的流量和知名度均较为领先,但新用户增长速度已经趋缓,而腾讯微博的流量太依赖QQ客户端,使得其实际流量与用户知名度形成较大反差。

  3)2012年1月份是春节放假,此时腾讯微博的流量下降较快,而新浪微博的流量则在这时反超腾讯微博,我估计这方面的原因,可能是因为1月份方舟子、韩寒的论战在新浪微博进行的如火如荼,这一事件营销导致新浪微博的流量得到不少提升。

  4)无论从流量和知名度上看,搜狐微博和网易微博都已经没有机会了。

  5)从百度指数上看,新浪微博的百度搜索量高的惊人,不仅仅超过了国内最大的SNS网站人人网和开心网,并且在年中超过了QQ,但下半年增长速度趋缓,并没有将优势拉大。

门户微博

  6)腾讯微博的流量过于依赖QQ客户端,缺少像新浪微博那样的事件炒作案例,因此在竞争中处于一定劣势。

  7)从商业模式看,投资者希望新浪把自己打造成一家类似于Facebook、不仅依赖广告的企业。对不差钱的腾讯而言,所有这些都不算什么问题。尽管腾讯也推出了自己的微博,但腾讯微博主要是做为拖住新浪的一种工具,确保新浪不会挑战腾讯在中国社交网站领域的领先地位。

  总的来看,和2010年微博的高速发展不同,经过1年多的发展后,微博的发展趋缓,甚至出现了一定程度的下降趋势,可见,微博做为一种新型服务,在经过了一段时间的高速发展后,行业开始逐渐进入平稳期,随着2012年3月份微博实名制的全面实施,将导致微博行业逐渐进入到洗牌期的阶段,微博服务是否能继续发展可能会面临一定的挑战,因此,在未来的发展过程中,各个门户微博企业需要做出不断进行功能创新,保持用户黏性,提高自己的核心竞争力,才能在未来的发展中占有一席之地。

评论《中国微博市场2011年度数据分析》的内容…

相关文章:

统计
微博:新浪微博腾讯微博
QQ群:186784064
月光博客投稿信箱:williamlong.info(at)gmail.com
Created by William Long http://www.williamlong.info
from 月光博客: http://www.williamlong.info/archives/3010.html

Written by cwyalpha

二月 28, 2012 at 11:08 上午

发表在 Uncategorized

Thought this was cool: 用户成长体系漫谈

leave a comment »

成长体系是反映用户在网站中使用或参与情况的评价标准和价值观导向。成长体系的形式有很多,无论是最常见的积分、成长值、虚拟币、会员等级,还是成就、勋章,甚至隐藏的条件和限制,目的都是实现网站的商业利益和满足用户的核心需求:

  1. 对网站运营商:成长体系可以确保优质资源或增值服务被核心目标用户所使用,对用户行为进行合理的引导,确保用户利益和网站利益的统一,建设健康稳定的网站生态环境;
  2. 对用户而言:成长体系能够使优质用户获得优越感,并在使用网站达成使用价值的过程中,及时得到正负激励,享受等级提升带来的特权;

几乎所有web2.0网站都有用户成长体系,区别是我们有针对性的设计这个体系,以确保战略的达成;还是被动维护,期待用户能够通过运营商干预形成一个稳定的生态圈。国外的UGC社区很少刻意的为用户划分等级,他们更希望通过产品的限制和引导,潜移默化地影响用户行为,但这不代表这些网站的背后没有一套对用户成长和评价的标准。

量化地分析网站用户行为,是所有成功网站最重要的工作之一,国外网站和国内网站在这一点上是一致的,只不过国内网站多选择将这种评价标准告诉用户,以期待用户“照我们的规矩玩”。这是根据用户对互联网环境的使用情况而作出的选择。在国内,我们也的确有必要对“没有分享精神”、“恶意散布广告信息”、“非常无聊寂寞”的用户进行合理的引导,同时由于同质化竞争非常激烈,我们也需要给我们的用户(他可能是很多类似网站的用户)一些小的激励和实惠,为其带来更多的网站使用价值或附加利益。

让我们分析几个国内成功网站的一些常见的用户成长体系:

新浪微博

  • 关系量:粉丝量在最明显最核心的位置展示(关注量和微博量不过是快捷入口)。不同粉丝量直接影响了用户在微博中的地位和话语权,基于粉丝量的买卖也成了一门新的生意;
  • 认证:包括实名认证、企业认证、星星达人,需要向运营商申请。不同的认证对应运营商对用户的认可程度,新浪确保认证用户的质量与新浪的明星战略相吻合;
  • 勋章:基于用户行为、站内运营活动、外部广告推广的三条主线,为参与度更高的用户展示获取的勋章,并提供好友排名功能;

评价:新浪的成长体系紧密围绕媒体战略打造,核心思想就是塑造牛人(粉丝多、认证牛、勋章强),牛人多,自然吸引力度大;用户多,自然也满足了牛人自我营销的需求。这种成长体系与微博战略和生态环境密不可分,各种用户也玩的不亦乐乎。

新浪成长体系-V认证

腾讯QQ

  • 成长值:在线2小时以上  1活跃天;在线0.5-2小时  0.5活跃天。不同活跃天对应不同等级。可以通过使用引导性产品或付费行为加速成长。
  • 虚拟币:Q币,RBM购买,用于购买QQ虚拟产品和会员增值产品;Q点,Q币兑换,用于购买腾讯其他产品线(如游戏)的增值服务或虚拟产品;积分,购买行为产生,用于购买各类产品的打折优惠;

评价:由于QQ的用户规模基础,虚拟的“自我价值的满足”是QQ成长体系的源动力,无论是明显的等级标识还是虚拟的头像展示,在朋友中等级最高、最华丽是广大网民为其买单的根本理由。

腾讯qq成长体系-活跃天数

人人网

  • 成长值:通过用户操作(登录、发布、交互等)获取积分,不同积分对应不同成长等级。购买不同的付费产品能够享受积分加速获取,进而导致等级加速提升。
  • VIP:直接购买人人VIP会员,享受强化或拓展功能,同时在虚拟标识上有所体现。获取VIP的时间对应VIP等级,VIP等级强化特殊差异。人人豆VIP免费,非VIP需要靠登录获取,用于礼物购买。

评价:人人的体系与QQ类似,不过针对“免费用户”和“付费用户”设计了不同的成长体系,一个负责虚拟展示,一个负责增值服务,付费体系又加速虚拟展示。不过人人相对于QQ和新浪,并不过分强调这个体系,因为人人的用户更关注的是朋友圈的关系动态和身边的内容。当普通用户使用超出限定的资源(如好友上限)时,才会进行限制。对成长用户而言,他们更关注关系本身,而非虚拟的自我满足。

人人成长体系-vip会员

豆瓣

  • 小豆:创作优秀的内容被人感谢,小站被人赞助或者使用购书单下单可以获得小豆。小豆的作用也非常简单,可以感谢别人或者在小豆集市换取各种新鲜网站的优惠券。>>对豆瓣小豆等深度的分析

评价:作为慢公司和兴趣图谱社交圈的典范,豆瓣表面上几乎看不到什么成长体系,小豆在页面中也几乎难觅踪影,但是这不代表豆瓣没有规划自己的用户成长体系。恰恰相反,豆瓣在产品的引导和表现中,“体现用户的价值”可以通过用户的各种兴趣和参与表现,从读书到音乐、从电影到社区推荐再到博客…豆瓣通过你关注的兴趣所在告诉你“这个同学跟你臭味相投”,而不是告诉你“这个会员很高级很牛X”,这是成长体系的高级境界。这种豆瓣的价值观不会让你为了获取积分而很恶心的进行操作,而是希望用户会心一笑就离开,想找点什么时就回来。在豆瓣,你的兴趣参与和分享,就是最好的成长值。

豆瓣成长体系-小豆

百度百科/知道

  • 经验值:百科用户通过日常登录、内容贡献、其他用户的评价推荐以及编辑额外奖励构成。经验值与百科头衔等级对应,作为虚拟的自我满足激励;
  • 财富值:财富值与经验值获取方式相同,但财富值可以用于虚拟物品、资源下载、问题悬赏等的虚拟付费;

评价:百度百科和知道的成长体系比较简单,经验值和财富值计算方式几乎一样,简单明了。由于知识分享类网站几乎是“陌生人”之间打交道,因此内容/ 答案作者的虚拟等级也是用户评价内容质量的一种方式,这种虚拟的认同与“好友之间我最牛”的自我满足驱动稍有不同,更具实际意义。

百度知道成长体系-经验值

知乎

  • 关注:知乎的关注与微博异曲同工,不过在微博,草根获取更多的粉丝在于草根是否发大家喜闻乐见或者哗众取宠的内容(不否认业内观点质量的价值,但大环境你懂的);而知乎在于你是否根据实际的经验解决了别人的问题,并获取了大多数人的赞同。另外,知乎不会把你的关注着数量挂在明显的位置天天刺激你,知乎也没有积分系统,因为对用户而言,这种刺激只会激励用户发布更多垃圾。
  • 邀请码:能将邀请码做的感觉像是成长体系里的公司,我不知道还有什么网站,不过这绝非刻意而为的。知乎的新用户没有邀请码,当你回答了问题并获取了认可的时候,知乎会根据你的活跃度和被认可度发放更多的邀请码。在走纯粹邀请注册路线的网站中,由于知乎内容的含金量高,“获取高质量答案”的动机能够刺激真正有需要的人索取邀请码,当邀请码来之不易时,有邀请码的同学也会珍惜这些邀请码,这种设计也造就了知乎健康的生态环境。

评价:与百度百科不同,知乎的问题和答案更需要有实际经验和深度理解。知识可以学习,经验除了自己感悟,只能靠过来人说说了。家庭圈、朋友圈、公司圈,你的行业经验问题除了上司和靠谱的同事(搜索引擎不行,siri更不行),几乎无法得到有效的回答,知乎貌似是你唯一的选择?

知乎成长体系-邀请码

淘宝网

  • 信用:信用是淘宝卖家(供应商)甚至整个淘宝交易体系的基础。由于淘宝提供的是交易平台,采取卖场展示的模式,因此对第三方的信用评价是决定消费者是否买单的最关键因素。淘宝信用体系由三方面构成:卖家等级与交易次数相关、卖家评价得分由实际消费者对卖家的各项指标打分构成、卖家所获得的评价由真实购买的用户留言构成。在这套信用体系中,由淘宝认证或提供给卖家的更多信用保障(如7天退货、担保金等)可以帮助信心不足的初级消费者更安心的购买。
  • 会员等级:淘宝的消费者会员等级是以交易为基础的,1元=1分,不同分值对应不同的会员等级。会员等级越高,能享受的特权越多,包括购物、服务、生活等。另外,基于网购行为,淘宝匹配设计了简单的勋章成就,作为虚拟自我价值的体现,在淘江湖等社区中,等级和勋章可以体现一个人的购物经验,以得到更多人的认可。与其他网站不同,淘宝的会员等级是按照0.25%/天衰减的,这也是激励用户稳定消费的一种手段。
  • 积分:淘宝的积分由交易直接产生,不同类型的商品对应赠送的积分不同。积分可以直接在积分商场进行消费、购买优惠券,也可以在购买其他商品时,以100分=1元钱进行打折优惠。积分属于比较实际的小额让利,对价格敏感的淘宝用户而言,积分的确是刺激用户的有效手段。

评价:与其他UGC类网站不同,淘宝的消费者成长体系围绕“交易”这个核心打造。一手抓交易经验的积累,以会员等级体现;另一手给实际的让利优惠,以积分体现。这种成长体系对留住优质用户,增加网站粘着度和氛围起到了积极的推动作用。而在卖家成长体系中,淘宝可谓B2C类的典范,但即便这样,也无法杜绝卖假货、刷信用等问题的存在,甚至这些问题成为了C2C与B2C的核心劣势。这也是淘宝强化天猫商城的根本动机。

淘宝成长体系-会员等级

京东商城

  • 信用评价:由于B2C属性,京东类网站很好的规避了第三方信用问题,由京东在内部对自己的供应商进行评价,并且京东对商品的质量负责(小马哥说看不到京东这种把商品买过来再卖出去的模式有什么前途,我想当淘宝能彻底解决信用问题时,这话说出来才有分量)。京东的商品信用评价并非用户成长体系,而是对商品本身进行评价打分的体系,这种评价一方面帮助B2C网站更好的将优质商品推荐给用户,另一方面也方便消费者根据评价作出购买决定,在本文不再细说。
  • 用户级别:京东作为B2C电商,的用户级别同样直接与交易额挂钩,不同交易额对应不同级别的级别。级别越高,能享受的利益相关服务越多,比如免费送货、免费装机、退换优惠和大客户专属服务(更狠的折扣)。
  • 积分:京东的积分靠商品评价、晒单、推荐等方式获取,当然前提是购买了这种商品。与淘宝的购买签收才有会员等级分类似,区别是淘宝的积分与评价无关。积分目前可用于购买京东优惠券,也属于让利的一种。

评价:京东的用户成长体系同样紧紧围绕“交易”,电商网站的成长体系在这一点上套路类似,不过各种电商向社区化演进的过程中,对经验和评价的关注度在逐渐加强。谢天谢地,京东只有商品的信用而没有商家的信用,C2C的混水不是那么好趟的,有啊就是个例子。

京东成长体系-会员级别

从媒体到泛SNS,从社交图谱到兴趣图谱,从知识问答到经验问答,从C2C到B2C,我们不难发现一个问题:这些相对成功的网站,用户的成长体系与网站的战略定位紧密相关。或许这是废话,不过当积分、成长值、等级等繁杂的体系成为各种网站的标配时,“为了积分而积分”的网站太多。回到战略问题:作为运营商,“我们希望网站能获得什么?”和“我们的用户来网站做什么?”这两个基本问题是否解决,关系到你网站的用户成长体系应该如何建立。

对互联网小公司和创业者而言,应该从一开始就规划自己用户的成长体系,这与“用户角色建模”和“用户情景分析”有异曲同工之妙。当你的战略清晰时,用户的发展轨迹和成长预期一定也是清晰的,虽然绝大多数创业网站的A计划(哪个出版社能引进一下《Getting to Plan B》?)是有待改进的,但没有A计划就出发结果一定是失败的。因为我们需要在执行A计划的过程中,监控并基于数据分析用户行为,基于数据和对用户的理解不断优化方向作出改变。站在一定的高度你会发现,合理的用户成长体系是对战略的支撑,是对基于数据量化分析的促进,是对预期的展望和对投资人的负责。

说近点,用户不傻。我们不是腾讯,我们不是sina,我们更不是淘宝,我们的用户不会在一个没人气的网站上盯着自己的等级,不会为了获得几个积分去浪费自己宝贵的时间帮我们完成KPI,靠送Ipda,我们烧不起。没有价值的网站用户等级一定没意义,有价值时成长体系会让网站如虎添翼,这是正确的废话,即便不说,用户来了,你总得留住吧

来源:http://www.hanjunxing.com/user-growth-cycle


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

Post tags:

你可能也喜欢:


iPad应用的10大用户体验设计准则 (@tech2ipo)


移动设备的简单交互设计 (@tech2ipo)


用户体验与交互设计


处理交互内容的用户界面模式


浅析Windows Phone 7之用户交互设计

无觅

Feed enhanced by Better Feed from Ozh

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

Written by cwyalpha

二月 28, 2012 at 10:38 上午

发表在 Uncategorized

Thought this was cool: R语言编程入门之三:输入与输出

leave a comment »

如同ATM机一样,你首先得输入银行卡,才能输出得到钞票。数据分析也是如此,输入输出数据在分析工作中有重要的地位。下面对R语言中一些重要的输入输出函数进行小结,而其它的函数请参考官方指南

1 读取键盘输入
如果只有很少的数据量,你可以直接用变量赋值输入数据。若要用交互方式则可以使用readline()函数输入单个数据,但要注意其默认输入格为字符型。scan()函数中如果不加参数则也可以用来手动输入数据。如果加上文件名则是从文件中读取数据。

2 读取表格文件
读取本地表格文件的主要函数是read.table(),其中的file参数设定了文件路径,注意路径中斜杠的正确用法(如”C:/data/sample.txt”),header参数设定是否带有表头。sep参数设定了列之间的间隔方式。该函数读取数据后将存为data.frame格式,而且所有的字符将被转为因子格式,如果你不想这么做需要记得将参数stringsAsFactors设为FALSE。与之类似的函数是read.csv()专门用来读取csv格式。

如果是想抓去网页上的某个表格,那么可以使用XML包中的readHTMLTable()函数。例如我们想获得google统计的访问最多的1000名网站数据,则可以象下面这样做。关于这个函数可以参考这篇博文

url <- 'http://www.google.com/adplanner/static/top1000/'
data <- readHTMLTable(url)
names(data)
head(data[[2]])

3 读取文本文件
有时候需要读取的数据存放在非结构化的文本文件中,例如电子邮件数据或微博数据。这种情况下只能依靠readLines()函数,将文档转为以行为单位存放的list格式。例如我们希望读取wikipedia的主页html文件的前十行。

data <- readLines('http://en.wikipedia.org/wiki/Main_Page',n=10)
另外,scan()也有丰富的参数用来读取非结构化文档。

4 批量读取本地文件
在批量读取文档时一般先将其存放在某一个目录下。先用dir()函数获取目录中的文件名,然后用paste()将路径合成,最后用循环或向量化方法处理文档。例如:

doc.names <- dir("path")
doc.path <- sapply(doc.names,function(names) paste(path,names,sep='/'))
doc <- sapply(doc.path, function(doc) readLines(doc))

5 写入文件
write.table()write.csv()函数可以很方便的写入表格型数据文档,而cat()函数除了可以在屏幕上输出之外,也能够输出成文件。

另外若要与MySQL数据库交换数据,则可以使用RMySLQ包。

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

Written by cwyalpha

二月 28, 2012 at 10:38 上午

发表在 Uncategorized

Thought this was cool: 几个内存相关面试题(c/c++)

leave a comment »

void GetMemory(char *p)
{
p=(char*)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str,”helloworld”);
printf(str);
}
请问运行Test函数会有什么样的结果?
答:程序崩溃。因为GetMemory并不能传递动态内存,Test函数中的str一直都是NULL。strcpy(str,”helloworld”);将使程序崩溃。
char *GetMemory(void)
{
char p[]=”helloworld”;
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原先的内容已经被清除,新内容不可知。
void GetMemory2(char **p, int num)
{
*p = (char*)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, “hello”);
printf(str);
}
请问运行Test函数会有什么样的结果?
答:(1)能够输出hello(2)内存泄漏
以上都是关于内存的问题,我想问第一个为什么说GetMemory不能传递动态内存,而第三个 GetMemory2(char **p, int num)却可以;还有第二个说GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,总之我不懂,最好懂得人能一句一句的解释。
from Zhang Jiuan' Notes: http://blog.niukey.com/2010/03/25/%e5%87%a0%e4%b8%aa%e5%86%85%e5%ad%98%e7%9b%b8%e5%85%b3%e9%9d%a2%e8%af%95%e9%a2%98%ef%bc%88cc/

Written by cwyalpha

二月 28, 2012 at 7:53 上午

发表在 Uncategorized