天天看點

怎麼用python電商文本挖掘?(5)11 輿情分析

以驅蟲市場資料為例,挖掘某店鋪新的業務方向和市場增長點。

聯系微信sinoleadgolf

接上一節(4) 接下來看市場的輿情情況分析。

11 輿情分析

讀資料:

定義檔案路徑
os.chdir('..')
os.chdir('./評論輿情資料')
用glob把裡面檔案名都拿到 并指派給filenames5
filenames5 = glob.glob('*.xlsx')
filenames5
讀取其中的bai的資料
df6bai = pd.read_excel(filenames5[1])
df6bai.head(3)
           
怎麼用python電商文本挖掘?(5)11 輿情分析

抽評論 洗資料:

df6bai['評論'].head()
轉換為清單為後邊處理文本使用
bai6 = list(df6bai['評論'])
           
怎麼用python電商文本挖掘?(5)11 輿情分析

接下來要把這些資料洗幹淨,然後再做 詞雲啊 dtm啊 看需要是否模組化啊,等等這樣的思路展開。

① re正規表達式 替換非中英文為空格

去掉清單 中評論資料 的 除了 英文 中文 以外的 其他東西:

bai61 = [re.sub(r'[^a-z\u4E00-\u9Fa5]+',' ',i,flags=re.I) for i in bai6]
r表示聲明是原始字元串,避免與轉義字元沖突,平時經常放上
[]表示裡面的關系是取 或 的關系
^ 表示 非 的意思 就是除了中文和英文的意思
a-z\u4E00-\u9Fa5 固定表示 中文和英文的 代碼
' ',是替換成空格
i 是準備替換的資料
flages=re.i 表示大小寫都算
           

正規表達式

執行完後 資料中的除了中文英文外的其他東西都沒有了:

怎麼用python電商文本挖掘?(5)11 輿情分析

②jieba分詞 ④去掉停用詞

建構停用詞表,首先手上有一份下載下傳好的百度停用詞表,讀進來

stopwords = list(pd.read_csv('D:/data/python/百度停用詞表.txt',
                             names=['stopwords'])['stopwords'])
           
stopwords.extend([' ','蟑螂'])
自己按業務增加 停用詞
           
bai62 = [] # 定義一個清單
for i in bai61:#bbai61是保留中英文後的清單
    seg0 = pd.Series(jieba.lcut(i))
    # 用Series 後邊好做布爾索引 這一步是 用i在bai61這個清單裡面 去循環每一句話 然後用jieba分詞
    ind1 = pd.Series([len(j) for j in seg0])>1
    # [len(j) for j in seg0]是對分好詞的seg0 裡面的 做判斷 是否長度大于 1 去掉等于1的詞
    seg1 = seg0[ind1]
    # 布爾索引 得到seg1 去掉了長度小于1的
    ind2 = ~seg1.isin(pd.Series(stopwords))
    # ~ 符号表示取反的意思 isin判斷 seg1裡面的詞是否在停用詞中 傳回布爾值 取反就是要不在 停用詞中的
    seg2 = list(seg1[ind2].unique())
    #  分好詞 去掉長度小于1的 seg1 進行布爾索引(去停用詞) 和 去重 得到 清單 seg2
    if len(seg2)>0:
        bai62.append(seg2)
           

上面兩段代碼 就做好了分詞 和 去掉停用詞

大概看下最後得到的 評論的後幾行

怎麼用python電商文本挖掘?(5)11 輿情分析

⑤取高頻詞

清單生成式子,把一個清單中的清單,都變成字元串,生成在一張大清單中:

bai63 = [y for x in bai62 for y in x]
bai63
# 或如下方式:
# from itertools import chain
# bai63 = list(chain(*bai62))
           
怎麼用python電商文本挖掘?(5)11 輿情分析

計算詞頻:

baifreq=pd.Series(bai63).value_counts()
baifreq[:50]
           
怎麼用python電商文本挖掘?(5)11 輿情分析

繪制詞雲

按照詞雲包的格式
組合多個字元為一個長字元,空格分隔
bai64 = ' '.join(bai63)
           
怎麼用python電商文本挖掘?(5)11 輿情分析
設定字型的路徑,不然最後顯示不出來
font=r'‪C:\Windows\Fonts\msyh.ttc'
放入詞雲包
wc = WordCloud(font_path=font).generate(bai64)
将圖形畫出來
plt.figure(figsize=(16,8))
plt.imshow(wc)
plt.axis('off')
plt.show()
           
怎麼用python電商文本挖掘?(5)11 輿情分析
将詞雲圖導出圖檔
wc.to_file('D:/data/python/情詞雲.png')