一、詞雲介紹
- 詞雲又叫文字雲,是對文本數據中出現頻率較高的”關鍵詞“在視覺上的突出呈現,形成關鍵詞的渲染形成類似雲一樣的彩色圖片,從而一眼就可以領略文本數據的主要表達意思。
- wordcloud 是優秀的詞雲展示第三方庫,以詞語為基本單位,通過圖形可視化的方式,更加直觀和藝術的展現文本
二、庫安裝
- 打開cmd
- 輸入 pip install wordcloud
- 輸入 pip install imageio
- 輸入 pip install jieba
若是提示報錯,有可能是pip工具版本過低,需要更新pip包管理工具
只需要輸入 pip -m pip install --upgrade pip 即可
三、wordcloud 方法參數
wordcloud.WordCloud 對象
wordcloud.WordCloud(font_path=None, width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=0.9,mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None,background_color='black', max_font_size=None, font_step=1, mode='RGB', relative_scaling=0.5, regexp=None, collocations=True,colormap=None, normalize_plurals=True)
參數說明
- font_path:string
字體路徑,需要展現什么字體就把該字體的路徑+后綴名寫上,如:font_path = "黑體.ttf"
- width:int(default = 400)
輸出畫布的寬度,默認為400像素
- height:int(default = 200)
輸出畫布的高度,默認為200像素
- prefer_horizontal:float(default = 0.90)
詞語水平方向排版出現的頻率,默認0.9,所以詞語垂直方向排版出現的頻率為0.1
- mask:nd-array or None (default = None)
如果參數為空,則使用二維遮罩繪制詞雲。如果mask非空,設置的寬高值將被忽略,遮罩形狀被mask取代。除全白(#FFFFFF)的部分將不會繪制,其余部分會用於繪制詞雲。如:bg_pic = imread('讀取一張圖片.png'),背景圖片的畫布一定要設置為白色(#FFFFFF),然后顯示的形狀為不是白色的其他顏色。可以用ps工具將自己要顯示的形狀復制到一個純白色的畫布上再保存
- scale:float(default = 1)
按照比例進行放大畫布,如設置為1.5,則長和高都是原來畫布的1.5倍
- min_font_size:int(default = 4)
顯示的最小的字體大小
- font_step:int(default = 1)
字體步長,如果步長大於1,會加快運算但是可能會導致結果出現較大的誤差
- max_words:number(default = 200)
要顯示的詞的最大個數
- stopwords:set of strings or None
設置需要屏蔽的詞,如果為空,則使用內置的 STOPWORDS
- background_color:color value(default = "black")
背景顏色,如:background_color = 'white'
- max_font_size:int or None(default = None)
顯示的最大的字體大小
- mode:string(default = "RGB")
當參數為'RGB' 並且background_color不為空時,背景為透明
- relative_scaling:float(default = 0.5)
詞頻和字體大小的關聯性
- color_func:callable(default = None)
生成新顏色的函數,如果為空,則使用 self.color_func
- regexp:string or None (optional)
使用正則表達式分隔輸入的文本
- collocations:bool(default = True)
是否包括兩個詞的搭配
- colormap:string or matplotlib colormap(default = "ciridis")
給每個單詞隨機分配顏色,若指定color_func,則忽略該方法
函數
- fit_words(frequencies)
根據詞頻生成詞雲
- generate(text)
根據文本生成詞雲
- generate_from_text(text)
根據文本生成詞雲
- process_text(text)
將長文本分詞並去除屏蔽詞(此處指的是英文,中文分詞需要用其他庫來實現)
- recolor([random_state,color_func,colormap])
對現有輸出重新着色。重新着色會比重新生成整個詞雲快很多
- to_array()
轉化為 numpy array
- to_file(filename)
輸出到文件
四、示例
案例一
import wordcloud
w = wordcloud.WordCloud()
w.generate("python c++ javascript java c c#")
w.to_file("a.png")
案例二
import wordcloud
txt = '''A good book may be among the best of friends. It is the same today that it always was, and it will never change. It is the most patient and cheerful of companions. It does not turn its back upon us in times of adversity or distress. It always receives us with the same kindness; amusing and instructing us in youth, and comforting and consoling us in age.'''
# 將默認黑色背景換成白色並且屏蔽單詞'sn'
w = wordcloud.WordCloud(background_color = "white",stopwords={"sn"})
w.generate(txt)
w.to_file("詞雲.png")
案例三
下面示例一個中文,使用的分詞庫是jieba庫
import jieba
import wordcloud
text = '''計算機網絡學習的核心內容就是網絡協議的學習。網絡協議是為計算機網絡中進行
數據交換而建立的規則、標准或者說是約定的集合。因為不同用戶的數據終端可能采取的字
符集是不同的,兩者需要進行通信,必須要在一定的標准上進行。一個很形象地比喻就是我
們的語言,我們大天朝地廣人多,地方性語言也非常豐富,而且方言之間差距巨大。A地區的
方言可能B地區的人根本無法接受,所以我們要為全國人名進行溝通建立一個語言標准,這就
是我們的普通話的作用。同樣,放眼全球,我們與外國友人溝通的標准語言是英語,所以我
們才要苦逼的學習英語'''
# 使用jieba來對文章進行分詞
txt = " ".join(jieba.cut(text))
# font_path 字體路徑
w = wordcloud.WordCloud(background_color="white", font_path = "msyh.ttc")
w.generate(txt)
w.to_file("中文詞雲.png")
案例四
接下來的案例可能需要一些txt文本和圖片,可以點擊這里下載
使用周傑倫 Mojito 歌詞,生成詞雲
import jieba
import wordcloud
# 打開txt文件
f = open("Mojito.txt", "r", encoding="utf-8")
t = f.read()
f.close()
txt = " ".join(jieba.lcut(t))
w = wordcloud.WordCloud( \
background_color = "white",
font_path = "msyh.ttc"
)
w.generate(txt)
w.to_file("Mojito.png")
案例五
周傑倫歷年歌詞比較,生成詞雲
import jieba
import wordcloud
f1 = open("Jay11月的蕭邦.txt", "r", encoding="utf-8")
f2 = open("Jay2016-2020單曲歌詞.txt", "r", encoding="utf-8")
t1 = f1.read()
t2 = f2.read()
f1.close()
f2.close()
txt1 = " ".join(jieba.lcut(t1))
w1 = wordcloud.WordCloud( \
background_color = "white",
font_path = "msyh.ttc"
)
w1.generate(txt1)
w1.to_file("Jay1.png")
txt2 = " ".join(jieba.lcut(t2))
w2 = wordcloud.WordCloud( \
background_color = "white",
font_path = "msyh.ttc"
)
w2.generate(txt2)
w2.to_file("Jay2.png")
案例六
Jay2016-2020單曲歌詞 不規則圖形詞雲
import jieba
import wordcloud
from imageio import imread
mask = imread("smile.jpg")
f = open("Jay2016-2020單曲歌詞.txt", "r", encoding="utf-8")
t = f.read()
f.close()
txt = " ".join(jieba.lcut(t))
w = wordcloud.WordCloud(\
background_color = "white",\
font_path = "msyh.ttc", mask = mask,\
)
w.generate(txt)
w.to_file("jaysmile.png")