Python Seaborn绘制数值箱型图实战:基于Boss直聘薪资数据分析
本文介绍如何使用Python的Seaborn库绘制数值箱型图,通过Boss直聘八个城市的算法岗位数据,展示不同职位的薪资分布。文章涵盖数据清洗、导入及绘图代码,重点解析箱线图、散点图叠加及辅助线的实现,帮助读者掌握多类别连续数据的对比分析方法。
一、概念介绍
箱型图(box-plot),也常被称为箱线图、盒型图或盒须图。在数据探索阶段或进行描述性分析时,它常被用来展示多类连续型数据的数值分布情况,有助于进行类间对比并快速识别异常值。
在单幅箱型图中,一个连续数值序列构成一个盒子,具体结构如下所示。

每个盒子主要展示数据的上四分位数Q1(25%)、中位数(50%)以及下四分位数Q3(75%)。我们将划分异常值的界限称为上下极限,它们距离Q1和Q3分别为1.5IQR(其中IQR=Q3-Q1,称为四分位距)。位于上下极限之外的点被称为异常点。异常值在不同场景下受到的重视程度不同,例如在研究目标群体薪资水平时,我们通常关注中位数和IQR,而忽略异常值。
二、数据展示
借助爬虫技术,我们在特定时间从Boss直聘首页随机获取了八个城市的三类检索词(数据分析师、数据挖掘工程师、算法工程师)的职位发布信息。最终得到的Excel表如下所示。

每个表格内的数据格式如下:

(其中平均月薪的计算方法是简单地通过区间中位数乘以薪期再除以12得到,例如8k-10k乘以16薪,则平均月薪为12000。)
三、数据导入
只需导入每个表格中的职位名称和平均月薪列。
import pandas as pd
city8_fullname = ['北京','重庆','武汉','深圳','南京','广州','成都','上海']
job_type = ['数据分析师','数据挖掘工程师','算法工程师']
salary_dic = {}
for i in range(len(city8_fullname)):
df = pd.DataFrame(pd.read_excel('./Boss直聘数据-八个城市/Boss直聘-'+city8_fullname[i]+'.xls'))
salary_dic[city8_fullname[i]] = df[['职位名称','平均月薪']]
salary_dic[city8_fullname[i]]['城市'] = pd.Series([city8_fullname[i]]*df.shape[0])
## 整合成画图需要的格式
salary = salary_dic[city8_fullname[0]]
for i in range(1,8):
salary = pd.concat([salary,salary_dic[city8_fullname[i]]],ignore_index="true")得到的数据结构如下:

四、画图
这里,我们使用的是Python语言,借助seaborn包完成绘图。
import matplotlib.pyplot as plt
import seaborn as sns
# 中文与正负号显示设置
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
# Draw
plt.figure(figsize=(14,8), dpi= 100)
sns.boxplot(x='城市', y='平均月薪', data=salary, hue='职位名称')
sns.stripplot(x='城市', y='平均月薪', data=salary, color='black', size=2, jitter=1)
for i in range(len(salary['城市'].unique())-1):
plt.vlines(i+.5, 10, 45, linestyles='solid', colors='gray', alpha=0.2)
plt.title('八大城市对口专业薪资分布', fontsize=20)
plt.legend(title='职位类型')
plt.xticks(fontsize=14)
plt.xlabel('城市',fontsize=16)
plt.ylabel('平均月薪',fontsize=16)
plt.yticks(fontsize=14)
plt.savefig(r'./绘图结果/薪资-薪资分布-箱线图.png')sns.stripplot------用于绘制分布散点图(如果是大样本的话不适用,但有一种一半密度一半箱型的类别,可以避免散点覆盖的情况)。
plt.vlines-----用于绘制辅助线。
hue-----可以理解为有多少组,在这里相当于除去城市外的第二个维度的分类。
结果图为:

上图中,我们在箱型图的基础上添加了散点,目的在于了解各城市薪资的数值集中分布情况。
总结
到此这篇关于用Python的seaborn画数值箱型图的文章就介绍到这了,更多相关Python seaborn箱型图内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









