【数据挖掘】薪酬分段对应工作经验/学历画柱状图【招聘网站的职位招聘数据预处理】

news2024/9/23 19:20:51

文章目录

  • 一.需求背景
    • 1.1 需求分析
  • 二.数据处理(对给定职位,汇总薪酬分段对应工作经验要求数据,画柱状图;)
    • 2.1 事前准备
    • 2,1 处理开始
  • 三.数据处理(对给定职位,汇总薪酬分段对应学历要求数据,画柱状图;)
  • 四.附源码

一.需求背景

过程中需要的数据下载地址:

https://download.csdn.net/download/weixin_52908342/87263841

招聘网站的职位招聘数据预处理。

在此之前:

我已经写了一段爬虫,爬取的某勾和某无忧的有效职位数据4000条(数据清洗之后)

image-20221210130714097

本次任务需求:

  1. 对给定职位,汇总薪酬分段对应工作经验要求数据,画柱状图;

  2. 对给定职位,汇总薪酬分段对应学历要求数据,画柱状图;

1.1 需求分析

下面的这俩个需求类似,我们可以看做是一个任务:首先,我们给定职位(已Java岗位为例),先使用分箱法,查看一下薪酬分段。然后使用排除重复查看一下工作经验(学历要求)有几种。然后得到3个特征值,画一个多柱状图。

  1. 对给定职位,汇总薪酬分段对应工作经验要求数据,画柱状图;

  2. 对给定职位,汇总薪酬分段对应学历要求数据,画柱状图;

二.数据处理(对给定职位,汇总薪酬分段对应工作经验要求数据,画柱状图;)

2.1 事前准备

1.先把相关的包导入。

import re
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl

2.指定默认字体:解决plot不能显示中文问题。解决保存图像是负号’-'显示为方块的问题

mpl.rcParams['font.sans-serif'] = ['STZhongsong']
mpl.rcParams['axes.unicode_minus'] = False

3.读取有效数据:

data = pd.read_csv("A-06-最终有效数据.csv",encoding="gbk")

2,1 处理开始

1.使用java关键字将java的数据提取出来:然后经过"\d+.?\d*"把薪资的最高值和最低值提取出来。然后使用(最高值+最低值)/2的方式。

算出每一个数据的薪资代表值。将这几个数据分别存入xingzhi={},zhiwei = [],xueli = [],last_xin=[]

xingzhi={}
zhiwei = []
nianxian = []
last_xin=[]

for i in range(len(data)):
    if "java" in data.iloc[i]['职位名']:
        a = re.findall("\d+\.?\d*", data.iloc[i]['薪资'])
        # print(data.iloc[i]['职位名'])
        zhiwei.append(data.iloc[i]['职位名'])
        nianxian.append(data.iloc[i]['工作年限'])
        last_xin.append((int(a[0])+int(a[1]))/2)

2.分箱 检查离群点及光滑数据;

bins2=[10,20,30,40,50,60]
score_cat = pd.cut(last_xin, bins2)
print("java薪资分箱结果:\n",pd.value_counts(score_cat).values)

结果如下:

image-20221210132609995

3.去重查看学历有几种:

print(list(set(nianxian)))

image-20221210132726599

4.根据上面的分箱结果,将数据分为以下几个阶段:

第1段 10-15 第二段15-20 第三段 20-25 第四段25-30

a={'经验5-10年':0, '经验1年以下':0, '经验在校/应届':0, '经验1-3年':0, '经验3-5年':0, '经验10年以上':0, '经验不限':0}
b={'经验5-10年':0, '经验1年以下':0, '经验在校/应届':0, '经验1-3年':0, '经验3-5年':0, '经验10年以上':0, '经验不限':0}
c={'经验5-10年':0, '经验1年以下':0, '经验在校/应届':0, '经验1-3年':0, '经验3-5年':0, '经验10年以上':0, '经验不限':0}
d={'经验5-10年':0, '经验1年以下':0, '经验在校/应届':0, '经验1-3年':0, '经验3-5年':0, '经验10年以上':0, '经验不限':0}

