数据分析流程为明确目的、获取数据、数据探索和预处理、分析数据、得出结论、验证结论、结果展现。物流业务中对数据进行深入挖掘和分析的过程,旨在提高运输效率、降低运输成本、提高客户满意度,以及提高公司的竞争力。
本案例物流数据分析目的:a、配送服务是否存在问题
b、是否存在尚有潜力的销售区域
c、商品是否存在质量问题
使用panda库读取数据,编码方式为gbk
import pandas as pd
data=pd.read_csv("D://data_wuliu.csv",encoding='gbk') #注意路径换为你的路径
data
从info中可以看出有nan值,以下函数中参数含义,inplace是否在原表上修改;axis为表示按行操作,1为按列操作;how=any表示只要此行有一个nan值就删除,all为整行数据都为nan时才删除。
data.drop_duplicates(inplace=True)#删除重复记录
data.dropna(axis=0,how='any',inplace=True)#删除带有nan的整行数据
在查看数据时发现表中“订单行”字段无太大用处,并且字段中“销售金额”里有“万字”、“字”以及逗号,都需要处理,代码中定义函数进行处理。
data.drop(columns=['订单行'],inplace=True,axis=1) #删除“订单行”这一列
data.reset_index(drop=True,inplace=True)#更新索引drop=true把原来的索引删除,重置索引
#编写自定义过滤函数,处理销售金额中的逗号和元和万元
def data_deal(number):
if number.find("万元")!=-1:
number_new=float(number[:number.find("万元")].replace(',',''))*10000
else:
number_new=float(number.replace('元','').replace(',',''))
return number_new
data['销售金额']=data['销售金额'].map(data_deal) #使用map函数将销售金额中每个元素都检查
如下图查看数据描述时,发现销量均值为76,中位数只有1,说明数据呈现右偏分布,有后面的数据给前面数据填坑,这属于电商物流行业的正常现象也叫做2/8原则,不需要处理,再看describe中的销售金额,存在销售金额为0的部分,属于异常值需要处理
data=data[data['销售金额']!=0] #找到销售金额不为0的部分,将这部分重新赋值给原来的data
后续案例分析需要添加辅助列“月份”方便后面计算,将销售时间转为datetime形式再提取出月份
data['销售时间']=pd.to_datetime(data['销售时间']) #用pandas库将数据转化为datedime形式
data['月份']=data['销售时间'].apply(lambda x:x.month) #apply函数应用于每个元素,将元素中month提取出,作为新的一列“月份”
处理完之后的数据效果
将数据按照月份和货品交货状况分组,计算出各个月份的货品按时交货率。
data['货品交货状况']=data['货品交货状况'].str.strip() #将货品交换状况这一列先转换为字符串,再去除空格
data_a=data.groupby(['月份','货品交货状况']).size().unstack() #按月份、交货状况分组再显示
data_a['货品按时交换货率']=data_a['按时交货']/(data_a['按时交货']+data_a['晚交货'])
data_a
分析思考:上述dataframe表中可以分析出,第四季度比第三季度的整体货品按时交货率低,猜测可能是受季节气候的影响。
将数据按照销售区域和货品交货状况分组,计算出各个销售区域的货品按时交货率。
data_a=data.groupby(['销售区域','货品交货状况']).size().unstack()
data_a['货品按时交货率']=data_a['按时交货']/(data_a['按时交货']+data_a['晚交货'])
print(data_a.sort_values(by='货品按时交货率',ascending=False)) #按照货品按时交货率进行降序排序
分析思考:可以看到西北地区货品按时交货率出现断层式低,出现突出的延时交货问题,急需解决 。
data_a=data.groupby(['货品','货品交货状况']).size().unstack()
data_a['货品按时交货率']=data_a['按时交货']/(data_a['按时交货']+data_a['晚交货'])
print(data_a.sort_values(by='货品按时交货率',ascending=False))
分析思考:分析出货品4的按时交货率极低,情况较为严重,其余情况较好,
将销售区域和货品进行结合分析,分析西北地区情况严重和货品之间的关系
data_a=data.groupby(['货品','销售区域','货品交货状况']).size().unstack()
data_a['货品按时交货率']=data_a['按时交货']/(data_a['按时交货']+data_a['晚交货'])
print(data_a.sort_values(by='货品按时交货率',ascending=False))
分析思考:从销售区域角度,西北地区所销售的获评有1和4,西北地区按时交货率低是货品4送货较晚导致的;从货品角度,最差的货品2,主要是马来西亚晚交货引起的。
将数据按月份和货品分组之后,按月累加各类货品销量并折线图可视化
data_a=data.groupby(['月份','货品'])['数量'].sum().unstack()
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码
data_a.plot(kind='line')
分析思考:货品2在10月和12月份的销量猛增,远高于其他月份和其他货品,猜测:一、公司在这两个月份对货品2进行推销和宣传 。二、开发了新的市场(后续验证)
将数据按月份、货品和销售区域分组,分析各个区域在不同月份的不同货品的销量
data_a=data.groupby(['月份','销售区域','货品'])['数量'].sum().unstack()
data_a['货品2']
分析思考:货品2,9月和10月只在华东地区有销售,且10月份的销量激增(发生在原有销售区域华东),说明公司不是开发了新市场,在7、8、9和11月份可以加大对货品2的营销力度
将数据按货品和销售区域分组,再取出并统计货品用户反馈总数,计算货品在不同销售区域的拒货率、返修率和合格率,对比分析
data['货品用户反馈']=data['货品用户反馈'].str.strip() #去除空格
data1=data.groupby(['货品','销售区域'])['货品用户反馈'].value_counts().unstack()
#data1.sum(axis=1)表示各个货品在不同地区的货品用户反馈总和
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的合格率降低,且货品4在西北地区返修率极高,货品4商品质量需要改善;货品2 在马来西亚的拒货率极高,同时在马来西亚的按时交货率极低,猜测马来西亚顾客对交货时效性要求较高,因为交货不及时导致拒收货品。
考虑到货品2主要在华东地区销售,可以考虑增大在华东地区的投入,减少对马来西亚的投入。
①货品4在西北地区,货品2在马来西亚地区两条线路存在较大的问题,继续提升时效。
②货品2在华东地区还有较大的市场空间,适合加大投入,同时货品2在西北配送时效长,用户拒货率较高,从成本考虑应该减少投入。
③货品1,2,4质量存在问题,建议扩大抽检范围,增大质检力度。
本人网盘分享的文件:物流行业数据分析项目
链接: https://pan.baidu.com/s/1YUBmAYGb2LG4UKmpp4EDMg?pwd=y6e8 提取码: y6e8