【Python】Wordcloud 詞雲

小亮520cl發表於2017-10-19

本週為大家帶來炫酷好玩的 wordcloud 詞雲構造庫。

使用 wordcloud 可以做出這樣的圖片:

還可以做出這樣的:

接下來,我們來學習如何製作屬於自己的詞雲圖。

本來想說一句,安裝過程不表,直接進入正題,可是在程式設計教室的QQ群和微信群中都有人遇到wordcloud 安裝失敗的問題。

所以在此簡單提一下安裝過程:

當然最直接的是 pip

pip install wordcloud

但很多同學會發現直接 pip 是會報錯的,所以這裡提供第二種安裝方式:

下載 whl 手動安裝包:

靜靜等待頁面載入完成,然後選擇適合自己 Python 的 wordcloud 版本,最後執行以下命令。filepath 替換為你的安裝檔案完整路徑。

pip install filepath\wordcloud-1.2.1-cp35-cp35m-win_amd64.whl

wordcloud 在安裝過程中會自動安裝其依賴的庫。

基本的用法

我們讀入一本英文小說,取其中的詞彙生成一張詞雲圖

  1. # 匯入 wordcloud 模組和 matplotlib 模組
  2. from wordcloud import WordCloud
  3. import matplotlib.pyplot as plt
  4. # 讀入一個txt檔案
  5. text = open('Jane Eyre.txt','r').read()
  6. # 生成詞雲
  7. wordcloud = WordCloud().generate(text)
  8. # 顯示詞雲圖片
  9. plt.imshow(wordcloud)
  10. plt.axis('off')
  11. plt.show()
  12. # 儲存圖片
  13. wordcloud.to_file('test.jpg')

結果如圖所示

執行指令碼之後就可以看到生成的圖片了,是不是很簡單。本文主要講 wordcloud。程式碼中涉及到的 matplotlib 就不做更詳細解釋。

除了直接讀入文字生成詞雲,也可以使用字典格式的詞頻作為輸入

  1. # 讀入一組詞頻字典檔案
  2. text_dict = {
  3.     'you': 2993,
  4.     'and': 6625,
  5.     'in': 2767,
  6.     'was': 2525,
  7.     'the': 7845,
  8. }
  9. wordcloud = WordCloud().generate_from_frequencies(text_dict)

還可以將詞雲填充到指定的形狀之中。為達到填充指定形狀的效果,需要使用 png 格式的圖片。

  1. # 讀入圖片
  2. from scipy.misc import imread
  3. bg_pic = imread('Anne_Hathaway.png')
  4. # 配置詞雲引數
  5. wc = WordCloud(
  6.     # 設定字型
  7.     font_path = 'BeaverScratches.ttf',
  8.     # 設定背景色
  9.     background_color='white',
  10.     # 允許最大詞彙
  11.     max_words=200,
  12.     # 詞雲形狀
  13.     mask=bg_pic,
  14.     # 最大號字型
  15.     max_font_size=100,
  16. )
  17. # 生成詞雲
  18. wc.generate(text)
  19. # 儲存圖片
  20. wc.to_file('word.jpg')

最後的效果如下

還可以結合 jieba分詞,實現用中文填充的詞雲圖(如果不透過分詞,無法直接生成正確的中文詞雲)。使用中文填充時一定得指定中文的字型,否則會出現亂碼。如果報錯找不到字型,就複製一箇中文字型檔案放在程式碼目錄下。

  1. #-*- coding:utf-8 -*-
  2. from scipy.misc import imread
  3. import matplotlib.pyplot as plt
  4. from wordcloud import WordCloud
  5. import jieba
  6. from collections import Counter
  7. # 讀入 西遊記 txt 檔案,windows 下過濾編碼錯誤
  8. text = open('西遊記.txt',encoding='utf-8',errors='ignore').read()
  9. # 使用 jieba 分詞
  10. text_jieba = list(jieba.cut(text))
  11. # 使用 counter 做詞頻統計,選取出現頻率前 100 的詞彙
  12. c = Counter(text_jieba)
  13. common_c = c.most_common(100)
  14. # 讀入圖片
  15. bg_pic = imread('Anne_Hathaway.png')
  16. # 配置詞雲引數
  17. wc = WordCloud(
  18.     # 設定字型
  19.     font_path = '李旭科書法1.4.ttf',
  20.     # 設定背景色
  21.     background_color='white',
  22.     # 允許最大詞彙
  23.     max_words=200,
  24.     # 詞雲形狀
  25.     mask=bg_pic,
  26.     # 最大號字型
  27.     max_font_size=100,
  28. )
  29. # 生成詞雲
  30. wc.generate_from_frequencies(dict(common_c))
  31. # 生成圖片並顯示
  32. plt.figure()
  33. plt.imshow(wc)
  34. plt.axis('off')
  35. plt.show()
  36. # 儲存圖片
  37. wc.to_file('anne.jpg')

最終的結果:


關於 wordcloud 的一些基本的常用的方法就在這裡。想了解更多特性的同學,可以訪問官方網站:   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2146151/,如需轉載,請註明出處,否則將追究法律責任。

相關文章