手把手教你完成一個資料科學小專案(9):情感分析與詞雲

古柳_Deserts_X發表於2019-02-24

前言

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

本系列程式碼統一開源在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提取與分佈圖譜


歡迎關注公眾號:“牛衣古柳”(ID:Deserts-X)


相關文章