新浪微博如火如荼,基于微博的各种应用也层出不穷。

有一种共识似乎是:微博数据蕴含着丰富的信息,加以适当的挖掘。可以实现众多商业应用。恰好社会网络分析也是我之前有所了解并持续学习的一个领域,因此我做了微博数据分析方面的一些尝试。这些尝试是比較初步的,属于探索性的阶段,当然不能跟微博分析家这样比較成熟的应用相提并论。而且我的分析基本上都出于想当然的直觉感受,没有详细的理论支撑。这方面须要试着找点书籍来阅读一下,貌似有蛮多可以參考的。

一、用R登录并公布微博

之所以仍然选择用R来做这个登录和公布的工作。是考虑到分析过程的连续性。毕竟可以在同一个平台以下完毕全部的工作,还是非常令人身心愉悦的。这里借助了一款命令行浏览器cURL,这个浏览器在R中可以用RCurl实现,简单的介绍建议參考medo的《R不务正业之RCurl》。因为我对HTTP这些东西都属于0基础未入门水平,没能实现直接的登录,仅仅好利用了cookie实现间接登录。可是终于结果还是蛮稳定的。编写这个登录和公布微博的函数。目的之中的一个是为兴许的数据採集做准备,但同一时候也可以实现同步更新不同平台信息的功能。比如写一条语句就行把人人状态、新浪微博、飞信签名等等同步更新,还是非常有趣的。仅仅是人人状态和飞信签名貌似不是非常稳定,偶尔能用偶尔报错。我略微測试了一下。可能是cookie的问题,眼下没有深入探索。

(更新:眼下已经实现了直接登录,这样也许能够绕过cookie的问题。)

总地来说这个功能的效果就是这个样子。

二、採集关注信息。制作粉丝及关注人的地区分布
在登录之后。就能够用一些循环语句来採集关注者与被关注者的ID等信息(不知道这算不算是某种爬虫)。

为了描写叙述地区分布,仅仅须要採集用户的地区信息就OK了。然后借助maptools包。能够比較方便地画出简单的用户分布图。

这里没办法画海外人士,见谅。

 
我的粉丝的分布:
我关注的人的分布:

能够看得出来,不论是关注还是被关注,用户的分布都算是比較集中。这个非常能够理解。由于我是小网虫一仅仅。没啥广泛的人气,哈哈。可是显然地,某省ID的频数非常高,令人欣慰。
三、採集关注信息。制作关注关系的网络图
这个工作眼下尚未完毕,主要是遇到了技术性的障碍:矩阵太大。我的计算机算不动。其实,採集数据的过程跟上述的地理位置的採集没有本质差别。都是一些循环的计算,终于得到的结果是这个样子:

前两列是我关注的用户以及他们的ID,后两列是前两列所关注的用户及ID。这个数据集眼下有22446行,涉及到15868个用户ID,假设要画网络图,似乎对计算机的性能有比較高的要求。所以我仅仅好临时选择了一种无奈的办法:抽样。

得到的结果大概是这样:

换一种抽样的逻辑。降低对象个数。能够做出相对清晰一点的网络。像是这样: 

尽管作图遇到了一定的障碍,可是在做的过程中我还是有所体会:follow的信息比fans的信息更干净一点。

由于我都是以我的ID为中心出发来进行数据的採集,所以本质上得到的网络都是个体网。而fans的关系往往不能说明什么问题。由于我的非常多fans都是不知所云的fans。

我揣測,这些fans。要么是所谓的僵尸ID,要么是所谓的广告ID。要么就是一些新用户随便加入的关注。

这些关注关系并非我所关心的关系。尽管他在某种程度上体现着我的某种中心度。因此我在后面把关心的重点集中在我的follow上,由于由我出发的这条follow关注链是比較纯粹的:要么是感兴趣的人,要么是有感情的人。总之都是具有确实意义的关注关系。

 
四、基于follow关系的一种用户推荐
意识到follow关系的纯粹性之后。我就開始试图针对follow关系做一些分析。

最先想到的就是用户的推荐。

我没有详细研究新浪微博眼下使用的用户推荐的方式,感觉是有两种:依据个人资料推荐,依据个人标签推荐。

我的直观理解。推荐系统的一个逻辑问题是:用户会接受如何的推荐。或者换句话说。用户是为什么而去关注他人的。因此我就认为,基于个人资料的推荐可能并非那么靠谱。尤其是新浪微博持续不断地向我推荐”浙江大学“的用户。

且不说里面有非常多是”浙江大学城市学院“之类的漏网之鱼。关键是我为什么只由于他跟我同一所大学毕业就要去关注他呢?我认为基本上没有道理。除非在大学的基础上还可以进行其它判断。精确地判断出他跟我可能是本科室友,那我就比較感谢新浪微博了哈哈。至于依据个人标签来进行推荐。我认为对我来说相对还算靠谱。由于我主要还是依据兴趣爱好来进行关注的。可是只依据个人的标签来做推荐。又有点单调与片面,我认为增加”关注对象的标签“可能会更完好一点。

这样的考虑的来源是:我关注的那些人都是我确实感兴趣的那些人,他们可能会拥有一些类似的标签,而这些标签是我没有给自己加的,这要么是由于懒。要么是由于没有意识到。于是我採集了我follow的那些用户的个人标签,然后做了简单的频数统计,得到了以下的结果,这个结果基本上算是一目了然。

第二种可能靠谱的推荐是直接从关注关系出发进行推荐。这种考虑的来源是:我关注的那些人都是我确实感兴趣的那些人。他们可能会拥有一些共同的关注对象,而这些对象是我还没有关注的。这要么是由于懒,要么是由于没有意识到。于是我画了这种图: 

在这个图里面标出了一些用户。横轴表示我关注的人其中有多少人正在关注这个用户,纵轴表示这个用户本身的粉丝数量。横轴这个数值越大,说明我关注的人其中有非常大一部分正在关注这个用户,比如李开复老师,于是我就非常可能对李开复老师是感兴趣的。之所以要考虑纵轴(用户本身的粉丝数量)。是由于有一些用户的粉丝本身就非常多,比如潘石屹等人。他们是某种明星人物。因此我关注的人其中有非常多都关注这个用户,是一种非常正常的追星现象。未必可以非常好地体现这样的关注兴趣的集中性与传递性。基于这样的考虑,我设置了一个明星阈值:粉丝数量大于10000的。觉得是某种明星。临时不考虑作为推荐(也许可以在某种topN的推荐中出现)。这样处理的结果是:

能够看出来,这样的做法的本质是把原图的左下角放大了。
 
还有一种策略是将上面原图的横轴和纵轴数据做整合。用横轴除以纵轴,构造一个比例:我关注的人在他所有粉丝中的占比。能够非常直观地理解,假设一个用户的粉丝本身就不多。而当中就有好多是我所关注的人,那么这个用户非常可能也是我会感兴趣的用户。

这个图做得有点粗糙。事实上横轴能够把”来自我关注的人“加进去,但似乎也不非常影响结果的直观性,就懒得又一次画了。
 
另一种比較类似的思路:已关注我 & 我未关注 & 我关注的人其中有人已关注他。于是

基本就是这样,这是我对微博分析的一些初步尝试,应该会继续学习下去。

二、採集关注信息,制作粉丝及关注人的地区分布
在登录之后,就能够用一些循环语句来採集关注者与被关注者的ID等信息(不知道这算不算是某种爬虫)。

为了描写叙述地区分布,仅仅须要採集用户的地区信息就OK了。

然后借助maptools包,能够比較方便地画出简单的用户分布图。这里没办法画海外人士,见谅。

 
我的粉丝的分布:
我关注的人的分布:

能够看得出来,不论是关注还是被关注,用户的分布都算是比較集中。

这个非常能够理解,由于我是小网虫一仅仅。没啥广泛的人气。哈哈。可是显然地。某省ID的频数非常高,令人欣慰。

三、採集关注信息,制作关注关系的网络图
这个工作眼下尚未完毕。主要是遇到了技术性的障碍:矩阵太大。我的计算机算不动。其实,採集数据的过程跟上述的地理位置的採集没有本质差别,都是一些循环的计算,终于得到的结果是这个样子:

前两列是我关注的用户以及他们的ID。后两列是前两列所关注的用户及ID。

这个数据集眼下有22446行。涉及到15868个用户ID,假设要画网络图,似乎对计算机的性能有比較高的要求。

所以我仅仅好临时选择了一种无奈的办法:抽样。得到的结果大概是这样:

换一种抽样的逻辑。降低对象个数,能够做出相对清晰一点的网络。像是这样: 

