Pandas学习——物流行业数据分析

——————————————学习资料和数据来源于B站-Python-学习库——————————

一.待分析问题

  1. 货品的配送服务有没有问题——交货情况分析
  2. 有没有具有销售潜力的区域——货品销售情况分析
  3. 货品质量问题——货品用户反馈情况分析

二.初识数据-清洗数据

data=pd.read_csv("data_wuliu.csv",encoding='gb2312')
print(data.info())
print(data.describe())

运行结果表明,需要的操作:

1.删除空行

2.数据格式(时间→datetime;销售金额→规整且统一格式、可计算)

3.删除重复值

4.异常值(销售额!=0的行)

清洗数据

#数据清洗
data=data.dropna(axis=0,how='any')#存在空,则删除该行
data=data.drop_duplicates(keep='first')#删除重复值,保留第一个
data=data.drop(columns=['订单行'],axis=1)#删除无用列
data=data[data["销售金额"]!=0]#保留销售金额不为0的数据
data['sale_time']=pd.to_datetime(data['销售时间'])#将销售时间格式转换成datetime格式
data['月份']=data['sale_time'].apply(lambda x:x.month)#对销售时间做映射,提取其中的月份信息,写入“月份”列


#对销售金额进行规整:对于
def amounts_deal(x):
    if x.find('万元')!=-1:#说明销售金额中存在万元,转换成以元为单位的浮点型
        amounts=float(x[:x.find('万元')].replace(',',''))*10000
    else:
        amounts=float(x[:x.find('元')].replace(',',''))
    return amounts
#调用函数-处理销售金额
data['销售金额']=data['销售金额'].map(amounts_deal)

#重新更新索引
data=data.reset_index(drop=True)

三.数据分析及可视化


"""1.货品的配送服务有没有问题——交货情况分析"""
data['货品交货状况']=data['货品交货状况'].str.strip()#货品交货状况改成字符串的格式,并去除前后空格
#a.时间维度看货品交货状态
data1=data.groupby(by=['月份','货品交货状况']).size().unstack()
data1['按时交货率'] = data1['按时交货']/(data1['按时交货']+data1['晚交货'])
data1['按时交货率'].plot(kind='line')
plt.xlabel('月份')
plt.ylabel('按时交货率')
plt.title('月份-按时交货率分析')

#b.货品维度
data2=data.groupby(by=['货品','货品交货状况']).size().unstack()
data2['按时交货率'] = data2['按时交货']/(data2['按时交货']+data2['晚交货'])
data2['按时交货率'].plot(kind='line')
plt.xlabel('货品')
plt.ylabel('按时交货率')
plt.title('货品-按时交货率分析')

#c.销售区域维度
data3=data.groupby(by=['销售区域','货品交货状况']).size().unstack()
data3['按时交货率'] = data3['按时交货']/(data3['按时交货']+data3['晚交货'])
data3['按时交货率'].plot(kind='line')
plt.xlabel('销售区域')
plt.ylabel('按时交货率')
plt.title('销售区域-按时交货率分析')

#d 货品和销售区域维度
data['货品交货状况']=data['货品交货状况'].str.strip()
data2=data.groupby(['货品','销售区域','货品交货状况']).size().unstack()
data2['按时交货率']=data2['按时交货']/(data2['按时交货']+data2['晚交货'])

结果:不同维度下交货率

从月份上来看, 11月份按时交货率最低,第四季度的按时交货率普遍低于第三季度;

从货品上来看,货品4的按时交货率极低,急需该货品的更多数据进行分析和提出改善意见;

从销售区域上看,西北地区的按时交货率极低,需要针对该区域的物流信息做出分析和调整

从货品和销售区域多维分析,货品2在马来西亚的按时交货率极低,货品1和货品2在西北的交货率也很低;

"""2.有没有具有销售潜力的区域——货品销售情况分析"""
#a.时间-货品销售数量(判断哪里可以增加宣传力度)
data4=data.groupby(by=['月份','货品'])['数量'].sum().unstack()#分组后对不同货品数量进行求和,进而分析
data4.plot(kind='line')
plt.xlabel('月份')
plt.ylabel('货品售出数量')
plt.title('月份-货品售出数量')
plt.show()

#b.时间-货品销售数量(判断什么时间可以增加宣传力度)
data5=data.groupby(by=['销售区域','货品'])['数量'].sum().unstack()#分组后对不同货品数量进行求和
print(data5)

结果:货品销售维度分析

 从月份上来看,货品2在十月和十二月销量猛增猜测可能的原因有三:

1.加大了营销力度

2.开辟了新市场——验证货品2在马来西亚和华东地区销量随时间的变化,发现,十月份和十二月份,马来西亚的货品2销售并没有提高,说明十月、十一月销量的增大和开辟新市场可能无关,可能是增大了在华东地区的营销力度

