臨淵羨魚(yú),不如退而結(jié)網(wǎng)。我們步步為營(yíng),從頭開(kāi)始幫助你用Python做出第一張?jiān)~云圖來(lái)。歡迎嘗試哦!
在大數(shù)據(jù)時(shí)代,你經(jīng)??梢栽诿襟w或者網(wǎng)站上看到一些非常漂亮的信息圖。
例如這個(gè)樣子。

看過(guò)之后你有什么感覺(jué)?想不想自己做一張出來(lái)?
如果你的答案是肯定的,我們就不要拖延了,現(xiàn)在就開(kāi)始,做個(gè)詞云分析圖。當(dāng)然,做為基礎(chǔ)的詞云圖,肯定比不上剛才那兩張信息圖酷炫。不過(guò)不要緊,好的開(kāi)始是成功的一半。食髓知味,后面你就可以自己升級(jí)技能,進(jìn)入你開(kāi)掛的成功之路。
網(wǎng)上教你做信息圖的教程很多。許多都是利用了專(zhuān)用工具。這些工具好是好,便捷而強(qiáng)大。只是它們功能都太過(guò)專(zhuān)一,適用范圍有限。今天我們要嘗試的,是用通用的編程語(yǔ)言 Python 來(lái)做詞云。
Python 是一種時(shí)下很流行的編程語(yǔ)言。你不僅可以用它做數(shù)據(jù)分析和可視化,還能用來(lái)做網(wǎng)站、爬取數(shù)據(jù)、做數(shù)學(xué)題、寫(xiě)腳本替你偷懶……
知道豆瓣嗎?它一開(kāi)始就是用 Python 寫(xiě)的。
在目前的編程語(yǔ)言熱度排序里,Python 屈居第四(當(dāng)然,很多人不同意,所以編程語(yǔ)言的排行榜有許多,你懂的)。但看問(wèn)題要用發(fā)展眼光。隨著數(shù)據(jù)科學(xué)的發(fā)展,Python 有爆發(fā)的趨勢(shì)。早點(diǎn)兒站上風(fēng)口,很有益處。
如果你之前沒(méi)有編程基礎(chǔ),沒(méi)關(guān)系。從零開(kāi)始,意味著我會(huì)教你如何安裝Python運(yùn)行環(huán)境,一步步完成詞云圖。希望你不要限于瀏覽,而是親自動(dòng)手嘗試一番。到完成的那一步,你不僅可以做出第一張?jiān)~云圖,而且這還將是你的第一個(gè)有用的編程作品。
心動(dòng)了?那咱們就開(kāi)始吧。
安裝
首先,我們需要安裝 Python 運(yùn)行環(huán)境。我專(zhuān)門(mén)為你錄制了一個(gè)視頻教程,請(qǐng)點(diǎn)擊這個(gè)鏈接查看,并仿照安裝。
進(jìn)行下一步之前,請(qǐng)確保你已經(jīng)安裝好了 Anaconda ,并且已經(jīng)進(jìn)入了終端。
請(qǐng)鍵入以下命令:
pip install wordcloud
如果你用的操作系統(tǒng)是蘋(píng)果的 macOS ,系統(tǒng)就會(huì)提示你先安裝 XCode 命令行工具,你按照默認(rèn)設(shè)置一步步進(jìn)行就可以了。
如果你用的是 Windows,那么為了使用這個(gè)詞云包,就稍微麻煩一些。好在我為你錄制了在 Windows 下用 Python 制作詞云的完整視頻教程,請(qǐng)點(diǎn)擊這個(gè)鏈接查看。
數(shù)據(jù)
安裝了 Python 的運(yùn)行環(huán)境,我們還需要數(shù)據(jù)。
詞云分析的對(duì)象,是文本。
理論上講,文本可以是各種語(yǔ)言的。英文、中文、法文、阿拉伯文……
為了簡(jiǎn)便,我們這里以英文文本為例。你可以隨意到網(wǎng)上找一篇英文文章作為分析對(duì)象。我特別喜歡英劇"Yes, minister",所以到維基百科上找到了這部劇的介紹詞條。

我把其中的正文文字部分拷貝了下來(lái),存儲(chǔ)為一個(gè)文本文件,叫做 yes-minister.txt 。
請(qǐng)你點(diǎn)擊這個(gè)網(wǎng)址鏈接,下載壓縮包。并且把壓縮包解壓,將其中的 yes-minister.txt 文件挪動(dòng)到工作目錄 demo 里。
好了,文本數(shù)據(jù)已經(jīng)準(zhǔn)備好了。開(kāi)始進(jìn)入編程的魔幻世界吧!
代碼
你會(huì)注意到,剛才壓縮包里面其實(shí)還有一個(gè)文件,就是咱們?cè)~云繪制的完整代碼 ipynb 文件。
不過(guò)我建議你還是自己跟著教程做一遍。這樣印象更深刻,不是嗎?
在命令行下,執(zhí)行:
jupyter notebook
瀏覽器會(huì)自動(dòng)開(kāi)啟,并且顯示如下界面。

