一、消费数据基础:数据来源与采集、数据清洗与预处理、数据存储与ETL流程

做消费数据分析这些年,我最大的感触就是——数据基础没打好,后面全是坑。你想想看,如果源头数据就是脏的、乱的,那后面画出来的用户画像再漂亮,也是自欺欺人。所以这一章,咱们就踏踏实实把地基夯实。

1.1 数据来源与采集

消费数据从哪来?说白了,就三大类:

  • 交易数据:订单表、支付流水、退款记录。这是最核心的,直接反映用户花了多少钱、买了什么。
  • 行为数据:浏览日志、点击流、搜索记录。这些数据告诉你用户「想买什么」。
  • 属性数据:用户注册信息、会员等级、标签。这是用户的「身份ID」。

我个人习惯把数据采集分为「主动采集」和「被动采集」。主动采集就是埋点,比如你在App里点了个按钮,前端就发一条日志到后端。被动采集呢,就是直接从数据库里拉,比如每天凌晨跑个脚本把昨天的订单同步过来。

避坑指南:我曾经在一个项目中,埋点数据丢了将近30%的日志,原因是前端工程师把埋点代码写在了异步回调里,页面跳转太快,请求根本没发出去。后来我要求所有关键埋点必须用「同步+重试」机制,才彻底解决。

数据采集的常见方式,我整理了一张表:

采集方式 适用场景 实时性 典型工具
SDK埋点 App/Web端行为数据 准实时 友盟、GrowingIO
日志采集 服务器端日志 近实时 Flume、Filebeat
数据库同步 交易数据、用户属性 T+1 DataX、Sqoop
API接口 第三方数据接入 按需 RestTemplate、Feign

1.2 数据清洗与预处理

数据采集回来,你以为就能直接用了?太天真了。我见过太多「脏数据」的惨案——用户年龄填的是「999」,手机号是「12345678901」,消费金额是负数。嗯,这些都得处理。

数据清洗的核心任务,我总结为「四步走」:

  1. 去重:同一个用户下了两笔一样的订单?保留一条,删除重复。
  2. 缺失值处理:用户性别没填?要么用众数填充,要么单独标记为「未知」。
  3. 异常值过滤:消费金额超过3个标准差?先查是不是大客户,不是就剔除。
  4. 格式统一:日期格式有的是「2024-01-01」,有的是「01/01/2024」,全部转成标准格式。

重点来了:数据清洗不是一次性的活儿。我建议每次跑ETL之前,先做一次数据质量检查。比如写个脚本,统计一下空值率、重复率、异常值比例。如果某个字段的空值率突然从5%飙到50%,那肯定是上游出问题了。

举个实际例子,我之前处理过一个电商平台的订单数据:

# 伪代码示例:数据清洗流程
def clean_order_data(df):
    # 1. 去重
    df = df.drop_duplicates(subset=['order_id'])
    
    # 2. 过滤异常金额
    df = df[(df['amount'] > 0) & (df['amount'] < 100000)]
    
    # 3. 填充缺失的用户ID
    df['user_id'].fillna('unknown', inplace=True)
    
    # 4. 统一日期格式
    df['order_date'] = pd.to_datetime(df['order_date'])
    
    return df

1.3 数据存储与ETL流程

数据洗干净了,存哪?这得看你的使用场景。我一般这样划分:

  • OLTP(在线事务处理):MySQL、PostgreSQL,存实时交易数据,要求高并发、低延迟。
  • OLAP(在线分析处理):ClickHouse、Doris,存分析用的宽表,适合大查询、聚合计算。
  • 数据湖:HDFS、S3,存原始日志,方便后续回溯和探索。

ETL流程,说白了就是「把数据从A搬到B,顺便洗个澡」。我习惯用「分层设计」的思路:

ETL分层架构图 ODS层(操作数据存储) 原始数据直接落地,不做任何加工 DWD层(明细数据层) 数据清洗、去重、格式统一后的明细数据 DWS层(汇总数据层) 按主题汇总,如用户日消费汇总、商品周销量汇总 ADS层(应用数据层)

这个分层设计,我用了好多年。它的好处是:每一层只做一件事,出了问题好排查。比如用户画像跑出来数据不对,我只需要从ADS层往下一层一层查,很快就能定位到是DWD层清洗逻辑出了问题,还是DWS层汇总口径不对。

注意:ETL流程一定要做「断点续传」和「幂等性」设计。我曾经因为ETL任务中途挂了,重新跑的时候数据重复了一倍,导致用户画像里的「累计消费金额」直接翻倍。后来我强制要求每个ETL任务必须支持「覆盖写入」而不是「追加写入」。

最后说一句,数据存储和ETL没有银弹。小公司用MySQL+Python脚本就能搞定,大厂得上Flink+ClickHouse+HDFS全套。关键是根据你的数据量和查询需求来选型,别盲目追求技术栈的「高大上」。


公众号:蓝海资料掘金营,微信 deep3321