文档章节

使用Python分析《我不是药神》豆瓣电影短评

一别丶经年
 一别丶经年
发布于 07/13 12:36
字数 1927
阅读 3627
收藏 42

小爬怡情,中爬伤身,强爬灰灰。爬虫有风险,使用请谨慎,可能是这两天爬豆瓣电影爬多了,今天早上登录的时候提示号被封了(我用自己帐号爬的,是找死呢还是在找死呢 ...),好在后面发完短信后又解封了,^_^。

之前的文章中,已把电影短评数据装进了Mongo中,今天把数据取出来简单分析一下,当下最火的做法是进行词频统计并生成词云,今天说的就是这个。

读取Mongo中的短评数据,进行中文分词

不知道什么原因,我实际爬下来的短评数据只有1000条(不多不少,刚刚好),我总觉得有什么不对,但我重复爬了几次后,确实只有这么多。可能是我爬虫写的有什么不对吧,文末附源码链接,有兴趣的去看看, 欢迎拍砖(轻拍)。

import pymongo
import jieba
from jieba import analyse

# https://pypi.org/project/pymongo/
# http://github.com/mongodb/mongo-python-driver
from matplotlib import pyplot
from wordcloud import WordCloud

text = None

with 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的词生成词云
# https://github.com/fxsjy/jieba#基于-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')

生成词云效果

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')
        ))
  1. author = 忻钰坤, date = 2018-07-04 00:00:00, vote = 28129, comment = “你敢保证你一辈子不得病?”纯粹、直接、有力!常常感叹:电影只能是电影。但每看到这样的佳作,又感慨:电影不只是电影!由衷的希望这部电影大卖!成为话题!成为榜样!成为国产电影最该有的可能。
  2. author = 沐子荒, date = 2018-07-03 00:00:00, vote = 27237, comment = 王传君所有不被外人理解的坚持,都在这一刻得到了完美释放。他不是关谷神奇,他是王传君。 你看,即使依旧烂片如云,只要还有哪怕极少的人坚持,中国影视也终于还是从中生出了茁壮的根。 我不是药神,治不好这世界。但能改变一点,总归是会好的。
  3. author = 凌睿, date = 2018-06-30 00:00:00, vote = 18304, comment = 别说这是“中国版《达拉斯买家俱乐部》”了,这是中国的真实事件改编的中国电影,是属于我们自己的电影。不知道就去百度一下“陆勇”,他卖印度抗癌药的时候《达拉斯买家俱乐部》还没上映呢。所以别提《达拉斯买家俱乐部》了,只会显得你无知。(别私信我了,我800年前就知道《达拉斯》也是真事改编)
  4. author = 徐若风, date = 2018-06-06 00:00:00, vote = 16426, comment = 放豆瓣语境下,是部时至今日终于拍出来的国产“高分韩国电影”——拿现实题材拍商业类型片,社会性意义摆在那,群戏也处理得相当不错。对我们国家而言,这样的电影多一部是一部,走一步是一步。
  5. author = 桃桃淘电影, date = 2018-06-19 00:00:00, vote = 13337, comment = 最大的病,其实是穷病。真的被感动了,整体都很成熟,也有些许韩片的影子。几个演员表演都非常出色。可看性和内在的表达都不错。这个世界最荒诞在于,越贴近真实,真实越荒诞。人这一生,太不易了。最后,王传君,加油哦!
  6. author = 远世祖, date = 2018-06-30 00:00:00, vote = 9102, comment = 文牧野眼睛太毒了,观众的笑点、泪点、痛点被他牢牢抓住,徐峥现在不拼演技开始掏心炸肺放脱自我了,药物在中国绝对是个“不可说”,但这个电影说了它能说的,也不显山不漏水的说了它所不能说的,讲的是现实,但看过电影之后才会明白其实是超现实,2018最佳!
  7. author = 影志, date = 2018-06-19 00:00:00, vote = 7076, comment = “今后都会越来越好吧,希望这一天早点来”口罩成为符号,不是雾霾,而是人性的仪式,结尾竟然看到《辛德勒名单》一样的救赎。通俗感人,上海电影节首映哭倒一片,基于真实事件改编的社会意义加分,或许《我不是药神》之于中国,就像《摔跤吧爸爸》之于印度吧…能看到就不错。“其实只有一种病:穷病”
  8. author = Noodles, date = 2018-07-03 00:00:00, vote = 6926, comment = 人生建议:别买零食,吃不下的。
  9. author = 哪吒男, date = 2018-06-25 00:00:00, vote = 6211, comment = 最喜欢王传君的表演啊,几乎所有泪点都给他了!!而他曾经的同伴们,下月继续拿《爱情公寓》电影版面对观众。这个圈子里还是有不爱赚快钱的年轻演员,真好。
  10. author = 开开kergelen, date = 2018-07-04 00:00:00, vote = 5549, comment = 小时候路过一家药店,门口的对联写着“只愿世间无疾病,何愁架上药染尘”

15天评论量分布、走势

