在数字化时代,数据分析已成为各行各业不可或缺的重要技能。为了深入了解当前市场对数据分析师岗位的需求情况,我们从BOSS直聘平台上爬取了一份关于数据分析师招聘信息的数据集。本博客将通过对这份数据进行可视化分析,揭示数据分析师岗位的地域分布、薪资水平、经验要求、学历要求以及技能标签等关键信息,帮助求职者更好地把握市场动态,制定职业规划。
一、数据集简介
本次分析的数据集包含了以下字段:
二、数据预处理
在正式分析之前,我们加载数据集并进行了预处理,具体流程如下:
2.1 加载分析需要的库
import numpy as npimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as pltimport warningsfrom scipy.stats import norm,modeimport refrom collections import Counterimport pyecharts.options as optsfrom pyecharts.charts import WordCloud plt.rcParams['font.sans-serif' ] = ["SimHei" ] plt.rcParams['axes.unicode_minus' ] = False
2.2 导入数据
df = pd.read_csv("boss.csv" ,header=None ) df.columns = ['company' ,'job_position' ,'job_address' ,'job_salary' ,'job_exper' ,'company_type' ,'tags' ] df.head() df.info()
数据一共有7个维度,2537条招聘记录,而且数据中无缺失值的存在。
2.3 数据清洗
首先把工作job_exper :经验要求及学历,拆分成工作经验experience 和学历diploma 字段;
df["experience" ]=df["job_exper" ].str.extract("^(\d+/?-\d+)" ) df["diploma" ]=df["job_exper" ].str[-2 :] df.duplicated().sum() df["experience" ].replace(np.nan,"经验不限" ,inplace=True ) df["experience" ].replace("1-3" ,"1-3年" ,inplace=True ) df["experience" ].replace("3-5" ,"3-5年" ,inplace=True ) df["experience" ].replace("5-10" ,"5-10年" ,inplace=True ) df["experience" ].unique()
def avg_ar (x) : if "-" in x: a,b=x.split("-" ) return (int(a)+int(b))/2 else : return None df["avg_address" ]=df["job_salary" ].apply(lambda x: re.split("K|元" ,x)[0 ]) df["avg_address" ]=df["avg_address" ].apply(lambda x: avg_ar(x)) df.head()
三、可视化分析
为了进行这些可视化分析,我们将使用Python及其相关库(如pandas、matplotlib、seaborn等)来处理和分析数据。以下是一个详细的步骤指南和相应的Python代码示例。
3.1 各个城市数据分析岗位招聘数量情况
我们可以使用matplotlib或seaborn来绘制各个城市数据分析岗位招聘数量情况。
city_job_num = df['job_address' ].value_counts().reset_index() city_job_num.columns = ['city' ,'job_nums' ] sns.barplot(x='city' , y='job_nums' , data=city_job_num) plt.xticks(rotation=45 ) plt.title('各城市数据分析师招聘数量情况' ) plt.show()
从图中我们可以知道,南京 发布的数据分析招聘信息数量最多;
3.2 数据分析师在各城市薪资水平情况
我们可以使用matplotlib或seaborn来绘制薪资水平的柱状图。
city_salaries = df.groupby('job_address' )['avg_address' ].mean().reset_index() sns.barplot(x='job_address' , y='avg_address' , data=city_salaries) plt.xticks(rotation=45 ) plt.title('数据分析师在各城市薪资水平情况' ) plt.show()
从图中我们可以知道,北京、杭州、上海、深圳 发布的数据分析招聘信息薪资最高;
3.3 薪资和城市分析
我们已经计算了各城市的在一定范围内的薪资占比情况;
fig=plt.figure(figsize=(10 ,5 ),dpi=100 ) plt.subplot(121 ) temp=df[df.avg_address<10 ].groupby("job_address" ).avg_address.count() temp=pd.DataFrame(temp).sort_values("avg_address" ).iloc[-8 :] plt.pie(temp["avg_address" ],labels=temp.index,autopct="%.2f%%" ) plt.title("薪资小于10K的城市占比" ) plt.subplot(122 ) temp=df[df.avg_address>10 ].groupby("job_address" ).avg_address.count() temp=pd.DataFrame(temp).sort_values("avg_address" ).iloc[-8 :] plt.pie(temp["avg_address" ],labels=temp.index,autopct="%.2f%%" ) plt.title("薪资大于10K的城市占比" ) plt.show()
从上图可以看出,在薪资小于10k的城市占比中南京和武汉发布的招聘最高,在薪资大于10k的城市占比中北京和杭州发布的招聘信息最多。
3.4 热门城市薪资箱线图
我们可以选择几个热门城市,并绘制它们的薪资箱线图。
df1=df[df["avg_address" ]<100 ] data1=df1[df.job_address=="北京" ]["avg_address" ] data2=df1[df.job_address=="上海" ]["avg_address" ] data3=df1[df.job_address=="广州" ]["avg_address" ] data4=df1[df.job_address=="深圳" ]["avg_address" ] data5=df1[df.job_address=="杭州" ]["avg_address" ] plt.figure(figsize=(12 ,6 )) plt.boxplot([data1,data2,data3,data4,data5], labels=["北京" ,"上海" ,"广州" ,"深圳" ,"杭州" ], flierprops={"marker" :"o" ,"markerfacecolor" :"r" ,"color" :"k" }, patch_artist=True , boxprops={"color" :"k" ,"facecolor" :"#FFFACD" }) ax=plt.gca() ax.patch.set_facecolor("#FFFAFA" ) ax.patch.set_alpha(0.8 ) plt.title("主要城市薪资水平箱线图" ,fontsize=15 ) plt.ylabel("薪资(单位:K)" ,fontsize=12 ) plt.show()
从上图中可以看出,几个主要的热门城市发布的招聘信息来看,平均薪资最高的是北京 ,最低的是广州 ,杭州的高工资和低工资都比较多,求职者的可能性更大,发展机遇就好,努力奋斗 ;
3.5 学历与薪资数据分析
我们可以使用条形图来展示不同学历的薪资分布。
d=df["avg_address" ].groupby(df["diploma" ]) d_avg = d.mean() c=list(d_avg.index) v=list(range(1 ,len(c)+1 )) w=d_avg.values.astype("int64" ) x=d.median().values.astype("int64" ) move=0.4 plt.figure(figsize=(12 ,5 )) plt.bar(v,w,width=move,color="#eed777" ) plt.bar([i+move for i in v],x,width=move,color="#334f65" ) a=np.arange(0 ,7 )+1.2 plt.xticks(a,c,fontsize=15 ) plt.yticks(list(range(0 ,60 ,10 )),fontsize=15 ) plt.legend(["均值" ,"中位数" ]) plt.title("各学历薪资均值及中位数比较图" ,fontsize=16 ) plt.xlabel("学历" ,fontsize=12 ) plt.ylabel("薪资(单位:K)" ,fontsize=12 )for e,f in zip(v,w): plt.text(e,f+1 ,"{}K" .format(f),ha="center" ,fontsize=12 )for g,h in zip([i+move for i in v],x): plt.text(g,h+1 ,"{}K" .format(h),ha="center" ,fontsize=12 ) plt.show()
从上图可以看得出,薪资和学历一般是呈现正相关的关系,学历越高薪资也会越高,兄弟们,不说了写好卷学历去了 。
3.6 学历与岗位需求的数据分析
我们可以使用饼状图来展示不同学历在岗位需求中的占比。
data=df["diploma" ].value_counts() y=data.values plt.figure(figsize=(6 ,6 )) plt.pie(y,labels=data.index,autopct="%.2f%%" ) plt.show()
从上图可以看出,数据分析岗位招聘要求中本科学历是占绝大多数的。
3.7 工龄与薪资数据分析
我们可以使用条状图来展示不同工龄的薪资分布。
d=df["avg_address" ].groupby(df["experience" ]) d_avg = d.mean() c=list(d_avg.index) v=list(range(1 ,len(c)+1 )) w=d_avg.values.astype("int64" ) x=d.median().values.astype("int64" ) move=0.4 plt.figure(figsize=(14 ,8 )) plt.bar(v,w,width=move,color="#002c53" ) plt.bar([i+move for i in v],x,width=move,color="#0c84c6" ) a=np.arange(0 ,4 )+1.2 plt.xticks(a,c,fontsize=15 ) plt.yticks(list(range(0 ,35 ,5 )),fontsize=15 ) plt.legend(["均值" ,"中位数" ]) plt.title("各学历薪资均值及中位数比较图" ,fontsize=16 ) plt.xlabel("工作经验" ,fontsize=12 ) plt.ylabel("薪资(单位:K)" ,fontsize=12 )for e,f in zip(v,w): plt.text(e,f+1 ,"{}K" .format(f),ha="center" ,fontsize=12 )for g,h in zip([i+move for i in v],x): plt.text(g,h+1 ,"{}K" .format(h),ha="center" ,fontsize=12 ) plt.show()
从图中可以看出,工作的年限越长,工资也会相应的高一些。
3.8 工龄与市场需求分析
我们可以使用饼状图来展示不同工龄在市场需求中的占比。
data=df["experience" ].value_counts() y=data.values plt.figure(figsize=(6 ,6 )) plt.pie(y,labels=data.index,autopct="%.2f%%" ,colors = ['tomato' , 'lightskyblue' , 'goldenrod' , 'green' ]) plt.show()
从上图可以看出,工龄3-5年工作的人有一定的工作经验,工资也相对较小,所以比较受欢迎。的需求量是最大的占35.87%,该3-5年工作的人有一定的工作经验,工资也相对较小,所以比较受欢迎。
3.9 数据分析岗技能需求情况
tag = df['tags' ].tolist() tags = []for item in tag: item_split = item.split(',' ) tags.extend(item_split) counter = Counter(tags) element_counts = dict(counter) data = []for item in element_counts.keys(): data.append((item,element_counts.get(item))) c = ( WordCloud() .add( series_name="数据分析岗位技能需求" , data_pair=data, word_size_range=[6 , 66 ]) .set_global_opts( title_opts=opts.TitleOpts( title="数据分析岗位技能需求" , title_textstyle_opts=opts.TextStyleOpts(font_size=23 ) ), tooltip_opts=opts.TooltipOpts(is_show=True ), ) .render("basic_wordcloud.html" ) )
从上图可以看出,SQL、Python等数据分析工具是基础技能,数据挖掘、大数据处理、建模等高级技能是加分项。
四、结论与建议
通过对BOSS直聘平台上数据分析师招聘信息的可视化分析,我们得出以下结论:
数据分析师岗位主要集中在一线城市和新一线城市,薪资水平较高但竞争激烈。
市场对数据分析师的经验和学历要求以本科为主,但高级岗位对学历和经验要求更高。
SQL、Python等数据分析工具是基础技能,机器学习、大数据处理等高级技能是加分项。
针对以上结论,我们提出以下建议:
求职者应结合自身实际情况,选择适合自己的城市和行业方向。
注重提升个人技能和经验积累,尤其是SQL、Python等数据分析工具的使用能力。
关注市场动态和新兴技术趋势,不断拓展自己的知识边界和技能组合。