如何用Python制作出特定形狀的詞云圖?

圖 1

各位讀者朋友們大家好啊键思,前兩天我在用Python進(jìn)行數(shù)據(jù)可視化工作的時(shí)候窜管,無意中發(fā)現(xiàn)了下面這種帶特定形狀的詞云圖(如圖1所示),我相信很多讀者和我的感受應(yīng)該是一樣的稚机,當(dāng)看到第一眼時(shí),一定會被這種圖的視覺效果所吸引获搏±堤酰看過我之前“用Python制作動態(tài)排序圖”的朋友應(yīng)該知道,Python的可視化功能相當(dāng)強(qiáng)大常熙,因此纬乍,今天便為大家出一期《如何用Python作出特定形狀詞云圖》的教程,我將以圖2所示的最終效果為例裸卫,向大家展示其完整的實(shí)現(xiàn)過程仿贬。(需要完整代碼文件的讀者可以在公眾號:全哥的學(xué)習(xí)生涯,內(nèi)回復(fù)“詞云圖代碼”獲饶够摺茧泪;需要最新停詞表的讀者可以回復(fù)“停詞表”獲取)

圖 2

1. 基本思路

詞云圖聋袋,也叫文字云队伟,是對文本中出現(xiàn)頻率較高的“關(guān)鍵詞”予以視覺化的展現(xiàn),詞云圖過濾掉大量的低頻低質(zhì)的文本信息幽勒,使得瀏覽者只要一眼掃過文本就可領(lǐng)略文本的主旨嗜侮。在這種圖中,詞的形狀代表了詞頻啥容,其尺寸越大锈颗,代表出現(xiàn)頻率越高。其主要步驟如下:

1.1 首先我們需要準(zhǔn)備一份文本文件咪惠,也就是你想進(jìn)行提取分析并展示的內(nèi)容击吱,因此第一步要對這些文本內(nèi)容劃分成詞,也就是“分詞”遥昧,這一步驟主要用到的第三方庫是jieba庫姨拥,其中最主要的函數(shù)是具有中文分詞功能的函數(shù)lcut( )绅喉,正確的分詞是基礎(chǔ)。

1.2 分詞后叫乌,若想想生成特定形狀的詞云柴罐,需要先將背景圖片導(dǎo)入進(jìn)行圖片展示,這個(gè)過程需要利用PIL庫(注意PIL僅支持python2.7,若想支持Python 3.x 需要將名字變?yōu)镻illow庫)中的Image.open( )函數(shù)將圖片加載進(jìn)來憨奸。隨后需要導(dǎo)入numpy庫革屠,利用其中np.array函數(shù)將圖片轉(zhuǎn)換為ndarray類型的數(shù)據(jù)。更多Python教程請關(guān)注公眾號:全哥的學(xué)習(xí)生涯

1.3 此時(shí)排宰,就可以利用wordcloud中的Wordcloud( )函數(shù)根據(jù)分詞結(jié)果生成詞云了似芝,并通過matplotlib庫中的一系列函數(shù)進(jìn)行展示。

2. 代碼展示

在這里板甘,我以圖3中的txt格式的新年歌為例党瓮,向大家展示:

('''

#-*- coding:utf-8 -*-

# Author:全哥的學(xué)習(xí)生涯 Time:2021/1/20

#導(dǎo)入需要的模塊

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

#設(shè)置適合你的工作路徑

os.chdir(r"這里填寫你的工作路徑")

print(os.getcwd())

''')

圖 3

原始文件導(dǎo)入pycharm,去掉換行符和空格盐类,并進(jìn)行分詞后的效果如圖4所示寞奸。

