从用户行为到数据:数据采集全景解析【主流电商平台API接口数据采集方式】

news2024/10/5 19:12:16

电商数据采集是数据体系建设的最上游,是非常重要的一个环节,除了专业的数据人员,人们普遍对数据采集的认知度不高。如果你提起埋点,应该很多人都熟悉它。它应该也是绝大部分人对数据采集的认知了。数据上报其实是一个系统性工程,它涉及了工具、团队、团队协同、标准、流程等多方面的内容,其中任何一个部分出现问题都有可能让上报过程变得复杂,下游数据出现问题的概率增高。本文系统的讲解了数据采集的核心原理是什么,以及工具、组织改如何建设,希望能让你对数据采集有一个清晰的认知和了解。


探究采集的整个过程

我最早接触的数据采集是从业务的数据库中COPY各种表到数据仓库中,就是从一个库中的一些表以各种形式拷贝到另一个库中再以各种形式存储下来的过程。这是一个后端交互的采集方式。后来逐步了解到,原来还可以去采集用户的行为,名词叫埋点。采集用户的行为主要目的是为了以数据的视角观察用户是怎么在你的产品里“活动”的,为了帮助设计者了解设计的缺陷,优化交互设计,提高产品的体验。数据采集中埋点的概念绝大多人都有听说,但基本上是停留在听说阶段,知道要埋点,反正埋点了就能有数据,然后就可以分析了。这么理解没问题,对于使用者本身,就足够了。直到真正开始做数据采集这个工作时,慢慢了解到数据采集是个比较复杂的事情,它涉及众多角色,涉及繁长的流程,和建设指标一样,是个既简单而又复杂的的工程。


从行为到指标,数据是怎么来的

用户行为动作的抽象过程

应用程序的出现是为了满足用户的各种需要,例如网上购物、看视频、玩游戏、社交等场景,所有的场景活动都会有用户在应用上的各种行为操作。下图是京东移动端的首页,京东的核心场景是购物,用户在应用上浏览商品,挑选,购买。用户在京东上的所有的操作行为都可以归类为“动作”。

用户和应用程序的交互,不像现实生活中的“动作”那么丰富,例如走路、开门、跑、跳,这些实际的物理动作在应用程序范围内是不会发生的。人在应用程序的动作会受限于使用载体本身(手机、电脑、电视..)的人机交互,如早期的手机用按键,控制电视需要用遥控器,ps\xbox等游戏机用手柄等。人机交互动作更多是像登录、浏览、点击等动作,用户在应用程序的操作,就是这些实际的物理操作,不会囊括太多现实中的其他物理动作。例如“扔手机”这个动作,没有和手机发生实际的交互,只是在现实中进行了物理的动作,该动作就不会让手机本身“知道’并记录下来。

从动作到日志

既然动作被限定在人机交互这个范围内,记录用户行为就有规律可循。识别用户的动作,并把它记录下来是数据采集的核心目标。现在以京东商城购物为例,看看从动作发生到数据记录的过程是什么。

下图是京东【京东商品API接口】商城手机端的首页,我们现在准备记录我的两个2个动作:

  • 我浏览了该页面

  • 我点击了家电家具的按钮

我的两个动作是浏览和点击,但动作的实际发生是要作用于具体的实体对象的,也就是“我对谁做了什么”:我点击了哪个实体,我浏览了哪个实体。

通常来说,用户在应用上的动作(谁对什么做了哪些动作),统一归纳理解为”事件“,可以理解为,发生了一件什么事。

事件的基本要素可以用这四点来描述:一个用户在某个时间点、某个地方,对谁做了什么什么动作。

总结归纳一个事件需要包括的四个要素:谁、什么时间、对谁、做了什么动作

定义了”事件“,应用程序就需要在动作实际发生时,把这个事件以数据形式记录下来。在技术上,通常以记录日志的形式表现出来。也就是说,当我”点击“了京东家电家居的按钮时,应用会把我这个动作存储成一条数据:

