java Boss直聘爬虫数据分析

news2024/9/20 9:38:52

摘要

本报告利用Java和Selenium爬虫技术获取数据,并使用ECharts库对薪资数据进行可视化分析,旨在探究不同经验和学历的薪资分布情况。

数据来源

数据来源于Boss直聘,使用Java结合Selenium库进行数据抓取。

  • 数据总数:约2000家企业数据
  • 数据类型:java岗位、全栈、前端
  • 数据地区:深圳、广州

数据清洗

  • 比如15-30K·13薪,清洗为3个字段分别存储

salary清洗.png

UPDATE boss_index
SET
  salaryLowest = (
    SUBSTRING_INDEX(salaryDesc, '-', 1)
  ),
  salaryHighest = (
    SUBSTRING_INDEX(SUBSTRING_INDEX(salaryDesc, '-', -1), 'K', 1)
  ),
  salaryMonth = (
    CASE
      WHEN salaryDesc LIKE '%·%' THEN
        REPLACE(SUBSTRING_INDEX(salaryDesc, '·', -1), '薪', '')
      ELSE
        NULL
    END
  );

数据分析

  • 不同学历、不同经验、不同地区薪资分布,使用中位数和众数进行可以实话展示
  • 中位数
  • 众数

结果展示

tips:数据y轴大于100,结果为xx元/天
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

核心代码

爬虫

ChromeOptions ops = new ChromeOptions();
ops.addArguments("--remote-allow-origins=*");
System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe"); //chromedriver.exe存放的路径
System.setProperty("webdriver.chrome.whitelistedIps", "");
ChromeDriver driver = new ChromeDriver(ops);
driver.get("https://www.zhipin.com/web/geek/job?query=%E5%85%A8%E6%A0%88%E5%B7%A5%E7%A8%8B%E5%B8%88&city=101280100");
driver.manage().window().maximize();

数据分析sql

