陈老师撕B志玲姐姐的热门微博数据分析

原创 2016年07月29日 19:20:26

原文链接:http://www.tbk.ren/article/256.html?source=csdn


昨晚陈老师不知因何事忽然在微博上骂女神志玲姐姐,引起来网友们的热闹围观,导致前几天风风火火的汪峰的前妻吸毒的事件,顿时落下帷幕,汪峰老师好不容易上了一次头条,就这么被硬生生的扯下来了。

  

当然,这条微博火了之后,陈老师把它删了,只留下这条了,我们接下来的分析,都是基于这条微博的评论的。



好,开篇写好了,我们直接进入主题,作为一名技术宅,如何使用R语言,来分析一下,这个热点事件背后的数据意义。

首先当然是要去抓取数据,这里因为笔者有一个网站,它通过了新浪微博开放平台的审核,因此可以使用微博的API接口进行数据的获取,当然能获取到的数据也不多,评论数据只能获取40页,每页50条左右,也就是2000条。虽然对于陈老师这种上千万粉的人来说,简直是毛毛雨,但是并不影响我们使用它来做一下简单的分析。

library(XML);
library(RCurl);
library(RJSONIO);

page <- 1;
times <- 3;
GoOn = TRUE;
sleepTime <- 1;
while(GoOn) {
  url <- paste(
"https://api.weibo.com/2/comments/show.json?",
"id=4001968182199220&",
"page=", page, "&",
"access_token=这里很私密,就是通过验证的token,我当然不会告诉你啦",
sep = ""
  );
  print(url)
  commentJSONString <- getURL(
url, 
.opts = list(ssl.verifypeer = FALSE)
  );
  
  commentJSON <- fromJSON(commentJSONString);
  
  len <- length(commentJSON$comments)
  print(len)
  if(len==0) {
print("需要休息一下下")
sleepTime <- sleepTime+1;
if(sleepTime>10) {
  GoOn <- FALSE;
}
  } else {
result <- data.frame(
  id=c(NA),
  gender=c(NA),
  followers_count=c(NA),
  friends_count=c(NA),
  pagefriends_count=c(NA),
  statuses_count=c(NA),
  favourites_count=c(NA),
  created_at=c(NA),
  verified=c(NA),
  verified_type=c(NA),
  verified_reason=c(NA),
  verified_trade=c(NA),
  lang=c(NA),
  urank=c(NA),
  screen_name=c(NA),
  name=c(NA),
  location=c(NA),
  description=c(NA),
  text=c(NA)
);
for(i in 1:len) {
  result[i, ] <- c(
commentJSON$comments[[i]]$user$idstr,
commentJSON$comments[[i]]$user$gender,
commentJSON$comments[[i]]$user$followers_count,
commentJSON$comments[[i]]$user$friends_count,
commentJSON$comments[[i]]$user$pagefriends_count,
commentJSON$comments[[i]]$user$statuses_count,
commentJSON$comments[[i]]$user$favourites_count,
commentJSON$comments[[i]]$user$created_at,
commentJSON$comments[[i]]$user$verified,
commentJSON$comments[[i]]$user$verified_type,
commentJSON$comments[[i]]$user$verified_reason,
commentJSON$comments[[i]]$user$verified_trade,
commentJSON$comments[[i]]$user$lang,
commentJSON$comments[[i]]$user$urank,
commentJSON$comments[[i]]$user$screen_name,
commentJSON$comments[[i]]$user$name,
commentJSON$comments[[i]]$user$location,
commentJSON$comments[[i]]$user$description,
commentJSON$comments[[i]]$text
  )
}
write.csv(
  result, row.names=FALSE,
  col.names=FALSE, fileEncoding = "UTF-8",
  file=paste("data/result_", times, "_", page, ".txt", sep = "")
);
page <- page+1;
  }
  Sys.sleep(sleepTime);
}

抓取完成后,得到了用户的一些属性以及评论的内容。

 

好,既然是评论,我们首先当然要来一发词云分析先。