'''

#加載需要分析的文章

text=open('1.txt',encoding="utf-8").read()

print(text)

#導(dǎo)入文本數(shù)據(jù)進(jìn)行簡單的文本處理,去掉換行符在跳,半角和全角空格

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)

#導(dǎo)入文本數(shù)據(jù)進(jìn)行簡單的文本處理枪萄,去掉換行符,半角和全角空格

text=text.replace("\n","").replace("\u3000","").replace("\u0020","")

print(text)

#分詞

text_cut=jieba.lcut(text)

#將分好的詞用空格分隔開并連接成字符串

text_cut="? ".join(text_cut)

print(text_cut)

'''

圖 4

此時(shí)可以利用wordcloud庫及matplotlib庫進(jìn)行圖片展示猫妙,每一行代碼的解釋見以下代碼中的注釋部分瓷翻。

'''

#導(dǎo)入停詞

stop_words=open("停詞表.txt",encoding="utf-8").read().split("\n")

#導(dǎo)入背景圖(心形圖片),注意背景圖除了目標(biāo)形狀外割坠,其余地方都應(yīng)是空白的

background=Image.open("1.png")

#將背景圖轉(zhuǎn)換為ndarray類型的數(shù)據(jù)

graph=np.array(background)

#設(shè)置詞云中字體顏色可選擇的范圍

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)

'''


'''

#運(yùn)用matplotlib中的相關(guān)函數(shù)生成詞云

plt.figure(figsize=(12,8),dpi=100)

#顯示詞云

plt.imshow(word_cloud)

#去掉其顯示的坐標(biāo)軸

plt.axis("off")

#保存詞云圖

plt.savefig("詞云圖.png")

plt.show()

'''

注意彼哼,如果加上以下兩行代碼童谒,那么最終生成的圖片如圖5所示,否則沪羔,圖片將以圖6的形式呈現(xiàn)出來饥伊。

color_list=["#FF0000","#FF0000","#DC143C"]

colormap=colors.ListedColormap(color_list)


圖 5
圖 6

這樣,一張帶有特定形狀的詞云圖就做出來了蔫饰。

最后琅豆,如果屏幕前的你對Python的可視化學(xué)習(xí)還有什么問題或看法,或者對本公眾號有什么建議篓吁,歡迎在公眾號:全哥的學(xué)習(xí)生涯茫因,內(nèi)給我留言,或者直接添加我的個(gè)人微信(公眾號內(nèi)菜單欄“與我聯(lián)系——聯(lián)系方式”可獲得)

感謝你的閱讀杖剪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冻押,一起剝皮案震驚了整個(gè)濱河市驰贷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洛巢,老刑警劉巖括袒,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異稿茉,居然都是意外死亡锹锰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門漓库,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恃慧,“玉大人,你說我怎么就攤上這事渺蒿×∈浚” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵茂装,是天一觀的道長怠蹂。 經(jīng)常有香客問我,道長训唱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任挚冤,我火速辦了婚禮况增,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘训挡。我一直安慰自己澳骤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布澜薄。 她就那樣靜靜地躺著为肮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肤京。 梳的紋絲不亂的頭發(fā)上颊艳,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音忘分,去河邊找鬼棋枕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妒峦,可吹牛的內(nèi)容都是我干的重斑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼肯骇,長吁一口氣:“原來是場噩夢啊……” “哼窥浪!你這毒婦竟也來了祖很?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤漾脂,失蹤者是張志新(化名)和其女友劉穎假颇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體符相,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拆融,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了啊终。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镜豹。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蓝牲,靈堂內(nèi)的尸體忽然破棺而出趟脂,到底是詐尸還是另有隱情,我是刑警寧澤例衍,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布昔期,位于F島的核電站,受9級特大地震影響佛玄,放射性物質(zhì)發(fā)生泄漏硼一。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一梦抢、第九天 我趴在偏房一處隱蔽的房頂上張望般贼。 院中可真熱鬧,春花似錦奥吩、人聲如沸哼蛆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腮介。三九已至,卻和暖如春端衰,著一層夾襖步出監(jiān)牢的瞬間叠洗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工旅东, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惕味,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓玉锌,卻偏偏與公主長得像名挥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子主守,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容