python可视化分析大模型相关岗位人才招聘需求

引言

近年来,随着人工智能技术的迅猛发展,大模型(如GPT、BERT、Llama等)在自然语言处理、计算机视觉、推荐系统等领域展现出强大的能力,成为行业研究和应用的热点。企业对大模型相关人才的需求也呈现爆发式增长,岗位涵盖算法工程师、数据科学家、AI产品经理等多个方向。然而,当前市场上对大模型人才的需求分布、薪资水平、技能要求等方面的系统性分析仍然较少,企业和求职者往往缺乏直观的数据支持。

为了深入理解大模型相关岗位的市场需求,本研究基于Python对招聘数据进行爬取、清洗和分析,并借助数据可视化技术(如Matplotlib、Seaborn、WordCloud等)揭示以下关键问题:

  1. 大模型岗位的地域分布:哪些城市对大模型人才的需求最旺盛?

  2. 薪资水平分析:不同岗位、不同经验要求的薪资差异如何?

  3. 技能需求趋势:企业最关注哪些技术栈(如PyTorch、TensorFlow、NLP、CV等)?

  4. 行业分布:哪些行业(如互联网、金融、医疗等)对大模型人才的需求增长最快?

通过数据分析和可视化,本研究旨在为求职者提供就业方向参考,帮助企业优化招聘策略,同时为教育机构和政策制定者提供人才市场趋势的洞察。

 数据处理

1. 数据去重

由于原始数据可能存在重复记录(如同一职位被多次爬取),我们首先进行去重处理:

df = pd.read_csv('work_data.csv')
df = df.drop_duplicates()
  • 原始数据量:11,982 条

  • 去重后数据量:9,644 条(去除了 2,338 条重复记录)

  • 目的:避免重复数据对统计结果(如薪资均值、岗位数量)产生偏差。

2. 薪资数据标准化

薪资信息在原始数据中以文本形式存储(如"1.5-2.9万·14薪"),需转换为数值型数据以便分析:

def process_salary(salary_str):
    if '-' in salary_str:
        min_salary, max_salary = salary_str.replace('万/年', '').split('-')
    elif '及以下' in salary_str:
        max_salary = salary_str.replace('万及以下/年', '')
        min_salary = 0
    else:
        min_salary = max_salary = salary_str.replace('万/年', '')
    min_salary = float(min_salary) * 10 / 12
    max_salary = float(max_salary) * 10 / 12
    return min_salary, max_salary


# 对筛选出来的数据调用 process_salary 函数
result[['jobSalaryMin', 'jobSalaryMax']] = result['provide_salary_text'].apply(lambda x: pd.Series(process_salary(x)))

# 保留一位小数
result[['jobSalaryMin', 'jobSalaryMax']] = result[['jobSalaryMin', 'jobSalaryMax']].round(1)

# 将结果赋值回原 DataFrame
df.loc[result.index, ['jobSalaryMin', 'jobSalaryMax']] = result[['jobSalaryMin', 'jobSalaryMax']]

3. 工作地点提取

原始数据中的 job_area_text 列包含城市和区县信息(如"上海·浦东新区"),需提取城市名:便于后续按城市统计岗位分布和薪资水平。

df['area'] = df['job_area_text'].apply(lambda x: x.split('·')[0] if '·' in str(x) else x)

通过上述步骤,我们得到了结构清晰、可直接用于分析的数据集,包含:

  1. 标准化薪资(月薪,单位K)。

  2. 规范化工作地点(城市级)。

  3. 去重后的高质量记录(9,644条)。

此部分为后续的可视化分析(如薪资分布、地域热力图、技能词云)奠定了可靠的数据基础。

数据分析 

