2020年招聘分析

本文通过对智联招聘49183条数据的清洗和分析,揭示了数据分析岗位的趋势。主要发现包括:1) 民营、上市、国企是主要招聘方;2) 月薪5000-7000元需求最大;3) 本科和大专学历最受欢迎;4) 薪水与学历、经验正相关;5) 北上广深需求量大,深圳领先;6) 500人以下的中小型企业占主导;7) 金融和高科技行业薪资高。
摘要由CSDN通过智能技术生成

一、前述

之前学爬虫的时候采集了智联招聘默认推荐的职位,数据共49183条,9个数据项。
因为采集下来的数据实在是杂乱的很,所以这个项目重点在于对数据的清洗,算是对pandas、numpy进一步的练习。
可视化这里我使用的是pyecharts和matplotlib,matplotlib使用起来比较简便,pyecharts美化程度更高,官网也有大量可视化案例,各有各的优势吧。

二、分析流程

0、所需函数库

import pandas as pd 
import numpy as np 
import re
import jieba

from pyecharts.charts import Pie, Bar, Map, WordCloud,Line,Grid,Scatter,Radar,Page  #可视化
from pyecharts import options as opts
from pyecharts.globals import SymbolType
from pyecharts.globals import ThemeType
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import string
import seaborn as sns
%matplotlib inline

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.style.use('ggplot')

1、数据清洗

数据中共9个数据项,分别对应职位、公司、位置、薪酬范围、学历和经验、企业性质、企业人数、所属行业、岗位职责。应为数据中并没有列名称,因此手动添加,源数据如图
在这里插入图片描述

df = pd.read_csv("job_info.csv",
                       header=None,
                       names=['job','company','location','salary','education','company type','people','industry','prepon'],
                engine="python")
df.head()

1.1).去重

对于重复公司的职位去重

print(df.shape)
df.drop_duplicates(subset=['company','job'],inplace=True)
print(df.shape)
(71034, 10)
(49183, 10)

1.2).筛选所需职位

根据关键字,在职位一栏中筛选出所需要的职位,这里我选择的是与数据分析相关或者接近的职位。

# df['job'][0].count('分析')
# index = [0, 0, 0, 1, 2, 0, 0]
# np.array(index).sum(axis=0)>0
job_list = ['开发', '分析', '工程师', '数据', '运营', '产品']
# index = [df['job'][0].count(i) for i in job_list]

index = [df['job'].str.count(i) for i in job_list]
index = np.array(index).sum(axis=0)>0
job_info = df[index]
job_info.head()

筛选后得到目标职位,但由于岗位名称仍然归于杂乱,因此继续筛选,这里我将岗位在此细分。

job_list = ['数据分析', "数据统计","数据专员",'数据挖掘', '算法', '大数据',
            '开发工程师', '数据运营', '数据库','数据产品','数据管理']
job_list= np.array(job_list)

def change_job_name(x=None,name_list=job_list):
    index = [i in x for i in name_list]
#     print(index)
    if sum(index) > 0:
#         print(name_list[index])
        return name_list[index][0]
    else:
        return x

job_info['job'] = job_info['job'].apply(change_job_name)

job_info['job'] = job_info['job'].apply(lambda x: re.sub('数据统计','数据分析',x))
job_info['job'] = job_info['job'].apply(lambda x: re.sub('数据专员','数据分析',x))

1.3).薪水清洗

print(job_info['salary'].str[-1].value_counts())
print('*'*30)
print(job_info['salary'].str[-3].value_counts())
16122762425
Name: salary, dtype: int64
******************************1083860284218
/        5
Name: salary, dtype: int64

薪水中有日薪、月薪、年薪,也对应着千/月、万/月、万/年 ,在此,我将日薪字段进行剔除,毕竟临时工都是用来背锅的。以为薪水都是一个范围,在原数据中添加最大、最小、平均薪水三列,平均薪水是用最大+最小/2得到。另外要注意年薪与月薪的不同处理方式。

index_time = job_info['salary'].str[-1].isin(['年','月'])
index_money = job_info['salary'].str[-3].isin(['万','千'])
job_info = job_info[index_time&index_money]
job_info.head()

def split_mony(x):
    try:
        if x[-3] == '万':
            sal = [float(i)*10000 for i in re.findall("[0-9]+\.?[0-9]*",x)]
        elif x[-3] == '千': 
            sal = [float(i)*1000 for i in re.findall("[0-9]+\.?[0-9]*",x)]
        if x[-1] 
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值