wordcloud安裝參考:下載安裝wordcloud
snownlp安裝參考:下載安裝snownlp
jieba安裝參考:使用碼雲下載Github文件
wordcloud強調python版本,snownlp和jieba不強調版本,我裝的都是python3.6下的。
數據:和鯨社區數據-京東2k條評論
import pandas as pd
data = pd.read_csv('C:/Users/admin/Desktop/新建文件夾/京東評論數據.csv')
data.head(2)
sku_id | _id | item_name | comment_id | content | creation_time | reply_count | score | useful_vote_count | useless_vote_count | ... | user_province | nickname | user_level_name | user_client | user_client_show | is_mobile | days | reference_time | after_days | after_user_comment | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 7534113 | 03b51aa9-2b5e-41c3-a40b-343164a1d23a | comment | 11801751173 | 還可以刷臉解鎖,幫朋友買的,她很滿意 | 2018-08-13 12:24:59 | 0 | 5 | 0 | 0 | ... | NaN | k***0 | PLUS會員 | 2 | 來自京東iPhone客戶端 | 1.0 | 4.0 | 2018-08-09 13:38:15 | 0.0 | NO_MESSAGE |
1 | 7534113 | 03b51aa9-2b5e-41c3-a40b-343164a1d23a | comment | 11525358140 | 第一次買vivo,真心不錯,1498的機子,沒想到照相很清晰,性價比很高,買值了,還送了小音... | 2018-05-27 17:49:17 | 7 | 5 | 19 | 0 | ... | NaN | 呢***吶 | PLUS會員 | 4 | 來自京東Android客戶端 | 1.0 | 5.0 | 2018-05-22 09:32:37 | 0.0 | NO_MESSAGE |
2 rows × 21 columns
data1 = data[['sku_id','content']]
data1.head(10)
sku_id | content | |
---|---|---|
0 | 7534113 | 還可以刷臉解鎖,幫朋友買的,她很滿意 |
1 | 7534113 | 第一次買vivo,真心不錯,1498的機子,沒想到照相很清晰,性價比很高,買值了,還送了小音... |
2 | 7534113 | 手機好用快遞送的快。 |
3 | 8240587 | 手機收到。外觀設計很好!美觀大方。我喜歡!一直使用華爲手機。從榮耀七,榮耀八,榮耀九。反正一... |
4 | 5942439 | 收到了,挺好的,聲音大,電池大,好用發貨速度快,非常滿意,好好好。 |
5 | 5089275 | 本來覺得雙十一還會便宜的,想不到和11月初的價格差不多,想想還是感覺入手了,早買早享受。我的... |
6 | 7081550 | 沒有真正意義上的窄邊框,不過已經不錯了,手機流暢,另外還有51G空間可用,同時試了下近距拍攝... |
7 | 5663902 | 幻夜黑顏色很漂亮,2.5D屏幕,圓潤。2K屏很清晰,驚豔 |
8 | 7283905 | 特地用了一段時間纔來評價,這手機值得這個價錢,打遊戲還行,就是電池很不耐用,攝像頭也很突出,... |
9 | 5001213 | 機器沒得說,價格也合理,雖說仍有不足,但還是比較滿意的,首發就搶到了,暫時發現的不足就是揚聲... |
情感分析
from snownlp import SnowNLP
data1['emotion'] = data1['content'].apply(lambda x:SnowNLP(x).sentiments)
data1.head(10)
E:\Anconda\programfiles\lib\site-packages\ipykernel\__main__.py:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
from ipykernel import kernelapp as app
sku_id | content | emotion | |
---|---|---|---|
0 | 7534113 | 還可以刷臉解鎖,幫朋友買的,她很滿意 | 0.470635 |
1 | 7534113 | 第一次買vivo,真心不錯,1498的機子,沒想到照相很清晰,性價比很高,買值了,還送了小音... | 0.999999 |
2 | 7534113 | 手機好用快遞送的快。 | 0.561609 |
3 | 8240587 | 手機收到。外觀設計很好!美觀大方。我喜歡!一直使用華爲手機。從榮耀七,榮耀八,榮耀九。反正一... | 0.868183 |
4 | 5942439 | 收到了,挺好的,聲音大,電池大,好用發貨速度快,非常滿意,好好好。 | 0.983088 |
5 | 5089275 | 本來覺得雙十一還會便宜的,想不到和11月初的價格差不多,想想還是感覺入手了,早買早享受。我的... | 0.984574 |
6 | 7081550 | 沒有真正意義上的窄邊框,不過已經不錯了,手機流暢,另外還有51G空間可用,同時試了下近距拍攝... | 0.956682 |
7 | 5663902 | 幻夜黑顏色很漂亮,2.5D屏幕,圓潤。2K屏很清晰,驚豔 | 0.999839 |
8 | 7283905 | 特地用了一段時間纔來評價,這手機值得這個價錢,打遊戲還行,就是電池很不耐用,攝像頭也很突出,... | 0.996540 |
9 | 5001213 | 機器沒得說,價格也合理,雖說仍有不足,但還是比較滿意的,首發就搶到了,暫時發現的不足就是揚聲... | 0.992436 |
data1.describe()
sku_id | emotion | |
---|---|---|
count | 3.637000e+03 | 3637.000000 |
mean | 7.936312e+09 | 0.746161 |
std | 1.165137e+10 | 0.354481 |
min | 1.592994e+06 | 0.000000 |
25% | 5.920651e+06 | 0.562240 |
50% | 7.651903e+06 | 0.962449 |
75% | 2.034912e+10 | 0.999123 |
max | 3.032369e+10 | 1.000000 |
emotion平均值爲0.74,中位數爲0.96,25%分位數爲0.56,可見不到25%的數據造成了整體均值的較大下移。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
bins=np.arange(0,1.1,0.1)
plt.hist(data1['emotion'],bins,color='#4F94CD',alpha=0.9)
plt.xlim(0,1)
plt.xlabel('情感分')
plt.ylabel('數量')
plt.title('情感分直方圖')
plt.show()
由直方圖可見,評論內容兩級分化較爲嚴重。
3637條評論中有約2200條評論情感分在[0.9,1]區間內;同時,有約500條評論情感分在[0,0.1]區間內。
from wordcloud import WordCloud
import jieba
w = WordCloud(font_path="msyh.ttc") #font_path="msyh.ttc",設置字體,否則顯示不出來
text = ''
for s in data['content']:
text += s
data_cut = ' '.join(jieba.lcut(text))
w.generate(data_cut)
image = w.to_file('詞雲圖.png')
WordCloud各參數:https://blog.csdn.net/yaochuyi/article/details/80094659
#關鍵詞top10
from jieba import analyse
key_words = jieba.analyse.extract_tags(sentence=text, topK=10, withWeight=True, allowPOS=())
key_words
[('手機', 0.20904023041744998),
('不錯', 0.10491967558213072),
('京東', 0.09431019624843097),
('屏幕', 0.054966423247022445),
('華爲', 0.05061411737589104),
('小米', 0.04731076382922812),
('拍照', 0.04647606302614274),
('非常', 0.044200923839597485),
('手感', 0.04270424332006433),
('感覺', 0.040063432512755605)]
參數說明 :
sentence 需要提取的字符串,必須是str類型,不能是list
topK 提取前多少個關鍵字
withWeight 是否返回每個關鍵詞的權重
allowPOS是允許的提取的詞性,默認爲allowPOS=‘ns’, ‘n’, ‘vn’, ‘v’,提取地名、名詞、動名詞、動詞
積極評論與消極評論
#計算積極評論與消極評論各自的數目
pos = 0
neg = 0
for i in data1['emotion']:
if i >= 0.5:
pos += 1
else:
neg += 1
print('積極評論,消極評論數目分別爲:')
pos,neg
積極評論,消極評論數目分別爲:
(2791, 846)
# 積極評論佔比
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
pie_labels='postive','negative'
plt.pie([pos,neg],labels=pie_labels,autopct='%1.1f%%',shadow=True)
plt.show()
#獲取消極評論數據
data2=data1[data1['emotion']<0.5]
data2.head(10)
sku_id | content | emotion | |
---|---|---|---|
0 | 7534113 | 還可以刷臉解鎖,幫朋友買的,她很滿意 | 0.470635 |
13 | 5942439 | 收到貨,聲音很大,功能也多,適合老人用,就是重量有點重, | 0.461794 |
17 | 7283905 | 27號下的單,今天收到1星期內,座標河南商丘,手機是武漢倉過來的。充電頭是5V2A的 不支持... | 0.001627 |
18 | 5001213 | 今天剛收到!\n看到京東的快遞包裝盒,我內心是一羣奔騰而過的!幾千塊錢的物品包裝,沒有防壓提... | 0.495955 |
22 | 5942439 | 用着目前還可以,就是不知道可以用多久。希望久一些吧。 | 0.239150 |
32 | 5001213 | 第一批搶到,兩天後才收到,機器沒一代驚豔,邊框略粗,全面屏?解決了通話,迴歸正常手機行列!!... | 0.444317 |
35 | 8240587 | 總體來說,顏值非常高,很好看,雖然說是後置指紋,但是後背看起來還是挺不錯的。用起來整體體驗還... | 0.000012 |
44 | 3901175 | 手機還可以,就剛開始把卡放進去的時候不顯示卡,過了第二天才顯示出來,耳機也沒有,還有就是怎麼... | 0.005839 |
48 | 7534113 | 像素不行,反正買都買了用都用了總體來說還行吧不討厭也不喜歡一般般,暫時沒有什麼問題 | 0.499447 |
51 | 5089275 | 總之還是挺好的,挺不錯、雖然沒有什麼優惠吧,搶了個神券還不能用!!!也是用的上了第三個蘋果、... | 0.457264 |
#消極評論詞雲圖
text2 = ''
for s in data2['content']:
text2 += s
data_cut2 = ' '.join(jieba.lcut(text2))
w.generate(data_cut2)
image = w.to_file('消極評論詞雲.png')
#消極評論關鍵詞top10
key_words = jieba.analyse.extract_tags(sentence=text2, topK=10, withWeight=True, allowPOS=())
key_words
[('手機', 0.19237764869875004),
('京東', 0.08930157104159077),
('未填寫', 0.08087213276666493),
('評價', 0.06602737843353074),
('屏幕', 0.05285184715212572),
('快遞', 0.050103021155518554),
('用戶', 0.05005720904465942),
('充電', 0.04605195695403029),
('收到', 0.038929704221495554),
('沒有', 0.03758001077768642)]
消極評論關鍵詞顯示,“屏幕”“快遞”“充電”是造成用戶體驗不佳的幾個重要因素,屏幕和充電問題有可能是手機不良品率過高或快遞壓迫。
因此平臺應注重提高手機品控,降低不良品率,另外應設法提升發貨,派送,派件的效率和質量。
本文使用jieba,snownlp,wordcloud,matplotlib等模塊對文本數據進行了簡要的情感分析及可視化,旨在瞭解用戶使用體驗,以此改進對平臺運營提出優化建議。