目标用户偏好指数Target Group Index分析

TGI指数,全称Target Group Index,可以反映目标群体在特定研究范围内强势或者弱势。

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

TGI指数大于100,代表着某类用户更具有相应的倾向或者偏好,数值越大则倾向和偏好越强。

示例

假设我们要研究A公司脱发TGI指数:

某一特征,就是我们想要分析的某种行为或者状态,这里是脱发(或者说受脱发困扰) 总体,是我们研究的所有对象,即A公司所有人 目标群体,是总体中我们感兴趣的一个分组,假设我们关注的分组是数据部,那目标群体就是数据部

于是乎,公式中分子“目标群体中具有某一特征的群体所占比例”可以理解为“数据部脱发人数占数据部的比例”,假设数据部有15个人,有9个人受脱发困扰,那数据部脱发人数占比就是9/15,等于60%。

而分母“总体中具有相同特征的群体所占比例”,等同于“全公司受脱发困扰人数占公司总人数的比例”,假设公司一共500人,有120人受脱发困扰,那这个比例是24%。

所以,数据部脱发TGI指数,可以用60% / 24% * 100 = 250,其他部门脱发TGI指数计算逻辑是一样的,用本部门脱发人数占比 / 公司脱发人数占比 * 100即可。

开发环境:jupyter Notebook, python 3.6

一:数据概览

import pandas as pd
import numpy as np
import os os.chdir('F:\\50mat') df = pd.read_excel('TGI指数案例数据.xlsx.xlsx')
df.head()

打印结果

品牌名称	买家昵称	付款日期	订单状态	实付金额	邮费	省份	城市	购买数量
0 一只阿木木 做快淘饭 2019-04-18 00:03:00 交易成功 22.32 0 北京 北京市 1
1 一只阿木木 作自有世祟 2019-02-17 00:03:51 交易成功 87.00 0 上海 上海市 1
2 一只阿木木 作雪白室 2019-04-18 00:01:43 交易成功 97.66 0 福建省 福州市 2
3 一只阿木木 作美女购物主 2019-01-11 23:35:01 交易成功 37.23 0 河南省 安阳市 3
4 一只阿木木 作美女购物主 2019-02-18 14:16:03 交易成功 29.50 0 河南省 安阳市 2

观察数据的类型和缺失情况:

df.info()

打印结果

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 57664 entries, 0 to 57663
Data columns (total 9 columns):
品牌名称 57664 non-null object
买家昵称 57664 non-null object
付款日期 57664 non-null datetime64[ns]
订单状态 57664 non-null object
实付金额 57664 non-null float64
邮费 57664 non-null int64
省份 57664 non-null object
城市 57664 non-null object
购买数量 57664 non-null int64
dtypes: datetime64[ns](1), float64(1), int64(2), object(5)
memory usage: 2.9+ MB

二:数据清洗

def if_high(x):
if x > 50:
return '高客单'
else:
return '低客单' gp_user = df.groupby('买家昵称')['实付金额'].mean().reset_index()
gp_user['客单类型'] = gp_user['实付金额'].apply(if_high)
gp_user.head(10)

打印结果

买家昵称	实付金额	客单类型
0 .blue_ram 49.450 低客单
1 .blue_ram1 491.450 高客单
2 .christiny 22.000 低客单
3 .willn1 34.570 低客单
4 .托托m 37.475 低客单
5 0000妮 13.500 低客单
6 0009797王 94.500 高客单
7 000xyx0 99.250 高客单
8 000米粒儿米粒0 24.500 低客单
9 00556旭79618 23.860 低客单

匹配城市,合并数据

# 去重
df_dup = df.loc[df.duplicated('买家昵称') == False,:] #合并
df_merge = pd.merge(gp_user, df_dup, left_on = '买家昵称', right_on = '买家昵称', how = 'left')
df_merge.head()

高客单用户指数计算

# 高客单 TG 指数计算
df_merge = df_merge[['买家昵称', '客单类型', '省份', '城市']]

result = pd.pivot_table(df_merge, index = ['省份', '城市'], columns = '客单类型', aggfunc = 'count')
result.head()

打印结果

		买家昵称
客单类型 低客单 高客单
省份 城市
上海 上海市 2818.0 2375.0
云南省 临沧市 3.0 2.0
丽江市 1.0 3.0
保山市 6.0 2.0
大理白族自治州 9.0 8.0

三:构建用户指数

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

打印结果

省份	城市	高客单
0 上海 上海市 2375.0
1 云南省 临沧市 2.0
2 云南省 丽江市 3.0
3 云南省 保山市 2.0
4 云南省 大理白族自治州 8.0

用户合并

