In [7]:

    import pandas as pd

    # 加载数据集并指定编码为gbk
    data = pd.read_csv('medical_data.csv', encoding='gbk')

    # 查看数据类型
    print(data.dtypes)
    # 查看表结构基本信息
    print(data.info())

    # 显示每一列的空缺值数量
    print(data.isnull().sum())

    # 规范日期格式
    data['就诊日期'] = pd.to_datetime(data['就诊日期'])
    data['诊断日期'] = pd.to_datetime(data['诊断日期'])

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

    # 查看修改后的表结构
    print(data.head())

    from datetime import datetime

    # 增加诊断延迟和病程列
    data['诊断延迟'] = (data['诊断日期'] - data['就诊日期']).dt.days
    data['病程'] = (datetime(2024, 9, 1) - data['诊断日期']).dt.days

    # 删除不合理的数据
    data = data[(data['诊断延迟'] >= 0) & (data['年龄'] > 0) & (data['年龄'] < 120)]

    # 查看修改后的数据
    print(data.describe())

    # 删除重复值并记录删除的行数
    initial_rows = data.shape[0]
    data.drop_duplicates(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] = scaler.fit_transform(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)

    # 绘制柱状图
    treatment_outcome_distribution.plot(kind='bar', 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.scatter(data['年龄'], data['疾病严重程度'])
    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'
    data.to_csv(output_path, index=False)

    病人ID        int64
    年龄          int64
    性别         object
    地区         object
    就诊日期       object
    疾病类型       object
    诊断日期       object
    疾病严重程度     object
    治疗方案       object
    治疗结果       object
    药物名称       object
    药物分类       object
    用药剂量       object
    用药时长       object
    检查项目       object
    检查结果      float64
    参考范围       object
    体重        float64
    身高        float64
    吸烟情况       object
    饮酒情况       object
    遗传病史       object
    dtype: object
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 5440 entries, 0 to 5439
    Data columns (total 22 columns):
     #   Column  Non-Null Count  Dtype
    ---  ------  --------------  -----
     0   病人ID    5440 non-null   int64
     1   年龄      5440 non-null   int64
     2   性别      5440 non-null   object
     3   地区      5438 non-null   object
     4   就诊日期    5439 non-null   object
     5   疾病类型    5440 non-null   object
     6   诊断日期    5429 non-null   object
     7   疾病严重程度  5439 non-null   object
     8   治疗方案    5438 non-null   object
     9   治疗结果    5437 non-null   object
     10  药物名称    5438 non-null   object
     11  药物分类    5438 non-null   object
     12  用药剂量    5436 non-null   object
     13  用药时长    5438 non-null   object
     14  检查项目    5435 non-null   object
     15  检查结果    5437 non-null   float64
     16  参考范围    5439 non-null   object
     17  体重      5437 non-null   float64
     18  身高      5439 non-null   float64
     19  吸烟情况    5437 non-null   object
     20  饮酒情况    5439 non-null   object
     21  遗传病史    5440 non-null   object
    dtypes: float64(3), int64(2), object(17)
    memory usage: 935.1+ KB
    None
    病人ID       0
    年龄         0
    性别         0
    地区         2
    就诊日期       1
    疾病类型       0
    诊断日期      11
    疾病严重程度     1
    治疗方案       2
    治疗结果       3
    药物名称       2
    药物分类       2
    用药剂量       4
    用药时长       2
    检查项目       5
    检查结果       3
    参考范围       1
    体重         3
    身高         1
    吸烟情况       3
    饮酒情况       1
    遗传病史       0
    dtype: int64
        患者ID  年龄 性别  地区       就诊日期 疾病类型       诊断日期 疾病严重程度  治疗方案  治疗结果  ...  用药剂量  \
    0  20413  45  女  重庆 2023-04-04   感冒 2023-04-25    不严重    放疗  病情稳定  ...  每周一次
    1  27375  38  女  深圳 2023-03-12   哮喘 2022-12-10    不严重    化疗    康复  ...  10毫克
    2  93406  27  女  武汉 2022-11-19   哮喘 2022-10-23    不严重  物理疗法    好转  ...  每日2次
    3  59255  87  男  成都 2022-10-30   骨折 2022-12-14     中度    放疗  病情稳定  ...  每周一次
    4  52488  24  男  北京 2022-09-22  糖尿病 2022-07-10    不严重  药物治疗    好转  ...  饭后服用

      用药时长  检查项目   检查结果 参考范围     体重     身高  吸烟情况  饮酒情况 遗传病史
    0  2个月   尿常规  105.0   正常   67.0  184.0     是    偶尔    是
    1   1周    血压  140.0   正常   43.0  140.0    戒烟    戒酒    是
    2   长期  核磁共振  175.0   未知   91.0  199.0     否    偶尔  不清楚
    3   1周   胆固醇  157.0   正常   79.0  165.0     是    戒酒    是
    4   3天   胆固醇   70.0   未知  119.0  158.0    戒烟     是  不清楚

    [5 rows x 22 columns]
                   患者ID           年龄                           就诊日期  \
    count   2707.000000  2707.000000                           2707
    mean   54772.932397    49.381234  2022-10-19 05:50:01.551533056
    min    10012.000000     1.000000            2022-06-18 00:00:00
    25%    31891.500000    25.000000            2022-08-07 00:00:00
    50%    54527.000000    48.000000            2022-10-07 00:00:00
    75%    76802.500000    74.000000            2022-12-17 12:00:00
    max    99965.000000   100.000000            2023-06-18 00:00:00
    std    26021.158215    28.614318                            NaN

                                    诊断日期         检查结果           体重           身高  \
    count                           2707  2705.000000  2705.000000  2706.000000
    mean   2023-02-16 13:39:44.484669440   124.300555    80.757856   169.778271
    min              2022-06-22 00:00:00    50.000000    40.000000   140.000000
    25%              2022-12-18 00:00:00    87.000000    61.000000   155.000000
    50%              2023-03-01 00:00:00   124.000000    81.000000   170.000000
    75%              2023-04-28 00:00:00   161.000000   101.000000   185.000000
    max              2023-06-18 00:00:00   200.000000   120.000000   200.000000
    std                              NaN    43.446248    23.363655    17.600611

                  诊断延迟           病程
    count  2707.000000  2707.000000
    mean    120.326191   562.430735
    min       0.000000   441.000000
    25%      48.000000   492.000000
    50%     106.000000   550.000000
    75%     183.000000   623.000000
    max     357.000000   802.000000
    std      86.129346    84.133081
    删除的重复行数: 2
         患者ID        年龄 性别  地区       就诊日期 疾病类型       诊断日期 疾病严重程度  治疗方案  治疗结果  ...  \
    0   20413  0.444444  女  重庆 2023-04-04   感冒 2023-04-25    不严重    放疗  病情稳定  ...
    3   59255  0.868687  男  成都 2022-10-30   骨折 2022-12-14     中度    放疗  病情稳定  ...
    5   66021  0.333333  男  深圳 2022-11-03  高血压 2023-04-16    不严重    化疗    康复  ...
    7   21594  0.111111  男  杭州 2022-08-07  糖尿病 2023-05-19     轻度  物理疗法  病情稳定  ...
    10  14858  0.767677  女  广州 2022-08-18  高血压 2022-11-28     严重  手术治疗  病情稳定  ...

        检查项目   检查结果 参考范围      体重        身高  吸烟情况 饮酒情况  遗传病史   诊断延迟     病程
    0    尿常规  105.0   正常  0.3375  0.733333     是   偶尔     是   21.0  495.0
    3    胆固醇  157.0   正常  0.4875  0.416667     是   戒酒     是   45.0  627.0
    5   核磁共振  126.0   偏高  0.9375  0.983333     否   偶尔     否  164.0  504.0
    7    尿常规   91.0   正常  0.4250  0.900000     否    否     否  285.0  471.0
    10    血压   98.0   偏低  0.6250  0.116667     否    是     否  102.0  643.0

    [5 rows x 24 columns]

    C:\Users\hello\AppData\Local\Temp\ipykernel_164880\2844608916.py:81: UserWarning: No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.
      plt.legend(prop=my_font)  # 设置图例字体

In [ ]: