python练习题13

67 阅读5分钟

题目 1:使用 Pandas 生成一个包含 10 行 3 列的 DataFrame,列名分别为 A、B、C,其中 A 列数据为 1 到 10 的整数序列,B 列数据为 A 列数据的平方,C 列数据为 A 列数据的立方,然后计算 B 列数据的总和。

import pandas as pd
df= pd.DataFrame({
    'A':range(1,11),
    'B':[i**2 for i in range(1,11)],
    'C':[i**3 for i in range(1,11)]
})
b_sum = df['B'].sum()
print(df)
print(b_sum)

题目 2:线上书店订单数据分析

“书店订单数据.csv” 包含字段:“订单 ID”“用户 ID”“图书类别”“购买数量”“图书定价 (元)”“折扣率 (0.7-1.0)”“支付时间”。请使用 pandas 和 matplotlib 完成以下任务:

  1. 读取 CSV 文件数据,计算实际支付金额(图书定价 × 折扣率 × 购买数量),添加为新列。
import matplotlib.pyplot as plt

data = pd.read_csv(
    "书店订单数据.csv",
    encoding='utf-8',
    index_col='订单ID'
)
print(data)
data['实际支付金额'] = data['图书定价 (元)'] * data['折扣率 (0.7-1.0)'] * data['购买数量']
print(data)
  1. 按 “图书类别” 分组,统计各类别的订单数、总销量和总实际销售额。
book = data.groupby('图书类别').agg({
    '购买数量':'sum',
    '实际支付金额':'sum'
})
print(book)
  1. 提取 “支付时间” 中的小时信息(0-23),统计各时段的订单量,绘制折线图展示消费时段分布。
data['支付时间'] = pd.to_datetime(data['支付时间']) # 转换为datetime类型
data['小时数'] = data['支付时间'].dt.hour # 小时
print(data)
hour_counts = data.groupby('小时数')['购买数量'].sum()
print(hour_counts)
plt.plot(hour_counts.index,hour_counts)
plt.show()

运行结果如图:

屏幕截图 2025-11-26 110902.png
  1. 计算所有订单的实际支付金额的均值、中位数和标准差。
states = data['实际支付金额'].agg(['mean','median','std'])
print(states)
  1. 筛选出购买数量 ≥3 本的订单,保存为新 CSV 文件 “大额订单.csv”(不含索引)。
data = data.sort_values('购买数量',ascending=False) # 降序排列
top3 = data[:3]
top3.to_csv('大额订单.csv')

题目 3:学生考试成绩数据分析

“考试成绩数据.csv” 包含字段:“班级”“学号”“姓名”“语文”“数学”“英语”“理综 / 文综”“考试时间”。请使用 pandas、numpy 和 matplotlib 完成以下任务:

  1. 读取 CSV 文件数据,计算每位学生的总分(四门科目之和)和平均分,添加为新列。
df = pd.read_csv(
    "考试成绩数据.csv"
)
print(df)
subjects = ['语文' , '数学' , '英语' , '理综/文综']
df['总分'] = df[subjects].sum(axis=1)
df['平均分'] = df[subjects].mean(axis=1)
print(df)

2.按 “班级” 分组,统计各科目的平均分、最高分和最低分(使用 agg 函数批量统计)。

class_states = df.groupby('班级')[subjects].agg(['mean' , 'max' , 'min'])
print(class_states)
  1. 筛选出总分 ≥600 分的学生,统计每个班级的高分人数,绘制柱状图。
plt.rcParams['font.sans-serif'] = ['SimHei']
high_score_student = df[df['总分'] >= 600]
print(high_score_student)
count = high_score_student['班级'].value_counts().sort_index()
print(count)
plt.bar(count.index,count)
plt.show()

运行结果如图:

屏幕截图 2025-11-26 111001.png 4. 计算数学成绩与理综 / 文综成绩的相关系数。

corr = df['数学'].corr(df['理综/文综'])
print(corr)
  1. 提取 “考试时间” 中的月份,统计不同月份的平均总分变化,绘制折线图。
df['考试时间'] = pd.to_datetime(df['考试时间'])
df['月份'] = df['考试时间'].dt.month
mean_total = df.groupby('月份')['总分'].mean()
print(mean_total)
plt.plot(mean_total.index,mean_total)
plt.show()

运行结果如图:

屏幕截图 2025-11-26 111044.png

题目 4:教师教学评价数据分析

“教学评价数据.csv” 包含字段:“教师 ID”“学科”“授课班级”“学生评分 (1-5 分)”“评价人数”“评价日期”。请使用 pandas 和 matplotlib 完成以下任务:

  1. 读取 CSV 文件数据,将 “评价日期” 转换为 datetime 格式。
data = pd.read_csv('教学评价数据.csv')
print(data)
data['评价日期'] = pd.to_datetime(data['评价日期'])
  1. 计算每位教师的总评分(学生评分 × 评价人数)和平均评分,添加为新列。
data['总评分'] = data['学生评分 (1-5分)'] * data['评价人数']
mean_data = data.groupby('教师ID')['学生评分 (1-5分)'].mean()
print(data)
print(mean_data)
  1. 按 “学科” 分组,统计各学科的平均评分和总评价人数。
counts = data.groupby('学科').agg({
    '学生评分 (1-5分)':'mean',
    '评价人数':'mean'
})
print(counts)
  1. 提取 “评价日期” 中的星期信息,统计每周各天的评价数量,绘制柱状图。
data['星期'] = data['评价日期'].dt.weekday + 1
counts_weekday = data.groupby('星期')['评价人数'].sum()
plt.bar(counts_weekday.index,counts_weekday)
plt.show()

运行结果如图:

屏幕截图 2025-11-26 111107.png 5. 找出平均评分最高的 3 位教师,用饼图展示他们的总评分占比。

mean_data = mean_data.sort_values(ascending=False)
print(mean_data)
top3 = mean_data[:3]
total = mean_data.sum()
top3_rate = top3 / total
plt.pie(top3_rate,labels=top3_rate.index,autopct="%1.1f4%%")
plt.show()

运行结果如图:

屏幕截图 2025-11-26 111128.png