毕业设计之 ---- 基于大数据挖掘的岗位薪资水平分析


前言

今天向大家介绍一个基于大数据分析的毕业设计项目,基于大数据挖掘的岗位薪资水平分析。

一般是与爬虫结合爬取招聘网站数据,然后招聘信息数据的分析,从而挖掘出该岗位的市场需求、行业分布、薪资水平,以便明确求职方向。

毕设帮助,开题指导,资料分享,疑问解答(见文末)


数据预处理

爬虫爬取数据

数据来源于boss直聘网,通过爬虫采集
采集的城市主要为一线、新一线等较为发达的城市
爬虫代码如下:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome(r'D:\PycharmProjects\python_present\boss直聘爬取\chromedriver.exe')

cities = [{"name": "北京", "code": 101010100, "url": "/beijing/"},
{"name": "上海", "code": 101020100, "url": "/shanghai/"},
{"name": "广州", "code": 101280100, "url": "/guangzhou/"},
{"name": "深圳", "code": 101280600, "url": "/shenzhen/"},
{"name": "杭州", "code": 101210100, "url": "/hangzhou/"},
{"name": "天津", "code": 101030100, "url": "/tianjin/"},
{"name": "苏州", "code": 101190400, "url": "/suzhou/"},
{"name": "武汉", "code": 101200100, "url": "/wuhan/"},
{"name": "厦门", "code": 101230200, "url": "/xiamen/"},
{"name": "长沙", "code": 101250100, "url": "/changsha/"},
{"name": "成都", "code": 101270100, "url": "/chengdu/"},
{"name": "郑州", "code": 101180100, "url": "/zhengzhou/"},
{"name": "重庆", "code": 101040100, "url": "/chongqing/"},
{"name": "青岛", "code": 101120200, "url": "/qingdao/"},
{"name": "南京", "code": 101190100, "url": "/nanjing/"}]

for city in cities:
urls = ['https://www.zhipin.com/c{}/?query=数据分析&page={}&ka=page-{}'.format(city['code'], i, i) for i in
range(1, 8)]
for url in urls:
driver.get(url)
html = driver.page_source
bs = BeautifulSoup(html, 'html.parser')
job_all = bs.find_all('div', {"class": "job-primary"})
for job in job_all:
position = job.find('span', {"class": "job-name"}).get_text()
address = job.find('span', {'class': "job-area"}).get_text()
company = job.find('div', {'class': 'company-text'}).find('h3', {'class': "name"}).get_text()
salary = job.find('span', {'class': 'red'}).get_text()
diploma = job.find('div', {'class': 'job-limit'}).find('p').get_text()[-2:]
experience = job.find('div', {'class': 'job-limit'}).find('p').get_text()[:-2]
labels = job.find('a', {'class': 'false-link'}).get_text()
with open('position.csv', 'a+', encoding='UTF-8-SIG') as f_obj:
f_obj.write(position.replace(',', '、') + "," + address + "," + company + "," + salary + "," + diploma+ "," + experience + ',' + labels + "\n")    


driver.quit()
数据清洗

在这里插入图片描述
在这里插入图片描述

cols=list(df)
cols.insert(4,cols.pop(cols.index('bottom')))
cols.insert(5,cols.pop(cols.index('top')))
cols.insert(6,cols.pop(cols.index('commision_pct')))
cols.insert(7,cols.pop(cols.index('avg_salary')))
df=df.loc[:,cols]

在这里插入图片描述

数据分析

数据可视化分析
df.avg_salary.groupby(df['address']).agg(['mean','median']).plot.bar(figsize=(16,8))

在这里插入图片描述

通过上图,可以发现各个城市的均值与中位数差距不大,但是城市之间区别非常大
北上深杭这四个城市的工资水平远远高于其他城市,广州苏州稍为靠后
靠前的这几个城市也是全国经济最为发达的几个城市,而且都发布在东部
中部城市薪资水平普遍低一些

fig=plt.figure(figsize=(12,6),dpi=80)
plt.hist(df['avg_salary'],bins=30,color='#f59311',alpha=0.3,edgecolor='k')
plt.ylabel('岗位数',fontsize=15)
plt.xlabel('薪资',fontsize=15)
plt.xticks(list(range(0,60,5)))
plt.show()

在这里插入图片描述
通过上图可以观察到,从总体来看,这个岗位少部分人拿着极高的工资
他们拉高了整个岗位的平均水平
月薪一万至两万的岗位不在少数
然而四千至五千的岗位居然是最多的,那么这些岗位主要是分布在哪些地区或行业呢,下面尝试进行分析

plt.figure(figsize=(16,16),dpi=80)
plt.subplot(121)
temp = df[df.avg_salary<10].groupby('address').avg_salary.count()
plt.pie(temp,labels=temp.index,autopct='% .2f%%')
plt.legend()
plt.title('薪资小于6K各城市占比')
plt.subplot(122)
temp = df[df.avg_salary>10].groupby('address').avg_salary.count()
plt.pie(temp,labels=temp.index,autopct='% .2f%%')
plt.title('薪资大于6K各城市占比')
plt.legend()

