首页 > 其他分享 >【数据分析实战】物流行业数据分析

【数据分析实战】物流行业数据分析

时间:2024-03-24 11:02:18浏览次数:20  
标签:数据分析 实战 交货 data1 销售 按时 货品 物流 data

数据来源 : 某企业销售的6种商品对应的送货及用户反馈数据

解决问题:

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

分析过程:

  1. 数据清洗
    ①重复值 、缺失值、格式调整
    ②异常值处理(比如:消费金额存在等于0的情况,属于异常等)
  2. 数据规整
    比如:增加一列辅助列:月份
  3. 数据分析并可视化

文章目录

1. 数据清洗

import os
import pandas as pd
import numpy as np
import matplotlib.pyplotlib as plt
plt.rcParams['font.sans-serif'] = 'SimHei' #设置中文显示
data = pd.read_csv('data_wuliu.csv',encoding='gbk')
data.info()

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

通过 info() 可以看出,包括10列的数据,名字,数据量,格式等,可以得出:

  1. 订单号、货品交货i情况、数量存在缺失值,但是缺失量不大,可以考虑删除
  2. 订单行,对分析无关紧要,可以考虑删除
  3. 销售金额格式不对(万元|元,逗号问题),数据类型需要转换成 int 或者 float
#删除重复数据
data.drop_duplicates(keep='first',inplace=True)
priint(data_info)

#删除重复记录(删除带有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,inplace=True 将原来索引去掉,重新对数据新增索引)
data = data.reset_index(drop=True,inplace=True)

#取出销售金额列,对每一个数据进行清洗
#销售金额这个字段是字符串类型,所以能用find函数
#编写自定义过滤函数:删除逗号,转成float,如果是万元删除万元,*10000,否则删除元
def data_deal(number):
	if number.find('万元')!= -1 #找不到带有万元的,取出数字,去掉逗号,转成float, *10000
		new_number = float(number[:number.find('万元')].replace(',','')) *10000
		pass
	else: # 找到带有元的,删除元,删除逗号,转成float
		new_number = float(number.replace('元','').replacee(',',''))
		pass
	return new_number	
data['销售金额'] = data['销售金额'].map(data_deal)

1.2 异常值处理

data.describe()
#发现,销售金额最小值存在0,选择删除
#存在严重的数据右偏的情况,即平均值远大于中位数

#对于销售金额最小值存在0,选择删除
data = data[data['销售金额']!=0]

#对于销售金额和数量存在严重的右偏现象,在电商领域2/8正常,无需处理

2. 数据规整

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

3.数据分析并可视化

3.1 配送服务是否存在问题

3.1.1 按月份维度分析

# 交货情况列内容存在空格
data['货品交货状况'] = data['货品交货状况'].str.strip()#去除字符串前后的空格
data1 = data.groupby(['月份','货品交货状况']).size() #多列分组
print(data1)

输出:

月份  货品交货状况
1月  按时交货    1
    延迟交货    2
2月  按时交货    2
    延迟交货    1
3月  按时交货    1
    延迟交货    1
dtype: int64

如果用的是

data1 = data.groupby(['月份','货品交货状况']).size() .unstack() #多列分组
print(data1)

输出的是这种格式:

货品交货状况  按时交货  延迟交货
月份                
1月         1       2
2月         2       1
3月         1       1

继续进行分析

data1['按时交货率'] = data1['按时交货率']/(data['按时交货'] + data1['晚交货'])
#从按时交货率来看,第四季度低于第三季度,猜测可能是气候原因造成的

3.1.2 从销售区域分析

data2 =  data.groupby(['销售区域','货品交货状况']).size() .unstack()
data2['按时交货率'] = data2['按时交货']/(data2['按时交货']+data2['晚交货'])
#将按时交货率降序排列
print(data2.sort_vlaues(by='按时交货率',ascending=False))
#西北地区存在突出的延时交货问题,急需解决

3.1.3 从货品维度进行分析

data3 = data.groupby(['货品','货品交货状况']).size().unstack()
data3['按时交货率'] = data3['按时交货率']/(data3['按时交货']+ data3['延时交货'])
print(data3.sort_values(by='按时交货率', ascending = False))
#货品4晚交货的情况非常严重,其余其余的货品相对较好

3.1.4 货品和销售区域结合

data4 = data.groupby(['货品','销售区域','货品交货情况']).size().unstack()
data4['按时交货率'] = data4['按时交货率']/(data4['按时交货'] + data['晚交货'])
print(data4.sort_values(by='按时交货率', ascending = False))
#销售区域:最差在西北地区,货品有1和4,主要是货品4的送货较晚导致
#货品:最差的货品2,主要送往华东和马来西亚,主要是马来西亚的送货较晚导致的

3.2 是否存在尚有潜力的销售区域

3.2.1 按月份维度分析

data1 = data.groupby(['月份','货品'])['数量'].sum() .unstack()#分组后对数量求和
print(data1)
data1.plot(kind='line')

