1. 程式人生 > >python資料探勘課程 十三.WordCloud詞雲配置過程及詞頻分析

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

一. 安裝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








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

二. 簡單詞雲程式碼

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

  1. # -*- coding: utf-8 -*-
  2. import jieba  
  3. import sys  
  4. import matplotlib.pyplot as plt  
  5. from wordcloud import
     WordCloud  
  6. #開啟本體TXT檔案
  7. text = open('test.txt').read()  
  8. print type(text)  
  9. #結巴分詞 cut_all=True 設定為全模式 
  10. wordlist = jieba.cut(text, cut_all = True)  
  11. #使用空格連線 進行中文分詞
  12. wl_space_split = " ".join(wordlist)  
  13. print wl_space_split  
  14. #對分詞後的文字生成詞雲
  15. my_wordcloud = WordCloud().generate(wl_space_split)  
  16. #顯示詞雲圖
  17. plt.imshow(my_wordcloud)  
  18. #是否顯示x軸、y軸下標
  19. plt.axis("off")  
  20. 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",核心程式碼如下:

  1. # -*- coding: utf-8 -*-
  2. from os import path  
  3. from scipy.misc import imread    
  4. import jieba  
  5. import sys  
  6. import matplotlib.pyplot as plt  
  7. from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator    
  8. # 開啟本體TXT檔案
  9. text = open('weixin.txt').read()  
  10. # 結巴分詞 cut_all=True 設定為全模式 
  11. wordlist = jieba.cut(text)     #cut_all = True
  12. # 使用空格連線 進行中文分詞
  13. wl_space_split = " ".join(wordlist)  
  14. print wl_space_split  
  15. # 讀取mask/color圖片
  16. d = path.dirname(__file__)  
  17. nana_coloring = imread(path.join(d, "sss3.png"))  
  18. # 對分詞後的文字生成詞雲
  19. my_wordcloud = WordCloud( background_color = 'white',      # 設定背景顏色
  20.                             mask = nana_coloring,          # 設定背景圖片
  21.                             max_words = 2000,              # 設定最大現實的字數
  22.                             stopwords = STOPWORDS,         # 設定停用詞
  23.                             max_font_size = 50,            # 設定字型最大值
  24.                             random_state = 30,             # 設定有多少種隨機生成狀態,即有多少種配色方案
  25.                             )  
  26. # generate word cloud 
  27. my_wordcloud.generate(wl_space_split)  
  28. # create coloring from image  
  29. image_colors = ImageColorGenerator(nana_coloring)  
  30. # recolor wordcloud and show  
  31. my_wordcloud.recolor(color_func=image_colors)  
  32. plt.imshow(my_wordcloud)    # 顯示詞雲圖
  33. plt.axis("off")             # 是否顯示x軸、y軸下標
  34. plt.show()  
  35. # save img  
  36. my_wordcloud.to_file(path.join(d, "cloudimg.png"))  
        執行結果如下圖所示,顯示我加寶寶我兩最近兩月的聊天記錄。   


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