Skip to content

1. 导入库

python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
  • pandas用于数据处理和分析,简写为pd
  • numpy用于数值计算,简写为np
  • matplotlib.pyplot用于数据可视化,简写为plt(虽然代码中未实际使用绘图功能)

2. 读取数据

python
data = pd.read_csv('credit_data.csv')
  • 使用pandas的read_csv函数读取名为credit_data.csv的信用数据文件
  • 将数据存储在名为data的DataFrame中

3. 数据完整性审核

python
missing_values = data.isnull().sum()
  • data.isnull()检测DataFrame中的缺失值(NaN),返回布尔值DataFrame
  • .sum()计算每列的缺失值数量
  • 结果存储在missing_values变量中
python
duplicate_values = data.duplicated().sum()
  • data.duplicated()检测重复行,返回布尔值Series
  • .sum()计算重复行的总数
  • 结果存储在duplicate_values变量中
python
print("缺失值统计:")
print(missing_values)
print("重复值统计:")
print(duplicate_values)
  • 打印缺失值统计结果
  • 打印重复值统计结果

4. 数据合理性审核

python
data['is_age_valid'] = data['Age'].between(18, 70)
  • 创建新列is_age_valid标记年龄是否合理
  • between(18, 70)检查年龄是否在18-70岁之间(合理范围)
  • 合理返回True,否则返回False
python
data['is_income_valid'] = data['Income'] > 2000
  • 创建新列is_income_valid标记收入是否合理
  • 检查收入是否大于2000(最低合理收入)
python
data['is_loan_amount_valid'] = data['LoanAmount'] < data['Income'] * 5
  • 创建新列is_loan_amount_valid标记贷款金额是否合理
  • 检查贷款金额是否小于收入的5倍(合理负债比例)
python
data['is_credit_score_valid'] = data['CreditScore'].between(300, 850)
  • 创建新列is_credit_score_valid标记信用评分是否合理
  • 检查信用评分是否在300-850之间(FICO信用评分标准范围)

5. 合理性检查结果

python
validity_checks = data[['is_age_valid', 'is_income_valid', 'is_loan_amount_valid', 'is_credit_score_valid']].all(axis=1)
  • 从DataFrame中选取四个合理性检查列
  • .all(axis=1)检查每行是否所有条件都为True(即所有字段都合理)
  • 结果存储在validity_checks变量中(布尔值Series)
python
data['is_valid'] = validity_checks
  • 创建新列is_valid标记整行数据是否完全合理
python
print("数据合理性检查:")
print(data[['is_age_valid', 'is_income_valid', 'is_loan_amount_valid', 'is_credit_score_valid', 'is_valid']].describe())
  • 打印合理性检查结果的统计摘要
  • describe()提供计数、唯一值、频率等统计信息

6. 数据清洗和异常值处理

python
invalid_rows = data[~data['is_valid']]
  • 筛选出不合理的数据行(is_valid为False的行)
  • ~表示逻辑取反
  • 结果存储在invalid_rows变量中
python
cleaned_data = data[data['is_valid']]
  • 筛选出合理的数据行(is_valid为True的行)
  • 结果存储在cleaned_data变量中
python
cleaned_data = cleaned_data.drop(columns=['is_age_valid', 'is_income_valid', 'is_loan_amount_valid', 'is_credit_score_valid', 'is_valid'])
  • 从清洗后的数据中删除所有用于标记的临时列
  • drop(columns=[...])删除指定列
python
cleaned_data.to_csv('cleaned_credit_data.csv', index=False)
  • 将清洗后的数据保存到新的CSV文件cleaned_credit_data.csv
  • index=False表示不保存行索引
python
print("数据清洗完成,已保存为'cleaned_credit_data.csv'")
  • 打印完成信息