上次读到关于拉勾网职位分析的文章,该文章主要是对其各个地区的岗位分布及薪资构成做了基本的描述性分析,所以我不免产生了对其继续分析的冲动。本文接下来单从技术岗位出发,着重分析各个类型的技术岗位的需求情况。
Python爬虫框架Scrapy实战之定向批量获取职位招聘信息
2分钟完成30*15页拉勾网职位需求关键词的抓取
一.数据获取:
利用python爬取了拉勾网的部分数据,后嫌样本过少,在泰迪杯上直接下载了相关招聘类数据。总计530444条。
二.分析结果:
总体来看,技术类型的工作岗位需求最大 ,其中尤以后端开发需求最为旺盛。
虽然后端开发需求最高,但从工作岗位需求最为旺盛的前10个城市的工资水平来看,其工资在所有技术岗位内则不是最高,而是高端技术岗位明显高于其他技术岗位,相较而言,企业软件与测试、运维工资较低。
另外由于现在大数据比较火热,随之涌现出相应的许多诸如”数据分析”、“数据挖掘”的岗位.接下来着重分析下目前的数据相关的岗位需求情况,并对以后的需求数量进行预测。
通过与其他技术类岗位进行对比,数据类岗位遥遥领先,这说明数据类岗位需求非常旺盛,并且在2016年明显比2015年需求更加强劲。Ps:2015-2016中间那段间断部分,主要是由于春节期间,各个企业放假,故发布的职位需求基本为0 。
下面对接下来的一周数据类岗位进行预测。采用时间序列分析方法。
1. 数据样本的选取。由于春节期间数据基本为0,所以该时间段内数据不具有参考价值,故将其剔除,仅取2016-02-08以后的数据。数据样例如下:
2. 建模。
(a) 查看样本数据(为了便于分析,将时间替换为1700-1757的时间段,并不影响分析结果)
(b) 检验样本数据是否平稳
(c) 查看一阶差分的自相关图与偏相关图,模型定阶,可考虑建立ARMA(7,1)和ARIMA(7,1,1)模型。
(d) 得到分析结果。将两种模型预测结果进行对比,得知ARIMA(7,1,1)模型优于ARMA(7,1)模型。并且预测的未来7天的数据岗位需求量为:[240.96317271,144.35168999, 111.38542935, -13.83445342, 11.97472318, 46.76686791, 135.3081694]。其中前三天的数据代表周三——周五的需求量,随后周六周日需求明显减小,然后又随着工作日的来临,需求量又随之升高。总体预测趋势是合理的。另外周六出现了负值,与实际情况不符,可见模型还有待进一步而优化。这将在以后文章讨论。
附录:分析代码
import pandas as pd import numpy as np import matplotlib.pylab as plt from matplotlib.pylab import rcParams import matplotlib as mpl import datetime import time import statsmodels.api as sm from statsmodels.tsa.arima_model import ARIMA rcParams['figure.figsize'] = 15, 6 mpl.rcParams['font.family'] = 'sans-serif' mpl.rcParams['font.sans-serif'] = [u'SimHei'] plt.rcParams['axes.unicode_minus']=False data = pd.read_csv('shuju_data.csv') print(data.head()) data.index = pd.Index(sm.tsa.datetools.dates_from_range('1700','1757')) del data['period'] print('n Data Types:') #data.index =pd.DatetimeIndex(data.index,freq='D') print(data.head()) plt.plot(data) plt.title("数据类岗位的分布情况") plt.show() fig = plt.figure(figsize=(12,8)) ax1=fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(data,lags=20,ax=ax1) plt.title('原始数据的自相关图') ax2 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(data,lags=20,ax=ax2) plt.title('原始数据的偏相关图') plt.show() fig = plt.figure(figsize=(12,8)) ax1= fig.add_subplot(211) diff1 = data.diff(1).dropna() diff1.plot(ax=ax1) plt.title('一阶差分') ax2= fig.add_subplot(212) diff2 = data.diff(2).dropna() diff2.plot(ax=ax2) plt.title("二阶差分") plt.show() fig = plt.figure(figsize=(12,8)) ax1=fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(diff1,lags=20,ax=ax1) plt.title('一阶差分的自相关图') ax2 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(diff1,lags=20,ax=ax2) plt.title('一阶差分的偏相关图') plt.show() model1 = sm.tsa.ARMA(data,(7,1)).fit() print(model1.aic,model1.bic,model1.hqic) pre = model1.predict('1740','1760',dynamic=True) print(pre) model2 = sm.tsa.ARIMA(data,(7,1,1)).fit() print(model2.aic,model2.bic,model2.hqic) print(model2.forecast(7)) fig, ax = plt.subplots(figsize=(12,8)) ax = data.ix['1700':].plot(ax=ax) fig = model1.plot_predict('1740','1760',dynamic=True,ax=ax,plot_insample=False) fig = model2.plot_predict('1740','1760',dynamic=True,ax=ax,plot_insample=False) plt.title('数据类岗位预测情况') plt.show()