數據可視化之利用Python製作詞雲圖

一.詞雲圖介紹

詞雲圖可以看作是文本數據的視覺表示,由詞彙組成類似雲的彩色圖形。相對其它諸多用來顯示數值數據的圖表,詞雲圖的獨特之處在於,可以展示大量文本數據。文本數據中每個詞的重要性以字體大小或顏色顯示,因此詞雲可以很好地表明每個單詞在特定文本體中被提及的頻率(即詞頻分佈),通過使用不同的顏色和大小來表示不同級別的相對顯着性。

詞雲圖的應用相當廣泛,諸如電影-視頻-微博-網易雲-淘寶-知乎等評論分析、書籍-報告-商品信息-疫情輿論等文本分析,使用詞雲圖能使數據信息的表達一目瞭然。

Alt
Alt
Alt
Alt
本文主要介紹兩種製作詞雲圖的方法,分別是 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)

那麼我們看一下詞雲圖效果:
Alt
整體來看還說的過去,製作帶有蒙版背景的詞雲圖需要注意蒙版的選取,儘量選擇主題部分和周圍區域區分明顯的圖片,並且主題顏色可以豐富明亮一些,這樣的詞雲圖纔會美觀一些。

二. stylecloud方法

stylecloud 是一個 Python 包,它基於流行的 wordcloud 包,並添加了一些有用的功能,從而創建出獨特的詞雲。stylecloud 具備以下特點:

  • 支持高級調色板(通過 palettable 實現)
  • 爲詞雲提供(任意大小)的圖標形狀(通過 Font Awesome 5.11.2 獲得)
  • 爲調色板提供直接梯度 支持讀取文本文件,或預生成的 CSV 文件(包含單詞和數字)
  • 提供命令行接口

styleword 製作詞雲主要利用gen_stylecloud() 方法,上述幾個特點體現在該方法的參數裏。
Alt
仍然以《少年中國說》爲文本內容進行代碼示例:

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()	

AltAlt
看一下效果,比 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 製作詞雲圖的內容,
微信公衆號"學編程的金融客"後臺回覆 “ 詞雲圖” 即可獲取源碼和圖片。

歡迎關注微信公衆號:學編程的金融客,作者:小笨聰

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章