基于Python|“数据分析岗位”招聘情况分析!
◆ ◆ ◆ ◆ ◆
前言
数据分析岗位,的确是最近两年最火爆、话题度最高的岗位。
根据从业经验、技能要求的不同,可细分为数据分析工程师、数据分析师、数据专员。
小编我特别荣幸于2017年7月份开始逐步在工作中接触到数据分析,并且运用数据分析得到的结果来指导业务,增进业绩,实现了公司数据化运营的短期目标。
可以说,我转行转的特别轻松,我是幸运的;
也可以说,我转行转的着实被动,我是*的。嘿嘿,看到这里,有没有想打死我的冲动?!
不管怎么说,小编我现在非常热爱数据分析师这份职业,也希望尽自己的一份努力与辛苦,帮助更多仍在迷茫中前行的萌新。
今天,给大家带来的是:基于Python——“数据分析岗位”招聘情况分析!
数据分析实战
今天,我们将用网络爬虫爬取过来的1193847条数据进行深度数据分析,剖析一下到底值不值得放弃现有的工作、成就毅然决然地转行数据分析呢?!
数据处理
异常值处理
重复值处理
空值处理
类型转换
数据分析
岗位数量、招聘人数
所处行业、工作地点
学历要求、薪资水平
分析报告
一、导包、读取数据
import pandas as pd
import warnings
import numpy as np
warnings.simplefilter(action='ignore', category=FutureWarning)
warnings.simplefilter(action='ignore', category=UserWarning)
import matplotlib as mlt
import matplotlib.pyplot as plt
%matplotlib inline
# 读取txt格式的数据
dataset = pd.read_table(r'C:/Users/Administrator/Desktop/recruits.txt',low_memory = False)
dataset.info()# 全览数据可以发现:数据缺少字段名
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1193846 entries, 0 to 1193845
Data columns (total 13 columns):
940864 1193846 non-null int64
UI 1193846 non-null object
用户界面(UI)设计 1193846 non-null object
8001-10000 1193846 non-null object
3-5 1193846 non-null object
本科 1193846 non-null object
全职 1193846 non-null object
2017-11-15 1193846 non-null object
1 1193846 non-null object
杭州****技术有限公司 1193846 non-null object
计算机软件 1193690 non-null object
20-99 1193669 non-null object
杭州 1193801 non-null object
dtypes: int64(1), object(12)
memory usage: 118.4+ MB
# 自定义字段名
data = pd.read_table(r'C:/Users/Administrator/Desktop/recruits.txt',header = None,index_col = '序号',low_memory = False,
names =['序号','岗位职责','岗位名称','薪资','工作时长','学历','职业类型','发布时间','招聘人数','公司名称','所处行业','公司规模','工作地点'])
data.head()
# 自定义字段名添加成功
data.info()
# result
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1193847 entries, 940864 to 926760
Data columns (total 12 columns):
岗位职责 1193847 non-null object
岗位名称 1193847 non-null object
薪资 1193847 non-null object
工作时长 1193847 non-null object
学历 1193847 non-null object
职业类型 1193847 non-null object
发布时间 1193847 non-null object
招聘人数 1193847 non-null object
公司名称 1193847 non-null object
所处行业 1193691 non-null object
公司规模 1193670 non-null object
工作地点 1193802 non-null object
dtypes: object(12)
memory usage: 118.4+ MB
None
# 重置索引
data = data.reset_index()
data.tail()
# 获取数据集的列名data.columns
# resultIndex(['岗位职责', '岗位名称', '薪资', '工作时长', '学历', '职业类型', '发布时间', '招聘人数', '所处行业', '公司规模', '工作地点'], dtype='object')
# 转换数据集,去掉序号,去掉公司名称(脱敏)
data = data[['岗位职责', '岗位名称', '薪资', '工作时长', '学历', '职业类型', '发布时间', '招聘人数','所处行业', '公司规模', '工作地点']]
data.info()
# result
data = data[['岗位职责', '岗位名称', '薪资', '工作时长', '学历', '职业类型', '发布时间', '招聘人数','所处行业', '公司规模', '工作地点']]
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1193847 entries, 0 to 1193846
Data columns (total 11 columns):
岗位职责 1193847 non-null object
岗位名称 1193847 non-null object
薪资 1193847 non-null object
工作时长 1193847 non-null object
学历 1193847 non-null object
职业类型 1193847 non-null object
发布时间 1193847 non-null object
招聘人数 1193847 non-null object
所处行业 1193691 non-null object
公司规模 1193670 non-null object
工作地点 1193802 non-null object
dtypes: object(11)
memory usage: 100.2+ MB
data.head(10)
二、数据处理
# 查看数据集是否存在异常值print('最早发布时间:',data['发布时间'].unique().min(),',最晚发布时间:',data['发布时间'].unique().max())
# 可以发现:发布时间异常最早发布时间:1970-01-01 ,最晚发布时间:2017-11-23
# 查看异常数据data[(data['发布时间']<'2017-01-01')]
# 仅保留17年及以后的招聘信息
data = data[(data['发布时间']>='2017-01-01')]
# 重复值统计
data.duplicated().sum()
# result
35950
# 去重
data.drop_duplicates(inplace=True)
# 再次查看数据集情况,发现存在空值
data.info()
# result
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1157827 entries, 0 to 1193846
Data columns (total 11 columns):
岗位职责 1157827 non-null object
岗位名称 1157827 non-null object
薪资 1157827 non-null object
工作时长 1157827 non-null object
学历 1157827 non-null object
职业类型 1157827 non-null object
发布时间 1157827 non-null object
招聘人数 1157827 non-null object
所处行业 1157674 non-null object
公司规模 1157667 non-null object
工作地点 1157796 non-null object
dtypes: object(11)
memory usage: 106.0+ MB
# 空值处理:统计空值数量
data.isnull().sum()
# result
岗位职责 0
岗位名称 0
薪资 0
工作时长 0
学历 0
职业类型 0
发布时间 0
招聘人数 0
所处行业 153
公司规模 160
工作地点 31
dtype: int64
# 公司规模列空值较多,可具体查看
data[data['公司规模'].isnull()]
# 删除空值data.dropna(inplace=True)
# 再次查看,发现所有数据都处理完毕data.info()
# result<class 'pandas.core.frame.DataFrame'>Int64Index: 1157647 entries, 0 to 1193846Data columns (total 11 columns):岗位职责 1157647 non-null object岗位名称 1157647 non-null object薪资 1157647 non-null object工作时长 1157647 non-null object学历 1157647 non-null object职业类型 1157647 non-null object发布时间 1157647 non-null object招聘人数 1157647 non-null object所处行业 1157647 non-null object公司规模 1157647 non-null object工作地点 1157647 non-null objectdtypes: object(11)memory usage: 106.0+ MB
三、数据分析
# 仅选择数据分析师岗位进行分析,大家还可以进行数据分析专员等分析data_da = data[data['岗位名称']=='数据分析师'].copy() # 不加copy()容易警告:SettingWithCopyWarningdata_da[ data_da['招聘人数']=='若干'] # 为了分析的方便,去掉“若干”情况
# 数据处理,重新赋值
data_da.loc[ data_da['招聘人数']=='若干','招聘人数'] = 0
data_da['招聘人数'].value_counts()
# result1
35313 9575
9492 9346
7224 4328
2427 16210
14512 7830
719 2920
1518 1415
760 40
225 116
113 1
Name: 招聘人数, dtype: int64
# 查看招聘人数
data_da['招聘人数'] = data_da['招聘人数'].astype(int)
grb = data_da.groupby(['工作地点']).agg({'岗位名称':'count','招聘人数':sum}).sort_values(by = '岗位名称',ascending = False).head(10)
grb
四、可视化
# 绘图说明不同城市对数据分析师的需求数量
grb.plot(kind = 'bar',figsize=(10,5),fontsize=12)
plt.legend(['岗位数量','招聘人数'])
plt.xlabel('工作地点',fontsize=15)
plt.show()
# 查看所处行业情况
data['所处行业'].value_counts().head(10)
# result
互联网/电子商务 267519
计算机软件 261188
IT服务(系统/数据/维护) 95320
教育/培训/院校 94988
专业服务/咨询(财会/法律/力资源等) 52931
媒体/出版/影视/文化传播 49300
基金/证券/期货/投资 32005
电子技术/半导体/集成电路 28652
房地产/建筑/建材/工程 25118
通信/电信/网络设备 24828
Name: 所处行业, dtype: int64
# 筛选出北京地区互联网公司数据分析师招聘数据
subdata = data[data['所处行业'].isin(['互联网/电子商务'])][(data['岗位名称']=='数据分析师')&(data['工作地点']=='北京')]
subdata.iloc[:20,:]
# 学历因素subdata['学历'].value_counts(normalize = True)
# result本科 0.568910硕士 0.174679大专 0.142628不限 0.113782Name: 学历, dtype: float64
# 其他城市可能会用到-- subdata[subdata['学历'].isin(['中专','中技'])]-- subdata.loc[(subdata['学历']=='中专')|(subdata['学历']=='中技'),'学历'] = '不限'
# 绘图说明数据分析师对学历的要求subdata['学历'].value_counts(normalize = True)plt.pie(subdata['学历'].value_counts(normalize = True),labels = ['本科','硕士','大专','不限'],autopct='%.1f%%',startangle=180)plt.show()plt.close()
# 薪资情况subdata.groupby(['学历','工作时长'])[['薪资']].describe()
分析报告
1.本次共计处理元数据1193847条,来源于某著名求职类APP,可用于分析的数据为1157647条,所有数据发布时间均在17年,所以此分析报告代表17年数据分析师岗位情况,不过对19年、甚至20年求职的萌新具有现实指导意义。
2.由文中条形图可以看出,数据分析师岗位集中在一线城市,如北京、上海、深圳、广州;另外,西安对数据分析师的需求量是事先没有预料到的。
3.北京地区互联网行业对数据分析师的需求量最为旺盛,其次为计算机软件、IT服务业等。
4.北京地区互联网行业对数据分析师的学历要求本科占五成多,说明学历依然是筛选人才的门槛,不过大专学历也可以从事数据分析,需要更多的技能加持,良好的机遇。
5.北京地区互联网行业的数据分析师,相同工作年限本科、专科学历的薪资水平相差不大,对于刚转行的薪资水平基本处于8k-12k。
---------------------------------------- END ------------------------------------
读者朋友,如果您能认认真真地将文章看完,记得一定要帮严小样儿点点在看,就在文章右下角。
记得扫描二维码关注我哦,“转行数据分析,关注我就会特别简单”!
对您有帮助的话,记得转发、分享朋友圈,转行更顺利~
(交流群二维码,记得“在看”后加群学习)
“在看”的永远18岁~