- 网络科学(network science)
- 数据新闻学(data journalism)
- 普世法则(general law)的欠缺
- 海量数据(massive data)的逼迫
- 网络抽样
- 可视化
- 取法于自然科学
- 取法于计算机科学
- 取法于数学
- 取法于软件工具
Google和facebook如何应用R进行数据挖掘
在R用户组织的主题为“R与预测分析科学”的panel会议上,有来自工业界的四位代表发表了讲话,介绍各自在工业界是如何应用R进行数据挖掘。他们分别是:
Bo Cowgill, Google
Itamar Rosenn, Facebook
David Smith, Revolution Computing
Jim Porzak, The Generations Network
他们分别介绍了在各个公司是如何使用R进行预测分析,R作为分析工具的优势和劣势,并且提供了学习案例,以下是对他们的介绍的相关总结。
Panel介绍
R作为一门编程语言在以下三个方面具有很强的优势:数据处理,统计和数据可视化。和其他数据分析工具不同的是,它是由统计学家开发的,它是免费的软件,并且可以通过用户开发的包进行扩展,目前大约有2000多个包在CRAN中。
很多包可以应用在预测分析中。Jim重点介绍了 Max Kuhn 的caret包,它提供了大量的分类和回归模型,包括神经网络和朴素贝叶斯模型。
Bo Cowgill, Google
根据Bo Cowgill 的介绍,R是google最流行的统计分析包,事实上,google也是R基础的捐助者。他讲述道:R最好的事情是,它是统计学家发明的。它最糟糕的事情是,它是统计学家发明的。无论如何,他很乐观地看待R开发者社区的发展,R文档也逐步在改进,它的性能也在逐步提高。
Google主要使用R进行数据探索和构建模型原型,它并不是应用在生产系统,在Bo的团队中,R主要运行在桌面环境中。Bo主要根据以下的流程使用R:(1)使用其他的工具提取数据;(2)将数据加载到R中;(3)使用R建模分析;(4)在生产环境中使用c++或者python实现结果模型。
Itamar Rosenn, Facebook
Itamar介绍了facebook数据团队使用R的情况,他回答了新用户提数的两个问题:预测用户是否保持在某个数据点,如果他们停留,如何预测他们在三个月之后是否还会停留。
对于第一个问题,Itamar的团队使用递归划分推断出仅仅两个数据点被预测出来用户是否保留在facebook上:(1)新用户拥有多个会话;(2)输入用户基本信息时。
对于第二个问题,他们使用最小角度回归方法建立逻辑回归模型(lars包),根据三个类别的行为发现用户三个月的活动:(1)用户被其他用户访问的频率;(2)第三方应用程序使用的频率;(3)即将访问该站点的用户。
David Smith, Revolution Computing
David的公司,R改革计算,不仅仅使用R,而且R是他们的核心业务。David描述道:他们对R的贡献类似于redhat对linux 的贡献。他的公司处理使用R遇到的一些问题,例如,(1)支持老版本软件,即向下兼容;(2)通过他们的ParallelR套件可以支持并行计算。
David展示了他们的生命科学客户是如何使用R通过randomForest包对基因组数据集进行分类处理,以及如何使用他们的foreach包对分类树分析进行并行处理。
他还提到他们和其他公司合作将R应用在生产环境中,将特定的脚本放在服务器上,用户通过客户端调用该脚本进行数据处理。
Jim Porzak, The Generations Network
Jim简单介绍了如何使用R进行市场分析。尤其是,Jim还使用flexclust为sun公司的客户数据进行聚类分析,并且应用该结果数据识别高价值销售的主导业务。
在Q&A环节,还有很多提问,并且进行了回答。
1在使用R的过程中,如何解决内存限制问题?
R工作区是在RAM上,因此他的大小是受到限制的。
办法:
(1) 使用R的数据库连接功能(例如RMySQL),对数据进行切片处理
(2) 抽样处理
(3) 在独立的服务器或者在amazon的云计算环境中运行脚本
2R如何与其他工具和语言进行交互?
CRAN里面有一些包提供了和matlab,splus,SAS,excel的交互接口,另外,还提供了与python和java的接口包(Rpy和RJava)。
https://github.com/nexr/RHive/wiki/UserGuides
RHive是一个R包,在R环境中集成hive。通过使用RHive可以在R环境中写HQL(HiveQL),将R的对象传入hive中,在hive中进行计算。在rHive中
小数据集在R中执行,大数据集在hive中运行。
越来越多的企业收集了海量细节数据,需要TB或者PB级的数据存储以及从海量数据中发现知识。目前,人们主要关注R统计分析程序,并且越来越熟悉R开发。但是,R对于海量数据处理存在一些弊端。一些人,通过抽样技术来处理海量数据,这样很有可能导致丢失数据信息。Hadoop可以处理这样的海量数据,而数据分析师缺少使用hadoop开发能力。然而,数据分析师一般都很熟悉SQL,进行数据处理。正是基于此种情况,Rhive作为大数据的一种解决方案,应运而生,在R和Hive之间建立桥梁。
RHive架构
API
Rhive API for R
rhive.connect : connect to hive 连接hive
rhive.query : execute hive query in R 在R中执行hive查询
rhive.export : export only R function to cluster Rserve
rhive.exportAll : export all R functions and R objects to cluster
Rserve
rhive.close : close hive connection
rhive.list.table : get hive table list
rhive.desc.table : get Hive table information
rhive.load.table : retrieve table data from hive to R
RHive UDF、UDAF for hive
通过R函数处理hdfs
R : R is UDF. For every record, this function from Hive calls an
exported R function.
RA : RA is UDAF. This function uses exported R and hive query to
aggregate data.
unfold : unfold is UDTF. This function takes return data of R and
unfolds them into several columns.
expand : expand is UDTF.
实例
rhive.connect(hive-hostip)
rhive.query("select * from
emp")
coefficient <- 1.1
scoring <- function(sal) {
coefficient * sal
}
rhive.export('scoring')
rhive.query("select R('scoring',col_sal,0.0) from
emp")
hsum <- function(prev,sal) {
c(prev[1] + sal[1])
}
hsum.partial <- function(agg_sal) {
agg_sal
}
hsum.merge <- function(prev, agg_sal) {
c(prev[1] + agg_sal[1])
}
hsum.terminate <- function(agg_sal) {
agg_sal
}
rhive.exportAll('hsum',rserve-list)
rhive.query(”select RA('hsum',col_sal) from emp group by
empno")
emp <- rhive.desc.table(emp)
colnames(emp)
regexpr("ba", strings)
On Thu, Jun 19, 2008 at 1:18 AM, Daren Tan <daren76 at hotmail.com> wrote:
> > > For example,
>
> strings <- c("aaaa", "bbbb","ccba")
> > How to get "aaaa", "bbbb" that do not contain "ba" ?
Here are three ways:
> strings[regexpr("ba", strings) < 0]
[1] "aaaa" "bbbb"
> setdiff(strings, grep("ba", strings, value = TRUE))
[1] "aaaa" "bbbb"
> strings[-grep("ba", c(strings, "ba"))]
[1] "aaaa" "bbbb"
Note that in the last case we had to ensure that there is at least one "ba" string by appending one since it would otherwise fail in the case that there were no "ba" strings.
# 尝试插入一首我喜欢的歌《beautiful girls》

if takes
a single value (not a vector).
加载中…
加载中…
加载中…
加载中…
加载中…