3

COS 数据分析沙龙第十一期(北京)

 2 years ago
source link: https://cosx.org/2013/07/beijing-cos-salon-june-2013/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

COS 数据分析沙龙第十一期(北京)

关键词:COS 沙龙

配图

2013 年 6 月 23 日,十一期 COS 数据分析沙龙(北京站)在明主 1016 如期举行。本期沙龙主题是 “RHadoop 助 R 突破大数据难关”;沙龙嘉宾张丹先生围绕沙龙主题分享了有关在 ubuntu 系统下配置RHadoop的相关知识以及基于RHadoop完成数据分析工作的相关案例。

张丹先生,系资深程序开发员,R 语言爱好者;前天际网职员,混迹互联网和软件行业多年;曾参与开发多种不同类型的系统及应用,熟悉 R/JAVA/PHP/Javacript 等语言。对系统架构、编程算法、数据分析等诸多领域有自身见解,并推出了两款互联网小应用:晒粉丝每日天气

沙龙开始嘉宾先对RHadoop项目的基本情况作了简要介绍:RHadoop是由 RevolutionAnalytics 发起的基于 R 语言的开源数据分析项目。目前,RHadoop系列包包含rmrrhdfsrhbase三个 R 包,其分别与 Hadoop 系统架构中的 MapReduce、HDFS 和 HBase 相应。由于它们并未发布到 CRAN 上,因此,需要到 github 上的RHadoop\主页来寻找,具体地址在这里

接下来,介绍了安装RHadoop需要的系统环境以及在 Ubuntu 系统下安装 R 软件的命令。由于RHadoop包在使用过程中要调用多个其它支撑包,因此,在安装之前,需要安装好rJavareshape2RcppiteratorsitertoolsdigestRJSONIOfunctional等 8 个支撑包。完成上述步骤之后,即可安装rhdfsrmr2包了。

RHadoop的命令与原生 Hadoop 命令相仿,只是为了调用方便做了一些封装。以rhdfs包为例。查看hdfs文件目录的 Hadoop 原生语句是:

hadoop fs -ls /user

其对应的RHadoop的命令语句是:

hdfs.ls("/user/")

查看hadoop数据文件的hadoop语句是:

hadoop fs -cat /user/hdfs/o_same_school/part-m-00000

其对应的RHadoop的命令是:

hdfs.cat("/user/hdfs/o_same_school/part-m-00000")

课件RHadoop的命令更符合 R 用户的习惯。

rmr2包是帮助 R 实现 Map-Reduce 算法的包,基于它我们可以做很多提高效率的事情。一个简单的例子是:

small.ints = 1:100000
sapply(small.ints, function(x) x^2)

基于rmr2的命令是:

small.ints= to.dfs(1:100000)
mapreduce(input = small.ints, map = function(k, v) cbind(v, v^2))
from.dfs("/tmp/RtmpWnzxl4/file5deb791fcbd5")

由于 MapReduce 只能访问 HDFS 文件系统,因而,使用 MapReduce 功能之前需要借助to.dfs()函数将数据存储到 HDFS 文件系统里。调用 MapReduce 的运算结果时需要借助from.dfs()函数从 HDFS 文件系统中将其取出。

下面可以借助rmr2包对某个*.txt文件中出现的英文单词进行计数,相应的代码为:

input <- '/user/hdfs/o_same_school/part-m-00000'
wordcount = function(input, output = NULL, pattern = " "){
  wc.map = function(., lines) {
    keyval(unlist( strsplit( x = lines, split = pattern)), 1)
  }
  wc.reduce = function(word, counts ) {
    keyval(word, sum(counts))
  }
  mapreduce(input = input , output = output, input.format = "text",
    map = wc.map, reduce = wc.reduce, combine = T)
}
wordcount(input)

