数据分析师市场需求研究
本文是关于数据分析师市场需求的小研究。
在这篇分析里,我主要想解决两个问题:
- 哪一类人市场需求最高
- 什么因素能影响工资水平
这里就以深圳市的数据分析岗为例,分析一下数据分析师的市场需求状况。
### 拉勾数据分析招聘岗位分析 ###
# 本文针对拉勾网上深圳数据分析岗位的招聘信息做分析。
# Programmer: Dan Qin
# Date: 2019.08.30
# import libraries
# 基础包
import pandas as pd
import matplotlib.pyplot as plt
# 文件处理包
import json
import xmltodict
import os
import fnmatch
# 分词统计与词云包
import jieba
import jieba.analyse
from wordcloud import WordCloud
import re
# 对pandas和matplotlib的显示设置
pd.set_option('display.max_columns', 20)
plt.rcParams.update({
"font.family":"SimHei"})
plt.style.use("tableau-colorblind10")
%matplotlib inline
1. 数据提取
万年不变的第一步,做分析前得先有数据。
本分析所用数据是借助爬虫工具从拉勾网爬取的,详细的爬取教程请参照下面的链接。
# 利用集搜客爬取拉勾网上深圳数据分析岗招聘信息,需采用层级爬取
# 基础爬取教程参见:https://zhuanlan.zhihu.com/p/38884768 ; 层级爬取教程:https://www.gooseeker.com/doc/article-75-1.html
# 爬取源数据为xml格式
# 将xml文件转为json方便处理
def xml_to_json(input):
'''
Convert Xml to Json file.
:param input: input file path, xml
:return: NaN, write json into file
'''
# load xml
if not os.path.exists(input.replace(".xml", ".json")):
with open(input, 'r', encoding = "UTF-8", errors = "ignore") as f:
xmlString = f.read()
# convert xml to json
output = input.replace(".xml", ".json")
jsonString = json.dumps(xmltodict.parse(xmlString), ensure_ascii=False)
with open(output, 'w', encoding="utf-8") as f:
f.write(jsonString)
# 将爬取数据整合成dataframe
# 获取文件夹中的所有文件
path = "data/拉勾/"
filenames = []
for file in os.listdir(path):
if fnmatch.fnmatch(file, "*.xml"):
filenames.append(file)
# 用来放数据的df
df = pd.DataFrame(columns = ["公司名","行业","融资","公司网址","薪资","职位",
"经验","学历","员工规模","关键词","发布时间","职位诱惑",
"职位描述","地点"])
# 遍历文件名
for file in filenames:
file = path + file
# 将xml转为json
xml_to_json(file)
# 将json转为df
output = file.replace(".xml", ".json")
with open(output,encoding="utf-8") as json_data:
d = json.load(json_data)
data = pd.io.json.json_normalize(d["extraction"]["数据分析详情"]["item"])
# 合并df
df = pd.concat([df, data], sort = "False")
df.head(1)
公司名 | 公司网址 | 关键词 | 发布时间 | 员工规模 | 地点 | 学历 | 经验 | 职位 | 职位描述 | 职位诱惑 | 薪资 | 融资 | 行业 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 路行通 | http://www.klicen.com | 数据分析 | 2019-09-27 发布于拉勾网 | 500-2000人 | 深圳 -\n 南山区 -\n ... | 本科及以上 / | 经验3-5年 / | 数据分析师(碰撞场景探索与... | 岗位职责:\n1.负责车辆碰撞场景的深度探索及数据建模。\n2.负责车辆碰撞数据的新特征挖掘... | 人性化管理,稳定平台,温馨化午餐 | 14k-20k | 不需要融资 | 移动互联网,消费生活 |
# check df
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 216 entries, 0 to 0
Data columns (total 14 columns):
公司名 216 non-null object
公司网址 216 non-null object
关键词 215 non-null object
发布时间 216 non-null object
员工规模 216 non-null object
地点 216 non-null object
学历 216 non-null object
经验 216 non-null object
职位 216 non-null object
职位描述 216 non-null object
职位诱惑 216 non-null object
薪资 216 non-null object
融资 216 non-null object
行业 216 non-null object
dtypes: object(14)
memory usage: 25.3+ KB
从拉勾网上我们爬取了深圳市数据分析岗位的招聘信息,共216条,包括公司名称、员工规模、行业、学历要求、经验要求、薪资水平等属性。为了方便下一步分析,接下来需要对这些属性进行标准化处理。
2. 数据清洗
这里的数据清洗分几个步骤进行:
- 清理重复行。对于重复发布的岗位信息,我们只需要保留一条记录。
- 清除多余文字。将各属性值中多余的描述性文字和换行符去掉。
- 拆分薪资。这里给出的薪资是一个范围,我们将它拆成薪资上限和薪资下限,方便分析。
- 提取地区。从地点描述中提取出区划名。
# 清理重复行
df_clr = df.drop_duplicates({
"公司名","职位","职位描述"}).copy()
# 清除多余字符
df_clr["员工规模"] = df_clr["员工规模"].str.replace("人","")
df_clr["经验"] = df_clr["经验"].str.replace(" /","")
df_clr["经验"] = df_clr["经验"].str.replace("经验","")
df_clr["学历"] = df_clr["学历"].str.replace("学历","")
df_clr["学历"] = df_clr["学历"].str[:2]
df_clr["职位描述"] = df_clr["职位描述"].str.replace(" ","")
df_clr["职位描述"] = df_clr["职位描述"].str.replace("\n","")
# 拆分薪资
df_clr["薪资"] = df_clr["薪资"].str