在这里插入图片描述
从以上饼图可以看到,各城市间薪资水平差异非常大,薪资水平小于6k的岗位主要集中分布于重庆、郑州、成都、武汉等中西部城市;而北上广深杭等城市基本不存在薪资水平小于6K的情况;而薪资水平大于6K的岗位分布区别则非常明显,北上广深杭的所占比重直接升至10%以上,重庆、郑州、成都、武汉等城市所占比重则减少到3%左右,由此可见,低薪岗位主要分布于中西部城市。

data1=df[df.address=='北京']['avg_salary']
data2=df[df.address=='上海']['avg_salary']
data3=df[df.address=='广州']['avg_salary']
data4=df[df.address=='深圳']['avg_salary']
data5=df[df.address=='杭州']['avg_salary']
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()

在这里插入图片描述
选取薪资水平较高的五个城市进行分析
可以发现,北京的薪资水平是最高的,无论是最低值还是最高值,而且均分布在较高的水平
相对来说,杭州上海深圳两级分化最为严重

d = df['avg_salary'].groupby(df['diploma'])
d_avg = d.mean()
c = list(d_avg.index)
v = list(range(1,len(c)+1))
w = d_avg.values.astype('int64')
x = d.median().values.astype('int64')
move = 0.4
plt.figure(figsize=(14,8),dpi=80)
plt.bar(v,w,width=move,color='#eed777')
plt.bar([i+move for i in v],x,width=move,color='#334f65')
a = np.arange(0,7)+1.2
plt.xticks(a,c)
plt.yticks(list(range(0,40,5)))
plt.legend(['均值','中位数'])
plt.title('各学历薪资均值及中位数比较图',fontsize=16)
plt.xlabel('学历',fontsize = 12)
plt.ylabel('薪资(单位K)',fontsize = 12)
for e,f in zip(v,w):
    plt.text(e,f,'{}k'.format(f),ha='center',fontsize=12)
for g,h in zip([i+move for i in v],x):
    plt.text(g,h,'{}k'.format(h),ha='center',fontsize=12)
plt.show()

在这里插入图片描述

从学历方面来看,本科是一个分水岭
是否是本科,对薪资水平的影响还是很大的
而本科与硕士之间并没有特别大的差距
博士的薪资水平远远高于其他学历

data = df['diploma'].value_counts()
y=data.values
plt.figure(figsize=(10,10),dpi=80)
plt.pie(y,labels=data.index,autopct='%.1f %%')
plt.show()

在这里插入图片描述
从市场需求来看,要求本科占据绝大多数
该岗位对学历的门槛并不是很高,要求硕士的较少,而博士则是凤毛麟角
不过这也从侧面反映了社会上学历的分布状况,本科生及大专生占绝对多数
虽然市场需求量大,但是本科生就业压力也很大

d = df['avg_salary'].groupby(df['experience'])
d_avg = d.mean()
c = list(d_avg.index)
v = list(range(1,len(c)+1))
w = d_avg.values.astype('int64')
x = d.median().values.astype('int64')
move = 0.4
plt.figure(figsize=(14,8),dpi=80)
plt.bar(v,w,width=move,color='#002c53')
plt.bar([i+move for i in v],x,width=move,color='#0c84c6')
a = np.arange(0,7)+1.2
plt.xticks(a,c)
plt.yticks(list(range(0,40,5)))
plt.legend(['均值','中位数'])
plt.title('各工作年限薪资均值及中位数比较图',fontsize=16)
plt.xlabel('工作经验',fontsize = 12)
plt.ylabel('薪资(单位K)',fontsize = 12)
for e,f in zip(v,w):
    plt.text(e,f,'{}k'.format(f),ha='center',fontsize=12)
for g,h in zip([i+move for i in v],x):
    plt.text(g,h,'{}k'.format(h),ha='center',fontsize=12)
plt.show()

在这里插入图片描述

应届生的工资还是比较低的,和工作经验一年内的差距并不大
但是随着工作年限的增加,迈过3年工作经验这个门槛,工资水平将直线上升
说明这个岗位是一个需要累积丰富经验的岗位

data = df['lables'].value_counts()
y=data.values
plt.figure(figsize=(10,10),dpi=80)
plt.pie(y,labels=data.index,autopct='%.1f %%')
plt.show()

在这里插入图片描述

通过以上简要分析,可以发现,如果要成功转行,应该往北上广深行这几个城市考虑,这些城市的薪资水平高
而行业方面应该着眼于互联网及电子商务等新兴行业,这些行业对该岗位的需求都比较大,而且薪资水平也普遍高
工作经验对于该岗位而言非常重要,能否成功转行的关键门槛在于是否有工作经验,与薪资水平呈正相关
而转行成功以后,只有在迈过3年这个坎,才会有比较大的突破

最后 - 技术解答 - 项目帮助

  • 13
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值