資料分析-視覺化-wordcloud詞雲
ofollow,noindex">智慧決策上手系列教程索引

image.png
我們使用已經合併在一起的拉勾網數百個職位招聘詳情檔案來進行這個練習。
百度雲下載檔案 密碼:bvb8
讀取檔案
讀取並打印出前面100個字元
text='' with open('./lagou-job1000-ai-details.txt','r') as f: text=f.read() f.close() print(text[:100])
輸出
職位描述:崗位職責:1.展開機器學習/深度學習等相關領域研究和開發工作;2.負責從事深度學習框架搭建,包括機器學習、影象處理等的演算法和系統研發;3.支援公司相關產品深度學習相關研究;崗位要求:1.機器
jieba分詞
#cell-2 import jieba words = jieba.lcut(text) cuted=' '.join(words) print(cuted[:100])
輸出被空格分開的文字:
職位 描述 : 崗位職責 : 1 . 展開 機器 學習 / 深度 學習 等 相關 領域 研究 和 開發 工作 ; 2 . 負責 從事 深度 學習 框架 搭建 , 包括 機器 學習 、 影象處理 等 的
安裝wordcloud和matplotlib
推薦直接用 pip3 install wordcloud
進行安裝。
如果是conda則要使用-c切換通道為conda-forge,命令是
conda install -c conda-forge wordcloud
可能比較慢,耐心等就好。
安裝命令 pip3 install matplotlib
或 conda install matplotlib
。
生成詞雲物件
#cell-3 from wordcloud import WordCloud fontpath='SourceHanSansCN-Regular.otf' wc = WordCloud(font_path=fontpath,# 設定字型 background_color="white",# 背景顏色 max_words=1000,# 詞雲顯示的最大詞數 max_font_size=500,# 字型最大值 min_font_size=20, #字型最小值 random_state=42, #隨機數 collocations=False, #避免重複單詞 width=1600,height=1200,margin=10, #影象寬高,字間距,需要配合下面的plt.figure(dpi=xx)放縮才有效 ) wc.generate(cuted)
首先,預設情況wordcloud是不支援中文顯示的,所以要先新增一箇中文字型檔案,一般是 .ttf或.otf
格式,你可以從網上搜索‘字型下載’找到想要的字型。上面程式碼中使用的是 IOS-uZRw" target="_blank" rel="nofollow,noindex">思源中文字型,點選可以直接下載使用
WordCloud(...)
命令包含了很多引數,其中就包含了我們上面設定的字型路徑 font_path
。
注意這裡 width=1600,height=1200,margin=100
影象寬高只是原始影象的大小,至於後面顯示出來的時候可能還會被放縮。它的更多引數可以檢視下面連結 wordcloud官方WordCloud方法說明
顯示詞雲圖
我們用matplotlib的imshow就是image-show把圖片顯示出來。
#cell-4 import matplotlib.pyplot as plt plt.figure(dpi=100) #通過這裡可以放大或縮小 plt.imshow(wc, interpolation='catrom',vmax=1000) plt.axis("off") #隱藏座標
可以得到如下圖效果:

image.png
去除冗餘單詞
我們可以利用jieba的del_word功能去掉冗餘單詞。
修改cell-2程式碼:
#cell-2 import jieba removes =['熟悉', '技術', '職位', '相關', '工作', '開發', '使用','能力','優先','描述','任職'] for w in removes: jieba.del_word(w) words = jieba.lcut(text) cuted = ' '.join(words) print(cuted[:100])
這裡用for迴圈依次刪除了各個冗餘詞,也可不用for迴圈,改為lcut之後對words進行處理:
words = jieba.lcut(text) words = [w for w in words if w not in removes]
整體執行,得到下圖:

image.png
區分中英文
如果我們只關注英文技術點,比如python,tensorflow等,那就忽略中文內容。
使用正則表示式來匹配提取哪些由a z小寫字母和A Z大寫字母加上0~9數字組成的單詞。
修改cell-2如下:
#cell-2 import jieba words = jieba.lcut(text) import re pattern = re.compile(r'^[a-zA-Z0-1]+$') words = [w for w in words if pattern.match(w)] cuted = ' '.join(words) print(cuted[:100])
完整執行,得到下圖:

image.png
我們可以從這個圖中看到人工智慧技術相關職位所需要的掌握的主要技能。
改變造型
我們讓單詞按照特定的造型來排列。首先我們需要一張造型圖片,下面是一張AI文字造型圖片,請把它右鍵另存為 ai-mask.png
檔案。

