如何用Python做詞雲?

王樹義發表於2018-07-05

臨淵羨魚,不如退而結網。我們步步為營,從頭開始幫助你用Python做出第一張詞雲圖來。歡迎嘗試哦!

如何用Python做詞雲?

需求

在大資料時代,你經常可以在媒體或者網站上看到一些非常漂亮的資訊圖。

例如這個樣子。

如何用Python做詞雲?

或是這個樣子的。

如何用Python做詞雲?

看過之後你有什麼感覺?想不想自己做一張出來?

如果你的答案是肯定的,我們就不要拖延了,今天就來一步步從零開始做個詞雲分析圖。當然,做為基礎的詞雲圖,肯定比不上剛才那兩張資訊圖酷炫。不過不要緊,好的開始是成功的一半嘛。食髓知味,後面你就可以自己升級技能,進入你開掛的成功之路。

網上教你做資訊圖的教程很多。許多都是利用了專用工具。這些工具好是好,便捷而強大。只是它們功能都太過專一,適用範圍有限。今天我們要嘗試的,是用通用的程式語言Python來做詞雲。

Python是一種時下很流行的程式語言。你不僅可以用它做資料分析和視覺化,還能用來做網站、爬取資料、做數學題、寫指令碼替你偷懶……

知道豆瓣嗎?它一開始就是用Python寫的。

在目前的程式語言熱度排序裡,Python屈居第四(當然,很多人不同意,所以程式語言的排行榜有許多,你懂的)。但看問題要用發展眼光。隨著資料科學的發展,Python有爆發的趨勢。早點兒站上風口,很有益處。

如果你之前沒有程式設計基礎,沒關係。從零開始,意味著我會教你如何安裝Python執行環境,一步步完成詞雲圖。希望你不要限於瀏覽,而是親自動手嘗試一番。到完成的那一步,你不僅可以做出第一張詞雲圖,而且這還將是你的第一個有用的程式設計作品。

心動了?那我們們就開始吧。

安裝

首先,我們需要安裝Python執行環境。

如果你用的是macOS,那麼你的系統裡面實際已經預裝好了Python。

然而我們要使用到許多擴充套件包的功能。因此最好安裝一個Python工具套裝。只需要一次安裝,以後大部分的功能就都已整合了。不必每次使用新功能,都去零敲碎打地安裝新包了。

Python的套裝有許多種,這裡推薦給大家anaconda。因為經過我4年多的嘗試與對比,感覺這款軟體包的安裝更為便捷,擴充套件包的涵蓋範圍與結構更合理。

請你到 這個網址 下載anaconda套裝。下拉網頁找到下載位置。根據你的作業系統型別選擇合適的版本。

如何用Python做詞雲?

因為我的系統是macOS,所以網站直接給我推薦的就是macOS系統版本。但如果你用的是Windows或Linux,請切換到相應的標籤頁上面。

如何用Python做詞雲?

不管你用的是哪個作業系統,請注意右側的兩個按鈕,分別對應Python 2.X和3.X版本。有人一定很納悶,既然有新的版本,我憑什麼用舊的?

不是這樣的。到2020年之前,Python的兩個版本會一直並存。Python的開發者確實希望大家升級切換到3.X版本。可惜目前3.X版本相容的擴充套件包數量比2.X版本要少,尤其是涉及到資料科學類的軟體包,就尤其明顯。所以如果你是初學者,我建議你下載2.X(目前是2.7)版本,這樣在以後的使用中,可能遇到的問題會少一些。等你運用熟練了,再遷移到3.X版本不遲。相信我,到那時你會很快適應新版本的。

下載後,執行安裝檔案就行了。

根據你的電腦執行速度不同,安裝的時間長短不等。耐心點兒,只需要等這一次嘛。

安裝完畢之後,請你安裝一個“現代化”瀏覽器。如果你用的是macOS,那麼系統自帶的Safari就挺好。其他的選擇包括Firefox和Google Chrome。

請安裝上述瀏覽器之一,然後將其設定為系統預設的瀏覽器。

好了,下面請進入命令列模式。

在macOS和Linux下,你需要開啟一個終端(terminal)。

如何用Python做詞雲?

如果是Windows,請開啟“開始”-“附件”-“命令提示符”。

如何用Python做詞雲?

鍵入以下命令:

mkdir demo
cd demo
複製程式碼

好了,你現在有一個專用的目錄,叫做demo了。請到macOS的Finder或者Windows的“我的電腦”裡面,找到這個目錄並且開啟它。

回到終端下面,macOS或者Linux使用者請鍵入以下命令:

pip install wordcloud
複製程式碼

macOS會提示你先安裝XCode命令列工具,你按照預設設定一步步進行就可以了。但是請注意,務必在WiFi環境下安裝。如果你用的是4G流量,那你可要破費一筆了。

如果你用的是Windows,那麼為了使用這個詞雲包,就稍微麻煩一些,你需要到 這裡 下載 wordcloud‑1.3.1‑cp27‑cp27m‑win32.whl 這個檔案。下載後將它拖拽到你的demo目錄裡。

