code111
import pandas as pd
import numpy as np
# 读取数据集
data = pd.read_csv("patient_data.csv")
# 保存新的csv
data.to_csv('cleaned_sensor_data.csv', index=False)
# 数据集行数
data.shape[0]
len(data)
# 缺失值行数 data.isnull().sum()
# 创建新列'RiskLevel',根据住院天数判断风险等级 3分
data['RiskLevel'] = np.where(data['DaysInHospital'], '高风险患者', '低风险患者')
# 定义BMI区间和标签
bmi_bins = [0, 18.5, 24, 28, np.inf]
bmi_labels = ['偏瘦', '正常', '超重', '肥胖']
# 根据BMI值划分指定区间 4分
data['BMIRange'] = pd.cut(data['BMI'], bins=bmi_bins, labels=bmi_labels, right=False) # 使用左闭右开区间
# 计算每个BMI区间中高风险患者的比例 2分
data.groupby('BMIRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())
# 统计每个BMI区间的患者数量, 类似group by每个组的数据
bmi_patient_count = data['BMIRange'].value_counts()
# 对传感器类型进行分组,并计算每个组的数据数量和平均值 3分
sensor_stats = data.groupby('SensorType')['Value'].agg(['count', 'mean'])
# 缺失值行数
print("缺失值行数:", data.isnull().sum())
# 查看重复行数
print("重复数据行数:", data.duplicated().sum())
# 删除重复行,保留第一条
cleaned_data = data.drop_duplicates(keep="first")
# 2. 数据合理性审核
data['is_age_valid'] = data['Age'].between(18, 70) #Age数据的合理性审核 2分
data['is_income_valid'] = data['Income'] > 2000 #Income数据的合理性审核 2分
data['is_loan_amount_valid'] = data['LoanAmount'] < (data['Income'] * 5) #LoanAmount数据的合理性审核 2分
data['is_credit_score_valid'] = data['CreditScore'].between(300, 850) #CreditScore数据的合理性审核 2分
# 合理性检查结果
validity_checks = data[['is_age_valid', 'is_income_valid', 'is_loan_amount_valid', 'is_credit_score_valid']].all(axis=1)
data['is_valid'] = validity_checks
# 输出结果
print("数据合理性检查:")
print(data[['is_age_valid', 'is_income_valid', 'is_loan_amount_valid', 'is_credit_score_valid', 'is_valid']].describe())
# Age数据类型转换为int
data['Age'] = data['Age'].astype(int)
# ReviewScore数据标准化 = (样本值 - 平均值) / 样本标准差
data['ReviewScore'] = (data['ReviewScore'] - data['ReviewScore'].mean()) / data['ReviewScore'].std()
| 功能 | 代码 | |
|---|---|---|
| 读取数据集 | data = pd.read_csv("patient_data.csv") | |
| 写入数据集 | data.to_csv('cleaned_sensor_data.csv', index=False) | |
| 数据集行数 | data.shape[0] 、 len(data) | |
| 缺失值行数 | data.isnull().sum() | |
| 缺失值行数 | data.duplicated().sum() | |
| 删除缺损值 | data = data.dropna() | |
| 按列删除缺损值 | cleaned_data = data.drop(columns=['is_abnormal']) | |
| 类型转换 | data['horsepower'] = pd.to_numeric(data['horsepower'], errors='coerce') | |
| 类型转换 | data['Age'] = data['Age'].astype(int) | |
| 划分训练集和测试集 | X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42) |
不积跬步,无以至千里;不积小流,无以成江海。
浙公网安备 33010602011771号