6.循环遍历,把该目标值的数据遍历之后,存入对于的字典里:

for i in last_xin:
    if int(i)>=10 and int(i)<15:
        a[nianxian[int(i)]]=a[nianxian[int(i)]]+1
    if int(i)>=15 and int(i)<20:
        b[nianxian[int(i)]]= b[nianxian[int(i)]]+1
    if int(i) >= 20 and int(i) < 25:
        c[nianxian[int(i)]] = c[nianxian[int(i)]] + 1
    if int(i) >= 25:
        d[nianxian[int(i)]] = d[nianxian[int(i)]] + 1

7.输出,看一眼结果:

print(a)
print(b)
print(c)
print(d)

image-20221210133056908

8.将刚刚上面的结果,转换为列表,方便后面的画图:

xin1=[]
xin2=[]
xin3=[]
xin4=[]
for i in a.values():
    xin1.append(i)
for i in b.values():
    xin2.append(i)
for i in c.values():
    xin3.append(i)
for i in d.values():
    xin4.append(i)

9.开始画图

设置,X坐标的值,这里的’经验3-5年’, ‘经验在校/应届’, ‘经验10年以上’, ‘经验1年以下’, ‘经验不限’, ‘经验5-10年’, ‘经验1-3年’,是前面进行数据去重之后的结果。

bar_width是宽度设置,防止,图重合。

x_data = ['经验3-5年', '经验在校/应届', '经验10年以上', '经验1年以下', '经验不限', '经验5-10年', '经验1-3年']
bar_width=0.2

10.分别画四个柱状图,在一个图例,使用+0.2、+0.4等等来控制它的位置,避免重合。就是bar_width、1+bar_width、2+bar_width…这样就和第一个柱状图并列了。将X轴数据改为使用np.arange(len(x_data))+bar_width,

plt.bar(x_data, height=xin1, label='10-15K',
color='steelblue', alpha=0.8, width=bar_width)

plt.bar(x=np.arange(len(x_data))+0.2, height=xin2, label='15-20k',
color='indianred', alpha=0.8, width=bar_width)

plt.bar(x=np.arange(len(x_data))+0.4, height=xin3, label='20-25K',
color='red', alpha=0.8, width=bar_width)

plt.bar(x=np.arange(len(x_data))+0.6, height=xin4, label='25k以上',
color='indianred', alpha=0.8, width=bar_width)

11.在柱状图上显示具体数值, ha参数控制水平对齐方式, va控制垂直对齐方式

for x, y in enumerate(xin1):
    plt.text(x, y+30 , '%s' % y, ha='center', va='top')
for x, y in enumerate(xin2):
    plt.text(x+0.2, y+30, '%s' % y, ha='center', va='top')
for x, y in enumerate(xin3):
    plt.text(x+0.4, y+30, '%s' % y, ha='center', va='top')
for x, y in enumerate(xin4):
    plt.text(x + 0.6, y+30, '%s' % y, ha='center', va='top')

12.设置标题

plt.title("薪酬分段对应工作经验要求数据")

13.为两条坐标轴设置名称

plt.xlabel("工作经验")
plt.ylabel("数量")

14.显示图例

plt.legend()
plt.show()

15.显示效果:

image-20221210133642431

三.数据处理(对给定职位,汇总薪酬分段对应学历要求数据,画柱状图;)

对于这个需求:对给定职位,汇总薪酬分段对应学历要求数据,画柱状图;和上面的基本是大差不差。

只需要修改下面的学历:

xueli.append(data.iloc[i]['学历'])

将X轴的数据改为:‘不限’, ‘硕士’, ‘本科’, ‘大专’

x_data = [‘大专’, ‘不限’, ‘本科’, ‘硕士’]

然后进行绘图,即可得到下面的图像:

image-20221210133925432

四.附源码

