最近一个项目用到一个上百万行的微博数据,包括微博文本数据和地理坐标数据,从数据库中把这些数据取出来后做了一些分析,这里选了其中比较有趣的部分记录一下,当做积淀。
因为数据是2013年的(现在2018年去挖2013的数据确实有些“落后”了,但它比较全而且现在微博爬数据越来越困难了),首先要确定2013年有哪些微博热点,这里选了微博小秘书发布的十大头条盘点:
十大头条日历图
用echarts标注一下这10个头条的发生时间,得到上面的可视化效果(青色有涟漪效果的为10大头条发生时间)。
微博小秘书的十大头条盘点
这里选了其中4个进行分析,首先关注度方面,选了五个维度:微博量、微博文本平均长度、衰减时间、衰减速率、坐标广度;
这些指标部分通过SQL语句直接算,坐标广度是把坐标取出来后用Python算了最小外包矩形(MBR)。最后得到一个雷达图(经过归一化处理):
关注度对比雷达图
可以看到地震是关注度很高的,毕竟四川的地震牵动全国人民的心。
自然语言处理方面,先是用jieba库进行了分词,统计了词频,并且用wordcloud进行词云可视化。
部分Python代码如下:
wlst = jieba.lcut(text) #分词
dictToCsv(wcDict,dictOut) #保存词频表到dictOut文件里
bdimg = np.array(Image.open(markPic))
wordcloudc = WordCloud(
mask=bdimg,
background_color='white',
font_path='C:\Windows\Fonts\simsun.ttc'). \
generate_from_frequencies(wcDict)
wordcloudc.to_file(picOut) # 保存图片为png
王菲离婚词云图
2013雅安地震
从词云图中可以看到一些事件的联系,例如雅安地震讲到了较多的汶川。复旦事件很多文本里谈到了清华朱令案。
情感分析用了百度AI的API算了文本的情绪,精度不是很高,之后会尝试其他主要用微博文本进行训练的模型来算情绪。
百度AI算出来的结果统计如下,估计是地震的微博里面有比较多的祈福、坚强等字眼,判为正向情绪的文本比例大。
情绪比例堆叠条形图
因为这四个事件是灾难或危机事件,负面情绪的比例还是可观的。