# 高客单与低客单用户合并
tgi = pd.merge(result['买家昵称']['高客单'].reset_index(), result['买家昵称']['低客单'].reset_index(),
left_on = ['省份', '城市'], right_on = ['省份', '城市'], how = 'inner')
tgi['总人数'] = tgi['高客单'] + tgi['低客单']
tgi['高客单占比'] = tgi['高客单'] / tgi['总人数']
tgi.head()

打印结果

省份	城市	高客单	低客单	总人数	高客单占比
0 上海 上海市 2375.0 2818.0 5193.0 0.457346
1 云南省 临沧市 2.0 3.0 5.0 0.400000
2 云南省 丽江市 3.0 1.0 4.0 0.750000
3 云南省 保山市 2.0 6.0 8.0 0.250000
4 云南省 大理白族自治州 8.0 9.0 17.0 0.470588

去除空值

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

打印结果

0.41537333024476875

四:目标用户指数计算

# tgi 指数计算, 并排序

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

打印结果

省份	城市	高客单	低客单	总人数	高客单占比	高客单tgi指数
149 新疆维吾尔自治区 哈密市 4.0 1.0 5.0 0.800000 192.597825
152 新疆维吾尔自治区 巴音郭楞蒙古自治州 10.0 3.0 13.0 0.769231 185.190216
2 云南省 丽江市 3.0 1.0 4.0 0.750000 180.560461
277 甘肃省 白银市 3.0 1.0 4.0 0.750000 180.560461
34 吉林省 辽源市 2.0 1.0 3.0 0.666667 160.498188
44 四川省 广安市 6.0 3.0 9.0 0.666667 160.498188
136 广西壮族自治区 河池市 4.0 2.0 6.0 0.666667 160.498188
25 内蒙古自治区 锡林郭勒盟 2.0 1.0 3.0 0.666667 160.498188
343 黑龙江省 鹤岗市 2.0 1.0 3.0 0.666667 160.498188
97 山西省 临汾市 9.0 5.0 14.0 0.642857 154.766109
# 保留总人数大于平均值的城市

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

打印结果

省份	城市	高客单	低客单	总人数	高客单占比	高客单tgi指数
287 福建省 福州市 145.0 135.0 280.0 0.517857 124.672699
124 广东省 珠海市 49.0 52.0 101.0 0.485149 116.798186
27 北京 北京市 1203.0 1298.0 2501.0 0.481008 115.801271
283 福建省 厦门市 105.0 118.0 223.0 0.470852 113.356343
111 广东省 佛山市 118.0 135.0 253.0 0.466403 112.285293
173 江西省 南昌市 63.0 73.0 136.0 0.463235 111.522638
46 四川省 成都市 287.0 334.0 621.0 0.462158 111.263236
0 上海 上海市 2375.0 2818.0 5193.0 0.457346 110.104909
164 江苏省 无锡市 135.0 162.0 297.0 0.454545 109.430582
120 广东省 深圳市 438.0 528.0 966.0 0.453416 109.158705
你从结果中发现了什么呢?

七:数据分析模型

# 目标用户偏好指数Target Group Index分析

import pandas as pd
import numpy as np
import os os.chdir('F:\\50mat') def get_rfm(name):
# 一:数据概览
df = pd.read_excel('TGI指数案例数据.xlsx') gp_user = df.groupby('买家昵称')['实付金额'].mean().reset_index()
gp_user['客单类型'] = gp_user['实付金额'].apply(if_high) # 二:数据清洗
df_dup = df.loc[df.duplicated('买家昵称') == False,:]
#合并
df_merge = pd.merge(gp_user, df_dup, left_on = '买家昵称', right_on = '买家昵称', how = 'left') # 三:构建用户指数
# 高客单 TG 计算
df_merge = df_merge[['买家昵称', '客单类型', '省份', '城市']]
result = pd.pivot_table(df_merge, index = ['省份', '城市'], columns = '客单类型', aggfunc = 'count') # 高客单与低客单用户合并
tgi = pd.merge(result['买家昵称']['高客单'].reset_index(), result['买家昵称']['低客单'].reset_index(),
left_on = ['省份', '城市'], right_on = ['省份', '城市'], how = 'inner') # 构建分子
tgi['总人数'] = tgi['高客单'] + tgi['低客单']
tgi['高客单占比'] = tgi['高客单'] / tgi['总人数']
# 高客单和低客单都有空值,应删除
tgi = tgi.dropna() # 构建分母
total_percentage = tgi['高客单'].sum() / tgi['总人数'].sum() # 四:TGI 指数计算, 并排序
tgi['高客单TGI指数'] = tgi['高客单占比'] / total_percentage * 100
tgi = tgi.sort_values('高客单tgi指数', ascending = False) # 保留总人数大于平均值的城市
result_tgi = tgi.loc[tgi['总人数'] > tgi['总人数'].mean(), :]
return result_tgi def if_high(x):
if x > 50:
return '高客单'
else:
return '低客单' res = get_rfm(name = 'TGI指数案例数据.xlsx')
res

