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

news2024/10/7 4:33:11

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

解决问题:

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

分析过程:

依旧先进行数据处理
一、数据清洗
① 重复值、缺失值、格式调整
② 异常值处理(比如:销售金额存在等于0的,数量和销售金额的标准差都在均值的8倍以上等)
二、数据规整
比如:增加一项辅助列:月份
三、数据分析并可视化
接下来我们按上面一步步开始。

导入库和数据

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()

数据清洗

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

data = pd.read_csv('data_wuliu.csv',encoding='gbk')
data.info()

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

#删除重复记录
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,否则,删除元

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法则很正常。)

data = data[data['销售金额']!=0]
data

在这里插入图片描述

数据规整

增加一项辅助列:月份

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

在这里插入图片描述

数据分析并可视化

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

问题1、配送服务是否存在问题
我们分别从月份维度,销售区域维度,货品维度,货品和销售区域结合四个角度来开始探讨。

a.月份维度

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

在这里插入图片描述

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

b.销售区域维度

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

在这里插入图片描述
西北地区存在突出的延时交货问题,急需解決

c.货品维度

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

在这里插入图片描述
货品4晚交货情况非常严重,其余货品相对交货

d.货品和销售区域结合

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

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

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

a.月份维度

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

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

b.不同区域

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

在这里插入图片描述
从销售区域看,每种货品销售区域为1~3个,货品1有三个销售区域,货品2有两个销售区域,其余货品均有1个销售区域

c.月份和区域

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.商品是否存在质量问题
分析这个问题,我们需要依次算出拒货率,返修率,合格率。

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主要在华东地区销售量大,可以考虑增大在华东的投资,适当较小马来西亚的投入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/775616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue Duplicate keys detected: ‘‘. This may cause an update error. found in

错误原因: 在使用v-for的时候,都要必须加上一个唯一的key值,key的值写成一样的了。所以就导致了警告。尽量不要使用index下标作为key值 换成后台数据返回的id或者i*随机数作为key值就好

linux中快速定位软件安装位置

linux中快速定位软件安装位置步骤如下: 根据进程的名字定位进程ID ps -ef | grep redis通过进程id查找软件安装位置 ll -l /proc/100788/cwd原理说明: linux中进程启动后,会在/proc/目录下新建进程工作目录; 目录规范为:/proc/…

寻找下一个生成式 AI 独角兽,亚马逊云科技创业加速器火热招募中!

生成式AI让人工智能技术又一次破圈,带来了机器学习被大规模采用的历史转折点。它正在掀起新一轮的科技革命,为人类带来前所未有的颠覆性的影响,而诸多创业者也应势而上,寻求创新机遇。生成式AI可以创造全新的客户体验、提高企业内…

将数字孪生系统接入 CesiumJS,能为智慧城市项目带来怎样的改变?

数字孪生系统接入 CesiumJS 的契机,正是智慧城市项目的需要。因为许多智慧城市项目中包含了大量地形、倾斜摄影、DOM、DEM 等 GIS 数据,那么为了能够在数字孪生系统中导入这些 GIS 数据,同时让这些数据在以可视化形式表现出来后,还…

C++-17. 电话号码的字母组合

题目来源:力扣 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输…

【MySQL】数据不存在则插入