一、月薪维度

  • 最低月薪: 主要集中在较低区间,0 - 20K 频次高,(10 - 20K 区间 )、(0 - 10K 区间 )等数值大,说明多数岗位基础薪资不高,低薪岗位占比大;高最低月薪(如 80 - 100K )频次极少,高薪基础岗位稀缺。
  • 最高月薪: 20 - 30K 区间频次最高,但 30 - 40K 、40 - 50K 等中高薪资区间也有一定占比,且存在少数超高薪岗位(如 100 - 120K 等区间有零散分布 ),说明薪资上限有拓展空间,不过整体高薪岗位占比仍不算高,薪资结构呈中间相对集中、两端少的形态 ,反映出行业薪资有梯度,但高收入群体占比有限。
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 设置中文字体
plt.rcParams['font.sans-serif']=['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False

# 绘制 jobSalaryMin 直方图
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
n, bins, patches = plt.hist(df['jobSalaryMin'], bins=20, edgecolor='black',range=(0, 100))
plt.title('最低月薪分布直方图')
plt.xlabel('最低月薪(K)')
plt.xticks(rotation=45)
plt.ylabel('频数')

# 添加数据标签
for i in range(len(patches)):
    plt.text(bins[i] + (bins[i+1] - bins[i])/2, n[i], str(int(n[i])), ha='center', va='bottom')

# 绘制 jobSalaryMax 直方图
plt.subplot(1, 2, 2)
n, bins, patches = plt.hist(df['jobSalaryMax'], bins=20, edgecolor='black',range=(0, 140))
plt.title('最高月薪分布直方图')
plt.xlabel('最高月薪(K)')
plt.xticks(rotation=45)
plt.ylabel('频数')

# 添加数据标签
for i in range(len(patches)):
    plt.text(bins[i] + (bins[i+1] - bins[i])/2, n[i], str(int(n[i])), ha='center', va='bottom')

plt.tight_layout()
plt.show()

 

二、地区岗位数量维度

岗位分布集中在少数发达地区,深圳以 1685 个岗位遥遥领先,上海(1332 )、广州(732)、北京(713)等一线或新一线城市岗位数量也较多,体现出这些地区经济活跃度高、就业机会丰富,对人才吸引力强;而排名靠后的如中山、福州、厦门等,岗位数相对少很多,区域就业资源差距明显。

可视化建议:当前数据显示就业机会高度集中在少数地区,建议人才优先考虑头部区域就业,同时关注第二梯队地区的发展潜力。

# 统计各地区岗位数量
area_distribution = df['area'].value_counts()

# 选取前 30 名
top_30_distribution = area_distribution.head(30)

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False

# 绘制直方图
plt.figure(figsize=(10, 6))
bars = plt.bar(top_30_distribution.index, top_30_distribution.values,color='skyblue')
plt.title('岗位数量排名前 30 的地区分布')
plt.xlabel('地区')
plt.xticks(rotation=90)
plt.ylabel('岗位数量')

# 添加数据标签
for bar in bars:
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width() / 2, height, str(int(height)), ha='center', va='bottom')

plt.tight_layout()
plt.show()
## 从直方图看出,大部分岗位都集中在一线城市

 

 

三、地区岗位薪资对比

岗位分布集中在少数发达地区,深圳以 1685 个岗位遥遥领先,上海(1332 )、广州(732)、北京(713)等一线或新一线城市岗位数量也较多,体现出这些地区经济活跃度高、就业机会丰富,对人才吸引力强;而排名靠后的如中山、福州、厦门等,岗位数相对少很多,区域就业资源差距明显。

  • 地区对比:深圳、上海等一线城市,最低和最高平均月薪整体相对高,经济活力强、高薪岗位多;珠海最低平均月薪仅 8.06K ,但最高达 24.69K ,薪资结构可能更 “两极分化” ;南昌最低平均月薪 10.26K ,最高 15.91K ,整体薪资水平相对低,岗位收入天花板有限 。
  • 波动趋势:最高平均月薪折线波动剧烈(如西安达 32.09K ,珠海 24.69K 等 ),反映不同地区高薪岗位分布不均、薪资弹性大;最低平均月薪折线相对平缓,说明各地基础薪资有一定共性,差异没高薪端那么悬殊 。
