用Python分析深圳程序员工资有多高?还真是多金的程序员!

栏目: IT资讯 · 发布时间: 7年前

内容简介:多图预警、多图预警、多图预警。秋招季,毕业也多,跳槽也多。我们的职业发展还是要顺应市场需求,那么各门编程语言在深圳的需求怎么呢?工资待遇怎么样呢?zone 在上次写了这篇文章之后 用Python告诉你深圳房租有多高 ,想继续用 Python 分析一下,当前深圳的求职市场怎么样?顺便帮一下秋招的同学。于是便爬取了某拉钩招聘数据。以下是本次爬虫的样本数据:样本

前言

多图预警、多图预警、多图预警。秋招季,毕业也多,跳槽也多。我们的职业发展还是要顺应市场需求,那么各门编程语言在深圳的需求怎么呢?工资待遇怎么样呢?zone 在上次写了这篇文章之后 用 Python 告诉你深圳房租有多高 ,想继续用 Python 分析一下,当前深圳的求职市场怎么样?顺便帮一下秋招的同学。于是便爬取了某拉钩招聘数据。以下是本次爬虫的样本数据:

用Python分析深圳 <a href='https://www.codercto.com'>程序员</a> 工资有多高?还真是多金的程序员!

样本

本次统计数据量为 4658 ,其中某拉钩最多能显示 30 页数据,每页 15 条招聘信息,则总为:

30 x 15 = 450

首页爬取跳过一页,则为 435 条,故数据基本爬完。其余不够数量的语言为该语言在深圳只有这么多条招聘信息。

统计结果

各语言平均工资

其中

  • 精准推荐
  • 自然语言
  • 机器学习
  • Go 语言
  • 图像识别

独领风骚啊!!!平均工资都挺高的。区块链炒得挺火的,好像平均薪资并没有那么高。我统计完之后,感觉自己拖后腿了,ma 的!!!要删库跑路了!(注:下图为月薪,单位:K)

用Python分析深圳程序员工资有多高?还真是多金的程序员!

各语言平均薪资

平均工资计算方式:

用Python分析深圳程序员工资有多高?还真是多金的程序员!

某钩 item

最高值与最低值,求平均数,如图薪资则为:

(10k + 20k)/2 = 15k

最后,再总体求平均数。

公司福利词云

看福利还是挺丰富的,带薪休假、下午茶、零食、节假日。

用Python分析深圳程序员工资有多高?还真是多金的程序员!

福利词云

公司发展级别排行

总体由 A 轮向 D 轮缩减,大部分公司不需要融资,嗯,估计是拿不到资本融资,但是自家人又有钱的。

用Python分析深圳程序员工资有多高?还真是多金的程序员!

公司发展级别

各语言工作年限要求与学历要求

看看你的本命语言的市场需求怎么样?你达标了吗?其中三至五年的攻城狮职位挺多的,不怕找不到工作。还有一个趋势是,薪资越高,学历要求越高高。看来学历还是挺重要的。

Java

用Python分析深圳程序员工资有多高?还真是多金的程序员!

Java 工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

Java 学历要求

Python

用Python分析深圳程序员工资有多高?还真是多金的程序员!

Python 工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

Python 学历要求

C 语言

用Python分析深圳程序员工资有多高?还真是多金的程序员!

C 语言工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

C 语言学历要求

机器学习

用Python分析深圳程序员工资有多高?还真是多金的程序员!

机器学习工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

机器学习学历要求

图像识别

用Python分析深圳程序员工资有多高?还真是多金的程序员!

图像识别工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

图像识别学历要求

自然语言

用Python分析深圳程序员工资有多高?还真是多金的程序员!

自然语言工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

自然语言学历要求

区块链

用Python分析深圳程序员工资有多高?还真是多金的程序员!

区块链工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

区块链学历要求

Go 语言

用Python分析深圳程序员工资有多高?还真是多金的程序员!