尽管作图遇到了一定的障碍。可是在做的过程中我还是有所体会:follow的信息比fans的信息更干净一点。

由于我都是以我的ID为中心出发来进行数据的採集,所以本质上得到的网络都是个体网。

而fans的关系往往不能说明什么问题,由于我的非常多fans都是不知所云的fans。我揣測。这些fans,要么是所谓的僵尸ID,要么是所谓的广告ID,要么就是一些新用户随便加入的关注。

这些关注关系并非我所关心的关系,尽管他在某种程度上体现着我的某种中心度。因此我在后面把关心的重点集中在我的follow上,由于由我出发的这条follow关注链是比較纯粹的:要么是感兴趣的人。要么是有感情的人。总之都是具有确实意义的关注关系。

 
四、基于follow关系的一种用户推荐
意识到follow关系的纯粹性之后。我就開始试图针对follow关系做一些分析。最先想到的就是用户的推荐。

我没有详细研究新浪微博眼下使用的用户推荐的方式。感觉是有两种:依据个人资料推荐,依据个人标签推荐。
我的直观理解,推荐系统的一个逻辑问题是:用户会接受如何的推荐。或者换句话说,用户是为什么而去关注他人的。

因此我就认为。基于个人资料的推荐可能并非那么靠谱,尤其是新浪微博持续不断地向我推荐”浙江大学“的用户。且不说里面有非常多是”浙江大学城市学院“之类的漏网之鱼。关键是我为什么只由于他跟我同一所大学毕业就要去关注他呢?我认为基本上没有道理。除非在大学的基础上还可以进行其它判断。精确地判断出他跟我可能是本科室友,那我就比較感谢新浪微博了哈哈。至于依据个人标签来进行推荐,我认为对我来说相对还算靠谱。由于我主要还是依据兴趣爱好来进行关注的。可是只依据个人的标签来做推荐。又有点单调与片面,我认为增加”关注对象的标签“可能会更完好一点。

这样的考虑的来源是:我关注的那些人都是我确实感兴趣的那些人,他们可能会拥有一些类似的标签,而这些标签是我没有给自己加的,这要么是由于懒,要么是由于没有意识到。

于是我採集了我follow的那些用户的个人标签。然后做了简单的频数统计,得到了以下的结果,这个结果基本上算是一目了然。

第二种可能靠谱的推荐是直接从关注关系出发进行推荐。这种考虑的来源是:我关注的那些人都是我确实感兴趣的那些人,他们可能会拥有一些共同的关注对象。而这些对象是我还没有关注的。这要么是由于懒,要么是由于没有意识到。于是我画了这种图: 

在这个图里面标出了一些用户,横轴表示我关注的人其中有多少人正在关注这个用户。纵轴表示这个用户本身的粉丝数量。横轴这个数值越大。说明我关注的人其中有非常大一部分正在关注这个用户。比如李开复老师,于是我就非常可能对李开复老师是感兴趣的。

之所以要考虑纵轴(用户本身的粉丝数量),是由于有一些用户的粉丝本身就非常多。比如潘石屹等人,他们是某种明星人物,因此我关注的人其中有非常多都关注这个用户,是一种非常正常的追星现象,未必可以非常好地体现这样的关注兴趣的集中性与传递性。基于这样的考虑。我设置了一个明星阈值:粉丝数量大于10000的,觉得是某种明星,临时不考虑作为推荐(也许可以在某种topN的推荐中出现)。这样处理的结果是:

能够看出来,这样的做法的本质是把原图的左下角放大了。
 
还有一种策略是将上面原图的横轴和纵轴数据做整合,用横轴除以纵轴。构造一个比例:我关注的人在他所有粉丝中的占比。能够非常直观地理解。假设一个用户的粉丝本身就不多,而当中就有好多是我所关注的人,那么这个用户非常可能也是我会感兴趣的用户。

这个图做得有点粗糙,事实上横轴能够把”来自我关注的人“加进去,但似乎也不非常影响结果的直观性。就懒得又一次画了。
 
另一种比較类似的思路:已关注我 & 我未关注 & 我关注的人其中有人已关注他。于是

基本就是这样,这是我对微博分析的一些初步尝试。应该会继续学习下去。

