前言
在大數據時代,你竟然會在網上看到的詞雲,例如這樣的。

看到之后你是什么感覺?想不想自己做一個?
如果你的答案是正確的,那就不要拖延了,現在我們就開始,做一個詞雲分析圖,Python是一個當下很流行的編程語言,你不僅可以用它做數據分析和可視化,還能用來做網站、爬取數據、做數學題、寫腳本替你偷懶……
如果你之前沒有編程基礎,沒關系。希望你不要限於瀏覽,而是親自動手嘗試一番。到完成的那一步,你不僅可以做出第一張詞雲圖,而且這還將是你的第一個有用的編程作品。
安裝wordcloud庫
請確保你的python環境沒有問題,我用的開發工具是VsCode,首先你要在Python擴展中安裝python開發環境(當然,這不是為你的windows安裝python)

那么你還需要安裝所需要的第三方庫,那么在VSCode中並沒有PyCharm那么專業,這里需要獲得你自己的Python腳本位置。

我們可以發現里面有一個名為pip.exe文件,這個文件就是python官方給我們去安裝python第三方庫的一個程序,那么我們可以在VsCode的終端中就可以去通過它,這也是我們為什么要獲取python安裝位置的根本原因。
例如我們安裝WordCloud,我們的操作如下:
pip install WordCloud
數據
這個時候我們就要開始Code了,我們一定需要數據,這里我自己找了一個繞口令,內容如下:
Betty Botter bought some butter but she said the butter's bitter. If I put it in my batter it will make my batter bitter. So, she bought some better butter, better than the bitter butter and she put it in her batter and her batter was not bitter. So 'twas good that Betty Botter bought some better butter.
翻譯: 貝蒂·波特買牛油, 可她說:“牛油是苦的。 不過加上一點好牛油—— 可以使苦牛油更好點。” 於是她買了一點牛油, 比苦牛油好點的牛油。 摻了之后苦牛油真的變的好多了。 所以這就是貝蒂·波特買的一點比苦牛油好點的牛油。
我把其中的文字存儲成了一個文本,叫做minister.txt。
Code
python做詞雲呢,需要導入的包有wordcloud和PIL,其中PIL(Python Image Library)是python平台圖像處理標准庫,功能是真的強大。首先需要讀取文件 。
首先我們要讀取我們的txt文件,那么代碼如下:
from wordcloud import WordCloud import PIL .Image as image with open("F:\minister.txt") as fp: text=fp.read() print(text)
運行腳本結果如下:

接下來導包,我們看看如何生成最簡單的詞雲:
from wordcloud import WordCloud import PIL .Image as image with open("F:\minister.txt") as fp: text=fp.read() #print(text) #將文本放入WordCoud容器對象中並分析 WordCloud = WordCloud().generate(text) image_produce = WordCloud.to_image() image_produce.show()
如果python引入無誤,並代碼無誤,那么會彈出你生成的圖片,該圖片會儲存在你的系統。詳細位置一般為:C:\Users\MACHENIKE\AppData\Local\Temp 中。

帶形狀的詞雲
一般來說,我們不想要這么方的詞雲,肯定喜歡一些有形狀的,
接下來是生成那種有輪廓的詞雲,這里就需要繼續導入其他包,這里導入的包為numpy,numpy系統是python的一種開源的數值計算擴展,這種工具可以用來存儲和處理大型矩陣。這里在處理的時候將給出形狀的圖片表示為一個大型矩陣,再有顏色的地方來進行填詞(導包 :import numpy as np)。導包之后需添加一個遮罩層,遮罩層就是用來限制生成圖片的形狀 。
網上隨便找個圖片放入到項目當中(這里我找的是一個💗),然后開始code:
from wordcloud import WordCloud import PIL .Image as image import numpy as np with open("F:\\minister.txt") as fp: text = fp.read() # print(text) mask = np.array(image.open("F:\\20180612151652413.png")) wordcloud = WordCloud( mask=mask ).generate(text) image_produce = wordcloud.to_image() image_produce.show()
結果如下:

不支持中文的解決方案
我又從網上摘抄了一段文字,文字內容如下:
生活星期天早上和朋友一起聊天,朋友說了一個他們聽過的故事:“一尊佛像前有一條鋪着石板的路,人們每天都踏着這一階一階的石板去膜拜佛像。石階看着人們踏着自己去膜拜佛像,心里很不舒服。石階心里想,自己和佛本來就來自同一塊石頭,為什么自己要成為踏腳石,讓人們踩着自去去膜拜它呢!它對佛抱怨說這樣太不公平!佛像說:這沒有什么不公平,你們成為台階只需挨了四刀,而我是挨了千刀萬剮才成了人們膜拜的佛像。
重新運行,發現雪崩了。
如果需要生成中文的詞雲,還需導入jieba分詞的包。jieba分詞的切分還是蠻准的。
from wordcloud import WordCloud import PIL .Image as image import numpy as np import jieba def trans_CN(text): word_list = jieba.cut(text) # 分詞后在單獨個體之間加上空格 result = " ".join(word_list) return result; with open("F:\\minister.txt") as fp: text = fp.read() text = trans_CN(text) # print(text) mask = np.array(image.open("F:\\20180612151652413.png")) wordcloud = WordCloud( mask=mask, font_path = "C:\\Windows\\Fonts\\msyh.ttc" ).generate(text) image_produce = wordcloud.to_image() image_produce.show()

C盤中有font字體,那么這些呢你可以自己去找,trans_CN方法是分詞用的,通過font-path就可以指定里面的生成文本。這大概就是詞雲的基礎了,可以將爬蟲和詞雲生成結合在一起,在爬取信息之后生成這樣的詞雲。