#单独分析货品2在华东和马来西亚的销量随时间变化的关系
data1=data[data['货品']=='货品2']
data2=data1.groupby(by=['月份','销售区域'])['数量'].sum().unstack()
print(data2)
data2.plot(kind='line')
plt.title('货品2在马来亚和华东地区销量随时间的变化关系')
plt.show()

3.十月份是货品2需求量较高的时期,但考虑到十一月销量猛然下降,可能不是自然原因导致,该猜测力降低。

为验证猜测,分析不同月份和地区下,货品2在不同销售区域的销量


分析不同区域下不同货品的销量结果

销售区域货品1货品2货品3货品4货品5货品6
华东NaN53812.0NaNNaNNaNNaN
华北2827.0NaN9073.5NaNNaNNaN
华南579.0NaNNaNNaNNaNNaN
泰国NaNNaNNaNNaN5733.0NaN
西北11.0NaNNaN5229.0NaNNaN
马来西亚NaN1510.0NaNNaNNaN8401.0

可以看出,货品1具有三个销售区域,其中华北销量较好,华南销量较低,西北销量最低,需要加大影响力度;

货品2有两个销售区域,华东和马来西亚,其余都是只有一个销售力度


"""3.货品质量问题——看退货情况"""
#从货品和销售区域维度看
data['货品用户反馈']=data['货品用户反馈'].str.strip()
data5=data.groupby(['货品','销售区域'])['货品用户反馈'].value_counts().unstack()
data5['拒货率']=data5['拒货']/data5.sum(axis=1)
data5['返修率']=data5['返修']/data5.sum(axis=1)
data5['合格率']=data5['质量合格']/data5.sum(axis=1)
data5.sort_values(['合格率','返修率','拒货率'],ascending=False,inplace=True)
print(data5)

结果:

货品用户反馈拒货质量合格返修拒货率返修率合格率
货品销售区域
货品3华北31.0188.019.00.1302520.0797880.789219
货品6马来西亚56.0246.014.00.1772150.0442790.777936
货品5泰国14.0144.029.00.0748660.1550180.769108
货品2华东72.0184.051.00.2345280.1659970.598568
货品1华南5.04.02.00.4545450.1746030.343963
西北NaN1.02.0NaN0.6666670.272727
华北NaN3.012.0NaN0.8000000.189873
货品4西北NaN9.049.0NaN0.8448280.152945
货品2马来西亚6.01.03.00.6000000.2830190.091886

结果看来

货品3.6.5合格率均较高,返修率比较低,说明质量还可以

货品1.2.4合格率较低,返修率较高,质量存在一定的问题,需要改善

货品2在马拉西亚的拒货率最高,同时货品2在马来西亚的按时交货率较低,为0.100000。猜测:马来西亚人对送货的时效性要求较高,如果达不到,则往往考虑拒货。

考虑到货品2主要在华东地区销售量大,可以考虑增大在华东的投资,适当减小马来西亚的投入。

四.数据分析报告

综合数据分析报告

数据来源于某企业销售的6种商品所对应的送货及用户反馈结果数据,分别在货品按时交货率、货品销量、货品质量上进行了分析

1.按时交货率

从月份上来看, 11月份按时交货率最低,第四季度的按时交货率普遍低于第三季度,说明货品运送情况可能与季节、温度有关

从货品上来看,货品4的按时交货率极低,急需该货品的更多数据进行分析,以指导得出按时交货率低的主要原因并提出改善意见;

从销售区域上看,西北地区的按时交货率极低,需要针对该区域的物流信息做出分析和调整

2.货品销量

六种货品除货品2外整体波动不大,货品2在十月和十二月销量猛增,该货品共有两个销售区域,分别为华东和马来西亚,对华东和马来西亚区域货品2的销量分析得,货品2在华东地区的销量较好在马来西亚销量较低,需要做出措施,且在十月份,华东地区销量猛增,可能加大了营销力度。

3.货品质量

货品3.6.5合格率均较高,返修率比较低,说明质量还可以

货品1.2.4合格率较低,返修率较高,质量存在一定的问题,需要改善

货品2在马拉西亚的拒货率最高,同时,在货品2在马拉西亚的按时交货率也非常低。猜测:马来西亚人对送货的时效性要求较高,如果达不到,则往往考虑拒货。考虑到货品2主要在华东地区销售量大,可以考虑增大在华东的投资,适当减小马来西亚的投入。

五.知识点get√

  1. 格式object→datetime
  2. python中find()函数
  3. 删除空/重复/列
  4. apply() 函数,自由度较高,可以直接对 Series(带标签的一位数组) 或者 DataFrame (表格型的数据结构,既有行索引,也有列索引,可看做Series组成的字典)中元素进行逐元素遍历操作,方便且高效,具有类似于 Numpy 的特性。
  5. unstack():将DataFrame格式中行转换成列,便于清晰显示。