该文档包含设计思路、过程和分析结果,完整代码见ipynb文档。数据集和ipynb文档地址如下:链接:https://github.com/adureychloe/weibo-data-analysize
1、导入需要的包
2、用pandas导入数据并查看
这里直接读取week1.csv的话会有编码问题,所以要间接用open函数里的errors参数来处理。
用info函数来查看两个数据表的信息,info函数返回有哪些列、有多少非缺失值、每列的类型。
df:
user_df:
查看有多少是缺失值:
df:
可见retweeted_uid、geo、deleted_last_seen、permission_denied基本上全是Nan值,所以不需要考虑他们。
user_df:
可见user_df里没有空值。
user_df的数据不需要清洗,来看df。
随便从text中抽一条看看:
可见里面主要信息为中文,其余还有一些字符、@、英文,特别要注意的是,这是微博数据,也就是说[]里的内容并不是真正的文本,而是表情,如果没有注意这个,那提取关键词的时候这些表情就会变成最多的词,因为表情才是用户发的最多的,什么[哈哈]、[哭]什么的。
值得注意的是,除了这些之外,在观察了text文本数据内容,并且在后面提取了关键词后我们会发现,“转发微博”、“微博”、“哈哈”、“啊”这些词出现的频率很高,但是并没有实际含义,而且“哈哈”和“啊”这类词的长度不定,可以是任意个“哈”和“啊”,所以不能在停用词里去掉。所以根据这些,我们来清洗text文本数据。
得到的结果里只包含中文。但是有些行已经为空了,防止对我们后续造成影响,我们将这些空行去掉。首先填充Nan:
然后去掉带Nan的行并将索引重排:
到这里为止数据就算是清理好了。
先把user_df中的大V的性别和省份筛选出来。
查看性别分布:
用pyecharts画出微博大V性别分布图:
可见微博大V中男性要比女性多一点,男性有124433个,女性有68539个。
接下来看省份分布,这里的省份只有代码,所以我们要先在网上找一个省份代码对照表province.txt。内容如下:
然后要将表big_v中的省份代码换成真正的省份名称。
查看省份分布:
用pyecharts画出省份地图分布:
图像是交互式的,可以把鼠标移到省份上查看当前省份的大V数量:
从图中可看出大V主要集中在东部地区,这应该是因为东部地区经济更加发达,资源更多,网络条件什么的也更好,相比之下成为大V更容易的缘故。
接下来看看微博大V最常使用的客户端。
这个信息在df里,所以我们先将user_df中的大V的uid弄出来:
然后筛选出大V的客户端来源:
还是用pyecharts画出饼图:
图中可以看出用新浪微博客户端的大V最多,有405282个,其次是iPhone客户端和皮皮时光机,分别有123852和99816个。
然后对大V发布微博进行关键词提取作为大V的用户标签,分为全部大V、男性大V和女性大V。
首先对df中的text进行jieba分词:
把男性大V和女性大V的uid分别取出:
然后分别把所有大V、男性大V、女性大V的微博内容筛选出来:
开始提取前100个关键词:
结果:
男性大V:
所有大V:
词云可视化:
男性大V:
所有大V:
首先我们来提取排名前十的热点话题。
因为话题并不等同于关键词,而更像是一些关键词的组合,所以像上面那样直接提取关键词作为话题似乎并不科学。所以我们这里用LDA(隐含狄利克雷分布)来进行文本主题抽取。
LDA 在主题模型中占有非常重要的地位,常用来文本分类。LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,用来推测文档的主题分布。它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题分布后,便可以根据主题分布进行主题聚类或文本分类。
机器学习的模型分为两种,一种是基于策略,即不能给出明确的数据分布的,一种是基于模型,可以给出分布的形式,但是超参数不知道。kmeans,dbscan是基于性能和密度的,基于策略寻找最优聚类方案,而PLSA和LDA是基于多项式分布和狄利克雷分布的,基于参数迭代寻找最优聚类方案的。
先对文本进行jieba分词:
单词之间都被空格区别开来,接下来对文本做向量化。
导入包:
导入停用词(停用词就是一些经常在文中出现但是没有太重要意义的词),这里用的是网上找的停用词表:
如果处理太多词汇的话时间太长,于是这里我就只从文本中提取1000个最重要的特征关键词,并进行向量转换。
提取的向量矩阵大小为(3777777,1000)。
导入LDA包:
LDA需要人为设定主题数量,这里我选择30个,然后再取前10个主题。
主题并没有确定的名称,而是用一系列关键词相结合形成的。模型fit后,需要定义每个主题输出多少个关键词,这里暂定输出前20个关键词:
输出结果:
可以大概看出每个主题大概是什么。比如第一个大概是关于电影明星的,第四个大概是抽奖、祝福之类的,第十个大概是关于人生鸡汤之类的。
这里可以用pyLDAvis来可视化:
在图的左侧,是用圆圈代表不同的主题,圆圈的大小代表每个主题分别包含文章的数量。可以看到30个主题大概聚成了三堆,聚成一堆的代表他们主题比较相似。
当鼠标没有指向任何主题的时候,右侧的30个关键词代表全部文本中提取到的30个最重要关键词。大概是“喜欢、关注、男人、女人、加油”这些词。
如果把鼠标放到某个主题(这里是主题一)下:
右侧的关键词列表就会变化,红色展示了每个关键词在当前主题下的频率。
接下来我们来分析不同时间段的热点话题,看下热点话题的演化过程。
时间数据在df的created_at字段里,先来看一下数据:
这些数据是object,不好操作,所以需要把它转化成时间序列。
然后把它作为索引并排序:
看一下时间序列:
可以看到时间为从2012-01-02到2012-01-08。我就分成2号-4号、5号-7号、8号-9号来研究不同时间的热点话题。
类似上面的,分别从文本中提取1000个最重要的特征关键词,并进行向量转换。
进行LDA主题抽取,这里只选取5个主题:
第一阶段的热点话题:
第二阶段的热点话题:
第三阶段的热点话题:
最后来总结一下热点话题形成的特点和关键因素。
首先当然是微博大V发布和转发的消息会更容易成为热点话题,而从大V的用户画像中可以看出来自北京、上海、广东等发达地区的大V数量更多,他们引起的热点话题也就多。
其次是一条微博的转发量。转发量越多,自然话题变成热点话题的概率也就更大。
还有就是各种重大节日和事件的发生。比如像是情人节,恋爱、感情就会变成热点话题,而如果是奥运会开幕这种事件,运动员就会变成热点话题。热点话题是随着时间和事件的发生决定的。
而关于工作、生活、学习之类的事情,其实一直都是热点话题,一直被人们所讨论。
以上就是本篇文章【微博大 V 用户画像与热点话题分析】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/7150.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多