目录
背景
对于零售行业来讲,无论是跨境电商还是传统零售商,库存的高低决定企业流动资产的高低,库存的流动速度决定企业现金流动是否健康。不同的企业会有不同的衡量标准,也会在不同的时间段处于不同的状态。财务上有很多指标可以在整个公司的维度监控库存水平高低,但如果细致到SKU这个层面的差异化分析,则会衍生许多标准问题以及工作量。本文旨在探究使用非监督学习的方法,从数据的整理到最终的可视化,如何实现零售行业的库存监控问题。
第一部分 - 数据整理
1. 数据录入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import gridspec
from math import ceil
# 读取数据
df = pd.read_csv('inventory.csv')
# 由于数据有重复,删除重复的数据(数据中包含产品分仓库的明细数据以及仓库栏为‘All’的加总数据)
df = df[df['Warehouse'] != 'All']
# 显示头5行数据
df.head()
Part Number Item Number Warehouse Total On Hand \
0 BAILLIE WALNUT BF481825.39901727 KY - Hebron 0
1 BAILLIE BEECH BF481825.39901731 KY - Hebron 0
2 NIELSEN BROWN PU BF763074.46849385 KY - Hebron 0
3 Scargill Mint BF767982.46854251 KY - Hebron 0
4 Scargill Blue BF767982.46854254 KY - Hebron 34
Total Available Total Unavailable Total On Transfer Qty Allocated \
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 1 33 0
Total On Order Qty Received(12 Months) Qty Shipped (30 Days) \
0 0 201 0
1 0 0 0
2 0 0 0
3 0 0 0
4 0 170 0
Qty Reserved Qty Unpickable Qty On Hold Qty Unprocessed Cycle Count \
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 0 0 1 0
Qty Unprocessed Adjustment
0 0
1 0
2 0
3 0
4 0
2. 清洗数据
# 检查数据,清洗
tab_info = pd.DataFrame(df.dtypes).T.rename(index={0:'column Type'})
tab_info = tab_info.append(pd.DataFrame(df.isnull().sum()).T.rename(index={0:'null values (nb)'}))
tab_info = tab_info.append(pd.DataFrame(df.isnull().sum()/df.shape[0]*100).T.
rename(index={0: 'null values (%)'}))
tab_info