引言
近年来,随着人工智能技术的迅猛发展,大模型(如GPT、BERT、Llama等)在自然语言处理、计算机视觉、推荐系统等领域展现出强大的能力,成为行业研究和应用的热点。企业对大模型相关人才的需求也呈现爆发式增长,岗位涵盖算法工程师、数据科学家、AI产品经理等多个方向。然而,当前市场上对大模型人才的需求分布、薪资水平、技能要求等方面的系统性分析仍然较少,企业和求职者往往缺乏直观的数据支持。
为了深入理解大模型相关岗位的市场需求,本研究基于Python对招聘数据进行爬取、清洗和分析,并借助数据可视化技术(如Matplotlib、Seaborn、WordCloud等)揭示以下关键问题:
-
大模型岗位的地域分布:哪些城市对大模型人才的需求最旺盛?
-
薪资水平分析:不同岗位、不同经验要求的薪资差异如何?
-
技能需求趋势:企业最关注哪些技术栈(如PyTorch、TensorFlow、NLP、CV等)?
-
行业分布:哪些行业(如互联网、金融、医疗等)对大模型人才的需求增长最快?
通过数据分析和可视化,本研究旨在为求职者提供就业方向参考,帮助企业优化招聘策略,同时为教育机构和政策制定者提供人才市场趋势的洞察。
数据处理
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)
通过上述步骤,我们得到了结构清晰、可直接用于分析的数据集,包含:
-
标准化薪资(月薪,单位K)。
-
规范化工作地点(城市级)。
-
去重后的高质量记录(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()
薪资水平异常点:
-
宁波的平均月薪(最高)比北京更高需要验证数据合理性
北京表现:
-
作为一线城市薪资排名第二符合常规认知
-
建议检查中位数而非平均值(避免高薪极端值影响):
可视化优化建议:
-
双轴图表:
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%
建议后续分析:
-
各学历层级的工作经验要求分布
-
学历与行业交叉分析
-
不同企业性质的学历偏好差异
# 定义排序顺序
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)
延伸分析建议:
-
各经验段对应的典型岗位类型
-
不同行业的经验溢价差异
-
结合学历与经验的交叉价值分析
该分析显示工作经验积累存在明显的边际效益递增特征,建议职场人士在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的大模型岗位人才需求可视化分析
以上是大模型相关招聘岗位数据分析,有不足或不准确的地方请留言或私信相互讨论,感谢。
-
薪资与学历、经验高度正相关
-
学历:博士薪资最高(53.06K),但岗位极少(仅6个);本科岗位最多(2999个),但薪资中等(23.38K)。
-
经验:10年以上经验者薪资最高(42.49K),应届生最低(8.88K),3-5年和5-10年是关键跃升期。
-
异常点:
-
宁波薪资高于北京(需验证数据合理性)
-
1年以下经验薪资 > 1-3年(可能因岗位类型或行业差异)
-
-
-
供需矛盾突出
-
高学历(博士/硕士):岗位稀缺,竞争激烈,但薪资溢价显著。
-
本科/大专:岗位数量多,但薪资增长平缓,需技能补充提升竞争力。
-
低学历(高中及以下):岗位极少(仅4个),薪资最低(8K),职业发展受限。
-
-
关键增长阶段
-
3-5年经验:薪资首次大幅跃升(+10K),建议重点突破管理或技术深度。
-
5-10年经验:薪资二次跃升(+8K),需跨领域复合能力。
-
-
数据分析深化方向
🔍 交叉分析:学历+经验组合价值(如“本科+5年经验” vs “硕士+3年经验”),行业差异(互联网、金融、制造业的薪资增长曲线)。