library(tm)
library(Rwordseg)

installDict('明星【官方推荐】.scel', '明星')

contentCorpus <- Corpus(VectorSource(na.omit(d$text)))
contentCorpus <- tm_map(contentCorpus, stripWhitespace)
contentCorpus= tm_map(contentCorpus, content_transformer(segmentCN), returnType='tm')

#tm分词对中文分词Bug解决方案
tokenizer <- function(x){
  unlist(
strsplit(
  x$content,
  '[[:space:]]+'
)
  )
}

tdm <- TermDocumentMatrix(
  contentCorpus,
  control=list(
wordLengths=c(1,Inf),
tokenize=tokenizer
  )
)

#转成向量矩阵
tdm <- as.matrix(tdm)

library(wordcloud)
v <- sort(rowSums(tdm), decreasing = TRUE)
d <- data.frame(word = names(v), freq = v)
d <- d[1:300, ]

wordcloud(
  d$word, 
  d$freq, 
  min.freq=2, 
  random.order=F, 
  colors=rainbow(length(row.names(d)))
)

执行这段代码,我们可以得到以下的词云:
 

可以看到,网友们对于陈老师的这种无端端撕B的行为,一致认为是“你,的,不,是”。陈老师,看到后,也回复了网友的关心:  

好了,大家的态度,陈老师收到了,你们喜欢或者是不喜欢,陈老师还是当年的陈老师,粉丝量还是上两千万的陈老师。

好,接着我们来分析一下网友们的特征。

genderTable <- prop.table(table(d$gender))
 

女网友竟然占比达到65%,好惊讶,是因为志玲姐姐男女通吃,还是陈老师魅力不减当年,还有一堆的女性摄影爱好者粉丝呢……

 

接着我们来看看网友们的地区分布:

locationTable <- prop.table(table(d[, "1"][d[, "1"]!="其他"]))



这个就不出所料了,港东银占据了榜首,不愧是和陈老师发源地比较近。

接着,我们看看用户的加V情况。

verifiedTable <- prop.table(table(d$verified))

 

看来陈老师号召力很强,竟然有1.5%的加V用户转发它了。

最后,我们来看看用户的微博等级:

hist(d$urank, main = "用户等级", xlab = "用户等级", freq = FALSE, ylab = "占比")
 

我们可以看到,用户的等级竟然也是就接近正态分布,证明这个话题的水军比较少呢,陈老师果然是实力派,出来混,是不需要带是水军的。

PS:笔者微博等级才14级,因为懒得关注太多的人,所以卡在了14级,所以12到14级人多是很正常的。

昨晚陈老师不知因何事忽然在微博上骂女神志玲姐姐,引起来网友们的热闹围观,导致前几天风风火火的汪峰的前妻吸毒的事件,顿时落下帷幕,汪峰老师好不容易上了一次头条,就这么被硬生生的扯下来了。

  

当然,这条微博火了之后,陈老师把它删了,只留下这条了,我们接下来的分析,都是基于这条微博的评论的。



好,开篇写好了,我们直接进入主题,作为一名技术宅,如何使用R语言,来分析一下,这个热点事件背后的数据意义。

首先当然是要去抓取数据,这里因为笔者有一个网站,它通过了新浪微博开放平台的审核,因此可以使用微博的API接口进行数据的获取,当然能获取到的数据也不多,评论数据只能获取40页,每页50条左右,也就是2000条。虽然对于陈老师这种上千万粉的人来说,简直是毛毛雨,但是并不影响我们使用它来做一下简单的分析。

library(XML);
library(RCurl);
library(RJSONIO);

