0112編程-職友集數(shù)據(jù)分析-plotly-jieba-wordcloud

點(diǎn)擊這里進(jìn)入人工智能嘚吧嘚目錄蝠检,觀看全部文章


上一篇介紹了職友集職位數(shù)據(jù)的網(wǎng)頁(yè)源碼文件的爬取辣苏,得到了170個(gè)網(wǎng)頁(yè)。
這篇文章將介紹如何從網(wǎng)頁(yè)數(shù)據(jù)中解析數(shù)據(jù)摧茴,并進(jìn)行可視化展示绵载。

從文件夾中讀取數(shù)據(jù)

#讀取所有文件列表
import os
keyw='python'
files=os.listdir('/Users/zhyuzh/Desktop/Jupyter/tutor/jobui/{}/'.format(keyw))
#files=os.listdir(r'C:\user\...\{}'.format(keyw)) #win下注意用r轉(zhuǎn)義,不要用斜杠結(jié)尾
files

files的結(jié)果大致如下:


讀取一個(gè)文件提取職位數(shù)據(jù)苛白,轉(zhuǎn)化為dict字段

readjob函數(shù)接收一個(gè)fname參數(shù)尘分,就是上面files列表的單個(gè)元素。
讀取html文件數(shù)據(jù)丸氛,用BeautifulSoup解析培愁,提取職位標(biāo)題title、城市city缓窜、pay薪資定续,details詳情等信息,并把薪資拆分為起薪pay_low和上限pay_hig兩個(gè)數(shù)值禾锤。
注意這里使用了find私股、find_all、contents恩掷、text等方法
函數(shù)最后返回整個(gè)job的字典對(duì)象倡鲸。

#讀取一個(gè)文件,返回一個(gè)job字典
from bs4 import BeautifulSoup

def readjob(fname):
    with open('./jobui/{}/{}'.format(keyw,fname),'r') as f: #'r'在win下改為‘rb',byte
        html=f.read()
        #html=html.decode('utf-8') #win下打開(kāi)此行
        soup=BeautifulSoup(html)       

        jobtag=soup.find('div','jk-box jk-matter j-job-detail')
        title=jobtag.find('h1',{'title':True}).text
        city=jobtag.find('ul').find_all('li')[0].contents[1]      
               
        pay=jobtag.find('span','fs16 fwb f60').text        
        pay_li=pay.replace('¥','').split('-')
        pay_low=pay_li[0].strip()
        pay_hig=pay_li[0].strip() if len(pay_li)>1 else pay_low
        
        details=jobtag.find('div','hasVist cfix sbox fs16').text.strip()
        
        job={
            'title':title,
            'city':city,
            'pay_low':pay_low,
            'pay_hig':pay_hig,
            'details':details
        }
        
        return job

將所有文件轉(zhuǎn)為job字典黄娘,并放入jobs_all列表

注意由于原本職友集網(wǎng)站的職位列表頁(yè)面就有一些第三方廣告的招聘職位峭状,這樣職位的鏈接link也之前被我們存儲(chǔ)到了文件夾中,但實(shí)際上這些第三方的頁(yè)面完全與職友集標(biāo)準(zhǔn)的職位詳情頁(yè)面不同逼争,我們的readjob函數(shù)也無(wú)法解析优床,所以使用try...except...方法避免因?yàn)槌鲥e(cuò)而終止。

jobs_all=[]
for file in files:
    try:
        job=readjob(file)
        jobs_all.append(job)
    except:
        print('Err:',file)
print('OK!')

這時(shí)候所有職位信息都已經(jīng)放入jobs_all列表誓焦,共有上百個(gè)元素胆敞,它看起來(lái)這樣:


從jobs_all統(tǒng)計(jì)城市分布

#統(tǒng)計(jì)城市
cityjobs={}
for job in jobs_all:
    city=job['city']
    city=city.split('-')[0]
    if city in cityjobs:
        cityjobs[city]+=1
    else:
        cityjobs[city]=1
cityjobs

cityjobs看起來(lái)這樣:


使用plotly畫圖表

使用Anaconda的prompt工具,輸入命令conda install plotly安裝plotly杂伟。
柱狀圖

import plotly.offline as py
import plotly.graph_objs as go
py.init_notebook_mode()
citydata=go.Bar(
    x=[key for key in cityjobs],
    y=[cityjobs[k] for k in cityjobs]
)
f = go.FigureWidget([citydata])
f

生成圖如下:


餅狀圖

citydata_pie=go.Pie(
    labels=[key for key in cityjobs],
    values=[cityjobs[k] for k in cityjobs]
)
f = go.FigureWidget([citydata_pie])
f

生成圖如下:


使用結(jié)巴切詞

使用Anaconda的prompt工具移层,輸入命令conda install -c conda-forge jieba安裝jieba中英文分詞工具。

import jieba
text=' '.join([job['details'].replace('\n','') for job in jobs_all])
seg_list = jieba.cut(text, cut_all=False)
' ' .join(seg_list)