RHadoop系列包的最后一个包是RHbase,它相当于是一个管理数据库的包。其包含的函数如下:

  • hb.compact.table
  • hb.describe.table
  • hb.insert
  • hb.regions.table
  • hb.defaults
  • hb.get
  • hb.insert.data.frame
  • hb.scan
  • hb.delete
  • hb.delete
  • hb.get.data.frame
  • hb.list.tables
  • hb.scan.ex
  • hb.delete.table
  • hb.init
  • hb.new.table
  • hb.set.table.mode

沙龙最后,嘉宾分享了基于原生R代码和RHadoop 实现推荐系统中经常用到的协同过滤算法的内容。协同过滤算法的原生思想比较简单,包含以下三个步骤:

  • 建立物品的同现矩阵
  • 建立用户对物品的评分矩阵
  • 矩阵计算推荐结果

RHbase

对应的原生R代码和RHadoop代码分别是:

加载 plyr 包

library(plyr)

读取数据集

train <- read.csv(file = "small.csv", header = FALSE)
names(train) <- c("user", "item", "pref")

计算用户列表

usersUnique <- function(){
   users <- unique(train$user) 
   users[order(users)] 
}

计算商品列表方法

itemsUnique <- function(){ 
   items <- unique(train$item) 
   items[order(items)] 
}
users <- usersUnique()
users
items <- itemsUnique()
items

建立商品列表索引

index <- function(x) which(items %in% x)
data <- ddply(train, .(user, item, pref), summarize, idx = index(item))
cooccurrence <- function(data){
   n <- length(items)
   co <- matrix(rep(0, n * n),nrow = n)
   for(u in users){
     idx <- index(data$item[which(data$user == u)])
     m <- merge(idx,idx)
       for(i in 1:nrow(m)){
          co[m$x[i], m$y[i]] = co[m$x[i], m$y[i]] + 1
       }
   }
   return(co)
}
recommend <- function(udata = udata, co = coMatrix, num = 0){
   n <- length(items) # all of pref
   pref <- rep(0,n)
   pref[udata$idx] <- udata$pref
   ## 用户评分矩阵
   userx <- matrix(pref, nrow = n)
   ## 同现矩阵 * 评分矩阵
   r <- co %*% userx
   ## 推荐结果排序
   r[udata$idx] <- 0
   idx <- order(r, decreasing = TRUE)
   topn <- data.frame(user = rep(udata$user[1], length(idx)),
                       item = items[idx], val = r[idx])
   ## 推荐结果取前num个
   if(num > 0) topn <- head(topn, num) 
   ## 返回结果
   return(topn)
}

来自百度(销售管理中心)、新浪、IBM、亚马逊、京东、豆瓣、小米、去哪儿、中科软、泽佳、华丽志、宽连十方;ICON、新华网、

银华基金、诺亚舟财务咨询有限公司、富国基金、安永;中国铁道科学研究院、中科院地理所、密苏里大学哥伦比亚、中国人民大学、

中国中医科学院、苏州大学、北京邮电大学等企业和高校的人员报名参与了此次活动,席间与嘉宾积极互动,围绕主题展开了深入精彩的讨论。

幻灯片下载

COS 数据沙龙第 9 期幻灯片

现场图片

rhadoop-cos4

沙龙视频:

预告片

自我介绍

第一部分 – RHadoop 的安装与使用介绍

第二部分 – R 实现 MapReduce 协同过滤算法

第三部分 – 操作演示

第四部分 – 自由讨论

更多沙龙信息请查看 https://cos.name/salon

毕业于中央财经大学,感兴趣领域是数据挖掘技术(R 语言)在金融投资分析和计量经济学中的应用。博客:http://yishuo.org;微博:http://weibo.com/dengyishuo邓一硕

敬告各位友媒,如需转载,请与统计之都小编联系(直接留言或发至邮箱:[email protected]),获准转载的请在显著位置注明作者和出处(转载自:统计之都),并在文章结尾处附上统计之都微信二维码。

统计之都微信二维码

← R 利剑 NoSQL 系列文章 之 Cassandra COS 数据分析沙龙第十期(广州) →

发表 / 查看评论


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK