實(shí)戰(zhàn)|Python輕松實(shí)現(xiàn)繪制詞云圖(附詳細(xì)源碼)

項(xiàng)目背景雖然現(xiàn)在已經(jīng)有很多現(xiàn)成的制作詞云圖的工具了决记,但一般存在以下幾個(gè)問(wèn)題:?jiǎn)栴}一:工具太多,眼花繚亂屿良,質(zhì)量參差不齊圈澈,選擇困難癥惫周; 問(wèn)題二:大多詞云工具或多或少有一些限制尘惧,自定義的空間有限;問(wèn)題三:有些工具甚至收費(fèi)递递∨绯龋基于以上幾個(gè)問(wèn)題,迪迪覺(jué)得有必要寫(xiě)一篇Python繪制詞云圖的文章登舞,因?yàn)閷?shí)在太簡(jiǎn)單贰逾!沒(méi)有任何編程基礎(chǔ)的小白都能搞定的事,還找什么工具安っ搿疙剑!

OK,F(xiàn)INE践叠。咱不廢話言缤,直接實(shí)操。項(xiàng)目實(shí)操一一般詞云繪制

制作詞云圖首先得有詞吧禁灼,詞從哪來(lái)管挟,迪迪想了半天硬是沒(méi)想出來(lái)。既然沒(méi)思路弄捕,那就拿過(guò)氣的后浪軟文玩一玩吧僻孝,對(duì)于后浪大家褒貶不一导帝,迪迪也不敢妄加評(píng)論。

首先穿铆,咱們把后浪全文保存為HL.txt您单,截取部分,長(zhǎng)這樣:

接著荞雏,下載并導(dǎo)入制作詞云所需的庫(kù)睹限,各個(gè)庫(kù)的功能都有注釋。

1import jieba  #結(jié)巴分詞2from wordcloud import WordCloud  #詞云展示庫(kù)3from PIL import Image  #圖像處理庫(kù)4import numpy as np  #支持多維數(shù)組和矩陣運(yùn)算5import matplotlib.pyplot as plt  #圖像展示庫(kù)

然后讯檐,把HL.txt的內(nèi)容讀出來(lái)羡疗。

1# 讀取文本內(nèi)容2with open('HL.txt','r',encoding="UTF-8") as f:3    file = f.read()  #將文本讀取為整個(gè)字符串,readlines可以按行讀取

緊接著别洪,咱們需要把讀取的整個(gè)字符串分成一個(gè)個(gè)的詞叨恨,jieba出征,寸草不生挖垛。

1#進(jìn)行分詞2data_cut =jieba.cut(file,cut_all = False) #精確模式分詞

分完詞后發(fā)現(xiàn)痒钝,什么逗號(hào)啊、分號(hào)啊痢毒、句號(hào)啊也作為單獨(dú)的詞全出來(lái)了送矩,那可不行,咱得想辦法stop它們哪替。 構(gòu)建停詞表栋荸,把看不慣的詞remove掉,沒(méi)錯(cuò)凭舶,我不喜歡口口聲聲的我們你們啥的晌块。

1stop_words = [",","帅霜。",";","匆背、","我們","你們"]  #自定義停詞列表

當(dāng)然,有朋友會(huì)說(shuō)身冀,你這是因?yàn)槲谋緝?nèi)容少钝尸,自己搞個(gè)停詞表方便,可要是成千上萬(wàn)的文本你這點(diǎn)停詞肯定不夠用啊搂根。OK珍促,那咱們百度下停詞表,隨便download一個(gè)兄墅,保存為stopwords.txt踢星。stopwords.txt共有1893個(gè)常用停詞,長(zhǎng)這樣:

有了停詞表隙咸,咱得用Python讀出來(lái)沐悦。

1stop_words = [] #創(chuàng)建空列表2with open("stopwords.txt", 'r', encoding='utf-8') as f:3    for line in f:4        if len(line)>0:5            stop_words.append(line.strip())  #把停詞追加到stop_words列表中