page <- 1;
times <- 3;
GoOn = TRUE;
sleepTime <- 1;
while(GoOn) {
  url <- paste(
"https://api.weibo.com/2/comments/show.json?",
"id=4001968182199220&",
"page=", page, "&",
"access_token=这里很私密,就是通过验证的token,我当然不会告诉你啦",
sep = ""
  );
  print(url)
  commentJSONString <- getURL(
url, 
.opts = list(ssl.verifypeer = FALSE)
  );
  
  commentJSON <- fromJSON(commentJSONString);
  
  len <- length(commentJSON$comments)
  print(len)
  if(len==0) {
print("需要休息一下下")
sleepTime <- sleepTime+1;
if(sleepTime>10) {
  GoOn <- FALSE;
}
  } else {
result <- data.frame(
  id=c(NA),
  gender=c(NA),
  followers_count=c(NA),
  friends_count=c(NA),
  pagefriends_count=c(NA),
  statuses_count=c(NA),
  favourites_count=c(NA),
  created_at=c(NA),
  verified=c(NA),
  verified_type=c(NA),
  verified_reason=c(NA),
  verified_trade=c(NA),
  lang=c(NA),
  urank=c(NA),
  screen_name=c(NA),
  name=c(NA),
  location=c(NA),
  description=c(NA),
  text=c(NA)
);
for(i in 1:len) {
  result[i, ] <- c(
commentJSON$comments[[i]]$user$idstr,
commentJSON$comments[[i]]$user$gender,
commentJSON$comments[[i]]$user$followers_count,
commentJSON$comments[[i]]$user$friends_count,
commentJSON$comments[[i]]$user$pagefriends_count,
commentJSON$comments[[i]]$user$statuses_count,
commentJSON$comments[[i]]$user$favourites_count,
commentJSON$comments[[i]]$user$created_at,
commentJSON$comments[[i]]$user$verified,
commentJSON$comments[[i]]$user$verified_type,
commentJSON$comments[[i]]$user$verified_reason,
commentJSON$comments[[i]]$user$verified_trade,
commentJSON$comments[[i]]$user$lang,
commentJSON$comments[[i]]$user$urank,
commentJSON$comments[[i]]$user$screen_name,
commentJSON$comments[[i]]$user$name,
commentJSON$comments[[i]]$user$location,
commentJSON$comments[[i]]$user$description,
commentJSON$comments[[i]]$text
  )
}
write.csv(
  result, row.names=FALSE,
  col.names=FALSE, fileEncoding = "UTF-8",
  file=paste("data/result_", times, "_", page, ".txt", sep = "")
);
page <- page+1;
  }
  Sys.sleep(sleepTime);
}

抓取完成后,得到了用户的一些属性以及评论的内容。

 

好,既然是评论,我们首先当然要来一发词云分析先。

library(tm)
library(Rwordseg)

installDict('明星【官方推荐】.scel', '明星')

contentCorpus <- Corpus(VectorSource(na.omit(d$text)))
contentCorpus <- tm_map(contentCorpus, stripWhitespace)
contentCorpus= tm_map(contentCorpus, content_transformer(segmentCN), returnType='tm')

#tm分词对中文分词Bug解决方案
tokenizer <- function(x){
  unlist(
strsplit(
  x$content,
  '[[:space:]]+'
)
  )
}

tdm <- TermDocumentMatrix(
  contentCorpus,
  control=list(
wordLengths=c(1,Inf),
tokenize=tokenizer
  )
)

#转成向量矩阵
tdm <- as.matrix(tdm)

library(wordcloud)
v <- sort(rowSums(tdm), decreasing = TRUE)
d <- data.frame(word = names(v), freq = v)
d <- d[1:300, ]

wordcloud(
  d$word, 
  d$freq, 
  min.freq=2, 
  random.order=F, 
  colors=rainbow(length(row.names(d)))
)

执行这段代码,我们可以得到以下的词云:
 

可以看到,网友们对于陈老师的这种无端端撕B的行为,一致认为是“你,的,不,是”。陈老师,看到后,也回复了网友的关心:  

好了,大家的态度,陈老师收到了,你们喜欢或者是不喜欢,陈老师还是当年的陈老师,粉丝量还是上两千万的陈老师。

好,接着我们来分析一下网友们的特征。

genderTable <- prop.table(table(d$gender))
 

