Python数据分析实战:四道经典数据处理题目详解

197 阅读6分钟

本文将基于四个实际场景的数据分析题目,使用Python中的pandas、numpy和matplotlib库进行数据处理、统计分析与可视化展示。每个题目均包含完整的代码实现、运行结果展示以及详细的代码逻辑分析,适合正在学习数据分析的读者参考与实践。

题目一:超市商品销售数据分析

任务说明
读取“超市销售数据.csv”,完成日期转换、销售额计算、会员消费统计、月度销售额柱状图绘制以及销售额前5商品的饼图展示。

代码

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv("超市销售数据.csv", encoding="utf-8")
df['日期'] = pd.to_datetime(df['日期'])

# 计算销售额
df['销售额(元)'] = df['销售数量'] * df['单价 (元)']

# 按商品类别统计总销售额与平均单价
total_sales = df.groupby('商品类别')['销售额(元)'].sum()
mean_sales = df.groupby('商品类别')['单价 (元)'].mean()
print(f"各类商品的总销售额为:\n{total_sales}")
print(f"各类商品的平均单价为:\n{mean_sales}")

# 按会员等级统计消费
total_sales_by_level = df.groupby('会员等级 (普通/银卡/金卡)')['销售额(元)'].sum()
counts_sales = df.groupby('会员等级 (普通/银卡/金卡)')['销售数量'].sum()
mean_sales_by_level = total_sales_by_level / counts_sales
print(f"不同等级会员的总消费额为:\n{total_sales_by_level}")
print(f"不同等级会员的平均单次消费额为:\n{mean_sales_by_level}")

# 月度销售额柱状图
df['月份'] = df['日期'].dt.month
monthly_sales = df.groupby('月份')['销售额(元)'].sum()
plt.bar(monthly_sales.index, monthly_sales)
plt.title('月度总销售额')
plt.xlabel('月份')
plt.ylabel('销售额(元)')
plt.show()

# 销售额前5商品饼图
product_sales = df.groupby('商品名称')['销售额(元)'].sum().sort_values(ascending=False)
top5 = product_sales.head(5)
top5_pie = top5 / top5.sum()
plt.pie(top5_pie, labels=top5_pie.index, autopct="%1.1f%%")
plt.title('销售额前5商品占比')
plt.show()

代码结果

1.png

代码分析

  • 日期处理:使用pd.to_datetime将日期列转为datetime格式,便于提取月份。
  • 销售额计算:通过列运算直接生成销售额列,简洁高效。
  • 分组统计:利用groupby对商品类别和会员等级进行聚合计算,分别使用summean方法。
  • 可视化
    • 月度销售额使用plt.bar绘制柱状图,直观展示销售趋势。
    • 前5商品销售额使用plt.pie绘制饼图,展示占比分布。

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

任务说明
对“书店订单数据.csv”进行处理,计算实际支付金额,按图书类别分组统计,计算订单金额统计指标,并筛选大额订单保存为新文件。

代码

import pandas as pd

data = pd.read_csv("书店订单数据.csv", encoding="utf-8", index_col="订单ID")
data["实际支付金额"] = data["图书定价 (元)"] * data["折扣率 (0.7-1.0)"] * data["购买数量"]

# 按图书类别统计
states = data.groupby("图书类别").agg({"购买数量":"sum", "实际支付金额":"sum"})
print(states)

# 实际支付金额统计
new_states = data["实际支付金额"].agg(["mean", "median", "std"])
print(new_states)

# 筛选大额订单并保存
tmp = data[data["购买数量"] >= 3]
tmp.to_csv("大额订单.csv", index=False)

代码结果

2.png

代码分析

  • 实际支付金额计算:通过列间运算直接生成新列,公式清晰。
  • 聚合统计:使用groupbyagg一次性计算总销量和总金额。
  • 描述性统计agg方法配合列表一次性输出均值、中位数和标准差。
  • 数据筛选与导出:使用布尔索引筛选符合条件的行,并通过to_csv导出为CSV文件,设置index=False避免保存索引列。

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

任务说明
基于“考试成绩数据.csv”,计算学生总分与平均分,按班级统计各科成绩,筛选高分学生并绘图,计算科目相关性,分析月度平均总分变化。

代码

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("考试成绩数据.csv")
subjects = ['语文', '数学', '英语', '理综/文综']
df['总分'] = df[subjects].sum(axis=1)
df['平均分'] = df[subjects].mean(axis=1)

# 按班级统计各科成绩
states = df.groupby("班级")[subjects].agg(['mean', 'max', 'min'])
print(states)

# 高分人数柱状图
plt.rcParams["font.sans-serif"] = ["SimHei"]
high_student = df[df['总分'] >= 600]
high_counts = high_student["班级"].value_counts().sort_index()
plt.bar(high_counts.index, high_counts)
plt.title('各班级总分≥600分人数')
plt.show()

# 相关性计算
corr = df['数学'].corr(df['理综/文综'])
print(f"数学与理综/文综相关系数:{corr}")

# 月度平均总分折线图
df['考试时间'] = pd.to_datetime(df['考试时间'])
df['月份'] = df['考试时间'].dt.month
month_score = df.groupby('月份')['总分'].mean()
plt.plot(month_score.index, month_score, marker='o')
plt.title('月度平均总分变化')
plt.xlabel('月份')
plt.ylabel('平均总分')
plt.show()

代码结果

3.png

代码分析

  • 总分与平均分计算:使用sum(axis=1)mean(axis=1)跨列计算,避免循环。
  • 多维度聚合agg配合多个统计函数,一次性输出各科目的平均、最高、最低分。
  • 高分筛选与统计:通过条件筛选和value_counts快速统计各班级高分人数。
  • 相关性分析:使用corr方法计算两列数据的皮尔逊相关系数。
  • 时间序列可视化:提取月份信息后绘制折线图,展示成绩随时间的变化趋势。

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

任务说明
处理“教学评价数据.csv”,计算教师总评分与平均评分,按学科统计评分信息,分析评价日期的星期分布,展示评分最高教师的总评分占比。

代码

import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("教学评价数据.csv")
data['评价日期'] = pd.to_datetime(data['评价日期'])
data['总评分'] = data['学生评分 (1-5分)'] * data['评价人数']

# 平均评分
mean_score = data.groupby('教师ID')['学生评分 (1-5分)'].mean()

# 按学科统计
states = data.groupby('学科').agg({
    '总评分':'mean',
    '评价人数':'sum'
})
states = states.rename(columns={'总评分':'平均评分'})
print(states)

# 星期评价数量柱状图
data['星期'] = data['评价日期'].dt.weekday + 1
counts = data.groupby('星期')['评价人数'].sum()
plt.bar(counts.index, counts)
plt.title('各星期评价数量')
plt.xlabel('星期')
plt.ylabel('评价人数')
plt.show()

# 平均评分前3教师饼图
mean_score_sorted = mean_score.sort_values(ascending=False)
top3 = mean_score_sorted[:3]
total = mean_score_sorted.sum()
top3_rate = top3 / total
plt.pie(top3_rate, labels=top3_rate.index, autopct="%1.1f%%")
plt.title('平均评分前3教师总评分占比')
plt.show()

代码结果

4.png

代码分析

  • 总评分计算:将评分与评价人数相乘,得到加权总评分。
  • 多指标分组聚合:使用agg同时计算平均评分和总评价人数,并重命名列以增强可读性。
  • 星期信息提取:通过dt.weekday提取星期几(0-6),加1转为1-7表示。
  • 饼图展示:选取平均评分最高的三位教师,计算其总评分在全体教师中的占比,使用饼图直观展示。

总结

本文通过四道典型的数据分析题目,系统展示了使用Python进行数据处理、统计分析与可视化的完整流程:

  1. 数据清洗与转换:包括日期格式转换、列运算、类型提取等;
  2. 数据聚合与统计:熟练运用groupbyaggsummean等方法进行多维度统计;
  3. 数据筛选与导出:使用布尔索引筛选数据,并将结果保存为文件;
  4. 数据可视化:涵盖柱状图、折线图、饼图等多种图表类型,直观展示数据分布与趋势;
  5. 相关性分析:使用corr方法计算变量间的相关关系。