本项目的数据来源是2019年拉勾网——上海的数据分析岗位的信息
首先第一步:爬取数据
爬取的代码就不贴上来了,有很多种,本人的爬虫水平仅限于BeautifulSoup库和requests库,更深入的scrapy等并没掌握;注意用requests爬取的话,请求方式是post,get是无法得到页码的
贴上最后爬取到的2019上海拉勾网数据分析岗位的csv文件链接:链接:https://pan.baidu.com/s/1jqYAs1HsBtHVM1BiRiHHqQ;提取码:nfoh
第二步:数据的清洗和重构
先正常导入数据分析需要的库,设置画图可显示中文和负号以及seaborn的主题
读取文件,爬取后的源数据是这样的
然后是去重,inplace=True直接将去重后的结果保存下来。
df.drop_duplicates(subset=['公司全称','职位名称','技能标签'], keep='first', inplace=True)
接下来要判断是否有缺失值,有的话需要处理缺失值
从上图可以看到还是有不少公司地址是带缺失的,我们这里可以填补成“未知”,再用布尔值索引方法看是否处理成功
df[df.fillna('未知').isna().values == True]
看数据发现,我们需要再添加一列薪资列,取薪资范围的中间值,方便之后做数据分析
tmp = df['薪资范围'].str.split('-', expand=True)
def drop_k(x):
return re.search('\d+', x).group()
tmp = tmp.applymap(drop_k)
tmp = tmp.apply(pd.to_numeric)
def average_s(x):
return (x[0] + x[1]) / 2
tmp['平均薪资'] = tmp.apply(average_s, axis=1)
tmp
上述处理过后,可以发现,平均薪资已经出来了,就是薪资范围下限和薪资范围上限的均值
把列的名字改一下,可读性更强
tmp = tmp.rename({0:'最低薪资 单位:k',1:'最高薪资 单位:k','平均薪资':'平均薪资 单位:k'}, axis=1)
然后我们把做好的平均薪资表和原表合并一下
df = df.join(tmp)
现在,我们基本的数据清洗和重构已经完成了,后续就是根据具体要分析的内容来做可视化了
第三步:数据分析
我们先来分析下不同工作经验的岗位数量情况,并用直方图和饼图来可视化
首先去除“不限”这个不确定因素,然后将目前的“所需资历”按照从少到多来排序,增加可读性
tmp = df[df['所需资历'] != '不限']
result = tmp.groupby('所需资历')
tmp2 = result.size()
list_custom = ['应届毕业生', '1年以下', '1-3年', '3-5年', '5-10年', '10年以上']
下面自定义两个函数,一个专门进行排序,一个专门获取索引值和列值,后续也会用到
先用seaborn来画Bar状图
可以直观看到,工作经验要求3-5年的最多,1-3年其次,刚毕业或1年以下的经验是比较少的,我们换个饼图来看一下:
from pyecharts import Pie
pie = Pie('上海拉勾网数据分析 工作经验统计')
pie.add('', xindex, vals, is_label_show=True, legend_top='bottom',
radius=[20,75], rosetype='area')
pie
未完待续,后续继续分析教育背景和薪资间的关系,工作经验和薪资之间的关系,公司行业的分布情况,工作标签分布情况等等
网友评论