$user_id:用户:勍爷(谁)

$event_time:时间:5:30:30(在什么时间)

$event_postion:”位置:jd_home_detail(对谁,页面)

$event_content内容:eid_jd_home_app(对谁,按钮元素)

$event_action:动作:click(做了点击动作)

日志一般用JOSN的格式来表示:

{ "user_id": "勍爷”, 

"event_time": "5:30:30”,

"event_postion": "jd_home_detail”, 

"event_content": “eid_jd_home_app”,

"event_action": "click”,

}

如果我继续在京东首页上分别点击“京东电器”、”京东到家“、”京东超市“三个按钮,则会产生三条日志记录:

京东电器:

{ "user_id": "勍爷”, 

"event_time": "5:30:31”,

"event_postion": "jd_home_detail”,

"event_content": "eid_jd_app” ,

"event_action": "click", }

京东到家:

{ "user_id": "勍爷”, 

"event_time": "5:30:32”,

"event_postion": "jd_home_detail”,

"event_content": “eid_jd_tohome”,

"event_action": "click", }

京东超市:

{ "user_id": "勍爷”,

"event_time": "5:30:33”,

"event_postion": "jd_home_detail”,

"event_content": “eid_jd_market”,

"event_action": "click", }

上面三条记录中变化的只有envet_content(对谁做),同一个动作(点击),记录了4条不同的记录。 

更多的描述-参数的引入

事件的基本要素描述了事件的主体,他们构成了一个完整的事件。但是仅仅只记录事件的基本四要素信息,如上面日志记录里的内容,是不够我们用于业务分析的。例如用户勍爷,是注册用户,他用的什么设备登录,IP地址是什么,在什么地理位置,用的什么网络?点击的按钮,跳转地址是什么?再如,首页中的搜索框,”搜索“事件,用户输入了什么关键词,搜索类型,是否触发联想词,输入词为空的搜索,分析需求多种多样,需要记录的数据内容就会变的更多。

要想记录更多的数据,可以对事件的四要素进行扩展。如下图:

我们可以增加对该事件基本要素更多的属性描述,例如对用户进行描述扩展,对动作、实体对象进行更丰富的描述,这些描述统一为扩展参数。

扩展参数的记录,应该根据实际的需求来进行合理的设计。从指标和维度的实际使用情况来倒推所需要的参数是什么。例如,根据上面的例子,如果想了解在北京用IOS端点击”首页家电家居“按钮的用户数是多少,我们需要在事件中加入参数:

$event_ip:IP地址

$event_client:客户端

然后再加入一些用户的属性,性别、年龄、身高、体重4个参数,则日志会变成这样:

{ "user_id": "勍爷”,

”gender”:”男”,

”height”:”184”,

”weight”:”165”,

”age”:”18”,

event_ip“:”114.206.233.55”,

”event_client”:”IOS”,

"event_time": "5:30:31”,

"event_postion": "jd_home_detail”, 

"event_content": “eid_jd_app”,

"event_action": "click”, 

}

对于参数,可以基于事件的四要素做归纳:

【用户类】【页面元素类】【动作类】,每个类别都可以做扩展

公有参数、私有参数、日志长度

公有参数

随着加入参数的增多,日志也需要一定的统一性。例如想用户的基本属性,设备号、用户名、注册时间、会员属性、性别、年龄等,对于任何事件来说,都是需要包含对应的用户参数的。几乎绝大多数统计,都需要用户的基本属性。如今天有多少会员登录,有多少新用户,有多少年龄18岁的女性用户等等。它具有普遍性,几乎每条日志都会带有这些参数。这类参数视会被视为公共参数,他是在一定范围内,不论你定义什么事件、不论你分析什么,都会进行采集的。

私有参数

