#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2021/1/21 21:06
# @Author : way
# @Site :
# @Describe: 数据处理
import re
import pandas as pd
path = 'job.csv'
data = pd.read_csv(path, header=None)
data.columns = [
'position', 'num', 'company', 'job_type', 'jobage', 'lang', 'age', 'sex', 'education', 'workplace', 'worktime',
'salary', 'welfare', 'hr', 'phone', 'address', 'company_type', 'industry', 'require'
]
############################################### 数据清洗 #############################################################
# 数据重复处理: 删除重复值
# 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 x
elif 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 x
data['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 industry
return 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)))
################################################## 数据保存 #########################################################
# 查看保存的数据
print(data.info)
# 保存清洗后的数据 csv
data.to_csv('job_clean.csv', index=False, header=None, encoding='utf-8-sig')
小夕Coding
- 粉丝: 6351
- 资源: 527
最新资源
- 永磁同步电机(pmsm)模型预测控制(MPC)matla b simulink仿真模型,有PI矢量控制,直接预测控制(有限集模型预测控制)(这个其中包括做了单矢量和双矢量或者可以成为三矢量的有限集预测
- Google Chrome浏览器ChromeDriver驱动下载(Chrome版本:132.0.6834.84)win64
- Google Chrome浏览器ChromeDriver驱动下载(Chrome版本:132.0.6834.84)win32
- 从0到1搭建推荐系统 - 数据驱动的算法与架构设计(带数据集)
- 汇川H3U标准程序,程序有本体脉冲控制的三轴定位,有总线控制的汇川伺服定位,轴点动,回零,相对定位绝对定位,程序结构清晰,分模块控制,是工控者学习的好案例
- 从0到1搭建推荐系统 - 数据驱动的算法与架构设计(带数据集)
- S7-200Smart 恒压供水程序样例+485通讯样例
- 基于simulink三自由度汽车操纵模型(侧向,侧倾,横摆)带数据参数,有详细公式文档 具有特殊性,发出不 哦(高于或等于MATLAB 2016a版本的都可打开模型)
- C++编写,qt框架,windows串口调试助手,多线程运行,性能好,效率高,不丢数据,保证代码质量
- 从0到1搭建推荐系统 - 数据驱动的算法与架构设计(带数据集)
- . NET C# WPF图书管理系统源码 .net C# WPF图书管理系统源码 自己开发,纯源码 主要技术:C#、基于wpf开发、sql server数据库的增删改查 源码特点:代码完整规范,采
- 西门子Smart200和台达ⅤFD一M系列变频器通讯程序 Smart和三菱E700或D7O0变频器通讯程序,程序带注释,包括接线图纸,变频器参数设置,全都有,拿到即可以用,节约开发时间
- ofdm 水声通信 qpsk fpga
- COMSOL手性超材料文献模拟模型 计算左右旋圆偏振下的吸收、反射、透射率(材料参数未与文献一致 趋势吻合)
- 昆仑通态MCGS与3台力士乐VFC-x610变频器通讯程序 实现昆仑通态触摸屏与3台力士乐VFC-x610变频器通讯,程序稳定可靠 器件:昆仑通态TPC7062KD触摸屏,3台力士乐VFC-x610变
- Unity3d 基于UniStorm插件和xx天气API实现实时天气系统源码工程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页