美文网首页数据分析
英国零售商销售分析

英国零售商销售分析

作者: hylym | 来源:发表于2020-08-05 16:53 被阅读0次

目录
一. 项目背景
二. 数据探索
三. 数据清洗
四. 数据分析
1. 消费趋势分析
2. 用户行为分析
3. 用户分类 (按生命周期)

一.项目背景

基于2010到2011年的英国零售商的交易记录,分析消费趋势和用户行为,然后把用户按生命周期分类 。用于发现问题,优化精细化运营。


二.数据探索

1.导入和查看数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_csv('retail_data.csv')
df.head(2)

2.查看数据格式

df.info()

可以发现客户ID (CustomerID) 和商品描述 (Description) 这两列存在缺失值,下面需要进行处理

3.对数据总体进行描述统计分析

df.describe()

发现数量和单价两列的数据存在小于零的值,数量为负数有可能是退货数据,而单价为负数应该是异常值

4.检查异常数据

以 C 开头的发票号代表是退货发票
由上面得知,数量列的数据存在小于零的异常值


三.数据清洗

1.异常值处理

删除重复值,空值和小于 0 的异常值

df.drop_duplicates()
df = df[df.CustomerID.notnull()]
df = df[df.UnitPrice >= 0]
df.info()

2.检查异常值

3.时间格式处理

添加日期列和月份列,并转换格式为 datatime

df['Date'] = [x.split(' ')[0] for x in df['InvoiceDate']]
df['Date'] = pd.to_datetime(df.Date, format='%m/%d/%Y')
df['Month'] = df.Date.values.astype('datetime64[M]')

4.增加消费信息

添加消费金额这一列

df['Amount'] = df.Quantity * df.UnitPrice

四.数据分析

提取出需要的数据

df2 = df.pivot_table(index=['InvoiceNo'],
                     values=['CustomerID', 'Date', 'Month', 'Amount'],
                     aggfunc={'Amount': 'sum', 
                              'CustomerID': 'max', 
                              'Date': 'max', 
                              'Month': 'max'}
                     ).reset_index()

df2.head(3)

1.消费趋势分析

先剔除 2011 年 12 月份的数据,因为不完整

df3 = df2[df2.Month < '2011-12-01']
i.月消费总金额趋势
df3.groupby('Month').Amount.sum().plot()
ii.月消费频数趋势
df3.groupby('Month').CustomerID.count().plot()
iii.月独立顾客人数
df3.groupby('Month').CustomerID.nunique().plot()
iv.每一次消费的平均消费金额和每一位顾客的平均消费金额
plt.rcParams['font.sans-serif']= ['SimHei']

plt.figure(dpi=900, figsize= (12, 6))
plt.plot(((df3.groupby('Month').Amount.sum())/(df3.groupby('Month').CustomerID.count())), label='每一次消费平均消费金额', color='g')
plt.plot(((df3.groupby('Month').Amount.sum())/(df3.groupby('Month').CustomerID.nunique())), label='每一位顾客平均消费金额', color='r')
plt.legend()
小结

总体上 2011 年的发展趋势是不错的,特别是后半年
主要关注较近的时间,自 2011 年 8 月份起,从顾客消费总金额,消费频数,和独立的顾客数来看,业务正在大幅度增长;
但从每一次消费或者每一位顾客的平均消费金额来看,在 11 月份是有较大幅度的下降的。据了解,应该是因为该月份有关于 ‘黑色星期五’ 的促销活动。而且粗略估计,活动效果很好,这可以由下面的「顾客平均消费频次趋势图」得以验证。

顾客平均消费频次趋势图 2011 年11 月份顾客平均消费频次较上月份上升了约13%。

2.用户行为分析

(1)退货率分析

i.打印各月的退货率
temp1 = df2.pivot_table(columns='Month', values='InvoiceNo', aggfunc='count')

temp2 = df2[df2.InvoiceNo.str[0] == 'C'].pivot_table(columns='Month', values='InvoiceNo', aggfunc='count')

