<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
雖然現在已經有很多現成的製作詞雲圖的工具了,但一般存在以下幾個問題:
問題一:工具太多,眼花繚亂,質量參差不齊,選擇困難症;
問題二:大多詞雲工具或多或少有一些限制,自定義的空間有限;
問題三:有些工具甚至收費。
基於以上幾個問題,覺得有必要寫一篇Python繪製詞雲圖的文章,因為實在太簡單!沒有任何程式設計基礎的小白都能搞定的事,還找什麼工具啊!
OK,FINE。咱不廢話,直接實操。
製作詞雲圖首先得有詞吧,詞從哪來,迪迪想了半天硬是沒想出來。既然沒思路,那就拿過氣的後浪軟文玩一玩吧,對於後浪大家褒貶不一,迪迪也不敢妄加評論。
首先,咱們把後浪全文儲存為HL.txt,擷取部分,長這樣:
接著,下載並匯入製作詞雲所需的庫,各個庫的功能都有註釋。
import jieba #結巴分詞 from wordcloud import WordCloud #詞雲展示庫 from PIL import Image #影象處理庫 import numpy as np #支援多維陣列和矩陣運算 import matplotlib.pyplot as plt #影象展示庫
然後,把HL.txt的內容讀出來。
# 讀取文字內容 with open('HL.txt','r',encoding="UTF-8") as f: file = f.read() #將文字讀取為整個字串,readlines可以按行讀取
緊接著,咱們需要把讀取的整個字串分成一個個的詞,jieba出征,寸草不生。
#進行分詞 data_cut =jieba.cut(file,cut_all = False) #精確模式分詞
分完詞後發現,什麼逗號啊、分號啊、句號啊也作為單獨的詞全出來了,那可不行,咱得想辦法stop它們。 構建停詞表,把看不慣的詞remove掉,沒錯,我不喜歡口口聲聲的我們你們啥的。
stop_words = [",","。",";","、","我們","你們"] #自定義停詞列表
當然,有朋友會說,你這是因為文字內容少,自己搞個停詞表方便,可要是成千上萬的文字你這點停詞肯定不夠用啊。OK,那咱們百度下停詞表,隨便download一個,儲存為stopwords.txt。stopwords.txt共有1893個常用停詞,長這樣:
有了停詞表,咱得用Python讀出來。
stop_words = [] #建立空列表 with open("stopwords.txt", 'r', encoding='utf-8') as f: for line in f: if len(line)>0: stop_words.append(line.strip()) #把停詞追加到stop_words列表中
停詞準備好了,接下來就是remove停詞,拿到我們需要的詞了。
data_result = [i for i in data_cut if i not in stop_words] #獲取需要的詞
print一下data_result,長這樣:
這可不行,咱們需要的是由一個個詞構成的字串。因此,需要用join函數以空格分隔並將所有詞連線成一個新的字串。replace在這表示將換行(n)符替換為空。
text = " ".join(data_result).replace("n","") #連線成字串 print(text)
咱們列印一下text看效果:
詞有了,可以開始設計詞雲圖,由於所有詞都是中文,而WordCloud預設不支援中文,摔!咱還得指定字型檔案路徑,否則會出現亂碼。迪迪畢竟學歐體過來的,於是找了個小楷字型,你可以根據自己的喜好設定不同的字型,網上免費字型一大堆。
wc = WordCloud( #設定字型,不指定就會出現亂碼,這個字型檔案需要下載 font_path = "演示悠然小楷.ttf", background_color = "black", max_words = 5000, )
設定好之後,咱生成圖片並展示出來。
# 生成詞雲圖 wc.generate(text) # 儲存詞雲圖 wc.to_file("IMJG.jpg") #儲存圖片 # 展示 plt.imshow(wc) #對圖片進行處理,並顯示其格式 plt.axis("off") #關閉座標軸 plt.show() #將圖片顯示出來
效果如下:
到這,你可能以為迪迪準備寫結語了。不好意思,還沒完,咱們的目標可不能侷限在這,在詩和遠方,哦不,是客製化屬於自己的詞雲圖。 迪迪準備給詞雲加個自定義的底圖,讓詞雲看起來更形象些。想了很久,不知道用什麼圖合適。於是迪迪開啟了好久沒用的Photoshop cc,繪製了一個你用美圖秀秀都能做的比我好看的png。
我把這張圖片命名為JG.png,並用Image方法開啟。
#用Image方法開啟圖片 images = np.array(Image.open("JG.png"))
把images設定到詞雲wc中去,傳給引數mask。
wc = WordCloud( #設定字型,不指定就會出現亂碼,這個字型檔案需要下載 font_path = "演示悠然小楷.ttf", background_color = "black", max_words = 5000, mask=images )
重新生成並儲存下詞雲圖,效果如下:
哈哈,略醜。朋友們有興趣可以自己做個底圖或者網上download一個底圖試試,底圖儘量清晰、顏色儘量突出就好啦。
還有朋友可能會問為啥我文章開頭的詞雲圖是一個個句子,這裡一併說明下,因為讀取HL.txt的時候用的是readlines啊~
一般的詞雲製作用以上方法就可以啦,但現實生活中我們的需求可能更為複雜,根據詞頻繪製詞雲圖的案例也更為多見。以下就是J哥經常用到的一個實戰案例,開原始碼奉上。
大致思路是從Mysql資料庫中提取上萬條交易記錄,用sql語句把交易規模前100的品牌select出來,然後根據各個品牌交易規模的大小製作詞雲,文字越大的表示交易規模越大。
#-*- coding = uft-8 -*- #@Time : 2020/5/23 10:30 上午 #@Author : 我是J哥 #@File : my_wordcloud.py #給定詞頻製作詞雲圖 from matplotlib import pyplot as plt #繪圖,資料視覺化 from wordcloud import WordCloud #詞雲 from PIL import Image #圖片處理 import numpy as np #矩陣運算 import pymysql #資料庫 import pandas as pd #資料處理 #準備詞雲所需文字(詞) conn = pymysql.connect(host="localhost", user="你的", passwd="你的", db="test", port=3306, charset="utf8") cur = conn.cursor() sql = "select brand as name,round(sum(jine)/10000,0) as value from Sc_month4 group by name order by value desc limit 100;" df = pd.read_sql(sql, conn) print(df) name = list(df.name) #詞 value = df.value # 詞的頻率 dic = dict(zip(name, value)) # 詞頻以字典形式儲存 #print(dic) cur.close() conn.close() img = Image.open("tree.png") img_arry = np.array(img) wc = WordCloud( background_color="white", mask=img_arry, max_words=1000, max_font_size=500, #font_path="演示悠然小楷.ttf" #font_path="有字型檔龍藏體.ttf" font_path="演示悠然小楷.ttf" ) wc.generate_from_frequencies(dic) #以詞頻生成詞雲 #繪製圖片 fig = plt.figure(1) plt.imshow(wc) plt.axis("off") plt.show() #輸出詞雲圖片到檔案 plt.savefig("JGJG.jpg",dpi=400)
生成的詞雲圖長這樣:
整體來看,Python製作詞雲圖還是很簡單的,程式碼清晰,程式碼量也少,很適合新手入門嚐鮮。當然,要想呈現良好的詞雲效果,前提是你的資料是乾淨整潔的,因此資料淨化的知識必須掌握。
到此這篇關於使用Python輕鬆實現繪製詞雲圖專案的文章就介紹到這了,更多相關Python繪製詞雲圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45