Python数据可视化分析数据挖掘以及数据分析岗位

本来想用request爬取拉勾数据的额,后来爬了一两页就被封了IP,所以找资料去使用selenium去爬取,爬虫代码在文章后面

企业对数据挖掘/数据分析岗位用人的“学历”需求

Python数据可视化分析数据挖掘以及数据分析岗位_第1张图片
数据挖掘学历要求

Python数据可视化分析数据挖掘以及数据分析岗位_第2张图片
数据分析学历要求
  • 本科学历的比重最多
  • 学历要求:数据挖掘 > 数据分析,数据挖掘硕士以上比例明显增加

数据挖掘:不同学历薪资情况(单位千元)

Python数据可视化分析数据挖掘以及数据分析岗位_第3张图片
salary-min

Python数据可视化分析数据挖掘以及数据分析岗位_第4张图片
salary-max
  • 数据挖掘最低薪资:本科 < 硕士
  • 数据挖掘最高薪资:本科和硕士差别不大,60K以上,只要有能力,就不看学历了
  • 企业对本科薪资弹性最大,可能是本科生可塑性更有优势

数据分析:不同学历薪资情况(单位千元)

Python数据可视化分析数据挖掘以及数据分析岗位_第5张图片
salary-min

Python数据可视化分析数据挖掘以及数据分析岗位_第6张图片
salary-max
  • 450个数据岗位中就只有1个需要博士(- -)
  • 数据挖掘最低薪资依旧是本科
    总结:
  • 薪资水平:数据挖掘 > 数据分析,无论本科硕士,基本20K以上,
  • 数据挖掘需要的高学历人才比例更多

企业对数据挖掘/数据分析岗位用人的“经验”需求

Python数据可视化分析数据挖掘以及数据分析岗位_第7张图片
数据挖掘用人经验要求

Python数据可视化分析数据挖掘以及数据分析岗位_第8张图片
数据分析用人经验要求
  • 数据挖掘/数据分析的应届毕业生比例极少,都需要有经验的(1-3年,3-5年,5-10年)
  • 数据挖掘最需要3-5年经验,数据分析最需要1-3年经验

数据挖掘:不同工作经验薪资情况

Python数据可视化分析数据挖掘以及数据分析岗位_第9张图片
salary-min

Python数据可视化分析数据挖掘以及数据分析岗位_第10张图片
salary-max

数据分析:不同工作经验薪资情况

Python数据可视化分析数据挖掘以及数据分析岗位_第11张图片
salary-min

Python数据可视化分析数据挖掘以及数据分析岗位_第12张图片
salary-max

总结:

  • 应届毕业生薪资偏低 -> 对行业的本身的知识和经验都是缺乏的
  • 数据挖掘以及数据分析工作3年以上的薪资都很可观
  • 数据挖掘非常需要工作经验高的人才
Python数据可视化分析数据挖掘以及数据分析岗位_第13张图片
数据挖掘技能
  • 学历:本科(硕士)
  • 薪资:20K
  • 工作经验: 3-5年
  • 技能:学历(hhh)、Hadoop、Spark、MapReduce、Scala、Hive、聚类、决策树、GBDT、算法
    综合:数据挖掘这个岗位,在学历要求是最高的,虽然还是本科居多,但硕士比例明显增加,还有公司要求博士学历。在专业知识上也有很大要求,得会Linux操作系统基本操作、大数据框架Hadoop、Spark以及数据仓库Hive的使用等计算机相关知识,总体来说难道还是比较大。薪资待遇上特别优厚,基本在20k以上,薪资在30k-40k的比例也有近40%,对工作经验要求还是比较高,大部分的企业要求工作经验要达到3年以上。


    Python数据可视化分析数据挖掘以及数据分析岗位_第14张图片
    数据分析技能
  • 学历:本科
  • 薪资:10K
  • 工作经验: 1-5年
  • 技能:SAS、SPSS、Hadoop、Hive、数据库、Excel、统计学、算法
    综合:数据分析这个岗位在学历要求上比爬虫要求稍微高一些,硕士比例有所提升,专业知识上有一定要求。薪资待遇上也还算比较优厚,基本在10k以上,同时薪资在30k-40k的比例也有所上升。对工作经验要求还是比较高,大部分的企业要求工作经验要达到3年以上。

数据挖掘和数据分析岗都是相通的,你中有我,我中有你。
不过数据挖掘岗中算法是第一位要求,更高级,更难

爬虫代码

from lxml import etree
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import xlrd,xlwt,re,codecs,time
import pandas as pd

