实习僧——数据分析岗招聘信息分析 源代码

爬取实习僧网站所有数据分析实习相关的岗位信息,对其做数据分析

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import re
import warnings
warnings.filterwarnings('ignore')

%matplotlib inline
# 导入数据
df = pd.read_csv('shixiseng.csv')
# 观察数据集基本情况
df.head(3)
Unnamed: 0com_namecom_positioncom_sizecom_typejob_academicjob_detailjob_good_listjob_moneyjob_monthjob_namejob_positionjob_urljob_week
00药渡医药北京市海淀区上地五街50-150医疗/健康/制药/生物硕士\n岗位描述:\n\n1.跟踪医药行业及上下游相关行业产业发展,剖析行业发展痛点、市场发展趋...可转正实习,远程实习200-400/天实习3个月医药数据分析师北京https://www.shixiseng.com/intern/inn_wjs7rljuz...5天/周
11星环科技虹漕路88号H88越虹广场B座11楼500-2000互联网/游戏/软件不限\n岗位职责:\n\n1.参与数据分析项目,协助分析数据准备、分析建模等工作\n\n2.协助...免费咖啡,地铁周边,平台120-150/天实习3个月大数据分析实习生 (MJ000582)上海https://www.shixiseng.com/intern/inn_jxqzmo9ih...4天/周
22亲宝宝杭州市西湖区联合大厦B座4楼150-500互联网/游戏/软件本科\n岗位职责:\n\n1、在主管的指导下,对用户使用行为数据的分析和挖掘;\n\n2、理解业...下午零食,扁平管理,大牛聚集150-250/天实习3个月数据分析实习生杭州https://www.shixiseng.com/intern/inn_lyq2mkoju...3天/周
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 444 entries, 0 to 443
Data columns (total 14 columns):
Unnamed: 0       444 non-null int64
com_name         444 non-null object
com_position     444 non-null object
com_size         443 non-null object
com_type         444 non-null object
job_academic     444 non-null object
job_detail       444 non-null object
job_good_list    444 non-null object
job_money        444 non-null object
job_month        444 non-null object
job_name         444 non-null object
job_position     444 non-null object
job_url          444 non-null object
job_week         444 non-null object
dtypes: int64(1), object(13)
memory usage: 48.6+ KB
# 多出'Unnamed: 0'列数据,需要drop
# com_size有一个缺失值,先简单填充
df0 = df.drop('Unnamed: 0',axis=1).fillna('not_provided')
df0.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 444 entries, 0 to 443
Data columns (total 13 columns):
com_name         444 non-null object
com_position     444 non-null object
com_size         444 non-null object
com_type         444 non-null object
job_academic     444 non-null object
job_detail       444 non-null object
job_good_list    444 non-null object
job_money        444 non-null object
job_month        444 non-null object
job_name         444 non-null object
job_position     444 non-null object
job_url          444 non-null object
job_week         444 non-null object
dtypes: object(13)
memory usage: 45.2+ KB
df0.head(3)
com_namecom_positioncom_sizecom_typejob_academicjob_detailjob_good_listjob_moneyjob_monthjob_namejob_positionjob_urljob_week
0药渡医药北京市海淀区上地五街50-150医疗/健康/制药/生物硕士\n岗位描述:\n\n1.跟踪医药行业及上下游相关行业产业发展,剖析行业发展痛点、市场发展趋...可转正实习,远程实习200-400/天实习3个月医药数据分析师北京https://www.shixiseng.com/intern/inn_wjs7rljuz...5天/周
1星环科技虹漕路88号H88越虹广场B座11楼500-2000互联网/游戏/软件不限\n岗位职责:\n\n1.参与数据分析项目,协助分析数据准备、分析建模等工作\n\n2.协助...免费咖啡,地铁周边,平台120-150/天实习3个月大数据分析实习生 (MJ000582)上海https://www.shixiseng.com/intern/inn_jxqzmo9ih...4天/周
2亲宝宝杭州市西湖区联合大厦B座4楼150-500互联网/游戏/软件本科\n岗位职责:\n\n1、在主管的指导下,对用户使用行为数据的分析和挖掘;\n\n2、理解业...下午零食,扁平管理,大牛聚集150-250/天实习3个月数据分析实习生杭州https://www.shixiseng.com/intern/inn_lyq2mkoju...3天/周

