首頁  >  文章  >  後端開發  >  用Python繪製了若干張詞雲圖,驚艷了所有人

用Python繪製了若干張詞雲圖,驚艷了所有人

王林
王林轉載
2023-04-13 12:28:021441瀏覽

用Python繪製了若干張詞雲圖,驚艷了所有人

在資料視覺化圖表中,詞雲圖的應用隨處可見。它通常是對輸入的一段文字進行詞頻提取,然後以根據詞彙出現頻率的大小集中顯示高頻詞,簡潔直觀高效,今天小編就來分享一下在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

用Python繪製了若干張詞雲圖,驚艷了所有人

這樣一個極其簡單的詞雲圖算是做好了,當然我們可以為它添加一個背景圖片,例如下面這張圖片,

用Python繪製了若干張詞雲圖,驚艷了所有人

主要需要新增的程式碼如下:

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

用Python繪製了若干張詞雲圖,驚艷了所有人

深度最佳化

#除此之外,還有另外一個模組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',
)

其中幾個常用的參數有

  •  icon_name: 字雲圖的形狀
  •  max_font_size: 最大的字號
  • # max_words: 可以容納下的最大單字數量
  •  stopwords: 用來篩選常見的停用詞
  •  custom_stopwords: 要是自建有停用詞表,可以拿來用
  •  palette: 調色盤

#我們來嘗試繪製一個字雲圖,程式碼如下:

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

用Python繪製了若干張詞雲圖,驚艷了所有人

其中的palette參數作為調色板,可以任意變換的,具體參考:https://jiffyclub.github.io/palettable/ 這個網站。

pyecharts

最後我們來看看如何用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

用Python繪製了若干張詞雲圖,驚艷了所有人

#出來的結果略顯簡單了,不過這裡值得注意的是,pyecharts當中的WordCloud()方法傳入的資料是指定的字詞以及其出現的頻次,這個和之前的操作有所不同

以上是用Python繪製了若干張詞雲圖,驚艷了所有人的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除