停詞準(zhǔn)備好了成洗,接下來(lái)就是remove停詞,拿到我們需要的詞了藏否。

1data_result = [i for i in data_cut if i not in stop_words] #獲取需要的詞

print一下data_result瓶殃,長(zhǎng)這樣:

這可不行,咱們需要的是由一個(gè)個(gè)詞構(gòu)成的字符串副签。因此遥椿,需要用join函數(shù)以空格分隔并將所有詞連接成一個(gè)新的字符串。replace在這表示將換行(\n)符替換為空淆储。

1text = " ".join(data_result).replace("\n","") #連接成字符串2print(text)

咱們打印一下text看效果:

詞有了冠场,可以開(kāi)始設(shè)計(jì)詞云圖,由于所有詞都是中文本砰,而WordCloud默認(rèn)不支持中文碴裙,摔!咱還得指定字體文件路徑点额,否則會(huì)出現(xiàn)亂碼舔株。迪迪畢竟學(xué)歐體過(guò)來(lái)的,于是找了個(gè)小楷字體还棱,你可以根據(jù)自己的喜好設(shè)置不同的字體载慈,網(wǎng)上免費(fèi)字體一大堆。

1wc = WordCloud(2    #設(shè)置字體珍手,不指定就會(huì)出現(xiàn)亂碼,這個(gè)字體文件需要下載3    font_path = "演示悠然小楷.ttf",4    background_color = "black",5    max_words = 5000,6)

配置好之后办铡,咱生成圖片并展示出來(lái)。

 1# 生成詞云圖 2wc.generate(text) 3 4# 保存詞云圖 5wc.to_file("IMJG.jpg") #保存圖片 6 7# 展示 8plt.imshow(wc) #對(duì)圖片進(jìn)行處理珠十,并顯示其格式 9plt.axis("off") #關(guān)閉坐標(biāo)軸10plt.show() #將圖片顯示出來(lái)

效果如下:

到這料扰,你可能以為迪迪準(zhǔn)備寫(xiě)結(jié)語(yǔ)了凭豪。不好意思焙蹭,還沒(méi)完,咱們的目標(biāo)可不能局限在這嫂伞,在詩(shī)和遠(yuǎn)方孔厉,哦不,是定制屬于自己的詞云圖帖努。 迪迪準(zhǔn)備給詞云加個(gè)自定義的底圖撰豺,讓詞云看起來(lái)更形象些。想了很久拼余,不知道用什么圖合適污桦。于是迪迪打開(kāi)了好久沒(méi)用的Photoshop cc,繪制了一個(gè)你用美圖秀秀都能做的比我好看的png匙监。

我把這張圖片命名為JG.png凡橱,并用Image方法打開(kāi)小作。

1#用Image方法打開(kāi)圖片2images = np.array(Image.open("JG.png"))

把images配置到詞云wc中去,傳給參數(shù)mask稼钩。

1wc = WordCloud(2    #設(shè)置字體顾稀,不指定就會(huì)出現(xiàn)亂碼,這個(gè)字體文件需要下載3    font_path = "演示悠然小楷.ttf",4    background_color = "black",5    max_words = 5000,6    mask=images7)

重新生成并保存下詞云圖,效果如下:

哈哈坝撑,略丑静秆。朋友們有興趣可以自己做個(gè)底圖或者網(wǎng)上download一個(gè)底圖試試,底圖盡量清晰巡李、顏色盡量突出就好啦抚笔。

還有朋友可能會(huì)問(wèn)為啥我文章開(kāi)頭的詞云圖是一個(gè)個(gè)句子,這里一并說(shuō)明下侨拦,因?yàn)樽x取HL.txt的時(shí)候用的是readlines啊~

二根據(jù)詞頻繪制詞云

一般的詞云制作用以上方法就可以啦塔沃,但現(xiàn)實(shí)生活中我們的需求可能更為復(fù)雜,根據(jù)詞頻繪制詞云圖的案例也更為多見(jiàn)阳谍。以下就是J哥經(jīng)常用到的一個(gè)實(shí)戰(zhàn)案例蛀柴,開(kāi)源代碼奉上。

大致思路是從Mysql數(shù)據(jù)庫(kù)中提取上萬(wàn)條交易記錄矫夯,用sql語(yǔ)句把交易規(guī)模前100的品牌select出來(lái)鸽疾,然后根據(jù)各個(gè)品牌交易規(guī)模的大小制作詞云,文字越大的表示交易規(guī)模越大训貌。

 1#-*- coding = uft-8 -*- 2#@Time : 2020/5/23 10:30 上午 3#@Author : 我是J哥 4#@File : my_wordcloud.py 5 6#給定詞頻制作詞云圖 7from matplotlib import pyplot as plt   #繪圖制肮,數(shù)據(jù)可視化 8from wordcloud import WordCloud   #詞云 9from PIL import Image  #圖片處理10import numpy as np   #矩陣運(yùn)算11import pymysql   #數(shù)據(jù)庫(kù)12import pandas as pd  #數(shù)據(jù)處理131415#準(zhǔn)備詞云所需文字(詞)16conn = pymysql.connect(host="localhost", user="你的", passwd="你的", db="test", port=3306, charset="utf8")17cur = conn.cursor()18sql = "select brand as name,round(sum(jine)/10000,0) as value from Sc_month4 group by name order by value desc limit 100;"19df = pd.read_sql(sql, conn)20print(df)21name = list(df.name)  #詞22value = df.value  # 詞的頻率23dic = dict(zip(name, value))  # 詞頻以字典形式存儲(chǔ)24#print(dic)25cur.close()26conn.close()2728img = Image.open("tree.png")29img_arry = np.array(img)30wc = WordCloud(31    background_color="white",32    mask=img_arry,33    max_words=1000,34    max_font_size=500,35    #font_path="演示悠然小楷.ttf"36    #font_path="有字庫(kù)龍藏體.ttf"37    font_path="演示悠然小楷.ttf"38)3940wc.generate_from_frequencies(dic)  #以詞頻生成詞云4142#繪制圖片43fig = plt.figure(1)44plt.imshow(wc)45plt.axis("off")46plt.show()4748#輸出詞云圖片到文件49plt.savefig("JGJG.jpg",dpi=400)

生成的詞云圖長(zhǎng)這樣:

結(jié) 語(yǔ)整體來(lái)看,Python制作詞云圖還是很簡(jiǎn)單的递沪,代碼清晰豺鼻,代碼量也少,很適合新手入門嘗鮮款慨。當(dāng)然儒飒,要想呈現(xiàn)良好的詞云效果,前提是你的數(shù)據(jù)是干凈整潔的檩奠,因此數(shù)據(jù)清洗的知識(shí)必須掌握桩了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市埠戳,隨后出現(xiàn)的幾起案子井誉,更是在濱河造成了極大的恐慌,老刑警劉巖整胃,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颗圣,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)在岂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門荚藻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人洁段,你說(shuō)我怎么就攤上這事应狱。” “怎么了祠丝?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵疾呻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我写半,道長(zhǎng)岸蜗,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任叠蝇,我火速辦了婚禮璃岳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悔捶。我一直安慰自己铃慷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蜕该。 她就那樣靜靜地躺著犁柜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堂淡。 梳的紋絲不亂的頭發(fā)上馋缅,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音绢淀,去河邊找鬼萤悴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛皆的,可吹牛的內(nèi)容都是我干的覆履。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼祭务,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼内狗!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起义锥,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岩灭,沒(méi)想到半個(gè)月后拌倍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年柱恤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了数初。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梗顺,死狀恐怖泡孩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寺谤,我是刑警寧澤仑鸥,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站变屁,受9級(jí)特大地震影響眼俊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粟关,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一疮胖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧闷板,春花似錦澎灸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鹏漆,卻和暖如春巩梢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背艺玲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工括蝠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饭聚。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓忌警,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親秒梳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子法绵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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