【python資料探勘課程】十三.WordCloud詞雲配置過程及詞頻分析

Eastmount發表於2017-03-21

        這篇文章是學習了老曹的微信直播,感覺WordCloud對我的《Python資料探勘課程》非常有幫助,作者學習後準備下次上課分享給我的學生,讓他們結合詞頻分析來體會下詞雲。希望這篇基礎文章對你有所幫助,同時自己也是詞雲的初學者,強烈推薦老曹的部落格供大家學習。如果文章中存在不足或錯誤的地方,還請海涵~
        老曹地址:10行python程式碼的詞雲 - 半吊子全棧工匠

        前文推薦:
       【Python資料探勘課程】一.安裝Python及爬蟲入門介紹
       【Python資料探勘課程】二.Kmeans聚類資料分析及Anaconda介紹
       【Python資料探勘課程】三.Kmeans聚類程式碼實現、作業及優化
       【Python資料探勘課程】四.決策樹DTC資料分析及鳶尾資料集分析
       【Python資料探勘課程】五.線性迴歸知識及預測糖尿病例項
       【Python資料探勘課程】六.Numpy、Pandas和Matplotlib包基礎知識
       【Python資料探勘課程】七.PCA降維操作及subplot子圖繪製
       【Python資料探勘課程】八.關聯規則挖掘及Apriori實現購物推薦
       【Python資料探勘課程】九.迴歸模型LinearRegression簡單分析氧化物資料
       【python資料探勘課程】十.Pandas、Matplotlib、PCA繪圖實用程式碼補充
       【python資料探勘課程】十一.Pandas、Matplotlib結合SQL語句視覺化分析
       【python資料探勘課程】十二.Pandas、Matplotlib結合SQL語句對比圖分析


一. 安裝WordCloud

        在使用WordCloud詞雲之前,需要使用pip安裝相應的包。
        pip install WordCloud
        pip install jieba

        其中WordCloud是詞雲,jieba是結巴分詞工具。
        jieba參考我的部落格:[python] 使用Jieba工具中文分詞及文字聚類概念

        問題:在安裝WordCloud過程中,你可能遇到的第一個錯誤如下。
        error: Microsoft Visual C++ 9.0 is required. Get it from http://asa.ms/vcpython27


        解決方法也很簡單,下載VCForPython27安裝(Microsoft Visual C++ Compiler for Python 2.7)。但是在微軟下載總是沒響應。微軟地址如下:
        https://www.microsoft.com/en-us/download/details.aspx?id=44266
        這是最大的問題,下面我自己提供一個CSDN的地址供大家下載。下載完成,可以進行安裝響應的庫函式。
        資源地址:http://download.csdn.net/detail/eastmount/9788218






        安裝完成之後,可以正常執行程式碼啦。



二. 簡單詞雲程式碼

        下面這部分程式碼參考老曹的,希望對你有所幫助。
        老曹說:什麼是詞雲呢?詞雲又叫文字雲,是對文字資料中出現頻率較高的“關鍵詞”在視覺上的突出呈現,形成關鍵詞的渲染形成類似雲一樣的彩色圖片,從而一眼就可以領略文字資料的主要表達意思。
        程式碼如下:

# -*- coding: utf-8 -*-
import jieba
import sys
import matplotlib.pyplot as plt
from wordcloud import WordCloud

#開啟本體TXT檔案
text = open('test.txt').read()
print type(text)

#結巴分詞 cut_all=True 設定為全模式 
wordlist = jieba.cut(text, cut_all = True)

#使用空格連線 進行中文分詞
wl_space_split = " ".join(wordlist)
print wl_space_split

#對分詞後的文字生成詞雲
my_wordcloud = WordCloud().generate(wl_space_split)

#顯示詞雲圖
plt.imshow(my_wordcloud)
#是否顯示x軸、y軸下標
plt.axis("off")
plt.show()

        執行結果如下所示:



        這是中文編碼問題,下面講解解決方法。


三. 中文編碼錯誤及解決

        在WordCloud安裝的目錄下找到WordCloud.py檔案,對原始碼進行修改。

        編輯wordcloud.py,找到FONT_PATH,將DroidSansMono.ttf修改成msyh.ttf。這個msyh.ttf表示微軟雅黑中文字型。


        注意,此時執行程式碼還是報錯,因為需要在同一個目錄下放置msyh.ttf字型檔案供程式呼叫,如下圖所示,這是原來的字型DroidSansMono.ttf。


        此時的執行結果如下所示,這是分析CSDN多篇部落格的主題,"閱讀"和"評論"比較多。


        也可以採用下面的程式碼:
        wordcloud = WordCloud(font_path = 'MSYH.TTF').fit_words(word)



四. 照片背景的詞雲程式碼

        下面進一步深入,假設存在一個圖 "sss3.png",核心程式碼如下:

# -*- coding: utf-8 -*-
from os import path
from scipy.misc import imread  
import jieba
import sys
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator  

# 開啟本體TXT檔案
text = open('weixin.txt').read()

# 結巴分詞 cut_all=True 設定為全模式 
wordlist = jieba.cut(text)     #cut_all = True

# 使用空格連線 進行中文分詞
wl_space_split = " ".join(wordlist)
print wl_space_split

# 讀取mask/color圖片
d = path.dirname(__file__)
nana_coloring = imread(path.join(d, "sss3.png"))

# 對分詞後的文字生成詞雲
my_wordcloud = WordCloud( background_color = 'white',      # 設定背景顏色
                            mask = nana_coloring,          # 設定背景圖片
                            max_words = 2000,              # 設定最大現實的字數
                            stopwords = STOPWORDS,         # 設定停用詞
                            max_font_size = 50,            # 設定字型最大值
                            random_state = 30,             # 設定有多少種隨機生成狀態,即有多少種配色方案
                            )

# generate word cloud 
my_wordcloud.generate(wl_space_split)

# create coloring from image  
image_colors = ImageColorGenerator(nana_coloring)

# recolor wordcloud and show  
my_wordcloud.recolor(color_func=image_colors)

plt.imshow(my_wordcloud)    # 顯示詞雲圖
plt.axis("off")             # 是否顯示x軸、y軸下標
plt.show()

# save img  
my_wordcloud.to_file(path.join(d, "cloudimg.png"))


        執行結果如下圖所示,顯示我加寶寶我兩最近兩月的聊天記錄。

  


       一弦一柱思華年,一co一ding夢嚴賢。
       希望文章對你有所幫助,尤其是結合資料庫做資料分析的人。還是那句話,如果剛好需要這部分知識,你就會覺得非常有幫助,否則只是覺得好玩,這也是線上筆記的作用。如果文章中存在不足或錯誤的地方,還請海涵~

        (By:Eastmount 2017-03-21 下午2點  http://blog.csdn.net/eastmount/ )


相關文章