Python項(xiàng)目實(shí)戰(zhàn):通過jieba分詞統(tǒng)計(jì)招聘大數(shù)據(jù)幫你找工作.md

前言:

? 一切不經(jīng)過項(xiàng)目驗(yàn)證的代碼都是耍流氓,今天我們就通過一個(gè)簡單的招聘網(wǎng)站的數(shù)據(jù)歸檔(數(shù)據(jù)來源請(qǐng)參考我的上一篇文章)進(jìn)行當(dāng)前熱門崗位的大數(shù)據(jù)分析,最后以wordcloud進(jìn)行顯示。幫你分析一名合格的Python從業(yè)者到底要掌握什么樣的技能。

? 當(dāng)然,這篇文章說是大數(shù)據(jù)是有點(diǎn)嚴(yán)重夸張的,看官勿深糾。

相關(guān)代碼下載地址請(qǐng)見文末

整理歸檔文件

? 上一篇文章中,我們采集了拉勾網(wǎng)的崗位數(shù)據(jù),保存到了代碼目錄的./data中,我們要做的就是對(duì)文件進(jìn)行合并, 當(dāng)然如果你只想了解詞云的使用, 明哥也在代碼中上傳了文本文件,你可以直接跳過這一部分,進(jìn)入讀取文件部分。

我們先新建一個(gè)createTest.py文件,用于將原有的崗位文件進(jìn)行合并。代碼如下:

# -*- coding: utf-8 -*-
# 生成txt文本文章
#author
import os
def file_name(file_dir):
    for root, dirs, files in os.walk(file_dir):
        return files

files = file_name('./data/')

text = ''.join([ open('./data/%s' %f,'r').read() for f in files ]

with open('lagou-job.txt','w+',encoding='utf-8') as lagou:
    lagou.write(text)

關(guān)鍵函數(shù): file_name(),傳入指定目錄文件,返回目錄下的文件名列表,因?yàn)閐ata目錄中我只保存了崗位語言件,所以不需要再進(jìn)行過濾。

text = ''.join([ open('./data/%s' %f,'r').read() for f in files ] 循環(huán)讀出所有的文件,并合并成一個(gè)字符串。

最后寫入到名為lagou-job.txt 文件當(dāng)中。

執(zhí)行命令

python3 createTxt.py

執(zhí)行結(jié)果如下。

img
img

讀取數(shù)據(jù)文件

text=''
with open('./lagou-job.txt','r') as f:
    text=f.read()
    f.close()
print(text[:100])

輸出結(jié)果:
職位描述:崗位職責(zé):1.展開機(jī)器學(xué)習(xí)/深度學(xué)習(xí)等相關(guān)領(lǐng)域研究和開發(fā)工作;2.負(fù)責(zé)從事深度學(xué)習(xí)框架搭建,包括機(jī)器學(xué)習(xí)、圖像處理等的算法和系統(tǒng)研發(fā);3.支持公司相關(guān)產(chǎn)品深度學(xué)習(xí)相關(guān)研究;崗位要求:1.機(jī)器

jieba分詞

上面的輸出結(jié)果肯定不是我們想要的東西,那么我們就要通過第三方模塊“jeba”分詞功能來進(jìn)行處理。

#cell-2
import jieba
words = jieba.lcut(text)
cuted=' '.join(words)
print(cuted[:100])

輸出被空格分開的文本:
崗位職責(zé) : 1 . 參與 分布式 爬蟲 和 數(shù)據(jù) 采集 系統(tǒng) 的 架構(gòu)設(shè)計(jì) 和 開發(fā) ; 2 . 負(fù)責(zé) 網(wǎng)絡(luò) 數(shù)據(jù) 抓取 規(guī)劃 、 清洗 以及 匯總 的 開發(fā) 工作 ;

安裝wordcloud和matplotlib

詞云wordcloud的官方項(xiàng)目地址

推薦直接用pip3 install wordcloud進(jìn)行安裝。

conda的安裝比較慢,一般明哥在安裝的時(shí)候都是搭建一套虛擬環(huán)境,最后用pip進(jìn)行安裝。

如果是conda則要使用-c切換通道為conda-forge,命令是
conda install -c conda-forge wordcloud可能比較慢,耐心等就好。

matplotlib視覺化模塊官方網(wǎng)址
安裝命令pip3 install matplotlibconda install matplotlib。

生成詞云對(duì)象

from wordcloud import WordCloud
fontpath='/System/Library/Fonts/STHeiti Medium.ttc' #當(dāng)前字體文件為MAC下所有,如果WIN環(huán)境下,請(qǐng)?zhí)鎿Q文件路徑

wc = WordCloud(font_path=fontpath,  # 設(shè)置字體
               background_color="white",  # 背景顏色
               max_words=1000,  # 詞云顯示的最大詞數(shù)
               max_font_size=500,  # 字體最大值
               min_font_size=20, #字體最小值
               random_state=42, #隨機(jī)數(shù)
               collocations=False, #避免重復(fù)單詞
               width=1600,height=1200,margin=10, #圖像寬高,字間距,需要配合下面的plt.figure(dpi=xx)放縮才有效
              )
wc.generate(cuted)    

首先,默認(rèn)情況wordcloud是不支持中文顯示的,所以要先添加一個(gè)中文字體文件,一般是.ttf或.ttc格式,你可以使用本機(jī)中文字體進(jìn)行替代,(網(wǎng)上大部分都是收費(fèi),或因版權(quán)問題被下架了)

WordCloud(...)命令包含了很多參數(shù),其中就包含了我們上面設(shè)定的字體路徑font_path。
注意這里width=1600,height=1200,margin=100圖像寬高只是原始圖像的大小,至于后面顯示出來的時(shí)候可能還會(huì)被放縮。它的更多參數(shù)可以查看 wordcloud官方WordCloud方法說明

顯示詞云圖

我們用matplotlib的imshow就是image-show把圖片顯示出來。

import matplotlib.pyplot as plt
plt.figure(dpi=200) #通過這里可以放大或縮小
plt.imshow(wc, interpolation='catrom',vmax=1000)
plt.axis("off") #隱藏坐標(biāo)

可以得到如下圖效果:

img

去除冗余單詞

我們可以利用jieba的del_word方法去掉冗余單詞。

#cell-2
import jieba

removes =['熟悉', '技術(shù)', '經(jīng)驗(yàn)']
for w in removes:
    jieba.del_word(w)
words = jieba.lcut(text)
cuted = ' '.join(words)
print(cuted[:100])

這里用for循環(huán)依次刪除了各個(gè)冗余詞,也可不用for循環(huán),改為lcut之后對(duì)words進(jìn)行處理:

words = jieba.lcut(text)
words = [w for w in words if w not in removes]

整體運(yùn)行,得到下圖:

img

區(qū)分中英文

如果我們只關(guān)注英文技術(shù)點(diǎn),比如python,tensorflow等,那就忽略中文內(nèi)容。
使用正則表達(dá)式來匹配提取哪些由az小寫字母和AZ大寫字母加上0~9數(shù)字組成的單詞。
修改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])

完整執(zhí)行,得到下圖:

img

我們可以從這個(gè)圖中看到人工智能技術(shù)相關(guān)職位所需要的掌握的主要技能。

改變?cè)煨?/h2>

我們讓單詞按照特定的造型來排列。首先我們需要一張?jiān)煨蛨D片,下面是一張AI文字造型圖片,請(qǐng)把它右鍵另存為mask.png文件。

[圖片上傳失敗...(image-9f6c5b-1586125153452)]

前面在wc = WordCloud(font_path=fontpath...中有很多參數(shù)可以設(shè)置,其中就有mask遮罩參數(shù),可以指定一張讀取的圖片數(shù)據(jù),根據(jù)官方說明,這個(gè)數(shù)據(jù)應(yīng)該是nd-array格式,這是一個(gè)多維數(shù)組格式(N-dimensional Array)。

我們使用PIL模塊中的Image.open('...')可以讀取圖片,然后利用numpy來轉(zhuǎn)換為nd-arry格式。
修改cell-3,讀取圖片并增加mask參數(shù):

#cell-3
from wordcloud import WordCloud
fontpath='SourceHanSansCN-Regular.otf'

import numpy as np
from PIL import Image
aimask=np.array(Image.open("mask.png"))

wc = WordCloud(font_path=fontpath,  # 設(shè)置字體
               background_color="white",  # 背景顏色
               max_words=1000,  # 詞云顯示的最大詞數(shù)
               max_font_size=100,  # 字體最大值
               min_font_size=5, #字體最小值
               random_state=42, #隨機(jī)數(shù)
               collocations=False, #避免重復(fù)單詞
               mask=aimask, #造型遮蓋
               width=1600,height=1200,margin=2, #圖像寬高,字間距,需要配合下面的plt.figure(dpi=xx)放縮才有效
              )
wc.generate(cuted)  

完整執(zhí)行后得到下圖:

img

可以看到原本圖片上白色的部分被留空,有顏色的部分才會(huì)放置單詞。

改進(jìn)顏色

默認(rèn)情況圖片上文字的顏色都是隨機(jī)的,我們可以使用圖片來控制文字的顏色。

WordCloud方法提供了一個(gè)color_func顏色函數(shù)的參數(shù),用一個(gè)函數(shù)來改變每個(gè)詞的顏色,在這里我們直接使用上面深色的AI圖片顏色來控制。

from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
fontpath='/System/Library/Fonts/STHeiti Medium.ttc'

import numpy as np
from PIL import Image
aimask=np.array(Image.open("mask.png"))

genclr=ImageColorGenerator(aimask)

wc = WordCloud(font_path=fontpath,  # 設(shè)置字體
               background_color="white",  # 背景顏色
               max_words=1000,  # 詞云顯示的最大詞數(shù)
               max_font_size=100,  # 字體最大值
               min_font_size=5, #字體最小值
               random_state=42, #隨機(jī)數(shù)
               collocations=False, #避免重復(fù)單詞
               mask=aimask, #造型遮蓋
               color_func=genclr,
               width=1600,height=1200,margin=2, #圖像寬高,字間距,需要配合下面的plt.figure(dpi=xx)放縮才有效
              )
wc.generate(cuted)    

在上面,我們引入了from wordcloud import ImageColorGenerator方法,它是直接用來生成一個(gè)color_func顏色函數(shù)的,它括號(hào)里需要一個(gè)nd-array多維數(shù)組的圖像,恰好我們上面的aimask就是這個(gè)格式,直接用就可以。

重新運(yùn)行得到最開始看到的圖,
和原圖對(duì)比,就能看到文字顏色的規(guī)律了:

img

匯總

  1. 生成文件
  2. 讀取文件
  3. jieba分詞
  4. 利用re正則表達(dá)式選出英文單詞
  5. 生成詞云對(duì)象,利用圖片遮罩形狀和改變顏色
  6. 使用Matplotlib來顯示圖片

作者相關(guān):

博客新浪微博、簡書微信

本系列教程及源碼地址:點(diǎn)擊訪問

最后:如果你正在學(xué)習(xí)Python的路上,或者準(zhǔn)備打算學(xué)習(xí)Python、明哥會(huì)陪著你陪你一起共同進(jìn)步!

手打不易,有用的話,請(qǐng)記得關(guān)注轉(zhuǎn)發(fā)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容