中位数
<select id="getModeSalaryHighest" resultType="com.example.springboot.dto.MedianSalaryResultDTO">
        SELECT
        tag AS group_tag_inner,
        salaryHighest AS mode_salaryHighest
        FROM
        (SELECT
        tag,
        salaryHighest,
        COUNT(*) AS count
        FROM
        boss_index
        WHERE
        salaryHighest IS NOT NULL
        GROUP BY
        tag,
        salaryHighest
        ) AS salary_highest_counts
        JOIN
        (SELECT
        tag AS tag_max_count,
        MAX(count) AS max_count
        FROM
        (SELECT
        tag,
        salaryHighest,
        COUNT(*) AS count
        FROM
        boss_index
        WHERE
        salaryHighest IS NOT NULL
        <if test="jobName != null">
            and jobName like concat('%', #{jobName}, '%')
        </if>
        <if test="areaDistrict != null">
            and areaDistrict like concat('%', #{areaDistrict}, '%')
        </if>
        <if test="educationLabel != null">
            and education_label like concat('%', #{educationLabel}, '%')
        </if>
        GROUP BY
        tag,
        salaryHighest
        ) AS subquery
        GROUP BY
        tag
        ) AS max_count_highest ON salary_highest_counts.tag = max_count_highest.tag_max_count AND salary_highest_counts.count = max_count_highest.max_count
        GROUP BY
        salary_highest_counts.tag,
        salary_highest_counts.salaryHighest
    </select>
众数
 <select id="getMedianSalarieshigh" resultMap="MedianSalaryResultMap">
        SELECT
            tag AS group_tag_inner,
            salaryHighest AS median_salaryHighest
        FROM
            (
                SELECT
                    tag,
                    salaryHighest,
                    @rowindex := IF(@group_tag = tag, @rowindex + 1, 1) AS rowindex, -- 按tag分组累加行号
            @group_tag := tag AS group_tag -- 更新tag
                FROM
                    boss_index,
                    (SELECT @rowindex := 0, @group_tag := '') var_init -- 初始化变量
                WHERE
                    salaryHighest IS NOT NULL
                ORDER BY
                    tag,
                    salaryHighest
            ) AS ranked_salaries
                JOIN
            (
                SELECT
                    tag AS tag_total_rows,
                    COUNT(*) AS total_rows
                FROM
                    boss_index
                WHERE
                salaryHighest IS NOT NULL
                <if test="jobName != null">
                    and jobName like concat('%', #{jobName}, '%')
                </if>
                <if test="areaDistrict != null">
                    and areaDistrict like concat('%', #{areaDistrict}, '%')
                </if>
                <if test="educationLabel != null">
                    and education_label like concat('%', #{educationLabel}, '%')
                </if>

                GROUP BY
                    tag
            ) AS total_rows ON ranked_salaries.tag = total_rows.tag_total_rows
        WHERE
            rowindex IN (FLOOR((total_rows + 1) / 2), FLOOR((total_rows + 2) / 2)) -- 使用总行数变量来确定中间的行号
        GROUP BY
            group_tag_inner
    </select>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚幻引擎(Unreal Engine)技术使得《黑神话悟空传》大火,现在重视C++的开始吃香了,JAVA,Go,Unity都不能和C++相媲美!

虚幻引擎&#xff08;Unreal Engine&#xff09;火了黑神话游戏。 往后&#xff0c;会有大批量的公司开始模仿这个赛道&#xff01; C 的虚拟引擎技术通常指的是使用 C 语言开发的游戏引擎&#xff0c;如虚幻引擎&#xff08;Unreal Engine&#xff09;等。以下是对 C 虚拟引…

[WUSTCTF2020]spaceclub(我把输入的字符切片研究了)

上sublime txt 每一行的长短对应一个二进制位&#xff0c;长空格是1&#xff0c;短空格是0&#xff0c;全部替换掉得到 上python脚本 import binasciiwith open(attachment_5.txt, r) as file:lines file.readlines() # 逐行读取文本内容output # 初始化输出字符串# 遍历…

【C++题解】1145. 数列求和

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1145. 数列求和 类型&#xff1a;递归基础 题目描述&#xff1a; 有一数列如下&#xff1a; 1 2 4 7 11 16 22 …… 试求该数列前 N 项之和。 输入&#xff1a; 一个整数 N &…

STM32G474定时器触发1次引起ADC转换直至DMA请求传输完所有通道的数据

STM32G474使用定时器1触发1次ADC转换&#xff0c;然后交给DMA循环执行&#xff0c;实现多通道ADC转换和多通道数据传输。若定时器1停止工作&#xff0c;则ADC转换也会随之停止&#xff0c;当然也不会再有DMA数据传输。 1、ADC触发信号分配 2、DMA多路复合器分配&#xff0c;指…

微信表情包格式推荐要求:240*240 +gif

微信表情包格式要求&#xff1a;240*240 gif

2024了,Neo4j能显示节点图片吗?

经过一番调研&#xff0c;答案是官方的是不能的.但有一个中文版可以显示网络图片作为节点背景 如通义千问说说&#xff1a; Neo4j 图数据库本身并不直接支持在节点中存储和显示图片。但是&#xff0c;你可以通过几种方式间接实现这一功能&#xff1a;1. 存储图片URL 最简单的…

K8S持久化存储数据

环境&#xff1a; Ubuntu-1:192.168.114.110作为主 Ubuntu-2:192.168.114.120作为从1&#xff0c;node节点1 Ubuntu-3:192.168.114.130作为从2&#xff0c;node节点2 持久化volumeMounts pod里面&#xff1a;emptyDir和hostPath。存储在node&#xff0c;NFS...&#xff0c;Clo…

微软Win11 24H2最新可选更新补丁26100.1591发布!

系统之家于8月28日发出最新报道&#xff0c;微软面向Win11 24H2用户推出八月最新的可选更新KB5041865&#xff0c;系统更新后版本号升至26100.1591。本次更新进行了多项改进&#xff0c;还优化了小组件面板。接下来&#xff0c;跟随小编一起深入了解这次更新的详细内容吧。 更新…

RSA非对称性加密02: 加密redis的连接密码(下)-私钥加密,公钥解密

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.2 上文传送门 2. 使用方式2.1 使用druid自带的RSA加密工具2.1.1 引入druid依赖2.1.2 原yml配置(对比使用)2.1.2 新yml配置 2.2 springboot的redis配置类2.2.1 例如在RedisConfig中2.2.2 设置序列化与反序列化代码示例如下: 2.3 …

Golang小项目(1)

Golang小项目(1) 前言 本项目适合Golang初学者,通过简单的项目实践来加深对Golang的基本语法和Web开发的理解。 建议前往 torna.top 查阅效果更佳 项目结构 . ├── main.go └── static├── form.html└── index.html项目流程图 定义三个路由: /:首页,显示static…

SWOT分析:解锁个人优势,规划未来成功路径

在传统的SWOT分析中&#xff0c;人们常常采用手工绘制的方式来创建图表&#xff0c;这种方式不仅过程繁琐&#xff0c;而且耗费大量时间和精力。为了简化这一流程&#xff0c;本文推荐使用可免费使用的实时在线编辑工具——即时白板&#xff0c;它是一款高效便捷的SWOT分析工具…

照片清晰度修复,这里总结了三种方法

照片清晰度修复&#xff0c;在数字化时代&#xff0c;照片不仅记录着生活的点滴&#xff0c;更承载着我们的情感和回忆。如今&#xff0c;有许多珍贵的老照片逐渐失去了原有的清晰度&#xff0c;变得模糊不堪。但随着科技的发展&#xff0c;我们有了多种方法来修复这些模糊的照…

专利检索的重要性

专利检索的重要性

从零开学C++:string类

引言&#xff1a;现在我们将正式踏入C起飞阶段&#xff0c;C语言自带的各种类能极大地简化我们所编写的代码的量&#xff0c;而我们今天要学的string就是其中之一。 更多有关C的知识点详解可前往个人主页&#xff1a;计信猫​​​​​ 一&#xff0c;认识string string其实很简…

zoom 会议 javascript 转录例子

一、启动server-to-server zoom api服务&#xff0c;用于创建会议&#xff0c;参考&#xff1a;如何使用Zoom API创建一个会议&#xff1f;-CSDN博客 二、启动meetingsdk-auth-endpoint服务&#xff0c;用于加入会议&#xff0c;参考&#xff1a;zoom 会议机器人web例子-CSDN博…

前端问答:如何在HTML中插入度数符号?

在前端开发中&#xff0c;你可能经常需要在网页中显示温度、角度或地理坐标&#xff0c;这时就需要用到度数符号&#xff08;&#xff09;。那么&#xff0c;如何在HTML中正确地插入这个符号呢&#xff1f;今天&#xff0c;我来手把手教你三种简单又实用的方法&#xff0c;让你…

怎么压缩图片大小?7款实用图片压缩免费软件大公开,赶紧收藏试试!

电脑怎么压缩图片大小&#xff1f;您是否也正在寻找一种方法&#xff0c;可以在不损失质量的情况下压缩图片&#xff1f;在我们的日常生活中&#xff0c;图片记录着无数美好瞬间&#xff0c;已经成为我们日常生活中不可或缺的一部分&#xff0c;无论是个人使用还是专业需求。随…

解决TESSY导入测试用例后出现提示接口有改变的问题

Tessy支持测试用例的导入&#xff0c;不懂测试用例怎么导入&#xff0c;可以看这一篇文章&#xff1a; TESSY导入导出测试用例-CSDN博客 当成功的导入测试用例到工程后&#xff0c;在TIE中查看了用例的源码和头文件路径都没有问题后&#xff0c;就可以执行分析&#xff1a; 但是…

分享一个基于Python的广东热门旅游数据可视化分析系统flask毕设(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

ESP Friends 技术沙龙报名开启|带您掌握高效 GUI 开发

乐鑫 ESP32 系列 SoC 凭借其功能多样、高性价比、封装友好、资源丰富等优势&#xff0c;已成为全球开发者在需要屏幕显示的泛 IoT 应用里作为项目开发的首选平台。 乐鑫信息科技 (688018.SH) 即将举办 ESP Friends 线下技术沙龙。我们将带您深入探索 ESP32-C2 在小尺寸 LCD (0…