輸出的切詞結(jié)果如下:


使用正則表達(dá)式過(guò)濾掉中文:

import re
pattern = re.compile(r'^[a-zA-Z0-1]+$')
words = [w for w in seg_list if pattern.match(w)]
cuted = ' '.join(words)
print(cuted)

輸出結(jié)果如下:


使用wordcloud生成詞云

使用Anaconda的prompt工具赫粥,輸入命令conda install -c conda-forge wordcloud安裝詞云工具观话。
需要下載字體文件并放到代碼文件一起,思源中文字體,點(diǎn)擊可以直接下載使用

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

wc = WordCloud(
    max_font_size=500,
    min_font_size=20,
    width=1600,  #圖像寬度
    height=1200, #圖像高度
    font_path=fontpath, #字體文件要放在和代碼一起
    background_color='white',
    collocations=False,
    margin=20
)
wc.generate(cuted)

使用Matplotlib顯示圖片:

import matplotlib.pyplot as plt
plt.figure(dpi=120)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')

最后輸出結(jié)果:


關(guān)于pay薪資的數(shù)據(jù)處理

因?yàn)樾劫Y可能是4000~6000傅是,也可能是4k~6k或者1.2~2.4萬(wàn)/月之類匪燕,所以要進(jìn)行處理蕾羊,根據(jù)實(shí)際需要可能有不同喧笔,下面代碼僅供參考:

import re
jobs=[{'pay_low':'1.2','pay_hig':'1.5萬(wàn)/月'},{'pay_low':'4.5','pay_hig':'6k'}]
for job in jobs:
    if job['pay_hig'].find('萬(wàn)')!=-1:#包含萬(wàn)
        job['pay_hig']=re.compile('[0-9\.]+').findall(job['pay_hig'])[0] #提取數(shù)字和小數(shù)點(diǎn)
        job['pay_hig']=str(int(float(job['pay_hig'])*10000))
        job['pay_low']=str(int(float(job['pay_low'])*10000))
    if job['pay_hig'].find('k')!=-1 or job['pay_hig'].find('千')!=-1:#包含千
        job['pay_hig']=re.compile('[0-9\.]+').findall(job['pay_hig'])[0] #提取數(shù)字和小數(shù)點(diǎn)
        job['pay_hig']=str(int(float(job['pay_hig'])*1000))
        job['pay_low']=str(int(float(job['pay_low'])*1000))   
jobs

輸出:


幾點(diǎn)說(shuō)明:

  • '1.3萬(wàn)/月'.find('萬(wàn)')返回3帽驯,即第三個(gè)位置找到萬(wàn)字,如果找不到就返回-1
  • re.compile('[0-9\.]+').findall('1.3萬(wàn)/月')可以得到['1.3']书闸。
  • str(int(float('1.3')*1000))得到字符串'1300'

關(guān)于windows和mac的python文件讀寫編碼的不同請(qǐng)參照這里


點(diǎn)擊這里進(jìn)入人工智能DBD嘚吧嘚目錄尼变,觀看全部文章


每個(gè)人的智能新時(shí)代

如果您發(fā)現(xiàn)文章錯(cuò)誤,請(qǐng)不吝留言指正浆劲;
如果您覺(jué)得有用嫌术,請(qǐng)點(diǎn)喜歡;
如果您覺(jué)得很有用牌借,歡迎轉(zhuǎn)載~


END

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末度气,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子膨报,更是在濱河造成了極大的恐慌磷籍,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件现柠,死亡現(xiàn)場(chǎng)離奇詭異院领,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)够吩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門比然,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人周循,你說(shuō)我怎么就攤上這事强法。” “怎么了湾笛?”我有些...
    開(kāi)封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵拟烫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我迄本,道長(zhǎng)硕淑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任嘉赎,我火速辦了婚禮置媳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘公条。我一直安慰自己拇囊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布靶橱。 她就那樣靜靜地躺著寥袭,像睡著了一般路捧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上传黄,一...
    開(kāi)封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天杰扫,我揣著相機(jī)與錄音,去河邊找鬼膘掰。 笑死章姓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的识埋。 我是一名探鬼主播凡伊,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窒舟!你這毒婦竟也來(lái)了系忙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惠豺,失蹤者是張志新(化名)和其女友劉穎银还,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體耕腾,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡见剩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扫俺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苍苞。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖狼纬,靈堂內(nèi)的尸體忽然破棺而出羹呵,到底是詐尸還是另有隱情,我是刑警寧澤疗琉,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布冈欢,位于F島的核電站,受9級(jí)特大地震影響盈简,放射性物質(zhì)發(fā)生泄漏凑耻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一柠贤、第九天 我趴在偏房一處隱蔽的房頂上張望香浩。 院中可真熱鬧,春花似錦臼勉、人聲如沸邻吭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)囱晴。三九已至膏蚓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畸写,已是汗流浹背驮瞧。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艺糜,地道東北人剧董。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓幢尚,卻偏偏與公主長(zhǎng)得像破停,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尉剩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容