还在手写 SQL 洗数据?几行建表 + 拖拽 ETL,半小时搞定自媒体全链路分析

一、实验目标

以全班同学在多平台公开发布的作品互动记录为研究对象,借助助睿ETL平台实施数据清洗与预处理操作,最终生成两张关键数据表,为后续的特征构建与可视化研究做好铺垫。

完成本实验后,应具备以下能力:

1.认识数据清洗在整个数据分析体系中的基础地位与关键作用。

2.熟练运用助睿ETL对多来源数据进行过滤筛选、缺失值填补、分组汇总等预处理操作。

3.理解"分流处理"的设计理念:将全平台整体统计与重点平台精细化分析进行分路处理。

4.产出一对规范化的数据表,各自服务于仪表盘不同模块的数据调用需求。

二、实验环境

贵兰在线,助睿数智。

三、整体设计思路

3.1 数据清洗的必要性

采集获取的原始数据通常无法直接投入分析使用,需要经过系统性的清洗处理。观察《自媒体作品数据明细.csv》这份原始数据集,可以发现其中存在若干突出问题:

第一,平台冗余问题。数据集中覆盖了多个内容平台的发布记录;部分平台上确实存在作品发布行为,但关键的浏览指标严重缺失,难以支撑有价值的分析工作。

第二,无效记录问题。部分数据行的浏览数、点赞数、收藏数三项核心指标同时为零。这些记录可能是采集环节出现遗漏,也可能是作品本身缺乏关注度,无论原因如何,它们对后续分析不具备贡献价值。

第三,字段缺失问题。点赞、收藏、分享等数值型字段中存在空值情况,若不经处理直接进行运算,将引发计算异常或结果偏差。

数据清洗的核心任务,就是针对上述各类问题逐一进行排查与修复。

3.2 数据处理流程设计

本实验在设计上有一个特殊考量:后续可视化仪表盘需要同步呈现两大类型的数据信息。

第一类为"全平台整体概况"——全班总计发布了多少条内容?覆盖了几个不同的发布平台?总的浏览量以及互动量分别是多少?这类统计指标需要立足于全部平台的原始记录进行计算,即使是浏览量为零的记录也需纳入作品数量的统计之中。

第二类为"重点平台深度分析"——聚焦于B站和CSDN两大平台的具体表现情况。这两个平台的播放量、阅读量以及互动率处于什么水平?这类分析仅需选取B站与CSDN的有效数据,即浏览数超过零值的记录。

由于这两类信息对数据的要求存在差异,因此需要在ETL流程中实施分路处理策略:

两张输出表各司其职:summary_all_platforms表专门用于仪表盘顶部的全平台概况指标卡展示;cleaned_details表则作为中间结果输出,交由下一阶段实验继续进行特征加工处理。

四、实验操作步骤

步骤1:创建目标数据表

在助睿ETL工作区中建立两张目标数据表。

第一张是全平台汇总统计表(summary_all_platforms),用于存放涵盖全部平台的聚合统计数据,其字段结构设计如下表所示:

表1 summary_all_platforms 全平台汇总表字段结构

字段名称

数据类型

字段说明

crawl_date

DATE

数据采集日期

platform

VARCHAR(20)

发布平台名称

content_count

INT

发布作品总数

total_views

INT

总浏览量合计

total_likes

INT

总点赞数合计

total_favorites

INT

总收藏数合计

total_shares

INT

总分享数合计

total_coins

INT

总投币数(B站专属指标)

total_recommend

INT

总推荐数(微信专属指标)

total_likes_zhihu

INT

总喜欢数(知乎专属指标)

total_approvals

INT

总赞同数(知乎专属指标)

该表不进行任何过滤操作,完整保留全部平台的原始统计数据。各个平台独有的特色指标(如B站的投币数、微信的推荐数、知乎的喜欢数与赞同数)分别设立独立字段进行存储,不将其合并到通用互动指标中。这样设计的考量在于,不同平台互动行为的含义各不相同——例如B站的"投币"与知乎的"赞同"代表截然不同的用户行为意图,强行合并只会造成语义混淆。独立保留让读者能够清晰区分每个平台特有的互动行为类型。