image.png
前面在 wc = WordCloud(font_path=fontpath...
中有很多引數可以設定,其中就有mask遮罩引數,可以指定一張讀取的圖片資料,根據官方說明,這個資料應該是 nd-array
格式,這是一個多維陣列格式(N-dimensional Array)。
我們使用PIL模組中的Image.open('...')可以讀取圖片,然後利用numpy來轉換為 nd-arry
格式。
修改cell-3,讀取圖片並增加mask引數:
#cell-3 from wordcloud import WordCloud fontpath='SourceHanSansCN-Regular.otf' import numpy as np from PIL import Image aimask=np.array(Image.open("ai-mask.png")) wc = WordCloud(font_path=fontpath,# 設定字型 background_color="white",# 背景顏色 max_words=1000,# 詞雲顯示的最大詞數 max_font_size=100,# 字型最大值 min_font_size=5, #字型最小值 random_state=42, #隨機數 collocations=False, #避免重複單詞 mask=aimask, #造型遮蓋 width=1600,height=1200,margin=2, #影象寬高,字間距,需要配合下面的plt.figure(dpi=xx)放縮才有效 ) wc.generate(cuted)
完整執行後得到下圖:

image.png
可以看到原本圖片上白色的部分被留空,有顏色的部分才會放置單詞。
改進顏色
預設情況圖片上文字的顏色都是隨機的,我們可以使用圖片來控制文字的顏色。
WordCloud
方法提供了一個color_func顏色函式的引數,用一個函式來改變每個詞的顏色,在這裡我們直接使用上面深色的AI圖片顏色來控制。
from wordcloud import WordCloud from wordcloud import ImageColorGenerator fontpath='SourceHanSansCN-Regular.otf' import numpy as np from PIL import Image aimask=np.array(Image.open("ai-mask.png")) genclr=ImageColorGenerator(aimask) wc = WordCloud(font_path=fontpath,# 設定字型 background_color="white",# 背景顏色 max_words=1000,# 詞雲顯示的最大詞數 max_font_size=100,# 字型最大值 min_font_size=5, #字型最小值 random_state=42, #隨機數 collocations=False, #避免重複單詞 mask=aimask, #造型遮蓋 color_func=genclr, width=1600,height=1200,margin=2, #影象寬高,字間距,需要配合下面的plt.figure(dpi=xx)放縮才有效 ) wc.generate(cuted)
在上面,我們引入了 from wordcloud import ImageColorGenerator
方法,它是直接用來生成一個 color_func
顏色函式的,它括號裡需要一個nd-array多維陣列的影象,恰好我們上面的aimask就是這個格式,直接用就可以。
重新執行得到最開始看到的圖,
和原圖對比,就能看到文字顏色的規律了:

image.png
彙總
- 讀取檔案
- jieba分詞
- 利用re正則表示式選出英文單詞
- 生成詞雲物件,利用圖片遮罩形狀和改變顏色
- 使用Matplotlib來顯示圖片
完整程式碼如下:
#cell-1 text='' with open('./lagou-job1000-ai-details.txt','r') as f: text=f.read() f.close() print(text[:100]) #cell-2 import jieba words = jieba.lcut(text) import re pattern = re.compile(r'^[a-zA-Z0-1]+$') words = [w for w in words if pattern.match(w)] cuted = ' '.join(words) print(cuted[:500]) #cell-3 from wordcloud import WordCloud from wordcloud import ImageColorGenerator fontpath='SourceHanSansCN-Regular.otf' import numpy as np from PIL import Image aimask=np.array(Image.open("ai-mask.png")) genclr=ImageColorGenerator(aimask) wc = WordCloud(font_path=fontpath,# 設定字型 background_color="white",# 背景顏色 max_words=1000,# 詞雲顯示的最大詞數 max_font_size=100,# 字型最大值 min_font_size=5, #字型最小值 random_state=42, #隨機數 collocations=False, #避免重複單詞 mask=aimask, #造型遮蓋 color_func=genclr, width=1600,height=1200,margin=2, #影象寬高,字間距,需要配合下面的plt.figure(dpi=xx)放縮才有效 ) wc.generate(cuted) #cell-4 import matplotlib.pyplot as plt plt.figure(dpi=150) #通過這裡可以放大或縮小 plt.imshow(wc, interpolation='catrom',vmax=1000) plt.axis("off") #隱藏座標
智慧決策上手系列教程索引
每個人的智慧決策新時代
如果您發現文章錯誤,請不吝留言指正;
如果您覺得有用,請點喜歡;
如果您覺得很有用,歡迎轉載~
END