手把手教你完成一個數據科學小項目(9):情感分析與詞雲

前言

請先閱讀“中國年輕人正帶領國家走向危機”,這鍋背是不背? 一文,以對“手把手教你完成一個數據科學小項目”系列有個全局性的瞭解。

本系列代碼統一開源在GitHub:DesertsX/gulius-projects ,感興趣的朋友可以先行 star 哈。

截至目前我們已經完成了數據爬取數據提取與IP查詢數據異常與清洗評論數變化情況分析省份提取與可視化城市提取與可視化經緯度獲取與BDP可視化Emoji提取與分佈圖譜。本文將用snownlp對評論進行情感打分,並提取高頻詞繪製詞雲。

SnowNLP 情感打分

讀取數據,並提前安裝好這個NLP的庫:pip install snownlp 。其他用法參見:snownlp - github ,本文只對每條評論數據進行情感打分。

import pandas as pd
from snownlp import SnowNLP
df = pd.read_csv('Sina_Finance_Comments_All_20180811_Cleaned.csv',encoding='utf-8')

def sentiment(content):
    s = SnowNLP(content)
    return s.sentiments

df['sentiment'] = df.content.apply(sentiment)

df_sent = df[['content', 'sentiment']]
df_sent.sort_values(by=['sentiment'],ascending=False)

注意,snownlp 是基於電商評價的語料語料,所以對其他語料進行情感打分可能效果不是很好,可自行嘗試其他庫pyltp/thunlp/pyhanlp/bosonnlp進行比較,“擇其善者而從之”...

如果評論數據量大的話,這一步會耗些時間,可以喝杯枸杞酒壓壓驚。

先來看看正面的評價,評分處於0-1之間,越接近1越正面:


再來看看負面的評論

df_sent.sort_values(by=['sentiment'])

本次就不進行更細緻的挖掘了,大家可自行進行探索,相信經過這一個系列的洗禮,諸位pandas操作起來已經滾瓜切菜,不在話下了吧。

基於 TF-IDF 算法的關鍵詞抽取

接下來看看評論裏出現的關鍵詞都有哪些,直接用jieba提取就行,allowPOS參數可設置輸出對應詞性的詞語。

import jieba.analyse
all_content = df.content.values.tolist()
extract_tags = "  ".join(jieba.analyse.extract_tags(' '.join(all_content), topK=200, withWeight=False, allowPOS=('ns', 'n')))
print(extract_tags)

自行感受一下......大家反應強烈,並不願背鍋。

年輕人  買房  攤手  借貸  房子  貸款  國家  韭菜  危機  文章  孩子  債務  房價  中國  標題  手機  買手機  評論  背鍋  不語  拜拜  信用卡  大牌  衣服  父母  咖啡  買房子  銀行  經濟  篇文章  感覺  問題  智能手機  大家 
全款  意思  時候  媒體  內需  社會  俄羅斯  黑鍋  一代人  東西  大鍋  原文  臥槽  家庭  美國  槓桿  套房  有點  財經  租房  年輕一代  校園  新聞  邏輯  腦子  負債  花錢  磚家  消費觀念  白條  地方  蘋果  噁心  幹嘛  人家   
能力  道理  智商  屌絲  毛病  信貸  水平  城市  老年人  習慣  奢侈品  數據  錢包  生娃  小編  廣州  作者  祖國  節奏  英國  老一輩  中年人  關鍵  無力  言論  內容  車貸  壓力  學區  生小孩  陰險  人生  物價  時代  歷史 
買點  垃圾  窮人  老師  存款  利息  問問  屁事  消費觀  消費主義  世界  北京  責任  後背  大學生  代表  結果  神經病  國際金融  氣死  租金  合格  降級  長大  編輯  買車  故事  眼球  企業  貢獻  車子  黑線  風險  單身   
高利貸  褲腰帶  同齡人  兄弟  爺爺奶奶  奶茶  月薪  專家  壞事  狗屁  過日子  要點  事情  縣城  白眼  獨生子女  基本  爸爸  課本上  博主  沙雕  辣雞  背鍋俠  次貸  玩玩  負債率  重點  人民  報章  過度   
拖後腿  帽子  醫療  政府  價格  小鳥  老人  外國  玩樂  價值觀  螞蟻  代人  回家   通篇  創業  經濟學  交稅  公積金  結論  領路人  時間  丈母孃  小時候  啥意思  樣子  馬車  咖啡館  身體  房奴  全部  天將  思想