数据清洗

# com_size列
df0.com_size.value_counts()
# 有不可识别的字符,是在爬取信息过程中未进行转换,在此需要转换
# 有两家公司没有com_size信息,百度出这两家公司的员工人数
2000以上         195
500-2000        67
150-500         61
15-50           52
50-150          51
少于15            16
not_provided      1
-                 1
Name: com_size, dtype: int64
# 字符转换
print(repr(df0.loc[0,'com_size']))
# 将字符 \ue3c1 转换为 人
df0['com_size'] = df0['com_size'].apply(lambda x : str(x).replace('\ue3c1','人'))
'50-150\ue3c1'
# com_size填充
print(df0[['com_name','com_position']][df0['com_size'].isin(['not_provided','-'])])
# 得知两公司信息后百度查询公司规模
df0['com_size'][df0['com_name']=='博世'] = '2000人以上'
df0['com_size'][df0['com_name']=='哈啰出行'] = '2000人以上'
    com_name                     com_position
107       博世  苏州工业园区星龙街455号;上海市临空经济园区福泉北路333号
149     哈啰出行                       上海市闵行区莘庄中心
df0.com_size.value_counts()
2000人以上      197
500-2000人     67
150-500人      61
15-50人        52
50-150人       51
少于15人         16
Name: com_size, dtype: int64
# com_type列
df0['com_type'].value_counts()
# 出现类别重复和None的情况
# 计算机/互联网 归入 互联网/游戏/软件
# 机械制造 归入 汽车/机械/制造
# NONE百度查出,进行归类
互联网/游戏/软件      273
金融/经济/投资/财会     45
企业服务/咨询         24
汽车/机械/制造        14
广告/传媒/公关/展览     13
医疗/健康/制药/生物     13
教育/培训           12
快消/百货/批发/零售     11
农林牧渔/其他         10
房产/家居/物业/建筑      7
餐饮/酒店/旅游/娱乐      5
化工/能源/环保         5
电子/通信/硬件         5
计算机/互联网          3
公共事业/NGO/政府      2
机械制造             1
None             1
Name: com_type, dtype: int64
df0['com_type'][df0['com_type']=='计算机/互联网'] = '互联网/游戏/软件'
df0['com_type'][df0['com_type']=='机械制造'] = '汽车/机械/制造'
print(df0[['com_name','com_position']][df0['com_type']=='None'])
df0['com_type'][df0['com_type']=='None'] = '互联网/游戏/软件'
    com_name com_position
149     哈啰出行   上海市闵行区莘庄中心
df0['com_type'].value_counts()
互联网/游戏/软件      277
金融/经济/投资/财会     45
企业服务/咨询         24
汽车/机械/制造        15
广告/传媒/公关/展览     13
医疗/健康/制药/生物     13
教育/培训           12
快消/百货/批发/零售     11
农林牧渔/其他         10
房产/家居/物业/建筑      7
餐饮/酒店/旅游/娱乐      5
化工/能源/环保         5
电子/通信/硬件         5
公共事业/NGO/政府      2
Name: com_type, dtype: int64
# job_academic列
df0.job_academic.value_counts()
本科    333
硕士     52
不限     43
大专     16
Name: job_academic, dtype: int64
# job_money列

# 该列数据需转换为数值,转换规则为取中间数
def trans_money(x):
    try:
        x1 = re.split('-|/',x)[0]
        x2 = re.split('-|/',x)[1]
        x3 = (int(x1)+int(x2))/2
    except:
        x3 = x
    return x3