打印结果

省份	城市	高客单	低客单	总人数	高客单占比	高客单tgi指数
287 福建省 福州市 145.0 135.0 280.0 0.517857 124.672699
124 广东省 珠海市 49.0 52.0 101.0 0.485149 116.798186
27 北京 北京市 1203.0 1298.0 2501.0 0.481008 115.801271
283 福建省 厦门市 105.0 118.0 223.0 0.470852 113.356343
111 广东省 佛山市 118.0 135.0 253.0 0.466403 112.285293
173 江西省 南昌市 63.0 73.0 136.0 0.463235 111.522638
46 四川省 成都市 287.0 334.0 621.0 0.462158 111.263236
0 上海 上海市 2375.0 2818.0 5193.0 0.457346 110.104909
164 江苏省 无锡市 135.0 162.0 297.0 0.454545 109.430582
120 广东省 深圳市 438.0 528.0 966.0 0.453416 109.158705
112 广东省 广州市 535.0 654.0 1189.0 0.449958 108.326153
216 浙江省 温州市 100.0 124.0 224.0 0.446429 107.476465
215 浙江省 杭州市 318.0 396.0 714.0 0.445378 107.223579
170 江苏省 镇江市 39.0 50.0 89.0 0.438202 105.496000
285 福建省 泉州市 57.0 77.0 134.0 0.425373 102.407426
244 湖北省 武汉市 275.0 373.0 648.0 0.424383 102.168985
267 湖南省 长沙市 108.0 149.0 257.0 0.420233 101.170064
87 山东省 济南市 80.0 111.0 191.0 0.418848 100.836558
159 江苏省 南通市 61.0 85.0 146.0 0.417808 100.586193
214 浙江省 宁波市 121.0 169.0 290.0 0.417241 100.449728
7 云南省 昆明市 71.0 100.0 171.0 0.415205 99.959398
306 辽宁省 大连市 94.0 133.0 227.0 0.414097 99.692707
212 浙江省 台州市 45.0 65.0 110.0 0.409091 98.487524
221 浙江省 金华市 51.0 74.0 125.0 0.408000 98.224891
130 广西壮族自治区 南宁市 54.0 79.0 133.0 0.406015 97.747016
158 江苏省 南京市 235.0 354.0 589.0 0.398981 96.053669
100 山西省 太原市 65.0 99.0 164.0 0.396341 95.418130
337 黑龙江省 哈尔滨市 85.0 132.0 217.0 0.391705 94.301930
113 广东省 惠州市 36.0 56.0 92.0 0.391304 94.205458
213 浙江省 嘉兴市 59.0 93.0 152.0 0.388158 93.447958
310 辽宁省 沈阳市 113.0 180.0 293.0 0.385666 92.847928
58 天津 天津市 203.0 335.0 538.0 0.377323 90.839588
161 江苏省 常州市 62.0 105.0 167.0 0.371257 89.379230
299 贵州省 贵阳市 47.0 80.0 127.0 0.370079 89.095451
168 江苏省 苏州市 183.0 312.0 495.0 0.369697 89.003540
66 安徽省 合肥市 76.0 131.0 207.0 0.367150 88.390306
328 陕西省 西安市 111.0 200.0 311.0 0.356913 85.925879
36 吉林省 长春市 49.0 89.0 138.0 0.355072 85.482730
319 重庆 重庆市 161.0 298.0 459.0 0.350763 84.445125
188 河北省 石家庄市 49.0 92.0 141.0 0.347518 83.663949
109 广东省 中山市 29.0 56.0 85.0 0.341176 82.137308
96 山东省 青岛市 90.0 174.0 264.0 0.340909 82.072937
218 浙江省 绍兴市 46.0 89.0 135.0 0.340741 82.032407
116 广东省 汕头市 31.0 60.0 91.0 0.340659 82.012810
208 河南省 郑州市 78.0 159.0 237.0 0.329114 79.233282
108 广东省 东莞市 87.0 197.0 284.0 0.306338 73.750047
92 山东省 烟台市 24.0 76.0 100.0 0.240000 57.779348

By:一只阿木木

