Python告诉你:这类程序员最赚钱!

来源 | 本文转自CSDN学院

都说程序员钱多靠谱话稳重,那么我们身边的程序员究竟月薪高到什么程度呢?本文将以Python爬虫、数据分析、全栈开发、运维开发、机器学习、架构师这7个岗位,从某招聘网上爬取了相应的职位信息和任职要求,并通过数据分析可视化,直观地展示了这10个职位的平均薪资和学历、工作经验要求。手把手用代码实现!

01

爬虫准备

1、先获取薪资和学历、工作经验要求

由于拉勾网数据加载是动态加载的,需要我们分析。分析方法如下:

F12分析页面数据存储位置

我们发现网页内容是通过post请求得到的,返回数据是json格式,那我们直接拿到json数据即可。

我们只需要薪资和学历、工作经验还有单个招聘信息,返回json数据字典中对应的英文为:positionId,salary, education, workYear(positionId为单个招聘信息详情页面编号)。相关操作代码如下:

  • 文件存储:
  • 基本数据获取:

2、根据获取到的`positionId`来访问招聘信息详细页面

  • 根据`positionId`还原访问链接:
position_url = []
def read_csv():
    # 读取文件内容
    with open(r'G:\lagou_anv.csv', 'r', newline='') as file_test:
        # 读文件
        reader = csv.reader(file_test)
        i = 0
        for row in reader:
            if i != 0 :
                # 根据positionID补全链接
                url_single = "https://www.lagou.com/jobs/%s.html"%row[0]
                position_url.append(url_single)
            i = i + 1
        print('一共有:'+str(i-1)+'个')
        print(position_url)
  • 访问招聘信息详情页面,获取职位描述(岗位职责和岗位要求)并清理数据:
def get_info():
    for position_url in position_urls:
        work_duty = ''
        work_requirement = ''
        response00 = get_response(position_url,headers = headers)
        time.sleep(1)
        content = response00.xpath('//*[@id="job_detail"]/dd[2]/div/p/text()')
        # 数据清理
        j = 0
        for i in range(len(content)):
            content[i] = content[i].replace('\xa0',' ')
            if content[i][0].isdigit():
                if j == 0:
                    content[i] = content[i][2:].replace('、',' ')
                    content[i] = re.sub('[;;.0-9。]','', content[i])
                    work_duty = work_duty+content[i]+ '/'
                    j = j + 1
                elif content[i][0] == '1' and not content[i][1].isdigit():
                    break
                else:
                    content[i] = content[i][2:].replace('、', ' ')
                    content[i] = re.sub('[、;;.0-9。]','',content[i])
                    work_duty = work_duty + content[i]+ '/'
        m = i
        # 岗位职责
        write_file(work_duty)
        print(work_duty)
        # 数据清理
        j = 0
        for i in range(m,len(content)):
            content[i] = content[i].replace('\xa0',' ')
            if content[i][0].isdigit():
                if j == 0:
                    content[i] = content[i][2:].replace('、', ' ')
                    content[i] = re.sub('[、;;.0-9。]', '', content[i])
                    work_requirement = work_requirement + content[i] + '/'
                    j = j + 1
                elif content[i][0] == '1' and not content[i][1].isdigit():
                    # 控制范围
                    break
                else:
                    content[i] = content[i][2:].replace('、', ' ')
                    content[i] = re.sub('[、;;.0-9。]', '', content[i])
                    work_requirement = work_requirement + content[i] + '/'
        # 岗位要求
        write_file2(work_requirement)
        print(work_requirement)
        print("-----------------------------")
  • 运行结果:

duty

require

3、四种图可视化数据+数据清理方式

  • 矩形树图:
# 1.矩形树图可视化学历要求
from pyecharts import TreeMap
education_table = {}
for x in education:
    education_table[x] = education.count(x)
key = []
values = []
for k,v in education_table.items():
    key.append(k)
    values.append(v)