import re
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['STZhongsong']    # 指定默认字体:解决plot不能显示中文问题
mpl.rcParams['axes.unicode_minus'] = False           # 解决保存图像是负号'-'显示为方块的问题
#读取
data = pd.read_csv("A-06-最终有效数据.csv",encoding="gbk")

# Java开始
xingzhi={}
zhiwei = []
nianxian = []
last_xin=[]

for i in range(len(data)):
    if "java" in data.iloc[i]['职位名']:
        a = re.findall("\d+\.?\d*", data.iloc[i]['薪资'])
        # print(data.iloc[i]['职位名'])
        zhiwei.append(data.iloc[i]['职位名'])
        nianxian.append(data.iloc[i]['工作年限'])
        last_xin.append((int(a[0])+int(a[1]))/2)
        # xin1.append()
        # xin2.append(int(a[1]))


# 分箱 检查离群点及光滑数据;
# bins=[10,15,20,25,30,35,40,45,50]
bins2=[10,20,30,40,50,60]
score_cat = pd.cut(last_xin, bins2)
print("java薪资分箱结果:\n",pd.value_counts(score_cat).values)
#去重结果
print(list(set(nianxian)))
#第1段 10-15  第二段15-20 第三段 20-25 第四段25-30
a={'经验5-10年':0, '经验1年以下':0, '经验在校/应届':0, '经验1-3年':0, '经验3-5年':0, '经验10年以上':0, '经验不限':0}
b={'经验5-10年':0, '经验1年以下':0, '经验在校/应届':0, '经验1-3年':0, '经验3-5年':0, '经验10年以上':0, '经验不限':0}
c={'经验5-10年':0, '经验1年以下':0, '经验在校/应届':0, '经验1-3年':0, '经验3-5年':0, '经验10年以上':0, '经验不限':0}
d={'经验5-10年':0, '经验1年以下':0, '经验在校/应届':0, '经验1-3年':0, '经验3-5年':0, '经验10年以上':0, '经验不限':0}
for i in last_xin:
    if int(i)>=10 and int(i)<15:
        a[nianxian[int(i)]]=a[nianxian[int(i)]]+1
    if int(i)>=15 and int(i)<20:
        b[nianxian[int(i)]]= b[nianxian[int(i)]]+1
    if int(i) >= 20 and int(i) < 25:
        c[nianxian[int(i)]] = c[nianxian[int(i)]] + 1
    if int(i) >= 25:
        d[nianxian[int(i)]] = d[nianxian[int(i)]] + 1
print(a)
print(b)
print(c)
print(d)
xin1=[]
xin2=[]
xin3=[]
xin4=[]
for i in a.values():
    xin1.append(i)
for i in b.values():
    xin2.append(i)
for i in c.values():
    xin3.append(i)
for i in d.values():
    xin4.append(i)

print(xin1)
##开始画图
x_data = ['经验3-5年', '经验在校/应届', '经验10年以上', '经验1年以下', '经验不限', '经验5-10年', '经验1-3年']
bar_width=0.2
plt.bar(x_data, height=xin1, label='10-15K',
color='steelblue', alpha=0.8, width=bar_width)

plt.bar(x=np.arange(len(x_data))+0.2, height=xin2, label='15-20k',
color='indianred', alpha=0.8, width=bar_width)

plt.bar(x=np.arange(len(x_data))+0.4, height=xin3, label='20-25K',
color='red', alpha=0.8, width=bar_width)

plt.bar(x=np.arange(len(x_data))+0.6, height=xin4, label='25k以上',
color='indianred', alpha=0.8, width=bar_width)


for x, y in enumerate(xin1):
    plt.text(x, y+30 , '%s' % y, ha='center', va='top')
for x, y in enumerate(xin2):
    plt.text(x+0.2, y+30, '%s' % y, ha='center', va='top')
for x, y in enumerate(xin3):
    plt.text(x+0.4, y+30, '%s' % y, ha='center', va='top')
