以驅蟲市場資料為例,挖掘某店鋪新的業務方向和市場增長點。
聯系微信sinoleadgolf
接上一節(4) 接下來看市場的輿情情況分析。
11 輿情分析
讀資料:
定義檔案路徑
os.chdir('..')
os.chdir('./評論輿情資料')
用glob把裡面檔案名都拿到 并指派給filenames5
filenames5 = glob.glob('*.xlsx')
filenames5
讀取其中的bai的資料
df6bai = pd.read_excel(filenames5[1])
df6bai.head(3)
抽評論 洗資料:
df6bai['評論'].head()
轉換為清單為後邊處理文本使用
bai6 = list(df6bai['評論'])
接下來要把這些資料洗幹淨,然後再做 詞雲啊 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 表示大小寫都算
正規表達式
執行完後 資料中的除了中文英文外的其他東西都沒有了:
②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)
上面兩段代碼 就做好了分詞 和 去掉停用詞
大概看下最後得到的 評論的後幾行
⑤取高頻詞
清單生成式子,把一個清單中的清單,都變成字元串,生成在一張大清單中:
bai63 = [y for x in bai62 for y in x]
bai63
# 或如下方式:
# from itertools import chain
# bai63 = list(chain(*bai62))
計算詞頻:
baifreq=pd.Series(bai63).value_counts()
baifreq[:50]
繪制詞雲
按照詞雲包的格式
組合多個字元為一個長字元,空格分隔
bai64 = ' '.join(bai63)
設定字型的路徑,不然最後顯示不出來
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()
将詞雲圖導出圖檔
wc.to_file('D:/data/python/情詞雲.png')