数据分析项目——物流数据行业数据分析

提升自己,掌握数据分析的能力,最快的方式就是实践! 

这里又是一个经典的数据分析项目——物流数据行业数据分析,有需要项目配套数据集的可以关注私信我免费获取(●'◡'●)

PS:本文中全部代码都在Jupyter Notebook中编写完成,可以使用Jupyter Notebook或者Jupyter Lab直接运行。

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

首先我们还是确定下我们需要做些什么

一、解决问题

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

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

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

二、分析过程
1.数据清洗

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

②异常值处理(比如:销售额存在等于0的,属于异常等)

2.数据规整

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

3.数据分析并可视化

数据集图例:

数据分析项目——物流数据行业数据分析_第1张图片

然后就又是紧张刺激的代码编写环节啦!注释我写的很详细,还有不理解的地方可以私信询问~

数据分析代码展示

一、数据清洗

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

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入所需软件包

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)
print(data.info()) #删除掉了九条重复数据
#删除缺失值(na,删除带有na的整行数据)
data.dropna(axis=0,how='any',inplace=True)
print(data.info())
#删除订单行(重复运行会报错,因为第一次已经删除了订单行这一列,需要去重新加载一次数据)
data.drop(columns=['订单行'],inplace=True,axis=1)
print(data.info())
#更新索引(drop=True:把原来的索引index列删除,重置index)
data.reset_index(drop=True,inplace=True)
data

#取出销售金额列,对每一个数据进行清洗
#编写自定义过滤函数:删除逗号,转成float,如果是万元则删除万元*10000,否则,删除元
def data_deal(number):
    if number.find('万元') != -1: #找到带有万元的,取出数字,去掉逗号,转成float,*10000
        number_new = float(number[:number.find('万元')].replace(',',''))*10000
    else: #找到带有元的,删除元,删除逗号,转成float
        number_new = float(number.replace('元','').replace(',',''))
    return number_new
data['销售金额'] = data['销售金额'].map(data_deal)
data #重复运行会报错,新的销售金额为浮点型,浮点类型无find函数,需要去重新加载一次数据

②异常值处理

data.describe()
#销售金额存在最小值0
#销售金额和数量存在严重的右偏现象(在电商领域28法则非常正常,无需处理)

#销售金额为0的数据删除
data = data[data['销售金额']!=0]
data.describe()

数据分析项目——物流数据行业数据分析_第2张图片

二、数据规整
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)) 
#货品3晚交货情况非常严重,其余的情况相对较好
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']
#货品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主要在华东地区销售量大,可以考虑增大在华东地区的投资,适当减小马来西亚的投入
四、结论

1、货品4→西北,货品2→马来西亚 两条线路存在较大问题,急需提升时效
2、货品2在华东地区还有较大的市场空间,适合加大投入,同时货品2在西北配送时效长,用户拒收率高,从成本角度考虑,应该减少投入
3、货品1、2、4质量存在问题,建议扩大抽检范围,增大质检力度

你可能感兴趣的:(数据分析,数据挖掘,python,numpy,pandas,大数据)