data = []
for i in range(len(key)) :
    dict_01 = {"value": 40, "name": "我是A"}
    dict_01["value"] = values[i]
    dict_01["name"] = key[i]
    data.append(dict_01)
tree_map = TreeMap("矩形树图", width=1200, height=600)
tree_map.add("学历要求",data, is_label_show=True, label_pos='inside')
  • 玫瑰饼图:
# 2.玫瑰饼图可视化薪资
import re
import math
'''
# 薪水分类
parameter : str_01--字符串原格式:20k-30k
returned value : (a0+b0)/2 --- 解析后变成数字求中间值:25.0
'''
def assort_salary(str_01):
    reg_str01 = "(\d+)"
    res_01 = re.findall(reg_str01, str_01)
    if len(res_01) == 2:
        a0 = int(res_01[0])
        b0 = int(res_01[1])
    else :
        a0 = int(res_01[0])
        b0 = int(res_01[0])
    return (a0+b0)/2

from pyecharts import Pie
salary_table = {}
for x in salary:
    salary_table[x] = salary.count(x)

key = ['5k以下','5k-10k','10k-20k','20k-30k','30k-40k','40k以上']
a0,b0,c0,d0,e0,f0=[0,0,0,0,0,0]

for k,v in salary_table.items():
    ave_salary = math.ceil(assort_salary(k))
    print(ave_salary)
    if ave_salary < 5:
        a0 = a0 + v
    elif ave_salary in range(5,10):
        b0 = b0 +v
    elif ave_salary in range(10,20):
        c0 = c0 +v
    elif ave_salary in range(20,30):
        d0 = d0 +v
    elif ave_salary in range(30,40):
        e0 = e0 +v
    else :
        f0 = f0 + v
values = [a0,b0,c0,d0,e0,f0]

pie = Pie("薪资玫瑰图", title_pos='center', width=900)
pie.add("salary",key,values,center=[40, 50],is_random=True,radius=[30, 75],rosetype="area",is_legend_show=False,is_label_show=True)
  • 普通柱状图:
# 3.工作经验要求柱状图可视化
from pyecharts import Bar
workYear_table = {}
for x in workYear:
    workYear_table[x] = workYear.count(x)
key = []
values = []
for k,v in workYear_table.items():
    key.append(k)
    values.append(v)
bar = Bar("柱状图")
bar.add("workYear", key, values, is_stack=True,center= (40,60))
  • 词云图:
import jieba
from pyecharts import WordCloud
import pandas as pd
import re,numpy

stopwords_path = 'H:\PyCoding\Lagou_analysis\stopwords.txt'
def read_txt():
    with open("G:\lagou\Content\\ywkf_requirement.txt",encoding='gbk') as file:
        text = file.read()
        content = text
        # 去除所有评论里多余的字符
        content = re.sub('[,,。. \r\n]', '', content)
        segment = jieba.lcut(content)
        words_df = pd.DataFrame({'segment': segment})
        # quoting=3 表示stopwords.txt里的内容全部不引用
        stopwords = pd.read_csv(stopwords_path, index_col=False,quoting=3, sep="\t", names=['stopword'], encoding='utf-8')
        words_df = words_df[~words_df.segment.isin(stopwords.stopword)]
        words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})
        words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)
        test = words_stat.head(200).values
        codes = [test[i][0] for i in range(0, len(test))]
        counts = [test[i][1] for i in range(0, len(test))]
        wordcloud = WordCloud(width=1300, height=620)
        wordcloud.add("必须技能", codes, counts, word_size_range=[20, 100])
        wordcloud.render("H:\PyCoding\Lagou_analysis\cloud_pit\ywkf_bxjn.html")

02

Python爬虫岗位薪酬

学历要求

工作月薪

工作经验要求

关键词解析:

  • 学历:本科
  • 工作月薪:10k-30k
  • 工作经验:1-5年
  • 技能:分布式、多线程、框架、Scrapy、算法、数据结构、数据库