用R进行微博分析的初步尝试的更多相关文章

  1. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  2. R语言︱情感分析—词典型代码实践(最基础)(一)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:词典型情感分析对词典要求极高,词典中 ...

  3. 使用R进行相关性分析

    基于R进行相关性分析 一.相关性矩阵计算: [1] 加载数据: >data = read.csv("231-6057_2016-04-05-ZX_WD_2.csv",head ...

  4. 用R进行文本分析初探——以《红楼梦》为例

    一.写在前面的话~ 刚吃饭的时候同学问我,你为什么要用R做文本分析,你不是应该用R建模么,在我和她解释了一会儿后,她嘱咐我好好写这篇博文,嗯为了娟儿同学,细细说一会儿文本分析. 文本数据挖掘(Text ...

  5. R语言︱情感分析—基于监督算法R语言实现(二)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:本文大多内容来自未出版的<数据 ...

  6. 基于R进行相关性分析--转载

    https://www.cnblogs.com/fanling999/p/5857122.html 一.相关性矩阵计算: [1] 加载数据: >data = read.csv("231 ...

  7. 【阿里云产品公测】性能测试服务PTS的初步尝试

        性能测试服务PTS,对于像我这样对测试毫无概念的新手来说,这服务真的太好了,使用简单,官方教程又明细,连我这样的新手一看都明白了怎样使用. _%GGl$kH   下面是我来简单尝试一下,更多功 ...

  8. Ruby 定时任务之一(初步尝试)

    最近工作需要用到定时任务.原来写java的时候也用到过类似的Scheduler的功能. Ruby语言中也有同样功能的工具.rufus-scheduler.下面介绍一下rufus-scheduler. ...

  9. 学习DDD的初步尝试,从最基础的开始,业务介绍,划分限界上下文 ,建立模型

    Conference业务简介 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的用户有两类: 1:客户,可以创建和管理会议. 2:会议座位预定者,可以预订会 ...

随机推荐

  1. jquery 获取日期 date 对象、 判断闰年

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 【原】tcpdump命令

    1.常用参数总结 tcpdump tcpdump -i  (网卡) tcpdump -nn  (数字的方式显示IP和端口.一个n是ip) tcpdump -c x   (抓包数量,x为数字) tcpd ...

  3. IDEA -- idea无法导入HttpServlet包解决方法

    IntelliJ IDEA 没有导入 servlet-api.jar 这个架包,需要你手动导入支持. 步骤1: 步骤2: 步骤3: 在弹出框中找到Tomcat安装路径 下的lib文件夹..中的Serv ...

  4. CSU1007: 矩形着色

    Description Danni想为屏幕上的一个矩形着色,但是她想到了一个问题.当点击鼠标以后电脑是如何判断填充的区域呢? 现在给你一个平面直角坐标系,其中有一个矩形和一个点,矩形的四条边均是平行于 ...

  5. mysql批量插值

    将查询结果集插入到表中(适用批量插值) 将结果集插入 不需要添加VALUES INSERT INTO `erp`.`role_menu` (`ROLEUUID`, `MENUUUID`) (SELEC ...

  6. Delphi 正则表达式 TPerlRegEx 类

    抄自:万一的博客 http://www.cnblogs.com/del/category/113551.html 目录: 基本方法 查找(目标字符串及其属性) 字表达式 限定匹配范围:start.st ...

  7. 升级openssh踩得坑

    升级背景: 项目中使用的系统为CentOS6.8,经过漏洞扫描后发现openssh高危漏洞,具体描述如下:OpenSSH 7.2p2之前版本, sshd/ session.c/ do_setup_en ...

  8. MapReduce架构与执行流程

    一.MapReduce是用于解决什么问题的? 每一种技术的出现都是用来解决实际问题的,否则必将是昙花一现,那么MapReduce是用来解决什么实际的业务呢? 首先来看一下MapReduce官方定义: ...

  9. java中"=="和equals方法究竟有什么区别?

    为什么会说到这个问题呢,是因为在java中遇到这个问题太常见了,无论是在写代码时还是在面试时.下面就一起探讨一下它们之间的联系与区别吧. 首先对于这样的问题,一般是先单独把一个东西说清楚,然后再说另一 ...

  10. Blend 混合

    Shader 中的混合 Blend Off  :不混合 Blend SrcFactor DstFactor  :SrcFactor 是源系数,DstFactor是目标系数,源系数是由片段着色器计算出来 ...