python练习题14

66 阅读4分钟

题目 1:地铁客流数据分析

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

# 1. 读取 CSV 文件数据,计算每个站点的总客流(进站人数 + 出站人数),添加为新列。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv("地铁客流数据.csv")
df['总客流'] = df['进站人数'] + df['出站人数']
print(df)

2. 按 “线路” 和 “时段” 双重分组,统计不同线路、不同时段的平均进站人数。

mean_in = df.groupby(['线路','时段 (早高峰/平峰/晚高峰)'])['进站人数'].mean()
print(mean_in)

3. 提取 “日期” 中的月份,统计每月的总客流(所有站点进出站之和),绘制柱状图。

df['日期'] = pd.to_datetime(df['日期'])
df['月份'] = df['日期'].dt.month
sum_month = df.groupby('月份')['总客流'].sum()
print(sum_month)
plt.bar(sum_month.index,sum_month)
plt.show()

运行结果如图: 屏幕截图 2025-12-01 160128.png

4. 计算每个站点进站人数与出站人数的相关系数。

corr = df['进站人数'].corr(df['出站人数'])
print(corr)

5. 筛选出总客流前 10 的站点,绘制水平柱状图展示结果。

plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置为黑体
df = df.sort_values('总客流',ascending=False) # 降序排列
print(df)
top5 = df[:5].reset_index()
print(top5)
plt.bar(top5['站点名称'],top5['总客流'])
plt.show()

运行结果如图: 屏幕截图 2025-12-01 160152.png

题目 2:网约车订单数据分析

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

1. 读取 CSV 文件数据,计算订单总费用(起步价 + 行程距离 × 里程费 + 附加费),添加为新列。

df = pd.read_csv("网约车订单数据.csv",index_col='订单ID')
df['总费用'] = df['起步价 (元)'] + df['行程距离 (km)'] * df['里程费 (元/km)'] + df['附加费 (元)']
print(df)

2. 按 “出发时间” 提取小时信息,统计各小时的订单量和平均行程距离。

df['出发时间'] = pd.to_datetime(df['出发时间'])
df['小时'] = df['出发时间'].dt.hour
df['订单量'] = [1 for i in range(df.shape[0])]
state = df.groupby('小时').agg({
    '订单量':'sum',
    '行程距离 (km)':'mean'
})
print(state)

3. 计算总费用的最大值、最小值、均值和标准差。

total = df['总费用'].agg(['max','min','mean','std'])
print(total)

4. 按行程距离分组(0-5km、5-10km、10km+),统计每组的订单数和平均总费用,绘制柱状图。

df['距离分组'] = pd.cut(
    df['行程距离 (km)'],
    bins=[0,5,10,np.inf],
    labels=['0-5km','5-10km','10km+'],
    right=False
)
print(df)
group_data = df.groupby('距离分组').agg({
    '订单量':'count',
    '总费用':'mean'
})
print(group_data)
plt.bar(group_data.index,group_data['订单量'])
plt.show()
plt.bar(group_data.index,group_data['总费用'])
plt.show()

运行结果如图: 屏幕截图 2025-12-01 160217.png

image.png

5. 保存行程距离 ≥10km 的订单数据为 “长途订单.csv”(不含索引)。

new_data = df[df['行程距离 (km)'] >= 10]
new_data.to_csv("长途订单.csv")

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

“体检数据.csv” 包含字段:“体检编号”“年龄”“性别”“收缩压 (mmHg)”“舒张压 (mmHg)”“空腹血糖 (mmol/L)”“胆固醇 (mmol/L)”。 请使用 pandas、numpy 和 matplotlib 完成以下任务:

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(
    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()

运行结果如图: 屏幕截图 2025-12-01 160502.png

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

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

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()

运行结果如图: 屏幕截图 2025-12-01 160518.png

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

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

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

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