综合:爬虫这个岗位在学历要求上比较放松,大多数为本科即可,比较适合想转业的老哥小姐姐,学起来也不会特别难。而且薪资待遇上也还算比较优厚,基本在10k以上。不过唯一对工作经验要求还是比较高的,有近一半的企业要求工作经验要达到3年以上。

03

Python数据分析岗位

学历要求

工作月薪

工作经验要求

关键词解析:

  • 学历:本科(硕士比例有所增高)
  • 工作月薪:10k-30k
  • 工作经验:1-5年
  • 技能:SAS、SPSS、Hadoop、Hive、数据库、Excel、统计学、算法

综合:数据分析这个岗位在学历要求上比爬虫要求稍微高一些,硕士比例有所提升,专业知识上有一定要求。薪资待遇上也还算比较优厚,基本在10k以上,同时薪资在30k-40k的比例也有所上升。对工作经验要求还是比较高,大部分的企业要求工作经验要达到3年以上。

04

Python后端岗位

学历要求

工作月薪

工作经验要求

关键词解析:

  • 学历:本科
  • 工作月薪:10k-30k
  • 工作经验:3-5年
  • 技能:Flask、Django、Tornado、Linux、MySql、Redis、MongoDB、TCP/IP、数学(哈哈)

综合:web后端这个岗位对学历要求不高,但专业知识上有很大要求,得会Linux操作系统基本操作、三大主流数据库的使用、以及三大基本web框架的使用等计算机相关知识,总体来说难道还是比较大。薪资待遇上也比较优厚,基本在10k以上,同时薪资在30k-40k的比例也有近20%。对工作经验要求还是比较高,大部分的企业要求工作经验要达到3年以上。

05

Python全栈开发岗位

学历要求

工作月薪

工作经验要求

关键词解析:

  • 学历:本科
  • 工作月薪:10k-30k
  • 工作经验:3-5年
  • 技能:测试、运维、管理、开发、数据结构、算法、接口、虚拟化、前端

综合:全栈开发这个岗位什么都要懂些,什么都要学些,在学历要求上并不太高,本科学历即可,在专业知识上就不用说了,各个方面都得懂,还得理解运用。薪资待遇上也还可以,基本在10k以上,薪资在30k-40k的比例也有近20%。对工作经验要求还是比较高,大部分的企业要求工作经验要达到3年以上。总体来说,就我个人而言会觉得全栈是个吃力多薪水少的岗位。

06

Python运维开发岗位

学历要求

工作月薪

工作经验要求

关键词解析:

  • 学历:本科
  • 工作月薪:10k-30k
  • 工作经验:3-5年
  • 技能:SVN、Git、Linux、框架、shell编程、mysql,redis,ansible、前端框架

综合:运维开发这个岗位在学历要求上不高,除开占一大半的本科,就是专科了。工作经验上还是有一些要求,大多数要求有3-5年工作经验。从工资上看的话,不高也不低,20k以上也占有62%左右。要学习的东西也比较多,前端、后端、数据库、操作系统等等。

07

Python机器学习岗位

学历要求

工作月薪

工作经验要求

关键词解析:

  • 学历:本科(硕士也占比很大)
  • 工作月薪:30k以上
  • 工作经验:3-5年
  • 技能:Machine Learning,Data Mining,Algorithm 研发,算法,Linux,决策树,TF,Spark+MLlib,Cafe

综合:机器学习这个岗位在学历要求上比较严格,虽然看起来是本科居多,但对于刚毕业或毕业不久的同学,如果只是个本科,应聘还是很有难度的。当然机器学习岗位薪资特高,60%在30k以上,近90%在20k以上,97%在10k以上。除开对学历要求比较高外,对工作经验要求也比较高,有近一半的企业要求工作经验要达到3年以上。

08

Python架构师岗位

学历要求

工作月薪

工作经验要求

关键词解析:

  • 学历:本科
  • 工作月薪:30k以上
  • 工作经验:5-10年
  • 技能:Flask,Django,MySQL,Redis,MongoDB,Hadoop,Hive,Spark,ElasticSearch,Pandas,Spark/MR,Kafka/rabitmq

