2.1.4 · 建议 20 分钟 · 满分 19
医疗研究数据清洗和标注设计
背景
随着医学技术的进步和医疗资源的丰富,医疗研究在改善患者治疗效果、提升医疗服务质量方面起到了重要作用。研究人员通过分析大量患者的治疗数据,能够评估不同治疗方案的效果,发现潜在的健康问题,并提出针对性的治疗建议。这不仅可以帮助患者获得更好的治疗效果,还能为医疗机构优化资源配置、提升服务水平提供重要依据。 现提供一份医疗研究数据集,训练集样本数据一共 5441 条记录。请补全 2.1.4.ipynb 代码,完成数据预处理任务。 注意:medical_data.csv 文件为 GBK 编码。
工作任务
- 加载数据集,查看表的数据类型,表结构和显示每一列的空缺值数量。
- 将“就诊日期”和“诊断日期”规范为“yyyy-mm-dd”格式,并将“病人ID”列名改为“患者ID”,显示修改后的表结构。
- 增加“诊断延迟”(诊断日期-就诊日期)和“病程”(当前日期-诊断日期)两列,删除不合理的数据(如负数,年龄为几百岁等)。
- 检查数据集中的重复值并删除所有重复值,并记录删除的行数。
- 对数据段[年龄,体重,身高]进行归一化处理。
- 统计不同疾病类型的治疗结果分布,并画出柱状图。
- 分析年龄和疾病严重程度的关系,绘制出散点图。
- 保存处理后的数据,并命名为:2.1.4_cleaned_data.csv。
素材预览
medical_data.csv
病人ID,年龄,性别,地区,就诊日期,疾病类型,诊断日期,疾病严重程度,治疗方案,治疗结果,药物名称,药物分类,用药剂量,用药时长,检查项目,检查结果,参考范围,体重,身高,吸烟情况,饮酒情况,遗传病史 20413,45,女,重庆,2023-4-4,感冒,2023-4-25,不严重,放疗,病情稳定,维生素C,非处方药,每周一次,2个月,尿常规,105,正常,67,184,是,偶尔,是 ...
代码填空
import pandas as pd
# 加载数据集并指定编码为gbk
data =
# 查看数据类型
print(data.dtypes)
# 查看表结构基本信息
print()
# 显示每一列的空缺值数量
print(data.isnull().sum())
# 规范日期格式
data['就诊日期'] = pd.to_datetime(data['就诊日期'])
data['诊断日期'] = pd.to_datetime(data['诊断日期'])
# 修改列名
(, inplace=True)
# 查看修改后的表结构
print(data.head())
from datetime import datetime
# 增加诊断延迟和病程列
data['诊断延迟'] = .dt.days
data['病程'] = (datetime(2024, 9, 1) - data['诊断日期']).dt.days
# 删除不合理的数据
data = [( >= 0) & ( > 0) & ( < 120)]
# 查看修改后的数据
print(data.describe())
# 删除重复值并记录删除的行数
initial_rows = data.shape[0]
(inplace=True)
deleted_rows = initial_rows - data.shape[0]
print(f'删除的重复行数: {deleted_rows}')
from sklearn.preprocessing import MinMaxScaler
# 对需要归一化的列进行处理
scaler = MinMaxScaler()
columns_to_normalize = []
data[columns_to_normalize] =
# 查看归一化后的数据
print(data.head())
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 统计治疗结果分布
treatment_outcome_distribution = data.groupby('疾病类型')['治疗结果'].value_counts().unstack()
# 设置中文字体
font_path = 'C:/Windows/Fonts/simhei.ttf' # 根据你的系统调整字体路径
my_font = fm.FontProperties(fname=font_path)
# 绘制柱状图
(, stacked=True)
plt.title('不同疾病类型的治疗结果分布', fontproperties=my_font)
plt.xlabel('疾病类型', fontproperties=my_font)
plt.ylabel('治疗结果数量', fontproperties=my_font)
plt.xticks(fontproperties=my_font) # 设置x轴刻度标签的字体
plt.yticks(fontproperties=my_font) # 设置y轴刻度标签的字体
plt.legend(prop=my_font) # 设置图例字体
plt.show()
# 绘制散点图
(, )
plt.title('年龄和疾病严重程度的关系', fontproperties=my_font)
plt.xlabel('年龄', fontproperties=my_font)
plt.ylabel('疾病严重程度', fontproperties=my_font)
plt.xticks(fontproperties=my_font) # 设置x轴刻度标签的字体
plt.yticks(fontproperties=my_font) # 设置y轴刻度标签的字体
plt.legend(prop=my_font) # 设置图例字体
plt.show()
# 保存处理后得数据
output_path = '2.1.4_cleaned_data.csv'
(, index=False)