私有参数的范围更小,依赖业务自身的特定需求。例如直播这个业务辅助电商进行销售,那直播会有自己的私有业务属性,例如弹幕、打赏等动作,从事件本身就单独独立于电商整个体系,它有自己的私有业务规则,所以在直播这个领域内,它会有自己特定的参数。这时候,采集的日志表现,只会在直播这个业务范围内,才会存在这些参数。

日志长度

如果从日志的视角来看,把每一条日志都格式化后,每一个参数对一定一个字段,它们的长度是不一样的。我们假设有两个事件:

【直播进房事件】、【商品详情播放事件】来看一看他们的格式化后的长度:

图片

两个事件所产生的日志长度是不同的,因为采集的参数(字段)不相同。这两条日志结构中,都有三个类型,其中关于用户属性的参数,是完全一致的,我们认定它们是公共参数。房间、SKU、主播ID、商品视频这些具有独特的业务含义,并不会再其他领域内出现,故描述它们的属性就属于私有参数。

用一张图来描述Event模型:

日志的格式设计:定常、扩展与嵌套

因为日志长度不同,在使用以及后续的处理上就会带来不便,想想看,你的EXCEL中有1万条不同长度的数据是个多么恐怖的事情。但是最重要的是,对于传输和解析(把日志结构化)就变的异常困难了。每条日志都不一样长,每个日志都具有独特的私有参数,批量解析需要规则,对某一字段是保留还是解析成结构化需要设定一个统一个规则。从成本的角度来讲,如果每一条日志都需要合理的解析成结构化的数据,那么消耗的计算资源也会大很多。从传输、解析、理解、扩展和后期维护的角度来看,日志的格式需要有特定的规则,而不是杂乱无章的。

所以,根据上述的内容,日志的格式设计需要满足以下几点:

1)日志的字段长度要一样,便于维护

2)为了满足需求的灵活性,日志需要有扩展性

3)扩展性字段需要统一定义,方便下游用户解析

4)运用嵌套满足扩展性

所以日志保持定长、并有共识的几个字段,通过嵌套来满足业务的灵活多变添加更多的参数。定长设计多少个字段、不是拍脑袋决定的,需要根据业务长期以来的分析需求通过抽象来判断的。例如设备号、IP地址、通信波段等最常用的,然后留有一定的扩展位,扩展位留几个,取决于设计者的技术方案与成本、运维、解析便利性以及容错性来综合判断。

如上图,假设统一定长的日志是10个字段,其中7个字段是最常用,这7个字段是全局公参,是所有需求都需要的字段。剩下留有3个扩展位,每个扩展字段下的内容还可以再扩展,留有足够的扩展空间,在这些扩展位中,可以写入业务的私有参数,也有可能是局部的业务、用户的公有参数,但它不是全局性的(公司级)如何扩展、把哪类扩展内容固定在具体的扩展字段上,需要与多方达成协定,便于后续的解析工作。后续解析成结构化,由使用方自行决定。

格式的设计没有对错之说,核心目标是要保障稳定利于传输、具有扩展性、可读性好、容错率高、传播协定便于解析的特性,至于是20个定长字段,还是10个,外层有一个扩展字段还是多个,需根据公司的实际发展需要来决定。

一个完整行为的记录

看一个实际的例子,如上图,我的行为路径分成了6步:

1)启动京东商城应用

2)进入首页,再点击家电家居按钮

3)进入家电家居页面,再点击家电馆按钮

4)进入家电馆页面,点击美的空调广告页

5)进入美的空调详情页

6)点击商品视频,播放视频

用户的动作可以分成这几步,我们对动作进行同类合并,这几步中,一共有4类动作:登录、浏览、点击、播放。

然后是实体位置,一共有多少的页面和按钮参与了这些动作,最后用表格来描述:

页面

按钮(元素)

动作

京东APP

登录

商城首页

浏览

商城首页

家电家居

浏览

商城首页

家电家居

点击

家电家居页

浏览

