利用python實現(xiàn)簡單的情感分析實例教程
python實現(xiàn)簡單的情感分析
1 數(shù)據(jù)導(dǎo)入及預(yù)處理
1.1 數(shù)據(jù)導(dǎo)入
# 數(shù)據(jù)導(dǎo)入 import pandas as pd data = pd.read_csv('../data/京東評論數(shù)據(jù).csv') data.head()
1.2 數(shù)據(jù)描述
# 數(shù)據(jù)描述 data.describe()
1.3 數(shù)據(jù)預(yù)處理
# 數(shù)據(jù)預(yù)處理 # 取出sku_Id,content字段 data1 = data[['sku_id', 'content']] data1.head(10)
2 情感分析
2.1 情感分
# 情感分析 from snownlp import SnowNLP data1['emotion'] = data1['content'].apply(lambda x: SnowNLP(x).sentiments) data1.head()
# 情感數(shù)據(jù)描述 data1.describe()
emotion平均值為0.74,中位數(shù)為0.96,25%分位數(shù)為0.56,可見不到25%的數(shù)據(jù)造成了整體均值的較大下移。
2.2 情感分直方圖
# 繪制情感分直方圖 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('數(shù)量') plt.title('情感分直方圖') plt.show()
由直方圖可見,評論內(nèi)容兩級分化較為嚴(yán)重;
3637條評論中有約2200條評論情感分在[0.9,1]區(qū)間內(nèi);同時,有約500條評論情感分在[0,0.1]區(qū)間內(nèi)。
2.3 詞云圖
# 繪制詞云圖(這兒沒有做停用詞處理) from wordcloud import WordCloud import jieba myfont = myfont = r'C:\Windows\Fonts\simhei.ttf' w = WordCloud(font_path=myfont) text = '' for i in data['content']: text += i data_cut = ' '.join(jieba.lcut(text)) w.generate(data_cut) image = w.to_file('詞云圖.png') image
2.4 關(guān)鍵詞提取
# 關(guān)鍵詞提取top10 # 這兒直接寫import jieba運行會顯示沒有analyse屬性 from jieba import analyse key_words = jieba.analyse.extract_tags(sentence=text, topK=10, withWeight=True, allowPOS=()) key_words
以上關(guān)鍵詞顯示,消費者比較在意手機的“屏幕”“拍照”“手感”等特性,“華為”“小米”是出現(xiàn)頻次最高的兩個手機品牌。
參數(shù)說明 :
- sentence 需要提取的字符串,必須是str類型,不能是list
- topK 提取前多少個關(guān)鍵字
- withWeight 是否返回每個關(guān)鍵詞的權(quán)重
- allowPOS是允許的提取的詞性,默認為allowPOS=‘ns’, ‘n’, ‘vn’, ‘v’,提取地名、名詞、動名詞、動詞
3 積極評論與消極評論
3.1 積極評論與消極評論占比
# 計算積極評論與消極評論各自的數(shù)目 pos, neg = 0, 0 for i in data1['emotion']: if i >= 0.5: pos += 1 else: neg += 1 print('積極評論數(shù)目為:', pos, '\n消極評論數(shù)目為:', neg)
# 積極消極評論占比 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False pie_labels = 'positive', 'negative' plt.pie([pos, neg], labels=pie_labels, autopct='%1.2f%%', shadow=True) plt.show()
3.2 消極評論分析
# 獲取消極評論的數(shù)據(jù) data2 = data1[data1['emotion'] < 0.5] data2.head()
#消極評論詞云圖(這兒沒有做停用詞處理) text2 = '' for s in data2['content']: text2 += s data_cut2 = ' '.join(jieba.lcut(text2)) w.generate(data_cut2) image = w.to_file('消極評論詞云.png') image
#消極評論關(guān)鍵詞top10 key_words = jieba.analyse.extract_tags(sentence=text2, topK=10, withWeight=True, allowPOS=()) key_words
消極評論關(guān)鍵詞顯示,“屏幕”“快遞”“充電”是造成用戶體驗不佳的幾個重要因素;屏幕和充電問題有可能是手機不良品率過高或快遞壓迫;
因此平臺應(yīng)注重提高手機品控,降低不良品率;另外應(yīng)設(shè)法提升發(fā)貨,配送,派件的效率和質(zhì)量。
總結(jié)
到此這篇關(guān)于利用python實現(xiàn)簡單的情感分析的文章就介紹到這了,更多相關(guān)python情感分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Python 序列化Serialize 和 反序列化Deserialize
這篇文章主要介紹了詳解Python 序列化Serialize 和 反序列化Deserialize的相關(guān)資料,序列化是將對象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^程。與序列化相對的是反序列化,它將流轉(zhuǎn)換為對象。這兩個過程結(jié)合起來,可以輕松地存儲和傳輸數(shù)據(jù),需要的朋友可以參考下2017-08-08python flask框架實現(xiàn)傳數(shù)據(jù)到j(luò)s的方法分析
這篇文章主要介紹了python flask框架實現(xiàn)傳數(shù)據(jù)到j(luò)s的方法,結(jié)合實例形式分析了前端數(shù)據(jù)序列化及后臺Flask交互數(shù)據(jù)返回相關(guān)操作技巧,需要的朋友可以參考下2019-06-06python reverse反轉(zhuǎn)部分數(shù)組的實例
今天小編就為大家分享一篇python reverse反轉(zhuǎn)部分數(shù)組的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12python之openpyxl模塊的安裝和基本用法(excel管理)
這篇文章主要給大家介紹了關(guān)于python之openpyxl模塊的安裝和基本用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02