用Python分析BOSS直聘的薪资数据,年后找工作有方向了!

简介: 用Python分析BOSS直聘的薪资数据,年后找工作有方向了!

数据来源


数据来源于BOSS直聘,说实话,现在的招聘网站,做的比较好的还是BOSS直聘,其相关的数据、报告等都是比较有代表性的。今天我们就来看看相关的数据吧!

数据获取

BOSS直聘上有这么一个接口,可以很好的获取当前不同岗位,不同城市的薪资水平

https://www.zhipin.com/wapi/zpboss/h5/marketpay/statistics.json

可以很方便的获取比较详细的薪资数据

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 数据了

微信图片_20220521143011.png

下面我们就可以简单的来分析下相关的薪资数据了


数据分析


薪资分位值

在我们获取到的数据当中,就有分位值的数据,可以方便的获取

job_statics_data_json = job_staticis_data.json()
job_statics_data_json['zpData']['salaryByPoints']

接下来就可以整理横纵坐标轴了

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),
    )
)

可以得到一个还不错的折线图

微信图片_20220521143016.png

可以看到,业内Python的薪资水平,大部分应该都处于1万左右,这个薪资水平其实并不太高,看来纯的Python岗位并不太吃香,要想获得更高的薪资,还是需要有更多的技能傍身!


薪资区间分布

下面再来看看薪资的分布情况

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

来看看薪资分布情况

微信图片_20220521143020.png

可以看到,15K以上的薪资还是占了16%以上,而占比最大的薪资区间则是7-9K


工作年限薪资分布

下面我们继续来看看薪资水平和工作年限之间的关系

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|{b}: }{per|{d}%}  ",
            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=""))
)

可以看到,下面的图片还是比较直观的

微信图片_20220521143023.png

1-3年的应聘者还是最多的,占比达到了50%+,这个经验段,确实是职场的主力军了!


任职年龄分布

职场的年龄也是一个热点话题,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

数据很能说明问题

微信图片_20220521143027.png

可以看到,35岁以下的占据了绝大多数,可想而知,35+的程序员生存状况是多么的糟糕!


月薪环比变化

我们通过每个月的薪资变化,来看看哪个月找工作比较有机会获得更高的薪资呢

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

每月薪资变化

微信图片_20220521143031.png

可以看到,去年2月份的薪资水平是最高的,之后一路下滑,再之后就基本趋于稳定了,7-8K这个平均水平


薪资城市分布

通过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),
    )
)

全国薪资分布

微信图片_20220521143034.png

好了,今天的分享就到这里了,希望对大家有所帮助!

相关文章
|
24天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费模式分析的深度学习模型
使用Python实现智能食品消费模式分析的深度学习模型
119 70
|
26天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
26天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能食品消费习惯分析的深度学习模型
使用Python实现智能食品消费习惯分析的深度学习模型
132 68
|
22天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费市场分析的深度学习模型
使用Python实现智能食品消费市场分析的深度学习模型
99 36
|
3天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
16天前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
65 15
|
20天前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
83 18
|
24天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
29天前
|
测试技术 开发者 Python
使用Python解析和分析源代码
本文介绍了如何使用Python的`ast`模块解析和分析Python源代码,包括安装准备、解析源代码、分析抽象语法树(AST)等步骤,展示了通过自定义`NodeVisitor`类遍历AST并提取信息的方法,为代码质量提升和自动化工具开发提供基础。
46 8
|
1月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
55 3