家电家居页

家电馆

浏览

家电家居页

家电馆

点击

家电馆页

浏览

家电馆页

广告banner

浏览

家电馆页

广告banner

点击

商品详情页

浏览

商品详情页

商品视频

浏览

商品详情页

商品视频

点击

商品详情页

商品视频

播放

京东app

退出

浏览的动作理解起来比较特殊,页面暴露在手机上,就等同于这个页面让用户看到了,所以一般都把浏览动作定义为曝光动作。曝光是一个用户被动触发的动作,它是高频出现的,只要页面或者页面上的各种内容出现在(在手机上暴露)用户面前,都会触发曝光动作,如果用户只是上下浏览滑动,没有点击具体按钮,那么用户的动作就只有曝光。

通过表格的统计,一共包括了4个页面,4个按钮,4个动作,其中每一行都可以理解为一个独立的事件,每个事件在触发后,都会生成一条日志,这一套动作下来,一共产生了14条日志。此时如果我退出了应用,系统在记录一条我退出的动作,我这个自然人在应用上留痕的记录就是15条。假设该应用有1万个用户都做了上面的动作,则将会产生15万条日志记录。这些日志都会以定长的方式发送到接收服务器中,最后加工成表。

千万的用户会产生千万的行为轨迹,我们把应用的页面、元素与动作组合成一个个事件,每个用户的轨迹就上述的表格一样一条一条被记录下来。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1426850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vmware网络配置,VMware的三种网络模式详解与配置

vmware为我们提供了三种网络工作模式 vmware为我们提供了三种网络工作模式, 它们分别是: Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 VMware虚拟机的三种网络类型的适用场景如下…

设备的层次结构 - 驱动程序的垂直层次结构

Windows操作系统是分层调用。其实在驱动程序中也可以是分层调用的。 驱动程序的垂直层次结构 不仅是WDM驱动,NT式驱动也可以分层,这主要是通过一个设备附加在另一个设备之上。因此,可以将WDM驱动模型看成是NT驱动模型的延伸。 设备的创建顺序…

一文掌握SpringBoot注解之@Configuration知识文集(2)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

Flink 1.18.1的基本使用

系统示例应用 /usr/local/flink-1.18.1/bin/flink run /usr/local/flies/streaming/SocketWindowWordCount.jar --port 9010nc -l 9010 asd asd sdfsf sdf sdfsdagd sdf单次统计示例工程 cd C:\Dev\IdeaProjectsmvn archetype:generate -DarchetypeGroupIdorg.apache.flink -…

【Qt】—— 项⽬⽂件解析

目录 (一).pro⽂件解析 (二)widget.h⽂件解析 (三)main.cpp⽂件解析 (四)widget.cpp⽂件解析 (五)widget.ui⽂件解析 (一).pro⽂…

HiveSQL题——array_contains函数

目录 一、原创文章被引用次数 0 问题描述 1 数据准备 2 数据分析 ​编辑 3 小结 二、学生退费人数 0 问题描述 1 数据准备 2 数据分析 3 小结 一、原创文章被引用次数 0 问题描述 求原创文章被引用的次数,注意本题不能用关联的形式求解。 1 数据准备 i…

物联网可视化平台:赋能企业数字化转型

在数字化转型的大潮中,企业面临着如何更好地理解和利用海量数据的挑战。物联网技术的快速发展,为企业提供了一个全新的视角和解决方案。通过物联网可视化平台,企业能够实时监控、分析和展示物联网数据,从而加速数字化转型的进程。…

深度揭秘:代理IP的工作原理及其在网络安全中的关键角色

代理IP的工作原理及其在网络安全中的关键角色是一个相对复杂但非常重要的主题。以下是对这一内容的深度揭秘: 代理IP的工作原理 1. 请求转发 当一个客户端(如浏览器或爬虫程序)使用代理IP时,它不是直接与目标网站通信&#xff0c…

