Python | 练习题<12>

26 阅读7分钟
  • import pandas as pd
  • import numpy as np
  • import matplotlib.pylab as plt

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

“地铁客流数据.csv” 包含字段:“日期”“线路”“站点名称”“进站人数”“出站人数”“时段 (早高峰 / 平峰 / 晚高峰)”。

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

  1. 读取 CSV 文件数据,计算每个站点的总客流(进站人数 + 出站人数),添加为新列。
  2. 按 “线路” 和 “时段” 双重分组,统计不同线路、不同时段的平均进站人数。
  3. 提取 “日期” 中的月份,统计每月的总客流(所有站点进出站之和),绘制柱状图。
  4. 计算每个站点进站人数与出站人数的相关系数。
  5. 筛选出总客流前 10 的站点,绘制水平柱状图展示结果。

分解代码:

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

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

df = pd.read_csv("地铁客流数据.csv")
df['总客流'] = df['进站人数'] + df['出站人数']
print(df)

运行结果:

1111111.png

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

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

运行结果:

222222.png

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

运行结果: 3333333.png

zzzzzzzzzzzz.png

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

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

运行结果:

44444.png

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

运行结果:

55555.png

zzzzzzzzzzzzzzz2222222222222222222222.png

完整代码:

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

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

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

“网约车订单数据.csv” 包含字段:“订单 ID”“出发时间”“行程距离 (km)”“行驶时长 (分钟)”“起步价 (元)”“里程费 (元 /km)”“附加费 (元)”。

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

  1. 读取 CSV 文件数据,计算订单总费用(起步价 + 行程距离 × 里程费 + 附加费),添加为新列。
  2. 按 “出发时间” 提取小时信息,统计各小时的订单量和平均行程距离。
  3. 计算总费用的最大值、最小值、均值和标准差。
  4. 按行程距离分组(0-5km、5-10km、10km+),统计每组的订单数和平均总费用,绘制柱状图。
  5. 保存行程距离 ≥10km 的订单数据为 “长途订单.csv”(不含索引)。

分解代码:

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

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

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

运行结果:

1111.png

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)

运行结果:

222.png

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

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

运行结果:

333.png

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

运行结果:

4444.png

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz3333333333333333333330.png

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

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

运行结果为一个文件

完整代码:

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

# 5. 保存行程距离 ≥10km 的订单数据为 “长途订单.csv”(不含索引)。
new_data = df[df['行程距离 (km)'] >= 10]
new_data.to_csv("长途订单.csv")