用戶消費(fèi)行為分析

前言:本文數(shù)據(jù)量來源于網(wǎng)上,是一份CD的消費(fèi)數(shù)據(jù),數(shù)據(jù)鏈接會(huì)放在文章最后,請(qǐng)需要者自取。本文分析的主要工具為:Python以及pandas、numpy和matplotlib三個(gè)第三方工具包。

本文目錄:

image.png

分析過程如下:

1. 導(dǎo)入數(shù)據(jù)和清理數(shù)據(jù)

導(dǎo)入pandas、numpy和matplotlib及相關(guān)設(shè)置:

# 導(dǎo)入pandas、numpy和matplotlib
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 讓所作圖形立即呈現(xiàn)的設(shè)置
%matplotlib inline
# 中文字符和正負(fù)號(hào)正常顯示的設(shè)置
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

讀取數(shù)據(jù):

# 源數(shù)據(jù)共有四個(gè)字段,分別為用戶ID、訂單時(shí)間、訂單商品數(shù)、訂單金額,但源數(shù)據(jù)沒有字段名,所以在這里添加字段名如下
columns=['user_id','order_dt','order_products','order_amount']
# 用\s+匹配任意空白符
df=pd.read_csv('CDNOW_master.txt',names=columns,sep='\s+')

查看前五行:

df.head()
image.png
  • user_id : 用戶ID
  • order_dt : 訂單時(shí)間
  • order_products : 訂單商品數(shù)
  • order_amount : 訂單金額
    查看數(shù)據(jù)信息:
df.info()
image.png

可以知道,該份數(shù)據(jù)共有四個(gè)字段,且各個(gè)字段均沒有空值,是一份很干凈的數(shù)據(jù),但是第二個(gè)字段表示訂單時(shí)間,數(shù)據(jù)類型卻是int,所以我們需要將其轉(zhuǎn)化為時(shí)間類型datetime

# 轉(zhuǎn)換時(shí)間格式為datetime
df['order_dt']=pd.to_datetime(df.order_dt,format='%Y%m%d')
# 下面按照月份分析,所以需添加一個(gè)字段month,用它來表示訂單日期所在的月份,格式為月份的第一天
df['month']=df.order_dt.values.astype('datetime64[M]')

查看處理過后的數(shù)據(jù)前5行數(shù)據(jù):

df.head()
image.png
df.order_dt.values # 查看order_dt的值
image.png

通過查看order_dt的值可以知道,它的數(shù)據(jù)類型已經(jīng)改為datetime
至此,我們已經(jīng)完成了數(shù)據(jù)清洗工作,并添加了需要的字段month

數(shù)據(jù)描述性統(tǒng)計(jì):

df.groupby('user_id').sum().describe()
image.png

從用戶角度看,每位用戶平均購(gòu)買7張CD,最多的用戶購(gòu)買了1033張,屬于狂熱用戶了。用戶的平均消費(fèi)金額(客單價(jià))100元,標(biāo)準(zhǔn)差是240,結(jié)合分位數(shù)和最大值看,平均值才和75分位接近,肯定存在小部分的高額消費(fèi)用戶。

2. 進(jìn)行用戶消費(fèi)趨勢(shì)的分析(按月)

  • 每月的消費(fèi)總金額
  • 每月的訂單數(shù)量
  • 每月的消費(fèi)產(chǎn)品件數(shù)
  • 每月的消費(fèi)人數(shù)
  • 每月用戶平均消費(fèi)金額
  • 每月用戶平均消費(fèi)次數(shù)

2.1 每月的消費(fèi)總金額

按照月份進(jìn)行分組,并計(jì)算各個(gè)月份訂單的消費(fèi)總金額

grouped_month=df.groupby('month')
order_dt_amount=grouped_month.order_amount.sum()
order_dt_amount
image.png

可視化:作出消費(fèi)總金額隨時(shí)間的折線圖

order_dt_amount.plot()
plt.title('每月消費(fèi)總金額')
image.png

由上圖可知,消費(fèi)金額在前三個(gè)月達(dá)到最高峰,后續(xù)消費(fèi)較為穩(wěn)定,有輕微下降趨勢(shì)

2.2 每月的訂單數(shù)量

計(jì)算出每月的訂單數(shù)量并作出其折線圖:

# 作出每月訂單數(shù)量隨時(shí)間變化的折線圖
grouped_month.user_id.count().plot()  # 注意,此處算出來的不是用戶數(shù)量而是訂單數(shù)量,用戶數(shù)量計(jì)算在后面
plt.title('每月訂單數(shù)量')
image.png

前三個(gè)月每月訂單數(shù)在10000筆左右,后續(xù)月份每月的訂單數(shù)在2500筆左右

2.3 每月消費(fèi)商品件數(shù)

計(jì)算出每月消費(fèi)商品件數(shù)并作出其折線圖:

# 作出每月消費(fèi)商品件數(shù)隨時(shí)間變化的折線圖
grouped_month.order_products.sum().plot()
plt.title('每月消費(fèi)商品件數(shù)')
image.png

前三個(gè)月每月消費(fèi)商品件數(shù)在23000件左右,后續(xù)月份每月消費(fèi)總金額在7000件左右

2.4 每月用戶數(shù)量

計(jì)算出每月的用戶數(shù)量并作出其折線圖:

# 作出每月用戶數(shù)量隨時(shí)間變化的折線圖
grouped_month.user_id.apply(lambda x: len(x.drop_duplicates())).plot()
plt.title('每月用戶數(shù)量')
# 另一種去重方式:df.groupby(['month','user_id']).count().reset_index()
image.png

前三個(gè)月每月用戶數(shù)量在9000人左右,后續(xù)月份每月用戶數(shù)量在2000人左右

2.5 每月用戶消費(fèi)的平均金額

((grouped_month.order_amount.sum())/(grouped_month.user_id.apply(lambda x: len(x.drop_duplicates())))).plot()
plt.title('每月用戶消費(fèi)的平均金額')
image.png

前三個(gè)月用戶平均消費(fèi)在40元左右,后續(xù)月份用戶平均消費(fèi)金額相比前三個(gè)月有一些提高,用戶平均消費(fèi)金額在區(qū)間[45,57.5]之間

2.6 每月用戶消費(fèi)的平均次數(shù)

計(jì)算出每月用戶消費(fèi)的平均次數(shù)并作出其折線圖:

((grouped_month.user_id.count())/(grouped_month.user_id.apply(lambda x : len(x.drop_duplicates())))).plot()
plt.title('每月用戶消費(fèi)的平均次數(shù)')
image.png

前三個(gè)月用戶消費(fèi)的平均次數(shù)逐漸增加,后續(xù)月份用戶的平均消費(fèi)次數(shù)在1.35次左右

3. 用戶個(gè)體消費(fèi)分析

  • 用戶消費(fèi)商品數(shù)與消費(fèi)總金額的描述統(tǒng)計(jì)
  • 用戶消費(fèi)金額和消費(fèi)商品數(shù)的散點(diǎn)圖
  • 用戶消費(fèi)金額的分布圖
  • 用戶消費(fèi)次數(shù)的分布圖
  • 用戶累計(jì)消費(fèi)金額占比(百分之多少的用戶占了百分之多少的消費(fèi)額)

3.1 用戶消費(fèi)商品數(shù)與消費(fèi)總金額的描述統(tǒng)計(jì)

grouped_user=df.groupby('user_id')
grouped_user.sum().describe()
image.png
  • 用戶平均購(gòu)買了7張CD,但是中位數(shù)只有3,說明小部分用戶購(gòu)買了大量的CD
  • 用戶平均消費(fèi)了106元,中位數(shù)只有43,判斷同上,有極值干擾

3.2 消費(fèi)金額和消費(fèi)商品數(shù)的散點(diǎn)圖

# 每筆訂單消費(fèi)金額與消費(fèi)商品數(shù)的散點(diǎn)圖
df.plot.scatter(x='order_amount',y='order_products')
plt.title('訂單散點(diǎn)圖')
image.png

繪制每筆訂單的散點(diǎn)圖。從圖中觀察,訂單消費(fèi)金額和訂單商品量呈規(guī)律性,每個(gè)商品十元左右。訂單的極值較少,超出1000的就幾個(gè)。顯然不是異常波動(dòng)的罪魁禍?zhǔn)住?/p>

過濾掉訂單金額大于4000的訂單:

# 每位用戶的消費(fèi)金額與消費(fèi)商品數(shù)散點(diǎn)圖
plt.style.use('ggplot')
# 用query過濾掉訂單金額大于4000的訂單,減小極值干擾
grouped_user.sum().query('order_amount<4000').plot.scatter(x='order_amount',y='order_products')
plt.title('消費(fèi)金額-消費(fèi)商品數(shù)')
image.png

繪制用戶的散點(diǎn)圖,用戶也比較健康,而且規(guī)律性比訂單更強(qiáng)。因?yàn)檫@是CD網(wǎng)站的銷售數(shù)據(jù),商品比較單一,金額和商品量的關(guān)系也因此呈線性,沒幾個(gè)離群點(diǎn)。消費(fèi)能力特別強(qiáng)的用戶有,但是數(shù)量不多。為了更好的觀察,用直方圖

3.3 用戶消費(fèi)金額的分布圖

grouped_user.sum().order_amount.plot.hist(bins=20)
plt.title('消費(fèi)金額分布圖')
image.png

從直方圖可知,用戶消費(fèi)金額,絕大部分呈現(xiàn)集中趨勢(shì),小部分異常值干擾了判斷,可以使用過濾操作排除異常

# 過濾掉商品數(shù)大于100的訂單,減小極值影響
grouped_user.sum().query('order_products<100').order_amount.hist(bins=40)
plt.title('消費(fèi)金額分布圖')
image.png
# 計(jì)算過濾后數(shù)據(jù)的描述統(tǒng)計(jì)
grouped_user.sum().query('order_products<100').describe()

使用切比雪夫定理過濾掉異常值,計(jì)算95%的數(shù)據(jù)的分布情況 95%的數(shù)據(jù)在[mean-5std,mean+5std]
通過計(jì)算可知,95%的消費(fèi)在區(qū)間[0,856.5]元之間

3.4 用戶消費(fèi)次數(shù)的分布圖

plt.figure(figsize=(12,5))
grouped_user.count().query('order_products<100').order_amount.hist(bins=40)
plt.title('消費(fèi)次數(shù)分布圖')
image.png
  • 從直方圖看,大部分用戶的消費(fèi)能力確實(shí)不高,大多只消費(fèi)了一次或兩次,高消費(fèi)用戶在圖上幾乎看不到,這也確實(shí)符合消費(fèi)行為的行業(yè)規(guī)律,即“二八法則”
  • 下面通過計(jì)算累計(jì)消費(fèi)金額和累計(jì)消費(fèi)商品數(shù)百分比來分析用戶累計(jì)消費(fèi)金額的占比

3.5 用戶累計(jì)消費(fèi)金額占比(百分之多少的用戶占了百分之多少的消費(fèi)額)

user_cumsum=grouped_user.sum().sort_values('order_amount').apply(lambda x: x.cumsum()/x.sum())
plt.subplot(211)
user_cumsum.reset_index().order_amount.plot(figsize=(8,8))
plt.title('消費(fèi)金額累計(jì)百分比')
plt.subplot(212)
user_cumsum.reset_index().order_products.plot()
plt.title('消費(fèi)商品數(shù)累計(jì)百分比')

image.png

由上圖可知,7570位用戶貢獻(xiàn)了消費(fèi)額的80%,即32%的用戶貢獻(xiàn)了80%的消費(fèi)金額
同樣地,8250位用戶貢獻(xiàn)了消費(fèi)商品數(shù)量的80%,即34%的用戶貢獻(xiàn)了消費(fèi)商品數(shù)的80%
該結(jié)果符合消費(fèi)行業(yè)規(guī)律——“二八法則”

4. 用戶消費(fèi)行為

  • 用戶第一次消費(fèi)(首購(gòu))
  • 用戶最后一次消費(fèi)
  • 新老客消費(fèi)比
    • 多少用戶僅消費(fèi)了一次?
    • 每月新客占比?
  • 用戶分層
    • RFM
    • 新、活躍、回流、流失/不活躍
  • 用戶購(gòu)買周期(按訂單)
    • 用戶消費(fèi)周期描述
    • 用戶消費(fèi)周期分布
  • 用戶生命周期(按第一次 & 最后一次消費(fèi))
    • 用戶生命周期描述
    • 用戶生命周期分布

4.1 用戶第一次消費(fèi)(首購(gòu))

grouped_user.min().order_dt.value_counts().plot(figsize=(12,5))
plt.title('第一次消費(fèi)時(shí)間的分布')
image.png

計(jì)算用戶第一次購(gòu)買的時(shí)間:

grouped_user.min().month.value_counts()
image.png

用戶第一次購(gòu)買分布集中在前三個(gè)月
其中,在2月11日至2月25日有一次劇烈的波動(dòng)

4.2 用戶最后一次消費(fèi)時(shí)間

