电商用户行为数据分析
题目
现有电商平台用户行为数据CSV文件"用户行为.csv",包含字段:"用户ID""浏览时长(分钟)""下单次数""支付金额(元)""用户等级(1-5级)"。请使用Python完成数据读取、分组统计、指标计算和可视化分析。
代码
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 读取数据
data = pd.read_csv("用户行为.csv", encoding="utf-8", index_col="用户ID")
# 1. 计算不同用户等级的平均指标
mean_data = data.groupby("用户等级(1-5级)").agg({
"浏览时长(分钟)":"mean",
"下单次数":"mean",
"支付金额(元)":"mean"
})
mean_data = mean_data.rename(columns={
"浏览时长(分钟)":"平均浏览时长(分钟)",
"下单次数":"平均下单次数",
"支付金额(元)":"平均支付金额(元)"
})
# 2. 计算支付金额的统计指标
states = data['支付金额(元)'].agg(['max', 'min', 'std', 'median'])
# 3. 添加单均支付金额列
data['单均支付金额'] = data['支付金额(元)'] / data['下单次数']
data = data.fillna(0)
# 4. 绘制平均支付金额柱状图
plt.bar(mean_data.index, mean_data['平均支付金额(元)'])
plt.xlabel('用户等级')
plt.ylabel('平均支付金额(元)')
plt.title('不同用户等级的平均支付金额')
plt.show()
代码分析
该案例展示了电商用户行为分析的完整流程。通过groupby()按用户等级分组,使用agg()函数计算平均浏览时长、下单次数和支付金额等关键指标。rename()方法优化了列名可读性,fillna(0)处理了除零导致的缺失值问题。最后通过柱状图直观展示不同等级用户的支付能力差异,为用户分层运营提供数据支持。
餐厅菜品销售数据分析
题目
"餐厅菜品销售.csv"包含字段:"日期""菜品名称""销售份数""菜品单价(元)""菜系(川菜/粤菜/鲁菜)"。需要分析销售额、销售趋势和热门菜品分布。
代码
# 读取餐厅数据
df = pd.read_csv("餐厅菜品销售.csv", encoding="utf-8")
# 1. 计算总销售额
df['总销售额'] = df['销售份数'] * df['菜品单价(元)']
print(f"总销售份数为:{df['销售份数'].sum()}份")
# 2. 按菜系统计总销售额
total = df.groupby('菜系(川菜/粤菜/鲁菜)')['总销售额'].sum()
# 3. 分析每周销售趋势
df['日期'] = pd.to_datetime(df['日期'])
df['星期'] = df['日期'].dt.weekday + 1
total_week = df.groupby('星期')['销售份数'].sum()
total_week.plot()
plt.xlabel('星期')
plt.ylabel('销售份数')
plt.title('一周销售趋势')
plt.show()
# 4. 热门菜品饼图分析
plt.rcParams['font.sans-serif'] = ['SimHei']
top3 = df.nlargest(3, '总销售额')
total_sale = df['总销售额'].sum()
top3_ratio = top3['总销售额'] / total_sale
plt.pie(top3_ratio, labels=top3['菜品名称'], autopct='%1.1f%%')
plt.title('销售额TOP3菜品占比')
plt.show()
代码分析
本案例重点展示餐饮业销售数据分析方法。通过列运算计算总销售额,groupby()实现菜系维度聚合分析。时间序列分析中,pd.to_datetime()转换日期格式,dt.weekday提取星期信息,揭示销售周期性规律。nlargest()快速筛选TOP3菜品,饼图直观展示菜品销售占比,为菜单优化和库存管理提供决策依据。
学生体测数据统计分析
题目
"学生体测数据.csv"包含字段:"学号""姓名""性别""身高(cm)""体重(kg)""800米成绩(秒)""立定跳远(m)"。需要进行BMI计算、性别分组统计和健康筛查。
代码
# 1. 读取体测数据
student_data = pd.read_csv("学生体测数据.csv", encoding="utf-8")
# 2. 计算BMI指数
student_data['BMI'] = student_data['体重(kg)'] / (student_data['身高(cm)']/100) ** 2
# 3. 按性别分组统计
gender_stats = student_data.groupby('性别').agg({
'身高(cm)': ['mean', 'var'],
'体重(kg)': ['mean', 'var'],
'800米成绩(秒)': ['mean', 'var'],
'立定跳远(m)': ['mean', 'var']
})
# 4. 筛选正常BMI学生
normal_bmi_students = student_data[
(student_data['BMI'] >= 18.5) & (student_data['BMI'] <= 23.9)
]
normal_bmi_students.to_csv("正常BMI学生.csv", index=False)
# 5. 立定跳远性别对比
jump_by_gender = student_data.groupby('性别')['立定跳远(m)'].mean()
jump_by_gender.plot(kind='line', marker='o')
plt.xlabel('性别')
plt.ylabel('立定跳远成绩(m)')
plt.title('男女立定跳远成绩对比')
plt.grid(True)
plt.show()
代码分析
该案例展示了教育领域体质健康数据分析的全过程。BMI计算涉及单位换算和公式应用,分组统计使用多指标聚合分析性别差异。通过布尔索引筛选正常BMI范围学生,并导出为CSV文件供后续使用。折线图对比展示男女立定跳远成绩差异,为体育教学和健康管理提供数据支撑。
共享单车骑行数据分析
题目
"共享单车数据.csv"包含字段:"日期""时段(早/中/晚)""骑行次数""平均骑行时长(分钟)""天气(晴/雨/阴)"。需要进行多维度分析和相关性研究。
代码
# 1. 读取单车数据
bike_data = pd.read_csv("共享单车数据.csv", encoding="utf-8")
bike_data['日期'] = pd.to_datetime(bike_data['日期'])
# 2. 天气和时段双重分组分析
weather_time_avg = bike_data.groupby(["天气(晴/雨/阴)", "时段(早/中/晚)"])["骑行次数"].mean()
# 3. 月度骑行次数分析
bike_data['月份'] = bike_data['日期'].dt.month
monthly_rides = bike_data.groupby('月份')['骑行次数'].sum()
monthly_rides.plot(kind='bar')
plt.xlabel('月份')
plt.ylabel('总骑行次数')
plt.title('月度骑行次数分布')
plt.show()
# 4. 骑行时长与次数相关性分析
correlation = bike_data['平均骑行时长(分钟)'].corr(bike_data['骑行次数'])
print(f"平均骑行时长与骑行次数的相关系数: {correlation:.3f}")
# 5. 找出骑行次数TOP5记录
top5_rides = bike_data.nlargest(5, '骑行次数')[['日期', '时段(早/中/晚)', '骑行次数']]
print("骑行次数最多的5条记录:")
print(top5_rides)
代码分析
本案例展示了出行数据的多维度分析方法。双重分组groupby(["天气","时段"])揭示外部因素对骑行行为的影响,月度分析识别季节性变化规律。相关系数计算量化骑行时长与频次的关系,nlargest()快速定位高峰骑行记录。这些分析结果为共享单车运营调度、车辆投放策略优化提供数据依据。