一.数据清洗
异常值处理 二.数据规整三.数据分析并可视化
1.配送服务是否存在问题
a.月份维度b.销售区域维度c.货品维度d.货品和销售区域结合 2.是否存在尚有潜力的销售区域
a.月份维度b.不同的区域C.月份与销售区域维度
3.商品是否存在质量问题
#数据来源:某企业销售的6中商品所对应的送货及用户反馈数据
‘’’
解决问题:
1,配送服务是否存在问题
2,是否存在尚有潜力的销售区域
3.商品是否存在质量问题
结论:
1.货品4-西北,货品2-马来西亚两条线路存在较大问题,急需提升时效
2.货品2在华东地区还有较大市场空间,适合加大投入,同时货品2在西北配送时效常,用户拒收率高,从成本角度考虑,应该减少投入
3.货品1,2,4质量存在问题,建议扩大抽检范围,增大质检力度
‘’’
‘’’
分析过程如下
一.数据清洗
1.重复值、缺失值、格式调整(金额中有逗号的)
2.异常值处理(比如:销售金额存在等于0的,属于异常等,数量和销售金额的标准差都在均值的8倍以上)
二.数据规整
比如:增加一个辅助列:月份
三.数据分析并可视化
‘’’
一.数据清洗1.重复值、缺失值、格式调整(金额中有逗号的)
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('D:\zhangxinfile\python数据实战练习(jupyter lab)\数据分析实战项目资料\物流\资料\data_wuliu.csv',encoding='gbk')
data.info()
通过info()可以看出,包括10列数据,名字,数据量,格式等,可以得出
1,订单号,货品交货情况,数量:纯在缺失值,但是确实量不大,可以删除
2.订单行对数据分析无关紧要,可以考录删除
3.销售金额格式不对(万元|元,逗号问题),数据类型需要转换成int|float类型的
#删除重复记录 data.drop_duplicates(keep='first',inplace=True) # data.info() #删除缺失值(na,删除带有na的整行数据,axis=0,how='any'默认值) data.dropna(axis=0,how='any',inplace=True) # data.info() #删除订单行(重新运行会报错) data.drop(columns=['订单行'],inplace=True,axis=1) # data.info() data
#更新索引(把原来的索引删除,重置索引) 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
number_new=float(number.replace('万元','').replace(',',''))*10000 #上面这个和下面这句都可以来实现
else:#找到带有元的,删除元,删除逗号,转成float
number_new=float(number.replace('元','').replace(',',''))
pass
return number_new
data['销售金额']=data['销售金额'].map(data_deal)
data
异常值处理
#查看该数据的相关分析结果 data.describe()#数据严重右偏现象
#销售金额==0,采用删除方法,因为数据量很小 data=data[data['销售金额']!=0] data.describe() #销售金额存在严重的右偏现象,在电商领域2/8很正常,无需处理二.数据规整
比如:增加一个辅助列:月份
data['销售时间']=pd.to_datetime(data['销售时间']) data['月份']=data['销售时间'].map(lambda x :x.month) data三.数据分析并可视化 1.配送服务是否存在问题 a.月份维度
data['货品交货状况']=data['货品交货状况'].str.strip() data1=data.groupby(by=['月份','货品交货状况']).size().unstack() data1['按时交货率']=data1['按时交货']/(data1['按时交货']+data1['晚交货']) data1 #从按时交货率来看,第四季度抵御第三季度,猜测可能是气候原因造成b.销售区域维度
data1=data.groupby(by=['销售区域','货品交货状况']).size().unstack() data1['按时交货率']=data1['按时交货']/(data1['按时交货']+data1['晚交货']) data1.sort_values(by='按时交货率',ascending=False) #西北地区存在突出的延时交货问题,急需解决c.货品维度
data1=data.groupby(['货品','货品交货状况']).size().unstack() data1['按时交货率']=data1['按时交货']/(data1['按时交货']+data1['晚交货']) data1.sort_values(by='按时交货率',ascending=False) #货品4交货情况非常严重,其余货品相对较好d.货品和销售区域结合
data1=data.groupby(['货品','销售区域','货品交货状况']).size().unstack() 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') # 货品2在10月和12月份,销量猛增,原因猜测有二,1.公司加大营销力度,2,开发了新的市场(后序有结论,并没有加大力度)b.不同的区域
data1=data.groupby(['销售区域','货品'])['数量'].sum().unstack() data1 #从销售区域看,每种货品的销售区域为1~3个区域,货品1有三个销售区域,货品2有两个销售区域,其余货品均有一个销售区域C.月份与销售区域维度
data1=data.groupby(['月份','销售区域','货品'])['数量'].sum().unstack() data1 #货品2在10月12月份销量猛增,愿意主要发正在原有销售区域(华东) #分析在7,、8、9、11月份销售数量还有很大提升空间,可以适当增大销售力度
data['货品用户反馈']=data['货品用户反馈'].str.strip()#去除收尾空格 data1 =data.groupby(['货品','销售区域'])['货品用户反馈'].value_counts().unstack() #data1 =data.groupby(['货品','销售区域','货品用户反馈']).size().unstack()#这个方法也可以 data1.sum(axis=1) data1
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主要在华东地区销售量大,可以考虑增大在华东的投资,适当减小马来西亚的投入