這就是咱們剛才的勞動(dòng)成果——安裝好的運(yùn)行環(huán)境了。我們還沒(méi)有編寫(xiě)程序,目錄下只有一個(gè)剛才生成的文本文件。
打開(kāi)這個(gè)文件,瀏覽一下內(nèi)容。

回到 Jupyter 筆記本的主頁(yè)面。我們點(diǎn)擊 New 按鈕,新建一個(gè)筆記本(Notebook)。在 Notebooks 里面,請(qǐng)選擇 Python 3 選項(xiàng)。

系統(tǒng)會(huì)提示我們輸入 Notebook 的名稱(chēng)。程序代碼文件的名稱(chēng),你可以隨便起。但是我建議你起一個(gè)有意義的名字,將來(lái)好方便查找。由于我們要嘗試詞云,就叫它 wordcloud 好了。

然后就出現(xiàn)了一個(gè)空白的筆記本,供我們使用了。我們?cè)诰W(wǎng)頁(yè)里唯一的代碼文本框里,輸入以下3條語(yǔ)句。請(qǐng)務(wù)必逐字根據(jù)示例代碼輸入,空格數(shù)量都不可以有差別。尤其注意第三行,用4個(gè)空格,或者1個(gè) Tab 開(kāi)始。輸入后,按 Shift+Enter 鍵,就可以執(zhí)行了。
filename = "yes-minister.txt"
with open(filename) as f:
mytext = f.read()
沒(méi)有任何結(jié)果啊。
對(duì),因?yàn)槲覀冞@里沒(méi)有任何輸出動(dòng)作,程序只是打開(kāi)了你的 yes-minister.txt 文本文件,把里面的內(nèi)容都讀了出來(lái),存儲(chǔ)到了一個(gè)叫做mytext 的變量里面。
然后我們嘗試顯示 mytext 的內(nèi)容。輸入以下語(yǔ)句之后,還是得按 Shift+Enter 鍵,系統(tǒng)才會(huì)實(shí)際執(zhí)行該語(yǔ)句。
mytext
之后的步驟里,也千萬(wàn)不要忘了這一確認(rèn)執(zhí)行動(dòng)作。
顯示的結(jié)果如下圖所示。

嗯,看來(lái) mytext 變量里存儲(chǔ)的文本就是我們從網(wǎng)上摘來(lái)的文字。到目前為止,一切正常。
然后我們呼喚(import)詞云包,利用 mytext 中存儲(chǔ)的文本內(nèi)容來(lái)制造詞云。
from wordcloud import WordCloud
wordcloud = WordCloud().generate(mytext)
這時(shí)程序可能會(huì)報(bào)警。別擔(dān)心。警告(warning)不影響程序的正常運(yùn)行。

此時(shí)詞云分析已經(jīng)完成了。你沒(méi)看錯(cuò),制作詞云的核心步驟只需要這2行語(yǔ)句,而且第一條還只是從擴(kuò)展包里找外援。但是程序并不會(huì)給我們顯示任何東西。
說(shuō)好了的詞云呢?折騰了這么半天,卻啥也沒(méi)有,你蒙人嗎?!
別激動(dòng)。輸入下面4行語(yǔ)句后,就是見(jiàn)證奇跡發(fā)生的時(shí)刻了。
%pylab inline
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
運(yùn)行結(jié)果如圖所示:

不用那么興奮嘛。
你可以在詞云圖片上單機(jī)鼠標(biāo)右鍵,用“圖片另存為”功能導(dǎo)出。

通過(guò)這張?jiān)~云圖,我們可以看到不同單詞和詞組出現(xiàn)的頻率高低差別。高頻詞的字體明顯更大,而且顏色也很醒目。值得說(shuō)明的是,最顯眼的單詞 Hacker 并不是指黑客,而是指這部劇的主角之一——哈克首相。
希望你在嘗試過(guò)程中一切順利。對(duì)自己生成的詞云圖滿(mǎn)意嗎?如果你不滿(mǎn)意,也不要緊,可以挖掘 wordcloud 軟件包的其他高級(jí)功能。嘗試一下,看自己能不能做出這樣的詞云圖來(lái)?

討論
學(xué)完了本方法后,你做出了一張什么樣的詞云圖?除了本文介紹的方法以外,你還知道哪些便捷地制作詞云或其他信息圖的方式?歡迎留言,分享給大家。我們共同交流討論。
喜歡請(qǐng)點(diǎn)贊。還可以微信關(guān)注和置頂我的公眾號(hào)“玉樹(shù)芝蘭”(nkwangshuyi)。
如果你對(duì)數(shù)據(jù)科學(xué)感興趣,不妨閱讀我的系列教程索引貼《如何高效入門(mén)數(shù)據(jù)科學(xué)?》,里面還有更多的有趣問(wèn)題及解法。