【无刷电机学习】电流采样电路硬件方案

【仅作自学记录,不出于任何商业目的】 目录 AD8210 INA282 INA240 INA199 AD8210 【AD8210数据手册】 在典型应用中,AD8210放大由负载电流通过分流电阻产生的小差分输入电压。AD8210抑制高共模电压(高达65V),并提供接地参考缓冲输出&…

从0搭建react+ts+redux+axios+antd项目

文章目录 一、安装及初始化二、TypeScript配置三、Webpack配置四、Prettier统一编码风格五、使用less六、Antd 安装及使用七、添加Router及配置八、安装axios九、添加redux及使用 本文介绍了如何用creat-react-app脚手架搭建一个react项目的基本结构,同时配置webpac…

书客、米家、柏曼大路灯哪款好?多维度实测对比推荐!

每到寒暑假,各个论坛上出现“大路灯怎么选”的类似话题非常频繁,因为现在的孩子出来上学期间需要读写之外,在寒暑假时也在不断的学习,许多家长关注到孩子学习时的光线问题,担心影响到孩子的视力状况,都纷纷…

Java的Mysql使用

Java的Mysql使用 说明 通过Java的方式连接Mysql中的数据库,并对数据库中的数据进行增加 查询操作 ​ 使用Mysql所提供的第三方库中的类(Mysql的API) 对其进行操作 ​ 将Mysql Jar包添加到lib目录后,就可以使用其中的类对其Mysql数据库进行操作 Mysq…

代码随想录算法训练营第五十九天|503.下一个更大元素II 、42. 接雨水

代码随想录算法训练营第五十九天|503.下一个更大元素II 、42. 接雨水 下一个更大元素II 503.下一个更大元素II 文章讲解:https://programmercarl.com/0503.%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A4%A7%E5%85%83%E7%B4%A0II.html 题目链接:https://…

2024年美赛 (C题MCM)| 温网积分 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看美赛的C题! 完整内容可以在文章末尾领…

2024美赛数学建模F题思路分析 - 减少非法野生动物贸易

1 赛题 问题F:减少非法野生动物贸易 非法的野生动物贸易会对我们的环境产生负面影响,并威胁到全球的生物多样性。据估计,它每年涉及高达265亿美元,被认为是全球第四大非法交易。[1]你将开发一个由数据驱动的5年项目,…

服务器C盘突然满了,是什么问题

随着时代的发展、互联网的普及,加上近几年云计算服务的诞生以及大规模普及,对于服务器的使用目前是非常普遍的,用户运维的主要对象一般也主要是服务器方面。在日常使用服务器的过程中,我们也会遇到各式各样的问题。最近就有遇到用…

SpringBoot RestTemplate 设置挡板

项目结构 代码 BaffleConfig /*** Description 记录配置信息* Author wjx* Date 2024/2/1 14:47**/ public interface BaffleConfig {// 是否开启挡板的开关public static boolean SWITCH true;// 文件根目录public static String ROOT_PATH "D:\\TIS\\mock";// …

Attack Lab:Phase1~Phase5【缓冲区溢出实验】

注:本实验所用文件不是csapp官网给出的,是学校下发的。可以参考我的思路。 phase 1 本阶段目标是使getbuf调用结束后,控制权交给touch1函数。 则我们要知道两件事:一是缓冲区大小,二是touch1在虚拟内存中的位置。 用…

如何取消隐藏Excel中的行?这里提供详细步骤

取消隐藏Microsoft Excel电子表格中的所有行就像按下键盘快捷键或使用功能区上的按钮一样简单。我们将向你展示如何操作。 如何使用快捷方式取消隐藏Excel中的所有行 若要在电子表格中显示隐藏行,请使用Microsoft Excel启动电子表格。然后,访问包含隐藏…

P1083 [NOIP2012 提高组] 借教室

P1083 [NOIP2012 提高组] 借教室 题目描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海…