In [9]:
import pandas as pd
import numpy as np

# 读取数据集 1分
data = pd.read_csv('patient_data.csv')
In [11]:
# 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
In [13]:
# 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
C:\Users\hello\AppData\Local\Temp\ipykernel_130688\2732890380.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.
  bmi_risk_rate =  data.groupby('BMIRange')['RiskLevel'].apply(lambda x: (x == '高风险患者').mean())
In [7]:
# 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
C:\Users\hello\AppData\Local\Temp\ipykernel_130688\2561389961.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())
In [ ]: