新浪微博数据分析及社区发现方法研究
2018-10-18苟良
苟良
(新疆大学信息科学与工程学院,乌鲁木齐 830046)
新浪微博;社区发现;TF-IDF;K-means
0 引言
目前随着社交媒体的普及以及移动设备的飞速发展,新浪微博成了人们生活中必备的社交工具。在每天都产生亿级别的数据量中,蕴含着巨大的价值。新浪微博是一款为大众提供娱乐休闲生活服务的信息分享和交流平台,是一种开放的,可以快速发布信息的社交平台。每一条信息(称为微博)被限制在140个字符之内,用户与用户之间存在关注与被关注的关系,用户之间可以评论、点赞、转发别人的微博,称之为互动。
目前对新浪微博中整体用户的数据研究[1-3]有很多。在社交网络发现算法[4]中,值得一提的一类算法是凝聚类算法(Agglomeration Algorithms),这类算法是通过构建一个将小的类簇合并为大的类簇的层次树得到的多层聚类算法。其中比较著名的是Clauset A[5]等人提出的CNM[6]算法。随后,Yi Fan Hu[7]等人提出的Yi Fan Hu算法在用户关系上将点与线引入力学公式,进行了社交网络构图的完善。
本文从新浪微博中选择了若干用户作为种子用户,从这些种子的粉丝开始,继续爬取数据集中用户的粉丝的数据,通过此方法不断的遍历用户的粉丝,抓取了7万多用户,收集了200多万条微博。然后使用熵力模型确定节点关系,借助Gephi[8]工具进行绘图操作,绘制出了社交网络图,分析了数据集的特点,发现了用户在信息传递中的位置与作用。最后对数据集用户进行了群体划分,找出了每个群体的关键词。
1 数据收集与筛选
本文使用Python语言编写微博爬虫的程序,使用模拟登录的方法进行数据爬取,具体思路如下:
首先在新浪微博的高级搜索中找出了若干用户作为种子用户,从这些种子用户的粉丝开始,每位用户爬取前200名粉丝的数据,继续爬取数据集中用户的粉丝的数据,重复此方法,如图1所示。
图1 获取数据流程图
通过此方法不断地遍历用户的粉丝,抓取了7万多用户,收集了200多万条微博。
2 数据集特征分析
本文分析用户之间的关系并没有从关注与被关注的用户关系中寻找答案,因为新浪微博中存在不少“僵尸粉”,“营销号”等“spam user”存在,若只从单纯的关注关系来分析,这类“spam user”会很大程度上干扰真实的互动结果,所以本文主要从互动的用户(在微博下有点赞、评论、转发行为)入手,收集每个用户与其互动的用户,称这类用户为该用户的互动圈。在数据集中,若用户i对用户j的微博进行了评论(转发,点赞)行为,标记为 i→j。
2.1 熵力模型
本文使用熵力模型[9]确定节点之间的位置,该模型将节点位置问题(用户分布问题)转换为节点间连线长度问题,引入熵H(x)模型的目的是寻找两节点之间的距离关系,如公式(1)所示:
其中,E代表节点间连线,xi,xj代表节点i,j的度。在式(1)中,两节点之间的距离由两节点的度的差值决定,度反映节点上连线的数值,所以该公式的思想是确定互连的两节点之间的熵值,通过次公式遍历所有互连节点,如公式(2):公式(2)代表节点间的熵值由该节点与所有与其互连的节点共同决定。由此确定出所有节点的距离(熵值)。
2.2 社交网络图
通过该模型借助Gephi绘图工具绘制社交网络图,以用户ID为节点,互动关系用有向线表示,绘制出社交网络图,如图2所示:
图2 社交网络图
节点大小反映节点的度,即用户的互动圈大小,通常情况下节点大的用户群体互动程度较高、粉丝数量较多、发布的微博数量较多。
3 用户社区发现研究方法
3.1 方法概述
传统的社群发现算法都是从社交媒体上用户间的社交网络中延伸而来,从个人节点出发,计算与其有关联的节点,从而确定一个群体,这样做的好处是能较快地将互相关注的人聚成一个群体。但是却忽略了一些较为重要的问题,一个群体的人发布微博内容是否相似,兴趣是否一致,对事件的态度是否有差异。
针对这类问题,本文从用户的微博内容出发,以关键词为单位,对用户进行聚类计算。通过聚类算法,找到包含关键词相似的用户并归为一类。这样做的目的是,可以针对不同的关键词,定位到不同群体,了解不同群体所表述的内容,区分兴趣点,缩小检索范围。
之所以从关键词的角度出发,是因为文本的基本单位是词,文本的中心思想由词来表示,对关键词的提取能很大程度地反映文本内容的表达。所以定位到词,找到使用相同词的不同用户,将这类用户聚为一个群体。
用户社群发现具有很大的利用价值,目前较频繁使用的好友推荐系统,广告定位系统,产品推荐系统都可以在此基础上继续延伸。
我们所采用的数据集包括两部分,一是从抓取的7万多用户中随机选择了5万多用户及其相关微博,二是为增加群体多样性,又从其他微博数据集中加入了3万多用户及其相关微博。然后对每条微博进行归属分类,单独统计出每位用户发布的微博,使用Jieba分词对中文部分进行分词,Jieba是包装于Python中的第三方类库,其中主要使用到的原理有:
(1)为了达到高效的目的,底层使用Trie树结构进行词图扫描,在一句话中,对于所有可能构成词的情况,全部建立有向无环图(DAG)。
(2)为了查找最大概率路径,采用了动态规划的方法。根据词频,找到最大概率切分组合。
(3)当出现未记录词时,使用了基于HMM模型进行新词训练,使用了其中的Viterbi算法。
之后是用TF-IDF算法计算所有词的词权值,将所得结果进行归一化处理后使用K-means算法进行聚类统计,选取质心找出群体关键词,根据关键词进行集中分析。
3.2 TFF--IIDDFF算法
将微博文本使用分词算法进行词切割之后,最小单位从文本转变为词,并统计出每位用户所使用的词,使用TF-IDF算法计算每个词的词权值。
TF-IDF算法是一种用来评估一个词对于一个文件的重要程度的算法。一个词的重要程度分别由两部分决定。
(1)TF(Term Frequency):
一个词在一个用户的微博中出现的次数与其对该用户的价值的大小成正比,如公式(3):
其中,tfi,j代表词i在微博j中的权值,ni,j是词i在文件dj中出现的次数,而分母则是文件中所有词汇出现的次数总和。
(2)IDF(Inverse Document Frequency):
逆文档频率,反映一个词的常见程度,若一个词很常见,说明该词并没有很好的分类效果,从而权值较小。换句话说,一个词的权值与该词的常见程度成分反比,如公式(4):
其中,|D|是个人微博总数,分母表示包含词语ti的微博总数。
最后,可以计算出每个词(t)的 TF-IDF(t)=TF(t)*IDF(t)。
观察计算出的每个词的词频,由于文本数量庞大,而词数远小于文本数量,导致计算出来的词权值趋近于零。为了解决数值较小影响计算的问题,本文选取[0-20]之间的区间随机数代替词权,这里词权的大小与随机数的大小一一对应,以便接下来的聚类计算。
3.3 K-mmeeaannss算法
通过TF-IDF算法计算出了每个用户使用词的权值之后,本文针对每个用户,选取权值最大的10个词作为该用户的关键词,若有用户关键词数量不够10个,则补零至10位,这样处理后,数据集转换为向量集,每位用户转为十维的向量,如下:
useri=[w ordi1,wordi2,wordi3,…,wordi10]
其中,useri代表用户i,wordij代表用户i的第j个关键词权值,使用K-means算法进行聚类计算。
K-means算法是一种基于距离的无监督聚类算法,相似性以距离为指标进行聚类,若两个对象的欧氏距离越近,则两个对象为一类的可能性就越大。K-means算法的关键之处在于K值的选取,K代表初始质心的数量,也就是最终分类的数量。
K-means算法说明如下:
选定K个簇中心Uk的初值。由于K-means算法不能保证全局最优,而结果最优通常与初始K值有较大关系,所以多次选取初值进行结果比较是较常用的方法;
遍历所有点,将每个点归类到与其最近的中心点簇中;
计算新的中心点,如公式(5):
重复第二步,直到最大的步数。
图3 用户聚类图
针对本文数据集,聚类结果如图3所示:可以看到,图3中有较明显的聚类现象,本文聚类结果分析如下节。
3.4 聚类结果统计
选取各类群体的质心,共找出七类群体,如表1所示:
表1 七类群体
不同类的用户所使用的关键词具有一定的差异性,说明不同群体内发布的微博内容有一定的区别。
1.第一类群体,“方便”、“别致”、“人气”、“补水”、“在家”、“拼命”、“攀比”、“赶快”、“团队”等词突出微博内容的日常生活及工作性。
2.第二类群体,该类群体的关键词中评论性的副词较多,如“实在”、“由”、“即”、“曾经”、“信任”、“精彩”也体现出微博内容具有一定的评论性质。
3.第三类群体,“想念”、“互粉”、“身体”、“多么”、“操心”、“可怕”、“悲伤”、“精神”、“无论”、“追求”等关键词表示微博内容多在表达心理状态。
4.第四类群体,“多云”、“春暖花开”、“阳光”、“整齐”等关键词说明该类群体关注天气环境。
5.第五类群体,微博内容里多出现“摄影”、“画”、“天籁”、“阅读”等词,突出该类群体对艺术类的侧重。
6.第六类群体,这类群体微博内容中的“人气”、“套装”、“这款”、“炒股”、“新人”等词说明该类用户在微博内容上以商业为主,通过社交媒体进行产品销售也是目前很常见的一种现象。
7.第七类群体,“城市”、“乡村”、“旅游”、“道路”、“我家”等展现出该类群体倾向于旅游。
如上结果表明,本文所提出的方法能够挖掘出数据集中的不同群体,并找出该类群体的特点。
4 结语
本文主要提出了一种新的数据爬取策略,引入熵力模型绘制社交网络图,发现了互动人群的特点。在社群发现方面,从关键词的角度出发,找出每位用户发布微博时使用的代表词,并通过聚类算法对用户进行了群体聚类,找出每个群体最具代表性的关键词,分析群体特点。