df0['day_salary'] = df0['job_money'].map(trans_money)
print(df0['day_salary'].value_counts())
# day_salary中有 面议 ,将面议填充为均值
money_avg = df0['day_salary'][df0['day_salary']!='面议'].mean().round(1)
df0['day_salary'][df0['day_salary']=='面议'] = money_avg
125.0    78
175.0    74
135.0    45
150.0    40
225.0    37
200.0    26
110.0    25
100.0    12
160.0     9
250.0     9
300.0     8
75.0      7
275.0     6
90.0      6
450.0     6
165.0     6
140.0     5
50.0      4
115.0     4
120.0     4
65.0      4
215.0     3
375.0     3
350.0     3
70.0      3
325.0     2
190.0     2
400.0     2
面议        2
95.0      1
230.0     1
40.0      1
425.0     1
170.0     1
130.0     1
180.0     1
185.0     1
192.0     1
Name: day_salary, dtype: int64
# job_month列
print(df0.job_month.value_counts())
# 提取出需要实习的月数
# 将 提供转正机会 转变为 月数平均数
实习3个月     167
实习4个月      65
实习6个月      60
实习12个月     40
实习8个月      25
实习5个月      23
实习7个月      17
实习10个月     11
实习9个月       8
实习1个月       7
实习2个月       6
实习11个月      5
提供转正机会      4
实习16个月      2
实习13个月      2
实习19个月      1
实习0个月       1
Name: job_month, dtype: int64
def trans_month(x):
    try:
        month = int(x[2:-2])
    except:
        month = x
    return month

df0['job_month'] = df0['job_month'].apply(trans_month)
month_avg = df0['job_month'][df0['job_month']!='提供转正机会'].mean().round(0)
df0['job_month'][df0['job_month']=='提供转正机会'] = month_avg
print(df0.job_month.value_counts())
3     167
4      65
6      60
12     40
5      27
8      25
7      17
10     11
9       8
1       7
2       6
11      5
16      2
13      2
19      1
0       1
Name: job_month, dtype: int64
# job_positoion列
df0.job_position.value_counts()
# 将 杭州市 归入 杭州
# 将 北京,西安,厦门,上海 拆分归入各类
北京             165
上海             121
广州              38
杭州              27
深圳              23
成都              15
重庆               6
全国               5
合肥               5
苏州               5
长沙               4
南京               4
天津               3
杭州市              3
武汉               3
西安               3
珠海               2
福州               2
大连               2
西宁               1
昆明               1
常州               1
厦门               1
哈尔滨              1
济南               1
北京,西安,厦门,上海      1
兰州               1
Name: job_position, dtype: int64
df0.job_position[df0.job_position=='杭州市'] = '杭州'
temp = df0[df0.job_position=='北京,西安,厦门,上海']
df0.drop(index=temp.index[0],inplace=True)
for i in '北京,西安,厦门,上海'.split(','):
    temp.job_position = i
    df0 = pd.concat([df0,temp],ignore_index = True)
df0.job_position.value_counts()
北京     166
上海     122
广州      38
杭州      30
深圳      23
成都      15
重庆       6
全国       5
合肥       5
苏州       5
南京       4
长沙       4
西安       4
天津       3
武汉       3
福州       2
厦门       2
大连       2
珠海       2
济南       1
西宁       1
昆明       1
兰州       1
常州       1
哈尔滨      1
Name: job_position, dtype: int64
# job_week列
df0.job_week.value_counts()
5天/周    254
4天/周    102
3天/周     82
2天/周      5
6天/周      2
1天/周      1
7天/周      1
Name: job_week, dtype: int64
df0.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 447 entries, 0 to 446
Data columns (total 14 columns):
com_name         447 non-null object
com_position     447 non-null object
com_size         447 non-null object
com_type         447 non-null object
job_academic     447 non-null object
job_detail       447 non-null object
job_good_list    447 non-null object
job_money        447 non-null object
job_month        447 non-null object
job_name         447 non-null object
job_position     447 non-null object
job_url          447 non-null object
job_week         447 non-null object
day_salary       447 non-null object
dtypes: object(14)
memory usage: 49.0+ KB
# 筛选出我们需要分析的数据子集
data = df0.drop(['job_detail','job_good_list','job_url'],axis=1)
data.head(5)
com_namecom_positioncom_sizecom_typejob_academicjob_moneyjob_monthjob_namejob_positionjob_weekday_salary
0药渡医药北京市海淀区上地五街50-150人医疗/健康/制药/生物硕士200-400/天3医药数据分析师北京5天/周300
1星环科技虹漕路88号H88越虹广场B座11楼500-2000人互联网/游戏/软件不限120-150/天3大数据分析实习生 (MJ000582)上海4天/周135
2亲宝宝杭州市西湖区联合大厦B座4楼150-500人互联网/游戏/软件本科150-250/天3数据分析实习生杭州3天/周200
3星联互动北京市朝阳区朝外大街甲6号万通中心C座200650-150人互联网/游戏/软件本科100-150/天12数据分析实习生-北京北京5天/周125
4成都普众成都市成华区二仙桥东三路1号成都理工大学致远楼730715-50人互联网/游戏/软件本科100-150/天3经管类数据分析师成都5天/周125
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 447 entries, 0 to 446
Data columns (total 11 columns):
com_name        447 non-null object
com_position    447 non-null object
com_size        447 non-null object
com_type        447 non-null object
job_academic    447 non-null object
job_money       447 non-null object
job_month       447 non-null object
job_name        447 non-null object
job_position    447 non-null object
job_week        447 non-null object
day_salary      447 non-null object
dtypes: object(11)
memory usage: 38.5+ KB

数据可视化

sns.set_style('darkgrid')
plt.rcParams['font.sans-serif']=['SimHei']
# 有招聘需求的公司,其公司规模分布情况

fig = plt.figure(figsize=(8,6))
# reindex对行顺序重新排序
data.groupby('com_size')['com_size'].count().reindex(['少于15人','15-50人','50-150人','150-500人','500-2000人','2000人以上']).plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('com_size',fontsize=18)
plt.tick_params(labelsize=12,rotation=0)

# 分析
# 数据分析实习生的招聘需求主要来源于大公司

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UraLvD60-1588154417892)(output_35_0.png)]

# 不同行业对于数据分析实习生的需求

fig = plt.figure(figsize=(10,8))
data.groupby('com_type')['com_type'].count().plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('com_type',fontsize=18)
plt.tick_params(labelsize=12)

# 分析
# 互联网对数据分析岗位需求最大,金融、咨询随后

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-juKKfiJ9-1588154417895)(output_36_0.png)]

# 各实习岗位对于实习生的基本要求:week month degree

fig = plt.figure(figsize=(15,5))
plt.ylabel('jobs_count',fontsize=18)

plt.subplot(131)
data.groupby('job_week')['job_week'].count().plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('job_week',fontsize=18)
plt.tick_params(labelsize=12)

plt.subplot(132)
data.groupby('job_month')['job_month'].count().plot.bar()
plt.xlabel('job_month',fontsize=18)
plt.tick_params(labelsize=12)

plt.subplot(133)
data.groupby('job_academic')['job_academic'].count().plot.bar()
plt.xlabel('job_academic',fontsize=18)
plt.tick_params(labelsize=12)

plt.tight_layout()

# 分析
# 每周3-5天,至少实习3个月,本科学历是许多岗位的基本要求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kalrdVYp-1588154417896)(output_37_0.png)]

# 各地对于数据分析实习生的需求

fig = plt.figure(figsize=(15,5))
data.groupby('job_position')['job_position'].count().plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('job_position',fontsize=18)
plt.tick_params(labelsize=12)

