python-TGI指数分析实战
本次实战的目的主要是了解TGI指数的定义,并在用户订单信息数据集上利用python实现简单的TGI指数偏好分析
一、背景
1、相关知识
TGI指数=目标群体中具有某一特征的群体所占的比例/总体中具有相同特征的群体所占的比例*100
关键字:特征,总体,目标群体
特点:TGI指数大于100,代表某类用户更具有相应的偏好和倾向,数值越大则偏好和倾向越强;小于100,则说明该类用户相关倾向较弱,小于平均水准;而等于100,则恰好和总体水平保持一致
2、实战案例
因最近正退出一款客单价较高的产品,需要筛选出哪些城市具有高客单偏好进行试销,选出5个城市即可
客单价>50即可认为是高客单,
结合上述提到的TGI关键字,这里特征即为高客单,总体为数据集中所有城市,目标群体是细分到每个城市,再去计算每个城市(目标群体)的TGI指数
二、分析过程
1、理解数据
数据共有28832行9列,并且数据完整,没有缺失值,不需要做数据清洗
2、分析思路
计算每位买家的客单价--》分类打标签为高客单/低客单--》按照省份、城市进行分组(groupby)--》计算每个城市高/低客单数量(可用合并的方式)--》计算总体的高客单占比--》计算每个城市的高客单占比--》筛选出符合条件的top5高客单城市
3、实现过程
3.1 计算每位买家的客单价
gp_user = data.groupby('买家昵称').mean().reset_index()
gp_user.head()
3.2 分类打标签为高客单/低客单
使用apply函数进行分类打标签
def gaokedan(x):
if x>=50:
return '高客单'
else:
return '低客单'
gp_user['客单类别']=gp_user['实付金额'].apply(gaokedan)
gp_user.head()
3.3按照省份、城市进行分组(groupby)
分组之前先对表格进行合并
data_dup=data.loc[data.duplicated('买家昵称')==False,:] #duplicates用于判断是否有重复,这里去除掉会重复的买家昵称,方便后续合并
data_merge=pd.merge(gp_user,data_dup,left_on='买家昵称',right_on='买家昵称',how='left') #需要合并的原因是gp_user中没有省份信息,所以需要连接原数据data
data_merge=data_merge[['买家昵称','客单类别','省份','城市']] #取出需要的数据
3.4计算每个城市高/低客单数量(可用合并的方式)
result=pd.pivot_table(data_merge,index=['省份','城市'],columns='客单类别',aggfunc='count')#再用透视表
result.head()
tgi=pd.merge(result['买家昵称']['高客单'].reset_index(),result['买家昵称']['低客单'].reset_index(),left_on=['省份','城市'],right_on=['省份','城市'])
tgi.head()
3.5 计算总体的高客单占比/每个城市高客单占比/tgi指数计算
tgi.dropna(inplace=True) #某些城市中高客单或低客单人数为null,对分析结果影响不大,删除这些缺失值
tgi['总人数']=tgi['高客单']+tgi['低客单']
tgi['高客单占比']=tgi['高客单']/tgi['总人数']
total_percentage=tgi['高客单'].sum()/tgi['总人数'].sum()
tgi['tgi指数']=tgi['高客单占比']/total_percentage
3.6筛选出需要的数据
tgi.sort_values(by='tgi指数',ascending=False).head()
#发现前几名城市中某几个总人数极少,不符合试销条件,所以尝试筛选出总人数大于平均值的城市,并按tgi指数进行排名
tgi.loc[tgi['总人数']>tgi['总人数'].mean(),:].sort_values(by='tgi指数',ascending=False).head()
参考链接:https://mp.weixin.qq.com/s/eSqOUdj1IBbwZNHHU_LdWA