碎碎念:
數(shù)據(jù)分析、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)舵稠、神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)入宦,這些五花八門(mén)的名詞貌似逼格滿滿哺徊, 初入門(mén)的新手(譬如我就是)很容易被高大上的詞匯吸引但又不知如何靜下心來(lái)入門(mén)和學(xué)習(xí)、暈頭轉(zhuǎn)向云石。 此篇是利用Excel進(jìn)行智聯(lián)招聘職位分析的第一篇唉工,讓我門(mén)看看如何分析研乒,能分析出哪些有意思的東西汹忠。 還有一篇姊妹篇,用同樣的數(shù)據(jù)進(jìn)行分析、不過(guò)用的是Python中的Pandas和Matplotlib而不是Excel宽菜。敬請(qǐng)期待谣膳!
數(shù)據(jù)來(lái)源:
Python爬蟲(chóng)爬取了智聯(lián)招聘關(guān)鍵詞:【Python】、全國(guó)30個(gè)主要城市的搜索結(jié)果铅乡。
數(shù)據(jù)存儲(chǔ)到本地MySql和MongoDB服務(wù)器上继谚。從服務(wù)器上導(dǎo)出文件、用Python的Pandas庫(kù)簡(jiǎn)單處理后保存為本地excel阵幸。
A.使用的軟件:
Excel-2011花履,Python-3.6,Mysql-5.7(macOS系統(tǒng))
B.前期準(zhǔn)備:
將Mysql里的數(shù)據(jù)導(dǎo)出到本地JSON文件挚赊,用Python的Pandas庫(kù)讀取JSON文件并進(jìn)行簡(jiǎn)單的格式處理之后用to_excel() 方法保存至本地.xls的Excel文件诡壁。
#在終端輸入ipython --pylab進(jìn)入ipython的界面
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_json('/Users/zhaoluyang/Desktop/Python_全國(guó)JSON.json')
df.info()
通過(guò)http://df.info()可以看見(jiàn):
df是一個(gè)pandas里的DataFrame格式的文件,類似于excel中的表格荠割,本質(zhì)是一個(gè)方便處理的二維數(shù)組妹卿。 整個(gè)df中有18326行數(shù)據(jù)、15列蔑鹦,其中ZL_Job_id一列是mysql中我添加的id標(biāo)記夺克。
Int64Index: 18326 entries, 0 to 18325表示pandas給我的數(shù)據(jù)自動(dòng)添加了int64類型的索引,從0-18325. 再通過(guò)df[['ZL_Job_id','公司名稱']].head()看看前5行的信息(因?yàn)?5列不方便閱讀嚎朽,所以只看前兩列的)
可以看到ZL_Job_id序號(hào)很混亂铺纽,而且左邊自動(dòng)添加的索引不匹配。那么現(xiàn)在問(wèn)題來(lái)了哟忍。我需要給 ZL_Job_id一列重新遞增排序室囊,然后用此列替換掉左邊的默認(rèn)索引。
我就直接擺代碼了:
df.index = df['ZL_Job_id']
del(df['ZL_Job_id'])
df1 = df.sort_index()
df = df1
好了魁索,現(xiàn)在可以導(dǎo)出格式比較規(guī)整的數(shù)據(jù)了融撞。
df.to_excel('/Users/zhaoluyang/Desktop/Python_nation.xls')
打開(kāi)文件看看導(dǎo)出的是否正確?看了一下粗蔚,應(yīng)該是沒(méi)問(wèn)題的尝偎!
前期準(zhǔn)備:
1.分析的目的:
A.希望通過(guò)對(duì)全國(guó)30個(gè)主要城市招聘Python相關(guān)的職位,來(lái)看看最近很火的Python到底待遇如何鹏控?工資水平怎么樣致扯? 對(duì)工作經(jīng)驗(yàn)和學(xué)歷有什么要求?需要掌握的崗位技能有哪些当辐?各個(gè)城市比較下抖僵、平均下?
B.其實(shí)想怎么分析缘揪,完全是隨個(gè)人喜好的耍群,譬如還可以分析下全國(guó)所有的公司义桂、看看哪個(gè)招聘的數(shù)量最多? (還可以畫(huà)個(gè)逼格滿滿的基于地理位置的密度圖)分析下公司給開(kāi)出的平均薪水蹈垢,看看哪個(gè)公司最慷慨慷吊? 將崗位職責(zé)的描述用python分詞處理、再統(tǒng)計(jì)詞頻看看哪些名稱經(jīng)常出現(xiàn)曹抬、再生成個(gè)詞云圖玩玩溉瓶?
C.本次分析主要通過(guò)Excel,大概的過(guò)程講解和流程梳理谤民,最后通過(guò)Excel里的圖表進(jìn)行數(shù)據(jù)呈現(xiàn)堰酿。
2.數(shù)據(jù)清洗:
看著excel,有沒(méi)有發(fā)現(xiàn)全是文字张足?包括職位月薪也是很不規(guī)則的胞锰?6000-8000元/月、面議..我想要的是純粹的數(shù)字如:6000兢榨、8000嗅榕。工作地點(diǎn)也是五花八門(mén)的,明明都是蘇州吵聪,還分了蘇州-工業(yè)園區(qū)凌那,蘇州-姑蘇區(qū),這樣子待會(huì)我統(tǒng)計(jì)城市的時(shí)候是不是很不友好吟逝?帽蝶! 哎,都是坑块攒!
為此励稳,需要做數(shù)據(jù)清洗的工作:
A.將【職位月薪】列細(xì)化,新增3列【bottom】【top】【平均月薪】囱井。
【bottom】表示最低月薪驹尼,【top】表示最高月薪,【平均月薪】則為中間值庞呕。譬如原來(lái)職位月薪是6000-8000元/月的新翎,bottmm=6000,top=8000住练,平均月薪=7000地啰;原來(lái)職位月薪是面議的,bottom=top=平均月薪=面議讲逛。
B.將【工作地點(diǎn)】列細(xì)化亏吝,新增一列【工作城市】。 譬如不論工作地點(diǎn)是蘇州還是蘇州-工業(yè)園區(qū)盏混,蘇州-姑蘇區(qū)蔚鸥,【工作城市】一列統(tǒng)統(tǒng)=蘇州惜论。
要想清洗以上數(shù)據(jù)、用excel的公式還是比較方便的株茶,我單獨(dú)把【職位月薪】和【工作地點(diǎn)】?jī)闪心昧顺鰜?lái)来涨,構(gòu)造了新的測(cè)試表如下:
“平均月薪”列很好計(jì)算图焰,主要bottom和top都完成以后直接(top+bottom)/2就好启盛,暫時(shí)忽略此列,讓我們看看怎么得到【bottom】列技羔?如果【職位月薪】=面議僵闯,那么bottom也=面議,否則bottom的值在“-”的前半部分藤滥,好了鳖粟,一個(gè)嵌套的IF函數(shù)就可以解決。讓我們?cè)贑3單元格寫(xiě)如下的表達(dá)式:
【bottom】:
=IF(A3="面議";"面議";LEFT(A3;FIND("-";A3;1)-1))
函數(shù)表達(dá)式的語(yǔ)法和對(duì)應(yīng)解釋:
IF(表達(dá)式拙绊;返回結(jié)果a;返回結(jié)果b)向图;
如果表達(dá)式成立,則返回結(jié)果a标沪,否則返回結(jié)果b期奔。
LEFT(text瘩例;字符個(gè)數(shù)num);
返回一段text文本中,從左起小渊,指定個(gè)數(shù)的字符。
譬如text=“數(shù)據(jù)分析工程師”LEFT(text;4)的結(jié)果:“數(shù)據(jù)分析”
FIND(text辱士;目標(biāo)text契邀;起始位數(shù))
查找一段text在目標(biāo)文本text中的起始位置。
譬如text=“工資”趁曼,目標(biāo)text=“數(shù)據(jù)分析工程師的工資有多少”军浆,F(xiàn)IND(text;目標(biāo)text挡闰;5)
從目標(biāo)text字符串中的第5位開(kāi)始查找瘾敢,查找“工資”在目標(biāo)text出現(xiàn)的位置,結(jié)果:9.
讓我們回到表達(dá)式IF(A3="面議";"面議";LEFT(A3;FIND("-";A3;1)-1))尿这,表達(dá)式的自然語(yǔ)言大意是:如果表達(dá)式A3="面議"成立簇抵,那么返回結(jié)果a,對(duì)應(yīng)的就是字符“面議”射众;不成立碟摆,則返回結(jié)果b。結(jié)果b=表達(dá)式LEFT(A3;FIND("-";A3;1)-1)叨橱,可以返回A3單元格中文本從左起到第【FIND("-";A3;1)-1】位的字符,FIND("-";A3;1)就是查找“-”字符在A3中文本位置的數(shù)值典蜕,減1表示前一位断盛。
寫(xiě)了這么多感覺(jué)很啰嗦,反而容易讓人看暈愉舔,所以就不詳細(xì)解釋各個(gè)公式的用法了钢猛!其實(shí)很簡(jiǎn)單,用到的時(shí)候自己在excel里試試轩缤,百度一下各個(gè)函數(shù)具體的用法命迈,練兩次就會(huì)用了!;鸬摹壶愤!
【top】列的公式:
=IF(A3="面議";"面議";MID(A3;FIND("-";A3;1)+1;LEN(A3)-LEN(B3)-4))
【平均月薪】列的公式:
=IF(A3="面議";"面議";(B3+C3)/2)
【工作地點(diǎn)】列的公式:
=IF(ISERROR(FIND("-";E3;1));E3;LEFT(E3;FIND("-";E3;1)-1))
最后,將excel公式套到原文件中馏鹤,構(gòu)造出可用的數(shù)據(jù)征椒,至此數(shù)據(jù)清洗的工作暫時(shí)告一段落了!
分析過(guò)程和結(jié)果:
打開(kāi)Excel表湃累,除了具體的公司和職位名稱以外勃救,我們還比較關(guān)心幾個(gè)關(guān)鍵詞:平均月薪、工作經(jīng)驗(yàn)治力、工作城市蒙秒、最低學(xué)歷和崗位職責(zé)描述,這里崗位職責(zé)描述以后會(huì)用python分詞做詞云圖琴许,所以目前篩選出【平均月薪】税肪、【工作經(jīng)驗(yàn)】、【工作城市】榜田、【最低學(xué)歷】這四個(gè)標(biāo)簽益兄,這些標(biāo)簽可以兩兩組合產(chǎn)生各種數(shù)據(jù)。譬如我想知道各個(gè)城市的招聘數(shù)量分布情況箭券,會(huì)不會(huì)大部分的工作機(jī)會(huì)都集中在北上廣深净捅?是不是北上廣深的平均工資也高于其他城市?我想知道Python這個(gè)關(guān)鍵詞的18000多條招聘數(shù)據(jù)中對(duì)學(xué)歷的要求和對(duì)工作經(jīng)驗(yàn)的要求辩块,以及它們分別占比多少蛔六?我還想知道平均月薪和工作經(jīng)驗(yàn)的關(guān)系?最低學(xué)歷和平均月薪的關(guān)系废亭?---------好国章,讓我們一個(gè)個(gè)來(lái)。
1.各個(gè)城市職位數(shù)量及分布
根據(jù)猜想北上廣深杭一定占據(jù)了Pyhton這個(gè)關(guān)鍵詞下大部分的工作機(jī)會(huì)豆村,會(huì)不會(huì)符合28定律液兽?20%的城市占據(jù)了80%的崗位?有可能掌动!用Eecel數(shù)據(jù)透視表篩選出【工作城市】作為行標(biāo)簽四啰、【職位鏈接】為計(jì)數(shù)字段宁玫,然后行標(biāo)簽中將無(wú)關(guān)的雜項(xiàng)城市和found no element字段刪除,篩選出有效職位鏈接18170條柑晒。
用柱形圖和餅圖作圖:
可見(jiàn)果然Python這個(gè)關(guān)鍵詞下的職位欧瘪,北、上匙赞、深佛掖、杭、廣占據(jù)了不小的比重罚屋!這5個(gè)城市占據(jù)了全國(guó)68%的職位數(shù)量苦囱!令人意外的是北京的工作機(jī)會(huì)領(lǐng)先第二名上海不少嗅绸,果然是帝都脾猛!杭州表現(xiàn)亮眼,超越了廣州鱼鸠,這個(gè)和阿里巴巴對(duì)杭州互聯(lián)網(wǎng)文化的貢獻(xiàn)應(yīng)該有很大關(guān)系猛拴!北上廣深航+成都、南京蚀狰、鄭州愉昆,這8個(gè)城市占據(jù)了中國(guó)80%的工作機(jī)會(huì)!剩下的22個(gè)城市合起來(lái)只占據(jù)了20%
2.工作經(jīng)驗(yàn)-職位數(shù)量及分布
Python雖然是一名比較老的語(yǔ)言麻蹋,但是在人們的印象中火起來(lái)也就最近幾年跛溉,Python相關(guān)的工作對(duì)于【工作經(jīng)驗(yàn)】是怎樣要求的呢?讓我們來(lái)看看扮授!數(shù)據(jù)篩選的時(shí)候過(guò)濾掉了一些很少量的標(biāo)簽譬如“5年以上”芳室,“2年以上”,“1-2年”刹勃,“1年以上”等堪侯,這些標(biāo)簽下職位的數(shù)量都在10以內(nèi),不太具備統(tǒng)計(jì)意義荔仁,篩選后共計(jì)18215個(gè)職位伍宦。
篩選字段數(shù)據(jù)透視以后總共得到18215條職位。從直方圖里可以明顯看出工作機(jī)會(huì)集中與“不限”乏梁、1-3年次洼、3-5年,看來(lái)即使是初入門(mén)者遇骑,大家的機(jī)會(huì)也還是有不少的卖毁!其中“不限”占比34%,1-3年占比27%质蕉,再加上1年以下势篡、無(wú)經(jīng)驗(yàn)的翩肌,匯總可發(fā)現(xiàn)工作經(jīng)驗(yàn)要求3年以內(nèi)的占比64%!果不其然禁悠!
3.工作經(jīng)驗(yàn)-平均月薪
這個(gè)嘛念祭,大家閉著眼都能想到!肯定是工作經(jīng)驗(yàn)越久的拿錢越多了碍侦!再猜猜粱坤?無(wú)經(jīng)驗(yàn)的和5-10年經(jīng)驗(yàn)的收入差距有多大?這個(gè)瓷产,嘿嘿就不好猜了U拘!
由于樣本數(shù)量原因“1年以下”濒旦、“3年以上”株旷、“10年以上”的數(shù)據(jù)量較小,可能不那么準(zhǔn)確尔邓,看看就好晾剖!我們看到1-3年工作經(jīng)驗(yàn)的平均月薪是11831,還不錯(cuò)梯嗽!但是“1年以下”齿尽,“無(wú)經(jīng)驗(yàn)”的平均月薪就沒(méi)那么好看了!綜合一下平均的月薪為14122元灯节!10年以上工作經(jīng)驗(yàn)的平均月薪達(dá)到了恐怖的34891元循头,是無(wú)經(jīng)驗(yàn)5883的5.9倍!
4.工作城市-平均月薪
對(duì)了炎疆,剛才說(shuō)到北上廣深占據(jù)了全國(guó)大部分的工作機(jī)會(huì)卡骂,那么北上廣深的平均月薪如何呢?會(huì)不會(huì)也碾壓小城市磷雇?讓我們來(lái)看看偿警!
果然,北上廣深杭不僅工作機(jī)會(huì)多唯笙,而且平均月薪也是領(lǐng)先全國(guó)的螟蒸!北京表現(xiàn)搶眼平均月薪達(dá)到17096!全國(guó)平均月薪達(dá)到了14126元崩掘!
5.學(xué)歷-職位數(shù)量
由于樣本數(shù)量的關(guān)系七嫌,篩選的時(shí)候排除了學(xué)歷為:高中、中專苞慢、高職等等標(biāo)簽诵原,并不是我看不起高中生哈!總共得到18068個(gè)有效職位。
可見(jiàn)【本科】獨(dú)占鰲頭绍赛,占據(jù)了55%的市場(chǎng)蔓纠!【不限】和【大專】也合計(jì)占比38%不容小覷吗蚌!看起來(lái)腿倚,只要技術(shù)過(guò)硬,學(xué)歷從來(lái)都不是問(wèn)題r歉尽7罅恰!作為對(duì)比【碩士】占比6%箩言,【博士】更是少到只有1%硬贯,果然稀缺到百里挑一!
6.學(xué)歷-平均月薪
看看學(xué)歷和平均月薪的關(guān)系:
平均月薪14139元陨收,可以看到學(xué)歷越高果然工資越高饭豹,博士級(jí)別的更是碾壓,達(dá)到了29563元畏吓。平均月薪最低的【大屇矗】也超過(guò)了10000元卫漫!