综合:架构师这个岗位单从学历上看不出什么来,但在薪资上几乎与机器学习一样,甚至比机器学习还要高,机器学习中月薪40k以上的占23.56%,架构师中月薪40k以上的占30.67%。在学历要求上比机器学习要略低,本科居多,但在工作经验上一半以上的企业要求工作经验在5-10年。在必要技能上也要求特别严格,比之前说过的全栈开发师有过之而无不及。

看着这月薪,我是超级想去了,你呢?

09

写在最后

从上文可以看出,Python相关的各个岗位薪资还是不错的,基本上所有岗位在10k以上的占90%,20k以上的也基本都能占60%左右。而且学历上普遍来看,本科学历占70%以上。唯一的是需要工作经验,一般得有个3-5年工作经验,也就是如果24岁本科毕业,27岁就有很大机会拿到月薪20k以上。有没有很心动?

整个系列下来,词云分析虽不完全正确,但大家不难发现,有两个词在每个岗位要求的词云图中都有出现,那就是——经验和熟悉。的确,不论我们做什么,都必须认认真真的去做、去学,在不断的实践中积累经验。

到这里,本系列就结束了,本系列一共爬取了拉钩网10个不同Python相关岗位,每个岗位450条招聘信息,共计4500条。爬取拉钩网其实是个挺简单的事情,只要知道了怎么去分析页面加载即可,获取到数据也不过就是直接返回的json数据,或者正则匹配。我觉得比较有趣也是比较难的是数据清理和可视化分析。后面我会继续学习,也希望大家一起学习,多多交流。

和你想象的有差别吗?欢迎留言讨论!

本文分享自微信公众号 - CDA数据分析师(cdacdacda)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏量子位

英伟达新开源GPU加速平台:主打数据科学和机器学习,50倍于CPU

因为这个名为RAPIDS的开源GPU加速平台出现,固有的数据工作,看起来将迎来变革。

11730
来自专栏深度学习与数据挖掘实战

干货|广告数据上的大规模机器学习

15030
来自专栏深度学习与数据挖掘实战

【书单推荐】 数据分析师&数据挖掘工程师

以上图书,是我经常翻阅的图书,和大家分享。如果有条件的可以,阅读英文原版,更好!

13120
来自专栏深度学习与数据挖掘实战

干货|程序员到机器学习工程师飞跃的实战经验

“我是一名软件开发工程师,阅读过一些关于机器学习方面的书籍和博客文章,也学习过一些在线的关于机器学习的公开课。但是,我仍然不知道怎么应用到工程实践中……”

10010
来自专栏深度学习与数据挖掘实战

新浪微博Feed流机器学习实践

30820
来自专栏程序员的知识天地

10分钟掌握Python-机器学习小项目

而且,Python 还有很多模块和程序库供我们选择,从而针对一个任务能有很多个解决方案。怎么样,听起来还是很厉害的吧?

20210
来自专栏深度学习与数据挖掘实战

【Spark机器学习实战】 ML Pipeline 初探

人类经历了从农业革命到工业革命,再到信息革命。信息革命,起源于互联网的诞生,它将会经历三个阶段的跃迁。第一阶段,人与人的连接(网络的雏形),比如:Faceboo...

18910
来自专栏深度学习与数据挖掘实战

干货|(书单推荐) 数据科学家&amp;数据挖掘工程师

以上图书,是我经常翻阅的图书,和大家分享。如果有条件的可以,阅读英文原版,更好!

18610
来自专栏深度学习与数据挖掘实战

干货|机器学习在搜索排序中的应用

作者:仁重 淘宝搜索事业部

40460
来自专栏深度学习与数据挖掘实战

干货| 机器学习 Pipeline 初探(大数据Spark方向)

人类经历了从农业革命到工业革命,再到信息革命。信息革命,起源于互联网的诞生,它将会经历三个阶段的跃迁。第一阶段,人与人的连接(网络的雏形),比如:Faceboo...

89420

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励