案例分析总结

作者: 敢敢宝宝 | 来源:发表于2019-02-15 18:03 被阅读76次

    第一次接触案例分析感觉难度还是挺大的,看完视频一脸懵逼,不知道从何下手,硬生生的把代码抄了一遍。抄完之后,对这个案例分析的思路有了一定的了解,接着按着这个思路把它在做一遍。做完之后,收获满满。下面对这个案例进行总结:

    前言:

    (1)输入需要用到的第三方工具:

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt(加载数据可视化包)
    %matplotlib inline(可视化显示在页面)
    plt.style.use('ggplot')(更改设计风格)

    (2)导入数据

    columns=['user_id','order_dt','order_products','order_amount']
    df=pd.read_csv("C:/Users/86176/Desktop/CDNOW_master.txt",names=columns,sep='\s+')

    (3)查看数据类型及具体描述

    df.info()
    df.describe()

    (4)将日期转化成正确格式

    df['order_dt']=pd.to_datetime(df.order_dt,format='%Y%m%d')
    df['month']=df.order_dt.values.astype('datetime64[M]')(每月的一号)

    进行用户消费趋势的消费(按月)

    (1)每月的消费总金额

    grouped_month=df.groupby('month')
    grouped_month_amount=grouped_month.order_amount.sum()
    grouped_month_amount.plot()

    (2)每月的消费消费次数

    grouped_month.order_amount.count().plot()

    (3)每月的产品购买量

    grouped_month.order_products.sum().plot()

    (4)每月的消费人数

    grouped_month.user_id.apply(lambda x:len(x.drop_duplicates())).plot()
    apply(lambda x:len(x.drop_duplicates()))-----把重复的user_id去掉

    用户个体消费分析

    (1)用户消费金额,消费次数的描述统计

    grouped_user=df.groupby('user_id')
    grouped_user.sum().describe()
    grouped_user.count().describe()

    (2)用户消费金额散点图

    grouped_user.sum().plot.scatter(x='order_amount',y='order_products')
    按条件:
    grouped_user.sum().query('order_amount<4000').plot.scatter(x='order_amount',y='order_products')

    (3)用户消费金额的分布图

    grouped_user.sum().query('order_amount<600').order_amount.hist(bins=20)

    (4)用户累计消费占比

    方法一:
    user_cumsum_rate=(grouped_user.sum().sort_values('order_amount').cumsum()) / (grouped_user.sum().sort_values('order_amount').sum())
    user_cumsum_rate.reset_index().order_amount.plot()
    方法二:
    user_cumsum_rate=grouped_user.sum().apply(lambda x:x.cumsum()/x.sum())
    user_cumsum_rate.reset_index().order_amount.plot()

    用户消费行为

    (1)用户第一次消费

    grouped_user.order_dt.min().value_counts()

    (2)用户最后一次消费

    grouped_user.order_dt.max().value_counts()

    (3)新老客消费比
    多少用户仅消费了一次

    user_life=grouped_user.order_dt.agg(['min','max'])
    (user_life['min']==user_life['max']).value_counts()

    每月新客占比

    (grouped_user.min().groupby('month').month.value_counts()) / (df.groupby('month').month.value_counts())

    用户分层
    RFM

    rfm=df.pivot_table(index='user_id',
    values=['order_dt','order_products','order_amount'],
    aggfunc={'order_dt':'max','order_products':'sum','order_amount':'sum'})
    rfm['R']=(rfm.order_dt.max()-rfm.order_dt) / np.np.timedelta64(1,'D')
    rfm.rename(columns={'order_amount':'M','order_products':'F'},inplace=True)

    新,老,活跃,回流,流失
    第一步

    rfm['R','F','M'].apply(lambda x:x-x.mean())
    def rfm_func(x):
    level=x.apply(lambda x: '1' if x>=0 else '0')
    label=level.R+level.F+level.M
    b={ '111':'重要价值客户',
    '011':'重要保持客户',
    '101':'重要挽留客户',
    '001':'重要发展客户',
    '110':'一般价值客户',
    '010':'一般保持客户',
    '100':'一般挽留客户',
    '000':'一般发展客户' }
    result=d[label]
    return result
    rfm['label']=rfm['R','F','M'].apply(lambda x:x-x.mean()).apply(rfm_func,axis=1)

    第二步:

    (1)pivot_counts=df.pivot_table(index='user_id',columns='month',
    values='order_dt',aggfunc='count').fillna(0)
    (2)df_purchase=pivot_counts.applymap(lambda x:1 if x>0 else 0)
    (3)def active_status(data):
    status=[]
    for i in range(18):
    if data[i]==0:
    if len(status)>0:
    if data[i-1]=='unreg':
    status.append('unreg')
    else:
    status.append('unactive')
    else:
    status.append('unreg')
    else:
    if len(status)==0:
    status.append('new')
    else:
    if status[i-1]=='unreg':
    status.append('new')
    elif status[i-1]=='unactive':
    status.append('return')
    else:
    status.append('active')
    return status
    (4)df_purchase.apply(active_status,axis=0)

    用户购买周期(按订单)
    用户消费周期描述

    order_diff=grouped_user.apply(lambda x:x.order_dt-x.order_dt.shift())
    order_diff.describe()

    用户消费周期分布

    (order_diff/np.timedelta64(1,'D')).hist(bins=20)

    用户生命周期(按第一次&最后一次消费)
    用户生命周期描述

    ((user_life['max']-user_life['min'])/np.timedelta64(1,'D')).describe()

    用户生命周期分布

    ((user_life['max']-user_life['min'])/np.timedelta64(1,'D')).hist(bins=20)

    复购率和回购率分析

    回购率(自然月内,购买多次的用户占比)

    (1)purchase_return=pivot_counts.applymap(lamdba x:1 if x>1 else np.NaN if x==0 else 0)
    (2)(purchase_return.sum() / purchase_return.count()).plot(figsize=(10,4))

    复购率(曾经购买过的用户在某一时期内的再次购买的占比)

    (1)def purchase_back(data):
    status=[]
    if data[i]==1:
    if data[i+1]==1:
    status.append(1)
    else:
    status.append(0)
    else:
    status.append(np.NaN)
    return status
    (2) purchase_back=df_purchase.apply( purchase_back,axis=1)
    (3) (purchase_back.sum() / purchase_back.count()).plot(figsize=(10,4))

    相关文章

      网友评论

        本文标题:案例分析总结

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