# 统计各地区岗位数量
area_job_count = df['area'].value_counts()

# 统计各地区最低和最高平均月薪
area_avg_min_salary = df.groupby('area')['jobSalaryMin'].mean()
area_avg_max_salary = df.groupby('area')['jobSalaryMax'].mean()

# 合并统计结果
combined_data = pd.DataFrame({
    'job_count': area_job_count,
    'avg_min_salary': area_avg_min_salary,
    'avg_max_salary': area_avg_max_salary
})

# 筛选出岗位数量前 30 的地区
top_30_areas = combined_data.nlargest(30, 'job_count')

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False

# 绘制折线图
plt.figure(figsize=(12, 6))
min_line = plt.plot(top_30_areas.index, top_30_areas['avg_min_salary'].round(2), marker='o', label='最低平均月薪')
max_line = plt.plot(top_30_areas.index, top_30_areas['avg_max_salary'].round(2), marker='s', label='最高平均月薪')

# 添加标题和标签
plt.title('岗位数量前 30 地区的最低和最高平均月薪折线图')
plt.xlabel('地区')
plt.xticks(rotation=45)
plt.ylabel('月薪(K)')

# 添加数据标签
for x, y in zip(top_30_areas.index, top_30_areas['avg_min_salary'].round(2)):
    plt.text(x, y, f'{y:.2f}', ha='center', va='bottom')

for x, y in zip(top_30_areas.index, top_30_areas['avg_max_salary'].round(2)):
    plt.text(x, y, f'{y:.2f}', ha='center', va='top')

# 添加图例
plt.legend()

# 显示图形
plt.tight_layout()
plt.show()

 

薪资水平异常点

  • 宁波的平均月薪(最高)比北京更高需要验证数据合理性

北京表现

  • 作为一线城市薪资排名第二符合常规认知

  • 建议检查中位数而非平均值(避免高薪极端值影响):

可视化优化建议:

  1. 双轴图表

    fig, ax1 = plt.subplots(figsize=(15,8))
    
    # 岗位数量柱状图
    ax1.bar(top_30_areas.index, top_30_areas['job_count'], alpha=0.4, color='b')
    ax1.set_ylabel('岗位数量', color='b')
    ax1.tick_params(axis='y', colors='b')
    
    # 薪资折线图
    ax2 = ax1.twinx()
    ax2.plot(top_30_areas.index, top_30_areas['avg_max_salary'], 'r-o', label='最高月薪')
    ax2.plot(top_30_areas.index, top_30_areas['avg_min_salary'], 'g--s', label='最低月薪')
    ax2.set_ylabel('月薪(K)', color='r')
    ax2.tick_params(axis='y', colors='r')
    
    plt.title('TOP30地区岗位数量与薪资水平对比')
    fig.legend(loc='upper right')
    plt.xticks(rotation=45)
    plt.tight_layout()

薪资差异度分析

top_30_areas['salary_range'] = top_30_areas['avg_max_salary'] - top_30_areas['avg_min_salary']
plt.figure(figsize=(12,6))
plt.barh(top_30_areas.index, top_30_areas['salary_range'], color='purple')
plt.title('TOP30地区薪资区间差异')
plt.xlabel('薪资区间(K)')

四、不同学历的最高薪资和最低薪资对比

# 按学历分组,计算平均最高工资和平均最低工资
degree_avg_salary = df.groupby('degreeString').agg({
    'jobSalaryMin': 'mean',
    'jobSalaryMax': 'mean'
}).reset_index()

# 定义排序顺序
order = ['博士', '硕士', '本科', '大专', '中技/中专', '高中', '初中及以下']

# 根据排序顺序重新索引
degree_avg_salary = degree_avg_salary.set_index('degreeString').reindex(order).reset_index()

