用Python分析BOSS直聘的薪資數(shù)據(jù),牛年找工作有方向了!
↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能
后臺回復(fù)【大禮包】送你Python自學(xué)大禮包
新年開始了,不少小伙伴有找新工作的意向,今天我們來看看招聘網(wǎng)站上,關(guān)于Python的工作,薪資狀況是怎樣的呢!
數(shù)據(jù)來源
數(shù)據(jù)來源于BOSS直聘,說實(shí)話,現(xiàn)在的招聘網(wǎng)站,做的比較好的還是BOSS直聘,其相關(guān)的數(shù)據(jù)、報(bào)告等都是比較有代表性的。今天我們就來看看相關(guān)的數(shù)據(jù)吧!
數(shù)據(jù)獲取
BOSS直聘上有這么一個(gè)接口,可以很好的獲取當(dāng)前不同崗位,不同城市的薪資水平
https://www.zhipin.com/wapi/zpboss/h5/marketpay/statistics.json
可以很方便的獲取比較詳細(xì)的薪資數(shù)據(jù)
import?requests
headers?=?{'accept':?'application/json,?text/plain,?*/*',
??????????'user-agent':?'Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?11_0_1)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/88.0.4324.96?Safari/537.36'}
querystring?=?{"positionId":"100109","industryId":"0","cityId":"0","companySize":"0","financingStage":"0","experienceCode":"0"}
job_statics_url?=?'https://www.zhipin.com/wapi/zpboss/h5/marketpay/statistics.json'
job_statics_data?=?requests.get(job_statics_url,?params=querystring,?headers=headers)
這樣,就可以獲取到我們想要的 json 數(shù)據(jù)了

下面我們就可以簡單的來分析下相關(guān)的薪資數(shù)據(jù)了
數(shù)據(jù)分析
薪資分位值
在我們獲取到的數(shù)據(jù)當(dāng)中,就有分位值的數(shù)據(jù),可以方便的獲取
job_statics_data_json?=?job_staticis_data.json()
job_statics_data_json['zpData']['salaryByPoints']
接下來就可以整理橫縱坐標(biāo)軸了
statics_x?=?[]
statics_y?=?[]
for?i?in?job_statics_data_json['zpData']['salaryByPoints']:
????statics_x.append(i['name']?+?'\n'?+?i['title'])
????statics_y.append(i['salary'])
下面開始作圖
import?pyecharts.options?as?opts
from?pyecharts.charts?import?Line,?Bar,?Pie,?Calendar,?WordCloud
from?pyecharts.commons.utils?import?JsCode
from?pyecharts.globals?import?SymbolType
x_data?=?statics_x
y_data?=?statics_y
background_color_js?=?(
????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
????"[{offset:?0,?color:?'#c86589'},?{offset:?1,?color:?'#06a7ff'}],?false)"
)
area_color_js?=?(
????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
????"[{offset:?0,?color:?'#eb64fb'},?{offset:?1,?color:?'#3fbbff0d'}],?false)"
)
c_line?=?(
????Line(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
????.add_xaxis(xaxis_data=x_data)
????.add_yaxis(
????????series_name="薪資",
????????y_axis=y_data,
????????is_smooth=True,
????????is_symbol_show=True,
????????symbol="circle",
????????symbol_size=6,
????????linestyle_opts=opts.LineStyleOpts(color="#fff"),
????????label_opts=opts.LabelOpts(is_show=True,?position="top",?color="white"),
????????itemstyle_opts=opts.ItemStyleOpts(
????????????color="red",?border_color="#fff",?border_width=3
????????),
????????tooltip_opts=opts.TooltipOpts(is_show=False),
????????areastyle_opts=opts.AreaStyleOpts(color=JsCode(area_color_js),?opacity=1),
????)
????.set_global_opts(
????????title_opts=opts.TitleOpts(
????????????title="收入分位",
????????????pos_bottom="5%",
????????????pos_left="center",
????????????title_textstyle_opts=opts.TextStyleOpts(color="#fff",?font_size=16),
????????),
????????xaxis_opts=opts.AxisOpts(
????????????type_="category",
????????????boundary_gap=False,
????????????axislabel_opts=opts.LabelOpts(margin=30,?color="#ffffff63"),
????????????axisline_opts=opts.AxisLineOpts(is_show=False),
????????????axistick_opts=opts.AxisTickOpts(
????????????????is_show=True,
????????????????length=25,
????????????????linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
????????????),
????????????splitline_opts=opts.SplitLineOpts(
????????????????is_show=True,?linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")
????????????),
????????),
????????yaxis_opts=opts.AxisOpts(
????????????type_="value",
????????????position="right",
????????????axislabel_opts=opts.LabelOpts(margin=20,?color="#ffffff63"),
????????????axisline_opts=opts.AxisLineOpts(
????????????????linestyle_opts=opts.LineStyleOpts(width=2,?color="#fff")
????????????),
????????????axistick_opts=opts.AxisTickOpts(
????????????????is_show=True,
????????????????length=15,
????????????????linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
????????????),
????????????splitline_opts=opts.SplitLineOpts(
????????????????is_show=True,?linestyle_opts=opts.LineStyleOpts(color="#ffffff1f")
????????????),
????????),
????????legend_opts=opts.LegendOpts(is_show=False),
????)
)
可以得到一個(gè)還不錯(cuò)的折線圖

可以看到,業(yè)內(nèi)Python的薪資水平,大部分應(yīng)該都處于1萬左右,這個(gè)薪資水平其實(shí)并不太高,看來純的Python崗位并不太吃香,要想獲得更高的薪資,還是需要有更多的技能傍身!
薪資區(qū)間分布
下面再來看看薪資的分布情況
statics_x?=?[]
statics_y?=?[]
for?i?in?job_statics_data_json['zpData']['salaryByDistributed']:
????statics_y.append(i['percent'])
????statics_x.append(i['salaryRange'])
def?bar_chart(x,?y)?->?Bar:
????background_color_js?=?(
????????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
????????"[{offset:?0,?color:?'#c86589'},?{offset:?1,?color:?'#06a7ff'}],?false)"
????)
????c?=?(
????????Bar(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
????????#Bar()
????????.add_xaxis(x)
????????#?.add_xaxis(searchcount.index.tolist()[:10])
????????.reversal_axis()
????????.add_yaxis("",?y,?
???????????????????label_opts=opts.LabelOpts(position='inside',?formatter="{c}%"),
??????????????????color='plum',?category_gap="60%"
??????????????????)
????????.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30,?formatter="{value}%"),
?????????????????????????????????????????????????axisline_opts=opts.AxisLineOpts(is_show=False),),
????????????????????????yaxis_opts=opts.AxisOpts(
????????????????????????????axislabel_opts=opts.LabelOpts(is_show=True),
????????????????????????axisline_opts=opts.AxisLineOpts(is_show=False),
????????????????????????axistick_opts=opts.AxisTickOpts(
????????????????????????is_show=True,
????????????????????????length=25,
????????????????????????linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
????????????????????),)
????????????????????????)
????????.set_series_opts(
????????????itemstyle_opts={
????????????"normal":?{
????????????????"color":?JsCode("""new?echarts.graphic.LinearGradient(0,?0,?0,?1,?[{
????????????????????offset:?0,
????????????????????color:?'rgba(255,100,97,.5)'
????????????????},?{
????????????????????offset:?1,
????????????????????color:?'rgba(221,160,221)'
????????????????}],?false)"""),
????????????????"barBorderRadius":?[30,?30,?30,?30],
????????????????"shadowColor":?'rgb(0,?160,?221)',
????????????}}
????????)
????)
????return?c
來看看薪資分布情況

可以看到,15K以上的薪資還是占了16%以上,而占比最大的薪資區(qū)間則是7-9K
工作年限薪資分布
下面我們繼續(xù)來看看薪資水平和工作年限之間的關(guān)系
statics_x?=?[]
statics_y?=?[]
for?i?in?job_statics_data_json['zpData']['salaryByWorkExp']:
????statics_y.append(i['percent'])
????statics_x.append(i['workExp']?+?':'?+?str(i['aveSalary']))
background_color_js?=?(
????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
????"[{offset:?0,?color:?'#c86589'},?{offset:?1,?color:?'#06a7ff'}],?false)"
)
c?=?(
????Pie(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
????.add(
????????"",
????????list(zip(statics_x,?statics_y)),
????????radius=["40%",?"55%"],
????????label_opts=opts.LabelOpts(
????????????position="outside",
????????????formatter="{a|job}{abg|}\n{hr|}\n?{b|:?}{per|go7utgvlrp%}??",
????????????background_color="#eee",
????????????border_color="#aaa",
????????????border_width=1,
????????????border_radius=4,
????????????rich={
????????????????"a":?{"color":?"#999",?"lineHeight":?22,?"align":?"center"},
????????????????"abg":?{
????????????????????"backgroundColor":?"#e3e3e3",
????????????????????"width":?"100%",
????????????????????"align":?"right",
????????????????????"height":?22,
????????????????????"borderRadius":?[4,?4,?0,?0],
????????????????},
????????????????"hr":?{
????????????????????"borderColor":?"#aaa",
????????????????????"width":?"100%",
????????????????????"borderWidth":?0.5,
????????????????????"height":?0,
????????????????},
????????????????"b":?{"fontSize":?16,?"lineHeight":?33},
????????????????"per":?{
????????????????????"color":?"#eee",
????????????????????"backgroundColor":?"#334455",
????????????????????"padding":?[2,?4],
????????????????????"borderRadius":?2,
????????????????},
????????????},
????????),
????)
????.set_global_opts(title_opts=opts.TitleOpts(title=""))
)
可以看到,下面的圖片還是比較直觀的

1-3年的應(yīng)聘者還是最多的,占比達(dá)到了50%+,這個(gè)經(jīng)驗(yàn)段,確實(shí)是職場的主力軍了!
任職年齡分布
職場的年齡也是一個(gè)熱點(diǎn)話題,35+歲的程序員們,總是一言難盡啊
statics_x?=?[]
statics_y?=?[]
for?i?in?job_statics_data_json['zpData']['salaryByAge']:
????statics_x.append(i['ageRange'])
????statics_y.append(i['people'])
def?bar_chart_age(x,?y)?->?Bar:
????background_color_js?=?(
????????"new?echarts.graphic.LinearGradient(0,?0,?0,?1,?"
????????"[{offset:?0,?color:?'#c86589'},?{offset:?1,?color:?'#06a7ff'}],?false)"
????)
????c?=?(
????????Bar(init_opts=opts.InitOpts(bg_color=JsCode(background_color_js)))
????????#Bar()
????????.add_xaxis(x)
????????#?.add_xaxis(searchcount.index.tolist()[:10])
????????#?.reversal_axis()
????????.add_yaxis("",?y,?
???????????????????label_opts=opts.LabelOpts(position='inside',?formatter="{c}"),
??????????????????color='plum',?category_gap="60%"
??????????????????)
????????.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30,?formatter="{value}"),
?????????????????????????????????????????????????axisline_opts=opts.AxisLineOpts(is_show=False),),
????????????????????????yaxis_opts=opts.AxisOpts(
????????????????????????????axislabel_opts=opts.LabelOpts(is_show=True),
????????????????????????axisline_opts=opts.AxisLineOpts(is_show=False),
????????????????????????axistick_opts=opts.AxisTickOpts(
????????????????????????is_show=True,
????????????????????????length=25,
????????????????????????linestyle_opts=opts.LineStyleOpts(color="#ffffff1f"),
????????????????????),)
????????????????????????)
????????.set_series_opts(
????????????itemstyle_opts={
????????????"normal":?{
????????????????"color":?JsCode("""new?echarts.graphic.LinearGradient(0,?0,?0,?1,?[{
????????????????????offset:?0,
????????????????????color:?'rgba(255,100,97,.5)'
????????????????},?{
????????????????????offset:?1,
????????????????????color:?'rgba(221,160,221)'
????????????????}],?false)"""),
????????????????"barBorderRadius":?[30,?30,?30,?30],
????????????????"shadowColor":?'rgb(0,?160,?221)',
????????????}}
????????)
????)
????return?c
數(shù)據(jù)很能說明問題

