更多Python數據可視化案例請關注我的公眾號:早起Python
========
前言
大家好,不知道大家會在什么場合使用詞雲圖,對我來說詞雲圖的優點除了它可以展示大量文本數據。從而讓讀者快速抓住重點,更重要的是詞雲圖好看啊,所以今天給大家分享幾種詞雲圖的制作方法。首先我們來思考一下詞雲圖是怎樣生成的,簡單來說不就是讀取文本—>分詞—>計算詞頻—>詞雲,下面將以我們制作詞雲的復雜程度來介紹不同的方法。
在線交互式制作:圖悅詞雲
最省事的當然是一步到位,將文本數據傳進去然后直接整個詞雲圖出來,這時一般要借助第三方網站。百度在線詞雲制作,選擇幾個排名靠前的網站,我們以之前文章中的網易雲音樂評論數據示例,來對比不同方法制作的詞雲。首先登場選手是最簡單的詞雲制作:圖悅詞雲http://www.picdata.cn/picdata/index.php#
就像上圖一樣,不用注冊不用登陸,把文本粘貼進去就出來詞雲了,但是可選擇的樣式較少而且有水印,並且也不支持更多的參數調整,早起主觀評分:60分|畢竟能滿足基本的詞雲制作。
在線交互式制作:微思詞雲
下一位選手是微思詞雲
可以看到,相較於上一個網站,該網站的詞雲並沒有水印,看上去也舒服一點,並且支持對文字旋轉、背景顏色、字體等相關參數進行調整。但是需要先注冊登陸才可以使用並且每個賬戶有一定的使用次數,部分功能需要付費。早起主觀評分:65分|需要很多的郵箱才能一直用。
在線交互式制作:花火詞雲
最后一位在線制作詞雲的選手是花火
http://hanabi.data-viz.cn/visualisation
可以看到,花火相較於上面兩個在線平台,依舊是傳個txt進去就出來詞雲,但是做出來的圖更好看,並且支持更多自定義的參數,不過需要付費才能去除水印,早起主觀評分75分|顏值即正義,但是門票¥30/月
以上就是幾個在線制作詞雲網站的測評,並無任何廣告與抹黑,其實與其他沒有列出的網站都大同小異,免費的功能簡單復雜的圖會好看點但是會收費,各有千秋吧。接下來有請Python出場。
Python制作:Pyecharts
Python中制作詞雲使用Pyecharts還是比較方便的,做出來的圖也比較清爽
https://pyecharts.org/#/zh-cn/basic_charts?id=wordcloud%ef%bc%9a%e8%af%8d%e4%ba%91%e5%9b%be
因為是寫代碼制作那么有關文字樣式、旋轉角度、高度、距離、陰影等都可以自定義,並且可以使用pyecharts的全局和系列配置項進行調整
唯一的問題是pyecharts接收的數據必須是類似經過分詞計算之后的數據,也就是你要給它這樣的數據
data = [
("生活資源", "999"),
("供熱管理", "888"),
("供氣質量", "777"),
("生活用水管理", "688"),
("一次供水問題", "588"),
("交通運輸", "516"),
("城市交通", "515"),
("環境保護", "483"),
("房地產管理", "462"),
("城鄉建設", "449"),
("社會保障與福利", "429"),
......
]
當然這里的數字並不一定需要是頻率,也可以是權重等數據。所以如果需要繪制詞雲的數據恰好是這種計算好的數據,嘗試使用Pyecharts吧,早起主觀評分75分|好看但也有一定限制。
Python制作:wordcloud
現在登場的就是Python中制作詞雲最常用的wordcloud,說到wordcloud就不得不介紹jieba分詞了,簡單來說流程就是傳一個txt進去,jieba分詞得到結果后再傳給wordcloud制作詞雲,同時支持比Pyecharts更多的自定義設置
from wordcloud import WordCloud
import matplotlib.pyplot as plt #繪制圖像的模塊
import jieba #jieba分詞
path_txt='music.txt'
f = open(path_txt,'r',encoding='UTF-8').read()
# 結巴分詞,生成字符串,wordcloud無法直接生成正確的中文詞雲
cut_text = " ".join(jieba.cut(f))
wordcloud = WordCloud(
#設置字體,不然會出現口字亂碼,文字的路徑是電腦的字體一般路徑,可以換成別的
font_path="msyh.ttc",
#設置了背景,寬高
background_color="white",width=1000,height=1000).generate(cut_text)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
從代碼和詞雲效果來看,wordcloud由於支持修改的參數更多,所以也就需要更多的測試不同效果下的圖片來找到適合這組數據最優的詞雲,比如我的這圖看着就沒有pyecharts生成的舒服,當然只要自己調整好了,就可以保存為一個腳本以后直接使用即可。早起主觀評分80分|畢竟是使用最多的詞雲庫。
Python制作:stylecloud
最后介紹一個由wordcloud優化而來的庫stylecloud,也需要搭配jieba分詞使用,但是代碼更加簡介,生成的詞雲也更加美觀,比如還是剛剛的文本,使用下面的代碼即可
def jieba_cloud(file_name):
with open(file_name,'r',encoding='utf8') as f:
word_list = jieba.cut(f.read())
result = " ".join(word_list) #分詞用 隔開
#制作中文雲詞
gen_stylecloud(text=result,font_path='msyh.ttc',output_name=file_name.split('.')[0] + '.png') #必須加中文字體,否則格式錯誤
if __name__ == "__main__":
file_name = 'music.txt'
jieba_cloud(file_name)
可以看到,在不添加任何配置項默認生成的詞雲比wordcloud更清爽一點,並且也支持更改顏色、背景、風格等,早起主觀評分85分|畢竟簡單操作能畫出好看的詞雲。
結束語
以上就是一些繪制詞雲圖的方法,你用過哪些?你又Pick哪一款。當然繪制詞雲的方法遠不止這些,如果你有生成詞雲更簡單、更好看的方法,可以點擊下方小程序給我留言。不過雖然詞雲圖很酷炫,但並不是所有數據都適合用詞雲圖顯示,例如數據量太少時很難布局出好看的詞雲圖,此時就需要考慮其他的圖表了,拜拜~