摘要:本文通过Python的pandas、matplotlib和seaborn库对salaries.csv数据集进行分析与可视化。从年份、职称、地点等多个维度深入探究薪资分布与变化趋势,运用箱线图、柱状图、热力图等多种可视化手段,展示数据特征。
「2025年数据科学、人工智能和机器学习工作薪水数据集」,点击链接即可保存。打开「夸克APP」,链接:https://pan.quark.cn/s/6aa9337382d3
数据科学与AI领域薪资数据集解析
数据集概述
该数据集收录了2020-2025年全球数据科学、人工智能及机器学习领域的真实薪资数据,共133,349条记录,11个维度属性。数据涵盖职位名称、经验水平、远程工作比例等关键信息,可用于分析薪资趋势、地域差异及职场环境对薪酬的影响。
核心字段详解
字段名称 | 数据类型 | 含义说明 | 示例值 |
| int64 | 薪资报告年份(2020-2025) | 2025 |
| object | 经验级别(EN=初级,MI=中级,SE=高级,EX=总监) | SE |
| object | 雇佣类型(FT=全职,PT=兼职,CT=合同工,FL=自由职业) | FT |
| object | 具体职位名称(如数据科学家、ML工程师) | “Data Scientist” |
| int64 | 原始货币年薪(税前) | 214000 |
| object | 薪资货币类型 | USD |
| int64 | 按2025年汇率换算为美元的标准化薪资 | 214000 |
| object | 员工居住国家(ISO代码) | US |
| int64 | 远程工作比例(0=现场,50=混合,100=完全远程) | 100 |
| object | 公司总部所在地(ISO代码) | US |
| object | 公司规模(S=小,M=中,L=大) | M |
关键词:薪资分析;数据可视化;Python数据分析
一、引言
在当今数据驱动的时代,对薪资数据的深入分析有助于了解就业市场的动态和趋势。本文借助Python的数据分析工具,对salaries.csv数据集进行多维度剖析,旨在揭示薪资与年份、职称、地点等因素之间的关系。
二、数据加载与初步探索
2.1 环境设置与数据加载
设置matplotlib以支持中文显示,并解决负号显示问题,随后加载salaries.csv数据集。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('E:\\pycharm_workspace\\数据集\\salaries.csv')2.2 数据概览与基本统计
通过head()方法展示数据集前几行,使用shape属性获取数据形状,利用isnull().sum()统计缺失值,并通过describe()方法呈现薪资(USD)的描述统计信息。
print(df.head())
print("\n数据形状:", df.shape)
print("\n缺失值统计:")
print(df.isnull().sum())
print("\n薪资(USD)描述统计:")
print(df['salary_in_usd'].describe())work_year experience_level ... company_location company_size
0 2025 SE ... US M
1 2025 SE ... US M
2 2025 MI ... AU M
3 2025 MI ... AU M
4 2025 EN ... US M
[5 rows x 11 columns]
数据形状: (133349, 11)
缺失值统计:
work_year 0
experience_level 0
employment_type 0
job_title 0
salary 0
salary_currency 0
salary_in_usd 0
employee_residence 0
remote_ratio 0
company_location 0
company_size 0
dtype: int64
薪资(USD)描述统计:
count 133349.000000
mean 157617.272098
std 74288.363097
min 15000.000000
25% 106000.000000
50% 146206.000000
75% 198000.000000
max 800000.000000
Name: salary_in_usd, dtype: float64三、多维度数据分析与可视化
3.1 按年份分析薪资趋势
绘制箱线图以展示各年份薪资趋势。通过boxplot函数绘制箱线图,设置showfliers=False暂时隐藏异常值,使用Blues调色板,添加中位数标注,使图表更清晰地展示各年份薪资的集中趋势。
plt.figure(figsize=(10,6))
ax = sns.boxplot(x='work_year', y='salary_in_usd', data=df,
hue='work_year',
showfliers=False,
palette="Blues",
legend=False)
ax.set_title('各年份薪资趋势分析(2019 - 2025)', pad=20)
ax.set_xlabel('年份', labelpad=10)
ax.set_ylabel('薪资(USD)', labelpad=10)
plt.grid(axis='y', linestyle='--', alpha=0.4)
for year in df['work_year'].unique():
median = df[df['work_year']==year]['salary_in_usd'].median()
ax.text(year - 2020, median, f'{median:,.0f}',
ha='center', va='center', fontweight='bold')
3.2 按职称分析平均薪资
选取前20个最常见岗位,计算其平均薪资并绘制柱状图。利用value_counts().nlargest(20)获取前20个最常见岗位,通过groupby计算平均薪资,使用barplot绘制柱状图,添加数值标注,使各岗位平均薪资一目了然。
plt.figure(figsize=(14, 7))
top_20_jobs = df['job_title'].value_counts().nlargest(20).index
job_salary = df[df['job_title'].isin(top_20_jobs)].groupby('job_title')['salary_in_usd'].mean().sort_values(ascending=False)
sns.barplot(x=job_salary.values, y=job_salary.index,
hue=job_salary.index,
palette="viridis",
edgecolor='black',
linewidth=0.5,
legend=False)
for i, v in enumerate(job_salary.values):
plt.text(v + 2000, i, f"${v:,.0f}",
color='black',
va='center',
fontsize=10)
plt.title('前20个最常见岗位平均薪资(USD)', fontsize=16, pad=20)
plt.xlabel('平均薪资(USD)', fontsize=12)
plt.ylabel('职位名称', fontsize=12)
plt.xlim(0, job_salary.max() * 1.15)
plt.grid(axis='x', linestyle='--', alpha=0.6)
plt.tight_layout()
plt.show()
3.3 按地点分析薪资分布
按薪资中位数选择并排序前10个地区,绘制箱线图展示其薪资分布。通过groupby计算各地区薪资中位数,使用boxplot绘制箱线图,添加中位数标注,直观呈现不同地区薪资水平的差异。
top_paying = df.groupby('company_location')['salary_in_usd'].median().nlargest(10)
order = top_paying.sort_values(ascending=False).index
plt.figure(figsize=(14, 7))
ax = sns.boxplot(
x='company_location',
y='salary_in_usd',
hue='company_location',
data=df[df['company_location'].isin(order)],
order=order,
showfliers=False,
palette="Blues",
legend=False
)
for i, loc in enumerate(order):
median = top_paying[loc]
ax.text(i, median, f'${median:,.0f}',
ha='center', va='bottom',
fontweight='bold', color='red')
plt.title('薪资中位数Top 10国家/地区的薪资分布', pad=20, fontsize=14)
plt.xlabel('国家/地区代码', labelpad=10)
plt.ylabel('薪资(USD)', labelpad=10)
plt.xticks(rotation=45)
plt.grid(axis='y', linestyle='--', alpha=0.4)
plt.tight_layout()
plt.show()
3.4 按年份和职称的薪资趋势
选择薪资标准差最大的15个职称,创建数据透视表并绘制分块热力图。利用groupby计算各职称薪资标准差,选取前15个职称创建数据透视表,使用heatmap绘制热力图,设置参数使热力图更清晰地展示不同年份各职称薪资的变化趋势。
dynamic_jobs = df.groupby('job_title')['salary_in_usd'].std().nlargest(15).index
pivot_dynamic = df[df['job_title'].isin(dynamic_jobs)].pivot_table(
values='salary_in_usd',
index='work_year',
columns='job_title',
aggfunc='mean'
)
plt.figure(figsize=(18, 8))
sns.heatmap(
pivot_dynamic,
annot=True,
fmt=".0f",
cmap="RdYlGn",
center=df['salary_in_usd'].median(),
square=True,
linecolor='grey'
)
plt.title('高差异职称薪资趋势热力图', fontsize=14)
plt.xticks(fontsize=10, rotation=45)
plt.yticks(fontsize=10, rotation=0)
plt.tight_layout()
plt.show()
3.5 按地点和职称的薪资趋势
筛选高频高薪职位和有代表性的地区,创建数据透视表并绘制热力图。通过groupby和agg方法筛选前8个高频高薪职位,选取15个有代表性地区创建数据透视表,使用heatmap绘制热力图,设置参数展示不同地区热门职位的薪资中位数分布。
top_jobs = (df.groupby('job_title')['salary_in_usd']
.agg(['count','median'])
.sort_values(['count','median'], ascending=False)
.head(8).index)
rep_locations = df['company_location'].value_counts().nlargest(15).index
pivot_data = df[df['job_title'].isin(top_jobs) &
df['company_location'].isin(rep_locations)].pivot_table(
values='salary_in_usd',
index='company_location',
columns='job_title',
aggfunc='median',
fill_value=np.nan
)
plt.figure(figsize=(8, 12))
sns.heatmap(
pivot_data,
annot=True,
fmt=".0f",
cmap="YlGnBu",
annot_kws={'size':9, 'color':'black'},
linewidths=0.3,
cbar_kws={'label': 'Median Salary (USD)'},
square=True
)
plt.title('核心地区热门职位薪资分布(中位数)', pad=20, fontsize=14)
plt.xticks(rotation=45, ha='right', fontsize=10)
plt.yticks(rotation=0, fontsize=10)
plt.xlabel('')
plt.ylabel('Company Location', labelpad=15)
plt.tight_layout()
plt.show()
通过以上多维度的分析与可视化,我们对salaries.csv数据集中的薪资信息有了全面而深入的理解,为薪资相关的决策提供了有力的数据支撑。

















