Skip to content

医疗研究数据清洗和标注设计

1.导入库

python
import pandas as pd
  • 导入 pandas 库,⽤于数据处理和分析,通常别名为 pd

2.加载数据集

python
data = pd.read_csv('medical_data.csv', encoding='gbk')
  • pd.read_csv() : 读取CSV文件
    • 'medical_data.csv' : 文件路径
    • encoding='gbk' : 指定文件编码格式(处理中文)

3.数据探索

python
print(data.dtypes)
print(data.head())
  • data.dtypes : 显示每一列的数据类型
  • head() : 显示前5行数据
  • 功能:初步了解数据结构和内容

4.检查缺失值

python
print(data.isnull().sum())
  • data.isnull().sum() : 统计每列的缺失值数量
  • 功能:识别数据完整性问题

5.日期格式处理

python
data['就诊日期'] = pd.to_datetime(data['就诊日期'])
data['诊断日期'] = pd.to_datetime(data['诊断日期'])
  • pd.to_datetime() : 将列转换为datetime类型
  • 功能:标准化日期格式以便后续计算

6.列名修改

python
data.rename(columns={'病人ID':'患者ID'}, inplace=True)
  • rename() : 修改列名

    • columns={'病人ID':'患者ID'} : 指定旧名和新名的映射
    • inplace=True : 直接修改原DataFrame
  • 功能:统一命名规范

7.新增计算列

python
from datetime import datetime
data['诊断延迟'] = (data['诊断日期'] - data['就诊日期']).dt.days
data['病程'] = (datetime(2024, 9, 1) - data['诊断日期']).dt.days
  • dt.days : 提取时间差的天数部分
  • datetime(2024, 9, 1) : 设定参考日期
  • 功能:计算诊断延迟天数和病程天数

8.数据清洗

python
data = data[(data['诊断延迟'] >= 0) & (data['年龄'] > 0) & (data['年龄'] < 120)]
  • 布尔索引过滤:

    • 诊断延迟不小于0天
    • 年龄在0-120岁之间
  • 功能:删除不合理数据

9.数据统计

python
print(data.describe())
  • describe() : 生成数值列的统计摘要
  • 功能:查看清洗后数据的统计特征

10.处理重复值

python
initial_rows = data.shape[0]
data.drop_duplicates(inplace=True)
deleted_rows = initial_rows - data.shape[0]
print(f'删除的重复行数: {deleted_rows}')
  • shape[0] : 获取行数

  • drop_duplicates() : 删除完全重复的行

    • inplace=True : 直接修改原DataFrame
  • 功能:删除重复记录并统计数量

11.数据归一化

python
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
columns_to_normalize = ['年龄', '体重', '身高']
data[columns_to_normalize] = scaler.fit_transform(data[columns_to_normalize])
  • MinMaxScaler() : 创建最小-最大缩放器

    • 归一化公式:(x - min)/(max - min)
  • fit_transform() : 计算并应用转换

  • 功能:将数值特征缩放到[0,1]范围

12.数据可视化准备

python
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
font_path = 'C:/Windows/Fonts/simhei.ttf'
my_font = fm.FontProperties(fname=font_path)
  • 设置中文字体显示

    • simhei.ttf : 黑体字体文件路径
  • fontproperties=my_font : 指定中文字体

  • 功能:确保图表正确显示中文

13.治疗结果分布分析

python
treatment_outcome_distribution = data.groupby('疾病类型')['治疗结果'].value_counts().unstack() 
treatment_outcome_distribution.plot(kind='bar', stacked=True)
  • groupby().value_counts().unstack() : 创建交叉频数表
  • plot(kind='bar', stacked=True) : 绘制堆叠柱状图
  • 功能:展示不同疾病类型的治疗结果分布

14.年龄与疾病严重程度分析

python
plt.scatter(data['年龄'], data['疾病严重程度'])
  • scatter() : 绘制散点图
  • 功能:探索年龄与疾病严重程度的关系

15.图表美化

python
plt.title()/plt.xlabel()/plt.ylabel(): 设置标题和轴标签
plt.xticks()/plt.yticks(): 设置刻度标签
plt.legend(): 添加图例

16.保存处理后的数据

python
output_path = '2.1.4_cleaned_data.csv'
data.to_csv(output_path, index=False)
  • to_csv() : 保存为CSV文件
  • index=False : 不保存行索引
  • 功能:导出清洗后的数据

制定数据清洗规范

txt
1. 数据加载:使用 pandas 库加载数据集,检查数据的基本结构和类型。
2. 检查数据集中的缺失值,使用删除包含缺失值的行的办法处理,记录缺失值处理后的数据行数;
3、增加“诊断延迟”(诊断日期-就诊日期)和“病程”(当前日期-诊断日期)两列,删除不合理的数据(如负数,年龄为几百岁等);
4、检查数据集中的重复值并删除所有重复值,并记录删除的行数;
5、对数据段[年龄,体重,身高]进行归一化处理;
6、保存清洗后的数据: 将经过清洗和处理后的数据保存为新的 CSV 文件,以便后续使用。

制定数据标注规范

1. 数据来源:标注数据的来源,包括数据集的名称、获取日期和数据提供者。
2. 数据描述:提供详细的数据描述,包括每列数据的含义、单位和可能的取值范围。
3. 特征选择: 确定对目标变量预测最有用的特征。
4. 目标变量设定: 根据业务需求和数据特性,选择最有用的特征。
5. 数据划分: 将数据分为训练集和测试集,通常采用 80/20 的比例,以便于模型的训练和评估。
6. 保存处理后的数据:保存处理后的数据,并记录保存文件的路径和文件名。
7. 数据清洗和标注规范文档