标签:linear 日期 turn 支持 国产 帐号 长方形 更新 数据
小爬怡情,中爬伤身,强爬灰灰。爬虫有风险,使用请谨慎,可能是这两天爬豆瓣电影爬多了,今天早上登录的时候提示号被封了(我用自己帐号爬的,是找死呢还是在找死呢 ...),好在后面发完短信后又解封了,^_^。
之前的文章中,已把电影短评数据装进了Mongo中,今天把数据取出来简单分析一下,当下最火的做法是进行词频统计并生成词云,今天说的就是这个。
读取Mongo中的短评数据,进行中文分词
学习Python中有不明白推荐加入交流裙
号:735934841
群里有志同道合的小伙伴,互帮互助,
群里有免费的视频学习教程和PDF!
不知道什么原因,我实际爬下来的短评数据只有1000条(不多不少,刚刚好),我总觉得有什么不对,但我重复爬了几次后,确实只有这么多。可能是我爬虫写的有什么不对吧,文末附源码链接,有兴趣的去看看, 欢迎拍砖(轻拍)。
import pymongoimport jiebafrom jieba import analyse# 网页链接
text = Nonewith pymongo.MongoClient(host=‘192.168.0.105‘, port=27017) as client: # 获取集合
comments = client.douban.movie_26752088_comments # 不知道为什么爬虫只取到了1000条评论~
print(‘count:‘, comments.estimated_document_count()) # pymongo.cursor.Cursor
cursor = comments.find() # 遍历数据,这里只遍历短评数据(好在数据量并不太大)
text = ‘‘.join(map(lambda doc: doc.get(‘comment‘), cursor))# 对短语数据文本进行分词# 添加自定义分词[jieba.add_word(k) for k in []]# 取Top50的词生成词云# 网页链接基于-tf-idf-算法的关键词抽取tags = analyse.extract_tags(text, topK=50, withWeight=False)
new_text = ‘ ‘.join(tags)
print(new_text)
中文分词部分,默认分词效果已经非常好了,我未添加自定义字典,这里感谢一下 结巴 的作者
对分词结果取Top50生成词云
也感谢一下 word_cloud 的作者,^_^
# 对分词文本生成词云# 生成词云,需要指定支持中文的字体,否则无法生成中文词云wc = WordCloud( # 设置词云图片背景色,默认黑色
# background_color=‘white‘,
# 设置词云最大单词数
max_words=200, # 设置词云中字号最大值
# max_font_size=80,
# 设置词云图片宽、高
width=768,
height=1024, # 设置词云文字字体(美化和解决中文乱码问题)
font_path=r‘../example/fonts/FZXingKai-S04S.TTF‘).generate(new_text)# 绘图(标准长方形图)pyplot.imshow(wc, interpolation=‘bilinear‘)
pyplot.figure()
pyplot.axis(‘off‘)# 将图片输出到文件wc.to_file(r‘./images/wc.png‘)
生成词云效果
看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任务(其实都是一些很简单的任务,纯练手用),后续会持续更新。
其它分析任务
点赞数Top10
import pymongo
# 取点赞最多的前10条短评with pymongo.MongoClient(host=‘192.168.0.105‘) as client:
comments = client.douban.movie_26752088_comments for doc in comments.find().sort([(‘vote‘, -1)]).limit(10):
print(‘author = {}, date = {}, vote = {}, comment = {}‘.format(
doc.get(‘author‘),
doc.get(‘date‘),
doc.get(‘vote‘),
doc.get(‘comment‘)
))
15天评论量分布、走势
# 每日评论数,基于此生成日期评论走势图(用Excel生成的 ^_^)from datetime import datetimeimport pymongofrom bson import Code# 网页链接(host=‘192.168.0.105‘) as client:
comments = client.douban.movie_26752088_comments
fn_map = Code("""
function () {
if (this.date != null) {
emit(this.date, 1);
}
}
""")
fn_reduce = Code("""
function (key, values) {
var total = 0;
for (var i = 0; i < values.length; i++) {
total += values[i];
}
return total;
}
""") # pymongo.collection.Collection
results = comments.map_reduce(fn_map, fn_reduce, out="mr_results") # 取最近15天数据
for col in results.find().sort([(‘_id‘, -1)]).limit(15): # 格式化输出
print(col[‘_id‘].strftime(‘%Y-%m-%d‘), ‘ ‘, int(col[‘value‘])) # 删除生成的结果集合
client.douban.mr_results.drop()
15天评论量分布图
15天评论量走势图
标签:linear 日期 turn 支持 国产 帐号 长方形 更新 数据
原文地址:https://www.cnblogs.com/520lmx/p/10210758.html