
处理毕业生就业数据时,需分步骤解决毕业时间缺失值(依据缺失比例选择删除或学院众数插补,考虑分布偏态)和就业单位行业拼写错误(用正则表达式且大小写不敏感),同时平衡数据质量(完整性、准确性)与处理效率,通过数据验证确保处理效果。
数据清洗的核心是解决缺失值和数据不一致问题:
| 方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 删除 | 移除包含缺失值的行/列 | 简单,避免偏差 | 缺失比例低(<5%),变量重要性高 | 可能导致样本偏差 |
| 众数插补 | 用各学院毕业时间的众数填充缺失值 | 保留学院特征,适用于分类变量 | 缺失比例高(>5%),学院间毕业时间分布近似均匀 | 若分布偏态,偏差大 |
| 模型预测插补 | 用机器学习模型预测缺失值 | 精准,适用于复杂关系 | 缺失比例高,变量间关系复杂 | 计算成本高 |
| 方法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 字典匹配 | 用预定义字典替换错误拼写 | 简单,需维护字典 | 常见拼写错误,字典易维护 | 无法处理未知错误 |
| 正则表达式 | 用正则匹配模式替换 | 灵活,匹配多种模式 | 模式复杂,需编写规则 | 规则复杂,可能误匹配 |
假设数据表为graduates,字段有college(学院)、graduation_date(毕业时间)、industry(就业单位行业)。
处理步骤伪代码:
# 1. 处理毕业时间缺失值
missing_rate = graduates['graduation_date'].isnull().sum() / len(graduates)
if missing_rate < 0.05: # 缺失比例低,删除
graduates = graduates.dropna(subset=['graduation_date'])
else:
# 学院众数插补
for col in graduates['college'].unique():
college_data = graduates[graduates['college'] == col]
mode_date = college_data['graduation_date'].mode()[0]
graduates.loc[(graduates['college'] == col) & (graduates['graduation_date'].isnull()), 'graduation_date'] = mode_date
# 2. 处理行业拼写错误(正则匹配,大小写不敏感)
import re
graduates['industry'] = graduates['industry'].apply(lambda x: re.sub(r'i?t业', 'IT行业', str(x), flags=re.IGNORECASE))
# 3. 数据验证(确保毕业时间为有效日期)
valid_dates = graduates['graduation_date'].apply(lambda d: pd.to_datetime(d, errors='coerce').notna())
graduates = graduates[valid_dates]
处理毕业生就业数据时,我会分两步解决:第一步处理毕业时间缺失值,若缺失比例低于5%,直接删除这些记录,避免偏差;若比例高,用各学院毕业时间的众数插补,因为不同学院毕业时间可能不同,众数能保留学院特征。第二步处理行业拼写错误,用正则表达式统一为“IT行业”,同时考虑大小写不敏感,确保所有拼写错误都被修正。处理过程中要考虑数据完整性(比如插补是否影响整体统计)、准确性(拼写是否完全修正)、效率(避免过度处理导致计算成本高),最后通过验证有效日期等步骤确保处理后的数据符合要求。