一.詞雲圖介紹
詞雲圖可以看作是文本數據的視覺表示,由詞彙組成類似雲的彩色圖形。相對其它諸多用來顯示數值數據的圖表,詞雲圖的獨特之處在於,可以展示大量文本數據。文本數據中每個詞的重要性以字體大小或顏色顯示,因此詞雲可以很好地表明每個單詞在特定文本體中被提及的頻率(即詞頻分佈),通過使用不同的顏色和大小來表示不同級別的相對顯着性。
詞雲圖的應用相當廣泛,諸如電影-視頻-微博-網易雲-淘寶-知乎等評論分析、書籍-報告-商品信息-疫情輿論等文本分析,使用詞雲圖能使數據信息的表達一目瞭然。
本文主要介紹兩種製作詞雲圖的方法,分別是 wordcloud 和 stylecloud 。當然,首先別忘了安裝代碼中用到的庫。
pip install wordcloud
pip install wordcloud
二.wordcloud方法
wordcloud是製作詞雲圖最常用的工具,上手簡單,操作方便,關鍵在於瞭解各個參數用法。額,參數貌似有點多(⊙o⊙)…
不過也不要怕,並不是每個參數都需要自己設置,我們可以根據自己的需要個性化設置。下面就以《少年中國說》作爲文本進行代碼示例:
import matplotlib.pyplot as plt #數據可視化
import jieba #詞語切割
import wordcloud #分詞
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS #詞雲,顏色生成器,停止詞
import numpy as np #科學計算
from PIL import Image #處理圖片
def ciyun():
with open('少年中國說.txt','r',encoding='gbk') as f: #打開新的文本轉碼爲gbk
textfile= f.read() #讀取文本內容
wordlist = jieba.lcut(textfile)#切割詞語
space_list = ' '.join(wordlist) #空格鏈接詞語
#print(space_list)
backgroud = np.array(Image.open('test1.jpg'))
wc = WordCloud(width=1400, height=2200,
background_color='white',
mode='RGB',
mask=backgroud, #添加蒙版,生成指定形狀的詞雲,並且詞雲圖的顏色可從蒙版裏提取
max_words=500,
stopwords=STOPWORDS.add('老年人'),#內置的屏蔽詞,並添加自己設置的詞語
font_path='C:\Windows\Fonts\STZHONGS.ttf',
max_font_size=150,
relative_scaling=0.6, #設置字體大小與詞頻的關聯程度爲0.4
random_state=50,
scale=2
).generate(space_list)
image_color = ImageColorGenerator(backgroud)#設置生成詞雲的顏色,如去掉這兩行則字體爲默認顏色
wc.recolor(color_func=image_color)
plt.imshow(wc) #顯示詞雲
plt.axis('off') #關閉x,y軸
plt.show()#顯示
wc.to_file('test1_ciyun.jpg') #保存詞雲圖
def main():
ciyun()
if __name__ == '__main__':
main()
值得注意的是當我們製作中文詞雲圖時,一是需要指定顯示的中文字體的英文名稱,C盤裏的中文字體名稱有一些爲漢字,此時可以將該字體複製到桌面就可看到中文字體的英文名稱;二是禁(停)用詞stopwords 的設置。
分詞時需要去除助詞、介詞、連詞、語氣詞及標點符號等一些沒有實際意義的詞語,這些停用詞可以從網上自行下載。除此之外,還需要自定義一個停用詞表,用以去除那些在文本中沒有實際意義的詞語,比如:最終、因爲、一切、經歷等。這裏小笨聰給大家一個思路:
def read_stopword(fpath):
# 讀取中文停用詞表
with open(fpath, 'r', encoding='utf-8') as file:
stopword = file.readlines()
return [word.replace('\n', '') for word in stopword]
#加載多個停用詞表
path = 'E:\WeChatPublicNumber\python\詞雲圖\stopwords'
# 前兩個停用詞表是網上下載的,第三個是自己設置的
name_list = ['中文停用詞.txt', '哈工大停用詞.txt', 'stopword.txt']
stop_word = []
for fname in name_list:
stop_word += read_stopword(os.path.join(path, fname))
stop_word = set(stop_word)
那麼我們看一下詞雲圖效果:
整體來看還說的過去,製作帶有蒙版背景的詞雲圖需要注意蒙版的選取,儘量選擇主題部分和周圍區域區分明顯的圖片,並且主題顏色可以豐富明亮一些,這樣的詞雲圖纔會美觀一些。
二. stylecloud方法
stylecloud 是一個 Python 包,它基於流行的 wordcloud 包,並添加了一些有用的功能,從而創建出獨特的詞雲。stylecloud 具備以下特點:
- 支持高級調色板(通過 palettable 實現)
- 爲詞雲提供(任意大小)的圖標形狀(通過 Font Awesome 5.11.2 獲得)
- 爲調色板提供直接梯度 支持讀取文本文件,或預生成的 CSV 文件(包含單詞和數字)
- 提供命令行接口
styleword 製作詞雲主要利用gen_stylecloud() 方法,上述幾個特點體現在該方法的參數裏。
仍然以《少年中國說》爲文本內容進行代碼示例:
import jieba
import stylecloud
def ciyun():
with open('少年中國說.txt','r',encoding='gbk') as f:
word_list = jieba.cut(f.read())
result = " ".join(word_list) #分詞用空格隔開
stylecloud.gen_stylecloud(
text=result, # 上面分詞的結果作爲文本傳給text參數
size=512,
font_path='msyh.ttc', # 字體設置
palette='cartocolors.qualitative.Pastel_7', # 調色方案選取,從palettable裏選擇
gradient='horizontal', # 漸變色方向選了垂直方向
icon_name='fab fa-weixin', # 蒙版選取,從Font Awesome裏選
output_name='test_ciyun.png') # 輸出詞雲圖
def main():
ciyun()
if __name__ == '__main__':
main()
看一下效果,比 wordcloud 的效果更美觀。主要原因在於 stylecloud 中的兩個重要參數的選取,即蒙版選擇 icon_name 和 調色方案選擇 palette*。它的蒙版是用 Font Awesome 5 的圖標組成的,而 Font Awesome 的圖標多達幾千種。它的調色方案是從 palettable 選取的。
Font Awesome 網站:
https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87
palettable 網站:
https://jiffyclub.github.io/palettable/
當然,製作詞雲圖方法不止上面兩種,比如用 Pyecharts 製作,另外也有很多網站不需要任何編程就能快速製作詞雲圖。具體用哪種看自己喜好,但別忘了使用詞雲圖的初衷是爲了更好地展示你的數據。
以上就是利用 Python 製作詞雲圖的內容,
微信公衆號"學編程的金融客"後臺回覆 “ 詞雲圖” 即可獲取源碼和圖片。
歡迎關注微信公衆號:學編程的金融客,作者:小笨聰