社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python or Java?大数据解读学什么语言最赚钱

AI时间 • 6 年前 • 475 次点击  

点击上方“AI时间”,关注并设为星标

加入人工智能技术社区!

  源 / 数据森麟   文 / 徐涛

本文主要用Python爬取拉勾网不同编程语言职位信息,包括:Python岗、Java岗、C++岗、PHP岗、C#岗位(5岗);用R语言对影响薪资的因素进行分析。由于拉勾网的职位信息只显示30页,一页15个职位信息,如果单独爬取一个城市的岗位信息,只有几页是匹配的信息,信息量太小,分析没有说服力。因此,本文爬取拉勾网全国职位信息。主要三部分内容:

一、爬取拉勾网5岗职位信息--以Python岗为例

二、以Python岗位信息为例,分析影响薪资的因素

三、5岗之间薪水因素影响比较分析

一、爬取拉勾网5岗职位信息--以Python岗为例

我们抓取的信息包括Python岗位名称、公司名称、薪资、工作经验、学历、公司规模、公司福利。

##以python岗位为例,运用selenium+Chrome()爬取岗位信息
# coding=UTF-8from lxml import etree
from selenium import webdriver
import time
import csv

browser = webdriver.Chrome()
browser.get('https://www.lagou.com/jobs/list_PYTHON?px=default&city=%E5%85%A8%E5%9B%BD#filterBox')
browser.implicitly_wait(10)

def get_dates(selector):
       items = selector.xpath('//*[@id="s_position_list"]/ul/li')
       for item in items:
           yield {
               'Name': item.xpath('div[1]/div[1]/div[1]/a/h3/text()')[0],
               'Company': item.xpath('div[1]/div[2]/div[1]/a/text()')[0],
               'Salary': item.xpath('div[1]/div[1]/div[2]/div/span/text()')[0],
               'Education': item.xpath('div[1]/div[1]/div[2]/div//text()')[3].strip(),
               'Size': item.xpath('div[1]/div[2]/div[2]/text()')[0].strip(),
               'Welfare': item.xpath('div[2]/div[2]/text()')[0]
           }
def main():
   i = 0
   for i in range(30):
       selector = etree.HTML(browser.page_source)
       browser.find_element_by_xpath('//*[@id="order"]/li/div[4]/div[2]').click()
       time.sleep(5)
       print('第{}页抓取完毕'.format(i+1))
       for item in get_dates(selector):
           print(item)
       with open('Py.csv', 'a', newline='') as csvfile:  ##Py.csv是文件的保存路径,这里默认保存在工作目录
           fieldnames = ['Name', 'Company', 'Salary', 'Education', 'Size', 'Welfare']
           writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
           writer.writeheader()
           for item in get_dates(selector):
               writer.writerow(item)
       time.sleep(5)
   browser.close()
if __name__=='__main__':
   main()

抓取结果如下:

将抓取结果循环写入csv文件:

此外还抓取了Java岗、C++岗、PHP岗、C#岗位4岗的信息,代码和抓取Python岗位信息类似。

二、以Python岗位信息为例,分析影响薪资的因素

这里包括数据清洗部分和数据分析部分两部分内容。

数据清洗部分

dataread.csv("E://Data For R/RData/Py.csv")
data[sample(1:nrow(data),size=10),]

在抓取过程中,由于将python字典循环写入csv文件,因此列名也被循环写在csv文件中。

考虑本文主要分析影响薪资的因素,这里去除Name和Company两列。

##去除Name和Company两列
DATA##将python字典循环写入csv文件时,标题也会被写入,去除多余的标题
##查找哪些行是标题重复的行
which(DATA$Salary %in% "Salary")
[1]  16  32  48  64  80  96 102 118 134 150 166 182 198 214 230 246 262 278 294 310 326 342 358 374 390 406 422 438 454 470 486 502 518
[34] 534 550 566
##去除多余的标题所在的行
DATAdim(DATA)
[1] 545   4

1.变量Salary

变量Salary一般都是范围值,用“-”连接,但是不排除有XXK以上,例如10k以上这种表示形式,或者其他形式,这里需要处理一下。

#


    
#如果薪资是一个范围值,都是"-"连接,注意,薪资是一个范围值,匹配末尾结束k值需要注意,有大写K和小写k两种形式。
newdatadim(newdata)
[1] 544   4
##对比前面dim(DATA),说明薪水少了一行,Salary具有其他的表示形式。
##这里将范围薪水的值分成底薪和高薪两部分,后面取平均值来表示薪水
library(tidyr)
library(stringr)
newdata##分别去除后面的k值,注意k有大写和小写两种形式
newdata$lowsalary$lowsalary,'k|K',"")##  |表示或的关系
newdata$highsalary$highsalary,'k|K',"")
newdata$lowsalary$lowsalary)##转换数据类型
newdata$highsalary$highsalary)
newdata$salary$lowsalary+newdata$highsalary)/2
newdadat

