首先说明这篇文章的数据来源,为前程无忧中所有“数据分析师”这一职位信息所得来的。并且主要分析了数据分析师在全国不同地区的需求情况、总体薪酬情况、不同城市薪酬分布、不同学历薪酬分布、不同地区学历要求情况、不同经验需求与薪酬分布情况。

本文行文思路:

数据采取
数据清洗
数据分析
分析结论
思考总结

1.数据采集

定位数据位置
首先进入前程无忧首页,然后在职位搜索中检索数据分析师,不加其他限定条件,点击搜索可得到以下结果:

可以看到关于数据分析师的岗位信息一共10263条。

爬虫代码调试及运行
本文代码参照Python网络爬虫爬取智联招聘职位,之前不会爬虫,花了半天时间研究了一下,自己改了改,调试了一番,最后能勉强运行了。代码见下:

#!/usr/bin/python
# -*- coding: utf-8 -*-import urllib2,re,sys,pandas as pd
reload(sys)
sys.setdefaultencoding( "utf-8" )result11=[]
result21=[]
result31=[]
result41=[]
result51=[]
result61=[]
result71=[]headers = {'User-agent' : 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0'}def zhuanhuan(y):result=[]for i in y:result.append(i.decode("gbk"))return resultfor k in range(1,208):html=urllib2.urlopen("http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=000000%2C00&district=000000&funtype=0000&industrytype=00&issuedate=9&providesalary=99&keyword=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88&keywordtype=2&curr_page="+str(k)+"&lang=c&stype=1&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&lonlat=0%2C0&radius=-1&ord_field=0&list_type=0&dibiaoid=0&confirmdate=9").read()pat1 = '<a target="_blank" title=(.*?) οnmοusedοwn='pat1_a ='"(.*?)" href="'pat1_b ='" href="(.*?)"'pat2 = '<span class="t2"><a target="_blank" title="(.*?)" href="'pat3 = '<span class="t3">(.*?)</span>'pat4 = '<span class="t4">(.*?)</span>'pat5 = '<span class="sp4"><em class="i1"></em>(.*?)</span>'pat6 = 'ass="sp4"><em class="i2"></em>(.*?)</span>'a=''result1 = re.compile(pat1).findall(html)for i in result1:a=a+str(i)result1 = re.compile(pat1_a).findall(a)result2 = re.compile(pat2).findall(html)result3 = re.compile(pat3).findall(html)[1:]result4 = re.compile(pat4).findall(html)[1:]result5 = re.compile(pat1_b).findall(a)for i in result5:request = urllib2.Request(i, headers = headers)try:response = urllib2.urlopen(request,timeout=20).read()html1 = responseif re.compile(pat5).findall(html1):result61.extend(re.compile(pat5).findall(html1))else:result61.extend([''])if re.compile(pat6).findall(html1):result71.extend(re.compile(pat6).findall(html1))else:result71.extend([''])except:result61.extend([''])result71.extend([''])result11.extend(result1)result21.extend(result2)result31.extend(result3)result41.extend(result4)result51.extend(result5)if len(result1)!=len(result2):print kbreakprint kresult11=zhuanhuan(result11)
result21=zhuanhuan(result21)
result31=zhuanhuan(result31)
result41=zhuanhuan(result41)
result51=zhuanhuan(result51)result61=zhuanhuan(result61)
result71=zhuanhuan(result71)    print len(result11)
print len(result21)
print len(result31)
print len(result41)
print len(result51)
print len(result61)
print len(result71)    df2=pd.DataFrame({u"职位名":result11,u"公司名":result21,u"工作地":result31,u"薪资":result41,u"工作经验":result61,u"学历要求":result71})  #
df2.to_excel('foo.xlsx', sheet_name='Sheet1')

对于写过爬虫的,上面代码可能比较简单,主要涉及反爬伪造http头部,正则表达,Python中文编码,pandas库运用,和一些基本的循环之类东西。

代码缺点也很明显:1.运行时间慢,需要1个多小时,因为要爬取1万多个页面。2.爬取信息过少,因为本人正则表达和Python字符串处理不精通,行业信息、企业规模、企业性质未能匹配出来。

最后爬出10163行岗位数据,与原网页10263相差100行数据,结果存储为一个名为foo.xlsx的excel文件。

2.数据清洗

本案例要进行清洗的要点主要涉及以下几点:

重复数据的删除
空值的填充
工作地点重置为市级
薪资单位转换及去区间化
重复数据删除
本案例要进行清洗的要点主要涉及以下几点:

重复数据的删除
空值的填充
工作地点重置为市级
薪资单位转换及去区间化
重复数据删除

import pandas as pdmy = pd.DataFrame(pd.read_excel('foo.xlsx'))
my = my.drop_duplicates()

HR经常会因为招聘压力,发布重复招聘信息,这里需要删除重复数据,经过去重操作后,总数据量由10163变为8696。看来hr们压力挺大的,也是蛮拼。

空值处理

首先需要查看空值分布在那几列中

a = [u"公司名",u"学历要求",u"工作地",u"工作经验",u"职位名",u"薪资"]
for i in a:my[i].isnull().value_counts()
可以得到以下输出False    8696
Name: 公司名, dtype: int64
False    6256
True     2440
Name: 学历要求, dtype: int64
False    8696
Name: 工作地, dtype: int64
False    8505
True      191
Name: 工作经验, dtype: int64
False    8696
Name: 职位名, dtype: int64
False    8275
True      421
Name: 薪资, dtype: int64

以上数据可以看出,学历要求中2440条空值、工作经验中191条空值、薪资中421条空值。

学历空值填充为不限,工作经验填充为无经验要求、薪资空值删除整行。

my[u"学历要求"] = my[u"学历要求"].fillna(u"不限")
my[u"工作经验"] = my[u"工作经验"].fillna(u"无工作经验")
my = my.dropna(axis = 0)

工作地重置为市级

将市级与区级的工作地,统一为市级工作地,以统一标准。

def cut_word(word):position=word.find('-')       length=len(word)         if position !=-1:new_city = word[:position]else:new_city = wordreturn new_citymy[u"市级_工作地"] = my[u"工作地"].apply(cut_word)

薪资单位转换及去区间化

薪资数据中,单位不一致,元/天、千/月、万/月、万/年,这里全部统一为千/月。

而很多数据都是区间存在的,这里取平均值代替区间。代码见下:

def cut_salary(word):position=word.find('-')     length=len(word)if u"月" in word and u"千" in word:danwei = 1if u"月" in word and u"万" in word:danwei = 10if u"年" in word and u"万" in word:danwei = 10.0/12if u"天" in word and u"元" in word:danwei = 0.02175
num_position = max(word.find(u'元'),word.find(u'千'),word.find(u'万'))if position !=-1:       b_salary=word[:position]t_salary=word[position+1:num_position]
else:b_salary = t_salary = word[:num_position]
return (float(b_salary)+float(t_salary))*danwei/2.0
my[u"新_薪资"] = my[u"薪资"].apply(cut_salary)
my.to_excel('foo.xlsx',sheet_name='Sheet1')

至此,数据清洗完毕,将数据保存至本地,然后开始分析之旅吧。

3.数据分析

需求人数城市分布

pandas的数据透视调试半天都是错误,这里就用这个excel制作的柱形图凑合一下。

可以看到,北上两座城市明显超过其他城市,深广只能算第二梯队。
薪资总体分布

import matplotlib.pyplot as plt
salary = my[u"新_薪资"]
bins = [0,5,10,15,20,25,30,35,40,45,50,55,60]
plt.hist(salary, bins, histtype='g', rwidth=0.8)
plt.xlabel('salary')
plt.show()

从上表可以看出,大部分岗位的薪资位于5-15之间,其中5-10之间最多,只有极少数岗位提供较高薪资,另一方面,也存在部分0-5之间的岗位,且岗位数占到近18%。由此来看,大多数数据分析岗,拿着一般般的薪资,而并非网上那般,被炒得虚高。

城市薪资分布
my_1=my[my[u"市级_工作地"]==u"北京"]
my_2=my[my[u"市级_工作地"]==u"上海"]
my_3=my[my[u"市级_工作地"]==u"广州"]
my_4=my[my[u"市级_工作地"]==u"深圳"]
my_5=my[my[u"市级_工作地"]==u"武汉"]
my_6=my[my[u"市级_工作地"]==u"成都"]
my_7=my[my[u"市级_工作地"]==u"杭州"]
my_8=my[my[u"市级_工作地"]==u"天津"]
my_9=my[my[u"市级_工作地"]==u"南京"]
my_10=my[my[u"市级_工作地"]==u"长沙"]
frames = [my_1,my_2,my_3,my_4,my_5,my_6,my_7,my_8,my_9,my_10]
result=pd.concat(frames)ax=result.boxplot(column=u'新_薪资',by=u'市级_工作地',figsize=(9,7))
ax.title(u"哈哈")
for label in ax.get_xticklabels():label.set_fontproperties(zh_font)
plt.show()

城市薪资分布
可以看到,各大城市中位数均未超过10k,北上最高约9k,深圳、南京、杭州紧随其后。

但在top区域,可以看到,一线城市和二线城市就拉的比较开,天津、武汉、长沙在20k以上的样本几乎没有,所以,对于那些经验比较丰富,且寻求高薪的人士,上海,北京和深圳是求职的好去处。

不同学历的薪酬分布

ax=result.boxplot(column=u'新_薪资',by=u'学历要求',figsize=(9,7))
for label in ax.get_xticklabels():label.set_fontproperties(zh_font)
plt.savefig("ed.png")

博士的薪资的中位数和众数一马当先,硕士、本科紧随其后,但是在top端,博士表现不佳,原因可能是,极高薪的数据反而对学历要求没那么高,大专在top区域都有比较亮眼的数据表现。但是在中端的数据岗,对学历有一定的要求。

相同工作年限不同城市薪资分布

df_bj_sh=result[result['city'].isin([u'上海',u'北京'])]
ax=df_bj_sh.boxplot(column=u'新_薪资',by=[u'工作经验','city'],figsize=(19,6))
for label_x in ax.get_xticklabels():label_x.set_fontproperties(zh_font)
plt.savefig("ed.png")

可以看到,相同工作经验下,上海薪资要略高于北京,但是在8-9年工作经验一块,出现了一个异常数据,上海的8-9年岗位薪资水平不足10k,显然是异常数据,后期需要核对一下。

分析结论
从需求城市上看,北京和上海是两座对数据分析人才需求量最大两座城市,约占全国的1/3

,深圳、广州各占10%左右。数据分析方面的求职者可多关注四座城市。

从总体薪资构成来看,大多数数据分析师的薪资水平不超过10k,此岗位并非网上被炒的过热那般。

从城市薪资构成来看,一二线城市薪资中位数和众数并未拉开,但是看极值表现,二线城市在top岗位上稍显欠缺。

而单看学历、薪资图,会发现,中等偏上水平薪资的岗位更倾向于寻求博士生,而top水平薪资的岗位则青睐本科、硕士、专科。

上海与北京相同工作年限的对比可以看出,要求同等经验的岗位,上海的薪资高于北京。

数据分析师+前途无忧爬虫分析相关推荐

  1. 2020互联网数据分析师教程视频 统计学分析与数据实战 r语言数据分析实战 python数据分析实战 excel自动化报表分析实战 excel数据分析处理实战

    2020互联网数据分析师教程视频 统计学分析与数据实战 r语言数据分析实战 python数据分析实战 excel自动化报表分析实战 excel数据分析处理实战

  2. python数据分析要不要爬虫_数据分析师需要对爬虫掌握到什么程度?

    数据分析师是可以学爬虫的,通过爬虫技术,可以快速获取自己想要的数据,辅助自己进行业务分析,丰富自己的数据来源. 爬虫的学习难度并非大家想象的这么高,他从原理上其实就是模拟人们打开链接(发起请求) -& ...

  3. 数据分析师6-观看游戏分析专家有感

    1:分析报告的首页 核心表达在于 1:有结构的(要金字塔模型 同类 同层次的) 2:一句话的(短句 不需要严谨 有字数限制) 3:首先 开门见山的 4:说出结论 因为老板都很忙的,都想直接听结论. . ...

  4. python案例分析大学生薪资_Python数据分析实战:解密数据分析师的薪资和需求

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:CPDA数据说 喜欢的朋友欢迎关注小编,除了分享技术文章之外还有很多 ...

  5. 数据分析师—岗位分析(峰池)

    经常觉得很奇怪怎么辣么多数据分析师的广告,字节的峰池大佬是觉得未来该岗位可能消亡(康康大佬怎么说的同时了解下这个岗位,本文不代表本人观点,请客观理性看待=.=). 突然想起拿了京东算法岗ssp的上财学 ...

  6. Python数据可视化 - 使用Dash库制作杭州数据分析师岗位招聘情况可交互网页报告(附代码下载)

    dash dash不同于flask或者Django,具备少量的前端知识即可制作可视化网页,下图为本人制作的数据分析师岗位招聘情况可视化网页. 文末附网盘下载经过清洗后的数据与可视化网页的代码. 交互 ...

  7. 一线城市数据分析师的薪资分布......

    写这篇文章的时候,边写边扎着心,数据分析师高薪的还不少呢! 大家只知道自己的薪资水平,那么自己的薪资在一线城市中又处于什么样的位置呢?我整理了下BOSS直聘的数据分析师薪资样本数据,也调研了下以前认识 ...

  8. 数据说大数据分析师吴女士观点:大数据是回暖的计算机行业中绩增速最高的子行业...

    [背景] 近日,工信部正在制定<大数据产业"十三五"发展规划>,支持大数据技术和产业创新发展,提升大产业支撑能力,培育新业态新模式.在细分领域,大数据的政策推动力度明显 ...

  9. 怎样开启成功的“数据分析师”职业生涯(R、Python、机器学习、通信和数据可视化、数据直觉)

    目录 数据分析师是做什么的? 如何成为一名数据分析师:成为一名成功的数据分析师所需的技能 如何成为数据分析师:数据分析师职业的编程技能 ? R语言编程 Python 统计 数学 机器学习 在监督学习 ...

最新文章

  1. ckc交易什么意思_限价委托是什么意思?有限制的委托交易
  2. html5通html5通,HTML5 history详解
  3. 【正一专栏】儿时的夏天——似水流年
  4. selenium的使用教程3
  5. 文献阅读课13-DSGAN: Generative Adversarial Training for (远程监督关系抽取,句子级去噪)
  6. [原创]java WEB学习笔记36:Java Bean 概述,及在JSP 中的使用,原理
  7. 关于前端的一些基础知识
  8. python是脚本语言_Python 脚本语言
  9. android studio安装部署及sdk下载_「从零开始Python爬虫」1.7.3 APPium的安装
  10. Scala下载与安装
  11. Win7扫雷的H5完整复刻实现(二) / js扫雷算法处理空白连通域与点击不同方块的实现
  12. 离散数学在计算机相关领域的应用
  13. html embed音乐循环,加入视频或音乐——embed基本语法
  14. C++11之内联名字空间(inline namespace)和ADL特性(Argument-Dependent name Lookup)
  15. Android 实现百度地图骑行路线规划,骑行路线规划
  16. [COGS755]山海经
  17. Java实现微信运动步数(已自测)
  18. Redis-5.0.5集群配置
  19. 华硕B460m plus+Intel 10400+AMD 5500xt黑苹果EFI引导文件
  20. 100天精通Andriod逆向——第3天:真机环境配置

热门文章

  1. OFD格式如何在线转成PDF?
  2. 薪资12K,在华为外包做测试工作是一种什么体验...
  3. Axhub Charts学习记录贴-条形图添加正序排序/倒序排序功能
  4. 电脑端登录多个微信 PC端登录多个微信 win10多微信登录 win7登录多个微信
  5. 人人都懂的RocketMQ基本原理
  6. 2011分区联赛模拟试题 电子眼
  7. PMSM的发展及研究现状
  8. Linux 线程优先级设置(内含C语言版线程创建、绑定CPU和优先级设置代码)
  9. Linux设备模型剖析系列之二(uevent、sysfs)
  10. 【2021年1月】RT-Thread社区简报