Python实战项目——物流行业数据分析(二)

今天我们对物流行业数据进行简单分析,数据来源:某企业销售的6种商品所对应的送货及用户反馈数据

解决问题:

1、配送服务是否存在问题
2、是否存在尚有潜力的销售区域
3、商品是否存在质量问题

分析过程:

依旧先进行数据处理

一、数据清洗

① 重复值、缺失值、格式调整

② 异常值处理(比如:销售金额存在等于0的,数量和销售金额的标准差都在均值的8倍以上等)

二、数据规整

比如:增加一项辅助列:月份

三、数据分析并可视化

接下来我们按上面一步步开始。

导入库和数据

python 复制代码
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.info()

数据清洗

重复值、缺失值、格式调整

python 复制代码
data = pd.read_csv('data_wuliu.csv',encoding='gbk')
data.info()


通过info()可以看出,包括10列数据,名字,数据量,格式等,可以得出:
1.订单号,货品交货情况,数量:存在缺失值,但是确实量不大,可以删除
2.订单行,对分析无关紧要,可以考虑删除
3.销售金额格式不对(万元|元,逗号问题),数据类型需要转换成int|float

python 复制代码
#删除重复记录
data.drop_duplicates(keep='first',inplace=True)
#删除缺失值(na,删除待有na的整行数据,axis=0,how='any'默认值)
data.dropna(axis=0,how='any',inplace=True)
#删除订单行(重复运行会报错,因为第一次已经删除了订单行这一列)
data.drop(columns=['订单行'],inplace=True,axis=1)
print(data.info())
#更新索引(drop=True:把原来的索引index列删除,重置index)
data.reset_index(drop=True,inplace=True)

处理后结果如下图所示。

取出销售金额列,对每一个数据进行清洗

编写自定义过滤函数:删除逗号,转成float,如果是万元则*10000,否则,删除元

python 复制代码
def data_deal(number):
    if number.find('万元')!= -1:#找到带有万元的,取出数字,去掉逗号,转成float,*10000
        number_new = float(number[:number.find('万元')].replace(',',''))*10000
        pass
    else: #找到带有元的,删除元,删除逗号,转成float
        number_new = float(number.replace('元','').replace(',',''))
        pass
    return number_new
data['销售金额'] = data['销售金额'].map(data_deal)
data

异常值处理

由结果可得
1.销售金额为0的情况,删除
2.产生严重的数据左偏情况(电商领域的2/8法则很正常。)

python 复制代码
data = data[data['销售金额']!=0]
data

数据规整

增加一项辅助列:月份

python 复制代码
data['销售时间'] = pd.to_datetime(data['销售时间'])
data['月份'] = data['销售时间'].apply(lambda x:x.month)
data

数据分析并可视化

我们回到一开始的问题,现在开始解决

问题1、配送服务是否存在问题

我们分别从月份维度,销售区域维度,货品维度,货品和销售区域结合四个角度来开始探讨。

a.月份维度

python 复制代码
data['货品交货状况'] = data['货品交货状况'].str.strip()
data1 = data.groupby(['月份','货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
data1

从按时交货率来看,第四季度低于第三季度,猜测可能是气候原因造成

b.销售区域维度

python 复制代码
data1 = data.groupby(['销售区域','货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
print(data1.sort_values(by='按时交货率',ascending=False))


西北地区存在突出的延时交货问题,急需解決

c.货品维度

python 复制代码
data1 = data.groupby(['货品','货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
print(data1.sort_values(by='按时交货率',ascending=False))


货品4晚交货情况非常严重,其余货品相对交货

d.货品和销售区域结合

python 复制代码
data1 = data.groupby(['货品','销售区域','货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
print(data1.sort_values(by='按时交货率',ascending=False))


销售区域:最差在西北地区,货品有1和4,主要是货品4送过较晚导致
货品:最差的货品2,主要送往华东和马来西亚,主要是马来西亚的送货较晚导致。

问题2、是否存在尚有潜力的销售区域

a.月份维度

python 复制代码
data1 = data.groupby(['月份','货品'])['数量'].sum().unstack()
data1.plot(kind='line')

货品2在10月和12月份,销量猛增,原因猜测有二:1.公司加大营销力度 2.开发了新的市场(后续有结论)

b.不同区域

python 复制代码
data1 = data.groupby(['销售区域','货品'])['数量'].sum().unstack()
data1

从销售区域看,每种货品销售区域为1~3个,货品1有三个销售区域,货品2有两个销售区域,其余货品均有1个销售区域

c.月份和区域

python 复制代码
data1 = data.groupby(['月份','销售区域','货品'])['数量'].sum().unstack()
data1['货品2']
月份 销售区域
7 华东 489.0
7 华北 NaN
7 华南 NaN
7 泰国 NaN
7 西北 NaN
7 马来西亚 2.0
8 华东 1640.0
8 华北 NaN
8 华南 NaN
8 泰国 NaN
8 西北 NaN
8 马来西亚 1503.0
9 华东 3019.0
9 华北 NaN
9 华南 NaN
9 泰国 NaN
9 西北 NaN
9 马来西亚 1.0
10 华东 28420.0
10 华北 NaN
10 泰国 NaN
10 西北 NaN
10 马来西亚 NaN
11 华东 2041.0
11 华北 NaN
111 华南 NaN
11 泰国 NaN
111 西北 NaN
11 马来西亚 1.0
12 华东 18202.0
12 华北 NaN
12 华南 NaN
12 泰国 NaN
12 西北 NaN
12 马来西亚 3.0
Name: 货品2, dtype: float64

货品2在10,12月份销量猛增,原因主要发生在原有销售区域(华东)
同样,分析出在7,8,9,11月份销售数量还有很大提升空间,可以适当加大营销力度

问题3.商品是否存在质量问题

分析这个问题,我们需要依次算出拒货率,返修率,合格率。

python 复制代码
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)
  • 货品3.6.5合格率均较高,返修率比较低,说明质量还可以
  • 货品1.2.4合格率较低,返修率较高,质量存在一定的问题,需要改善
  • 货品2在马拉西亚的拒货率最高,同时,在货品2在马拉西亚的按时交货率也非常低。猜测:马来西亚人对送货的时效性要求较高, 如果达不到,则往往考虑拒货。
  • -考虑到货品2主要在华东地区销售量大,可以考虑增大在华东的投资,适当较小马来西亚的投入。
相关推荐
0白露18 分钟前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.1 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐1 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
ALe要立志成为web糕手1 小时前
SESSION_UPLOAD_PROGRESS 的利用
python·web安全·网络安全·ctf
Tttian6223 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
蹦蹦跳跳真可爱5893 小时前
Python----机器学习(KNN:使用数学方法实现KNN)
人工智能·python·机器学习
独好紫罗兰4 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
Start_Present5 小时前
Pytorch 第十二回:循环神经网络——LSTM模型
pytorch·rnn·神经网络·数据分析·lstm
闪电麦坤955 小时前
C#:base 关键字
开发语言·c#
Mason Lin5 小时前
2025年3月29日(matlab -ss -lti)
开发语言·matlab