# 分析
# 可以看到数据分析实习岗主要来源于一线城市北上广深杭等地

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9mNQJZSM-1588154417899)(output_38_0.png)]

# 各地数据分析实习生的日薪(数据量太少不具有统计性,剔除数据量过少的地区)

# 将day_salary转变为int类型
data['day_salary'] = data['day_salary'].apply(int)

# 剔除数据量过少的地区
temp0 = data.groupby(['job_position'])['job_position'].count()
position = list(temp0[temp0>10].index)
temp = data[data['job_position'].isin(position)].groupby(['job_position'])['day_salary'].mean().apply(int)

fig = plt.figure(figsize=(8,6))
temp.plot.bar()
for i in range(len(list(temp))):
    v = int(list(temp)[i])
    plt.text(i,v+1,v,ha='center',fontsize=15)
plt.xlabel('job_postion',fontsize=18)
plt.ylabel('day_salary',fontsize=18)
plt.tick_params(labelsize=12,rotation=0)

# 绘制一条工资平均线
avg = int(data[data['job_position'].isin(position)].day_salary.mean())
print(avg)
plt.axhline(y=avg,ls=":",c="k")
avg_line = plt.text(5.55,avg-1,'avg=169',fontsize=20)

# 分析
# 各地区薪酬大致相同,平均日薪169元,其中广州稍低,北京稍高
169

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bdcCsf6F-1588154417901)(output_39_1.png)]

全国范围分析

  • 数据分析实习生的招聘需求主要来源于一线、准一线城市北上广深杭州成都等地;
  • 招聘公司多属于互联网、金融、咨询等行业;
  • 招聘公司规模普遍较大;
  • 众多岗位的基本要求是每周工作3-5天,至少实习3个月,拥有本科及以上学历;
  • 北上广深杭州成都等地的岗位薪酬相差不大,在平均薪酬169元/天上下浮动。

启示

  • 一线、准一线城市的互联网、金融、咨询行业的大公司是我们努力的方向。
  • 有实习打算的小伙伴要做好时间规划,做到满足基本工作时间的要求。
  • 平均薪酬是简单参考,让我们最后与HR谈薪酬时有一个心里预期。
# 广州地区数据分析实习生招聘情况
gzdata = data[data['job_position']=='广州']


fig = plt.figure(figsize=(18,12))

# 公司规模
plt.subplot(231)
gzdata.groupby('com_size')['com_size'].count().reindex(['少于15人','15-50人','50-150人','150-500人','500-2000人','2000人以上']).plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('com_size',fontsize=18)
plt.tick_params(labelsize=12,rotation=0)

# 公司类别
plt.subplot(232)
gzdata.groupby('com_type')['com_type'].count().plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('com_type',fontsize=18)
plt.tick_params(labelsize=12)

# 每周实习天数
plt.subplot(233)
gzdata.groupby('job_week')['job_week'].count().plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('job_week',fontsize=18)
plt.tick_params(labelsize=12)

# 实习月数
plt.subplot(234)
gzdata.groupby('job_month')['job_month'].count().plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('job_month',fontsize=18)
plt.tick_params(labelsize=12)

# 学历要求
plt.subplot(235)
gzdata.groupby('job_academic')['job_academic'].count().plot.bar()
plt.ylabel('jobs_count',fontsize=18)
plt.xlabel('job_academic',fontsize=18)
plt.tick_params(labelsize=12)

# 薪酬情况
plt.subplot(236)
gzdata.groupby('job_academic')['day_salary'].mean().plot.bar()
plt.ylabel('day_salary',fontsize=18)
plt.xlabel('job_academic',fontsize=18)
plt.tick_params(labelsize=12)

plt.tight_layout()


# 广州地区的数据分析实习岗位招聘信息与全国基本相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-69WlVg6R-1588154417903)(output_41_0.png)]

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JupiBoom

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

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

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

打赏作者

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

抵扣说明:

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

余额充值