各位讀者朋友們大家好啊,前兩天我在用Python進行數據可視化工作的時候,無意中發現了下面這種帶特定形狀的詞云圖(如圖1所示),我相信很多讀者和我的感受應該是一樣的,當看到第一眼時,一定會被這種圖的視覺效果所吸引??催^我之前“用Python制作動態排序圖”的朋友應該知道,Python的可視化功能相當強大,因此,今天便為大家出一期《如何用Python作出特定形狀詞云圖》的教程,我將以圖2所示的最終效果為例,向大家展示其完整的實現過程。(需要完整代碼文件的讀者可以在公眾號:全哥的學習生涯,內回復“詞云圖代碼”獲??;需要最新停詞表的讀者可以回復“停詞表”獲?。?/p>
1. 基本思路
詞云圖,也叫文字云,是對文本中出現頻率較高的“關鍵詞”予以視覺化的展現,詞云圖過濾掉大量的低頻低質的文本信息,使得瀏覽者只要一眼掃過文本就可領略文本的主旨。在這種圖中,詞的形狀代表了詞頻,其尺寸越大,代表出現頻率越高。其主要步驟如下:
1.1 首先我們需要準備一份文本文件,也就是你想進行提取分析并展示的內容,因此第一步要對這些文本內容劃分成詞,也就是“分詞”,這一步驟主要用到的第三方庫是jieba庫,其中最主要的函數是具有中文分詞功能的函數lcut( ),正確的分詞是基礎。
1.2 分詞后,若想想生成特定形狀的詞云,需要先將背景圖片導入進行圖片展示,這個過程需要利用PIL庫(注意PIL僅支持python2.7,若想支持Python 3.x 需要將名字變為Pillow庫)中的Image.open( )函數將圖片加載進來。隨后需要導入numpy庫,利用其中np.array函數將圖片轉換為ndarray類型的數據。更多Python教程請關注公眾號:全哥的學習生涯
1.3 此時,就可以利用wordcloud中的Wordcloud( )函數根據分詞結果生成詞云了,并通過matplotlib庫中的一系列函數進行展示。
2. 代碼展示
在這里,我以圖3中的txt格式的新年歌為例,向大家展示:
('''
#-*- coding:utf-8 -*-
# Author:全哥的學習生涯 Time:2021/1/20
#導入需要的模塊
import jieba
import matplotlib.pyplot as plt
from matplotlib import colors
from wordcloud import WordCloud
import numpy as np
import os
from PIL import Image
#設置適合你的工作路徑
os.chdir(r"這里填寫你的工作路徑")
print(os.getcwd())
''')
原始文件導入pycharm,去掉換行符和空格,并進行分詞后的效果如圖4所示。
'''
#加載需要分析的文章
text=open('1.txt',encoding="utf-8").read()
print(text)
#導入文本數據進行簡單的文本處理,去掉換行符,半角和全角空格
text=text.replace("\n","").replace("\u3000","").replace("\u0020","")
print(text)
#分詞
text_cut=jieba.lcut(text)
#將分好的詞用空格分隔開并連接成字符串
text_cut="? ".join(text_cut)
print(text_cut)
#加載需要分析的文章
text=open('1.txt',encoding="utf-8").read()
print(text)
#導入文本數據進行簡單的文本處理,去掉換行符,半角和全角空格
text=text.replace("\n","").replace("\u3000","").replace("\u0020","")
print(text)
#分詞
text_cut=jieba.lcut(text)
#將分好的詞用空格分隔開并連接成字符串
text_cut="? ".join(text_cut)
print(text_cut)
'''
此時可以利用wordcloud庫及matplotlib庫進行圖片展示,每一行代碼的解釋見以下代碼中的注釋部分。
'''
#導入停詞
stop_words=open("停詞表.txt",encoding="utf-8").read().split("\n")
#導入背景圖(心形圖片),注意背景圖除了目標形狀外,其余地方都應是空白的
background=Image.open("1.png")
#將背景圖轉換為ndarray類型的數據
graph=np.array(background)
#設置詞云中字體顏色可選擇的范圍
color_list=["#FF0000","#FF0000","#DC143C"]
colormap=colors.ListedColormap(color_list)
#生成詞云,font_path為詞云中的字體,background_color為詞云圖中背景顏色
#stopwords為去掉的停詞,mask為背景圖,colormap為詞云圖顏色
word_cloud=WordCloud(font_path="C:/Windows/Fonts/simsun.ttc",
? ? ? ? ? ? ? ? ? ? background_color="white",stopwords=stop_words,mask=graph,colormap=colormap)
#生成詞云
word_cloud.generate(text_cut)
'''
'''
#運用matplotlib中的相關函數生成詞云
plt.figure(figsize=(12,8),dpi=100)
#顯示詞云
plt.imshow(word_cloud)
#去掉其顯示的坐標軸
plt.axis("off")
#保存詞云圖
plt.savefig("詞云圖.png")
plt.show()
'''
注意,如果加上以下兩行代碼,那么最終生成的圖片如圖5所示,否則,圖片將以圖6的形式呈現出來。
color_list=["#FF0000","#FF0000","#DC143C"]
colormap=colors.ListedColormap(color_list)
這樣,一張帶有特定形狀的詞云圖就做出來了。
最后,如果屏幕前的你對Python的可視化學習還有什么問題或看法,或者對本公眾號有什么建議,歡迎在公眾號:全哥的學習生涯,內給我留言,或者直接添加我的個人微信(公眾號內菜單欄“與我聯系——聯系方式”可獲得)
感謝你的閱讀。