Python数据分析实战:以数据分析岗为例,探索行业与薪资关联性
金三银四,数据分析师成为众多行业竞相追逐的热门岗位,想知道如何在这个领域精准发力、脱颖而出吗?今天,我将以 BOSS 直聘上的数据为样本,借助 Python 强大的数据分析能力,深度剖析各个行业与薪资关联性分析,下面一起学习!
1.数据准备
首先,我们需要导入必要的库并加载数据。
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar, Pie, Boxplot, WordCloud, Map
from pyecharts.globals import SymbolType
import re
# 加载数据
df = pd.read_excel('/home/mw/project/BOSS直聘数据分析师职位.xlsx')
# 查看数据概览
df.head(3)
# 查看数据信息
df.info()
2. 数据清洗
我们需要对数据进行清洗,特别是薪资范围和经验要求字段。
def process_salary(salary):
if not isinstance(salary, str):
return np.nan
# 处理日薪
if '元/天' in salary:
# 提取第一个数值(-前面的数值)
daily = float(re.findall(r'(\d+\.?\d*)', salary.split('-')[0])[0])
return daily * 30 / 1000 # 转换为月薪(千元),按30天计算
# 处理时薪
elif '元/时' in salary:
# 提取第一个数值(-前面的数值)
hourly = float(re.findall(r'(\d+\.?\d*)', salary.split('-')[0])[0])
return hourly * 8 * 30 / 1000 # 转换为月薪(千元),8小时/天,30天/月
# 处理月薪
elif 'K' in salary or 'k' in salary:
# 提取第一个数值(-前面的数值)
monthly = float(re.findall(r'(\d+\.?\d*)', salary.split('-')[0])[0])
# 处理16薪等情况
if '薪' in salary:
months = float(re.findall(r'(\d+)薪', salary)[0])
return monthly * months / 12
return monthly
# 处理纯数字月薪(如10000-15000)
elif re.search(r'\d+-\d+', salary):
# 提取第一个数值(-前面的数值)
monthly = float(re.findall(r'(\d+\.?\d*)', salary.split('-')[0])[0])
return monthly / 1000 # 转换为千元
# 其他情况(如纯数字)
else:
try:
return float(re.findall(r'(\d+\.?\d*)', salary)[0]) / 1000 # 转换为千元
except:
return np.nan
# 应用处理函数
df['薪资月薪(K)'] = df['薪资范围'].apply(process_salary)
# 显示前3行结果
df.head(3)
3.行业与薪资关联性分析
分析不同行业的数据分析师岗位薪资是否存在显著差异。
# 按公司类型分组统计薪资
industry_salary = df.groupby('公司类型')['薪资月薪(K)'].agg(['mean', 'median', 'count']).sort_values('mean', ascending=False)
# 筛选至少有5个样本的行业
industry_salary = industry_salary[industry_salary['count'] >= 5]
# 可视化
bar1 = (
Bar()
.add_xaxis(industry_salary.index.tolist())
.add_yaxis("薪资月薪(K)", industry_salary['mean'].round(1).tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="不同行业数据分析师平均薪资"),
yaxis_opts=opts.AxisOpts(name="薪资(千元)"),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
)
)
bar1.render_notebook()
由柱形图可以看出游戏、互联网、电子商务行业的平均月薪资最高,分别达到约21.5k、20.4k和16.6k,传统行业如医疗健康、广告公关会展的薪资相对较低,差不多在11K左右,互联网相关行业(游戏、互联网、电子商务)普遍高于其他行业,在工作选择时可以更倾向于互联网公司的数据分析岗。