某品牌网络产品中国地区近14万条历史售后数据,涉及几个字段:shipCity(城市),raItem(产品型号),productSerial(产品序列号),shipCompany(公司名称/个人),RMA_ID(更换编号),insertDate(申请时间)。
数据已先通过Excel进行预处理,主要通过Python对数据进行分析。
本文主要探索该品牌售后需求的隐藏规律及信息
1、为相关部门人员、货物、技术服务的部署提供数据依据
2、为产品升级、市场策略调整提供建议
导入相关的包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
%matplotlib inline
sns.set(style='whitegrid',palette='tab10')
from pylab import *
mpl.rcParams['font.sans-serif']=['SimHei']#中文显示解决方案
plt.rcParams['axes.unicode_minus']=False #负号显示解决方案
读取数据
x_all=pd.ExcelFile('data_all.xlsx')
data=x_all.parse('Sheet1')
data=data.dropna()
data.info()
data.head()
data['Month']=data.insertDate.map(lambda x:x.split('/')[1])
data['Year']=data.insertDate.map(lambda x:x.split('/')[0])
data['Month']=data['Month'].astype('int')
data['Year']=data['Year'].astype('int')
data_year=data.groupby('Year')['raItem'].count()
fig,ax=plt.subplots(1,1,figsize=(12,5))
#2011-2017售后需求总体趋势
plt.plot(data_year,label='2011-2017')
2011-2017售后需求总体成上涨趋势,在返修率稳定的情况下,售后需求也反映了产品的市场情况
2011年起产品市场稳定上升,2016年有所回落
但在2017年找到突破口,销售量大幅上升
data_all=data.groupby('Month',as_index=False)['raItem'].count()
data_all['Index']=data_all['Month'].map({1:'Jan',2:'Feb',3:'Mar',4:'Apr',5:'May',6:'Jun',7:'Jul',8:'Aug',9:'Sep',10:'Oct',11:'Nov',12:'Dec'})
data_all=data_all.drop('Month',axis=1).set_index('Index')
data_all=data_all/6
data_2017=data[data['Year']==2017].groupby('Month',as_index=False)['raItem'].count()
data_2017['Index']=data_2017['Month'].map({1:'Jan',2:'Feb',3:'Mar',4:'Apr',5:'May',6:'Jun',7:'Jul',8:'Aug',9:'Sep',10:'Oct',11:'Nov',12:'Dec'})
data_2017=data_2017.drop('Month',axis=1).set_index('Index')
#一年中售后需求波动
fig,ax=plt.subplots(1,1,figsize=(12,5))
plt.plot(data_all,label='2011-2017')
plt.plot(data_2017,label='2017')
plt.legend()
2011-2017年平均每月售后需求和2017年的波动大致吻合,所以可以得知长期规律:
1.一年中有两个高峰期:618,、双11。在这两天后的2个月售后返修量最大,需要相关部门做好售后技术支持和返修服务的准备
2.在春节、五一、十一长假需求最低
相关准备:
1.仓库需要再5月、10月提前准备好库存应对返修高峰;
2.客服部门做出6、7、8月份,11,12月份人员部署,排班安排,技术培训,应对售后技术支持需求
city_data1=data.groupby('shipCity',as_index=False)['raItem'].count().sort_values(by='raItem',ascending=False)
city_data1=city_data1[city_data1['shipCity']!='NAN'][:15]
city_data1['raItem']=city_data1['raItem']/6
city_data1=city_data1.set_index('shipCity')
city_data1
city_2016=data[data['Year']==2016].groupby('shipCity',as_index=False)['raItem'].count().sort_values(by='raItem',ascending=False)
city_2016=city_2016[city_2016['shipCity']!='NAN'][:10]
city_2016=city_2016.set_index('shipCity')
city_2017=data[data['Year']==2017].groupby('shipCity',as_index=False)['raItem'].count().sort_values(by='raItem',ascending=False)
city_2017=city_2017[city_2017['shipCity']!='NAN'][:10]
city_2017=city_2017.set_index('shipCity')
city_data2=city_2016.add(city_2017,fill_value=0).sort_values(by='raItem',ascending=False)[:10]
city_data2
首先参考各个城市的售后需求量,另外考虑到全国各区域的覆盖情况
1.最终2016年前服务点:北京、上海、广州、深圳、杭州、成都、济南
2.最终2016年后服务点:北京、上海、广州、深圳
def get_year(s):
if s[4] in ['0','1','2','3','4','5','6','7','8','9']:
x='201'+s[4]
else:
x='2015'
return x
def get_month(s):
if s[5]=='A':
x=10
elif s[5]=='a':
x=10
elif s[5]=='B':
x=11
elif s[5]=='b':
x=11
elif s[5]=='C':
x=12
elif s[5]=='c':
x=12
else:
x=s[5]
return x
data['year']=data['productSerial'].map(get_year)
data['month']=data['productSerial'].map(get_month).astype('str')
from datetime import datetime
data['manufatory_a']=data['year']+'-'+data['month']+'-'+'1'
data['manufatory']=data['manufatory_a'].map(lambda x:datetime.strptime(x,'%Y-%m-%d'))
data.drop(['year','month','manufatory_a'],axis=1,inplace=True)
data['insertDate']=data['insertDate'].map(lambda x:datetime.strptime(x,'%Y/%m/%d'))
data['lifetime']=data['insertDate']-data['manufatory']
data['lifetime']=data['lifetime'].map(lambda x:x.days/365)
data.head()
lifetime=data.groupby('raItem',as_index=False)['lifetime'].mean().sort_values('lifetime')
lifetime=lifetime.sort_values('lifetime')
lifetime=lifetime[lifetime['lifetime']>0]
bad=lifetime[:15]
bad=bad.set_index('raItem')
bad
lifetime=lifetime.sort_values('lifetime',ascending=False)
lifetime=lifetime[lifetime['lifetime']>0]
good=lifetime[:15]
good=good.set_index('raItem')
good
company=data.groupby('shipCompany')['raItem'].count().sort_values(ascending=False)
companyList=company[:19]
companyList