temp2/temp1
ii.平均退货率
iii.可视化各月份退货率和平均退货率
t = (temp2/temp1).T.reset_index()
t['Mean'] = t.InvoiceNo.mean()
plt.figure(dpi=900, figsize= (12, 6))
plt.plot(t.groupby('Month').InvoiceNo.sum(), color='g')
plt.plot(t.groupby('Month').Mean.sum(), color='r', linestyle='-')
小结

总体上,退货率呈现下降的趋势。
但较近的 2011 年 12 月份较上一个月的退货率有一定幅度的上升,需要跟进发掘问题原因。

(2)复购率分析

ConsumeGroupByMonth = df3.pivot_table(index='CustomerID', 
                                      columns='Month', 
                                      values='Date', 
                                      aggfunc='count').fillna(0)
reBuy = ConsumeGroupByMonth.applymap(lambda x: 1 if x>1 else np.NaN if x==0 else 0)
(reBuy.sum()/reBuy.count()).plot(figsize= (10, 4))

小结

2011 年 11 月份复购率较高的原因,应该也是因为黑色星期五相关的活动。
而分析之前几个月份(8 到 10 月),发现复购率上升得较为平缓。
根据上面得分析,知道这期间也是业务高速发展的时期,但还是缺少活动来刺激消费了。

(3)回购率分析

i.标记顾客是否有购买和回购行为
State = ConsumeGroupByMonth.applymap(lambda x: 1 if x>0 else 0)

def buy_back(data):
    status= []
    for i in range(11):
        if data[i] == 1:
            if data[i + 1] == 1:
                status.append(1)
            if data[i + 1] == 0:
                status.append(0)
        else:
            status.append(np.NaN)
    status.append(np.NaN)
    return status

BuyBack = State.apply(buy_back, axis=1)

1 表示回购,0 表示购买


ii.可视化回购率
(BuyBack.sum()/BuyBack.count()).plot(figsize= (10, 4))
小结

2011 年的下半年保持的很好


3.用户分类 (按生命周期)

i.建立数据透视表,以当月是否消费来标记顾客
ConsumeGroupByMonth = df3.pivot_table(index='CustomerID', 
                                      columns='Month', 
                                      values='Date', 
                                      aggfunc='count').fillna(0)
State = ConsumeGroupByMonth.applymap(lambda x: 1 if x>0 else 0)
ii.标记顾客的生命周期阶段

(未登记,新顾客,活跃顾客,不活跃/流失顾客,回流顾客)

def states(data):
    states= []
    for i in range(12):
        if data[i]== 0:    #本月没有消费
            if len(states) > 0:
                if states[i - 1] == 0:
                    states.append('unreg')
                elif states[i - 1] == 'unreg':
                    states.append('unreg')
                else:
                    states.append('inactive')
            else:
                states.append('unreg')
                
        else:      #本月有消费
            if len(states) == 0:
                states.append('new')
            else:
                if states[i-1] == 'unreg':
                    states.append('new')
                elif states[i - 1] == 'inactive':
                    states.append('return')
                else:
                    states.append('active')
    return states

States = State.apply(states, axis=1)
iii.可视化顾客构成
StatesCount = States.replace('unreg', np.NaN).apply(lambda x: pd.value_counts(x))
StatesCount.fillna(0).T.plot.area()
小结

在「消费趋势分析」中,可见在 2011 年下半年期间,业务在高速发展。
从用户分类的分析中,可以看出,虽然顾客总量越来越多,但不活跃顾客的占比十分大,这些顾客可能正在流失。
可通过个性化推荐来唤醒不活跃顾客,或通过优惠等方式来激励,提升购买频次。
对于严重的、流失的顾客,需要跟进获取顾客反馈,了解顾客体验、需求变化,来挽回顾客。同时,还要了解竞争对手的情况。

对于活跃顾客,要维护好,避免流失;例如,可以提供会员成长服务,来增加顾客的粘性,和提升顾客体验。

对于新顾客和回流顾客,要提升回购率,如:提供优惠券之类促进再次消费的方式。

相关文章

网友评论

    本文标题:英国零售商销售分析

    本文链接:https://www.haomeiwen.com/subject/gsknrktx.html