隨着網上購物愈來愈流行,人們對於網上購物的需求變得愈來愈高,這讓京東,淘寶等電商平臺獲得了很大的發展機遇。可是,這種需求也推進了更多的電商平臺的發展,引起了激烈的競爭。在這種電商平臺激烈競爭的大背景下,除了提升商品質量,壓低商品價格外,瞭解更多的消費者心聲對於電商平臺來講也愈來愈重要。其中很是重要的一種方式就是針對消費者的文本評論數據進行內在信息的數據挖掘分析。而獲得這些信息,也有利於對應商品的生產自身競爭力的提升。前端
#-*- coding: utf-8 -*-
import pandas as pd
inputfile = 'huizong.csv' #評論彙總文件
outputfile = 'meidi_jd.txt' #評論提取後保存路徑
data = pd.read_csv(inputfile, encoding = 'utf-8')
data.head()
複製代碼
data['品牌'].unique()
複製代碼
結果:array(['AO', '海爾', '美的', '格蘭仕', '萬和', '萬家樂'], dtype=object)
咱們發現這一份數據中有AO、海爾、美的、格蘭仕、萬和、萬家樂共6個品牌,咱們這裏只對‘美的’品牌的文本評論數據進行分析。python
# 這裏咱們只提取」美的「品牌的評論
import os
import importlib
import sys
importlib.reload (sys)
# 默認編碼
sys.getdefaultencoding() # 查看當前編碼格式
data = data[[u'評論']][data[u'品牌'] == u'美的']
# 把數據保存爲csv文件
data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8')
outdata_1 = pd.read_csv(outputfile, encoding = 'utf-8', header = None)
outdata_1.head()
複製代碼
取到文本後,首先要進行文本評論數據的預處理,文本評論數據中存在大量價值含量很低甚至沒有價值含量的條目,若是將這些評論也引入進行分詞,詞頻統計,甚至情感分析,必然對分析形成很大的影響,獲得的結果質量也必然存在問題。那麼,在利用這些評論數據以前就必須對這些文本進行預處理,把大量的此類無價值含量的評論去除。git
文本去重就是去除文本評論數據中重複的部分,一些電商平臺爲了不一些客戶長時間不進行評論,每每設置一道程序,若是用戶超過規定的時間仍然沒有作出評論,系統就會自動代替客戶作出評論,每每這些評論大都是好評。可是,這些評論顯然沒有任何分析價值,並且,這些評論是大量重複出現的,必須去除。github
outputfile = 'meidi_jd_process_1.txt' #評論處理後保存路徑
l1 = len(outdata_1)
data_unique = pd.DataFrame(outdata_1[0].unique())
l2 = len(data_unique)
data.to_csv(outputfile, index = False, header = False, encoding = 'utf-8')
print(u'共%s條評論,刪除了%s條評論。' %(l1,l1 - l2))
複製代碼
結果:共55400條評論,刪除了2352條評論。
咱們使用 value_counts 函數統計重複的評論,能夠獲得重複評論文本的重複數量,數量最大的評論文本多是系統默認評論。app
series_data = pd.Series(outdata_1[0])
fre_data = pd.DataFrame(series_data.value_counts())
fre_data.head(20)
複製代碼
這裏咱們僅僅打印出來前20行,能夠看出 「很是滿意,五星」出現頻率最高,一共出現 107 次,它應該是系統默認評論。而「長度在5-200個字之間 填寫您對此商品的使用心得,例如該商品或某功能爲您帶來的幫助,或使用過程當中遇到的問題等。最多可輸入200字」一共出現75次,是默認評論數第二大的,這應該也是系統提示評論或者用戶直接使用系統提示進行評論。機器學習
在中文中只有字,句和段落可以經過明顯的分界符進行簡單的劃界,而對於」詞「與」詞組「來講,它們的邊界模糊,沒有一個形式上的分界符。所以,在進行中文文本挖掘時,首先對文本進行分詞,即將連續的字序列按照必定的規範進行從新組合成詞序列的過程。這裏咱們使用 jieba 分詞器。函數
import jieba #導入結巴分詞,須要自行下載安裝
inputfile1 = 'meidi_jd_neg.txt'
inputfile2 = 'meidi_jd_pos.txt'
outputfile1 = 'meidi_jd_neg_cut.txt'
outputfile2 = 'meidi_jd_pos_cut.txt'
data1 = pd.read_csv(inputfile1, encoding = 'utf-8', header = None) #讀入數據
data2 = pd.read_csv(inputfile2, encoding = 'utf-8', header = None)
mycut = lambda s: ' '.join(jieba.cut(s)) #自定義簡單分詞函數
data1 = data1[0].apply(mycut) #經過「廣播」形式分詞,加快速度。
data2 = data2[0].apply(mycut)
data1.to_csv(outputfile1, index = False, header = False, encoding = 'utf-8') #保存結果
data2.to_csv(outputfile2, index = False, header = False, encoding = 'utf-8')
data1.head()
複製代碼
停用詞(Stop Words) ,詞典譯爲「電腦檢索中的虛字、非檢索用字」。在SEO中,爲節省存儲空間和提升搜索效率,搜索引擎在索引頁面或處理搜索請求時會自動忽略某些字或詞,這些字或詞即被稱爲Stop Words(停用詞)。在天然語言處理中,停用詞通常不攜帶有價值的信息,咱們選擇去除掉這些詞。學習
import os
import sys
sys.getdefaultencoding() # 查看當前編碼格式
import importlib
importlib.reload(sys)
stoplist = 'stoplist.txt'
neg = pd.read_csv(outputfile1, encoding = 'utf-8', header = None) #讀入數據
pos = pd.read_csv(outputfile2, encoding = 'utf-8', header = None)
stop = pd.read_csv(stoplist, encoding = 'utf-8', header = None, sep = 'tipdm')
#sep設置分割詞,因爲csv默認以半角逗號爲分割詞,而該詞剛好在停用詞表中,所以會致使讀取出錯
#因此解決辦法是手動設置一個不存在的分割詞,如tipdm。
stop = [' ', ''] + list(stop[0]) #Pandas自動過濾了空格符,這裏手動添加
neg[1] = neg[0].apply(lambda s: s.split(' ')) #定義一個分割函數,而後用apply廣播
neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop]) #逐詞判斷是否停用詞
pos[1] = pos[0].apply(lambda s: s.split(' '))
pos[2] = pos[1].apply(lambda x: [i for i in x if i not in stop])
neg.head()
複製代碼
主題模型在機器學習和天然語言處理等領域是用來在一系列文檔中發現抽象主題的一種的統計模型。對於一篇文檔,若是它有多個主題,則這些特定的可表明不一樣主題的詞語反覆出現,此時,運用主題模型,可以發現文本中使用詞語的規律,而且規律類似的文本聯繫到一塊兒,以尋求非結構化的文本集中的有用信息。LDA 模型做爲其中的一種主題模型,屬於無監督的生成式主題機率模型。大數據
# 沒有安裝 gensim ,能夠試用 !pip install gensim 進行安裝
from gensim import corpora, models
#負面主題分析
neg_dict = corpora.Dictionary(neg[2]) #創建詞典
neg_corpus = [neg_dict.doc2bow(i) for i in neg[2]] #創建語料庫
neg_lda = models.LdaModel(neg_corpus, num_topics = 3, id2word = neg_dict) #LDA模型訓練
#正面主題分析
pos_dict = corpora.Dictionary(pos[2])
pos_corpus = [pos_dict.doc2bow(i) for i in pos[2]]
pos_lda = models.LdaModel(pos_corpus, num_topics = 3, id2word = pos_dict)
複製代碼
pos_theme = pos_lda.show_topics()#展現主題
pos_theme
複製代碼
import re
# 匹配中文字符
pattern = re.compile(r'[\u4e00-\u9fa5]+')
# 主題一的特徵詞
pattern.findall(pos_theme[0][1])
複製代碼
而後取得每一個主題的特徵詞並轉換爲 DataFrame 格式網站
# 取得每一個主題的特徵詞
pos_key_words=[]
for i in range(3):
pos_key_words.append(pattern.findall(pos_theme[i][1]))
複製代碼
# 變成 DataFrame 格式
pos_key_words = pd.DataFrame(data=pos_key_words,index=['主題1',"主題2","主題3"])
pos_key_words
複製代碼
本文針對京東商城上「美的」品牌的熱水器的消費者的文本評論數據進行建模,在對文本進行基本的預處理、中文分詞、停用詞過濾後,經過創建 LDA 主題模型的數據挖掘模型,實現對文本評論數據的傾向性判斷以及將關於主題的高頻特徵詞以 DataFrame 格式呈現。
你們能夠在項目源碼地址 fork 這個項目 momodel.cn/explore/5d3…
參考資料:
github.com/goto456/sto…
github.com/fxsjy/jieba
Mo(網址:momodel.cn)是一個支持 Python 的人工智能在線建模平臺,能幫助你快速開發、訓練並部署模型。
Mo 人工智能俱樂部 是由網站的研發與產品設計團隊發起、致力於下降人工智能開發與使用門檻的俱樂部。團隊具有大數據處理分析、可視化與數據建模經驗,已承擔多領域智能項目,具有從底層到前端的全線設計開發能力。主要研究方向爲大數據管理分析與人工智能技術,並以此來促進數據驅動的科學研究。
目前俱樂部每週六在杭州舉辦以機器學習爲主題的線下技術沙龍活動,不按期進行論文分享與學術交流。但願能匯聚來自各行各業對人工智能感興趣的朋友,不斷交流共同成長,推進人工智能民主化、應用普及化。