女网友竟然占比达到65%,好惊讶,是因为志玲姐姐男女通吃,还是陈老师魅力不减当年,还有一堆的女性摄影爱好者粉丝呢……

 

接着我们来看看网友们的地区分布:

locationTable <- prop.table(table(d[, "1"][d[, "1"]!="其他"]))



这个就不出所料了,港东银占据了榜首,不愧是和陈老师发源地比较近。

接着,我们看看用户的加V情况。

verifiedTable <- prop.table(table(d$verified))

 

看来陈老师号召力很强,竟然有1.5%的加V用户转发它了。

最后,我们来看看用户的微博等级:

hist(d$urank, main = "用户等级", xlab = "用户等级", freq = FALSE, ylab = "占比")
 

我们可以看到,用户的等级竟然也是就接近正态分布,证明这个话题的水军比较少呢,陈老师果然是实力派,出来混,是不需要带是水军的。

PS:笔者微博等级才14级,因为懒得关注太多的人,所以卡在了14级,所以12到14级人多是很正常的。

相关文章推荐

R语言-处理JSON文件-点击链接加入群【农产品一体化解决方案】:https://jq.qq.com/?_wv=1027&k=49BAOCe

JSON文件数据存储在人类可读格式的文本。 JSON代表JavaScript对象符号。 R能够使用rjson包读取JSON文件。 安装rjson软件包 在R控制台可以发出以下命令来安装 rjson ...
  • hephec
  • hephec
  • 2016年07月20日 14:17
  • 4766

C语言中变量名的命名规则

C语言中变量名的命名规则     1、严格采用阶梯层次组织程序代码:         各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对继行则要...

博数据分析与微博营销案例

  • 2011年08月15日 18:33
  • 10.56MB
  • 下载

陈老师的多校联合20140816||SPOJ AMR11B 三角形的有向面积

http://www.spoj.com/problems/AMR11B/ Hogwarts is under attack by the Dark Lord, He-Who-Must-Not...

基于Flask框架的python微博数据分析

Python-微博数据(博文)分析项目简介后端采用Flask框架搭建,通过移动端接口获取数据,数据清洗后采用jieba进行词法分析,通过WordCloud制作词云展示(数据的可视化在以后的版本中会细化...

微博用户数据分析

一、数据描述 1)数据参数 用户的历史微博数据 截止到20131215 压缩后244MB,解压后878MB 2)数据类型 整个数据是json格式   json中字段描述: beCom...

刘凌峰老师《EXCEL 数据分析大师成长训练营》

EXCEL 数据分析大师成长训练营   课程背景: 还在为数据分析是“神马”而苦恼吗?还是为了如何成为数据分析大师而找不到捷径吗?很多人看到数据分析就望而却步,担心门槛高,无法迈入数据分析的门槛...

《数据结构学习与实验指导》5-7:新浪微博热门话题

实验内容:新浪博客可以在发言中嵌入“话题”,即将发言中的话题文字写在一对“#”之间,就可以生成话题链接,点击链接可以看到有多少人在跟自己讨论相同或相似的话题。新浪微博还会随时更新热门话题列表,并将最热...
  • henuni
  • henuni
  • 2017年07月23日 13:16
  • 222

新浪微博数据挖掘(python)本周人们在讨论的热门话题的提取

分析热门话题微博: (1)人们在讨论(查询)什么话题(热门话题) (2)该话题下的微博获取 (3)那些人转发了微博(涉及的人物) (4)转发的时间和地点(话题的在时间和空间上的影响度) (5...

刘凌峰老师《EXCEL数据分析开发课程》

EXCEL数据分析开发课程   课程背景: 以下愿望只能挑选一个,您会如何选择? 您想让您的EXCEL“一键”制作出报表来? 您想让您的EXCEL只能填写某些范围的数据? 您想让您的EXC...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:陈老师撕B志玲姐姐的热门微博数据分析
举报原因:
原因补充:

(最多只允许输入30个字)