可以看到,35歲以下的占據(jù)了絕大多數(shù),可想而知,35+的程序員生存狀況是多么的糟糕!
月薪環(huán)比變化
我們通過每個(gè)月的薪資變化,來看看哪個(gè)月找工作比較有機(jī)會獲得更高的薪資呢
statics_x?=?[]
statics_y?=?[]
for?i?in?job_statics_data_json['zpData']['salaryByMonth']:
????statics_x.append(i['year']?+?'-'?+?i['month'])
????statics_y.append(i['monthAveSalary'])
x_data?=?statics_x
y_data?=?statics_y
每月薪資變化

可以看到,去年2月份的薪資水平是最高的,之后一路下滑,再之后就基本趨于穩(wěn)定了,7-8K這個(gè)平均水平
薪資城市分布
通過Pycharts畫地圖還是蠻方便的
statics_x?=?[]
statics_y?=?[]
for?i?in?job_statics_data_json['zpData']['salaryByCity']:
????if?i['cityList']:
????????statics_x.append(i['cityList'][0]['cityAveMonthSalary'])
????statics_y.append(i['provinceName'])
c?=?(
????Map()
????.add("全國薪資",?[list(z)?for?z?in?zip(statics_y,?statics_x)],?"china")
????.set_global_opts(
????????title_opts=opts.TitleOpts(title=""),
????????visualmap_opts=opts.VisualMapOpts(max_=15000,?min_=6000),
????)
)
全國薪資分布

好了,今天的分享就到這里了,希望對大家有所幫助!
源碼獲取
注:所有代碼僅供學(xué)習(xí)交流,禁止商用。
推薦閱讀
推薦閱讀
掃碼回復(fù)「大禮包」后獲取大禮
掃碼回復(fù)「大禮包」后獲取大禮