输出的值这个样子:

货品  货品1 货品2 货品3 货品4 货品5 货品6
月份
7     283.0 491.9 2041.5 414.0 773.0 1649.0
8     1413.0 3143.0 104.5 1188.0 2381.0 1181.0
9     1693.0 3020.0 2031.0 3542.0 271.0 343.0

3.2.2 从销售区域分析

data2 = data.groupby(['销售区域','货品']).sum().unstack()
print(data2)
# 从销售区域看,每种货品销售区域为1~3个,货品1有三个销售区域,货品2有两个销售区域,其余货品均有1个销售区域 

3.2.3 月份和销售区域结合

data3 = data.groupby(['月份','销售区域','货品'])['数量'].sum().unstack()
data3.plot(kind='line')
print(data3['货品2'])
#货品2在10月12月份,销量猛增,原因主要发生在原有销售地区(华东)
#同样,分析出在7,8,9月份销售数量还有很大提升空间,可以适当提高销售力度

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

# 将字符串首位空格去除
data['货品用户反馈'] = data['货品用户反馈'].str.strip() 
data1 = data.groupby(['货品','销售区域'])['货品用户反馈'].value_counts().unstack()#因为是字符串,所以用到的是值的统计
#data1.sum(axis=1)按行求和
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主要在华东地区销售量最大,可以增大在华东的投资,适当减少马来西亚的投入

标签:数据分析,实战,交货,data1,销售,按时,货品,物流,data
From: https://blog.csdn.net/qq_41715032/article/details/136962730

相关文章

  • 【数据分析实战】餐厅订单数据分析
    今天我们来分析以下某餐厅8月份订单数据,该餐厅的订单数据前10天、中间10天、后10天分别放在不同的Sheet里。订单数据字段包括:detail_id、order_id、dishes_id、logicprn_name、parent_class_name、dishes_name、itemis_add、counts、amounts、cost、piece_order_time、emp_......
  • React&Nest.js社区平台(四)——✏️文章发布与管理实战
    公众号:【可乐前端】,每天3分钟学习一个优秀的开源项目,分享web面试与实战知识。前言在上一期我们已经实现了个人信息模块,这一期来实现文章发布与管理。涉及到如下功能:草稿创建/修改文章发布文章删除获取我发布的文章看起来像是文章的增删改查功能,其实还是有不少值得思考......
  • 鸿蒙HarmonyOS实战-ArkUI组件(Stack)
    ......
  • Streamlit实战手册:从数据应用到机器学习模型部署
    Streamlit实战手册:从数据应用到机器学习模型部署简介Streamlit核心功能介绍Streamlit的安装创建第一个Streamlit应用界面布局与导航数据处理与展示Streamlit的进阶应用交互式组件按钮复选框单选按钮滑块图表与可视化使用Matplotlib绘图使用Plotly创建交互式图表状态管......
  • 深入浅出Go的`encoding/xml`库:实战开发指南
    深入浅出Go的`encoding/xml`库:实战开发指南引言基本概念XML简介Go语言中的XML处理结构体标签(StructTags)解析XML数据使用`xml.Unmarshal`解析XML结构体标签详解处理常见解析问题生成XML数据使用`xml.Marshal`生成XML使用`xml.MarshalIndent`优化XML输出自定义标签改变......
  • Python实战:Lambda函数与匿名函数
    一、引言在Python编程中,Lambda函数和匿名函数是两种特殊的函数定义方式,它们可以提高代码的简洁性和可读性。Lambda函数和匿名函数通常用于简单的函数表达式,如数据处理和函数式编程。本文将详细介绍Python中的Lambda函数与匿名函数,并通过具体代码示例展示它们的应用。二、L......
  • Java毕业设计-基于SSM框架的在线课堂系统项目实战(附源码+论文)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • Python机器学习笔记:CART算法实战
    完整代码及其数据,请移步小编的GitHub传送门:请点击我如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote前言在python机器学习笔记:深入学习决策树算法原理一文中我们提到了决策树里的ID3算法,C4.5算法,并且大概的了解了CART算法。对于ID3算法的实战可......
  • 数据分析基础
    数据分析基础1.数据加载使用Pandas库可以轻松地加载各种格式的数据,如CSV、Excel、JSON等。importpandasaspd#从CSV文件加载数据data=pd.read_csv(‘data.csv’).2.数据探索一旦数据加载完成,我们可以开始对数据进行探索性分析,了解数据的结构、特征和分布......
  • 记一次逻辑越权实战挖掘(二)
    逻辑越权(二)前言根据上一个逻辑越权网站,我挖出了第二个逻辑越权漏洞,为给他人添加订单漏洞。如果想了解逻辑越权水平越权和垂直越权原理可以跳转我之前发布的文章观看。https://blog.csdn.net/weixin_63560942/article/details/136712823正文1.这里步入正题,我在上一个......