痛點
妳是壹家連鎖火鍋店的區域經理,妳很註重顧客對餐廳的評價。曾幾何時,困擾妳的是客戶不喜歡寫評論。最近因為餐廳火了,分店越來越多,寫評論的顧客越來越多,於是妳新的痛苦來了——評論太多,看不完。
從我這裏,妳了解到了簡單易用的情緒分析自動化工具,突然覺得看到了曙光。
妳從某知名評論網站找到自己某個分支的頁面,讓助理把評論和發布時間數據弄下來。因為助手不會用爬蟲,所以只能把網頁上的評論復制粘貼到Excel中。下班的時候才27。(註意,我們這裏用的是真實的綜述數據。為了避免給評論的商家帶來麻煩,餐廳名稱改為“A餐廳”。特此說明。)
幸好妳只是想做個實驗,那就順其自然吧。妳用我之前介紹的中文信息情感分析工具,依次得出每條評論的情感值。剛出結果的時候,妳很興奮,覺得自己找到了輿情分析的終極武器。
但是美好的時光總是短暫的。妳很快就會發現,如果對每條評論單獨運行程序,用機器分析,真的是壹條壹條看的好。
我們做什麽呢
順序
自然有辦法。我們可以用貸款也可以不用貸款:如何用Python和機器學習幫妳做決策?本文介紹的數據框架,壹次處理多個數據,提高了效率。
但這還不夠,我們還可以把情緒分析的結果在時間序列上可視化。所以妳壹眼就能看出趨勢——最近幾天,人們是對餐廳更滿意了,還是越來越不滿意了?
我們人類最擅長處理的是圖像。因為漫長的進化史迫使我們不斷提高快速準確處理圖像的能力,否則就會被環境淘汰。所以有“壹圖勝千言”的說法。
準備
首先,您需要安裝Anaconda包。詳細的流程步驟請參考文章《如何使用Python制作單詞雲》。
助手硬做的Excel文件restaurant-comments.xlsx,請從這裏下載。
在Excel中打開它。如果壹切正常,請將文件移動到我們的工作目錄演示。
因為這個例子需要分析中文評論,所以用的軟件包是SnowNLP。情感分析的基本應用方法請參考如何用Python做情感分析。》。
轉到您的系統“終端”(macOS,Linux)或“命令提示符”(Windows),進入我們的工作目錄演示,並執行以下命令。
安裝snownlp
pip安裝ggplot
運行環境已配置。
在終端或命令提示符下,鍵入:
jupyter筆記本
如果Jupyter Notebook運行正常,我們現在就可以開始寫代碼了。
密碼
我們在Jupyter Notebook中創建了壹個新的Python 2筆記本,命名為time-series。
首先介紹數據幀分析工具Pandas,為方便調用,簡稱pd。
進口熊貓作為pd
然後,讀取Excel數據文件:
df = pd.read_excel("餐廳-評論. xlsx ")
我們來看看閱讀內容是否完整:
df.head()
結果如下:
註意這裏的時間線。如果妳的Excel文件中的時間格式和這裏的壹樣,包括日期和時間,那麽熊貓會很聰明的幫妳識別為時間格式,然後勇往直前的去做。
另壹方面,如果妳得到的時間只是精確到日期,比如“2017-04-20”,那麽熊貓只會把它當成壹個字符串,字符串數據無法用於後面的時間序列分析。解決方案是在這裏添加下面兩行代碼:
從dateutil導入解析器
df[" date "]= df . date . apply(parser . parse)
這樣,妳就獲得了正確的時間數據。
在確認數據完整無誤後,我們需要進行情緒分析。讓我們用第壹行的註釋做壹個小實驗。
text = df.comments.iloc[0]
然後我們調用SnowNLP情感分析工具。
從snownlp導入SnowNLP
s = SnowNLP(文本)
顯示SnowNLP的分析結果:
美國情緒
結果如下:
0.6331975099099649
情緒分析值可以正確計算。在此基礎上,我們需要定義函數來批量處理所有的評論。
def get _情操_cn(文本):
s = SnowNLP(text)返回s的情緒
然後,我們利用Python中強大的apply語句壹次性處理所有評論,將生成的情感值作為壹列存儲在數據框中,這就是所謂的情感。
df["情操"]= df . comments . apply(get _情操_cn)
我們來看看情緒分析的結果:
df.head()
已經生成了新的列情緒。我們之前提到過,SnowNLP的結果範圍在0到1之間,代表情緒分析結果為正的可能性。通過觀察前幾個數據,我們發現在點評網站上,客戶對這家分店的評價普遍是正面的,有的評價非常正面。
但是,對少量數據的觀察可能會導致我們的結論有偏差。我們來平均壹下所有的情緒分析結果。只需使用mean()函數。
df .情操.均值()
結果如下:
0.7114015318571119
結果數值超過0.7,顧客對這家店的整體態度是正面的。
我們再來看看中值,用的函數是median()。
df . opinion . median()
結果如下:
0.9563139038622388
我們發現了壹個有趣的現象——中值不僅高於平均值,而且幾乎接近1(完全正)。
這意味著絕大多數評論是壓倒性滿意的。但是,有幾個異常點,這顯著降低了平均值。
讓我們利用情緒的時間序列可視化功能,直觀地看到這些異常何時出現,其值有多低。
我們需要使用ggplot繪圖工具包。這個工具包最初只是用R語言提供的,這讓其他數據分析工具的用戶羨慕得流口水。幸運的是,它很快被移植到Python平臺上。
我們從ggplot引入繪圖功能,讓Jupyter筆記本直接顯示圖像。
ggplot導入的% pylab inlinefrom
這裏可能會有壹些警告信息。沒關系,無視就好。
讓我們畫壹個圖表。您可以在這裏輸入下面壹行。
ggplot(aes(x=“日期”,y=“情緒”),data = df)+geom _ point()+geom _ line(color =“藍色”)+scale _ x _ date(labels = date _ format(" % Y-% m-% d "))
可以看到ggplot的繪圖語法是多麽的簡潔和人性化。妳只需要告訴Python妳打算用哪個數據框,選擇哪個列作為橫軸,哪個列作為縱軸,先畫點,再連線,就可以指定線的顏色了。那麽,您希望X軸上的日期以什麽格式顯示呢?所有的參數設置都類似於自然語言,直觀易懂。
執行後,您可以看到結果圖。
圖中我們發現很多正面評論的情感分析值都極高。同時我們也清楚的發現了那些數值極低的點。對應評論的情感分析值接近0。這些評論被Python判斷為基本沒有正面感受。
從時間上來說,最近幾天,幾乎每隔幾天就會有壹次嚴重的負面評價。
作為經理,妳可能如坐針氈。我希望盡快知道發生了什麽。不用在數據框或者Excel文件裏翻找情感值最低的評論。Python數據框Pandas為妳提供了壹個非常好的排序功能。假設妳想在所有評論中找出情緒分析值最低的壹條,可以這樣做:
df.sort(['情操'])[:1]
結果如下:
情感分析的結果幾乎是0!但是,此處數據框中顯示的註釋信息不完整。我們需要把評論作為壹個整體打印出來。
print(df . sort([' perspective '])。iloc[0]。評論)
評論的完整信息如下:
這次是情人節過的,以前從來沒在情人節出去過。不是因為沒有男朋友,而是感覺人多,所以特意錯開了。這次是真的饞到A餐廳了,所以當天也出來了。從下午4點開始,我看到排隊人數超過100人。如果要從家裏開車壹個小時,我會提前兩個小時在網上排隊,都快六點了。到了那裏,我看到號碼前面只有30多壹點。我以為沒問題。我可以晚點再吃。沒想到,悲劇了。從我們到那裏的時候,我們坐在等候區,它是大約10: 20。中間多次想離開。哈哈,唉,早上九點才吃。服務員感覺沒以前周到了,但是壹個人管幾桌是肯定的。今天的假期真好。所以大部分都是我自己跑腿,就讓服務員把蝦端上來,沒拿太多,然後環境感覺衛生方面還不錯,就是有點太吵了,味道還是和以前壹樣,但是A餐廳最人性化的就是等了兩個多小時,給我們發了優惠卡,每次都可以用。這種感覺還是挺好的。是餐廳,但比平時更人性化。
通過閱讀,妳可以發現這位客戶真的有過不好的經歷——等了這麽久,他用了“悲劇”這個詞;另外服務不夠周到,環境嘈雜。正是這些詞的出現,使得分析結果很低。
好在顧客都很通情達理,對分店的人性化做法給予了積極評價。
從這個例子可以看出,雖然情感分析可以幫助妳自動處理很多內容,但是不能完全依賴它。
自然語言的分析不僅要看表達強烈感情的關鍵詞,還要考慮表達方式、語境等多種因素。這些內容是自然語言處理領域的研究前沿。我們期待盡快將其應用到科學家的研究成果中,提高情感分析的準確性。
然而,即使目前情感分析的自動化處理不能非常準確,它仍然可以幫助妳快速定位那些可能存在問題的異常。從效率上來說,遠高於人工處理。
看完這條評論妳松了壹口氣。總結經驗教訓後,妳決定將人性化服務進行到底。妳也想到了可以收集用戶的等待時間數據,利用數據分析為等待用餐的顧客提供更合理的等待時間預期。這將避免客戶等到很晚。
恭喜妳,經理!在數據智能時代,妳走對了方向。
接下來,妳要仔細閱讀下壹條負面評論...
討論
除了情感分析和時間序列可視化,妳認為中文評論信息如何挖掘?除了評論網站,妳還知道哪些輿情分析的數據來源?歡迎把妳的留言分享給大家,大家壹起交流探討。
如果妳對我的文章感興趣,請點贊,微信關註並置頂我的微信官方賬號“nkwangshuyi”。
如果妳身邊有做輿情分析研究的朋友,歡迎妳把這篇文章轉發給他們,共同學習提高。