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]
No description has been provided for this image
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)  # 设置图例字体
No description has been provided for this image
In [ ]: