目录
项目背景
随着大数据时代的来临,数据分析成为了最热的一门职业,很多人甚至想转行进入该行业,然而在这种热流中我们真正了解数据分析师是做什么的吗?前景如何?我们又是否适合从事该职业呢?其实我们都要弄清楚,然而最直接的了解数据分析师的地方无异于去各招聘网站上获取招聘该职位的信息,然后去总结分析。我暑假一直在学习爬虫的知识,对于python的几个爬虫库有了基础的理解,然后自学了几个简单的库,分别是jieba、wordcloud,对此就产生了极大的兴趣去探究数据分析师这个职业到底现况如何?工资是什么水平?要求学历和工作经验如何?技能要求基本是什么?所以就爬取智联招聘上的数据来进行分析,帮助更深的了解数据分析师的就业。
项目简介
整个项目的基本流程是获取数据-清洗数据-分析数据-数据呈现-写分析报告。获取数据主要是利用requests库来请求页面资源和Beautifulsoup库解析获取的HTML的text,然后把所得数据存入Excle中。在Excel中清洗数据后进行简单的数据呈现,主要利用到python的jieba分词和wordcloud词云、SPSS的回归分析、Excel的图表制作等。
数据来源与数据集
本次分析所用到的数据来源于智联招聘网站在全国范围内“数据分析师”关键词搜索的数据。
环境:
运行平台: Windows
Python版本: Python3.6
编译工具:Pycharm
浏览器: Chrome浏览器
爬取网址:
https://sou.zhaopin.com/?p=2&pageSize=60&jl=全国&kw=数据分析&kt=3
获取字段:
这次爬取的字段分别是职位名称、工资、公司名称、所在城市、经验限制、专业限制、职位描述。
数据获取
-
分析网址
在利用requests获得的HTML文本和点击F12打开开发者工具查看元素所看得到的不一样,可以发现网页里面搜到的内容是异步加载的,所以得找的后端接口,从而直接调用接口中获得数据。
步骤如下所示:网络-XHR-刷新,发现有一个异步请求,而第四个是后端接口,复制其中的请求网址,得到如图所示:得知是json数据格式(JSON格式的数据本质上是一种被格式化了的字符串,遵循一定的语法规则,可以利用json库解析数据),而且里面数据正是我想要得到的。如图所示:
由此可以得到每一个职位的超链接地址,然后获得详细信息,并且通过观察通过改变该网址的p后的编号可以获得不同页数据。
-
找到职位链接
在找到该数据所在位置后,我们应该解析该json数据格式得到想对应的职位链接以便获取具体职位信息。
代码如下:
'''
获得网页列表每个职位的详细信息所在网址链接
'''
def download(url):
a_dic = {}
try:
r = requests.request("get", url, headers = hds)
source_code = r.text
a_dic = json.loads(source_code)
# print(source_code)
print(a_dic)
except Exception as e:
print(e)
for i in range(60):
in_url = a_dic['data']['results'][i]['positionURL']
url_list.append(str(in_url))
print(url_list)
return url_list
-
解析职位详细信息
网页解析:
在获得每个职位招聘的超链接网址后就是分别进入每个网址获得每个详细数据,利用Beautifulsoup库解析获取想要获取的数据,获取字段分别是职位名称、工资、公司名称、所在城市、经验限制、专业限制、职位描述。数据如图所示:
代码实现:
'''
获得进入链接之后详细职位信息
'''
def get_content(in_url):
try:
r = requests.request("get", in_url, headers = hds)
source = r.text
except Exception as e:
print(e)
soups = BeautifulSoup(source,'lxml')
# print(source)
try:
position = soups.find('h1',{'class':'l info-h3'}).text # 获得职位名
except Exception as e:
position = '缺失'
try:
divs = soups.find('div',{'class':'company l'})
company = divs.find('a').text # 获得公司名
except:
company = '缺失'
try:
money = soups.find('div',{'class':'l info-money'})
sal = money.find('strong').text# 获得薪资要求
Li = soups.find('div', {'class': 'info-three l'})
c = Li.find_all('span')
city = c[0].find('a').text # 获得所在城市
exper = c[1].text # 获得需要工作经验
major = c[2].text # 获得专业限制
except Exception as e:
print(e)
try:
dis = soups.find('div', {'class': 'pos-ul'}).text.strip() #获得岗位描述
except:
dis = '缺失'
print([position,sal,company,city,exper,major,dis])
list.append([position,sal,company,city,exper,major,dis])#把所有获取的数据放入到list列表中
return list
将获得的数据存入Excel中,这里需要用到python的openexcle库来实现数据交互,具体代码实现如下所示:
'''
存数据入excle
'''
def write_excle(list):
wb = Workbook()
ws = wb.active
# wb.create_sheet('数据分析招聘情况表')
ws.append(['职位名称', '工资', '公司', '所在城市', '经验限制', '专业限制', '职位描述'])
for row in list:
ws.append(row)
wb.save('zhaopin_list.xlsx')
数据清洗
由于电脑问题,我只爬取了237个数据, 是在Excel中清洗数据,主要是对缺失值和不满足条件的数据进行删除和修改,这里比较费时间的是职位信息要求,本次分析主要是目的是探索数据分析师职业应该具备什么样的基本技能,从这里知道最能体现出来。对这个数据主要是把一些不是很相关的词语删除,比如要求,资格,地址,薪资福利等,为此避免分析时产生干扰。
数据分析
我探索的主要问题是:
- 不同城市对数据分析师的需求量?
- 数据分析师的薪资水平怎么样?
- 数据分析师招聘对不同学历的要求?
- 数据分析师招聘对不同工作经验的要求?
- 数据分析师需要些什么基本技能?
- 学历和工作经验对数据分析师的薪资影响?
接下来一个个进行详细分析:
-
不同城市对数据分析师的需求量?
利用数据透视表将城市列字段进行计数,并形成表格,如图所示:
城市 | 数量 |
北京 | 97 |
上海 | 19 |
深圳 | 11 |
重庆 | 10 |
成都 | 9 |
广州 | 9 |
南京 | 8 |
太原 | 8 |
杭州 | 6 |
无锡 | 5 |
贵阳 | 4 |
济南 | 4 |
苏州 | 4 |
武汉 | 4 |
西安 | 4 |
合肥 | 3 |
沈阳 | 3 |
福州 | 2 |
昆明 | 2 |
宁波 | 2 |
青岛 | 2 |
石家庄 | 2 |
天津 | 2 |
长沙 | 2 |
郑州 | 2 |
澄迈 | 1 |
大连 | 1 |
东莞 | 1 |
佛山 | 1 |
洛阳 | 1 |
南宁 | 1 |
南通 | 1 |
太仓市 | 1 |
潍坊 | 1 |
乌鲁木齐 | 1 |
邢台 | 1 |
烟台 | 1 |
由图可知北京是对数据分析师的需求量最大的城市,甚至比第二名的深圳多四倍,不过相对来说深圳、成都、南京、杭州也是需求量比较大的城市。
-
数据分析师的薪资水平怎么样?
| 最大值 | 最小值 | 平均值 |
最高工资 | 50000 | 2500 | 12141.62 |
最低工资 | 30001 | 2000 | 7844.225 |
中间值 | 40000.5 | 2250 | 10039 |
由表知数据分析师的平均薪资在7844.225-12141.62之间,最高工资有达到50000,最低工资为2000,不过总体来说工资处于较高水平。
-
数据分析师招聘对不同学历的要求?
学历 | 数量 | 占比 |
本科 | 126 | 53.39% |
大专 | 77 | 32.63% |
不限 | 19 | 8.05% |
硕士 | 8 | 3.39% |
中专 | 5 | 2.12% |
中技 | 1 | 0.42% |
总计 | 236 | 100.00% |
由图可知,大部分公司对数据分析师的要求不是很高,其中本科占比最大,占有53.39%,其次是大专,占比是32.63,要求是硕士的只有3.39%,占比都小于不限学历。
-
数据分析师招聘对不同工作经验的要求?
工作经验 | 数量 | 占比 |
经验不限 | 109 | 46.19% |
1-3年 | 71 | 30.08% |
3-5年 | 38 | 16.10% |
1年以下 | 9 | 3.81% |
5-10年 | 6 | 2.54% |
无经验 | 3 | 1.27% |
总计 | 236 | 100% |
由图可知大多数公司对数据分析师的要求是工作经验不限,占比为46.19%,是其中占比最大的,其次就是1-3年的工作经验 占比为30.08%,占比第三的是3-5年的工作经验,有16.10%,占比最小的是无经验的只有1.27%,整体可知大多数公司对于数据分析师的要求是经验不限,但是拥有越多工作经验越好。
-
数据分析师需要些什么基本技能?
由于Excel无法直接对大量岗位信息进行处理,我选择利用python的jieba库分词和wordcloud库来统计频率最高的词汇并且可视化显示出来,具体代码如下所示:
#encoding = gbk
import jieba.analyse
from PIL import Image,ImageSequence
import numpy as np
import matplotlib.pyplot as plt
from wordcloud import WordCloud,ImageColorGenerator
lyric = ''
f = open('./任职要求.txt','r')
for i in f:
lyric+=f.read()
result = jieba.analyse.extract_tags(lyric,topK=50,withWeight=True)
keywords = dict()
for i in result:
keywords[i[0]] = i[1]
print(keywords)
image = Image.open('./热气球.jpg')
graph = np.array(image)
#生成一个词云对象
wc = WordCloud(font_path='C:\Windows\Fonts\STZHONGS.TTF',relative_scaling=0.5,background_color='White',max_words=50,mask=graph)
wc.generate_from_frequencies(keywords)
image_color = ImageColorGenerator(graph)
#绘制图片
plt.imshow(wc)
plt.imshow(wc.recolor(color_func=image_color))
#消除坐标轴
plt.axis("off")
#展示图片
plt.show()
#保存图片
wc.to_file('dream.png')
分析结果如图所示:
从图片可以看出词频最高的是工作、能力、优先等词汇,说明数据分析师的工作能力很重要,当然可以看到分别有Excel、SPSS、SQL,说明这些是数据分析师需要具备的最基础的软件操作。另外可以看到一些词汇是团队、沟通、经验、分析、熟练、数据,由此可以说明数据分析师应该具有良好的沟通能力、较高的团队意识和熟练分析数据的经验等等。
-
学历和工作经验对数据分析师的薪资影响?
对此,我利用spss统计分析工具进行回归分析,得到如下结果:
模型汇总b | ||||
模型 | R | R 方 | 调整 R 方 | 标准 估计的误差 |
1 | .488a | .238 | .232 | 4807.982 |
a. 预测变量: (常量), 专业限制, 工作经验限制。 | ||||
b. 因变量\: 中间值 |
|
系数a | ||||||||
模型 | 非标准化系数 | 标准系数 | t | Sig. | 共线性统计量 | |||
B | 标准 误差 | 试用版 | 容差 | VIF | ||||
1 | (常量) | 5832.283 | 959.699 |
| 6.077 | .000 |
|
|
工作经验限制 | 1375.105 | 198.999 | .433 | 6.910 | .000 | .850 | 1.177 | |
专业限制 | 534.377 | 296.241 | .113 | 1.804 | .073 | .850 | 1.177 | |
a. 因变量\: 中间值 |
由系数表得知该回归方程为:
工资(中间值)= 5832.283+1375.105*工作经验限制+534.377*学历限制
模型检验:
在假定其他条件不变的情况下,工作经验限制每增加一个单位,数据分析师工资(中间值)将平均增加1375.105元,学历限制没增加一个单位,数据分析师的工资(总间值)将平均增加534.377元。
由残差图可知残差分布较均匀,没有产生严重异方差问题,而且由系数表可知方差膨胀因子都是1.777,小于10,说明没有产生共线性问题,从模型汇总表中看出调整的R方为0.232,说明该回归模型的解释能力只有23.2%,解释能力一般。
F检验:从Anova表中可以看出F值等于34.601,且sig值等于0.000<0.05,所以拒绝原假设,即工作经验限制和学历限制两个变量结合起来对数据分析师的工资具有显著性影响。
T检验:从系数表得知常量和工作经验限制的T值 分别是6.077、6.910,且都sig值为0.000,说明拒绝原假设,即工作经验限制对数据分析师的工资具有显著性影响,而学历的T值为1.804,sig值为0.073>0.05,说明接受原假设,即学历限制对数据分析师没有显著影响。
-
项目总结
在通过获得的数据以及对它做了基本的分析,我得到以下结论:
- 在全国范围内,北京是对数据分析师的需求量最大的城市,甚至是第二名的四倍之大,其次是深圳、成都、南京、杭州等,所以可以考虑去北京深圳等城市将会有更大的发展。
- 由工资方面的分析可得,数据分析师是拥有较高水平的工资的,平均工资是7000到10000之间,所以在这方面是非常可观的。
- 数据分析师对学历要求不是很高,大多数是在本科,其次是大专,而对工作经验最多的是经验不限,其次是1-3年的工作经验,所以对工作经验要求也不是很高,但是由比例看拥有1-3年的工作经验也是较多公司希望的。而且由回归分析得,工作经验是对工资具有显著性影响的,而学历是并没有显著性(在0.05的显著性水平下),由此看来公司对数据分析师将更注重工作经验。
- 对于数据分析师的基本技能要求分析:最重要的当然是工作能力,而软件方面是需要熟练使用Excel、SPSS、SQL等,并且数据分析师是需要具有良好的沟通能力和较高的团队意识,另外需要熟练数据分析过程等。
存在问题及获取经验:
由于没有对前端网页开发有很清楚的认识,也是在学了爬虫之后狂补的一些简单的知识点,所以在不知道具体其内在原理的情况下以为所有网页是简单通过requests库获得HTML的文本,再通过解析库去解析即可,其实现实中的网页往往比想象中的复杂的多,网页也早已不是纯净的静态网页了,所以我需要不断学习新的知识点来补全自己的不足。比如在这里经过百度发现,请求得到的内容是Ajax加载的内容,所以和浏览器开发者工具看到的不一样,因此也必须找到后端接口存储的数据。