毕设分享 基于大数据人才岗位数据分析 文章目录1 前言1. 数据集说明2. 数据处理2.1 数据清洗2.2 数据导入3. 数据分析可视化3.1 整体情况招聘企业数、岗位数、招聘人数、平均工资3.2 企业主题行业情况公司类型最缺人的公司 TOP平均薪资最高的公司 TOP工作时间工作地点福利词云3.3 岗位主题工作经验要求学历要求性别要求年龄要求语言要求编程语言要求4. 模型预测1 前言这里是毕设分享系列学长分享优质毕业设计项目今天要分享的是基于大数据人才岗位数据分析项目运行效果毕业设计 基于大数据人才岗位数据分析项目分享见主页任意置顶文章1. 数据集说明这是一份来自厦门人才网的企业招聘数据采集日期为 2021-01-14总计 100,077 条记录大小为 122 M包含 19 个字段。2. 数据处理2.1 数据清洗使用 pandas 对数据进行清洗主要包括去重、缺失值填充、格式化、计算冗余字段。# 数据重复处理: 删除重复值# print(data[data.duplicated()])data.drop_duplicates(inplaceTrue)data.reset_index(dropTrue,inplaceTrue)# 缺失值查看、处理data.isnull().sum()# 招聘人数处理缺失值填 1 一般是一人; 若干人当成 3人data[num].unique()data[num].fillna(1,inplaceTrue)data[num].replace(若干,3,inplaceTrue)# 年龄要求缺失值填 无限格式化data[age].unique()data[age].fillna(不限,inplaceTrue)data[age]data[age].apply(lambdax:x.replace(岁至,-).replace(岁,))# 语言要求: 忽视精通程度格式化data[lang].unique()data[lang].fillna(不限,inplaceTrue)data[lang]data[lang].apply(lambdax:x.split(水平)[0])data[lang].replace(其他,不限,inplaceTrue)# 月薪: 格式化。根据一般经验取低值比如 5000-6000, 取 5000data[salary].unique()data[salary]data[salary].apply(lambdax:x.replace(参考月薪 ,)if参考月薪 instr(x)elsex)data[salary]data[salary].apply(lambdax:x.split(-,1)[0]if-instr(x)elsex)data[salary].fillna(0,inplaceTrue)# 其它岗位说明缺失值填无data.fillna(其他,inplaceTrue)# 工作年限格式化defjobage_clean(x):ifxin[应届生,不限]:returnxelifre.findall(\d年,x):returnre.findall((\d)年,x)[0]elif年inx:xre.findall(\S{1,2}年,x)[0]xre.sub(厂|验|年|,,x)digit_map{一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9,十:10,十一:11,十二:12,十三:13,十四:14,十五:15,十六:16,两:2}returndigit_map.get(x,x)return其它工作经验data[jobage].unique()data[jobage]data[jobage].apply(jobage_clean)# 性别格式化data[sex].unique()data[sex].replace(无,不限,inplaceTrue)# 工作类型格式化data[job_type].unique()data[job_type].replace(毕业生见习,实习,inplaceTrue)# 学历格式化data[education].unique()data[education]data[education].apply(lambdax:x[:2])# 公司类型 格式化defcompany_type_clean(x):iflen(x)100or其他inx:return其他elifre.findall(私营|民营,x):return民营/私营elifre.findall(外资|外企代表处,x):return外资elifre.findall(合资,x):return合资returnx data[company_type].unique()data[company_type]data[company_type].apply(company_type_clean)# 行业 格式化。多个行业取第一个并简单归类defindustry_clean(x):iflen(x)100or其他inx:return其他industry_map{IT互联网:互联网|计算机|网络游戏,房地产:房地产,电子技术:电子技术,建筑:建筑|装潢,教育培训:教育|培训,批发零售:批发|零售,金融:金融|银行|保险,住宿餐饮:餐饮|酒店|食品,农林牧渔:农|林|牧|渔,影视文娱:影视|媒体|艺术|广告|公关|办公|娱乐,医疗保健:医疗|美容|制药,物流运输:物流|运输,电信通信:电信|通信,生活服务:人力|中介}forindustry,keywordinindustry_map.items():ifre.findall(keyword,x):returnindustryreturnx.split(、)[0].replace(/,)data[industry].unique()data[industry]data[industry].apply(industry_clean)# 工作时间格式化data[worktime].unique()data[worktime_day]data[worktime].apply(lambdax:x.split(小时)[0]if小时inxelse0)data[worktime_week]data[worktime].apply(lambdax:re.findall(\S*周,x)[0]if周inxelse0)# 从工作要求中正则解析出技能要求data[skill]data[require].apply(lambdax:、.join(re.findall([a-zA-Z],x)))2.2 数据导入将清洗后的数据导入到 hiveCREATETABLEjob(positionstringCOMMENT职位,numstringCOMMENT招聘人数,companystringCOMMENT公司,job_typestringCOMMENT职位类型,jobagestringCOMMENT工作年限,langstringCOMMENT语言,agestringCOMMENT年龄,sexstringCOMMENT性别,educationstringCOMMENT学历,workplacestringCOMMENT工作地点,worktimestringCOMMENT工作时间,salarystringCOMMENT薪资,welfarestringCOMMENT福利待遇,hrstringCOMMENT招聘人,phonestringCOMMENT联系电话,addressstringCOMMENT联系地址,company_typestringCOMMENT公司类型,industrystringCOMMENT行业,requirestringCOMMENT岗位要求,worktime_daystringCOMMENT工作时间(每天),worktime_weekstringCOMMENT工作时间(每周),skillstringCOMMENT技能要求)rowformat delimitedfieldsterminatedby,linesterminatedby\n;-- 加载数据LOADDATAINPATH/tmp/job.csvOVERWRITEINTOTABLEjob;通过 hue 查看一下数据[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvFQy0xU-1660662177250)(https://gitee.com/TurboWay/blogimg/raw/master/img/image-20210121195311442.png)]然后随便点击一条数据可以看到经过前面的清洗现在的字段已经很好看了后续的分析也会变得简单许多。3. 数据分析可视化3.1 整体情况招聘企业数、岗位数、招聘人数、平均工资招聘企业数为 10093在招的岗位数有 10 万个总的招聘人数为 26 万人平均工资为 5576 元。3.2 企业主题行业情况各行业的招聘人数排行 TOP10 如下可以看到 IT 互联网最缺人。由于数据源的行业分类比较草率很多公司的分类其实并不是很准确所以这个结果仅供参考。公司类型从招聘人数上来看民营/私营的企业最缺人事业单位的招聘人数最少。从薪资待遇来看上市公司平均薪资最高 5983 元而台资/港资则最少 4723 元。最缺人的公司 TOP最缺人的公司果然是人力资源公司总的要招聘 2000 多个人从详情来看大多是代招一些流水线岗位。平均薪资最高的公司 TOP平均薪资最高的公司上海美莱投资管理有限公司居然有 5 万多一惊之下查了下这家公司的招聘信息可以看到该公司在招的都是高级岗比如 集团片区总经理副总裁级这个岗位人数达到 20 人岗位月薪 6 万所以直接把平均薪资拉高了而且工作地点也不在厦门。由以上分析可以得知根据招聘信息来推算平均工资其实误差还是比较大的仅供参考。工作时间从每天工作时间占比 TOP 10 来看大部分职位是 8 小时工作制紧接着是 7.5 小时 和 7小时。还有一些每天上班时间要达到 12 小时主要是 保安 和 普工 这类岗位。每周工作天数占比来看大部分还是 5天/周的双休制不过 6 天/周、5.5 天/周、大小周的占比也是相当高。工作地点岗位数量的分布图颜色越深代表数量越大可以看到思明区的工作机会最多其次是湖里、集美、同安、海沧、翔安。福利词云3.3 岗位主题工作经验要求从岗位数量来看一半以上的岗位对工作经验是没有要求的。在有经验要求的岗位里面1-3 年工作经验的市场需求是最大的。从平均工资来看符合一般认知。工作经验越多工资也越高10 年以上的工作经验最高平均工资为 13666 元应届生最低平均工资为 4587 元。学历要求从岗位数来看大部分岗位的学历要求为大专以上换言之在厦门只要大专学历就很好找工作了。从平均工资来看学历越高工资越高这也符合一般认知谁说的读书无用论来着。有趣的是不限学历的平均工资居然排在了高中的前面或许这是 九年义务教育的普及与大学扩招带来的内卷在招聘方眼里只有两大类上过大学和没上过大学从而导致大专以下的学历优势不再明显。性别要求岗位数方面有 6974 个岗位明确要求性别为 女仅有 575 个岗位要求性别为 男。平均工资方面女性岗位的平均工资为 5246 元而男性则为 4454 元。虽然绝大多数岗位都是不限制性别的但是不管是从岗位数量还是平均工资来看在厦门女性比男性似乎有更多的职场优势。年龄要求年龄要求一般有一个上限和下限现在只考虑上限并通过上限来分析一下所谓 35 岁的危机。岗位数量上来看大多数岗位是不限制年龄的有限制年龄的岗位里面35 岁以后的岗位有 7327 个35 岁及以下的岗位有 32967 个岗位数量上确实少了非常多。从平均工资来看35 岁以后的岗位 5095 元35岁及以下的岗位 5489 元薪资上少了 394 元。所以单单考虑岗位的年龄上限那么 35 岁以后的市场需求确实会变少。但是为什么会是这样的情况呢个人认为有可能是 35 岁 以后的职场人士沉淀更多进入了更高级的职位更稳定所以流动性比较低自然市场上空出来的需求也会变少了更不用说还有一部分人变成了创业者。语言要求大部分岗位没有语言要求在有语言要求的岗位里面英语妥妥的是第一位。值得一提的是这边还有个闽南语因为厦门地处闽南本地的方言就是闽南语。编程语言要求比较流行的编程语言里面被岗位要求提到的次数排行如下 。可以看到C 语言被提及的次数远大于其它语言不亏是排行榜常年第一的语言。比较惊讶的是如今大火的 python 被提及的次数却很少排在倒二。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0f2WXrN9-1660662177260)(https://gitee.com/TurboWay/blogimg/raw/master/img/image-20210122172459174.png)]这些语言的平均薪资排行Python 最高为 8732 元。4. 模型预测我们知道影响工资待遇的因素有很多学历、工作经验、年龄、招聘方的紧急程度、技能的稀缺性、行业的发展情况。。。等等。所以为了简化模型就学历和工作经验两个维度进行模型训练尝试做工资预测。importpandasaspdfromsklearn.linear_modelimportLinearRegressiondefpredict(data,education): :param data: 训练数据 :param education: 学历 :return: 模型得分10年工作预测 traindata[data[education]education].to_numpy()xtrain[:,1:2]ytrain[:,2]# model 训练modelLinearRegression()model.fit(x,y)# model 预测X[[i]foriinrange(11)]returnmodel.score(x,y),model.predict(X)education_list[小学,初中,中专,高中,大专,本科,硕士,博士]datapd.read_csv(train.csv)scores,values[],[]foreducationineducation_list:score,ypredict(data,education)scores.append(score)values.append(y)resultpd.DataFrame()result[学历]education_list result[模型得分]scores result[(1年经验)平均工资][value[1]forvalueinvalues]result[(3年经验)平均工资][value[2]forvalueinvalues]result[(5年经验)平均工资][value[4]forvalueinvalues]result[(10年经验)平均工资][value[10]forvalueinvalues]print(result)使用线性回归模型分学历进行预测预测结果如下。项目运行效果毕业设计 基于大数据人才岗位数据分析项目分享见主页任意置顶文章