物流数据分析
物流数据分析报告
一、项目背景&分析思路:
项目背景:某公司共向6个地区售卖6种货品,该项目以该公司2016年7月至12月的销售数据为数据集,通过分析找到其可能存在的问题和可以优化的地方。
分析思路:根据“人货场”的分析方法,提出以下三个问题:
1)从人的维度,配送服务是否存在问题?
2)从货的维度,货品质量是否存在问题?
3)从场的维度,是否存在具有潜力的区域?
二、结论先行:
1.货品4销往西北、货品2销往马来西亚的路线时效性存在较大问题,急需提升时效性;
2.货品1、2、4的质量存在较大问题,需要增加抽检比例,规范质检流程和标准;
3.可加强向华东地区推广货品2的力度和投入,同时货品2在马来西亚的时效性差导致拒收率较高,考虑到成本原因,可减少投入;
三、数据清洗
#数据读入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] =False #显示符号
from PIL import Image
from IPython.display import display
df = pd.read_csv(r'C:\Users\13779\Desktop\物流.csv', encoding='gbk')
df.head()
订单号 | 订单行 | 销售时间 | 交货时间 | 货品交货状况 | 货品 | 货品用户反馈 | 销售区域 | 数量 | 销售金额 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | P096311 | 10 | 2016/7/30 | 2016/9/30 | 晚交货 | 货品3 | 质量合格 | 华北 | 2.0 | 1052,75元 |
1 | P096826 | 10 | 2016/8/30 | 2016/10/30 | 按时交货 | 货品3 | 质量合格 | 华北 | 10.0 | 11,50万元 |
2 | NaN | 20 | 2016/8/30 | 2016/10/30 | 按时交货 | 货品3 | 质量合格 | 华北 | 10.0 | 11,50万元 |
3 | P097435 | 10 | 2016/7/30 | 2016/9/30 | 按时交货 | 货品1 | 返修 | 华南 | 2.0 | 6858,77元 |
4 | P097446 | 60 | 2016/11/26 | 2017/1/26 | 晚交货 | 货品3 | 质量合格 | 华北 | 15.0 | 129,58元 |
#查看表信息
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1161 entries, 0 to 1160
Data columns (total 10 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 订单号 1159 non-null object
1 订单行 1161 non-null int64
2 销售时间 1161 non-null object
3 交货时间 1161 non-null object
4 货品交货状况 1159 non-null object
5 货品 1161 non-null object
6 货品用户反馈 1161 non-null object
7 销售区域 1161 non-null object
8 数量 1161 non-null float64
9 销售金额 1161 non-null object
dtypes: float64(1), int64(1), object(8)
memory usage: 90.8+ KB
#1.删除无用列
del df['订单行']
#2.整理列--时间列
df['销售时间'] = pd.to_datetime(df['销售时间'])
df['交货时间'] = pd.to_datetime(df['交货时间'])
df.head()
订单号 | 销售时间 | 交货时间 | 货品交货状况 | 货品 | 货品用户反馈 | 销售区域 | 数量 | 销售金额 | |
---|---|---|---|---|---|---|---|---|---|
0 | P096311 | 2016-07-30 | 2016-09-30 | 晚交货 | 货品3 | 质量合格 | 华北 | 2.0 | 1052,75元 |
1 | P096826 | 2016-08-30 | 2016-10-30 | 按时交货 | 货品3 | 质量合格 | 华北 | 10.0 | 11,50万元 |
2 | NaN | 2016-08-30 | 2016-10-30 | 按时交货 | 货品3 | 质量合格 | 华北 | 10.0 | 11,50万元 |
3 | P097435 | 2016-07-30 | 2016-09-30 | 按时交货 | 货品1 | 返修 | 华南 | 2.0 | 6858,77元 |
4 | P097446 | 2016-11-26 | 2017-01-26 | 晚交货 | 货品3 | 质量合格 | 华北 | 15.0 | 129,58元 |
#2.整理列--销售金额列
#去掉','
df['销售金额'] = df['销售金额'].str.replace(',','')
#将单位万元转换为元,并将销售额转换为float类型
df['销售金额'] = df['销售金额'].apply(lambda x: float(x[:-2])*10000 if x.endswith('万元') else float(x[:-1]))
df.head()
订单号 | 销售时间 | 交货时间 | 货品交货状况 | 货品 | 货品用户反馈 | 销售区域 | 数量 | 销售金额 | |
---|---|---|---|---|---|---|---|---|---|
0 | P096311 | 2016-07-30 | 2016-09-30 | 晚交货 | 货品3 | 质量合格 | 华北 | 2.0 | 105275.0 |
1 | P096826 | 2016-08-30 | 2016-10-30 | 按时交货 | 货品3 | 质量合格 | 华北 | 10.0 | 11500000.0 |
2 | NaN | 2016-08-30 | 2016-10-30 | 按时交货 | 货品3 | 质量合格 | 华北 | 10.0 | 11500000.0 |
3 | P097435 | 2016-07-30 | 2016-09-30 | 按时交货 | 货品1 | 返修 | 华南 | 2.0 | 685877.0 |
4 | P097446 | 2016-11-26 | 2017-01-26 | 晚交货 | 货品3 | 质量合格 | 华北 | 15.0 | 12958.0 |
#2.整理列--数量列
df['数量'] = df['数量'].astype(int)
#3.检查并删除重复值
df.duplicated().sum()
87
#共87条重复值,数量不多,进行删除
df.drop_duplicates(inplace=True)
#4.缺失值处理
df.isnull().sum()
订单号 2
销售时间 0
交货时间 0
货品交货状况 2
货品 0
货品用户反馈 0
销售区域 0
数量 0
销售金额 0
dtype: int64
#订单号、货品交货状况分别缺失2、2个,数量不多进行删除
df.dropna(inplace=True)
df.isnull().sum()
订单号 0
销售时间 0
交货时间 0
货品交货状况 0
货品 0
货品用户反馈 0
销售区域 0
数量 0
销售金额 0
dtype: int64
#5.异常值检查--数据正常,无需处理
df.describe()
数量 | 销售金额 | |
---|---|---|
count | 1070.000000 | 1.070000e+03 |
mean | 79.531776 | 1.293545e+05 |
std | 609.528716 | 1.153181e+06 |
min | 1.000000 | 0.000000e+00 |
25% | 1.000000 | 3.093750e+03 |
50% | 1.000000 | 9.624500e+03 |
75% | 4.000000 | 3.635475e+04 |
max | 11500.000000 | 3.270000e+07 |
#重置索引
df = df.reset_index().drop('index', axis=1)
#处理后的数据预览
df.head()
订单号 | 销售时间 | 交货时间 | 货品交货状况 | 货品 | 货品用户反馈 | 销售区域 | 数量 | 销售金额 | |
---|---|---|---|---|---|---|---|---|---|
0 | P096311 | 2016-07-30 | 2016-09-30 | 晚交货 | 货品3 | 质量合格 | 华北 | 2 | 105275.0 |
1 | P096826 | 2016-08-30 | 2016-10-30 | 按时交货 | 货品3 | 质量合格 | 华北 | 10 | 11500000.0 |
2 | P097435 | 2016-07-30 | 2016-09-30 | 按时交货 | 货品1 | 返修 | 华南 | 2 | 685877.0 |
3 | P097446 | 2016-11-26 | 2017-01-26 | 晚交货 | 货品3 | 质量合格 | 华北 | 15 | 12958.0 |
4 | P097446 | 2016-11-26 | 2017-01-26 | 晚交货 | 货品3 | 拒货 | 华北 | 15 | 3239.0 |
#将文件存为wuliu.csv
df.to_csv(r'C:\Users\13779\Desktop\wuliu.csv', index=False)
四、可视化分析(借助Tableau软件)
1.配送服务分析
图表数据解释:
以时间维度这个图为例,条形图代表某月份的按时交货(晚交货)的单量;
比例数据代表某月份的按时交货(晚交货)的单量占该月总交货单量的比例;
配送服务分析结果汇总:
从时间维度来看,第四季度的晚交货率明显高于第三季度的晚交货率,猜测是由于季节原因导致的;
从货品维度来看,货品4的晚交货情况极其严重,晚交货率达到75.86%;
从销售区域维度来看,西北地区的晚交货率十分严重,晚交货率达到72.13%;
结合货品和区域维度来看,货品4只销往西北且晚交货率极其严重,急需解决;
2.货品质量分析
货品质量分析结果汇总:
货品1、2、4的不合格率较高,1和4的返修率极高,2的返修率和拒货率都较高,质量存在一定问题,需要及时改善;
货品2共销往马来西亚12单,质量合格的仅1单,返修3单,拒货8单,同时结合配送服务分析,货品2在马来西亚的晚交货率也极高,由此可推得马来西亚人对物流时效性要求较高;
3.潜力区域分析
注:以上3个图表中的数量均是指商品数量
潜力区域分析结果汇总:
从时间维度来看,货品2在10月和12月的销量有了显著增长,但在其他月份的销量较低,可能是因为开发了新市场或是加强了营销力度;
结合时间&区域维度的分析来看,推断是加大了营销力度,而非开发了新市场;
从销售区域维度来看,货品1有三个销售区域,货品2对应两个销售区域,货品3、4、5、6均只有一个销售区域;
结论:华东地区具有潜力,后续可加强向华东地区推广货品2的力度,同时货品2在马来西亚的时效性较差,导致拒收率较高,可适当减少投入来节约成本;