在命令列下,先執行:

pip install wheel
複製程式碼

然後,再執行:

pip install wordcloud‑1.3.1‑cp27‑cp27m‑win32.whl
複製程式碼

好了,我們需要的全部Python執行環境終於裝好了。

請務必按照上述步驟執行,確保每一步都已經順利完成。否則一旦遺漏,後面執行程式會報錯。

資料

詞雲分析的物件,是文字。

理論上講,文字可以是各種語言的。英文、中文、法文、阿拉伯文……

為了簡便,我們這裡以英文文字為例。你可以隨意到網上找一篇英文文章作為分析物件。我特別喜歡英劇"Yes, minister",所以到維基百科上找到了這部劇的介紹詞條。

如何用Python做詞雲?

我把其中的正文文字部分拷貝了下來,儲存為一個文字檔案,叫做yes-minister.txt。

把這個檔案挪動到我們的工作目錄demo裡。

好了,文字資料已經準備好了。開始進入程式設計的魔幻世界吧!

程式碼

在命令列下,執行:

jupyter notebook
複製程式碼

瀏覽器會自動開啟,並且顯示如下介面。

如何用Python做詞雲?

這就是我們們剛才的勞動成果——安裝好的執行環境了。我們還沒有編寫程式,目錄下只有一個剛才生成的文字檔案。

開啟這個檔案,瀏覽一下內容。

如何用Python做詞雲?

回到Jupyter筆記本的主頁面。我們點選New按鈕,新建一個筆記本(Notebook)。在Notebooks裡面,請選擇Python 2選項。

如何用Python做詞雲?

系統會提示我們輸入Notebook的名稱。程式程式碼檔案的名稱,你可以隨便起。但是我建議你起一個有意義的名字,將來好方便查詢。由於我們要嘗試詞雲,就叫它wordcloud好了。

如何用Python做詞雲?

然後就出現了一個空白的筆記本,供我們使用了。我們在網頁裡唯一的程式碼文字框裡,輸入以下3條語句。請務必逐字根據示例程式碼輸入,空格數量都不可以有差別。尤其注意第三行,用4個空格,或者1個Tab開始。輸入後,按Shift+Enter鍵,就可以執行了。

filename = "yes-minister.txt"
with open(filename) as f:
 mytext = f.read()
複製程式碼

沒有任何結果啊。

對,因為我們這裡沒有任何輸出動作,程式只是開啟了你的yes-minister.txt文字檔案,把裡面的內容都讀了出來,儲存到了一個叫做mytext的變數裡面。

然後我們嘗試顯示mytext的內容。輸入以下語句之後,還是得按Shift+Enter鍵,系統才會實際執行該語句。

mytext
複製程式碼

之後的步驟裡,也千萬不要忘了這一確認執行動作。

顯示的結果如下圖所示。

如何用Python做詞雲?

嗯,看來mytext變數裡儲存的文字就是我們從網上摘來的文字。到目前為止,一切正常。

然後我們呼喚(import)詞雲包,利用mytext中儲存的文字內容來製造詞雲。

from wordcloud import WordCloud
wordcloud = WordCloud().generate(mytext)
複製程式碼

這時程式可能會報警。別擔心。警告(warning)不影響程式的正常執行。

如何用Python做詞雲?

此時詞雲分析已經完成了。你沒看錯,製作詞雲的核心步驟只需要這2行語句,而且第一條還只是從擴充套件包裡找外援。但是程式並不會給我們顯示任何東西。

說好了的詞雲呢?折騰了這麼半天,卻啥也沒有,你蒙人嗎?!

別激動。輸入下面4行語句後,就是見證奇蹟發生的時刻了。

%pylab inline
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
複製程式碼

執行結果如圖所示:

如何用Python做詞雲?

不用那麼興奮嘛。

你可以在詞雲圖片上單機滑鼠右鍵,用“圖片另存為”功能匯出。

如何用Python做詞雲?

通過這張詞雲圖,我們可以看到不同單詞和片語出現的頻率高低差別。高頻詞的字型明顯更大,而且顏色也很醒目。值得說明的是,最顯眼的單詞Hacker並不是指黑客,而是指這部劇的主角之一——哈克首相。

包含程式完整程式碼的ipynb檔案,我也分享了出來,你可以從 這裡 下載。

希望你在嘗試過程中一切順利。對自己生成的詞雲圖滿意嗎?如果你不滿意,也不要緊,可以挖掘wordcloud軟體包的其他高階功能。嘗試一下,看自己能不能做出這樣的詞雲圖來?

如何用Python做詞雲?

討論

學完了本方法後,你做出了一張什麼樣的詞雲圖?除了本文介紹的方法以外,你還知道哪些便捷地製作詞雲或其他資訊圖的方式?歡迎留言,分享給大家。我們共同交流討論。

喜歡請點贊。還可以微信關注和置頂我的公眾號“玉樹芝蘭”(nkwangshuyi)

如果你對資料科學感興趣,不妨閱讀我的系列教程索引貼《如何高效入門資料科學?》,裡面還有更多的有趣問題及解法。

相關文章