陈老师撕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级人多是很正常的。

网页制作,以360网址导航这个网址的源代码为例

360安全网址导航_安全上网从360开始 http://h1.qhimg.com/favicon.ico"/> .wrap-outer{background:#fff ...
  • leo__ho
  • leo__ho
  • 2011年09月26日 21:22
  • 16576

腾讯微博模拟登录

public static String login(String uin, String p) {   System.out.println(uin+"开始模拟登录");   String co...
  • sunshinan2013
  • sunshinan2013
  • 2013年12月30日 14:02
  • 2529

微博背后的那些算法

微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则针对的是用户之间的关系,关注某个人就意味着你成...
  • xinzhangyanxiang
  • xinzhangyanxiang
  • 2014年01月27日 15:20
  • 11897

android界面开发:ViewPager的详解,并用于仿微博滑动实例和图片滚动实例

1.ViewPager简单使用ViewPager是android扩展包android.support.v4 里的一个继承与ViewGroup组件,通过布局管理器可以实现左右滑动来显示不同的View。而...
  • u013565368
  • u013565368
  • 2016年10月22日 16:28
  • 1458

Python爬虫学习记录(0)——Python 爬虫抓站 记录(虾米,百度,豆瓣,新浪微博)

python 下用到的库,urllib, urllib2, BeautifulSoup, cookielib, mechanize, re 看Firebug模拟浏览器行为。 1. 虾米 ...
  • cwyalpha
  • cwyalpha
  • 2015年08月30日 22:33
  • 9218

小游戏《撕撕看》1.2a 版本

游戏简介:      听说过日本杂志《妄撮》的玩家应该都不陌生~      该游戏是借鉴iOS平台上的一款名叫《撕掉她的衣服》( 妄撮 )的游戏而制作.    游戏主要功能:       1...
  • sghdls
  • sghdls
  • 2012年03月13日 16:28
  • 3320

冒志鸿(美国ArcBlock创始人兼CEO)

英文名:Robert Mao 性  别:男 国  籍:中国 简  介:专注研发新技术平台,为区块链实现互联网升级奠定基石 职  业:ArcBlock创始人兼CEO 曾  任:微软美国研究院研...
  • hack289099734
  • hack289099734
  • 2018年01月05日 22:03
  • 134

用Python学《微积分B》(序)

最近上下班地铁上一直在“学院在线”APP上学习清华大学扈志明老师的《微积分B》。该课程每节课都有练习题,为了加快做题速度,我尝试了用python来辅助解题,发现效果不错,故此分享给大家。一、Pytho...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2017年08月29日 10:29
  • 646

用WebCollector爬取新浪微博数据

用WebCollector可以轻松爬取新浪微博的数据.
  • AJAXHu
  • AJAXHu
  • 2014年09月01日 17:58
  • 17710

中科院计算所Goddon CPU诞生历史!牛!

下面就是项目负责人-胡伟武的研发手记  我参与计算所的CPU开发项目,源于2000年10月一个偶然的机缘。10月中旬,所领导派我到我的母校中国科技大学去进行招生宣传。这是我1991年毕业后第一次回到母...
  • tony821224
  • tony821224
  • 2008年02月10日 22:23
  • 632
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:陈老师撕B志玲姐姐的热门微博数据分析
举报原因:
原因补充:

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