目录
一、WEB端数据采集的格式
1、数据样例
{"message":"{\"site_id\":\"workbench\",\"cookie_id\":\"h75ZMvBSyw7vqwIvyemM6PojWLfgVHH08ZEr2aXqRyRwvSRHkp\",\"domain\":\"xx.com.cn\",\"url_path\":\"/v1/task/bid\",\"url_params\":\"id=2501027&customer_id=6611\",\"operating_system\":\"Windows\",\"operating_system_version\":\"7\",\"browser\":\"Chrome\",\"browser_version\":\"55\",\"uid\":\"991002209\",\"element_id\":\"\",\"type\":\"page_view\",\"extra\":{},\"ip\":\"182.92.253.72\",\"created_at\":\"2018-06-25 00:01:58\"}"}
{
"message":{
"siteid":"workbench",
"cookie_id":"h75ZMvBSyw7vqwIvyemM6PojWLfgVHH08ZEr2aXqRyRwvSRHkp",
"domain":"xx.company.com.cn",
"url_path":"/v1/task/bid",
"url_params":"id=2501027&customer_id=6611",
"operating_system":"Windows",
"operating_system_version":"7",
"browser":"Chrome",
"browser_version":"55",
"uid":"991002209",
"element_id":"",
"type":"page_view",
"extra":{
},
"ip":"182.92.253.72",
"created_at":"2018-06-25 00:01:58"
}
}
2、数据格式说明
采集项 | 采集项举例 | 说明 | 备注 |
---|---|---|---|
site_id | workbench等 | 代表哪个应用。数据组进行同一的定义和分配 | |
created_at | 2017-01-01 10:00:00 | 请求时间 | |
cookie_id | |||
domain | |||
url_path | |||
url_params | |||
operating_system | 操作系统 | ||
operating_system_version | 操作系统版本 | ||
browser | 浏览器 | ||
browser_version | 浏览器版本 | ||
ip | ip地址 | ||
uid | 用户id | 根据登录判断 | 只有用户登录之后才会有该字段 |
type | page_view-浏览行为,page_op-操作行为 | ||
element_id | 按钮或者链接 元素的 id | 具体点击某个页面按钮或者某个链接 | |
extra | 扩展字段 | 业务根据自己需要添加 | 用户自定义的json结构,key和value 业务可以根据自己的具体业务场景来进行添加 |
二、APP数据采集格式
1、要采集的内容
- 屏幕尺寸:手机屏幕分辨率,高x宽,如:1024x768,2340x1080
- 运营商:中国移动、中国联通、中国电信、Wifi
- 接入点:Wifi接入点名称、CMNET、CMWAP之类的。
- 系统:移动设备系统,iOS、Android
- 系统版本:移动设备系统版本号,如:8.0(与系统结合表示,如 iOS 8.0)
- 机型:如OPPO Find X,iPhone 6S
- mac地址:也存在取不到的情况
- 设备标识:设备id,设备标识的组成待确认
- 渠道标识:渠道号,表示APP下载的渠道,如蒲公英、下崽器、XXX应用市场、AppStore
- 业务标识:区分产品
- imei:手机串号,山寨机存在重复问题或者为0
- uid:用户id,该用户在业务系统里面的id
- 使用时长:APP从启动到关闭的时间,从后台切换都前台算一次启动。屏幕熄灭30秒后再次打开算一次新的启动。
- 页面时长:进入页面到离开页面的时间,APP重新打开的计时也重新计算。
- 事件:用户操作事件,滑动、点击等。
- GPS坐标:经纬度
2、APP数据格式
注:
1)、每次launch为一个session,launch指开启客户端或者把客户端激活到手机前台
2)、body里launch session_id为当前会话,terminate及event里的session_id为上次会话
下面是iOS示例,标红部分为讨论后需要增加的:
说明 | 类型 | 示例(iOS平台示例) | 备注 | ||||
header | header标签 | dictionary | header对象,一个数据包只有一个header对象 | ||||
resolution | 屏幕尺寸:高x宽 | String | 1136x640 | header对象属性 | |||
carrier | 运营商 | String | 中国移动 | ||||
access | 网络接入状态 | String | 一共有三种: WiFi WWAN NotReachable |
||||
chn | 渠道号 | String | 3023_0001 | ||||
os | 移动设备系统 | String | iPhone OS | ||||
os_version | 移动设备系统版本号 | String | 7.0.3 | ||||
pn | 业务产品标识 | String | 6040093012 | ||||
stat_version | 统计SDK版本号 | String | 3.0.1 | ||||
mac | mac地址 | String | 2:0:0:0:0:0 获取不到赋值空 |
||||
device_id | 设备id | String | 40位md5后字符串同uid | ||||
imei | imei | String | iOS没有此属性,赋值为空 | ||||
uid | 用户uid | String | |||||
model | 机型 | String | iPhone 6S | Nginx日志可以读取到 | |||
longitude | 经度 | ||||||
latitude | 纬度 | ||||||
app_version | APP版本:APP版本 | ||||||
screening_marker | 筛选标志 | dictionary | 筛选标志扩展字段k-v对,如: “是否封装客户”:“是”;“任务类型”:“竞价” |
||||
body | body标签 | dictionary | body对象 | ||||
terminate | 会话结束标签 | array | body对象的terminate属性,数组存放terminate对象 | ||||
session_id | 会话id,唯一标示从使用客户端 到不使用客户端的一个时间段 规则为:1位随机数+uid+date+time |
String | 4ab85631b0d4f5b0adcc4a56237d727c2f782bab62013-12-19 14:00:21 | terminate对象属性 activities是一个数组,存放页面停留时间 |
|||
date | 格式YYYY-MM-DD | String | 格式为:2013-12-5 | ||||
time | 格式HH:MM:SS | String | 格式为: 14:00:33 | ||||
duration | 本session使用时长单位毫秒 | NSUInteger | 1799 | ||||
activities | 会话页面流 | ||||||
页面 | 页面名称String | String | article | 页面流按顺序排列 |
|||
停留时间 | 本页面停留时长,单位毫秒 | NSUInteger | 1799 | ||||
跳出标记 | 跳出APP标记 | 默认0,1表示APP从当前页面跳出(结束当前session) | |||||
event | 事件 | array | body对象的event属性,数组存放event对象 | ||||
session_id | 会话id 同上 | String | 4ab85631b0d4f5b0adcc4a56237d727c2f782bab62013-12-19 14:00:21 | event对象属性 | |||
tag | 标签,扩展字段 | ||||||
date | 格式YYYY-MM-DD | String | 格式为:2013-12-5 | ||||
time | 格式HH:MM:SS | String | 格式为: 14:00:33 | ||||
event_id | 事件id | String | SN_0002 | ||||
attributes | 事件属性扩展 | dictionary | "article_id" : "124-10733294-news-cms" | ||||
launch | 会话启动标签 | array | body对象的launch属性,数组存放launch对象 | ||||
session_id | 会话id 同上 | String | 4ab85631b0d4f5b0adcc4a56237d727c2f782bab62013-12-19 14:00:21 | launch对象属性 |
|||
date | 格式YYYY-MM-DD | String | 格式为:2013-12-5 | ||||
time | 格式HH:MM:SS | String | 格式为: 14:00:33 |
3、格式样例
{
"body":{
"terminate":[
{
"activities":[
[
"ThreePage",
9
],
[
"OnePage",
1
]
],
"session_id":"7A0F3618B56A388F35E65393C1B0F00D",
"date":"2013-04-08",
"time":"11:57:45",
"duration":20
}
],
"event":[
{
"session_id":"7A0F3618B56A388F35E65393C1B0F00D",
"event_id":"MacBook",
"tag":"Mac_Category",
"date":"2013-04-08",
"time":"11:57:36"
},
{
"session_id":"7A0F3618B56A388F35E65393C1B0F00A",
"event_id":"Feature 2",
"du":1632,
"date":"2013-04-08",
"tag":"MacBook",
"time":"11:57:38"
}
],
"launch":[
{
"time":"11:57:53",
"session_id":"1561EE8E20F2EC2C8D7DFAEE0CD398C3",
"date":"2013-04-08"
}
]
},
"header":{
"resolution":"960x640",
"carrier":"",
"access":"WiFi",
"chn":"App Store",
"os":"iOS",
"os_version":"8.0",
"pn":"",
"mac":"3C:07:54:06:36:DD",
"device_id":"97f39d2d0662a2a7654da3cc4481f784491e2e2c",
"imei":"",
"uid":""
}
}
注:数据样例里面为什么没有model、ip地址、地域之类的信息呢?因为这些数据完全可以通过上传Log时Http-Header获得,不需要再额外获取。至于说用户经常出差到处跑的情况不需要兼顾。
4、渠道号分配标准
6位数字编号,中间以下划线‘_’分割,编号AAA_BBB,AAA为大分类,目前用于区分内外部渠道,BBB为二级分类。
渠道分类 | 渠道名称 | 渠道号(chn) | 说明 |
外部 | 应用宝 | 300_001 | Android专用 |
外部 | 小米商店 | 300_002 | Android专用 |
外部 | 百度应用助手 | 300_003 | Android专用 |
外部 | 华为市场 | 300_004 | Android专用 |
外部 | 360市场 | 300_005 | Android专用 |
外部 | oppo | 300_006 | Android专用 |
外部 | AppStore | 300_007 | iPhone专用 |
外部 | 蒲公英 | 300_008 | 通用 |
外部 | FIR | 300_009 | 通用 |
内部 | A端 | 100_001 | 通用,目前只支持B、C、S、F、Y |
渠道号的分配与管理最好是具体到人或系统上申请后按照规则自动分配,目前我们只是采用很有限数量的分发渠道,可以简化处理。
5、业务产品编号标准
编号格式:AABCCCCDDDDEFFGGGH
AA: 代表产品。
01 A端 : 司机端(just for a example)
02 B端 :商户端
03 C端 :车队端
……
B: 代表主版本号。S端最新版本号是3.38.0,B=3。
CCCC: 次版本号,F端最新版本号是2.32.11,CCCC=0032。
DDDD:修订版本号,X端最新版本号是1.0.5,DDDD=0005。
E: 代表操作系统,下面只列主流的
E值 | 含义 |
---|---|
1 | Android |
2 | iOS |
3 | Android Pad |
4 | Windows Phone |
5 | iPad |
EFF:代表适配机型系列号
101 Android平台默认机型
- 107 Android N,Nougat,牛轧糖
- 108 Android O,Oreo,奥利奥
- 109 Android P,Pistachio Ice Cream,开心果冰淇淋
201 iPhone平台默认机型
- 207 iOS 7
- 208 iOS 8
- 211 iOS 11
- 212 iOS 12
301 Android Pad通用
501 iPad通用
GGG:区分是哪个业务线/事业部
100 项目部
200 运力部
300 服务监督部
H: 备用
0 非签名版
1 签名版
2 通用版
3 厂商版
4 内测版
5 华为定制版
6小米定制版
7 SDK版
举例来说,013003800001012001,表示S端v3.38.0安卓正式版,由运力纵线发布。
业务产品号的分配与管理最好是具体到人或系统上申请后按照规则自动分配,为了防止随意性,要有专人管理,申请时说明业务纵线、产品功能。
6、埋点数据格式
6.1 埋点的问题与经验
埋点是发展调整产品、实施TB测试、个性化推荐服务最重要的数据来源。在纯 Web 和 Native 开发的产品中,埋点从技术的角度来说未必多深奥,但从业务的角度来说要做到埋点设计规范、流程高效和保证质量却是很难。
就需求来源来说,不仅要有PRD,还要有DRD。在DRD 里明确业务目标与埋点缺口之间的关系以及需求的优先级。埋点的需求大多来自于 DRD,整个过程会涉及多个角色,主要包括产品经理、业务运营数据负责人、开发工程师、测试工程师。
注:PRD ——Product requirement document;DRD——Data requirement document。
和数据有关角色特点:
- 运营数据分析人员和产品经理主要是数据的使用者,工作内容是发现和解决业务的问题,不断对产品进行迭代。
- 工程师对代码的细节和打点时机最为了解,但是对于数据具体的使用不见得很清晰。
- 数据仓库接口人负责业务数据的生产,和数据仓库团队对接,对埋点的定义需要有深入的理解。
埋点设计不合理或者埋点管理不规范都会带来各种问题,使得统计数据失真从而失去统计平台价值。
Web 端的埋点可以随着新代码上线即时生效,对版本的发布概念相对较弱,即使埋点错漏,修复成本较低。
对客户端而言,如果使用 Native 技术开发的功能埋点有问题,则需要等下一个版本才能修复,并且还有版本覆盖度的问题。修复埋点的这个时间窗口一般都比较长,会对业务的产品快速迭代产生很负面的影响。从业务的角度来说,客户端在发布功能之前,对于要做的数据分析不见得想得全,而如果无计划收集非常多的埋点,对于埋点设计人员、客户端开发、测试人员来说是很大的工作量。反过来说,真正要用数时才发现重要的埋点没有采集,则会 “点”到用时方恨少。因此,如何综合规划一个版本要采集的埋点,也是颇有挑战的事情,颇有“养兵千日,用兵一时”的感觉。
客户端发版往往会遇到新增的埋点打重、打错和打漏,老的埋点缺少回归测试,业务变化后埋点跟不上变化等等问题,给业务带来了不少困扰。一个易用性高、自动化和智能化的埋点测试平台也是迫在眉睫的事情。需要建立一整套埋点管理和测试系统或机制,测试工程师将埋点测试加入客户端发版流程,完善埋点的元信息,对核心埋点进行回归测试,切实提升埋点的质量。
6.2 埋点管理
1、数据格式
对应APP数据统计里面的event,形式为json-array:
event | 事件 | array | |||
session_id | 会话id 同上 | String | 4ab85631b0d4f5b0adcc4a56237d727c2f782bab62017-12-15 13:50:21 | ||
tag | 标签,扩展字段 | ||||
date | 格式YYYY-MM-DD | String | 格式为:2017-12-15 | ||
time | 格式HH:MM:SS | String | 格式为: 14:00:00 | ||
event_id | 事件id | String | SF_0002 | ||
attributes | 事件属性扩展 | dictionary | "article_id" : "124-10733294-news-cms---" |
具体例子:
"event":[ //会话事件
{
"session_id":"7A0F3618B56A388F35E65393C1B0F00D",
"event_id":"MacBook",
"tag":"Mac_Category",
"date":"2018-04-08",
"time":"11:57:36"
},
{
"session_id":"7A0F3618B56A388F35E65393C1B0F00A",
"event_id":"Feature 2",
"date":"2018-04-08",
"tag":"MacBook",
"time":"11:57:38"
}
]
2、DRD管理
页面位置 | 功能名称 | 功能标识 | 页面级别 | 说明 | 3.9.4 | 3.9.5 | 3.9.6 | iOS | Android |
底部导航 | 资讯标签 | navi_news | 一级页面 | add | y | y | |||
设置标签 | navi_setting | add | y | y | |||||
设置 | 头像点击 | my_image | 二级页面 | del | - | - | |||
搜索功能 | optional_search | rtn | y | y | |||||
登陆功能 | optional_account | rtn | y | y | |||||
- PM记录每个版本需要增加或删除或发生了调整的统计事件,包括功能发生了变化的
- iOS和Android开发分别调整
- 测试验证调整后标记y
三、数据分析
1、敏感度属性
基于用户心理的一种属性判断,如价格敏感型(司机/客户),服务敏感型(客户)、距离敏感型(司机)、活多活少敏感型(司机)等。