# 绘制平均最高和最低工资的柱状图
x = range(len(degree_avg_salary['degreeString']))
width = 0.35

fig, ax = plt.subplots(figsize=(12, 8))
rects1 = ax.bar([i - width / 2 for i in x], degree_avg_salary['jobSalaryMin'], width, label='平均最低工资')
rects2 = ax.bar([i + width / 2 for i in x], degree_avg_salary['jobSalaryMax'], width, label='平均最高工资')

ax.set_ylabel('工资(K)')
ax.set_xlabel('学历')
ax.set_title('不同学历的平均最高工资和最低工资')
ax.set_xticks(x)
ax.set_xticklabels(degree_avg_salary['degreeString'], rotation=45)
ax.legend()

# 添加数据标签
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        ax.annotate('{:.2f}'.format(height),
                    xy=(rect.get_x() + rect.get_width() / 2, height),
                    xytext=(0, 3),  # 3 points vertical offset
                    textcoords="offset points",
                    ha='center', va='bottom')

autolabel(rects1)
autolabel(rects2)

plt.tight_layout()
plt.show()
##  随着学历的增高薪资也在增长

学历溢价效应

  • 博士学历的最高工资(53.06K)是初中及以下学历(8.00K)的6.6倍

  • 每提升一个学历层级平均带来约30-50%的薪资增长:

薪资区间差异

  • 高等教育阶段(本科以上)薪资区间更大:

    • 博士薪资区间:53.06-32.65=20.41K

    • 大专薪资区间:16.67-11.25=5.42

职业发展建议:

关键学历节点:大专→本科带来39%薪资跃升,硕士→博士带来55%跃升

性价比选择:本科教育在投入产出比上可能最优

五、不同学历岗位数量分布

学历供需倒挂现象

  • 高学历岗位占比极低但薪资极高

  • 博士岗位仅占0.3%(6/3841)却拿最高薪资(53.06K)

人才结构断层

  • 本科岗位数量(2999)占总量的78%,构成就业市场主体

  • 大专以下学历岗位数量(58+6+4=68)占比不足2%

建议后续分析:

  1. 各学历层级的工作经验要求分布

  2. 学历与行业交叉分析

  3. 不同企业性质的学历偏好差异

# 定义排序顺序
order = ['博士', '硕士', '本科', '大专', '中技/中专', '高中', '初中及以下']
# 根据排序顺序重新索引
degree_counts = df['degreeString'].value_counts().reset_index(name='数量')
degree_counts = degree_counts.set_index('degreeString').reindex(order).reset_index()

# 绘制柱状图
plt.figure(figsize=(8, 4))
bars = plt.bar(degree_counts['degreeString'], degree_counts['数量'], color='#66b3ff')
plt.xlabel('学历')
plt.ylabel('数量')
plt.title('不同学历岗位数量柱状图')
plt.xticks(rotation=45)
# 添加数据标签
for bar in bars:
    height = bar.get_height()
    plt.annotate(f'{height}',
                 xy=(bar.get_x() + bar.get_width() / 2, height),
                 xytext=(0, 3),
                 textcoords="offset points",
                 ha='center', va='bottom')

# 显示柱状图
plt.show()

 

 

 六、不同工作年限薪资对比

经验溢价曲线

  • 薪资增长呈现「加速上升」特征

  • 10年以上经验者最高工资(42.49K)是应届生(8.88K)的4.8倍

关键跃升点

  • 3-5年经验段出现第一次大幅跃升(+10.67K)

  • 5-10年经验段出现第二次跃升(+8.33K)

异常数据发现:

    1年以下经验薪资(13.84K)高于1-3年(14.49K)

延伸分析建议:

  1. 各经验段对应的典型岗位类型

  2. 不同行业的经验溢价差异

  3. 结合学历与经验的交叉价值分析

该分析显示工作经验积累存在明显的边际效益递增特征,建议职场人士在3-5年阶段重点突破能力瓶颈,企业需建立差异化的经验人才使用策略。

