1.1.1
import pandas as pd
import numpy as np
# 读取数据集 1分
data = pd.read_csv('patient_data.csv')
data
PatientID | Age | BMI | BloodPressure | Cholesterol | DaysInHospital | |
---|---|---|---|---|---|---|
0 | 1 | 62 | 38.3 | 150 | 211 | 2 |
1 | 2 | 65 | 34.1 | 118 | 243 | 8 |
2 | 3 | 82 | 22.8 | 114 | 177 | 8 |
3 | 4 | 85 | 37.2 | 154 | 237 | 8 |
4 | 5 | 85 | 32.4 | 120 | 149 | 20 |
... | ... | ... | ... | ... | ... | ... |
995 | 996 | 47 | 15.1 | 163 | 128 | 4 |
996 | 997 | 71 | 37.2 | 148 | 257 | 3 |
997 | 998 | 78 | 18.9 | 159 | 194 | 20 |
998 | 999 | 60 | 27.2 | 113 | 108 | 3 |
999 | 1000 | 20 | 16.4 | 144 | 207 | 3 |
1000 rows × 6 columns
# 1. 统计住院天数超过7天的患者数量及其占比
# 创建新列'RiskLevel',根据住院天数判断风险等级 3分
data['RiskLevel'] = np.where(data['DaysInHospital'] > 7, '高风险患者', '低风险患者')
# 统计不同风险等级的患者数量 2分
risk_counts = data['RiskLevel'].value_counts()
# 计算高风险患者占比 1分
high_risk_ratio = risk_counts['高风险患者'] / len(data)
# 计算低风险患者占比 1分
low_risk_ratio = risk_counts['低风险患者'] / len(data)
# 输出结果
print("高风险患者数量:", risk_counts['高风险患者'])
print("低风险患者数量:", risk_counts['低风险患者'])
print("高风险患者占比:", high_risk_ratio)
print("低风险患者占比:", low_risk_ratio)
高风险患者数量: 413
低风险患者数量: 587
高风险患者占比: 0.413
低风险患者占比: 0.587
# 2. 统计不同BMI区间中高风险患者的比例和统计不同BMI区间中的患者数
# 定义BMI区间和标签
bmi_bins = [0, 18.5, 24, 28, np.inf]
bmi_labels = ['偏瘦', '正常', '超重', '肥胖']
# 根据BMI值划分指定区间 4分
data['BMIRange'] = pd.cut(data['BMI'], bins=bmi_bins, labels=bmi_labels, right=False) # 使用左闭右开区间
# 计算每个BMI区间中高风险患者的比例 2分
bmi_risk_rate = data.groupby('BMIRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())
# 统计每个BMI区间的患者数量 1分
bmi_patient_count = data['BMIRange'].value_counts()
# 输出结果
print("BMI区间中高风险患者的比例和患者数:")
print(bmi_risk_rate)
print(bmi_patient_count)
BMI区间中高风险患者的比例和患者数:
BMIRange
偏瘦 0.444444
正常 0.406699
超重 0.388235
肥胖 0.415094
Name: RiskLevel, dtype: float64
BMIRange
肥胖 477
正常 209
超重 170
偏瘦 144
Name: count, dtype: int64
/var/folders/rq/lzp3p28j4wsfzc34n6x5rdlh0000gn/T/ipykernel_15165/4292683966.py:10: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.
bmi_risk_rate = data.groupby('BMIRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())
# 3. 统计不同年龄区间中高风险患者的比例和统计不同年龄区间中的患者数
# 定义年龄区间和标签
age_bins = [0, 26, 36, 46, 56, 66, np.inf]
age_labels = ['≤25岁', '26-35岁', '36-45岁', '46-55岁', '56-65岁', '>65岁']
# 根据年龄值划分指定区间 4分
data['AgeRange'] = pd.cut(data['Age'], bins=age_bins, labels=age_labels, right=False) # 使用左闭右开区间
# 计算每个年龄区间中高风险患者的比例 2分
age_risk_rate = data.groupby('AgeRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())
# 统计每个年龄区间的患者数量 1分
age_patient_count = data['AgeRange'].value_counts()
# 输出结果
print("年龄区间中高风险患者的比例和患者数:")
print(age_risk_rate)
print(age_patient_count)
年龄区间中高风险患者的比例和患者数:
AgeRange
≤25岁 0.456693
26-35岁 0.398496
36-45岁 0.386364
46-55岁 0.444444
56-65岁 0.401575
>65岁 0.401254
Name: RiskLevel, dtype: float64
AgeRange
>65岁 319
46-55岁 162
26-35岁 133
36-45岁 132
≤25岁 127
56-65岁 127
Name: count, dtype: int64
/var/folders/rq/lzp3p28j4wsfzc34n6x5rdlh0000gn/T/ipykernel_15165/3045828622.py:8: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.
age_risk_rate = data.groupby('AgeRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())