1. 程式人生 > >使用Python分析《我不是藥神》電影豆瓣評論

使用Python分析《我不是藥神》電影豆瓣評論

小爬怡情,中爬傷身,強爬灰灰。爬蟲有風險,使用請謹慎,可能是這兩天爬豆瓣電影爬多了,今天早上登入的時候提示號被封了(我用自己帳號爬的,是找死呢還是在找死呢 ...),好在後面發完簡訊後又解封了,^_^。

之前的文章中,已把電影短評資料裝進了Mongo中,今天把資料取出來簡單分析一下,當下最火的做法是進行詞頻統計並生成詞雲,今天說的就是這個。

讀取Mongo中的短評資料,進行中文分詞

不知道什麼原因,我實際爬下來的短評資料只有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')

生成詞雲效果

使用Python分析《我不是藥神》電影豆瓣評論

 

看來網上關於 我不是藥神 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 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天評論量分佈圖

使用Python分析《我不是藥神》電影豆瓣評論

 

15天評論量走勢圖

使用Python分析《我不是藥神》電影豆瓣評論