df['workYear_desc'] = df['workYear'].map(work_year)

# 按工作经验分组,计算平均最高工资和平均最低工资
workYear_avg_salary = df.groupby('workYear_desc').agg({
    'jobSalaryMin': 'mean',
    'jobSalaryMax': 'mean'
}).reset_index()
# 按照 work_year 字典的顺序重新索引
order = [work_year[i] for i in sorted(work_year.keys())]
workYear_avg_salary['workYear_desc'] = pd.Categorical(workYear_avg_salary['workYear_desc'], categories=order, ordered=True)
workYear_avg_salary = workYear_avg_salary.sort_values(by='workYear_desc')


# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 绘制柱状图
x = range(len(workYear_avg_salary['workYear_desc']))
width = 0.35

fig, ax = plt.subplots(figsize=(12, 8))
rects1 = ax.bar([i - width/2 for i in x], workYear_avg_salary['jobSalaryMin'], width, label='平均最低工资')
rects2 = ax.bar([i + width/2 for i in x], workYear_avg_salary['jobSalaryMax'], width, label='平均最高工资')

ax.set_ylabel('工资(K)')
ax.set_xlabel('工作经验')
ax.set_title('不同工作经验的平均最高工资和最低工资')
ax.set_xticks(x)
ax.set_xticklabels(workYear_avg_salary['workYear_desc'], rotation=45)
ax.legend()

# 添加数据标签
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        ax.annotate('{:.2f}'.format(height),
                    xy=(rect.get_x() + rect.get_width() / 2, height),
                    xytext=(0, 3),  # 3 points vertical offset
                    textcoords="offset points",
                    ha='center', va='bottom')

autolabel(rects1)
autolabel(rects2)

plt.tight_layout()
plt.show()

 

七、其他数据分析

不同工作经验的岗位数量对比
不同工作经验的最高薪资分位数对比
不同公司类型的招聘岗位数量
不同公司类型对学历的要求
外资企业对不同学历的要求数量对比
国企对不同学历的要求数量对比
不同行业招聘数量对比
福利待遇词云图
技能要求词云图
以上分析不再一一列举,有需要的同学请自行下载学习使用

结论与洞察

        🔍 异常值排查:验证宁波高薪岗位是否包含极端值(如高管岗),检查1年以下经验高薪岗  位的行业分布(是否集中在金融/IT)

完整项目代码已上传基于python的大模型岗位人才需求可视化分析

以上是大模型相关招聘岗位数据分析,有不足或不准确的地方请留言或私信相互讨论,感谢。

  1. 薪资与学历、经验高度正相关

    • 学历:博士薪资最高(53.06K),但岗位极少(仅6个);本科岗位最多(2999个),但薪资中等(23.38K)。

    • 经验:10年以上经验者薪资最高(42.49K),应届生最低(8.88K),3-5年和5-10年是关键跃升期。

    • 异常点

      • 宁波薪资高于北京(需验证数据合理性)

      • 1年以下经验薪资 > 1-3年(可能因岗位类型或行业差异)

  2. 供需矛盾突出

    • 高学历(博士/硕士):岗位稀缺,竞争激烈,但薪资溢价显著。

    • 本科/大专:岗位数量多,但薪资增长平缓,需技能补充提升竞争力。

    • 低学历(高中及以下):岗位极少(仅4个),薪资最低(8K),职业发展受限。

  3. 关键增长阶段

    • 3-5年经验:薪资首次大幅跃升(+10K),建议重点突破管理或技术深度。

    • 5-10年经验:薪资二次跃升(+8K),需跨领域复合能力。

  4. 数据分析深化方向

    🔍 交叉分析:学历+经验组合价值(如“本科+5年经验” vs “硕士+3年经验”),行业差异(互联网、金融、制造业的薪资增长曲线)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不爱说话的分院帽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值