超市订单数据分析

1 实验环境

可自主选择开发工具

2 实验说明

实验:超市数据分析

2.1 实验目的

  1. 能够使用pandas分析数据
  2. 能够使用matplotlib制作统计图表

2.2 实验要求

2.2.1 按年份汇总各地区的销售量和利润总额; 绘制柱形图

结果样例:

2.2.2 统计各地区退货率,以柱形图展示

  • 结果样例

2.2.3 用饼图汇总退货订单

  • 结果样例:

2.3 实验报告

按照指定实验报告模版写

2.3.1 Word文档

  1. 文件命名格式: 内容_实验报告_姓名学号, 例如: 超市订单分析_实验报告_张三001

3 实验步骤

3.1 读取数据

In [1]:

3.2 预览数据

In [2]:

Out[2]:

ID订单 ID订单日期发货日期邮寄方式客户 ID客户名称细分城市省/自治区地区产品 ID类别子类别产品名称销售额数量折扣利润
01US-2014-13571442014-04-282014-04-30二级曾惠-14485曾惠公司杭州浙江华东办公用-用品-10002717办公用品用品Fiskars 剪刀, 蓝色129.69620.4-60.704
12CN-2014-19737892014-06-162014-06-20标准级许安-10165许安消费者内江四川西南办公用-信封-10004832办公用品信封GlobeWeis 搭扣信封, 红色125.44020.042.560

In [3]:

Out[3]:

订单 ID退回
0CN-2012-1196810
1US-2012-3964185

In [4]:

Out[4]:

地区地区经理
0东北楚杰
1中南范彩

3.3 任务一:按年份汇总各地区的销售量和利润总额; 绘制柱形图

由于订单日期是以日为单位的,所以处理以年汇总需要处理订单日期

3.3.1 处理订单日期

  • 需要将订单日期处理只保留年份
  • 使用apply()函数可以批量处理

3.3.2 按年份总汇销售额和利润

  • groupby()函数按订单年份和地区分组
  • sum()函数对销售额和利润求和
  • unstack()函数生成交叉表

3.3.3 绘柱形图

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定使用中文字符的字体,这里以“SimHei”为例
df = pd.read_excel('data/商品订单数据.xls','订单')#文件地址记得修改成自己的

df['订单日期'] = pd.to_datetime(df['订单日期'])
df['年'] = df['订单日期'].dt.year

sales_by_region = df.groupby(['年', '地区'])['利润'].sum()

sales_pivot = sales_by_region.reset_index().pivot(index='年', columns='地区', values='利润')
sales_pivot = sales_pivot[['东北', '中南', '华东', '华北', '西北', '西南']] # 地区名称按实际数据修改
sales_pivot = sales_pivot.sort_values('年')
# 设置颜色图例
colors = ['#FFA07A', '#87CEFA', '#98FB98', '#FFD700', '#9370DB', '#FFC0CB'] # 每个地区的颜色
ax = sales_pivot.plot(kind='bar', color=colors)
ax.legend(loc='upper left')
plt.show()

 

mport pandas as pd
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定使用中文字符的字体,这里以“SimHei”为例
df = pd.read_excel('data/商品订单数据.xls','订单')

df['订单日期'] = pd.to_datetime(df['订单日期'])
df['年'] = df['订单日期'].dt.year

sales_by_region = df.groupby(['年', '地区'])['销售额'].sum()

sales_pivot = sales_by_region.reset_index().pivot(index='年', columns='地区', values='销售额')
sales_pivot = sales_pivot[['东北', '中南', '华东', '华北', '西北', '西南']] # 地区名称按实际数据修改
sales_pivot = sales_pivot.sort_values('年')
# 设置颜色图例
colors = ['#FFA07A', '#87CEFA', '#98FB98', '#FFD700', '#9370DB', '#FFC0CB'] # 每个地区的颜色
ax = sales_pivot.plot(kind='bar', color=colors)
ax.legend(loc='upper left')
plt.show()

 

链接:https://pan.baidu.com/s/14IijPVkea8WfkcIZtylfcw?pwd=78dd 
提取码:78dd

 !!测试的数据!!

3.4 任务二: 统计各地区退货率,并绘图展示

3.4.1 将订单表的地区信息与退货表融合

注意:记录对应的是商品,所以要去除同一地区重复的订单ID

  • drop_duplicates()函数可以去除重复数据
  • merge()函数融合数据

3.4.2 汇总各地区的退货订单数量

  • 按地区分组
  • 根据订单ID统计退货订单数量 (count()函数可以统计)
  • 对count()之后的数据处理为新的DataFrame(可以组装成字典再转DataFrame)会更好一些

3.4.3 按地区分组统计订单数

  • 按地区分组
  • 根据订单ID统计订单数量

3.4.4 计算退货率

  • 各地区的退货订单数据除于订单总数

3.4.5 将销售人员表中的地区经理融合

3.4.6 绘图(柱形图和饼图)

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定使用中文字符的字体,这里以“SimHei”为例

# 读取订单、退货和销售人员附表
orders = pd.read_excel('data/商品订单数据.xls', sheet_name='订单')
returns = pd.read_excel('data/商品订单数据.xls', sheet_name='退货')
sales = pd.read_excel('data/商品订单数据.xls', sheet_name='销售人员')

# 统计每个地区对应的订单数量
order_counts = orders.groupby('地区')['订单ID'].nunique()

# 筛选出在退货表中出现的订单ID,并按地区分类汇总
return_orders = orders[orders['订单ID'].isin(returns['订单ID'])]
return_counts = return_orders.groupby('地区')['订单ID'].nunique()

# 计算每个地区的退货率,并将结果保存到一个新的 DataFrame 中
ratios = pd.DataFrame({'订单数': order_counts, '退货数': return_counts})
ratios['退货率'] = ratios['退货数'] / ratios['订单数']

# 根据销售人员中地区对应的销售人员进行互补配对
region_to_manager = sales.set_index('地区')['地区经理'].to_dict()
ratios['地区经理'] = ratios.index.map(region_to_manager)

# 将地区经理设置为索引,以便将其用作标签
ratios = ratios.set_index('地区经理')

# 绘制柱状图
ax = ratios.plot(kind='bar', y='退货率', legend=False)
plt.ylabel('退货率')
plt.title('各地区退货率统计')

# 修改纵坐标标签为销售经理
ax.set_xticklabels(ratios.index, rotation=0)

# 在每个柱形上显示数值
ax.yaxis.set_major_locator(MaxNLocator(integer=True))
for i, val in enumerate(ratios['退货率']):

   ax.text(i, val, f'{val:.3f}', horizontalalignment='center', fontsize=8)
plt.show()

import pandas as pd
import matplotlib.pyplot as plt

# 读取订单和退货表
orders = pd.read_excel('data/商品订单数据.xls', sheet_name='订单')
returns = pd.read_excel('data/商品订单数据.xls', sheet_name='退货')
sales = pd.read_excel('data/商品订单数据.xls', sheet_name='销售人员')

# 将销售人员表中地区对应的销售人员进行互补配对
region_to_manager = sales.set_index('地区')['地区经理'].to_dict()

# 筛选出在退货表中出现的订单ID,并按地区分类汇总
return_orders = orders[orders['订单ID'].isin(returns['订单ID'])]
return_counts = return_orders.groupby('地区')['订单ID'].nunique()

# 将地区名字替换为地区经理的名字
return_counts.index = return_counts.index.map(region_to_manager)

# 绘制饼图
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定使用中文字符的字体,这里以“SimHei”为例
plt.figure(figsize=(8, 8))
plt.pie(return_counts, labels=return_counts.index, autopct='%1.1f%%', startangle=90, counterclock=False)

# 设置标题
plt.title('汇总退货订单')

plt.show()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值