2.变量Education

###Education部分
##首先将Education中工作经验和学历分开
newdatatable(newdata$Experience)
经验1-3年     经验1年以下       经验3-5年      经验5-10年        经验不限  经验应届毕业生  
187               6             261              46              37               7
table(newdata$Graduate)
本科  不限  大专  硕士
 447    27    63     7

3.变量Size

##此处以公司人数作为描述公司规模的标准
newdatatable(newdata$Number)

15-50人   150-500人  2000人以上    50-150人  500-2000人    少于15人
  76         139         117         119          82          11
table(newdata$Rong)
A轮          B轮          C轮    D轮及以上   不需要融资     上市公司       天使轮       未融资  
86           81           54           30          132           80           33           48
##将Type去除  
newdata

4.变量Welfare

Welfare##将Welfare去除
newdatahead(newdata)

到此,数据清洗部分内容全部结束。

数据分析部分

1.工资与工作年限的关系

library(ggplot2)
ggplot(newdata,aes(x=Experience,y=salary))+geom_boxplot(col="red")

符合大众的认知,从事python的应届毕业生起始工资平均值在5K左右,且薪资水平跨度最小,经验5-10年,工资水平跨度最大,主要可能是因为,有一部分转为技术管理岗位,工资较低的可能还在继续码代码,是不是对广大同胞们的警告啊.......

2.工资与学历的关系(专科,本科,研究生,不限)

ggplot(newdata,aes(x=Graduate,y=salary))+geom_boxplot(col="red")

这里是否能说明学历在一定程度上的重要性?学历本科的工资跨度比较大,因为工作经验的不同导致了薪资的差异。

3.工资与公司融资的关系

ggplot(newdata,aes(x=Rong,y=salary))+geom_boxplot(col="red")

对于这部分知识是盲点,但是可以看出融资公司(上市也是一种融资方式)比没有融资的公司平均工资要高出不少,这部分是不是可以是以后找工作的一个风向标。。。

4.工资与公司大小的关系

公司规模越大,平均的工资也越高。

5.工资与工作时间和学历的关系

library(ggthemes)
library(scales)
ggplot(newdata,aes(x=Experience,y=salary,fill=factor(Graduate)))+
geom_boxplot()+
geom_hline(aes(yintercept=20),color="red",linetype="dashed",lwd=1)+
scale_y_continuous(labels=dollar_format())+theme_few()

这张图告诉我们,在大部分情况下,没(Ren)钱(Chou)就要多读书。不管是经验经验1年以下、经验3-5年、经验5-10年、经验不限的情况下,拥有硕士学历的平均收入都普遍高于本科,本科都高于大专。(这里完全没有歧视低学历之意)

6.公司福利的云图

##公司福利的云图
library(jiebaR)
Welfareas.character(Welfare)
wk = worker()
seg_wordslibrary(plyr)
library(wordcloud)
tableWordcount(seg_words)
windowsFonts(myFont=windowsFont("华文彩云")) ##使用华文彩云字体
wordcloud(tableWord[,1],tableWord[,2],random.order=F,col= rainbow(100),family="myFont")

现在公司的福利贴有“弹性工作,氛围好,团队,大牛,技术,五险一金”等标签来吸引求职者眼球。

三、5岗之间薪水因素影响比较分析

1.Python岗、Java岗、C++岗、PHP岗、C#岗位的平均薪水

抓取拉勾网职位信息,可以看出python和java的平均薪资较高,C#的平均工资最低。

由此也验证python近几年火热的态势,由于AI的火热,python的需求越来越大,传统的java也比较强势,薪资待遇较高。

2.相同工作经验不同职位信息薪水比较

对于不同工作经验,不同编程语言平均薪水还是有较大的差异。

3.相同学历信息不同职位信息薪水比较

通过硕士、本科、大专、不限四种比较,硕士的总体薪资高于本科。

4.同一职位不同学历信息薪水比较

总的看来,在每个职业,硕士学历的平均薪水高于本科,本科的平均薪水高于大专。

-END-

转载声明:本文选自「数据森麟」,搜索「shujusenlin」即可关注


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/DXpQuyS7t6
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/23202
 
475 次点击