Go 语言工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

Go

PHP

用Python分析深圳程序员工资有多高?还真是多金的程序员!

PHP 工作年限要求

用Python分析深圳程序员工资有多高?还真是多金的程序员!

PHP 学历要求

爬虫技术分析

  • 请求库:selenium
  • HTML 解析:BeautifulSoup、xpath
  • 词云:wordcloud
  • 数据可视化:pyecharts
  • 数据库:MongoDB
  • 数据库连接:pymongo

爬虫代码实现

看完统计结果之后,有没有跃跃欲试?想要自己也实现以下代码?以下为代码实现。

对网页右击,点击检查,找到一条 item 的数据:

用Python分析深圳程序员工资有多高?还真是多金的程序员!

网页源码

数据库存储结构:

/* 1 */ 
{ 
 "_id" : ObjectId("5b8b89328ffaed60a308bacd"), 
 "education" : "本科",# 学习要求 
 "companySize" : "2000人以上",# 公司人数规模 
 "name" : "python开发工程师",# 职位名称 
 "welfare" : "“朝九晚五,公司平台大,发展机遇多,六险一金”",# 公司福利 
 "salaryMid" : 12.5,# 工资上限与工资下限的平均数 
 "companyType" : "移动互联网",# 公司类型 
 "salaryMin" : "10",# 工资下限 
 "salaryMax" : "15",# 工资上限 
 "experience" : "经验3-5年",# 工作年限 
 "companyLevel" : "不需要融资",# 公司级别 
 "company" : "XXX技术有限公司"# 公司名称 
} 

由于篇幅原因,以下只展示主要代码:

# 获取网页源码数据 
# language => 编程语言 
# city => 城市 
# collectionType => 值:True/False True => 数据库表以编程语言命名 False => 以城市命名 
def main(self, language, city, collectionType): 
 print(" 当前爬取的语言为 => " + language + " 当前爬取的城市为 => " + city) 
 url = self.getUrl(language, city) 
 browser = webdriver.Chrome() 
 browser.get(url) 
 browser.implicitly_wait(10) 
 for i in range(30): 
 selector = etree.HTML(browser.page_source) # 获取源码 
 soup = BeautifulSoup(browser.page_source, "html.parser") 
 span = soup.find("div", attrs={"class": "pager_container"}).find("span", attrs={"action": "next"}) 
 print( 
 span) # <span action="next" class="pager_next pager_next_disabled" hidefocus="hidefocus">下一页<strong class="pager_lgthen pager_lgthen_dis"></strong></span> 
 classArr = span['class'] 
 print(classArr) # 输出内容为 -> ['pager_next', 'pager_next_disabled'] 
 attr = list(classArr)[0] 
 attr2 = list(classArr)[1] 
 if attr2 == "pager_next_disabled":#分析发现 class 属性为 ['pager_next', 'pager_next_disabled'] 时,【下一页】按钮不可点击 
 print("已经爬到最后一页,爬虫结束") 
 break 
 else: 
 print("还有下一页,爬虫继续") 
 browser.find_element_by_xpath('//*[@id="order"]/li/div[4]/div[2]').click() # 点击【下一页】按钮 
 time.sleep(5) 
 print('第{}页抓取完毕'.format(i + 1)) 
 self.getItemData(selector, language, city, collectionType)# 解析 item 数据,并存进数据库 
 browser.close() 

爬虫分析实现

# 获取各语言样本数量 
def getLanguageNum(self): 
 analycisList = [] 
 for index, language in enumerate(self.getLanguage()): 
 collection = self.zfdb["z_" + language] 
 totalNum = collection.aggregate([{'$group': {'_id': '', 'total_num': {'$sum': 1}}}]) 
 totalNum2 = list(totalNum)[0]["total_num"] 
 analycisList.append(totalNum2) 
 return (self.getLanguage(), analycisList) 
# 获取各语言的平均工资 
def getLanguageAvgSalary(self): 
 analycisList = [] 
 for index, language in enumerate(self.getLanguage()): 
 collection = self.zfdb["z_" + language] 
 totalSalary = collection.aggregate([{'$group': {'_id': '', 'total_salary': {'$sum': '$salaryMid'}}}]) 
 totalNum = collection.aggregate([{'$group': {'_id': '', 'total_num': {'$sum': 1}}}]) 
 totalNum2 = list(totalNum)[0]["total_num"] 
 totalSalary2 = list(totalSalary)[0]["total_salary"] 
 analycisList.append(round(totalSalary2 / totalNum2, 2)) 
 return (self.getLanguage(), analycisList) 
# 获取一门语言的学历要求(用于 pyecharts 的词云) 
def getEducation(self, language): 
 results = self.zfdb["z_" + language].aggregate([{'$group': {'_id': '$education', 'weight': {'$sum': 1}}}]) 
 educationList = [] 
 weightList = [] 
 for result in results: 
 educationList.append(result["_id"]) 
 weightList.append(result["weight"]) 
 # print(list(result)) 
 return (educationList, weightList) 
# 获取一门语言的工作年限要求(用于 pyecharts 的词云) 
def getExperience(self, language): 
 results = self.zfdb["z_" + language].aggregate([{'$group': {'_id': '$experience', 'weight': {'$sum': 1}}}]) 
 totalAvgPriceDirList = [] 
 for result in results: 
 totalAvgPriceDirList.append( 
 {"value": result["weight"], "name": result["_id"] + " " + str(result["weight"])}) 
 return totalAvgPriceDirList 
# 获取 welfare 数据,用于构建福利词云 
def getWelfare(self): 
 content = '' 
 queryArgs = {} 
 projectionFields = {'_id': False, 'welfare': True} # 用字典指定 
 for language in self.getLanguage(): 
 collection = self.zfdb["z_" + language] 
 searchRes = collection.find(queryArgs, projection=projectionFields).limit(1000) 
 for result in searchRes: 
 print(result["welfare"]) 
 content += result["welfare"] 
 return content 
# 获取公司级别排行(用于条形图) 
def getAllCompanyLevel(self): 
 levelList = [] 
 weightList = [] 
 newWeightList = [] 
 attrList = ["A轮", "B轮", "C轮", "D轮及以上", "不需要融资", "上市公司"] 
 for language in self.getLanguage(): 
 collection = self.zfdb["z_" + language] 
 # searchRes = collection.find(queryArgs, projection=projectionFields).limit(1000) 
 results = collection.aggregate([{'$group': {'_id': '$companyLevel', 'weight': {'$sum': 1}}}]) 
 for result in results: 
 levelList.append(result["_id"]) 
 weightList.append(result["weight"]) 
 for index, attr in enumerate(attrList): 
 newWeight = 0 
 for index2, level in enumerate(levelList): 
 if attr == level: 
 newWeight += weightList[index2] 
 newWeightList.append(newWeight) 
 return (attrList, newWeightList)  

【责任编辑:庞桂玉 TEL:(010)68476606】


以上所述就是小编给大家介绍的《用Python分析深圳程序员工资有多高?还真是多金的程序员!》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

超越门户

超越门户

吴晨光 / 中国人民大学出版社 / 2015-4-17 / 39.80

在这个PC端影响力下降、人们对手机的依赖与日俱增的时代,这种探索的意义非同寻常,可以说是试图树立新媒体时代的行业标准。 ——陈彤(小米内容投资与运营副总裁、新浪网前总编辑、资深网络媒体人) 我将对此书的阅读,视作对往日岁月的怀念,它提醒我,自己曾 投身于多么富有蓬勃朝气和探索精神的事业。而对这种事业的原则、逻辑和方法的继承和继续学习,对于互联网时代的企业形象塑造 ,同样有融会变通的参考......一起来看看 《超越门户》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码