系列文章 C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类(推荐阅读&#xff0…

全面认识二极管,一篇文章就够了

电子设计基础元器件 二极管,小小二极管,大大用途。 ... 矜辰所致目录 前言一、二极管基础知识1.1 什么是二极管1.2 二极管的组成1.3 二极管的原理 二、二极管特性2.1 伏安特性曲线图2.2 温度的影响2.3 关于击穿 三、 二极管的参数正向连续电流和平均整…

银行金融风险管理面试问题汇总(附答案)

最近有些学员在咨询换工作的事,包括一些金融上市公司的高管。我收集了一些金融风险管理面试问题相关资料,希望能帮助大家。记得收藏此文章,以防之后找不到文章。 风险经理识别和分析潜在的公司风险,并找到减少或避免风险的方法。…

pve (群辉、软路由、win/linux)折腾日记

目录 生命不息,折腾不止名词解释硬件参数装机PVE安装下载pveultraISO 把镜像写入u盘rufus把镜像写入U盘bios设置U盘启动安装pve系统 ssh连接pvepve的使用安装pvetools安装ubuntu-server系统ubuntu更换国内源ubuntu安装docker更改docker国内源docker环境下安装青龙 安…

了解 MySQL 的存储引擎

点击上方↑“追梦 Java”关注,一起追梦! 存储引擎的主要工作就是与文件系统进行数据交互,比如我们常用的 InnoDB 引擎。 MySQL 的存储引擎是插件式的,应用程序无需针对不同的存储引擎进行对应的编码操作,MySQL 提供了一…

什么是布道师?看完这篇文章你就懂了

布道师这个术语可能对许多人来说还比较陌生,但实际上,布道师在软件行业中扮演着非常重要的角色。他们是软件产品的积极倡导者和用户之间的桥梁,致力于传递好消息、收集反馈,并与用户建立良好的关系。在本文中,我们将深…

Linux —— 查看进程命令及进程优先级

目录 一,查看进程命令 1,ps 命令 ps axj ps aux ps l ps -l 2,top 命令 3,ptree 命令 4,pgrep 命令 三,进程优先级 PRI NI 一,查看进程命令 ps、top、pstree、grep; 1&…

腾讯云 Finops Crane 开发者集训营 - 云成本优化一站式解决方案实践

一、 相关活动介绍: 自从上次参加完CSDN联合腾讯云发起的《云原生之降本增效》活动后,只是停留聚焦在优秀实践方法论、资源与弹性、架构设计上的了解,本次《腾讯云 Finops Crane 开发者集训营》是深入了解并实践基于 FinOps 框架开展的一个成…

001-Spring简要原理分析

Bean的生产 class到beanDefinition beanDefinition到Bean Bean查找流程 根据类型找找到多个根据名称找 AOP 在实例化后创建代理对象返回 把之前创建的Bean塞入代理对象的 target 字段中 事务 利用AOP代理掉数据源 在提交事务的时候 关闭自动提交手动提交事务异常回滚事…

【力扣算法16】之 18. 四数之和 python

文章目录 问题描述示例1示例2提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果 完结 问题描述 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[…

MySQL Schema 比较同步工具汇总(2023 版)

数据库 schema 比较工具使你能够识别关系数据库中对象结构的差异,并在多个数据库中同步你的特定对象。它通常用于以下情况: 将数据库变更从私有分支合并到团队的主分支在同构数据库中保持 schema 一致性构建新的数据库测试环境根据应用需求将数据库 sch…

与国外客户会面后,一些用语整理

与客户进行了会面,当客户离开工厂,我们需要对讨论过的内容进行整理并发邮件给客户,这里会用到一些客套语,今天分享部分给大家参考! Well received and thank you for the update, will be sure to take note on those…

利用 DNSLog无回显注入

DNSLog概念 DNSLog(域名系统日志)是一种特殊的技术和服务,用于捕获和记录通过域名系统(DNS)协议进行的请求和响应。它的目的是帮助用户跟踪、分析和管理DNS流量,并收集与域名相关的信息。 基本上&#xf…

JDBC 异常处理(SQLException)

异常处理允许您以受控的方式处理异常情况,例如程序定义的错误。 发生异常情况时,将引发异常。抛出这个词意味着当前程序停止执行,并且控件被重定向到最接近的适用catch子句。如果不存在适用的catch子句,则程序的执行结束。 JDBC…

提升内功之模拟实现库函数strlen/strncpy/strcmp/strcat/strstr/memcpy/memmove

strlenstrncpystrcmpstrcatstrstrmemcpymemmove strlen strlen函数的作用就是求字符串的首元素开始往后计算字符串的长度&#xff0c;直到’\0‘&#xff0c;但不会把\0的长度计算进去 #include<stdio.h>size_t Strlen(const char* src) {size_t count 0;while (*src ! …