grouped_user.max().month.value_counts().plot(figsize=(12,5))
plt.title('最后一次消費(fèi)時(shí)間分布')
image.png

計(jì)算用戶最后一次購(gòu)買時(shí)間:

# 計(jì)算最后一次購(gòu)買時(shí)間
grouped_user.max().month.value_counts()
image.png
  • 用戶最后一次購(gòu)買的分布比第一次分布廣,
    大部分最后一次購(gòu)買,集中在前三個(gè)月,說明有很多用戶購(gòu)買了一次后就不在進(jìn)行購(gòu)買
  • 隨著時(shí)間的遞增,最后一次購(gòu)買數(shù)也在遞增,消費(fèi)呈現(xiàn)流失上升的狀況

4.3 新老客消費(fèi)比

  • 多少用戶僅消費(fèi)了一次?
  • 每月新客占比?

計(jì)算只消費(fèi)了一次的用戶人數(shù):

# 計(jì)算只消費(fèi)了一次的用戶人數(shù)
grouped_user.count().query('order_dt==1').order_dt.count()
image.png

計(jì)算總的消費(fèi)人數(shù):

# 計(jì)算總的消費(fèi)人數(shù)
grouped_user.count().order_dt.count()
image.png

由上可知,有一半的用戶只消費(fèi)了一次

計(jì)算每月新客占比并作出其百分比折線圖:

# 按月份和用戶ID分組
grouped_month_user=df.groupby(['month','user_id'])
# 用當(dāng)月用戶訂單日期最小值與用戶訂單日期最小值聯(lián)結(jié)
tmp=grouped_month_user.order_dt.agg(['min']).join(grouped_user.order_dt.min())
# 判斷用戶當(dāng)月訂單日期最小值是否與用戶訂單日期最小值相等,新建字段new
tmp['new']=(tmp['min']==tmp.order_dt)
# 作新客占比折線圖
tmp.reset_index().groupby('month').new.apply(lambda x: x.sum()/x.count()).plot()
plt.title('新客占比百分比')
image.png

可以看出,只有前三個(gè)月的新客占比不為零,后續(xù)月份新客占比百分比為零,這說明只有前三個(gè)月有新用戶的增加,后續(xù)月份消費(fèi)的用戶是前三個(gè)月加入的老客戶,并沒有新客戶的加入

4.4 用戶分層

  • RFM
  • 新、活躍、回流、流失/不活躍
# 作透視表
rfm=df.pivot_table(index='user_id',
                   values=['order_dt','order_amount','order_products'],
                   aggfunc={'order_dt':'max','order_products':'sum','order_amount':'sum'})
rfm.head()
image.png
  • R:消費(fèi)最后一次消費(fèi)時(shí)間的度量,數(shù)值越小越好
  • F:消費(fèi)的總商品數(shù),數(shù)值越大越好
  • M:消費(fèi)的總金額,數(shù)值越大越好
# 計(jì)算每位用戶最后一次消費(fèi)時(shí)間與全部用戶最后一次消費(fèi)時(shí)間的差值
rfm['R']=-(rfm.order_dt-rfm.order_dt.max())/np.timedelta64(1,'D')
rfm.rename(columns={'order_products':'F','order_amount':'M'},inplace=True)
rfm.head()
image.png
# 客戶層次的定義
def rfm_func(x):
    level=x.apply(lambda x: '1' if x>=0 else '0')
    label=level.R+level.F+level.M
    d={
        '111':'重要價(jià)值客戶',
        '011':'重要保持客戶',
        '101':'重要挽留客戶',
        '001':'重要發(fā)展客戶',
        '110':'一般價(jià)值客戶',
        '010':'一般保持客戶',
        '100':'一般挽留客戶',
        '000':'一般發(fā)展客戶'
    }
    result=d[label]
    return result

rfm['label']=rfm[['R','F','M']].apply(lambda x: x-x.mean()).apply(rfm_func,axis=1)

查看rfm的前10行數(shù)據(jù):

rfm.head(10)
image.png
# 計(jì)算每層客戶R、F、M的和
rfm.groupby('label').sum()
image.png

可以看出,重要保持客戶對(duì)于消費(fèi)總金額的占比遠(yuǎn)大于其他客戶的占比,這說明絕大部分收益是由重要保持客戶貢獻(xiàn)的,只要能保證這部分客戶不流失和增加,那么公司收益將得到有力保障

