[数据分析笔记] Pandas处理TGI指标

1.指标拆解

					目标群体中具有某一特征的群体所占比例
TGI指数计算公式 =	 —————————————————————————————————— * 标准数100
					总体中具有相同特征的群体所占比例

TGI计算公式中,有三个关键点需要进一步拆解:某一特征,总体,目标群体。

  • 某一特征:想要分析的某种行为或者状态,比如打篮球
  • 总体:是我们研究的所有对象,比如一个学校里的所有人
  • 目标群体:是总体中我们感兴趣的一个分组,比如一个班

假设一个班有50个人,有20个人喜欢打篮球,那么这个比例就是40%,即“目标群体中具有某一特征的群体所占比例” = 40%。

假设一个学校有1000人,有300个人喜欢打篮球,那么这个比例就是30%,即“总体中具有相同特征的群体所占比例” = 30%。

TGI指数 = (40% / 30%) * 100 = 133

TGI指数大于100,代表着某类用户更具有相应的倾向或者偏好,数值越大则倾向和偏好越强;小于100,则说明该类用户相关倾向较弱(和平均相比);而等于100则表示在平均水平。

2.TGI实例分析

2.1 导入数据
import pandas as pd
df = pd.read_excel('TGI-data.xlsx')
df.head()

在这里插入图片描述

df.info()

在这里插入图片描述

2.2 单个客户打标
  • 特征,高客单,即客户单次购买超过50元
  • 目标群体,就是各个城市,这里我们可以分别计算出所有城市客户的高客单偏好
  • 总体,计算所涉及到的所有客户即为总体

解题的关键在于,计算出不同城市,高客单人数及所占的比例。

第一步,我们先判断每个用户是否属于高客单的人群,所以先按用户昵称进行分组,看每位用户的平均支付金额。这里用平均,是因为有的客户多次购买,而每次下单金额也不一样,故平均之。

gp_user = df.groupby('买家昵称')['实付金额'].mean().reset_index()
gp_user.head()

在这里插入图片描述
接着,定义一个判断函数,如果单个用户平均支付金额大于50,就打上“高客单”的类别,否则为低客单,再用apply函数调用:

def if_high(x):
    if x > 50:
        return '高客单'
    else:
        return '低客单'

gp_user['客单类别'] = gp_user['实付金额'].apply(if_high)
gp_user.head(10)

在这里插入图片描述

2.3 匹配城市

单个用户的金额和客单标签已经搞定,下一步就是补充每个用户的地域字段,一句pd.merge函数就能搞定。由于源数据是未去重的,我们得先按昵称去重,不然匹配的结果会有许多重复的数据:

去重
df_dup = df.loc[df.duplicated('买家昵称') == False, :]

合并
df_merge = pd.merge(gp_user, df_dup, left_on='买家昵称', right_on='买家昵称', how='left')
df_merge.head()

在这里插入图片描述

2.4 高客单TGI指数计算

要计算每个城市高客单TGI指数,需要得到每个城市高客单、低客单的人数分别是多少。

先筛选出我们需要的列
df_merge = df_merge[['买家昵称', '客单类别', '省份', '城市']]

再用透视表
result = pd.pivot_table(
    df_merge,
    index = ['省份', '城市'],
    columns = '客单类别',
    aggfunc = 'count',
)
result.head()

在这里插入图片描述
这样得到的结果包含了层次化索引,要索引得到“高客单”列,需要先索引“买家昵称”,再索引“高客单”:

result['买家昵称']['高客单'].reset_index().head()

在这里插入图片描述
这样,拿到了每个省市的高客单人数,然后再拿到低客单的人数,进行横向合并:

tgi = pd.merge(
    result['买家昵称']['高客单'].reset_index(),
    result['买家昵称']['低客单'].reset_index(),
    left_on = ['省份', '城市'],
    right_on = ['省份', '城市'],
    how = 'inner'
)
tgi.head()

在这里插入图片描述
我们再看看每个城市总人数以及高客单人数占比,来完成“目标群体中具有某一特征的群体所占比例”这个分子的计算:

tgi['总人数'] = tgi['高客单'] + tgi['低客单']
tgi['高客单占比'] = tgi['高客单'] / tgi['总人数']

tgi.head()

在这里插入图片描述
有些非常小众的城市,高客单或者低客单人数等于1甚至没有,而这些值尤其是空值会影响结果的计算,我们要提前检核数据:

tgi.info()

在这里插入图片描述
剔除掉存在空值的行

tgi = tgi.dropna()

接着统计总人数中,高客单人群的比例,来对标公式中的分母“总体中具有相同特征的群体所占比例

total_percentage = tgi['高客单'].sum() / tgi['总人数'].sum()
total_percentage

0.41528303343887557

最后一步,就是TGI指数的计算,顺便排个序

tgi['高客单TGI指数'] = tgi['高客单占比'] / total_percentage * 100
tgi = tgi.sort_values('高客单TGI指数', ascending=False)
tgi.head()

在这里插入图片描述
对总人数进行筛选,用总人数的平均值作为阈值,只保留总人数大于平均值的城市

tgi.loc[tgi['总人数'] > tgi['总人数'].mean(), :].head()

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值