BOSS直聘招聘数据分析的第一步:用Python进行深度清洗
在数据分析和数据挖掘过程中,数据清洗是确保分析结果准确性的重要步骤。本文以从 BOSS直聘 爬取的“测试工程师”职位数据为例(数据爬取详见上篇文章),介绍如何使用Python对爬取的数据进行清洗,确保数据质量,以便后续分析和建模。
数据清洗的目标与方法
在数据分析前,清洗数据的主要目标是确保数据的一致性和完整性。常见的清洗任务包括:
- 处理缺失值:填充或删除缺失数据。
- 删除重复数据:去除重复行,确保数据唯一性。
- 标准化字段格式:统一字段值的格式(如薪资范围、年限要求等)。
- 检测并处理异常值:去除不合理的数据点,减少对分析结果的干扰。
- 清洗文本数据:清理职位描述等文本字段,为后续的文本分析做好准备。
数据清洗的代码实现
在数据清洗中,我们按照以下思路进行逐步实现,并为每个步骤提供代码示例和详细说明。
1. 数据读取与缺失值处理
1.1 数据读取
数据存储在 Excel 文件中,我们使用 pandas.read_excel()
读取数据。
import pandas as pd
# 读取Excel数据
df = pd.read_excel('your_data.xlsx') # 替换为实际文件路径
1.2 检查缺失值
通过 isnull().sum()
检查每列的缺失值数量,了解缺失数据的分布情况。
# 检查缺失值分布
print("缺失值情况:")
print(df.isnull().sum())
1.3 填充或删除缺失值
根据字段的重要性和缺失值的性质,选择填充或删除策略。例如:
- 薪资描述、公司名称 等字段:填充为空字符串
""
。 - 年限要求、学历要求 等字段:填充为“未指定”或其他默认值。
- 缺失较多的数据行可以删除。
# 填充缺失值
df['薪资描述'].fillna("", inplace=True)
df['公司名称'].fillna("", inplace=True)
df['年限要求'].fillna("未指定", inplace=True)
df['学历要求'].fillna("未指定", inplace=True)
# 删除超过50%字段缺失的行
df.dropna(thresh=len(df.columns)*0.5, axis=0, inplace=True)
2. 重复数据处理
通过 duplicated()
检查数据是否存在重复行,删除多余数据以保证数据唯一性。
# 检查重复数据
duplicates = df.duplicated().sum()
print(f"重复行数量:{
duplicates}")
# 删除重复行
df.drop_duplicates(inplace=True)
3. 数据格式标准化
在招聘数据中,字段值的格式往往不一致。以下代码标准化了薪资、年限和学历字段。
3.1 薪资描述的标准化
将薪资字段(如 “10k-15k” 或 “年薪15万元”)统一为数字表示,并以区间中位数表示。
import re
def standardize_salary(salary):
"""标准化薪资描述为数值"""
if isinstance(salary, str):
salary = salary.strip()
# 匹配薪资范围(如 "10k-15k")
match = re.match(r'(\d+)(k|万)?-(\d+)(k|万)?', salary)
if match:
min_salary = int(match.group(1))
max_salary = int(match.group(3))
unit = 1000 if match.group(2) in ['k', 'K'] else 10000