for x, y in enumerate(xin4):
    plt.text(x + 0.6, y+30, '%s' % y, ha='center', va='top')

plt.xticks(np.arange(len(x_data))+bar_width/2, x_data)

# 设置标题
plt.title("薪酬分段对应工作经验要求数据")
# 为两条坐标轴设置名称
plt.xlabel("工作经验")
plt.ylabel("数量")
# 显示图例
plt.legend()
plt.show()
plt.show()

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

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

相关文章

吉林大学 超星慕课 高级语言程序设计 实验08 结构化程序设计(2022级)

本人能力有限&#xff0c;发出只为帮助有需要的人。 建议同学们自己写完后再进行讨论。 其中的代码均没能在oj上进行测试&#xff0c;因此可能有误&#xff0c;请谅解。 除此以外部分题目设计深度优先搜索&#xff0c;因此可以分别用递归和堆栈实现&#xff0c;堆栈方法为了…

JavaScript进阶教程——异步编程、封装Ajax

异步编程 什么是同步与异步&#xff1a; 同步&#xff1a;一件事没做完&#xff0c;只能等待&#xff0c;完成之后再去做另一件事 异步&#xff1a; 两件事可以同时进行 前端开发中最常见的两种异步情况&#xff1a; ajax: 向后台请求数据计时器&#xff1a; setInterval se…

Python学习基础笔记四十一——sys模块

sys模块是与Python解释器交互的一个接口。 sys.argv 命令行参数List&#xff0c;第一个元素是程序本身路径 sys.exit(n) 退出程序&#xff0c;正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返…

ARM Cortex M3处理器概述

Cortex-M3概述 2004年ARM发布作为新型Corex处理器内核系列首款的Cortex-M3处理器。 STM32系列基于专为高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核。 STM32命名规则 STMF103xx系统结构 1.使用高性能的ARM Cortex-M3 32位RISC内核 2.工作频率为72MHZ 3.内…

shell脚本监控文件夹文件实现自动上传数据到hive表

sh createtb.sh “tablename;field1,field2,field3,field4,field5,field6,field7;partition1,partition2” 数据库名&#xff1a;observation &#xff08;脚本里写死了&#xff09; 表名&#xff1a;tablename 指定名&#xff1a;field1,field2,field3,field4,field5,field6,f…

分别使用Alpine、Docker制作jdk镜像

目录 制作 jdk 1.0 镜像 ——Docker 1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件 2.编写 Dockerfile 文件 3.执行Dockerfile文件&#xff0c;初次依赖镜像的时候会下载相应镜像 优化制作jdk镜像&#xff08;缩小内存大小&#xff09;——使用alpine …

【致敬世界杯】球迷(我)和足球的故事

目录 一、第一次接触足球 二、回味无穷的2018世界杯 三、致敬世界杯 3.1 源代码 3.2 思路 3.3 关于图片 一、第一次接触足球 踢足球是一项优秀的运动&#xff0c;它可以锻炼身体&#xff0c;增强团队合作精神&#xff0c;并为人们带来快乐和满足感。回忆起小学时候第一次…

OpenCV和RTSP的综合研究

一、RTSP是什么&#xff1f;用来干什么&#xff1f; RTSP&#xff08;Real Time Streaming Protocol&#xff09;&#xff0c;RFC2326&#xff0c;实时流传输协议&#xff0c;是TCP/IP协议体系中的一个应用层协议&#xff0c;由哥伦比亚大学、网景和RealNetworks公司提交的IET…

四旋翼无人机学习第14节--PCB Editor简单绘制封装-1

文章目录1 前言1.1 网络获取1.2 封装软件生成1.3 立创商城封装转化1 前言 在之前的博客中&#xff0c;我们绘制了封装所需的焊盘&#xff0c;有了焊盘我们就可以绘制封装啦。当然封装的获取有很多途径&#xff0c;下面我来总结一下。 1.1 网络获取 (有需要的可以下载哦&…

华为eNSP模拟器配置MSTP多实例生成树

传统的stp、rstp有其必然的缺陷 1.统一局域网内所有的vlan共享一个生成树&#xff0c;无法在vlan间实现数据流量的负载均衡。 2.链路利用率低&#xff0c;被阻塞的冗余链路不承载任何流量&#xff0c;造成了带宽的浪费&#xff0c;还可能造成部分vlan报文无法转发。MSTP在它们…

计算机毕业设计springboot+vue基本微信小程序的学习资料共享小程序

项目介绍 前台为用户使用的,包括下面一些功能&#xff1a; ① 资料发布&#xff1a;用户可以将想要共享的资料发布到小程序,供他人购买。 ②搜索 &#xff1a;分为按名称搜索和分类搜索,用户可选择其中一种方式,检索自己所需要的资料。 ③ 查看资料详情&#xff1a;用户可以…

学委必备小工具——筛选未提交人数【python小工具】

问题描述 作为一个学委&#xff0c;通常的任务就是收取班级作业&#xff0c;然后向老师报告当前未交人员的名单 JS版本&#xff1a;实现以一个表格数据查询另一个表格【JS】 之前我已经尝试通过用JS实现了&#xff0c;本质上差别其实也不是很大&#xff0c;只是对于JS来说&…

Java基础之《netty(11)—netty模型》

一、简单说明 1、工作原理示意图 netty主要基于主从Reactors多线程模型做了一定的改进&#xff0c;其中主从Reactor多线程模型有多个Reactor。 2、说明 &#xff08;1&#xff09;BossGroup线程维护selector&#xff0c;只关注Accept事件。 &#xff08;2&#xff09;当接收到…

[附源码]Node.js计算机毕业设计出版社样书申请管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

第十一章 特征选择与稀疏学习

11.1 子集搜索与评价 我们将属性称为特征&#xff0c;对当前学习任务有用的属性称为相关特征、没什么用的属性称为无关特征。还有一类特征称为冗余特征&#xff0c;它们所包含的信息能从其他特征中推演出来&#xff0c;冗余特征在很多时候不起作用&#xff0c;去除它们会减轻学…

redis之如何应对并发访问问题

写在前面 本文一起看下Redis的并发访问控制。 1&#xff1a;单线程的Redis为什么会有并发问题 我们知道&#xff0c;Redis是单线程的&#xff0c;为什么还是会有并发问题呢&#xff1f;没错&#xff0c;如果是单命令操作的话肯定没有并发问题&#xff0c;但考虑事务的场景&a…

nodejs+vue人事管理系统30n9o

开发语言&#xff1a;nodejs 框架&#xff1a;Express 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;VS code 浏览器&#xff1a;谷歌浏览器 目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 …

使用VS2019开发调试Android动态库

1. 环境准备 1.1 安装JDK&#xff1a;jdk1.8.0_112 1.2 安装Android SDK SDK可以安装指定的platforms和ndk-bundle。为了兼容性考虑&#xff0c;单独安装了版本比较老的android-ndk-r10b 1.3 安装VS2019 安装VS2019并选择&#xff1a;使用C的移动开发。 1.4 连接开发手机…

基于Java+Mysql实现(web)大型企业管理系统【100010019】

第一章 系统概述 包括用户管理、权限管理、软件项目管理、软件模块管理、测试用例管理、测试任务分配、bug管理等功能。实现公司不同部门间团队协作&#xff0c;管理人员也能够更加有效的把控系统开发的进度。 本实验综合应用JavaWeb编程中的Servlet&#xff0c;JSP&#xff…

spring——Spring自动装配(基于注解)——前提了解——Spring的@Autowired注解为什么用在接口上 (转载)...

大家都知道Service注入的是实现类serviceImpl&#xff0c;那使用时怎么能获取到接口&#xff0c;而且还能调用到实现类的方法。 接口&#xff1a; public interface TestService{ public String test(); }实现类&#xff1a; Service public class TestServiceImpl imp…