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,8))
ax = sns.barplot(x='month',y='revenue',data=df_12m,palette='Blues_d').set_title('Revenue by month",fontsize=15')

构建xyz模型

# 先将数据按sku 和 month分组,计算不同sku每个月的总销量df_12m_units = df_12m.groupby(['sku', 'month'])\
[['quantity']].sum().reset_index()# 上面的数据是长格式,而不是宽格式,需要对其进行转换。 我们使用 pivot() 透视表将每个 SKU 最为行索引,
# 将月份作为列,每月销售数量最为值
# add_prefix意思是在列后面加一个字符
df_12m_units = df_12m_units.pivot\
(index='sku', columns='month', values='quantity')\
.add_prefix('m').reset_index().fillna(0)# 通过dataframe的.std(axis=1) 来计算每行中值的标准差
df_12m_units['std_demand'] = df_12m_units\
[['m1','m2','m3','m4','m5','m6','m7','m8','m9','m10','m11','m12']].std(axis=1)# 接下来我们需要计算每个sku的年需求量,实际就是每月数据求和sum()
df_12m_units = df_12m_units.assign(totall_demand = df_12m_units[['m1','m2','m3','m4','m5','m6','m7','m8','m9','m10','m11','m12']]\
.sum(axis=1))# 计算每月的平均需求
df_12m_units = df_12m_units.assign\
(avg_demand = df_12m_units['totall_demand']/12)# 计算需求变异系数(Coefficient of Variation)df_12m_units = df_12m_units.assign(cov_demand =
df_12m_units['std_demand'] / df_12m_units['avg_demand'])# 对变异系数进行排序
df_12m_units.sort_values('cov_demand', ascending=True).head()#  绘制 CV的直方图,
# 查看整个产品系列中变异系数的分布,CV值>1的说明需求变化比较剧烈f, ax = plt.subplots(figsize=(15, 6))
ax = sns.distplot(df_12m_units['cov_demand']).set_title("Coefficient ofVariation",fontsize=15)# 划分XYZdef xyz_class_product(cov):if cov <= 0.5:return 'X'elif cov > 0.5 and cov <=1.0:return 'Y'else:return 'Z'# 调用函数df_12m_units['xyz_class'] = df_12m_units['cov_demand'].apply(xyz_class_product)# 查看xyz的sku个数
df_12m_units.xyz_class.value_counts()# 对xyz_class列进行分组,df_12m_units.groupby('xyz_class').agg(total_skus = ('sku', 'nunique'),total_demand = ('totall_demand', 'sum'),std_demand = ('std_demand', 'mean'),avg_demand = ('avg_demand', 'mean'),avg_cov_demand = ('cov_demand', 'mean'))# 对xyz_class分组,求各个月份的总量
df_monthly = df_12m_units.groupby('xyz_class').agg(m1=('m1', 'sum'),m2=('m2', 'sum'),m3=('m3', 'sum'),m4=('m4', 'sum'),m5=('m5', 'sum'),m6=('m6', 'sum'),m7=('m7', 'sum'),m8=('m8', 'sum'),m9=('m9', 'sum'),m10=('m10', 'sum'),m11=('m11', 'sum'),m12=('m12', 'sum'),)# 把列表转成unstack格式, 在修改列
df_monthly_unstacked = df_monthly.unstack('xyz_class').to_frame()
df_monthly_unstacked = df_monthly_unstacked.reset_index().rename(columns={'level_0':'month', 0: 'demand'})
df_monthly_unstacked.head()# 绘图f, ax = plt.subplots(figsize=(15, 6))
ax = sns.barplot(x="month",y="demand",\
data=df_monthly_unstacked[df_monthly_unstacked['xyz_class']=='X'],palette="Blues_d")\
.set_title("X class demand by month",fontsize=15)

对ABC库存分析

# 运行聚合来计算每个 SKU 的收入指标。
df_skus = df_12m.groupby('sku').agg(unique_purchases = ('sku', 'nunique'),total_units = ('quantity', 'sum'),total_revenue = ('revenue', 'sum')).\
sort_values('total_revenue', ascending=False).reset_index()#计算累计总额 ,增加一列
df_skus['revenue_cumsum'] = df_skus['total_revenue'].cumsum()# 计算总销售额,增加一列
df_skus['revenue_total'] = df_skus['total_revenue'].sum()# 计算每个 SKU 产生的累积收入贡献百分比
df_skus['revenue_running_percentage'] = df_skus['revenue_cumsum']/df_skus['revenue_total'] * 100# 创建一个函数给贡献百分比打上标签
def abc_classfy_product(x):if x > 0 and x <= 80:return 'A'elif x > 80 and x <= 90:return 'B'else:return 'C'# 调用函数 abc_classfy_product
df_skus['abc_class'] = df_skus['revenue_running_percentage'].apply(abc_classfy_product)# 给贡献百分比标签排序
df_skus['abc_rank'] = df_skus['revenue_running_percentage'].rank().astype(int)# 来检查ABC每个类的统计数据
df_abc = df_skus.groupby('abc_class').agg(total_skus=('sku', 'nunique'),total_units=('total_units', sum),total_revenue=('total_revenue', sum)).reset_index()# 加一个绘图的模块包用来显示文字
plt.rcParams['font.sans-serif'] = 'SimHei' # 加一个忽略警告
import warnings
warnings.filterwarnings('ignore')# 以下对ABC每个类别的销售收入进行可视化f, ax = plt.subplots(figsize=(30,10))
ax = sns.barplot(x='abc_class',y='total_revenue',data=df_abc,palette='Blues_d').set_title('ABC三类的贡献总额占比',fontsize=30)

ABC-XYZ库存分析

# 从新定义df_abc
df_abc = df_skus[['sku','abc_class','abc_rank','total_revenue']]# 复制一份df_12m_units表
df_xyz = df_12m_units.copy()# 将两个表进行拼接
df_abc_xyz = df_abc.merge(df_xyz, on='sku', how='left')# 将 abc和xyz进行组合df_abc_xyz['abc_xyz_class'] = df_abc_xyz['abc_class'].astype(str) + \
df_abc_xyz['xyz_class'].astype(str)# 将abc_xyz_class列进行分组,查看每个组合类中的属性值df_abc_xyz_summary = df_abc_xyz.groupby('abc_xyz_class').agg(total_skus=('sku', 'nunique'),total_demand=('totall_demand', sum),avg_demand=('avg_demand', 'mean'),total_revenue=('total_revenue', sum)).reset_index()# 用seaborn绘图,观察abc_xyz_class列和total_skus之间的关系
f, ax = plt.subplots(figsize=(15, 6))
ax = sns.barplot(x="abc_xyz_class",y="total_skus",data=df_abc_xyz_summary,palette="Blues_d").set_title("SKUs by ABC-XYZ class",fontsize=15)

pivot / pivot_table / crosstab的区别

  • pivot_table 和 cross_tab 可以互相替换
  • pivot_table 是pandas 和 dataframe的方法
  • cross_tab 只是 pandas的方法

pivot 不能聚合 pivot_table 和 cross_tab 都可以聚合

机器学习--库存管理方法相关推荐

  1. 零售店库存管理有哪些方法?有哪些零售店库存管理软件可以使用?

    对于很多零售店老板来说,库存管理是比较头疼的一件事,要么就是库存积压过多卖不出去,要么就是商品种类不够,销量跟不上去. 做零售就是做库存,接下来我结合自己多年在零售行业的经验,为大家分享几点简单实用但 ...

  2. 浅析伊利集团分销及库存管理信息系统的改造

    作者:熊文 可能是女孩子的缘故,对冰激凌有着特别的偏好,也特别在意.知道伊利也是因为一次偶然的机会尝到了"苦咖啡"的浓重巧克力味道,后来才发现基本上在北京所有的商店或小卖部里,只要 ...

  3. 如何使用手机APP进行库房的库存管理

    库房的库存管理方法有很多,刚开始是使用EXCEL这种电子表格进行处理的,在EXCEL或ACCESS中开发一些VBS脚本可以实现简单的出入库单据的库存计算工作,但是一些复杂一点的功能使用VBS来开发会比 ...

  4. 利用条形码系统进行库存管理

    库存管理是无数企​​业日常运营的重要组成部分.尤其是较小的公司,通常从手写库存清单或在 Excel 电子表格中手动输入开始.然而,从长远来看,条形码库存系统效率更高,可以防止错误的数据输入,从而避免经 ...

  5. java jmi的基本思想_联合库存管理(jmi)的定义及主要思想是什么

    近年来出现了一种新的供应链库存管理方法--联合库存管理.这种库存管理策略打破了各自为政的库存管理模式,有效地控制了供应链的库存风险,是一种新的有代表性的库存管理思想. 联合库存管理(Jointly M ...

  6. 传统的库存管理与看板管理(JIT)(zt)

    我国企业普遍存在流动资金短缺,其原因是形成多年的"三角关系",还有的就是因为企业的库存量过多,占用了过高的流动资金,据资料显示库存占用的资金占流动资金的30-40%,为了缓冲流动资 ...

  7. 方法的运用_运用正确管理方法缩减库存,助力企业发展

    对于很多电商以及物流企业来讲"库存是魔鬼",我们要尽可能地消灭库存,因为它占用了企业大量资金.库存一旦增多,企业的运营成本随之增加,利润降低.如何运用正确管理方法缩减库存,助力企业 ...

  8. 茶楼软件如何对库存进行管理?有哪些管理方法?

    茶楼软件会对库存进行管理,在进行实际管理的过程当中将有各种不同的管理方法,如果我们要进行管理的话,基本上能够对所有产品的库存进行管理,做到账实一致,而且在财务管理这一方面还是比较方便的. 1.实时库存 ...

  9. OR Paper Weekly (2)| 深度强化学习在库存管理、自动驾驶等领域的应用;MS主编看管理科学发展历史与展望

    作者:徐思坤,姜凯雯 精选论文(一) 论文题目:  Can Deep Reinforcement Learning Improve Inventory Management? Performance ...

最新文章

  1. 【JavaWeb】Access restriction The type is not accessible due to restriction on required library
  2. python买什么书好-Python入门经典书籍有哪些?有这三本就够了
  3. 注册中心—组件—ZooKeeper
  4. C# 使用Awaiter
  5. antlr 语言 库_关于ANTLR的通用库的需求:使用反射来构建元模型
  6. 代码大全 MSIL语言程序设计
  7. linux查找修改时间在三天前,ECS linux 中查找最近一次修改过的文件的具体操作
  8. sqlalchemy连接mysql数据库_史上超详细的flask_sqlalchemy连接mysql数据库
  9. Python 实现最简单的元胞自动机
  10. python创意小作品代码-超全代码详解 Python 制作精美炫酷图表教程
  11. 【通信原理 入坑之路】—— 深入理解奈奎斯特第一准则与码间串扰
  12. stvd watch 实时变量查看
  13. Rpg maker mv角色扮演游戏制作大师简介
  14. 摄影基础知识——白平衡
  15. Jenkins系列之——第一章 Jenkins下载及安装
  16. 计算机组成原理7-主存储器—存储器与CPU的连接
  17. 谈谈我的佛系增长之道
  18. 计算机名更改后无法进入局域网,win10系统局域网计算机名称更改的恢复办法
  19. 05全球IP归属地查询工具
  20. wpf 语音通话_WPF---语音合成与语音识别

热门文章

  1. Agora 在线语音聊天室开发上手和源码解读 | 掘金技术征文
  2. [Mozilla]Ajax快速入门
  3. hnu实验七字符串10. 小希练打字
  4. arch linux必备软件,ArchLinux常用软件
  5. 7-14 英文单词排序
  6. 13.5.4 CROSS JOIN语句
  7. 双向可控硅控制电磁铁实验
  8. 5g和远程医疗的关系_远程医疗,未来和不断变化的习惯
  9. fixedsys字体 win7_2008R2及Win7字体完美修改方法
  10. 飞鸽快信微信消息-LINUX服务器告警、状态监控预警、程序报警提醒等消息实时推送工具