class LagouSpider():
    def __init__(self):
        self.url = 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?px=default&city=%E5%85%A8%E5%9B%BD#filterBox'
        driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
        self.browser = webdriver.Chrome(executable_path=driver)
        self.wait = WebDriverWait(self.browser,10)
        self.data_list = []
        self.max_page = 30

    def run(self):
        self.browser.get(self.url)

        page = 0
        while True:
            if page == self.max_page:
                df = pd.DataFrame(self.data_list)
                df.to_csv('lagou_data_mining.csv', index=False, encoding='utf_8_sig')
                return

            page += 1
            text = self.browser.page_source
            # 提取具体页面的url
            self.parse_page(text)
            # 提取下一页的按钮,注意class的值中有空格不可用。
            next_btn = self.wait.until(EC.presence_of_element_located((By.XPATH,'//div[@class="pager_container"]/span[last()]')))
            # 判断是否是最后一页,如果是,退出while循环
            if 'pager_next pager_next_disabled' in next_btn.get_attribute('class'):
                df = pd.DataFrame(self.data_list)
                df.to_csv('lagou_data_mining.csv', index=False, encoding='utf_8_sig')
                break
            else:
                next_btn.click()
                time.sleep(1)

    # 提取具体页面的url
    def parse_page(self,text):
        html = etree.HTML(text)
        # 判断所需元素是否加载出来
        self.wait.until(EC.presence_of_element_located((By.XPATH,'//a[@class="position_link"]')))
        detial_urls = html.xpath('//a[@class="position_link"]/@href')
        for detial_url in detial_urls:
            # 请求详情页
            self.request_detial_url(detial_url)
            time.sleep(1)
            # 提取之后,把当前的页面关闭

    # 请求详情页
    def request_detial_url(self,detial_url):
        # 解析具体页面的字段信息时候,打开了另一个页面,覆盖原来的页面,我们这里做的是利用while True循环来获取全部页面的字段信息
        # 所以第一个页面的窗口不能关闭
        self.browser.execute_script("window.open('%s')" % detial_url) # 打开另一个窗口
        self.browser.switch_to.window(self.browser.window_handles[1]) # 切换到另一个窗口
        source = self.browser.page_source
        # 解析详情页的具体字段
        self.parse_detial_url(source)
        # 请求完之后关闭当前详情页的页面
        self.browser.close()
        # 切换回第一页
        self.browser.switch_to.window(self.browser.window_handles[0]) # 切换到首页

    # 解析详情页的具体字段
    def parse_detial_url(self,source):
        text = etree.HTML(source)
        # 判断所需元素是否加载出来
        self.wait.until(EC.presence_of_element_located((By.XPATH,'//span[@class="name"]')))
        name = text.xpath('//span[@class="name"]/text()')[0]
        company = text.xpath('//div[@class="company"]/text()')[0]
        salary = text.xpath('//dd[@class="job_request"]/p[1]/span[1]/text()')[0].strip()
        city = text.xpath('//dd[@class="job_request"]/p[1]/span[2]/text()')[0]
        city = re.sub(r'[\s/]', '', city)
        work_years = text.xpath('//dd[@class="job_request"]/p[1]/span[3]/text()')[0]
        work_years = re.sub(r'[\s/]', '', work_years)[2:]
        edu = text.xpath('//dd[@class="job_request"]/p[1]/span[4]/text()')[0]
        edu = re.sub(r'[\s/]', '', edu)[:2]
        job_advantage = text.xpath('//dd[@class="job-advantage"]/p/text()')[0]
        desc = ''.join(text.xpath('//dd[@class="job_bt"]//text()')).strip()

        content = text.xpath('//*[@id="job_detail"]/dd[2]/div/p/text()')
        work_duty = ''
        work_requirement = ''
        state = 0
        for i in range(len(content)):
            content[i] = content[i].replace('\xa0', ' ')

            if content[i][0].isdigit():
                if content[i][0] == '1':
                    state += 1
                if state > 2:
                    break
                if state == 1:
                    work_duty = work_duty + content[i] + '/'
                else:
                    work_requirement = work_requirement + content[i] + '/'

        with open('lagou_data_analy_work_request.txt','a', encoding='utf-8') as f:
            f.write(work_requirement)
            f.write('\n')

        model = {'name':name, 'company':company,'salary':salary,'city':city,'work_years':work_years,'edu':edu,'job_advantage':job_advantage,
                 'work_duty':work_duty,'work_requirement':work_requirement}
        self.data_list.append(model)

def main():
    spider = LagouSpider()
    spider.run()

if __name__ == '__main__':
    main()

你可能感兴趣的:(Python数据可视化分析数据挖掘以及数据分析岗位)