# 每日评论数,基于此生成日期评论走势图(用Excel生成的 ^_^)
from datetime import datetime

import pymongo
from bson import Code

# http://api.mongodb.com/python/current/
# http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.map_reduce

with pymongo.MongoClient(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'), '\t', int(col['value']))

    # 删除生成的结果集合
    client.douban.mr_results.drop()

15天评论量分布图

15天评论量分布图.png

15天评论量走势图

15天评论量走势图.png

工程源码,欢迎 Star / Fork

© 著作权归作者所有

共有 人打赏支持
一别丶经年
粉丝 25
博文 36
码字总数 56401
作品 0
徐汇
架构师
私信 提问
加载中

评论(9)

一别丶经年
一别丶经年

引用来自“fxnfantasy”的评论

请教一下哈,我在第一步就遇到了问题,ServerSelectionTimeoutError: 192.168.0.105:27017: timed out 这个该怎么破,觉得您后面的东西很有意思,但没想到第一步取数据就遇到问题了
注意Downloader里的消息头部分的cookie是我之前登录用的,你可以删掉(我测试过,不登录也可以获取到信息,当然也只有1000条),或者换成你自己的。
一别丶经年
一别丶经年

引用来自“fxnfantasy”的评论

请教一下哈,我在第一步就遇到了问题,ServerSelectionTimeoutError: 192.168.0.105:27017: timed out 这个该怎么破,觉得您后面的东西很有意思,但没想到第一步取数据就遇到问题了
第一步是指爬虫部分么?
f
fxnfantasy
请教一下哈,我在第一步就遇到了问题,ServerSelectionTimeoutError: 192.168.0.105:27017: timed out 这个该怎么破,觉得您后面的东西很有意思,但没想到第一步取数据就遇到问题了
一别丶经年
一别丶经年

引用来自“lansebolang2008”的评论

文章可以转载到公众号 Python那些事 吗
可以
lansebolang2008
lansebolang2008
文章可以转载到公众号 Python那些事 吗
一别丶经年
一别丶经年

引用来自“了好久富商大贾”的评论

大佬
练手作,见笑
一别丶经年
一别丶经年

引用来自“小马视频”的评论

不错��
谢谢
小马视频
小马视频
不错��
分析豆瓣电影短评《我不是药神》关键词

小爬怡情,中爬伤身,强爬灰灰。爬虫有风险,使用请谨慎,可能是这两天爬豆瓣电影爬多了,今天早上登录的时候提示号被封了(我用自己帐号爬的,是找死呢还是在找死呢 ...),好在后面发完短信...

一别丶经年
07/13
0
0
Python用5000+条数据为你分析《我不是药神》登顶原因!(附代码)

《我不是药神》是由文牧野执导,徐峥、王传君、周一围、谭卓、章宇、杨新鸣等主演的喜剧电影,于 2018 年 7 月 6 日在中国上映。 影片在未上映前,大规模的点映积攒了相当高的人气和口碑, ...

技术小能手
07/11
0
0
用Python来看3天破10亿的《我不是药神》到底神在哪?

影片在未上映前,大规模的点映积攒了相当高的人气和口碑, 截止 7 月 9 日凌晨:豆瓣评分:9.0 分,猫眼:9.7 分,淘票票:9.5 分,时光网:8.8 分 。 为什么我说这三个网站呢,因为我们今天...

51CTO技术栈
07/09
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
07/20
0
0
《我不是药神》30亿票房后分析徐峥的选角眼光

01 前言 前段时间向往的生活第二季中,托尼何老师给山争大叔洗头那一幕,着实给节目赚足了笑点。 而最近徐峥凭借《我不是药神》在电影院也收了不少观众眼泪,在这部电影里面他颠覆了当初囧系...

R语言中文社区
08/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

php获取客户端IP

php获取客户端IP 首先先阅读关于IP真实性安全的文章:如何正確的取得使用者 IP? 「任何從客戶端取得的資料都是不可信任的!」 HTTP_CLIENT_IP头是有的,但未成标准,不一定服务器都实现。 ...

DrChenXX
昨天
0
0
. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom...

west_coast
昨天
1
0
刷leetcode第704题-二分查找

今天双十一买的算法书到货了,路上刷到有人说的这个题,借(chao)鉴(xi)一下别人的思路,这个是C++标准库里面的经典方法,思路精巧,优雅好品味 int search(int* nums, int numsSize, in...

锟斤拷烫烫烫
昨天
3
0
【分享实录】BANCOR算法详解及代码实现

1 活动基本信息 1)主题:【区块链技术工坊22期】BANCOR算法详解及代码实现 2)议题: BANCOR算法的特点和优劣势 BANCOR算法和举例 如何加入BANCOR.NETWORK交易所 如何开发自己的BANCOR去中心...

HiBlock
昨天
2
0
微信小程序(2)

开始看微信小程序的教程了。刚刚看完官方教程的视图层部分。这里摘录一些自己认为的部分关键点。 1.直接修改数值无法重新渲染,需要使用setData()方法; 2.列表渲染中:wx:key用于保持项目在...

MKjy
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部