有优衣库销售数据,先需要对这些数据进行分析。
首先导入数据
import pandas as pd
import matplotlib.pyplot as plt、
import seaborn as sb
%matplotlib inline
uniqo_data = pd.read_csv("uniqco.csv")
uniqo_data.head() #查看一下数据基本情况

info()和describe()也看一下


可以看到数据没有np.nan,一共有22293条数据,这里可以发现年龄已经给做了离散化处理了。describe中的revenue中最小值为-0.66,收益为负需要考虑是否是异常值,如果数据量不大可以去掉。
查看revenue<1的样本,发现收益为0的还不少,推测这些数据可能是产生了退款导致的。

分析顾客消费习惯
先简单从线上线下分析
uniqo_data.groupby('channel')[['quant']].sum()

总的来说线下卖出的订单量多一些(先不考虑收益为0可能被退货的情况)。
接下来在分组中加入city字段:
##uniqo_data.groupby(['city','channel'])[['quant']].sum()
uniqo_data.groupby(['city','channel'])[['quant']].sum().unstack()
#用透视表也可以和分组相同的效果
uniqo_data.pivot_table(values='quant',index='city',columns='channel',aggfunc='sum')


这样可以看出各城市是有差别的,有些城市没有线上销售的记录,有些城市的线上大于线下。例如北京没有线上数据,广州线上大于线下,这种情况可能是由于北京没有线上发货仓库,线上订单需要从其他有发货仓库的城市发货。
sb.countplot(x='city',hue='channel',data=uniqo_data)

析哪种产品销量最好
uniqo_data.pivot_table(values='quant',index='gender_group',columns='product',aggfunc='sum')

可以看到女性做出了主要贡献,接下来再加入年龄组字段,但在此之前先看一下年龄与订单的关系:
sb.countplot(x='age_group',hue='gender_group',data=uniqo_data)

有趣的是,分析发现,大于60岁的男性的销售数量是唯一大于女性的
uniqo_data.pivot_table(values='quant',index=['gender_group','age_group'],columns='product',aggfunc='sum')


两个图截不到一起,拆开了。
消费习惯 工作日还是周末
df = uniqo_data.pivot_table(index = ['wkd_ind','channel'],columns=['city'],values = 'quant',aggfunc='sum')
df['sumrow'] = df.sum(axis=1)
df

仔细一看,这个结果似乎不太对劲,周末的销量比工作日还低。这是因为这个周末只有两天,工作日有5天,所以我们还需要求个日均销售量。

这样看来数据就合理多了。
销售额与成本的关系
# 用到的就是皮尔逊相关系数
uniqco[['revenue','unit_cost']].corr()
#结果 : 0.14844
看起来相关性不高,这是因为我们没有计算销售量quant的影响
uniqco['revenue_perquant'] = uniqco['revenue']/uniqco['quant']
uniqco[['rev_per_goods','unit_cost']].corr()
#结果 0.502198
提高了很多,另外成本也和其他因素有关,比如房租,物流,工资等等,所以这两者达不到很高的相关性。