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 [ ]: