招聘数据数据分析及可视化
- 数据来源
- 前言
- 一、观察数据
- 删除重复值
- 数据加工
- 二、利用python进行数据分析和可视化
- 1.引入库
- 2.读入数据
- 观察描述统计,了解数据大概信息
- 3.数据预处理
- 3.1数据清洗
- 3.1.1 删除重复值
- 3.1.2缺失值处理
- 3.2数据加工
- 4.数据可视化
- 4.1城市岗位数量
- 4.2学历和工作经验
- 4.3薪资情况
- 4.3.1薪资与学历的关系
- 4.3.2薪资与工作经验关系
- 4.3.3薪资与岗位数量的关系
- 4.3.4主要城市薪资水平箱线图
- 4.4 岗位相关情况
- 三、tableau可视化呈现
- 1.城市岗位数量地理图及气泡图
- 2.学历和工作要求
- 3.薪资情况
- 4.汇总
- 四、分析总结
- 总结
数据来源
本数据来自天善智能的数据分析课程提供的数据分析师相关的招聘数据
前言
由于2021春招已经启动很久了,最近为了找工作将之前完成的数据分析项目复现,同时也复习一下excel和python以及tableau相关知识。
本文根据提供的招聘信息数据进行数据分析以及可视化,使用的工具有excel,jupyter,以及tableau,展示部分代码以及数据分析过程。
一、观察数据
进行数据分析首先要知道数据是什么,有哪些内容,结构是什么样的,因此先将已有的csv文件通过excel打开观察数据,然后可通过excel进行简单的数据处理。
我们来看下数据:可以看到有十二个字段,其中比较重要的有positionId、city、eduaction、salary、workYear这几个字段我们后续的分析中会经常用到。
删除重复值
如果这些数据存在重复值,这些重复值可能会对我们的分析产生一定的干扰,所以我们需要删除重复值。由于每个职位的positionId都是唯一的所以我们可以根据这个来判断是否存在重复值,如果存在则删除重复值。
由于提供的数据比较干净,未发现重复值。
数据加工
我们可以看到由于薪水是以上下限显示的,不利于后续的分析,故将薪水分成三列,分别为下限,上限以及平均薪水。这个操作在excel里操作比较简单,当然也可以在利用python进行处理。这里我选择在excel里进行划分。
这里我使用find函数将salary中k的位置找出来,再用left和right函数将薪资下限和上限截取出来:
对值进行处理,将得到的结果全部转换为数值。然后利用替换将k给替换成空,其中可能会存在其它干扰数据这里我全部替换为空值。处理完之后顺便将平均薪资求出来,便于后续分析。
这样excel对数据的处理就差不多了,接下来就是把数据导入到python里进行分析和可视化。当然利用excel对处理后的数据进行数据透视也可以,这里我选择使用python。
二、利用python进行数据分析和可视化
1.引入库
引入数据分析常用库,代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
2.读入数据
代码如下:
data = pd.read_csv('dataanalyst.csv')
data.head()
观察描述统计,了解数据大概信息
代码如下:
data.describe(include=['O'])
这里我们可以大概了解这个数据表一共有五千多条数据,city有13个,其中北京出现的次数最多,也就是北京提供的职位数最多。还可以看到学历要求是本科的最多,工作要求是3-5年的最多等等。
data.describe()
这里我们主要是看薪资方面的描述统计,其中包括平均值,中位数,标准差等数据。
3.数据预处理
杂乱的数据并不利于我们的分析,我们需要对数据进行处理来获取可以用于可视化的干净数据。
3.1数据清洗
数据清洗的主要内容包括: 重复值, 缺失值以及空值的处理。
3.1.1 删除重复值
由于我们在载入之前就已经删除了重复值,这里我们可以略过。
3.1.2缺失值处理
我们先看一下哪些字段存在缺失值
#计算每个特征中的缺失值个数
data.isnull().sum()
我们可以看到firstType,secondType,positionLables,top 四个字段存在少量缺失值。
在pandas中对缺失值的处理方法有:
-
利用均值等集中趋势度量填充
-
利用统计模型计算出的值填充
-
保留缺失值
-
删除缺失值
由于这些数据存在极少量的缺失值,对数据几乎没有影响。这里我选择通过描述统计中出现最多的值来填充。
data.firstType.fillna(value = '技术',inplace= True)
data.secondType.fillna(value = '后端开发',inplace= True)
data.positionLables.fillna(data.positionLables.mode()[0], inplace = True)
data.top.fillna(value =21.0,inplace = True)
最后检查一下还有没有缺失值
3.2数据加工
这里我们需要加工的是salary字段,需要将薪资的上限和下限划分出来,同时需要求出平均工资。之前我们已经在excel里面处理过了,这里可以忽略。
到现在我们的数据处理就完成了,接下来就是可视化分析环节。
4.数据可视化
4.1城市岗位数量
data.groupby(by ='city').positionId.count().sort_values(ascending=False)
我们可以看到北京提供的岗位数量最多,上海、深圳、杭州也比较多。所以一线城市对数据分析师的需求量还是比较大的。
我们再来看下每个城市提供的岗位对学历要求是怎样的,这里我们需要先建立一个数据透视表:
data.pivot_table(index = 'city',columns = 'education',values = 'avg',aggfunc = 'count')
然后绘制出堆叠图
可以看到每个城市对学历要求是本科的岗位最多。
每个城市提供的岗位对工作经验要求是怎样的,绘制方法与上面相似
可以看到每个城市的岗位对工作经验3-5年的需求比较多.
4.2学历和工作经验
fig, ax = plt.subplots(1, 2, figsize = (18, 8))
education_count = data.education.value_counts()
workYear_count = data.workYear.value_counts()
patches, l_text, p_text = ax[0].pie(education_count, autopct = '%.2f%%', labels = education_count.index )
m = -0.01
for t in l_text[6:]:t.set_y(m)m += 0.1print(t)
for p in p_text[6:]:p.set_y(m)m += 0.1
ax[0].set_title('数据分析岗位各学历要求所占比例', fontsize = 24)
index, bar_width = np.arange(len(workYear_count)), 0.6
ax[1].barh(index*(-1) + bar_width, workYear_count, tick_label = workYear_count.index, height = bar_width)
ax[1].set_title('数据分析岗位工作经验要求', fontsize= 24)
学历要求多以本科,大专为主, 工作经验要求中3-5工作经验要求为主, 可见招聘主要面向的是有经验的数据分析师.
4.3薪资情况
4.3.1薪资与学历的关系
fig = plt.figure(figsize=(10,8))
Salary_education = data.groupby('education', as_index = False)['avg'].mean()
plt.bar(Salary_education.education, Salary_education.avg, width = 0.6)
for x,y in enumerate(Salary_education.avg):plt.text(x, y, '%.2f'%y, ha = 'center', va='bottom')
可以看到学历越高,相对薪资也就越高。其中本科和硕士的薪资水平相差不大。
4.3.2薪资与工作经验关系
Salary_Year = data.groupby('workYear', as_index = False)['avg'].mean()
plt.barh(Salary_Year.workYear, Salary_Year.avg, height = 0.6)
for x, y in enumerate(Salary_Year.avg):plt.text(y+0.1,x, '%.2f'%y, va = 'center')
可以看到工作经验越久,薪资水平越高。
4.3.3薪资与岗位数量的关系
fig = plt.figure(figsize = (10,9))
#各地平均工资
avg = data.groupby(by='city',as_index = False)['avg'].mean()
#各地岗位数量
city = data.groupby(by='city',as_index=False)['positionId'].count().sort_values(by = 'positionId',ascending = False)
#联合数据
city = pd.merge(avg,city,how='left',on = 'city')
plt.bar(city.city, city.positionId,width=0.4)
plt.plot(city.city, city.avg*1000, '--',color = 'r', alpha = 0.9, label='平均薪资')
for x, y in enumerate(city.avg*1000):plt.text(x, y, '%.0f'%y, ha = 'right', va='bottom')
for x, y in enumerate(city.positionId):plt.text(x, y, '%s'%y, ha = 'center', va='bottom')
plt.legend()
我们可以看到岗位需求的多的城市,相对的薪资水平就高。需求量少的地方,薪资水平就会降低。
4.3.4主要城市薪资水平箱线图
#将字段中的'[]',"''"除去
data1=data[data.city=='北京']['avg']
data2=data[data.city=='上海']['avg']
data3=data[data.city=='深圳']['avg']
data4=data[data.city=='杭州']['avg']
data5=data[data.city=='广州']['avg']
plt.figure(figsize=(12,6),dpi=80)
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()
我们发现北京和上海两个城市的薪资水平相对两极分化大一点。
4.4 岗位相关情况
我们先来看看岗位的类型分布
fig = plt.figure(figsize=(16,6))
data.groupby(by ='firstType').positionId.count().sort_values(ascending=False).plot.bar()
我们可以发现大部分的岗位都是技术类的,也有一小部分是产品和设计类。
接下来我们看看岗位标签的词云图
#将字段中的'[]',"''"除去
text = data.positionLables.str[1:-1].str.replace("'","").dropna().to_string()
# 绘制词云图
plt.figure(figsize=(10,8))
wordcloud = WordCloud(font_path = "simhei.ttf",background_color = "white",min_font_size = 10,color_func = lambda *args, **kwargs:(0,0,0),width = 900, height = 600).generate(text)
plt.imshow(wordcloud)
plt.axis("off")
由于我们的数据全是数据分析师相关的岗位信息,所以可以看到数据分析师,分析师占据了大多数,其他的岗位还有数据挖掘,数据库,产品经理也比较多
我们再来看看岗位提供的福利词云图
text = data['positionAdvantage'].dropna().to_string()
# 绘制词云图
plt.figure(figsize=(10,8))
wordcloud = WordCloud(font_path = "simhei.ttf",background_color = "white",min_font_size = 10,color_func = lambda *args, **kwargs:(0,0,0),width = 900, height = 600).generate(text)
plt.imshow(wordcloud)
plt.axis("off")
我们看到大部分公司的福利待遇都是五险一金,弹性工作,发展空间大,带薪年假,年终奖等等。
到这里,pyhon数据处理及可视化就完成了,接下来我们把数据导入tableau进行可视化处理。
三、tableau可视化呈现
1.城市岗位数量地理图及气泡图
地理图
气泡图
2.学历和工作要求
学历要求饼图
工作经验要求树状图
3.薪资情况
各个城市岗位数与薪资水平
不同学历要求的工资水平
不同工作经验的工资水平
4.汇总
tableau可视化就完成啦
四、分析总结
- 数据分析岗位的学历要求以本科,大专为主, 经验中3-5工作经验占多数.
- 北上广深杭等经济相对发达的地区对数据分析岗位的需求量大, 且薪资水平较高于其他地区; 学历越高, 经验越丰富对应的薪资水平也会增高.
- 一线城市提供的岗位更多,需求更大,薪资水平也更高,因此找数据分析师的工作的可以优先选择北上广深这几个城市。
总结
以上就是这次招聘岗位数据分析要讲的内容,本文简单介绍了数据分析的大概步骤:数据采集——数据预处理——可视化。
其中数据处理和可视化操作均可在excel或者python中完成,tableau也可以进行数据处理,但是并不建议使用。选择工具主要是取决于哪个处理起来更方便快捷。
参考文章
[1]:https://blog.csdn.net/weixin_41261833/article/details/104924038?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242
[2]: https://www.cnblogs.com/star-zhao/p/9873860.html