詞雲

這一步繁瑣了,大家有簡潔的代碼可替換掉。

import jieba
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

all_content = df.content.values.tolist()
print(len(all_content), '\n', all_content[-1])

segment = []
for line in all_content:
    try:
        segs = jieba.lcut(line)
        for seg in segs:
            if len(seg)>1 and seg != '\r\n':
                segment.append(seg)
    except:
        print(line)
        continue
# 去停用詞
words_df = pd.DataFrame({"segment": segment})

words_stat = words_df.groupby(by=['segment'])['segment'].agg({"計數": np.size})
words_stat = words_stat.reset_index().sort_values(by=["計數"], ascending=False)
words_stat.head(20)

高頻詞如下所示,和上面提取的關鍵詞很多重合:


老朋友pyecharts輕鬆繪製顏值不俗的詞雲:

from pyecharts import WordCloud
wordcloud = WordCloud(width=800, height=520)
wordcloud.add("評論詞雲", words_stat['segment'], words_stat['計數'], word_size_range=[20, 100])
wordcloud

輿論情況如下:


評論內容詳情

最後再提下,用pandas讀取的數據,無法看到每條評論的全部內容,不太清楚有沒有參數可以設置查看全部文本。

這裏自行查看長度在50-100區間內的全部評論數據:

import pandas as pd
df = pd.read_csv('Sina_Finance_Comments_All_20180811_toBDP.csv',encoding='utf-8')
df_wa = df[['No','nick','content','length','area','pro','city','emojis_list','time','stamp']]
cont_50_100 = df_wa_len[(df_wa_len['length']<100) & (df_wa_len['length']>=50)]['content'].values.tolist()
for c in cont_50_100:
    print(c,'\n')

完結撒花

以上算是更新完了本項目的全部內容,不算長也不算短的旅程裏,耳聞目睹了不少小夥伴去DesertsX/gulius-projects - GitHub下載了代碼,並跟着跑程序,古柳也很好奇大家的感受如何,歡迎留言評論進行反饋和分享哈。

此外,古柳也相信大家已經能夠應用到自己感興趣的數據集上並進行好玩的分析、挖掘和可視化了,期待大家分享自己的作品哈。

這裏先劇透下古柳想玩的一些玩意,以之前熱播的於正的清宮劇《延禧攻略》爲例,可以用MIT的深度學習訓練後的接口進行城市街景識別,看看下圖“大豬蹄子”皇上的場景是什麼?



誠不我欺,給出的結果還是挺可靠的:

Type of environment: outdoor
Scene categories: temple/asia (0.778)
Scene attributes: man-made, open area, natural light, sunny, touring, clouds, shingles, far-away horizon, semi-enclosed area

再用偶然接觸到的某知識圖譜API看看與實體“延禧攻略”相關的內容:



由於原本數據來源就是豆瓣等平臺,所以還是蠻準確的,能深挖的內容也很多,比如古柳腦洞清奇的把這個知識圖譜API用來當獲取豆瓣數據的“爬蟲”接口了。逃......以上,這裏先賣個關子,後續揭祕這兩個好玩的網站哈。

相關文章

本系列及後續其他項目的代碼統一開源在GitHub:DesertsX/gulius-projects ,感興趣的朋友可以先行 star 哈。

本系列文章:
“中國年輕人正帶領國家走向危機”,這鍋背是不背?
手把手教你完成一個數據科學小項目(1):數據爬取
手把手教你完成一個數據科學小項目(2):數據提取、IP 查詢
手把手教你完成一個數據科學小項目(3):數據異常與清洗
手把手教你完成一個數據科學小項目(4):評論數變化情況
手把手教你完成一個數據科學小項目(5):省份提取與可視化
手把手教你完成一個數據科學小項目(6):城市提取與可視化
手把手教你完成一個數據科學小項目(7):經緯度獲取與BDP可視化
手把手教你完成一個數據科學小項目(8):Emoji提取與分佈圖譜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章