欢迎光临散文网 会员登陆 & 注册

物流行业数据分析(源码自用)

2023-03-17 21:41 作者:无真凡尘  | 我要投稿

"""
解决问题:
1.配送服务是否存在问题
2.是否存在尚有潜力的消费区域
3.商品是否存在质量问题

分析过程
一.数据清洗
①重复值、缺失值、格式调整
②异常值处理(比如:销售金额存在等于0的,属于异常等)
二.数据规整
比如:增加一项辅助列:月份
三.数据分析并可视化
"""
import os
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'   # 设置中文

# 一.数据清洗
# ①重复值、缺失值、格式调整
data = pd.read_csv('data_wuliu.csv', encoding='gbk')
# 删除重复记录
data.drop_duplicates(keep='first', inplace=True)
# 删除缺失值(na,删除带有na的整行数据)
data.dropna(axis=0, how='any', inplace=True)
# 删除订单行(重复运行会报错,因为第一次已经删除了订单行这一列)
data.drop(columns=['订单行'], inplace=True, axis=1)
# 更新索引(drop=True:把原来的索引index列删除,重置index)
data.reset_index(drop=True, inplace=True)
# 取出销售金额列,对每一个数据进行清洗
# 编写自定义过滤函数:删除逗号,转成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('元', '').replace(',', ''))
       pass
   return new_number


data['销售金额'] = data['销售金额'].map(data_deal)

# ②异常值处理
# 1.销售金额为0,采用删除方法,因为数据量很小
data = data[data['销售金额'] != 0]
# 2.销售金额和数量存在严重右偏现象,在电商领域2/8很正常,无需处理

# 二.数据规整
data['销售时间'] = pd.to_datetime(data['销售时间'])
data['月份'] = data['销售时间'].apply(lambda x: x.month)

# 三.数据分析
# 1.配送服务是否存在问题
# a.月份维度
data['货品交货状况'] = data['货品交货状况'].str.strip()
data1 = data.groupby(by=['月份', '货品交货状况']).size().unstack()    # unstack转为多维行列索引的数组
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
# 从按时交货率来看,第四季度低于第三季度,猜测可能是气候原因造成

# b.销售区域维度
data1 = data.groupby(by=['销售区域', '货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
data1 = data1.sort_values(by='按时交货率', ascending=False)
# 西北地区存在突出的延时交货问题,急需解决

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

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

# 2.是否存在尚有潜力的销售区域
# a.月份维度
data1 = data.groupby(['月份', '货品'])['数量'].sum().unstack()
data1.plot(kind='line')
# plt.show()
# 货品2在10月和12月份,销量猛增,原因猜测有二:1.公司加大营销力度  2.开发了新的市场(后续得出否定结论)

# b.不同区域
data1 = data.groupby(['销售区域', '货品'])['数量'].sum().unstack()
# 从销售区域看,每种货品的销售区域为1~3个,货品1有三个销售区域,货品2有两个销售区域,其余货品均有1个销售区域

# c.月份和区域
data1 = data.groupby(['月份', '销售区域', '货品'])['数量'].sum().unstack()
# 货品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 = data1.sort_values(['合格率', '返修率', '拒货率'], ascending=False)
# 货品3,5,6合格率均较高,返修率比较低,说明质量可以
# 货品1,2,4合格率较低,返修率较高,质量存在一定的问题,需要改善
# 货品2在马来西亚的拒货率最高,同时,在货品2在马来西亚的按时交货率也非常低。猜测:马来西亚人对送货的时效性要求较高,如果达不到,则往往考虑拒货
# 考虑到货品2主要在华东地区销售,可以考虑增大在华东的投资,适当减小马来西亚的投入



物流行业数据分析(源码自用)的评论 (共 条)

分享到微博请遵守国家法律