Python | 练习题 <13>

20 阅读6分钟
  • import pandas as pd
  • import numpy as np
  • import matplotlib.pylab as plt

题目 1:体检中心健康数据分析

“体检数据.csv” 包含字段:“体检编号”“年龄”“性别”“收缩压 (mmHg)”“舒张压 (mmHg)”“空腹血糖 (mmol/L)”“胆固醇 (mmol/L)”。

请使用 pandas、numpy 和 matplotlib 完成以下任务:

  1. 读取 CSV 文件数据,判断是否为高血压(收缩压 ≥140 或舒张压 ≥90),添加 “是否高血压” 列(是 / 否)。
  2. 按 “性别” 和 “年龄分组”(18-30、31-50、50+)双重分组,统计每组的高血压比例。
  3. 计算空腹血糖与胆固醇的相关系数。
  4. 按性别分组,统计收缩压、舒张压、空腹血糖的均值和方差(使用 agg 函数)。
  5. 绘制男性和女性的平均收缩压对比柱状图。

分解代码:

请使用 pandas、numpy 和 matplotlib 完成以下任务:

1. 读取 CSV 文件数据,判断是否为高血压(收缩压 ≥140 或舒张压 ≥90),添加 “是否高血压” 列(是 / 否)。

df = pd.read_csv("体检数据.csv")
df['是否高血压'] = np.where((df['收缩压 (mmHg)'] >= 140) | (df['舒张压 (mmHg)'] >= 90), '是', '否')
print(df)

运行结果:

11111.png

2. 按 “性别” 和 “年龄分组”(18-30、31-50、50+)双重分组,统计每组的高血压比例。

df['年龄分组'] = pd.cut(
    df['年龄'],
    bins=[17, 30, 50, np.inf],
    labels=['18-30', '31-50', '50+'],
    right=False
)
rate = df.groupby(['性别', '年龄分组'])['是否高血压'].apply(lambda x:(x=='是').mean()).reset_index()
print(rate)

运行结果:

222.png

3. 计算空腹血糖与胆固醇的相关系数。

corr = df['空腹血糖 (mmol/L)'].corr(df['胆固醇 (mmol/L)'])
print(corr)

运行结果:

333.png

4. 按性别分组,统计收缩压、舒张压、空腹血糖的均值和方差(使用 agg 函数)

df_mean = df.groupby('性别').agg({
    '收缩压 (mmHg)':'mean',
    '舒张压 (mmHg)':'mean',
    '空腹血糖 (mmol/L)':'mean'
})
df_var = df.groupby('性别').agg({
    '收缩压 (mmHg)':'var',
    '舒张压 (mmHg)':'var',
    '空腹血糖 (mmol/L)':'var'
})
print(df_var)
print(df_mean)

444.png

运行结果:

5. 绘制男性和女性的平均收缩压对比柱状图。

df_male = df.groupby('性别')['收缩压 (mmHg)'].mean()
print(df_male)
plt.bar(df_male.index, df_male)
plt.show()

运行结果:

5555.png

zzzzzzzzzzzzzz55555555555555.png

完整代码:

# 1. 读取 CSV 文件数据,判断是否为高血压(收缩压 ≥140 或舒张压 ≥90),添加 “是否高血压” 列(是 / 否)。
df = pd.read_csv("体检数据.csv")
df['是否高血压'] = np.where((df['收缩压 (mmHg)'] >= 140) | (df['舒张压 (mmHg)'] >= 90), '是', '否')
print(df)

# 2. 按 “性别” 和 “年龄分组”(18-30、31-50、50+)双重分组,统计每组的高血压比例。
df['年龄分组'] = pd.cut(
    df['年龄'],
    bins=[17, 30, 50, np.inf],
    labels=['18-30', '31-50', '50+'],
    right=False
)
rate = df.groupby(['性别', '年龄分组'])['是否高血压'].apply(lambda x:(x=='是').mean()).reset_index()
print(rate)

# 3. 计算空腹血糖与胆固醇的相关系数。
corr = df['空腹血糖 (mmol/L)'].corr(df['胆固醇 (mmol/L)'])
print(corr)

