1 实验目标

本次实验以全班同学在多个自媒体平台发布的作品互动数据为基础,借助助睿ETL工具完成数据的清洗与预处理,最终生成两张核心数据表,为后续的特征工程和可视化展示做好准备。

通过本次实验,学生应能够:

  • 理解数据清洗在整个数据分析流程中的基础地位和必要性
  • 运用助睿ETL完成多源数据的筛选、补全、汇总等常见预处理操作
  • 掌握“分支处理”的设计思路,实现全平台整体统计与重点平台专项分析的分流处理
  • 产出两张结构规范的数据表,满足仪表盘不同模块对数据的不同需求

2 实验环境

本次实验采用助睿数智(Uniplore)作为一站式数据科学平台。该平台涵盖了从数据接入、ETL处理、机器学习建模到可视化展示的完整链路,全部通过零代码方式完成,既适合数据分析教学,也适用于企业级数据加工场景。

  • 数据处理工具:助睿ETL(数据集成平台)

助睿ETL具备以下核心优势:

  • 全元数据驱动架构:平台内所有对象均通过元数据进行标准化定义,贯穿数据读取、处理与写入的各个环节
  • 零代码拖拽式操作:用户可通过可视化拖拽方式完成数据的抽取、转换与加载,无需编写程序代码
  • 丰富的预处理组件:内置筛选、填充、聚合、连接、字段选择等多种转换节点,能够灵活应对不同场景下的数据清洗需求
  • Pipeline(转换)机制:作为数据处理的核心功能单元,Pipeline由多个不同功能的Transform步骤组合而成,专注于数据本身的加工与转换
  • 开源内核与高可用引擎:基于开源内核构建,具备高可用架构,并通过标准化的插件体系实现引擎能力的灵活扩展

3 整体设计思路

3.1 为何需要进行数据清洗?

采集到的原始数据通常无法直接用于分析,必须先经过清洗处理。

自媒体作品数据明细.csv 为例,数据中存在以下几类问题:

  • 平台信息冗余:数据涵盖了B站、CSDN、微信、知乎、小红书等多个平台,但微信、知乎等平台的浏览数据几乎全部为零。这些平台虽然有作品记录,却缺少关键的浏览指标,难以进行有意义的分析。
  • 无效记录:部分作品的浏览量、点赞量、收藏量均为零。这类记录可能是采集过程中出现了问题,也可能是作品本身无人关注,无论原因如何,它们都对分析没有实际价值。
  • 字段缺失:点赞、收藏、分享等字段存在空值,若不进行处理,后续计算时会引发错误。

数据清洗的任务,正是逐一解决上述问题。

3.2 数据处理的整体流程

本次实验有一个特别之处:后续的仪表盘需要同时呈现两类信息。

  • 第一类为“全平台概况”:包括全班发布的作品总数、覆盖的平台数量、总浏览量及总互动量等。这些指标需要基于所有平台的原始数据进行统计,即使某些作品的浏览量为零,也应计入作品总数。
  • 第二类为“重点平台深度分析”:聚焦B站和CSDN两个平台,分析其播放量、阅读量、互动率等具体表现。这部分分析只需要保留两个平台中浏览量大于零的有效数据。

由于两类信息对数据的要求各不相同,ETL流程中需要进行分支处理:

两张表各有明确的定位——summary_all_platforms 专门服务于仪表盘顶部的全平台概况指标卡;cleaned_details 则作为中间结果,交给下一个实验环节继续加工使用。

4 实验步骤

步骤1:创建目标表

在助睿ETL中创建两张目标表。

第一张是全平台概况表(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站的投币和知乎的赞同含义不同,加在一起反而说不清楚,让它们各自独立,读者能清晰地看到每个平台有哪些互动行为。

拖入执行一个sql脚本组件

DROP TABLE IF EXISTS summary_all_platforms;
CREATE TABLE IF NOT EXISTS summary_all_platforms (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键ID',
    crawl_date DATE NOT NULL COMMENT '采集日期',
    platform VARCHAR(20) NOT NULL 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的有效记录:

字段 | 类型 | 说明

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, has_best, has_lowcode, has_practice, has_tutorial, has_pit 字段的数据加工将在下一个实验中完成。

DROP TABLE IF EXISTS content_analysis;
CREATE TABLE IF NOT EXISTS content_analysis (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键ID',
    date DATE NOT NULL COMMENT '采集日期',
    author_name VARCHAR(100) COMMENT '作者昵称',
    title VARCHAR(500) NOT NULL COMMENT '作品标题',
    platform VARCHAR(20) NOT NULL 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 '是否含“保姆级” 0否1是',
    has_lowcode TINYINT(1) COMMENT '是否含“零代码” 0否1是',
    has_practice TINYINT(1) COMMENT '是否含“实战” 0否1是',
    has_tutorial TINYINT(1) COMMENT '是否含“教程/指南” 0否1是',
    has_pit TINYINT(1) COMMENT '是否含“踩坑” 0否1是'
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '内容分析明细表(实验二输入,仅B站、CSDN有效数据)';
步骤2:导入原始数据

将已提供在助睿ETL公共空间的自媒体作品数据明细.csv 导入到自己的文件库中,作为数据源输入。助睿ETL支持多种数据源接入,CSV文件可直接导入。

本次分析使用的数据来源于助睿ETL公共空间的 自媒体作品数据明细.csv,已采集了同学们在6月8日-6月15日前提交的作品互动数据。需要说明的是,该数据集仅覆盖采集时间节点前已发布且未被删除的作品,之后新提交或已删除的作品不在此次分析范围内。导入前请先将该文件从公共空间复制到自己的文件库中。

步骤3:全平台聚合统计

在数据清洗之前,先做一个分支。拖入“排序记录”、“分组”组件,按日期 和 平台 排序、分组,其余数值字段全部取求和。输出 summary_all_platforms

画布中拖入“CSV文件输入”

拖入排序记录组件

保留需要分组的字段 

拖入分组组件,设置分组字段

设置聚合字段,删除作者名字、url、source_file、title字段后其余字段全部求和

拖入表输出

执行转换流

步骤4:过滤记录

在另一个分支中,使用“过滤记录”组件筛选B站和CSDN的有效记录:

只保留 B站 和 CSDN 两个平台,原始数据包含B站、CSDN、微信、知乎、小红书等多个平台。由于微信、知乎等平台的浏览数量大量缺失(值为0),无法支撑有意义的分析,因此只保留 B站 和 CSDN 的记录。

(2)删除两个平台中浏览量为0的记录,聚焦于真正产生用户互动的作品。

使用助睿ETL的“过滤记录”组件,通过AND 与 OR 组合条件:

(平台 = 'B站' AND 浏览数量 > 0 )

OR

(平台 = 'CSDN' AND 浏览数量 > 0)

在“过滤记录”组件中对应的配置如图:

逻辑说明:括号内的条件组合确保“平台”与“有效记录判定”同时满足,一个组件完成双重过滤。助睿ETL的过滤记录组件支持编写复杂条件表达式,可通过 AND、OR 灵活组合多条件,一步到位完成精细化数据筛选。

步骤5:填充缺失值

由于数值字段没有空值,但作者名称和作品标题可能存在空值,我们统一填充为未知,避免后续使用时出现异常。

步骤6:字段选择

原始数据中的source_file是采集批次标记,分析阶段用不到,剔除掉。投币数量(coins)保留,作为B站特有的互动指标。用“字段选择”组件,只保留以下字段,其他字段全部剔除:

date, author_name, title, platform, likes, favorites, shares, coins, views, url

步骤7:输出目标表

将处理后的数据输出为content_analysis,这张表是实验7-2的输入。

步骤8:执行转换流

完整转换流如下,点击运行

数据探查结果:

5 核心知识点总结

多条件过滤:使用 AND/OR 组合平台过滤与有效记录判定,一个组件完成双重过滤

缺失值处理:统一填充默认值,避免计算异常

多日期保留:保留时间维度用于趋势分析,暂不做去重

助睿ETL Pipeline:通过多个Transform步骤组合完成完整的数据加工流程

宽表设计:一次清洗、多次使用,一张表支撑全部后续分析

Logo

一站式 AI 云服务平台

更多推荐