pandas_数据分析师招聘数据分析可视化

本文分析了不同城市对数据分析岗位的需求、薪资状况以及工作经验与薪资的关系。通过Python进行数据加载和清洗,揭示了Python、SQL、Tableau等技能在岗位要求中的重要性,并探讨了学历与企业规模对薪资的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 分析⽬标
    各城市对数据分析岗位的需求情况
    不同细分领域对数据分析岗的需求情况
    数据分析岗位的薪资状况
    ⼯作经验与薪⽔的关系
    公司都要求什么掌握什么技能
    岗位的学历要求⾼吗
    不同规模的企业对⼯资经验的要求以及提供的薪资⽔平
  2. 数据加载
import numpy as np
import pandas as pd
job = pd.read_csv('D:\WORK\STUDY\数据分析\课程资料\阶段五\Pandas数据分析库/lagou2020.csv')
job.drop_duplicates(inplace = True)
job.reset_index(inplace=True)# 重置行索引
  1. 数据清洗
    3.1 过滤非数据分析
cond = job['positionName'].str.contains('数据分析') # 
job = job[cond]
job.shape
job.reset_index(inplace=True)

3.2 薪⽔是⼀个区间,这⾥⽤薪⽔区间的均值作为相应职位的薪⽔

#1、将salary中的字符串均⼩写化(因为存在8k-16k和8K-16K)
#2、运⽤正则表达式提取出薪资区间
#3、将提取出来的数字转化为int型
#4、取区间的平均值
job["salary"] = job["salary"].str.lower()\
                .str.extract(r'(\d+)[k]-(\d+)k')\
                .applymap(lambda x:int(x))\
                .mean(axis=1)

3.3 从job_detail中提取出技能要求
将技能分为以下⼏类 Python、 SQL、 Tableau、 Excel、 SPSS/SAS
处理⽅式: 如果job_detail中含有上述五类,则赋值为1,不含有则为0

job['Python'] = job['job_detail'].map(lambda x : 1 if 'python' in x else 0)
job['SQL'] = job['job_detail'].map(lambda x : 1 if 'sql' in x else 0)
job['Tableau'] = job['job_detail'].map(lambda x : 1 if 'tableau' in x else 0)
job['Excel'] = job['job_detail'].map(lambda x : 1 if 'excel' in x else 0)
job['SPSS/SAS'] = job['job_detail'].map(lambda x : 1 if ('spss' in x) or ('sas' in x) else 0)

3.4 处理⾏业信息

def convert(x):
    field = x.split(",")
    if (field[0]=="移动互联⽹") and (len(industry)>1):
        return field[1]
    else:
        return field[0]
job["industryField"] = job.industryField.map(convert)
  1. 各城市对数据分析岗位的需求量
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.family']='KaiTi'
plt.rcParams['font.size']=18

data = job.city.value_counts()
plt.figure(figsize=(12,9))

plt.barh(y = data.index[::-1],width=data[::-1],color='#3c7f99')
plt.box(False)
plt.grid(axis='x',color='#3c7f99')

plt.title(label='    各城市数据分析师岗位的需求量   ',
         fontsize=32,
         backgroundcolor='#c5b783',
         color='white',
         weight='bold',
         pad=30)

在这里插入图片描述
5. 不同领域对数据分析岗的需求量

data = job.industryField.value_counts()[:10]

plt.figure(figsize=(12,9))

plt.barh(y=data.index[::-1],width=data[::-1],color='#3c7f99')
plt.grid(linestyle = '--',color = '#3c7f99',axis='x')
plt.title(label='   各领域数据分析师需求量  ',
         fontsize=32,
         color='white',
         backgroundcolor='#c5b783',
         pad=30)

在这里插入图片描述
6. 各城市薪资状况

salary = job.groupby(by='city')['salary'].mean().sort_values()

plt.figure(figsize=(12,9))
plt.bar(x = salary.index,
        height = salary,
        color = plt.cm.RdBu_r(np.linspace(0,1,salary.size)))

plt.title(label = '     各城市薪资状况     ',
         fontsize = 32,
         color = 'white',
         backgroundcolor = '#c5b783',
         weight = 'bold',
         pad = 30)

plt.box(False)
plt.grid(axis='y',color='k')

plt.tick_params(labelsize=18,rotation = 60)

在这里插入图片描述
7. ⼯作经验与薪⽔关系

# 分组聚合
years_salary = job.groupby(by=['city','workYear'])['salary']\
.mean().round(1).unstack().sort_values(by='5-10年',ascending=False)
#透视表
#years_salary = job.pivot_table(values='salary',
#index='city',columns='workYear').\
#round(1).sort_values(by='5-10年',ascending=False)