DROP TABLE IF EXISTS summary_all_platforms;

CREATE TABLE summary_all_platforms (

id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键ID',

crawl_date DATE COMMENT '采集日期',

platform VARCHAR(20) COMMENT '平台名称',

content_count INT COMMENT '作品数量',

total_views INT COMMENT '总浏览数',

total_likes INT COMMENT '总点赞数',

total_favorites INT COMMENT '总收藏数',

total_shares INT COMMENT '总分享数',

total_coins INT COMMENT '总投币数(仅B站)',

total_recommend INT COMMENT '总推荐数(仅微信)',

total_likes_zhihu INT COMMENT '总喜欢数(仅知乎)',

total_approvals INT COMMENT '总赞同数(仅知乎)'

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '全平台汇总概况表,保留全部平台原始汇总数据';

第二张是内容分析明细表(content_analysis),作为实验二的数据输入来源,其字段设计与原始数据结构大体保持一致,但限定仅收录B站与CSDN两个平台的有效数据记录:

表2 content_analysis 内容分析明细表字段结构

字段名称

数据类型

字段说明

date

DATE

采集日期

author_name

VARCHAR(100)

作者昵称

title

VARCHAR(500)

作品标题文本

platform

VARCHAR(20)

平台(B站/CSDN)

likes

INT

点赞数量

favorites

INT

收藏数量

shares

INT

分享数量

coins

INT

投币数量(仅B站有效)

views

INT

播放量/阅读量

url

VARCHAR(500)

作品访问链接

total_interaction

INT

互动总数(后续实验计算)

has_best

TINYINT(1)

标题含"保姆级"标志

has_lowcode

TINYINT(1)

标题含"零代码"标志

has_practice

TINYINT(1)

标题含"实战"标志

has_tutorial

TINYINT(1)

标题含"教程/指南"标志

has_pit

TINYINT(1)

标题含"踩坑"标志

interaction_rate

DECIMAL

互动率(后续实验计算)

注意:互动率(interaction_rate)以及has_best、has_lowcode、has_practice、has_tutorial、has_pit这六个特征字段的数值加工将在下一个实验(实验7-2)中完成。

DROP TABLE IF EXISTS content_analysis;

CREATE TABLE content_analysis (

id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键ID',

date DATE COMMENT '采集日期',

author_name VARCHAR(100) COMMENT '作者昵称',

title VARCHAR(500) COMMENT '作品标题',

platform VARCHAR(20) COMMENT '平台:B站 / CSDN',

likes INT COMMENT '点赞数',

favorites INT COMMENT '收藏数',

shares INT COMMENT '分享数',

coins INT COMMENT '投币数(仅B站)',

views INT COMMENT '播放量/阅读量',

url VARCHAR(500) COMMENT '作品链接',

total_interaction INT COMMENT '互动总数',

has_best TINYINT(1) COMMENT '是否含“保姆级”:1是,0否',

has_lowcode TINYINT(1) COMMENT '是否含“零代码”:1是,0否',

has_practice TINYINT(1) COMMENT '是否含“实战”:1是,0否',

has_tutorial TINYINT(1) COMMENT '是否含“教程/指南”:1是,0否',

has_pit TINYINT(1) COMMENT '是否含“踩坑”:1是,0否'

) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '内容分析表,实验二输入源,仅存储B站、CSDN有效记录';

步骤2:加载原始数据

将助睿ETL公共空间中已预置的《自媒体作品数据明细.csv》文件导入到个人文件库内,作为数据处理的输入来源。助睿ETL兼容多种数据源接入方式,CSV格式文件可直接完成导入操作。

说明:本次分析所采用的数据集源自助睿ETL公共空间中的《自媒体作品数据明细.csv》。该数据集涵盖了同学们在6月8日至6月15日期间提交的作品互动数据。需要指出的是,该数据集的数据范围仅限于采集时间节点前已经发布且尚未删除的作品,在此之后新提交或已被删除的作品不纳入本次分析范围。导入操作前,务必先将该文件从公共空间拷贝至个人文件库中。

步骤3:全平台维度聚合统计

在进入数据清洗环节之前,首先设置一条分支路径。在工作区中拖入"排序记录"组件和"分组"组件,按照采集日期字段和平台字段进行排序与分组,其余所有数值型字段统一采用求和聚合方式处理,最终产出summary_all_platforms汇总表。

步骤4:数据记录筛选过滤

在另一条分支路径中,利用"过滤记录"组件从中提取B站与CSDN的有效数据记录:

(1)仅保留B站和CSDN两条渠道。原始数据涵盖B站、CSDN、微信、知乎、小红书等多个平台,但由于微信和知乎等平台的浏览数据大量缺失(数值为0),难以支撑有效分析,故仅选取B站和CSDN的数据记录。

(2)进一步剔除这两个平台中浏览量为零的数据行,将分析范围聚焦于确实产生了用户互动的作品。

在助睿ETL的"过滤记录"组件中,通过AND与OR逻辑运算符组合设置筛选条件:

筛选条件表达式:(平台 = 'B站' AND 浏览数量 > 0) OR (平台 = 'CSDN' AND 浏览数量 > 0)

逻辑说明:使用括号将每个平台的判定条件进行分组,确保"平台归属"与"有效记录判定"两个条件同时被满足,通过单个组件即可实现双重维度的数据过滤。助睿ETL的过滤记录组件支持编写包含多层级逻辑组合的复杂条件表达式,能够灵活运用AND和OR操作符一次性地完成精细化数据筛选。

步骤5:缺失值统一填充

经检查,数值型字段中未发现空值情况,但作者昵称和作品标题字段中可能出现空值,统一将其填充为"未知",避免后续处理环节中出现异常。

步骤6:字段筛选与精简

原始数据中的source_file字段属于采集批次的标记信息,在分析阶段不发挥实际作用,予以剔除。投币数量字段予以保留,作为B站平台独有的互动评价指标。借助"字段选择"组件,仅保留以下十个字段,其余字段全部移除:

保留字段:date(采集日期)、author_name(作者昵称)、title(作品标题)、platform(平台)、likes(点赞数)、favorites(收藏数)、shares(分享数)、coins(投币数)、views(浏览/播放量)、url(作品链接)

步骤7:输出目标数据表

将经过上述处理流程的数据结果输出为content_analysis表,该表将作为实验7-2的数据输入基础。

步骤8:运行完整转换流

完成所有组件配置后,完整的转换流结构如下所示,确认无误后点击运行按钮执行。

数据探查结果展示:

五、核心知识点归纳

复合条件过滤技术:通过AND与OR逻辑运算符的组合应用,将平台筛选与有效记录判定整合在单个过滤组件中一次完成,实现双重条件的精准筛选

缺失值处理策略:对文本型字段的空值统一填充默认占位符,从根源上规避后续计算环节可能出现的异常

多日期维度保留:保留采集日期的时间维度信息,为后续的趋势变化分析提供数据支持,暂不执行去重操作

Pipeline流水线机制:通过多个Transform处理步骤的有序组合,构成完整的数据加工流水线,实现从原始数据到规范结果的端到端流转

宽表设计思想:遵循"一次清洗、多次复用"的设计原则,单张宽表即可支撑全部后续分析需求,降低重复加工成本

六、实验总结

本实验完整地展示了自媒体运营数据清洗与预处理的标准化流程。从原始数据的问题诊断出发,明确了数据清洗在平台去重、无效记录排除、缺失值处理三个维度的具体任务。通过助睿ETL平台的可视化操作,实现了从多源原始数据到两张规范化数据表的完整加工链路。其中,全平台汇总表为宏观指标监控提供数据底座,内容分析明细表则为后续的特征工程与深度分析奠定数据基础。实验所采用的"分路处理"策略——一条路径负责全貌统计,另一条路径负责重点深挖——是处理多源异构数据时的一种实用方法论,值得在更广泛的数据分析场景中加以迁移应用。