文章目录
- 物流行业数据分析
- 一、数据预处理
- 1、数据清洗
- ① 重复值、缺失值、格式调整
- ② 异常值处理
- 2、数据规整
- 二、 数据分析
- 1、配送服务是否存在问题
- 2、是否存在尚有潜力的销售区域
- 3、商品是否存在质量问题
- 三、总结
- 参考
物流行业数据分析
Excel适合处理低量级数据,当数据量过高,Excel只能展现部分数据,不利于后续的数据分析,此时使用Python进行数据分析更加方便,有效。
首先,这里仅仅只有一个工作表,数据一共有订单号,订单行,销售时间(下单时间),交货时间(签收时间),货品交货状态(晚交货或按时交货),货品,用户的反馈情况(质量合格,返修或拒货),销售区域(华北,华南,马来西亚),数量以及销售金额等10列数据。粗略的看一下数据,我们就可以发现,在订单号和数量这两列存在部分行为空值,在销售金额这一列数据的单位不统一并且存在逗号,并且订单行这一列数据对我们分析物流行业没有帮助,这些问题都需要在数据预处理阶段进行处理!
认识完数据之后,我们认识一下我们需要解决的问题,具体如下所示:
1.物流配送服务是否存在问题?
2.是否存在尚有潜力的销售区域?
3.商品本身是否存在质量问题?
为了解决这些问题并得出相应的结论,接下来我们就进行数据分析阶段!
一、数据预处理
前面已经提到数据中存在的问题,那么针对问题我们就要进行相应的处理,比如删除数据中存在的重复值,并且处理缺失值(删除或填充),以及格式的调整(销售金额单位不统一),同时我们还需要对异常值进行处理(比如,销售金额存在并且等于0的属于异常值)。首先,我们加载数据并查看数据的基本信息,具体代码如下所示:
1、数据清洗
先使用info()函数查看数据信息
data=pd.read_csv('data_wuliu.csv',encoding='gbk')
data.info()
通过info()可以看出,该物流数据共有1161条数据,每条数据有10列,其中:
1、订单号、货品交货状况和数量存在缺失值,但是确实量不大,可以删除
2、订单行对数据分析无关紧要,可以考虑删除
3、销售金额的类型是object类型(万元|元,逗号问题),数据类型需要转换成int|float类型的
具体操作如下:
① 重复值、缺失值、格式调整
删除重复记录
# 删除重复数据
# 遇到重复数据保留第一行(keep='first'),并且在原数据上修改(inplace=True)
data.drop_duplicates(keep='first', inplace=True)
data.info()
删除缺失值
# 删除缺失值
# 按行删除(axis=0),只要一条数据中存在NA则删除(how='any') 在原数据上修改
data.dropna(axis=0, how='any', inplace=True)
data.info
删除订单列
考虑到订单列对分析数据无关紧要,将订单列删除
# 删除订单行
# 按列删除(axis=1) 并在在原数据上修改(inplace=True)
data.drop(columns=['订单行'], axis=1, inplace=True)
data.info()
更新索引
# 前面进行了数据删除,需要更新索引
data.reset_index(drop=True,inplace=True)
data.info()
清洗数据
从图中可以看出,销售金额中含有 “,”,空格,且单位不一致,对此,编写自定义过滤函数,将逗号和空格删除,并统一单位
# 修改金额格式
# 编写自定义过滤函数,删除逗号,转成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
② 异常值处理
从上图可以看出,存在销售金额为0的情况,为异常值,将其删除,同时该数据的中位数远小于平均数,即销售金额和数量存在严重右偏现象,属于正常现象,无需处理。删除代码如下:
# 销售金额=0的情况,采用删除方法,因为数据量较小
data = data[data['销售金额']!=0]
data.describe()
# 虽然销售金额和数量存在严重右偏现象,但是此现象在电商领域极为普遍,即2/8很正常,因此无需处理
2、数据规整
在前面已经提到,我么需要分析配送服务是否存在问题,我么是需要从月份的角度进行分析,例如,这个月的配送服务有多少的满意度;分析是否存在尚有潜力的销售区域,我们也是根据月份去绘制本月的销售量,然后该月份与销售量的关系,如果本月销售量低,那么则销售潜力有待增加。具体数据规整的代码如下所示:
data['销售时间']=pd.to_datetime(data['销售时间'])
data['月份']=data['销售时间'].apply(lambda x:x.month)
二、 数据分析
1、配送服务是否存在问题
从三个维度展开分析,具体分析如下:
① 月份维度
data['货品交货状况']=data['货品交货状况'].str.strip()
data1=data.groupby(['月份','货品交货状况']).size().unstack()
data1['按时交货率']=data1['按时交货']/(data1['按时交货']+data1['晚交货'])
结论:从按时交货率来看,第四季度低于第三季度,猜测气候原因可能会影响配送
② 销售区域维度
data2=data.groupby(['销售区域','货品交货状况']).size().unstack()
data2['按时交货率']=data2['按时交货']/(data2['按时交货']+data2['晚交货'])
结论:西北地区存在突出的延时交货问题,急需解决
③ 货品维度
data3=data.groupby(['货品','货品交货状况']).size().unstack()
data3['按时交货率']=data3['按时交货']/(data3['按时交货']+data3['晚交货'])
结论:货品4晚交货情况非常严重,其余货品交货情况较好
④ 货品和销售区域结合
data4=data.groupby(['货品','销售区域','货品交货状况']).size().unstack()
data4['按时交货率']=data4['按时交货']/(data4['按时交货']+data4['晚交货'])
结论:货品4送往西北地区的晚交货情况严重,货品2送往马来西亚晚交货情况非常严重
2、是否存在尚有潜力的销售区域
① 月份维度
data5=data.groupby(['月份','货品'])['数量'].sum().unstack()
data5.plot(kind='line')
plt.show()
结论:货品2在10月份和12月份销量猛增,原因猜测:公司加大营销力度或者开发了新的市场
② 销售区域维度
data6=data.groupby(['销售区域','货品'])['数量'].sum().unstack()
结论:从销售区域看,每种货品销售区域为1-3个,货品1有三个销售区域,货品2有两个销售区域,其余货品均有一个销售区域
③ 月份和销售区域
data7=data.groupby(['月份','销售区域','货品'])['数量'].sum().unstack()
结论:货品2在10、12月份销量猛增,原因主要发生在原有销售区域;货品2在7、8、9、11月份销售数量还有很大提升空间,可以适当加大营销力度;货品2在8月份在两个销售区域的销量均有提升,在马来西亚地区的涨幅更大,可以尝试继续在马来西亚增大营销力度
3、商品是否存在质量问题
data['货品用户反馈']=data['货品用户反馈'].str.strip()
data8=data.groupby(['货品','销售区域'])['货品用户反馈'].value_counts().unstack()
data8['合格率']=data8['质量合格']/data8.sum(axis=1)
data8['返修率']=data8['返修']/data8.sum(axis=1)
data8['拒货率']=data8['拒货']/data8.sum(axis=1)
结论:货品3、6、5合格率均较高,返修率比较低,说明质量还可以;货品1、2、4合格率较低,返修率较高,质量存在一定问题,需要改善,建议扩大抽检范围,增大质检力度;货品2在马来西亚的拒货率最高,同时在马来西亚的按时交货率也非常低,猜测:马来西亚人对送货的时效性要求较高,如果没有按时到货,往往考虑退货,建议加快运输;虑到货品2主要在华东地区销量大,可以考虑增大在华东的投资,适当减少马来西亚的投入
三、总结
- 货品4—>西北,货品2—>马来西亚两条路线存在较大问题,急需提升时效
- 货品2在华东地区还有较大市场空间,适合加大投入,同时货品2在马来西亚配送时效长,用户拒收率高,从成本角度考虑,应该减少投入
- 货品1、2、4质量存在问题,建议扩大抽检范围,增大质检力度
参考
https://blog.csdn.net/qq_51447436/article/details/125885288
https://blog.csdn.net/qq_53311560/article/details/123108983
https://blog.csdn.net/weixin_46271306/article/details/130529302