在資料視覺化圖表中,詞雲圖的應用隨處可見。它通常是對輸入的一段文字進行詞頻提取,然後以根據詞彙出現頻率的大小集中顯示高頻詞,簡潔直觀高效,今天小編就來分享一下在Python如何繪製出來精湛的詞雲圖。
我們先來嘗試繪製一張簡單的詞雲圖,用到的Python當中的wordcloud模組來繪製,
import jieba from wordcloud import WordCloud import matplotlib.pyplot as plt
我們導入文字內容,並且去除掉一下換行符和空格,程式碼如下:
text = open(r"明朝那些事儿.txt",encoding='utf8').read() text = text.replace('n',"").replace("u3000","")
我們需要將其分成一個個的詞,這個時候就需要用到jieba模組了,程式碼如下:
text_cut = jieba.lcut(text) # 将分好的词用某个符号分割开连成字符串 text_cut = ' '.join(text_cut)
當然了,得到的結果當中或許存在著不少我們不需要看的、無關緊要的內容,這個時候就需要用到停用詞了,我們可以自己來構建,也可以直接使用別人已經建構好的停詞表,這裡小編採用的是後者,程式碼如下:
stop_words = open(r"常见中文停用词表.txt").read().split("n")
下面便是繪製詞雲圖的核心程式碼了。
word_cloud = WordCloud(font_path="simsun.ttc",# 设置词云字体 background_color="white", # 词云图的背景颜色 stopwords=stop_words) # 去掉的停词 word_cloud.generate(text_cut) word_cloud.to_file("1.png")
output
這樣一個極其簡單的詞雲圖算是做好了,當然我們可以為它添加一個背景圖片,例如下面這張圖片,
主要需要新增的程式碼如下:
background = Image.open(r"5.png") graph = np.array(background)
然後在WorCloud當中加入mask參數
# 使用WordCloud生成词云 word_cloud = WordCloud(font_path="simsun.ttc",# 设置词云字体 background_color="white", # 词云图的背景颜色 stopwords=stop_words, # 去掉的停词 mask=graph) word_cloud.generate(text_cut) word_cloud.to_file("1.png")
output
#除此之外,還有另外一個模組stylecloud繪製出來的詞雲圖也是非常酷炫的,其中我們主要用到下面這個函數。
gen_stylecloud(text=None, icon_name='fas fa-flag', colors=None, palette='cartocolors.qualitative.Bold_5', background_color="white", max_font_size=200, max_words=2000, stopwords=True, custom_stopwords=STOPWORDS, output_name='stylecloud.png', )
其中幾個常用的參數有
#我們來嘗試繪製一個字雲圖,程式碼如下:
stylecloud.gen_stylecloud(text=text_cut, palette='tableau.BlueRed_6', icon_name='fas fa-apple-alt', font_path=r'田英章楷书3500字.ttf', output_name='2.png', stopwords=True, custom_stopwords=stop_words)
output
其中的palette參數作為調色板,可以任意變換的,具體參考:https://jiffyclub.github.io/palettable/ 這個網站。
最後我們來看看如何用Pyecharts模組來進行詞雲圖的繪製,程式碼如下
from pyecharts import options as opts from pyecharts.charts import Page, WordCloud words = [ ("皇帝", 10000), ("朱元璋", 6181), ("明朝", 4386), ("朝廷", 4055), ("明军", 2467), ("士兵", 2244), ("张居正", 1868), ("王守仁", 1281) ] c = ( WordCloud() .add("", words, word_size_range=[20, 100]) .set_global_opts(title_opts=opts.TitleOpts(title="基本示例")) ) c.render("1.html")
output
#出來的結果略顯簡單了,不過這裡值得注意的是,pyecharts當中的WordCloud()方法傳入的資料是指定的字詞以及其出現的頻次,這個和之前的操作有所不同
以上是用Python繪製了若干張詞雲圖,驚艷了所有人的詳細內容。更多資訊請關注PHP中文網其他相關文章!