# 增加字段color,為下面作圖做準(zhǔn)備
rfm.loc[rfm.label=='重要保持客戶','color']='r'
rfm.loc[~(rfm.label=='重要保持客戶'),'color']='g'
rfm.plot.scatter('F','R',c=rfm.color)
plt.title('F-R')
image.png

從RFM分層可知,大部分用戶為重要保持客戶,但是這是由于極值的影響,所以RFM的劃分標(biāo)準(zhǔn)應(yīng)該以業(yè)務(wù)為準(zhǔn)

  • 盡量用小部分的用戶覆蓋大部分的份額
  • 不要為了數(shù)據(jù)好看劃分等級(jí)

作透視表:

# 作透視表,計(jì)算客戶每個(gè)月的消費(fèi)次數(shù)
pivoted_counts=df.pivot_table(index='user_id',
                              columns='month',
                              values='order_dt',
                              aggfunc='count').fillna(0)
pivoted_counts.head()
image.png

以上透視表記錄了每位用戶每月消費(fèi)次數(shù)的記錄,是一份消費(fèi)明細(xì)表

# 當(dāng)月有消費(fèi)記為1,沒有消費(fèi)記為0
df_purchase=pivoted_counts.applymap(lambda x: 1 if x>0 else 0)
df_purchase.tail()
image.png
# 定義columns_month
columns_month=df.groupby('month').sum().reset_index().month
columns_month
image.png

將用戶狀態(tài)分為unreg(未注冊(cè))、new(新客)、active(活躍用戶)return(回流用戶)和unactive(不活躍用戶):

# 狀態(tài)函數(shù)
def active_status(data):
    status=[]
    for i in range(18):
        
        # 若本月沒有消費(fèi)
        if data[i]==0:
            if len(status)>0:
                if status[i-1] == 'unreg':
                    status.append('unreg')
                else:
                    status.append('unactive')
            else:
                status.append('unreg')
                
        # 若本月消費(fèi)
        else:
            if len(status) == 0:
                status.append('new')
            else:
                if status[i-1] == 'unactive':
                    status.append('return')
                elif status[i-1] == 'unreg':
                    status.append('new')
                else:
                    status.append('active')
    return pd.Series (status,index=columns_month)

函數(shù)編寫思路:

  • 若本月沒有消費(fèi)
    • 若之前是未注冊(cè),則依舊為未注冊(cè)
    • 若之前有消費(fèi),則為流失/不活躍
    • 其他情況,為未注冊(cè)
  • 若本月有消費(fèi)
    • 若是第一次消費(fèi),則為新用戶
    • 若之前有過消費(fèi),則上個(gè)月為不活躍,則為回流
    • 若上個(gè)月為未注冊(cè),則為新用戶
    • 除此之外,為活躍
# 應(yīng)用上面的函數(shù)
purchase_stats=df_purchase.apply(active_status,axis=1)
purchase_stats.head()
image.png

由上表可知,每月的用戶消費(fèi)狀態(tài)

  • 活躍用戶,持續(xù)消費(fèi)的用戶,對(duì)應(yīng)的使消費(fèi)運(yùn)營(yíng)的質(zhì)量
  • 回流用戶,之前不消費(fèi)本月才消費(fèi),對(duì)應(yīng)的是喚回運(yùn)營(yíng)
  • 不活躍用戶,對(duì)應(yīng)的是流失

將unreg替換為空值,以便后續(xù)計(jì)算回購(gòu)率、復(fù)購(gòu)率:

# 將unreg替換為空值,以便后續(xù)計(jì)算回購(gòu)率、復(fù)購(gòu)率
# 計(jì)算每個(gè)月各種狀態(tài)的計(jì)數(shù)
purchase_stats_ct=purchase_stats.replace('unreg',np.NaN).apply(lambda x: pd.value_counts(x))
purchase_stats_ct
image.png

將上面透視表轉(zhuǎn)置:

purchase_stats_ct.fillna(0).T.head()
image.png

作用戶分層面積圖:

purchase_stats_ct.fillna(0).T.plot.area(figsize=(12,5))
plt.title('用戶分層')
image.png

由用戶分層面積圖可知,在前三個(gè)月用戶人數(shù)不斷增加,新增用戶數(shù)量很高,活躍用戶的數(shù)量也比較高,但在后續(xù)月份沒有了新用戶的注冊(cè),活躍用戶數(shù)量也較高峰期有所降低,但在后續(xù)月份保持穩(wěn)定的水平,同時(shí)也有穩(wěn)定的回流用戶。