目标用户偏好指数Target Group Index分析的更多相关文章

  1. 【API进阶之路】帮公司省下20万调研费!如何巧用情感分析API实现用户偏好调研

    摘要:自从学习API后,仿佛解锁了新技能,可别小看了一个小小的API接口,用好了都是能力无穷.这不,用情感分析API来做用户偏好调研,没想到这么一个小创意给公司省了20万调研费用. 上次借着高考热点整 ...

  2. SAP Marketing Cloud功能简述(二) : Target Group

    这个系列的第一篇文章 SAP Marketing Cloud功能简述(一) : Contacts和Profiles,我向大家介绍了SAP Marketing Cloud里的Contacts和Profi ...

  3. 【Qt官方例程学习笔记】Application Example(构成界面/QAction/退出时询问保存/用户偏好载入和保存/文本文件的载入和保存/QCommandLineParser解析运行参数)

    The Application example shows how to implement a standard GUI application with menus, toolbars, and ...

  4. SharePoint 2013 更新多个用户字段(Person or Group)

    有时我们需要更新一个用户到Person or Group类型的字段, 当然这个属性允许设置多个用户, 要如何才能添加新的用户到该字段,同时还不影响原始存在的值. 这里我们需要了解 SPFieldUse ...

  5. Android 保存用户偏好设置

    很多情况下都允许用户根据自己的习惯和爱好去设置软件,而我们需要保存这些设置,可以用一个专业保存用户偏好的类:SharedPreferences. 这个类是实现方法其实也就是创建和修改 XML 文件, ...

  6. 转:Hive性能优化之ORC索引–Row Group Index vs Bloom Filter Index

    之前的文章<更高的压缩比,更好的性能–使用ORC文件格式优化Hive>中介绍了Hive的ORC文件格式,它不但有着很高的压缩比,节省存储和计算资源之外,还通过一个内置的轻量级索引,提升查询 ...

  7. 漏洞分析:OpenSSH用户枚举漏洞(CVE-2018-15473)分析

    漏洞分析:OpenSSH用户枚举漏洞(CVE-2018-15473)分析 漏洞分析:OpenSSH用户枚举漏洞(CVE-2018-15473)分析 - FreeBuf互联网安全新媒体平台 https: ...

  8. 报错注入分析之(count()、rand()、group by)分析,被大佬称为floor报错注入

    PS:在这几天的学习当中很多的文章都将此注入方式称之为“floor报错分析”但经过我这几天的学习.个人觉得不该如此称呼!若君有意请详细阅读此篇文章.特别感谢米怀特的开导,说句实在的研究这个注入有四天了 ...

  9. 待字闺中之Magic Index 分析

    给定一个数组A,当中有一个位置被称为Magic Index,含义是:如果i是Magic Index.则A[i] = i. 如果A中的元素递增有序.且不反复,请给出方法,找到这个Magic Index. ...

随机推荐

  1. random mating

    随机交配种群 孟德尔分离(基于diploid and sexual)和随机交配(1.不因突变而改变的规律2.可计算的)是群体遗传学的基础. 随机交配(random mating)指群体中每一个成员与另 ...

  2. metinfo_5.3变量覆盖引发的一系列问题

    metinfo_5.3中存在一个很经典的$$型变量覆盖,这种变量覆盖在之前的博客中提到过,今天的博客围绕这个变量覆盖漏洞结合这款CMS的其他功能进行漏洞利用. 变量覆盖+文件包含 拿到这个CMS首先还 ...

  3. myeclipse 编写java代码提示 dead code 原因

    经常使用MyEclipse或Eclipse编辑器编写java代码的程序员,可能经常遇到一个黄线警告提示:dead code:一般程序员遇到这些问题都会置之不理,反正也不影响程序的编译执行.对,这不是b ...

  4. Perl:只是把“^”作为匹配的单字:只是匹配每一行的开头 $lines =~ s/^/file_4_ex_ch7.txt: /gm;

    Perl:只是把“^”作为匹配的单字:只是匹配每一行的开头                     $lines =~ s/^/file_4_ex_ch7.txt: /gm;

  5. RedBlack-Tree(红黑树)原理及C++代码实现

    众所周知,红黑树是用途很广的平衡二叉搜索树,用过的都说好.所以我们来看看红黑树的是怎么实现的吧. 红黑树顾名思义,通过红与黑两种颜色来给每个节点上色.其中根结点和叶子结点一定是黑色的,并且红色结点的两 ...

  6. 基于Redis的Service缓存实现

    项目中有使用到缓存,每次需要将缓存代码和业务代码杂糅在一起,以及分散各处的key,严重影响代码的可读性.以下是使用AOP对其简单尝试.直接上代码: 1.定义缓存注解: @Target(ElementT ...

  7. idea转eclipse快捷键

    1.打开idea,点击上方菜单栏中的File, 2.在弹出的setting页面中左侧导航中选择Keymap:在keymaps下拉列表中选择Eclipse:如果想要使用这个快捷键风格,则点击右侧的cop ...

  8. pycharm打印出的汉字显示乱码

    pycharm未配置时,默认配置为: 打印汉字时显示乱码 简单设置即可 这下以后就没有问题了.

  9. [LC] 156. Binary Tree Upside Down

    Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that ...

  10. numpy中的ndarray与pandas中的series、dataframe的转换

    一个ndarray是一个多维同类数据容器.每一个数组有一个dtype属性,用来描述数组的数据类型. Series是一种一维数组型对象,包含了一个值序列,并且包含了数据标签----索引(index). ...