本文将基于四个实际场景的数据分析题目,使用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()
代码结果
代码分析
- 日期处理:使用
pd.to_datetime将日期列转为datetime格式,便于提取月份。 - 销售额计算:通过列运算直接生成销售额列,简洁高效。
- 分组统计:利用
groupby对商品类别和会员等级进行聚合计算,分别使用sum和mean方法。 - 可视化:
- 月度销售额使用
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)
代码结果
代码分析
- 实际支付金额计算:通过列间运算直接生成新列,公式清晰。
- 聚合统计:使用
groupby与agg一次性计算总销量和总金额。 - 描述性统计:
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()
代码结果
代码分析
- 总分与平均分计算:使用
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()
代码结果
代码分析
- 总评分计算:将评分与评价人数相乘,得到加权总评分。
- 多指标分组聚合:使用
agg同时计算平均评分和总评价人数,并重命名列以增强可读性。 - 星期信息提取:通过
dt.weekday提取星期几(0-6),加1转为1-7表示。 - 饼图展示:选取平均评分最高的三位教师,计算其总评分在全体教师中的占比,使用饼图直观展示。
总结
本文通过四道典型的数据分析题目,系统展示了使用Python进行数据处理、统计分析与可视化的完整流程:
- 数据清洗与转换:包括日期格式转换、列运算、类型提取等;
- 数据聚合与统计:熟练运用
groupby、agg、sum、mean等方法进行多维度统计; - 数据筛选与导出:使用布尔索引筛选数据,并将结果保存为文件;
- 数据可视化:涵盖柱状图、折线图、饼图等多种图表类型,直观展示数据分布与趋势;
- 相关性分析:使用
corr方法计算变量间的相关关系。