歡迎光臨
每天分享高質量文章

哪種Python程式員最賺錢?資料分析告訴你,這兩個關鍵詞最重要!

導讀:本文以Python爬蟲、資料分析、後端、資料挖掘、全棧開發、運維開發、高級開發工程師、大資料、機器學習、架構師這10個崗位,從拉勾網上爬取了相應的職位信息和任職要求,並通過資料分析可視化,直觀地展示了這10個職位的平均薪資和學歷、工作經驗要求。

作者:XksA

來源:極簡XksA(ID:xksnh888)

01 爬蟲準備

1. 先獲取薪資和學歷、工作經驗要求

由於拉勾網資料加載是動態加載的,需要我們分析。分析方法如下:

▲F12分析頁面資料儲存位置

我們發現網頁內容是通過 post請求得到的,傳回資料是 json 格式,那我們直接拿到 json 資料即可。

我們只需要薪資和學歷、工作經驗還有單個招聘信息,傳回 json 資料字典中對應的英文為:positionId,salary, education, workYear(positionId為單個招聘信息詳情頁面編號)。相關操作代碼如下:

1.1 檔案儲存

def file_do(list_info):
    # 獲取檔案大小
    file_size = os.path.getsize(r'G:\lagou_anv.csv')
    if file_size == 0:
        # 表頭
        name = ['ID','薪資''學歷要求''工作經驗']
        # 建立DataFrame物件
        file_test = pd.DataFrame(columns=name, data=list_info)
        # 資料寫入
        file_test.to_csv(r'G:\lagou_anv.csv', encoding='gbk', index=False)
    else:
        with open(r'G:\lagou_anv.csv''a+', newline=''as file_test:
            # 追加到檔案後面
            writer = csv.writer(file_test)
            # 寫入檔案
            writer.writerows(list_info)

1.2 基本資料獲取

# 1. post 請求 url
req_url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
# 2.請求頭 essay-headers
essay-headers = {
    'Accept''application/json,text/javascript,*/*;q=0.01',
    'Connection''keep-alive',
    'Cookie''你的Cookie值,必須加上去',
    'Host''www.lagou.com',
    'Referer''https://www.lagou.com/jobs/list_Python?labelWords=&fromSearch;=true&suginput;=',
    'User-Agent':  str(UserAgent().random),
}

def get_info(essay-headers):
    # 3.for 迴圈請求(一共30頁)
    for i in range(131):
        # 翻頁
        data = {
            'first''true',
            'kd''Python爬蟲',
            'pn': i
        }
        # 3.1 requests 發送請求
        req_result = requests.post(req_url, data=data, essay-headers=essay-headers)
        req_result.encoding = 'utf-8'
        print("第%d頁:"%i+str(req_result.status_code))
        # 3.2 獲取資料
        req_info = req_result.json()
        # 定位到我們所需資料位置
        req_info = req_info['content']['positionResult']['result']
        print(len(req_info))
        list_info = []
        # 3.3 取出具體資料
        for j in range(0, len(req_info)):
            salary = req_info[j]['salary']
            education = req_info[j]['education']
            workYear = req_info[j]['workYear']
            positionId = req_info[j]['positionId']
            list_one = [positionId,salary, education, workYear]
            list_info.append(list_one)
        print(list_info)
        # 儲存檔案
        file_do(list_info)
        time.sleep(1.5)

1.3 運行結果


2. 根據獲取到的`positionId`來訪問招聘信息詳細頁面

2.1 根據`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)

2.2 訪問招聘信息詳情頁面,獲取職位描述(崗位職責和崗位要求)並清理資料

def get_info():
    for position_url in position_urls:
        work_duty = ''
        work_requirement = ''
        response00 = get_response(position_url,essay-headers = essay-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("-----------------------------")

2.3 運行結果

▲duty

▲require

3. 四種圖可視化資料+資料清理方式

3.1 矩形樹圖

# 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')


3.2 玫瑰餅圖

# 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=[4050],is_random=True,radius=[3075],rosetype="area",is_legend_show=False,is_label_show=True)


3.3 普通柱狀圖

# 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))

3.4 詞雲圖

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][0for i in range(0, len(test))]
        counts = [test[i][1for i in range(0, len(test))]
        wordcloud = WordCloud(width=1300, height=620)
        wordcloud.add("必須技能", codes, counts, word_size_range=[20100])
        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資料挖掘崗位

▲學歷要求

▲工作月薪

▲工作經驗要求

▲資料挖掘技能

關鍵詞解析:


  • 學歷:本科(碩士)

  • 工作月薪:20k-40k

  • 工作經驗:3-5年

  • 技能:學歷(hhh)、Hadoop、Spark、MapReduce、Scala、Hive、聚類、決策樹、GBDT、演算法


綜合:資料挖掘這個崗位,在學歷要求是最高的,雖然還是本科居多,但碩士比例明顯增加,還有公司要求博士學歷。在專業知識上也有很大要求,得會Linux操作系統基本操作、大資料框架Hadoop、Spark以及資料倉庫Hive的使用等計算機相關知識,總體來說難道還是比較大。薪資待遇上特別優厚,基本在20k以上,薪資在30k-40k的比例也有近40%,對工作經驗要求還是比較高,大部分的企業要求工作經驗要達到3年以上。

06 Python全棧開發崗位

▲學歷要求

▲工作月薪

▲工作經驗要求

▲全棧開發技能

關鍵詞解析:


  • 學歷:本科

  • 工作月薪:10k-30k

  • 工作經驗:3-5年

  • 技能:測試、運維、管理、開發、資料結構、演算法、接口、虛擬化、前端


綜合:全棧開發這個崗位什麼都要懂些,什麼都要學些,在學歷要求上並不太高,本科學歷即可,在專業知識上就不用說了,各個方面都得懂,還得理解運用。薪資待遇上也還可以,基本在10k以上,薪資在30k-40k的比例也有近20%。對工作經驗要求還是比較高,大部分的企業要求工作經驗要達到3年以上。總體來說,就我個人而言會覺得全棧是個吃力多薪水少的崗位。

07 Python運維開發崗位

▲學歷要求

▲工作月薪

▲工作經驗要求

▲運維開發技能

關鍵詞解析:


  • 學歷:本科

  • 工作月薪:10k-30k

  • 工作經驗:3-5年

  • 技能:SVN、Git、Linux、框架、shell編程、mysql,redis,ansible、前端框架


綜合:運維開發這個崗位在學歷要求上不高,除開占一大半的本科,就是專科了。工作經驗上還是有一些要求,大多數要求有3-5年工作經驗。從工資上看的話,不高也不低,20k以上也占有62%左右。要學習的東西也比較多,前端、後端、資料庫、操作系統等等。

08 Python高級開發工程師崗位

▲學歷要求

▲工作月薪

▲工作經驗要求

▲高級開發工程師技能

關鍵詞解析:

  • 學歷:本科

  • 工作月薪:20k左右

  • 工作經驗:3-5年

  • 技能:WEB後端、MySQL、MongoDB、Redis、Linux系統(CentOS)、CI/CD 工具、GitHub 

綜合:高級開發工程師這個崗位在學歷要求上與運維開發差不多,薪資也相差不大,22%以上的企業開出了30k以上的薪資,65%左右企業給出20k以上的薪資。當然,對工作經驗上還是要求較高,有近一半的企業要求工作經驗要達到3年以上。

09 Python大資料崗位

▲學歷要求

▲工作月薪

▲工作經驗要求

▲大資料技能

關鍵詞解析:

  • 學歷:本科(碩士也占比很大)

  • 工作月薪:30k以上

  • 工作經驗:3-5年

  • 技能:前端開發、 MySQL、Mongo、Redis、Git 、Flask、Celery、Hadoop/HBase/Spark/Hive、Nginx

綜合:現在是大資料時代,大資料這個崗位也是相當火熱,在學歷要求上幾乎與運維開發一模一樣。當然,可能資料上出現了巧合,本科居多,工作經驗上1-5年占據一大半,薪資上也基本上在20k以上,該崗位薪資在20k以上的企業占了55%左右。

10 Python機器學習崗位

▲學歷要求

▲工作月薪

▲工作經驗要求

▲機器學習技能

關鍵詞解析:

  • 學歷:本科(碩士也占比很大)

  • 工作月薪:30k以上

  • 工作經驗:3-5年

  • 技能:Machine Learning,Data Mining,Algorithm 研發,演算法,Linux,決策樹,TF,Spark+MLlib,Cafe

綜合:機器學習這個崗位在學歷要求上比較嚴格,雖然看起來是本科居多,但對於剛畢業或畢業不久的同學,如果只是個本科,應聘還是很有難度的。當然機器學習崗位薪資特高,60%在30k以上,近90%在20k以上,97%在10k以上。除開對學歷要求比較高外,對工作經驗要求也比較高,有近一半的企業要求工作經驗要達到3年以上。

11 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年。在必要技能上也要求特別嚴格,比之前說過的全棧開發師有過之而無不及。

看著這月薪,我是超級想去了,你呢?

12 寫在最後

從上文可以看出,Python相關的各個崗位薪資還是不錯的,基本上所有崗位在10k以上的占90%,20k以上的也基本都能占60%左右。而且學歷上普遍來看,本科學歷占70%以上。唯一的是需要工作經驗,一般得有個3-5年工作經驗,也就是如果24歲本科畢業,27歲就有很大機會拿到月薪20k以上。有沒有很心動?

詞雲分析雖不完全正確,但大家不難發現,有兩個詞在每個崗位要求的詞雲圖中都有出現,那就是——經驗熟悉。的確,不論我們做什麼,都必須認認真真的去做、去學,在不斷的實踐中積累經驗。

本文一共爬取了拉勾網10個不同Python相關崗位,每個崗位450條招聘信息,共計4500條。爬取拉網其實是個挺簡單的事情,只要知道了怎麼去分析頁面加載即可,獲取到資料也不過就是直接傳回的json資料,或者正則匹配。我覺得比較有趣也是比較難的是資料清理和可視化分析。後面我會繼續學習,也希望大家一起學習,多多交流。

作者:XksA,大三在讀的師範技術生,主要學習Python web、資料分析、可視化方面,個人公眾號 極簡XksA 長期分享學習筆記,學習資料,歡迎交流學習。

轉載請與原作者聯繫取得授權。

更多精彩


在公眾號後臺對話框輸入以下關鍵詞

查看更多優質內容!


PPT | 報告 | 讀書 | 書單

Python | 機器學習 | 深度學習 | 神經網絡

區塊鏈 | 揭秘 | 乾貨 | 數學

猜你想看

Q: 現在你已經熬到多少年經驗了

歡迎留言與大家分享

覺得不錯,請把這篇文章分享給你的朋友

轉載 / 投稿請聯繫:[email protected]

更多精彩,請在後臺點擊“歷史文章”查看

赞(0)

分享創造快樂