4.5 用戶購(gòu)買周期(按訂單)

  • 用戶消費(fèi)周期描述
  • 用戶消費(fèi)周期分布
    計(jì)算用戶訂單日期的差值:
order_diff=grouped_user.apply(lambda x: x.order_dt-x.order_dt.shift())  
order_diff.head(10)
image.png

查看日期差的描述統(tǒng)計(jì):

order_diff.describe()
image.png

作用戶消費(fèi)周期分布:

(order_diff/np.timedelta64(1,'D')).hist(bins=20)
plt.title('用戶消費(fèi)周期分布')
image.png
  • 用戶的生命周期受只購(gòu)買一次的用戶影響比較厲害(可以排除)
  • 用戶均消費(fèi)134天,中位數(shù)僅0天,明顯受到只購(gòu)買一次用戶的影響明顯

排除只消費(fèi)一次的用戶:

u_1=(user_life['max']-user_life['min']).reset_index()[0]/np.timedelta64(1,'D')
u_1[u_1>0].hist(bins=40)
plt.title('用戶生命周期分布')
image.png

這是雙峰趨勢(shì)圖。部分質(zhì)量差的用戶,雖然消費(fèi)了兩次,但是仍舊無法持續(xù),在用戶首次消費(fèi)30天內(nèi)應(yīng)該盡量引導(dǎo)。少部分用戶集中在50天~300天,屬于普通型的生命周期,高質(zhì)量用戶的生命周期,集中在400天以后,這已經(jīng)屬于忠誠(chéng)用戶了

5. 復(fù)購(gòu)率和回購(gòu)率分析

  • 復(fù)購(gòu)率
    • 自然月內(nèi),購(gòu)買多次的用戶占比
  • 回購(gòu)率
    • 曾經(jīng)購(gòu)買過的用戶在某一時(shí)期內(nèi)的再次購(gòu)買的占比

5.1 復(fù)購(gòu)率

  • 自然月內(nèi),購(gòu)買多次的用戶占比

將當(dāng)月消費(fèi)2次以上、1次和0次的用戶分別標(biāo)記為1、0和空值:

purchase_r=pivoted_counts.applymap(lambda x: 1 if x>1 else np.NaN if x==0 else 0)
purchase_r.head()
image.png

計(jì)算復(fù)購(gòu)率:

(purchase_r.sum()/purchase_r.count()).plot(figsize=(10,4))
plt.title('復(fù)購(gòu)率')
image.png

復(fù)購(gòu)率穩(wěn)定在20%左右,前三個(gè)月因?yàn)橛写罅啃掠脩粲咳耄@些用戶只購(gòu)買了一次,所以導(dǎo)致復(fù)購(gòu)率降低,后續(xù)月份用戶數(shù)量比較穩(wěn)定,所以復(fù)購(gòu)率也穩(wěn)定在21%左右,即后續(xù)月份每月有大概21%的用戶會(huì)在一個(gè)月內(nèi)消費(fèi)兩次以上

5.2 回購(gòu)率

  • 曾經(jīng)購(gòu)買過的用戶在某一時(shí)期內(nèi)的再次購(gòu)買的占比

購(gòu)買明細(xì)表:

df_purchase.head()
image.png

定義一個(gè)函數(shù),將消費(fèi)兩次以上記為1,消費(fèi)一次記為0,沒有消費(fèi)記為空值:

# 定義函數(shù)
def purchase_back(data):
    status=[]
    for i in range(17):
        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 pd.Series (status,index=columns_month)

對(duì)透視表應(yīng)用函數(shù)purchase_back:

purchase_b=df_purchase.apply(purchase_back,axis=1)
purchase_b.head()
image.png

計(jì)算回購(gòu)率:

(purchase_b.sum()/purchase_b.count()).plot(figsize=(10,4))
plt.title('回購(gòu)率')
image.png

前三個(gè)月因?yàn)橛写罅康男掠脩粲咳耄浅^一半的人只消費(fèi)了一次,所以前三個(gè)月回購(gòu)率比較低,后續(xù)月份用戶人數(shù)比較穩(wěn)定,回購(gòu)率也比較穩(wěn)定,穩(wěn)定在30%左右,即當(dāng)月消費(fèi)人數(shù)中有30%左右的用戶會(huì)在下一個(gè)月再次消費(fèi)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評(píng)論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,559評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,581評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,922評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評(píng)論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,096評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,639評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,374評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,591評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,789評(píng)論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評(píng)論 1 295
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,322評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,554評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容