🤵♂️ 个人主页:@艾派森的个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
目录
数据集介绍
本次实验数据集来源于智联招聘网中关于BI工程师岗位的招聘信息,共计1800条数据,每条招聘信息包括岗位名称、公司、薪资、城市、工作类型、学历要求、工作经验要求共7个字段。
实验工具
python3.10
jupyter notebook
实验过程
导入数据
查看数据大小
查看数据基本信息
从结果中可以发现在学历要求这一列变量中存在缺失值
数据预处理
首先对原始数据进行缺失值和重复值的处理,由于缺失数据较少,这里统一直接删除即可
处理各特征数据:
jobname岗位名称 :剔除不包含bi的岗位(用None先表示),只保留含有bi的岗位。
salary薪资:将薪资范围中的最低最高值转换为平均薪资,同时由于有少数薪资为“薪资面议”、‘校招’等全都表示为None,后面一并处理。
city城市:将原始数据中的城市+地区的数据转为城市,比如“北京-朝阳区”转化为北京市。
wrokingExp工作经验:将原数据中的无经验改为不限。
从处理后的结果可发现,最后剩余的数据还有1446条。
数据可视化
导入数据可视化用到的第三方包
1.分析BI工程师岗位的评价薪资分布情况
从平均薪资分布情况来看,目前BI工程师岗位在智联招聘网站的平均薪资为13.5K,主要薪水区间大概在12-15K。
2.分析BI岗位学历要求
从岗位学历要求来看,BI工程师岗位的要求不高,绝大多数为大专和本科,只有极少数为硕士和博士。
3.分析BI岗位工作经验要求
从结果来看,绝大多数要求为5年以下,其中1-3年最多,其次是3-5年,最后是不限。
4.分析哪种工作类型需求最多
从词云图中我们可以看出BI工程师的工作类型中装修、建筑、土木、市政工程、互联网开发、软件较多,说明BI工程师岗位主要为建筑和互联网两个行业。
5.分析各城市岗位数量分布
图片如果失效无法展出,小伙伴只要按照代码即可自己画出,该图就是在地图上以热力图的形式展示各个城市的岗位数量。
6.分析平均薪资最高的前十名城市
7.分析薪资最高的前十名公司及岗位信息
总结
1.目前BI工程师岗位在智联招聘网站的平均薪资为13.5K,主要薪水区间大概在12-15K。
2.从城市岗位需求数量分布来看,BI工程师需求主要集中在北京、上海、深圳、广州区域;各国内排在前面的分别为深圳(15.63K)、上海(15.62K)、北京(15.52)、杭州(12.07K)、成都(11.69K)、广州(11.19K)。
3.从工作年限的平均薪水和岗位需求数量来看,工作5-10年的资深BI工程师的平均薪水可以达到20K以上,其中大部分的工作需求年限为3-5年,平均薪水为15.12K。
4.从学历方面来看,最低学历需求主要以本科/大专为主,本科和大专学历要求的平均薪资分别为12.36K和13.71K,博士和硕士学历需求很少。
5.一些高薪的招聘企业,最高的可以给到30K~40K的薪酬水平,其中主要是互联网公司为主。
源代码
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
data = pd.read_excel('BI工程师_智联招聘.xlsx')
data.head()
data.shape
data.info()
data.dropna(inplace=True) # 删除缺失值
data.drop_duplicates(inplace=True) # 删除重复值
data.shape
# 处理jobName
def dispose_jobname(x):
# 剔除掉不包含‘bi’的jobname
if 'bi' not in x.lower():
return None
else:
return x
# 处理salary薪资
def dispose_salary(x):
try:
min_salary = int(x.split('-')[0][:-1])
max_salary = int(x.split('-')[1][:-1])
return (min_salary+max_salary)/2
except:
return None
# 调用jobname处理函数
data['jobName'] = data['jobName'].apply(dispose_jobname)
# 调用salary处理函数
data['salary'] = data['salary'].apply(dispose_salary)
# 处理city城市
data['city'] = data['city'].apply(lambda x:x.split('-')[0]+'市')
# 处理工作经验,将无经验归为不限
data['workingExp'].replace({'无经验':'不限'},inplace=True)
# 删除前面处理异常数据的None
data.dropna(inplace=True)
print(data.shape)
data.head()
import matplotlib.pylab as plt
import seaborn as sns
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import ThemeType
sns.set(font='SimHei')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False #解决符号无法显示
# 分析BI工程师岗位的评价薪资分布情况
sns.distplot(data['salary'],kde=True)
plt.title('平均薪资分布情况')
plt.show()
# 分析岗位学历要求
df1 = data['eduLevel'].value_counts()
pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))
pie.add('数量',
[list(z) for z in zip(df1.index.to_list(),df1.values.tolist())],
radius=['50%','70%'])
pie.set_global_opts(title_opts=opts.TitleOpts(title="BI工程师岗位学历要求"))
pie.render_notebook()
# 分析经验要求
df2 = data['workingExp'].value_counts()
bar = Bar(init_opts=opts.InitOpts(theme = ThemeType.LIGHT)) # 添加背景
bar.add_xaxis(df2.index.to_list())
bar.add_yaxis('',df2.values.tolist())
bar.set_global_opts(title_opts=opts.TitleOpts(title="BI工程师岗位经验要求"))
bar.render_notebook()
# 分析哪种工作类型需求最多
from pyecharts.charts import WordCloud
import collections
result_list = []
for i in data['jobtype'].values:
word_list = str(i).split('/')
for j in word_list:
for n in j.split(','):
result_list.append(n)
result_list
word_counts = collections.Counter(result_list)
word_counts_top = word_counts.most_common(100)
print(word_counts_top)
wc = WordCloud()
wc.add('',word_counts_top)
wc.render_notebook()
# 分析各岗位
df3 = data['city'].value_counts()
city_data = city_data = [[x,y] for x,y in zip(df3.index.to_list(),df3.values.tolist())]
map = Map()
map.add('地区',city_data,
maptype='china-cities',
is_map_symbol_show=False,
label_opts=opts.LabelOpts(is_show=False))
map.set_global_opts(
title_opts=opts.TitleOpts('各城市岗位数量分布'),
visualmap_opts=opts.VisualMapOpts(max_=200,min_=1)
)
map.render(path='各城市岗位数量分布.html')
map.render_notebook()
# 分析平均薪资最高的前十名城市
data.groupby('city')['salary'].sum().sort_values(ascending=False).head(10)[::-1].plot(kind='barh')
plt.title('薪资最高的前十名城市')
plt.xlabel('salary')
plt.show()
# 分析薪资最高的前十名公司及岗位信息
data.sort_values(by='salary',ascending=False)[['city','salary','company','jobtype']].head(10)