# 4. 按性别分组,统计收缩压、舒张压、空腹血糖的均值和方差(使用 agg 函数)。
df_mean = df.groupby('性别').agg({
    '收缩压 (mmHg)':'mean',
    '舒张压 (mmHg)':'mean',
    '空腹血糖 (mmol/L)':'mean'
})
df_var = df.groupby('性别').agg({
    '收缩压 (mmHg)':'var',
    '舒张压 (mmHg)':'var',
    '空腹血糖 (mmol/L)':'var'
})
print(df_var)
print(df_mean)

# 5. 绘制男性和女性的平均收缩压对比柱状图。
df_male = df.groupby('性别')['收缩压 (mmHg)'].mean()
print(df_male)
plt.bar(df_male.index, df_male)
plt.show()

题目 2:健身房运动数据分析

“健身房数据.csv” 包含字段:“用户 ID”“运动日期”“运动类型 (有氧 / 力量 / 综合)”“运动时长 (分钟)”“消耗热量 (大卡)”“运动频率 (次 / 周)”。

请使用 pandas 和 matplotlib 完成以下任务:

  1. 读取 CSV 文件数据,将 “运动日期” 转换为 datetime 格式。
  2. 按 “运动类型” 分组,统计平均运动时长、平均消耗热量和用户数。
  3. 提取 “运动日期” 中的月份,统计每月的总运动时长,绘制折线图。
  4. 计算运动时长与消耗热量的相关系数。
  5. 筛选出消耗热量 ≥500 大卡的记录,保存为 “高强度运动记录.csv”(不含索引)。

分解代码:

请使用 pandas 和 matplotlib 完成以下任务:

1. 读取 CSV 文件数据,将 “运动日期” 转换为 datetime 格式。

df = pd.read_csv("健身房数据.csv")
df['运动日期'] = pd.to_datetime(df['运动日期'])
print(df)

运行结果:

111.png

2. 按 “运动类型” 分组,统计平均运动时长、平均消耗热量和用户数。

states = df.groupby('运动类型 (有氧/力量/综合)').agg({
    "运动时长 (分钟)":'mean',
    "消耗热量 (大卡)":'mean',
    "用户ID":'count'
})
print(states)

运行结果:

222.png

3. 提取 “运动日期” 中的月份,统计每月的总运动时长,绘制折线图。

df['月份'] = df['运动日期'].dt.month
total_time = df.groupby('月份')['运动时长 (分钟)'].sum()
print(total_time)
plt.plot(total_time.index, total_time)
plt.show()

运行结果:

333.png

xxxxxxxxxxxxxxxxx1111111111111111111.png

4. 计算运动时长与消耗热量的相关系数。

corr = df['运动时长 (分钟)'].corr(df['消耗热量 (大卡)'])
print(corr)

运行结果:

44444.png

5. 筛选出消耗热量 ≥500 大卡的记录,保存为 “高强度运动记录.csv”(不含索引)。

new_data = df[df['消耗热量 (大卡)'] >= 500]
print(new_data)
new_data.to_csv('高强度运动记录.csv')

运行结果:

5555.png

完整代码:

# 1. 读取 CSV 文件数据,将 “运动日期” 转换为 datetime 格式。
df = pd.read_csv("健身房数据.csv")
df['运动日期'] = pd.to_datetime(df['运动日期'])
print(df)

# 2. 按 “运动类型” 分组,统计平均运动时长、平均消耗热量和用户数。
states = df.groupby('运动类型 (有氧/力量/综合)').agg({
    "运动时长 (分钟)":'mean',
    "消耗热量 (大卡)":'mean',
    "用户ID":'count'
})
print(states)

# 3. 提取 “运动日期” 中的月份,统计每月的总运动时长,绘制折线图。
df['月份'] = df['运动日期'].dt.month
total_time = df.groupby('月份')['运动时长 (分钟)'].sum()
print(total_time)
plt.plot(total_time.index, total_time)
plt.show()

# 4. 计算运动时长与消耗热量的相关系数。
corr = df['运动时长 (分钟)'].corr(df['消耗热量 (大卡)'])
print(corr)

# 5. 筛选出消耗热量 ≥500 大卡的记录,保存为 “高强度运动记录.csv”(不含索引)。
new_data = df[df['消耗热量 (大卡)'] >= 500]
print(new_data)
new_data.to_csv('高强度运动记录.csv')