星期六, 二月 25, 2012

在Twitter上你应该关注谁?

社交媒体中的数据挖掘是当今比较热门的领域之一。各平台公司都想从用户的数据中寻找其偏好特征,提供个性化的服务。其中一种服务就是在微博平台中向用户推荐值得关注的对象名单。如果用户已经使用了一段时间的服务并关注了一些对象,那么有一种简单思路可以为其提供更多的关注对象。

俗语说:人以群分,物以类聚。朋友之间基本上是臭味相投的,再进一步延伸,朋友的朋友也应该能成为新的朋友。那么进行推荐服务的方法可以这样来实现:先找出用户已经关注朋友的名单,再进一步找出每个朋友所关注的对象,再根据频数作为推荐的权重。下面我们用Twitter为例用R语言来实现这种思路。

先从笔者的推号入手(@xccds),提取了100名关注对象的信息。然后对每个关注对象再提取他的100名关注对象信息,合并后制成频数表,剔除笔者已经关注过的对象。排序后保留频数最高的前五名,绘制条形图以显示最后的推荐结果。查了一下这几位的资料,感觉还比较靠谱,值得follow。各位经常上推的朋友也不妨一试。


注:由于Twitter API有限制,所以并未完全获得所有一万条信息,上图是根据大约两千条信息绘制的。

R代码如下:
rm(list=ls())
library(twitteR) #加载包
myid <- getUser('xccds') #获取用户信息
#取得100名关注对象的用户名
myfo <- twListToDF(myid$getFriends(n=100))$screenName  
ffo <-list()
record <- character()
for (i in 1:100){
  user <- getUser((myfo[i]))  #获取关注对象的信息
  #取得关注对象的关注对象
  ffo <- twListToDF(user$getFriends(n=100))$screenName
  record <-  c(record ,as.character(ffo))
}
# 生成频数表
table.record <- table(record)
# 从表格转化为数据框
data = as.data.frame(table.record,stringsAsFactors=F)
# 将已经关注的对象从中删除
data <- data[data$record%in%setdiff(record,myfo),]
# 选择频数最高的五人
data <- data[order(data$Freq,decreasing=T)[1:5],]
# 加载包并绘制条形图
library(ggplot2) 
p <- ggplot(data,aes(record,Freq))
p + geom_bar(aes(fill=Freq))+coord_flip()

3 条评论: