Teqing Cai

Value Investing | Data Science


  • 首页

  • 笔记

  • 归档

  • 搜索
close

物流数据分析

时间: 2022-01-29   |   阅读: 4270 字 ~9分钟

需要解决的问题:
 1)配送服务是否存在问题
 2)是否存在尚有潜力的销售区域
 3)商品是否存在质量问题
数据:物流数据,含订单号,订单行,销售时间,交货时间,货品交货状况,货品,货品用户反馈,销售区域数量,销售金额10个字段信息
实现路径:描述性分析,多维度分析,指标分析


import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei' #设置中文显示

data =pd.read_csv('data_wuliu.csv',encoding='gbk')
data.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元
data.info()
#从inf可以看出数据存在缺失值及销售金额不是数值
<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   数量      1157 non-null   float64
 9   销售金额    1161 non-null   object 
dtypes: float64(1), int64(1), object(8)
memory usage: 90.8+ KB
#数据预处理 
data.columns=data.columns.str.strip()
#删除重复值
data.drop_duplicates(keep='first',inplace =True)
#删除缺失值与没用的列数据
data.dropna(axis=0,how='any',inplace=True)
data.drop(columns='订单行',inplace=True,axis=1)
data.reset_index(drop=True,inplace=True)
#'销售金额'单位统一等格式转换
#定义函数
def data_deal(num):
    if num.find('万元')!=-1:
        new_num=float(num[:num.find('万元')].replace(',',''))*10000
        pass
    else:
        new_num=float(num[:num.find('元')].replace(',',''))
    return new_num
data['销售金额']=data['销售金额'].map(data_deal)
data.head()
订单号 销售时间 交货时间 货品交货状况 货品 货品用户反馈 销售区域 数量 销售金额
0 P096311 2016-7-30 2016-9-30 晚交货 货品3 质量合格 华北 2.0 105275.0
1 P096826 2016-8-30 2016-10-30 按时交货 货品3 质量合格 华北 10.0 11500000.0
2 P097435 2016-7-30 2016-9-30 按时交货 货品1 返修 华南 2.0 685877.0
3 P097446 2016-11-26 2017-1-26 晚交货 货品3 质量合格 华北 15.0 12958.0
4 P097446 2016-11-26 2017-1-26 晚交货 货品3 拒货 华北 15.0 3239.0
#剔除异常值<=0的数据
data =data[data['销售金额'] > 0]
data.describe() #数值型特征的描述性统计
#可以看出销售金额的均值远远大于其中位数,相差了两个数据级 可能存在异常的极大值或数据严重右偏 
数量 销售金额
count 1145.000000 1.145000e+03
mean 76.134934 1.224557e+05
std 589.669861 1.115081e+06
min 1.000000 5.100000e+01
25% 1.000000 2.946000e+03
50% 1.000000 9.486000e+03
75% 4.000000 3.577300e+04
max 11500.000000 3.270000e+07
data['销售时间']=pd.to_datetime(data['销售时间'])
#新增列:销售月份
data['销售月份']=data['销售时间'].apply(lambda x : x.month)
数据分析及可视化
# 一.配送服务是否存在问题
data['货品交货状况']=data['货品交货状况'].str.strip()
# a.月份维度
data1 =data.groupby(['销售月份','货品交货状况']).size().unstack() #unstack转换成表格形式显示
data1['按时交货率']=data1['按时交货']/(data1['按时交货']+data1['晚交货'])
# 从按时交货率来看第四季度普遍低于第三季度 猜测可能跟季节气候有关
# b.销售区域维度
data1 =data.groupby(['销售区域','货品交货状况']).size().unstack() #unstack转换成表格形式显示
data1['按时交货率']=data1['按时交货']/(data1['按时交货']+data1['晚交货'])
data1.sort_values(by='按时交货率',ascending=False)
# 以下可以看出西北地区存在严重延迟交货的问题,需要引起重点关注 急需解决
货品交货状况 按时交货 晚交货 按时交货率
销售区域
泰国 183 4 0.978610
马来西亚 310 16 0.950920
华南 10 1 0.909091
华北 226 27 0.893281
华东 268 39 0.872964
西北 17 44 0.278689
# c.货品维度
data1 =data.groupby(['货品','货品交货状况']).size().unstack() #unstack转换成表格形式显示
data1['按时交货率']=data1['按时交货']/(data1['按时交货']+data1['晚交货'])
data1.sort_values(by='按时交货率',ascending=False)
# 货品4晚交货情况非常严重,其余货品交货情况相对较好
货品交货状况 按时交货 晚交货 按时交货率
货品
货品5 183 4 0.978610
货品6 309 7 0.977848
货品1 27 2 0.931034
货品3 212 26 0.890756
货品2 269 48 0.848580
货品4 14 44 0.241379
# d.货品和销售区域相结合的维度
data1 =data.groupby(['货品','销售区域','货品交货状况']).size().unstack() #unstack转换成表格形式显示
data1['按时交货率']=data1['按时交货']/(data1['按时交货']+data1['晚交货'])
data1.sort_values(by='按时交货率',ascending=False)
# 如下可以看出货品4晚交货情况主要的销售区域是西北地区;而货品2销往马来西亚的按时交货率最低,拉低了其在总区域的按时交货率
货品交货状况 按时交货 晚交货 按时交货率
货品 销售区域
货品5 泰国 183.0 4.0 0.978610
货品6 马来西亚 309.0 7.0 0.977848
货品1 华北 14.0 1.0 0.933333
华南 10.0 1.0 0.909091
货品3 华北 212.0 26.0 0.890756
货品2 华东 268.0 39.0 0.872964
货品4 西北 14.0 44.0 0.241379
货品2 马来西亚 1.0 9.0 0.100000
货品1 西北 3.0 NaN NaN
# 二.是否存在尚有潜力的销售区域
# a.月份维度
data1 =data.groupby(['销售月份','货品'])['数量'].sum().unstack()
data1.plot(kind='line')
# 如下可以看出货品2在10月 12月销量猛增,猜测跟公司举办营销活动或公司开发新的市场有关
<AxesSubplot: xlabel='销售月份'>
png
png
# b.不同区域
data1 =data.groupby(['销售区域','货品'])['数量'].sum().unstack()
data1
# 从销售区域可以看出每一种货品的销售区域介于1~3之间,其中货品3、4、5、6皆只销往一个区域
货品 货品1 货品2 货品3 货品4 货品5 货品6
销售区域
华东 NaN 53811.0 NaN NaN NaN NaN
华北 2827.0 NaN 9073.5 NaN NaN NaN
华南 579.0 NaN NaN NaN NaN NaN
泰国 NaN NaN NaN NaN 5733.0 NaN
西北 11.0 NaN NaN 5229.0 NaN NaN
马来西亚 NaN 1510.0 NaN NaN NaN 8401.0
# c.月份和区域维度
data1 =data.groupby(['销售月份','销售区域','货品'])['数量'].sum().unstack()
data1
# 可以看出货品1、2在7-12月集中销往的区域不同,
# 及货品2在10、12月销量猛增主要集中销售到华东地区,公司并未开发出新的市场,而是加大了在华东的营销力度
# 另外,那么货品2在其他地区是否也可以加大营销投入?
货品 货品1 货品2 货品3 货品4 货品5 货品6
销售月份 销售区域
7 华东 NaN 489.0 NaN NaN NaN NaN
华北 1.0 NaN 2041.5 NaN NaN NaN
华南 282.0 NaN NaN NaN NaN NaN
泰国 NaN NaN NaN NaN 733.0 NaN
西北 NaN NaN NaN 414.0 NaN NaN
马来西亚 NaN 2.0 NaN NaN NaN 1649.0
8 华东 NaN 1640.0 NaN NaN NaN NaN
华北 1410.0 NaN 1045.0 NaN NaN NaN
华南 3.0 NaN NaN NaN NaN NaN
泰国 NaN NaN NaN NaN 2381.0 NaN
西北 NaN NaN NaN 1188.0 NaN NaN
马来西亚 NaN 1503.0 NaN NaN NaN 1181.0
9 华东 NaN 3019.0 NaN NaN NaN NaN
华北 1409.0 NaN 2031.0 NaN NaN NaN
华南 283.0 NaN NaN NaN NaN NaN
泰国 NaN NaN NaN NaN 271.0 NaN
西北 1.0 NaN NaN NaN NaN NaN
马来西亚 NaN 1.0 NaN NaN NaN 343.0
10 华东 NaN 28420.0 NaN NaN NaN NaN
华北 3.0 NaN 1684.0 NaN NaN NaN
泰国 NaN NaN NaN NaN 1984.0 NaN
西北 1.0 NaN NaN 2542.0 NaN NaN
马来西亚 NaN NaN NaN NaN NaN 2358.0
11 华东 NaN 2041.0 NaN NaN NaN NaN
华北 2.0 NaN 100.0 NaN NaN NaN
华南 9.0 NaN NaN NaN NaN NaN
泰国 NaN NaN NaN NaN 14.0 NaN
西北 9.0 NaN NaN 3.0 NaN NaN
马来西亚 NaN 1.0 NaN NaN NaN 383.0
12 华东 NaN 18202.0 NaN NaN NaN NaN
华北 2.0 NaN 2172.0 NaN NaN NaN
华南 2.0 NaN NaN NaN NaN NaN
泰国 NaN NaN NaN NaN 350.0 NaN
西北 NaN NaN NaN 1082.0 NaN NaN
马来西亚 NaN 3.0 NaN NaN NaN 2487.0
# 三.商品是否存在质量问题
data['货品用户反馈']=data['货品用户反馈'].str.strip()
data1=data.groupby(['货品','销售区域'])['货品用户反馈'].value_counts().unstack()
data1['合格率']=data1['质量合格']/data1.sum(axis=1)
data1['返修率']=data1['返修']/data1.sum(axis=1)
data1['拒货率']=data1['拒货']/data1.sum(axis=1)
data1.sort_values(['合格率','返修率','拒货率'],ascending=False)
# 可以看到货品2、1、4的合格率较低,对应的返修率也比较高,说明其质量需要改善
# 货品2在马来西亚的拒货率最高,结合之前的分析其按时交货率也很低,猜测马来西亚客户对货品配送的时效性要求较高。
# 结合之前的分析货品2的主要销向地是华东地区,马来西亚的销量占比很低,且其拒货率很高,是否应该考虑降低该地区的投入?
货品用户反馈 拒货 质量合格 返修 合格率 返修率 拒货率
货品 销售区域
货品3 华北 31.0 188.0 19.0 0.789916 0.079568 0.129778
货品6 马来西亚 56.0 246.0 14.0 0.778481 0.044195 0.176755
货品5 泰国 14.0 144.0 29.0 0.770053 0.154444 0.074498
货品2 华东 72.0 184.0 51.0 0.599349 0.165800 0.233945
货品1 华南 5.0 4.0 2.0 0.363636 0.176000 0.433289
西北 NaN 1.0 2.0 0.333333 0.600000 NaN
华北 NaN 3.0 12.0 0.200000 0.789474 NaN
货品4 西北 NaN 9.0 49.0 0.155172 0.842573 NaN
货品2 马来西亚 6.0 1.0 3.0 0.100000 0.297030 0.577088
分析结论

1.货品4销往西北,货品2销往马来西亚这条路线存在较大问题,急需提升时效 2.货品2在华东地区还有较大市场空间,适合较大投入,同时货品2在西北配送时效长,用户拒收率高,是否应结合投入产出的比较重新考量是否减少投入? 3.货品1、2、4货品质量存在问题,建议扩大抽检力度,增大质检力度

KNN、Kmeans实例
用户消费行为分析
  • 文章目录
  • 站点概览

真诚的生活着

8 日志
3 分类
2 标签
© 2020 - 2023 Teqing Cai
0%