pd.cut()的用法
pd.cut
- 取值是连续的字段, 切成几段,变成类别型字段
- bins 怎么切成几段 定义分段的区间
- labels 切成几段每一段
ABC-XYZ库存管理
- 清楚 ABC XYZ 在库存管理中的含义
- 把商品/用户 按照某些字段 做分类这种思想
- ABC 按照商品销量划分三个类别 划分的依据 二八法则 , 这种思路很常用
- XYZ 和 ABC交叉 从不同维度对商品/用户 进行细分
- 考虑的维度更多, 分群粒度可以更小, 运营可以更加精细
- XYZ 标签 使用变异系数进行划分的
变异系数
- cov = 标准差/平均值 反应了数据的波动情况 / 离散情况
- COV 变异系数越小 说明 数据波动越小, 大多数数据与平均值的差较小
- COV 变异系数越小 说明 数据波动越大, 离散程度越强
- XYZ 库存管理 就是统计了一年12个月的销量,计算每个SKU 销量的变异系数
- 变异系数越大 需求越不稳定, 库存管理越困难
- 变异系数越小, 需求越稳定, 库存管理越容易
ABC-XYZ
- X 结尾的
- AX BX CX
- 需求比较稳定 , 自动补货
- Y 结尾的
- 半自动补货
- 根据ABC的不同
- AY 需要额外关注
- Z结尾的
- 可以采用下单采购
- 有明显季节性, 节日性商品,根据以往经验提前备货
代码实现过程
# 导入要使用的模块
from datetime import timedelta
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style("dark")
sns.set()
# 加载交易数据
data1 = pd.read_excel('data2/online_retail_II.xlsx',sheet_name='Year 2009-2010')
data2 = pd.read_excel('data2/online_retail_II.xlsx',sheet_name='Year 2010-2011')
# 拼接数据
data = pd.concat([data1,data2],ignore_index=True)
data.head()
# 把时间变为datetime类型
data['InvoiceDate'] = pd.to_datetime(data['InvoiceDate'])
# 取一月到十二月的数据
df_12m = data[(data['InvoiceDate'] > '2010-01-01') &
(data['InvoiceDate'] <= '2010-12-31')]
# 更改列名,方便下面分析,并创建新列提取月份信息
df_12m.columns = ['OrderNo', 'sku', 'Description', 'quantity', 'date_created',
'UnitPrice', 'CustomerID', 'Country']
# assign的作用相当于增加新列
df_12m = df_12m.assign(month = df_12m['date_created'].dt.month)
# 从表中去掉退货的商品
df_12m = df_12m.query('quantity>0 & UnitPrice>0')
# 为了快速了解数据集中的季节性,使用 Seaborn 绘制每月销售量的柱状图
f, ax = plt.subplots(figsize=(20,8))
ax = sns.barplot(x='month',
y='quantity',
data=df_12m,
palette="Blues_d").set_title("Quantity by month",fontsize=15)
# 创建销售收入字段,查看订单价值在一年中的变化情况
df_12m = df_12m.assign(revenue = df_12m['quantity'] * df_12m['UnitPrice'])
# 绘图
f,ax = plt.subplots(figsize=(20