python製作詞雲圖
開局10分鐘
關於wordcloud庫的安裝問題在上一篇的部落格中已經介紹了,這篇主要和大家分享我學習使用wordcloud庫的一些經歷。
tips:需要注意的是使用wordcloud庫是依賴numpy庫和PIL庫的,因此需要提前安裝好這兩個庫。
證據如下:開啟wordcloud.py
1、wordcloud庫
參考資料如下:https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html
wordcloud模組中有三個函式分別是:
wordcloud.WordCloud()
wordcloud.ImageColorGenerator( )
wordcloud.random_color_func( )
1.1 wordcloud.WordCloud()
wordcloud.WordCloud() #用於生成或者繪製詞雲的物件
class wordcloud.
WordCloud
(font_path=None, width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=0.9
引數介紹:
font_path : 字型路徑(需要設定什麼樣的字型,就將字型路徑以字串的形式傳入。預設為wordcloud庫下的DroidSansMono.ttf 字型)tips:如果選用預設字型的話,是不能夠顯示中文字的。為使得能夠顯示中文,可以自己設定字型。系統字型一般都在C:\Windows\Fonts 目錄下。之前別人部落格中提到的設定為STFANGSO.TTF就是華文仿宋。選擇自己想要設定的字型,然後右擊屬性,複製路徑然後賦值給font_path即可。
width:畫布寬度。(學過matplotlib的同學肯定就知道了,預設為400畫素)
height:畫布高度(預設為200)
margin:每個單詞間的間隔 (預設為2)
prefer_horizontal :詞語水平方向排版出現的頻率(預設為0.9,注意水平排版和垂直排版概率之和為1,因此預設垂直方向排版為0.1)
mask:nd-array or None (default=None), 簡單理解為繪製模板。當mask不為0時,那麼之前依據height和width設定的畫布則作廢,此時“畫布”形狀大小由mask決定。
scale:float (default=1). 計算和繪圖之間的比例(就是放大畫布的尺寸,也可以叫比例尺)。對於大型詞雲圖,使用比例尺比設定畫布尺寸 來得更加快速,但是單詞匹配不是很好。
max_words:number (default=200) 最大顯示單詞字數。
max_font_size:int or None (default=None) 最大單詞的字型大小,如果沒有設定的話,直接使用畫布的大小。
stopwords:set of strings or None 被淘汰不用於顯示的詞語,預設使用內建的stopwords。
background_color:color value (default=”black”) 詞雲圖像的背景色,預設為黑色。
mode:string (default=”RGB”) 當mode=“RGBA”且background_color=“None”時,將生成透明的背景。
relative_scaling:float (default=’auto’) 詞頻大小對字型大小的影響度。如果設定為1的話,如果一個單詞出現兩次那麼其字型大小為原來 的兩倍。
color_func:callable, default=None 生成新顏色的函式,如果為空,則使用self.color_func。注意的是如果你想要使得字型顏色為統一的顏色,使用如下:
color_func=lambda *args, **kwargs: "white" #所有字型為白色
# 或者通過設定RGB來解決.
color_func=lambda *args, **kwargs: (255,0,0) #所有字型顏色為紅色
regexp:string or None (optional) 使用正則表示式分割輸入的字元。沒有指定的話就使用r"\w[\w']+"。
collocations:bool, default=True 是否包括兩個詞的搭配(雙賓語)
colormap:string or matplotlib colormap, default=”viridis”。顏色對映方法,每個單詞對應什麼顏色,就是根據這個colormap的。如果設定 color_func ,則設定的這個作廢。
repeat: bool, default=False 是否需要重複單詞以使得總單詞數量達到max_words。
1.2 wordcloud.ImageColorGenerator( )
class wordcloud.ImageColorGenerator(image, default_color=None)
依據彩色顏色生成顏色。單詞將使用彩色影象中包圍矩形的平均顏色進行著色。
生成的物件用法:1、可以傳入給wordcloud.WordCloud()建構函式中的color_func引數。
2、可以傳入給recolor函式中的color_func引數。
引數介紹:
image :用於生成單詞顏色的影象。
1.3 wordcloud.random_color_func( )
wordcloud.random_color_func(word=None, font_size=None, position=None, orientation=None, font_path=None, random_state=None)
預設著色方法。選取一個隨機色調,值80%和亮度50%。
具體功能效果,還請大家自己去嘗試,靜待反饋。
2、詞雲圖生成方法
1、fit_words
(frequencies) # 根據詞頻生成詞雲圖
2、generate
(text) # 根據文字生成詞雲圖
3、generate_from_frequencies
(frequencies[, …]) # 根據詞頻生成詞雲圖
4、generate_from_text
(text) # 根據文字生成詞雲圖
5、process_text
(text) # 將長文字拆分成單詞,消除詞尾。
6、recolor
([random_state, color_func, colormap]) # 對現有的字型顏色進行重新染色。重新染色會比重新生成整個詞雲快很多
3、生成的詞雲圖儲存展示方法
3.1 儲存
1、to_file
(filename) 匯出到影象檔案,filename為輸出路徑 如r ' E:\master\picture.png '
2、通過matplotlib庫。(利用plt.imshow(con) 讀取生成的詞雲圖,然後 plt.savefig(filename)。 tips:當你使用ipython 或者 python等一步一輸出的互動式IDLE時,你會發現儲存的圖片是空白,不要困擾,這是正常的。解決辦法之一就是,你使用檔案式IDLE,比如:Spyder,或者jupyter notebook,編寫程式後執行。
3.2 詞雲圖展示
1、可以在匯出檔案後,根據路徑找到後直接開啟(蠢方法)。
(不嫌麻煩的話,匯入PIL庫,使用PIL.Image.open(圖片路徑)即可)
2、使用plt.show(con) 即可。 ##con為使用詞雲圖生成方法後,生成的詞雲圖。
4、簡單例項
import wordcloud #匯入詞雲庫
import numpy as np
import matplotlib.pyplot as plt
import PIL
import jieba
import re
with open(r'E:\master\txt1.txt',encoding='utf8') as f:
text1 = f.readlines()
#匯入圖片
image1 = PIL.Image.open(r'E:\master\picture.jpg')
MASK = np.array(image1)
WC = wordcloud.WordCloud(font_path = 'C:\\Windows\\Fonts\\STFANGSO.TTF',max_words=2000,mask = MASK,height= 400,width=400,background_color='white',repeat=False,mode='RGBA') #設定詞雲圖物件屬性
st1 = re.sub('[,。、“”‘ ’]','',str(text1)) #使用正則表示式將符號替換掉。
conten = ' '.join(jieba.lcut(st1)) #此處分詞之間要有空格隔開,聯想到英文書寫方式,每個單詞之間都有一個空格。
con = WC.generate(conten)
plt.imshow(con)
plt.axis("off")
原來圖片:
輸出圖片: