【毕业设计】大数据招聘数据分析可视化 - python

文章目录

  • 0 前言
  • 1 数据集说明
  • 2 数据处理
    • 2.1 数据清洗
    • 2.2 数据导入
  • 3 数据分析可视化
    • 3.1 整体情况(招聘企业数、岗位数、招聘人数、平均工资)
    • 3.2 企业主题
      • 3.2.1 行业情况
      • 3.2.2 公司类型
      • 3.2.3 最缺人的公司 TOP
      • 3.2.4 平均薪资最高的公司 TOP
      • 3.2.5 工作时间
      • 3.2.6 工作地点
      • 3.2.7 福利词云
    • 3.3 岗位主题
      • 3.3.1 工作经验要求
      • 3.3.2 学历要求
      • 3.3.3 性别要求
      • 3.3.4 年龄要求
      • 3.3.5 语言要求
      • 3.3.6 编程语言要求
  • 4 模型预测
  • 5 最后


0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩 招聘大数据分析可视化

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿 选题指导, 项目分享:

https://gitee.com/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md

1 数据集说明

这是一份来自厦门人才网的企业招聘数据,采集日期为 2021-01-14,总计 100,077 条记录,大小为 122 M,包含 19 个字段。

2 数据处理

2.1 数据清洗

使用 pandas 对数据进行清洗,主要包括:去重、缺失值填充、格式化、计算冗余字段。

# 数据重复处理: 删除重复值
# print(data[data.duplicated()])
data.drop_duplicates(inplace=True)
data.reset_index(drop=True, inplace=True)# 缺失值查看、处理:
data.isnull().sum()# 招聘人数处理:缺失值填 1 ,一般是一人; 若干人当成 3人
data['num'].unique()
data['num'].fillna(1, inplace=True)
data['num'].replace('若干', 3, inplace=True)# 年龄要求:缺失值填 无限;格式化
data['age'].unique()
data['age'].fillna('不限', inplace=True)
data['age'] = data['age'].apply(lambda x: x.replace('岁至', '-').replace('岁', ''))# 语言要求: 忽视精通程度,格式化
data['lang'].unique()
data['lang'].fillna('不限', inplace=True)
data['lang'] = data['lang'].apply(lambda x: x.split('水平')[0] )
data['lang'].replace('其他', '不限', inplace=True)# 月薪: 格式化。根据一般经验取低值,比如 5000-6000, 取 5000
data['salary'].unique()
data['salary'] = data['salary'].apply(lambda x: x.replace('参考月薪: ', '') if '参考月薪: ' in str(x) else x)
data['salary'] = data['salary'].apply(lambda x: x.split('-', 1)[0] if '-' in str(x) else x )
data['salary'].fillna('0', inplace=True)# 其它岗位说明:缺失值填无
data.fillna('其他', inplace=True)# 工作年限格式化
def jobage_clean(x):if x in ['应届生', '不限']:return xelif re.findall('\d+年', x):return re.findall('(\d+)年', x)[0]elif '年' in x:x = re.findall('\S{1,2}年', x)[0]x = re.sub('厂|验|年|,', '', x)digit_map = {'一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '十':10,'十一': 11, '十二': 12, '十三': 13, '十四': 14, '十五': 15, '十六': 16, '两':2}return digit_map.get(x, x)return '其它工作经验'data['jobage'].unique()
data['jobage'] = data['jobage'].apply(jobage_clean)# 性别格式化
data['sex'].unique()
data['sex'].replace('无', '不限', inplace=True)# 工作类型格式化
data['job_type'].unique()
data['job_type'].replace('毕业生见习', '实习', inplace=True)# 学历格式化
data['education'].unique()
data['education'] = data['education'].apply(lambda x: x[:2])# 公司类型 格式化
def company_type_clean(x):if len(x) > 100 or '其他' in x:return '其他'elif re.findall('私营|民营', x):return '民营/私营'elif re.findall('外资|外企代表处', x):return '外资'elif re.findall('合资', x):return '合资'return xdata['company_type'].unique()
data['company_type'] = data['company_type'].apply(company_type_clean)# 行业 格式化。多个行业,取第一个并简单归类
def industry_clean(x):if len(x) > 100  or '其他' in x:return '其他'industry_map = {'IT互联网': '互联网|计算机|网络游戏', '房地产': '房地产', '电子技术': '电子技术', '建筑': '建筑|装潢','教育培训': '教育|培训', '批发零售': '批发|零售', '金融': '金融|银行|保险', '住宿餐饮': '餐饮|酒店|食品','农林牧渔': '农|林|牧|渔', '影视文娱': '影视|媒体|艺术|广告|公关|办公|娱乐', '医疗保健': '医疗|美容|制药','物流运输': '物流|运输', '电信通信': '电信|通信', '生活服务': '人力|中介'}for industry, keyword in industry_map.items():if re.findall(keyword, x):return industryreturn x.split('、')[0].replace('/', '')data['industry'].unique()
data['industry'] = data['industry'].apply(industry_clean)# 工作时间格式化
data['worktime'].unique()
data['worktime_day'] = data['worktime'].apply(lambda x: x.split('小时')[0] if '小时' in x else 0)
data['worktime_week'] = data['worktime'].apply(lambda x: re.findall('\S*周', x)[0] if '周' in x else 0)# 从工作要求中正则解析出:技能要求
data['skill'] = data['require'].apply(lambda x: '、'.join(re.findall('[a-zA-Z]+', x)))

2.2 数据导入

将清洗后的数据导入到 hive

CREATE TABLE `job`(`position` string COMMENT '职位',`num` string COMMENT '招聘人数',`company` string COMMENT '公司',`job_type` string COMMENT '职位类型',`jobage` string COMMENT '工作年限',`lang` string COMMENT '语言',`age` string COMMENT '年龄',`sex` string COMMENT '性别',`education` string COMMENT '学历',`workplace` string COMMENT '工作地点',`worktime` string COMMENT '工作时间',`salary` string COMMENT '薪资',`welfare` string COMMENT '福利待遇',`hr` string COMMENT '招聘人',`phone` string COMMENT '联系电话',`address` string COMMENT '联系地址',`company_type` string COMMENT '公司类型',`industry` string COMMENT '行业',`require` string COMMENT '岗位要求',`worktime_day` string COMMENT '工作时间(每天)',`worktime_week` string COMMENT '工作时间(每周)',`skill` string COMMENT '技能要求'
)
row format delimited
fields terminated by ','
lines terminated by '\n';-- 加载数据
LOAD DATA INPATH '/tmp/job.csv' OVERWRITE INTO TABLE job;

通过 hue 查看一下数据

然后随便点击一条数据,可以看到,经过前面的清洗,现在的字段已经很好看了,后续的分析也会变得简单许多。

image-20210122171323036

3 数据分析可视化

3.1 整体情况(招聘企业数、岗位数、招聘人数、平均工资)

招聘企业数为 10093,在招的岗位数有 10 万个,总的招聘人数为 26 万人,平均工资为 5576 元。

image-20210121202443278

3.2 企业主题

3.2.1 行业情况

各行业的招聘人数排行 TOP10 如下,可以看到 IT 互联网最缺人。

由于数据源的行业分类比较草率,很多公司的分类其实并不是很准确,所以这个结果仅供参考。

image-20210122101934481

3.2.2 公司类型

从招聘人数上来看,民营/私营的企业最缺人,事业单位的招聘人数最少。

image-20210122103541571

从薪资待遇来看,上市公司平均薪资最高 5983 元,而台资/港资则最少 4723 元。

image-20210122104008379

3.2.3 最缺人的公司 TOP

最缺人的公司果然是人力资源公司,总的要招聘 2000 多个人,从详情来看,大多是代招一些流水线岗位。

image-20210122105804275

image-20210122133941542

3.2.4 平均薪资最高的公司 TOP

平均薪资最高的公司 上海美莱投资管理有限公司 居然有 5 万多,一惊之下,查了下这家公司的招聘信息,可以看到该公司在招的都是高级岗,比如 集团片区总经理(副总裁级),这个岗位人数达到 20 人,岗位月薪 6 万,所以直接把平均薪资拉高了,而且工作地点也不在厦门。

由以上分析,可以得知根据招聘信息来推算平均工资,其实误差还是比较大的,仅供参考。

image-20210122111007571

image-20210122111324460

3.2.5 工作时间

从每天工作时间占比 TOP 10 来看,大部分职位是 8 小时工作制,紧接着是 7.5 小时 和 7小时。还有一些每天上班时间要达到 12 小时,主要是 保安 和 普工 这类岗位。

image-20210122142102501

每周工作天数占比来看,大部分还是 5天/周的双休制,不过 6 天/周、5.5 天/周、大小周的占比也是相当高。

image-20210122165511526

3.2.6 工作地点

岗位数量的分布图,颜色越深代表数量越大,可以看到思明区的工作机会最多,其次是湖里、集美、同安、海沧、翔安。

image-20210123205048473

3.2.7 福利词云

image-20210122140146555

3.3 岗位主题

3.3.1 工作经验要求

从岗位数量来看,一半以上的岗位对工作经验是没有要求的。在有经验要求的岗位里面,1-3 年工作经验的市场需求是最大的。

image-20210122145817970

从平均工资来看,符合一般认知。工作经验越多,工资也越高,10 年以上的工作经验最高,平均工资为 13666 元;应届生最低,平均工资为 4587 元。

image-20210122150102148

3.3.2 学历要求

从岗位数来看,大部分岗位的学历要求为大专以上,换言之,在厦门,只要大专学历,就很好找工作了。

image-20210122150543260

从平均工资来看,学历越高,工资越高,这也符合一般认知,谁说的读书无用论来着。

有趣的是,不限学历的平均工资居然排在了高中的前面,或许这是 九年义务教育的普及与大学扩招带来的内卷,在招聘方眼里,只有两大类:上过大学和没上过大学,从而导致大专以下的学历优势不再明显。

image-20210122151013456

3.3.3 性别要求

岗位数方面,有 6974 个岗位,明确要求性别为 女,仅有 575 个岗位要求性别为 男。

平均工资方面,女性岗位的平均工资为 5246 元,而男性则为 4454 元。

虽然绝大多数岗位都是不限制性别的,但是,不管是从岗位数量还是平均工资来看,在厦门,女性比男性似乎有更多的职场优势。

image-20210122152405709

image-20210122152256552

3.3.4 年龄要求

年龄要求一般有一个上限和下限,现在只考虑上限,并通过上限来分析一下,所谓 35 岁的危机。

岗位数量上来看,大多数岗位是不限制年龄的,有限制年龄的岗位里面,35 岁以后的岗位有 7327 个,35 岁及以下的岗位有 32967 个,

岗位数量上确实少了非常多。

image-20210122162411758

从平均工资来看,35 岁以后的岗位 5095 元,35岁及以下的岗位 5489 元,薪资上少了 394 元。

image-20210122162735961

所以,单单考虑岗位的年龄上限,那么 35 岁以后的市场需求确实会变少。

但是,为什么会是这样的情况呢,个人认为,有可能是 35 岁 以后的职场人士,沉淀更多,进入了更高级的职位,更稳定,所以流动性比较低,自然市场上空出来的需求也会变少了,更不用说还有一部分人变成了创业者。

3.3.5 语言要求

大部分岗位没有语言要求,在有语言要求的岗位里面,英语妥妥的是第一位。

值得一提的是,这边还有个闽南语,因为厦门地处闽南,本地的方言就是闽南语。

image-20210122175452253

3.3.6 编程语言要求

比较流行的编程语言里面,被岗位要求提到的次数排行如下 。可以看到,C 语言被提及的次数远大于其它语言,不亏是排行榜常年第一的语言。比较惊讶的是如今大火的 python 被提及的次数却很少,排在倒二。

这些语言的平均薪资排行,Python 最高为 8732 元。

image-20210122174532901

4 模型预测

我们知道影响工资待遇的因素有很多:学历、工作经验、年龄、招聘方的紧急程度、技能的稀缺性、行业的发展情况。。。等等。

所以,为了简化模型,就学历和工作经验两个维度进行模型训练,尝试做工资预测。

import pandas as pd
from sklearn.linear_model import LinearRegressiondef predict(data, education):""":param data: 训练数据:param education: 学历:return: 模型得分,10年工作预测"""train = data[data['education'] == education].to_numpy()x = train[:, 1:2]y = train[:, 2]# model 训练model = LinearRegression()model.fit(x, y)# model 预测X = [[i] for i in range(11)]return model.score(x, y), model.predict(X)education_list = ['小学', '初中', '中专', '高中', '大专', '本科', '硕士', '博士']
data = pd.read_csv('train.csv')scores, values = [], []
for education in education_list:score, y = predict(data, education)scores.append(score)values.append(y)result = pd.DataFrame()
result['学历'] = education_list
result['模型得分'] = scores
result['(1年经验)平均工资'] = [value[1] for value in values]
result['(3年经验)平均工资'] = [value[2] for value in values]
result['(5年经验)平均工资'] = [value[4] for value in values]
result['(10年经验)平均工资'] = [value[10] for value in values]
print(result)

使用线性回归模型分学历进行预测,预测结果如下。

image-20210123134009379

5 最后

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机毕业设计】师生交流平台

一、系统截图(需要演示视频可以私聊) 目 录 摘 要 Abstract 第1章 前 言 2 1.1 研究背景 1.2 研究现状 1.3 系统开发目标 第2章 系统开发环境 2.1 java简介 2.2 Mysql数据库 2.3 B/S结构 2.4 JSP介绍 第3章 需求分析 3.1 需求…

大二毕设.1-学生信息管理系统-练手的

目录 技术选型: 功能概括: 可扩展性良好,添加其余操作无非是多加点信息,重复编码改数据罢 版本: 基本演示 功能实现讲解 登录校验 可调整每页条数的分页显示与增删查改 不会造成偷窃的部分web代码 技术选型: 前端: Vue Element UI后端: Spring…

【毕设系列】电子信息/通信仿真/图像专业课程设计/毕业设计项目汇总

Date:2022.4.14 文章目录 1、通信仿真2、图像处理3、图像识别4、语音处理5、视频编解码 1、通信仿真 2、图像处理 3、图像识别 4、语音处理 5、视频编解码 THE END!

【毕设选题】最新电子信息工程毕业设计项目合集 - 100例

文章目录 1前言2 如何选题2.1 嵌入式开发方向2.2 物联网方向2.3 移动通信方向2.4 人工智能方向2.5 算法研究方向2.6 移动应用开发方向2.7 网络通信方向2.8 学长作品展示 3 最后 1前言 🥇 近期不少学弟学妹询问学长关于电子信息工程专业相关的毕设选题,学…

【毕设选题】最新通信工程毕业设计项目合集 - 100例

文章目录 1前言2 如何选题2.1 移动通信方向2.2 嵌入式开发方向2.3 人工智能方向2.4 物联网方向2.5 算法研究方向2.6 移动应用开发方向2.7 网络通信方向2.8 学长作品展示 4 最后 1前言 🥇 近期不少学弟学妹询问学长关于通信工程相关的毕设选题,学长特意写…

GEE代码解释-毕设版【chatgpt】

ee.ImageCollection和ee.ImageCollection.fromImages有什么区别? 【ee.ImageCollection 和 ee.ImageCollection.fromImages 是两种不同的方法,用于从图像集中获取图像。 ee.ImageCollection 是一个函数,它将一个或多个图像集合成一个图像集。…

万能Prompt句式拆解,人人都是Prompt 工程师

正文共 1318字,阅读大约需要 5 分钟 内容特辑,介绍单一技能的同时今天我们添加一个Prompt造句模板,学会这个,你会成为一个优秀的Prompt Engineer ~ 快去学习、收藏、下载资料包,输出你的独立Prompt吧 ~ 推荐人 | 互联…

ChatGPT专业应用:品牌简介自动生成

正文共 572字,阅读大约需要 3 分钟 品牌营销/新媒体运营人群必备技巧,您将在3分钟后获得以下超能力: 一句话品牌简介速成 Beezy评级 :B级 *经过简单的寻找, 大部分人能立刻掌握。主要节省时间。 推荐人 | 爱管闲事…

全新插件版Beezy喳喳蜂带来独特功能

作为一款备受欢迎的AI应用软件,Beezy喳喳蜂一直致力于为用户打造卓越体验。在不断迭代、改进的过程中,我们收到许多用户的宝贵建议和期待。 现在,全新插件版Beezy喳喳蜂即将上线!此次升级,我们带来了众多前瞻功能助力您…

ChatGPT专业应用:生成产品文档

正文共 547 字,阅读大约需要 3 分钟 产品经理必备技巧,您将在3分钟后获得以下超能力: 生成产品文档 Beezy评级 :A级 *经过寻找和一段时间的学习,一部分人能掌握。主要提升效率并增强自身技能。 推荐人 | Kim 编辑者 …

ChatGPT专业应用:撰写知乎提问-品牌活动版

正文共 763字,阅读大约需要 5 分钟 数字/内容营销市场人群必备技巧,您将在5分钟后获得以下超能力: 知乎多层面提问生成 Beezy评级 :A级 *经过寻找和一段时间的学习,一部分人能掌握。主要提升效率并增强自身技能。 推…

【跟ChatGPT学习python】class的使用

python水平处于科学计算能用的程度,想着希望能让自己的python代码更加清晰可读,因此想到问问chatgpt,结果它给出的例子和解释比直接百度得来的还要通俗易懂,分享给大家一起学习。 目录 1、python如何使用class和def?可…

大乐透号码随机生成与排序

前面两篇介绍了两个非常简单的排序算法,本篇介绍排序算法的一个简单应用——对大乐透随机号码进行排序。 由于工作中涉及很多前端的开发,所以对前端技术有一定了解,前端的一个好处是可以直观地看到页面的布局。每次下班回家的路上总会路过一家…

简单的彩票大乐透选号工具

彩票大乐透由前区和后区组成,前区是5位数,后区是2位数。前区的位数数字是1-35从中任意选择5个数,后区是1-12,从中任选2个数。根据规律,我们可以简单编辑彩票选号工具: import random wint(input(输入你需要…

python爬取分析超级大乐透历史开奖数据!你中奖了吗?

爬取网站:http://datachart.500.com/dlt/history/history.shtml —500彩票网 (分析后发现网站源代码并非是通过页面跳转来查找不同的数据,故可通过F12查找network栏找到真正储存所有历史开奖结果的网页) 如图: 爬虫部…

ChatGPT的发展给我们带来了什么?

1.智能对话: ChatGPT可以进行自然语言对话,理解用户的问题并提供相应的回答。这为用户提供了一种直接、便捷的方式来获取信息、寻求帮助或进行交流。它可以应用于在线客服、虚拟助手、智能聊天机器人等领域,为用户提供个性化的支持和解答。 2…

chatgpt的原理 第三部分

对话 我们是如何学会中文的?从0岁开始,听、说,也就是对话。 我们是如何学外语的?看教材,听广播,背单词。唯独缺少了对话!正是因为缺少了对话这个高效的语言学习方式,所以我们的英语…

原创程序#模拟书本世界#Ai角色互动#ChatGPT学外语#Ai模拟人生#Ai虚拟世界#ChatGPT文字冒险游戏

今天和大家介绍我这个程序,这个平台叫做「模拟书本世界-外语训练营」,介绍它之前,大家可以先体验一下:www.chatlangue.com 目前支持安卓系统。 接下来介绍一下它的实现方法: 它的核心其实是通过调用ChatGPT的API实现&…

对比应用ChatGPT3.5和4,和4比起来,3.5略显清澈且愚蠢

你有没有想过,拥有一位贴心的智能助手,让你在工作、生活、学习等方面都得心应手?这不再是科幻电影的场景,而是已经成为现实的科技奇迹。今天,就让我来为大家揭秘这位让无数用户为之倾倒的“聊天天才”——ChatGPT&…

chatgpt赋能Python-pythonpip报错

Python pip报错解决方案 介绍 Python是一门功能强大、易学易用、支持多种编程范式的开发语言。它有着丰富的标准库和第三方库,可以用于多种开发场景,从数据分析、机器学习、Web开发到网络编程等。而Python pip是Python的一个包管理工具,可以…