数据准备
import pandas as pdimport numpy as npfrom pyecharts import options as optsfrom pyecharts.charts import Barfrom pyecharts.globals import SymbolTypeimport re
# 加载数据df = pd.read_excel('/home/mw/project/BOSS直聘数据分析师职位.xlsx')# 查看数据概览df.head(3)
# 查看数据信息df.info()
数据清洗
我们需要对数据进行清洗,特别是薪资范围和经验要求字段。
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 / 12return 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)
# 经验要求处理def process_experience(exp):if isinstance(exp, str):if '经验不限' in exp or '在校/应届' in exp:return '经验不限/应届'elif '1-3年' in exp:return '1-3年'elif '3-5年' in exp:return '3-5年'elif '5-10年' in exp:return '5-10年'elif '10年以上' in exp:return '10年以上'elif '1年以内' in exp:return '1年以内'return '未注明'df['经验要求分类'] = df['经验要求'].apply(process_experience)df.head(3)
# 学历要求处理df['学历要求'] = df['学历要求'].fillna('未注明')# 地区处理 - 提取上海的区域def extract_district(location):if isinstance(location, str):if '上海' in location:parts = location.split('·')if len(parts) > 1:return parts[1]return '其他'df['区域'] = df['地区'].apply(extract_district)df.head(3)
学历与薪资关系
分析硕士学历是否比本科学历获得更高薪资,以及经验如何弥补学历差距。
# 筛选本科和硕士的样本edu_df = df[df['学历要求'].isin(['本科', '硕士'])]# 按学历和经验分组统计薪资edu_exp_salary = edu_df.groupby(['学历要求', '经验要求分类'])['薪资月薪(K)'].mean().unstack()# 可视化bar2 = (Bar().add_xaxis(edu_exp_salary.index.tolist()).add_yaxis("1-3年经验", edu_exp_salary['1-3年'].round(1).tolist()).add_yaxis("3-5年经验", edu_exp_salary['3-5年'].round(1).tolist()).add_yaxis("5-10年经验", edu_exp_salary['5-10年'].round(1).tolist()).set_global_opts(title_opts=opts.TitleOpts(title="不同学历和经验组合的平均薪资"),yaxis_opts=opts.AxisOpts(name="薪资(千元)"),))bar2.render_notebook()
# 计算学历差距和经验弥补master_avg = edu_df[edu_df['学历要求'] == '硕士']['薪资月薪(K)'].mean()bachelor_avg = edu_df[edu_df['学历要求'] == '本科']['薪资月薪(K)'].mean()print(f"不同学历平均薪资对比:")print(f"硕士平均薪资: {master_avg:.1f}k, 本科平均薪资: {bachelor_avg:.1f}k")print(f"硕士比本科高: {(master_avg - bachelor_avg):.1f}k ({(master_avg/bachelor_avg-1)*100:.1f}%)")
分析数据分析岗学历与薪资关系,硕士学历平均薪资(18.4k)比本科(17.6k)高约0.7k(4.1%),对于1-3年经验者,硕士比本科高约0.5k,对于3-5年经验者,硕士比本科高约0.6k,本科5-10年经验者(23.2k)的薪资逼近。
硕士5-10年经验者(25.0k),硕士学历优势缩小约1.8k,硕士学历在职业生涯初期有优势,但3-5年工作经验可基本弥补学历差距,到5年的时候,本科学历月薪资已经逼近硕士学历月薪资水平。
后台回复数据分析入门,获取数据分析入门资料
关注和星标『大话数据分析』
和作者一起学习数据分析!
👆点击关注|设为星标|干货速递👆
前蚂蚁金服数据运营,现京东经营分析,公众号、知乎、头条「大话数据分析」主理人,专注于数据分析的实践与分享,掌握Python、SQL、PowerBI、Excel等数据分析工具,擅长运用技术解决企业实际问题。