years_salary = years_salary[['应届毕业生','1-3年','3-5年','5-10年']].iloc[1:]

#复制数据,使图形丰满

nd = years_salary.values
data = np.repeat(nd,4,axis=1) 

plt.figure(figsize=(12,9))
plt.imshow(data,cmap = plt.cm.RdBu_r)

plt.xticks([1.5,5.5,9.5,13.5],years_salary.columns)
plt.yticks(np.arange(12),years_salary.index)

h,w = data.shape
for x in range(w):
    for y in range(h):
        if (x%4 == 0) and (~np.isnan(data[y,x])):
            plt.text(x+1.5,y,data[y,x],ha='center',va='center')

_= plt.title(label='     工作经验与薪资的关系     ',fontsize = 32,pad=30)

在这里插入图片描述
8. 学历要求

edu = job['education'].value_counts()

plt.figure(figsize=(9,9))

_= plt.pie(edu,autopct='%0.2f%%',labels=edu.index,
          wedgeprops={'width':0.5},pctdistance=0.75)

_=plt.title(label='    学历要求    ',fontsize=32,pad=30)

在这里插入图片描述
9. 技能要求

cond1 = job['Python'].astype('boolean')
cond2 = job['SQL'].astype('boolean')
cond3 = job['Excel'].astype('boolean')
cond4 = job['SPSS/SAS'].astype('boolean')

d1 = job[cond1]['salary']
d2 = job[cond2]['salary']
d3 = job[cond3]['salary']
d4 = job[cond4]['salary']

plt.figure(figsize=(12,9))
_=plt.boxplot([d1,d2,d3,d4],vert=False,labels=['Python','SQL','Excel','SPSS/SAS'])

plt.grid(axis='x',color='k',alpha=0.3)
_=plt.xticks(np.arange(0,101,step=20),
            [str(i) + 'K' for i in np.arange(0,101,step=20)])

在这里插入图片描述
10. 大公司对技能的要求

cond = job.companySize == '2000人以上'
bc = job[cond]

data = bc[['Python','SQL','Tableau','Excel','SPSS/SAS']].sum()

plt.figure(figsize=(12,9))

plt.bar(x = np.arange(5),
       height=data,
       tick_label = ['Python','SQL','Tableau','Excel','SPSS/SAS'],
       color =  ['#ff0000', '#ffa500', '#c5b783', '#3c7f99', '#0000cd'])

plt.title(label='    大公司对技能要求    ',fontsize=32,pad=30)
plt.grid(axis='y')

在这里插入图片描述
11. 不同规模的公司在招人要求上的差异

workYear_map = {
    "5-10年": 5,
    "3-5年": 4,
    "1-3年": 3,
    "1年以下": 2,
    "应届毕业⽣": 1}
color_map = {
    5:"#ff0000",
    4:"#ffa500",
    3:"#c5b783",
    2:"#3c7f99",
    1:"#0000cd"}
cond = job.workYear.isin(workYear_map)
job2 = job[cond]

job2['workYearNum'] = job2['workYear'].map(workYear_map)
job2['companySize'] = job2['companySize'].astype('category')
from matplotlib import gridspec
plt.figure(figsize=(12,9))

#排序
list_num = ['2000人以上','500-2000人','150-500人',
            '50-150人','15-50人','少于15人']
job2.companySize.cat.reorder_categories(list_num,inplace=True)
job2.sort_values(by='companySize',ascending=False,inplace=True)

gs = gridspec.GridSpec(10,1)
plt.subplot(gs[:8])

#点中点
plt.scatter(x = job2.salary,
           y = job2.companySize,
           c = job2.workYearNum.map(color_map),
           s = job2.workYearNum*100,
           alpha = 0.35)
plt.scatter(x = job2.salary,
           y = job2.companySize,
           c = job2.workYearNum.map(color_map))

plt.xticks(np.arange(0,161,step = 20),[str(i) + 'K' for i in np.arange(0,161,20)])
plt.grid(axis='x')
plt.box(False)
plt.title(label='    不同规模公司招聘要求',fontsize=32,pad=30)

plt.subplot(gs[-1])

x = np.arange(1,6)[::-1]
y = np.zeros(5)

plt.scatter(x,y,c = color_map.values(),
           s = x*100,alpha=0.35)
plt.scatter(x,y,c = color_map.values())

plt.yticks([0],['经验'])

plt.rcParams['font.family'] = 'KaiTi'

_=plt.xticks(x,workYear_map.keys())
plt.box(False)

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大大荣子哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值