实验7-1 自媒体运营分析-数据清洗与预处
一、实验背景
1.1实验目的
本实验基于全班同学在多平台发布的作品互动数据,使用助睿ETL完成数据清洗与预处理,输出两张核心数据表,为后续特征工程与可视化分析奠定基础。
通过本实验,学生应掌握:
- 理解数据清洗在数据分析流程中的基础性与必要性
- 使用助睿ETL完成多源数据的过滤、填充、聚合等预处理操作
- 掌握“分支处理”的设计思路:全平台概况统计与重点平台深度分析分流
- 输出两张规范数据表,支撑仪表盘不同模块的数据需求
1.2 实验思路
1..2.1 为什么需要数据清洗?
采集到的原始数据往往不能直接用于分析,需要先做清洗。
观察 自媒体作品数据明细.csv 这份数据,可以发现几个问题:
- 平台冗余:数据包含了B站、CSDN、微信、知乎、小红书等多个平台,但微信、知乎等平台的浏览数量几乎全是0。这些平台虽然有作品记录,但缺乏核心的浏览数据,无法支撑有意义的分析。
- 无效记录:部分作品的浏览数量、点赞数量、收藏数量全部为0。这些记录可能是采集失败,也可能是作品确实无人问津,但无论如何,它们对分析没有贡献。
- 字段缺失:点赞、收藏、分享等字段中存在空值,如果不处理,后续计算会报错。
数据清洗要做的,就是把这些问题逐一解决。
1.2.2数据处理流程
本次实验有一个特殊之处:后续可视化仪表盘需要同时展示两类信息。
第一类是“全平台概况”——全班总共发了多少内容?覆盖了几个平台?总浏览和总互动是多少?这些数字需要基于所有平台的原始数据来统计,哪怕浏览数为0也要计入作品数。
第二类是“重点平台深度分析”——B站和CSDN的具体表现如何?播放量、阅读量、互动率是多少?这些分析只需要B站和CSDN的有效数据(浏览数大于0的记录)。
两类信息对数据的要求不同,所以在ETL中需要做分支处理:
两张表各司其职:summary_all_platforms 只用于仪表盘顶部的全平台概况指标卡;cleaned_details 作为中间结果,交给下一实验继续加工。
二、实验步骤
2.1导入数据
在公共空间处导出数据,自媒体作品数据明细.csv
右键资源库,新建转换流,命名为“创建标题特征互动分析表“
2.2创建表
在画布中拖入组件“执行一个SQL脚本”
解锁画布,编辑组件数据库连接选择团队私有数据库:
脚本代码如下:
CREATE TABLE IF NOT EXISTS title_feature_analysis (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
platform VARCHAR(20) NOT NULL COMMENT '平台(B站/CSDN)',
feature_name VARCHAR(50) COMMENT '关键词名称',
avg_interaction DECIMAL(10,2) COMMENT '含该关键词的平均互动总数',
overall_avg DECIMAL(10,2) COMMENT '该平台整体平均互动总数',
sample_count INT COMMENT '含该关键词的作品数'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='标题特征互动分析表';
点击确认:
执行转化流:
以同样的方式创建内容分析表,全平台概况表
内容分析表的SQL代码:
CREATE TABLE IF NOT EXISTS content_analysis (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
crawl_date DATE NOT NULL COMMENT '采集日期',
author_name VARCHAR(100) COMMENT '作者昵称',
title VARCHAR(500) COMMENT '作品标题',
platform VARCHAR(20) NOT NULL COMMENT 'B站 / CSDN',
likes INT DEFAULT 0 COMMENT '点赞数',
favorites INT DEFAULT 0 COMMENT '收藏数',
shares INT DEFAULT 0 COMMENT '分享数',
coins INT DEFAULT 0 COMMENT '投币数(仅B站)',
views INT DEFAULT 0 COMMENT '播放量/阅读量',
url VARCHAR(500) COMMENT '作品链接',
total_interaction INT DEFAULT 0 COMMENT '互动总数',
has_best TINYINT(1) COMMENT '是否含"保姆级"',
has_lowcode TINYINT(1) COMMENT '是否含"零代码"',
has_practice TINYINT(1) COMMENT '是否含"实战"',
has_tutorial TINYINT(1) COMMENT '是否含"教程/指南"',
has_pit TINYINT(1) COMMENT '是否含"踩坑"'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='内容分析表';
全平台概况表SQL代码:
CREATE TABLE IF NOT EXISTS summary_all_platforms (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
crawl_date DATE NOT NULL COMMENT '采集日期',
platform VARCHAR(20) NOT NULL COMMENT '平台名称',
content_count INT DEFAULT 0 COMMENT '作品数量',
total_views INT DEFAULT 0 COMMENT '总浏览数',
total_likes INT DEFAULT 0 COMMENT '总点赞数',
total_favorites INT DEFAULT 0 COMMENT '总收藏数',
total_shares INT DEFAULT 0 COMMENT '总分享数',
total_coins INT DEFAULT 0 COMMENT '总投币数(仅B站)',
total_recommend INT DEFAULT 0 COMMENT '总推荐数(仅微信)',
total_likes_zhihu INT DEFAULT 0 COMMENT '总喜欢数(仅知乎)',
total_approvals INT DEFAULT 0 COMMENT '总赞同数(仅知乎)'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
COMMENT='全平台概况表';
2.2全平台聚合统计
在数据清洗之前,先做一个分支。拖入“排序记录”、“分组”组件,按 日期 和 平台 排序、分组,其余数值字段全部取求和。输出 summary_all_platforms
2.3过滤记录
在另一个分支中,使用“过滤记录”组件筛选B站和CSDN的有效记录:
只保留 B站 和 CSDN 两个平台,原始数据包含B站、CSDN、微信、知乎、小红书等多个平台。由于微信、知乎等平台的浏览数量大量缺失(值为0),无法支撑有意义的分析,因此只保留 B站 和 CSDN 的记录。
逻辑说明:括号内的条件组合确保“平台”与“有效记录判定”同时满足,一个组件完成双重过滤。助睿ETL的过滤记录组件支持编写复杂条件表达式,可通过 AND、OR 灵活组合多条件,一步到位完成精细化数据筛选。
2.4填充缺失值
由于数值字段没有空值,但作者名称和作品标题可能存在空值,我们统一填充为位置,避免后续使用时出现异常。
2.5字段选择
原始数据中的 source_file是采集批次标记,分析阶段用不到,剔除掉。投币数量(coins)保留,作为B站特有的互动指标。用“字段选择”组件,只保留以下字段,其他字段全部剔除:
date, author_name, title, platform, likes, favorites, shares, coins, views, url
2.6输出目标表
将处理后的数据输出为 content_analysis,这张表是实验7-2的输入。
三、实验结果
执行转换流并数据探查,在助睿BI看输出表
四、实验心得
本次实验完成自媒体多平台原始数据ETL清洗,让我彻底理解数据清洗是数据分析全流程的地基,没有高质量底层数据,后续特征计算、可视化分析都会出现偏差甚至报错。拿到原始数据集后,我直观看到多源采集数据存在大量缺陷:微信、知乎、小红书等平台浏览量几乎全为0,属于无效冗余数据;大量作品点赞、阅读全部归零,是无价值采集记录;标题、作者字段存在空值,直接聚合统计会产生计算异常。
实验最核心的设计是分支处理数据流,一套原始数据分流生成两张用途完全不同的数据表:summary_all_platforms保留全平台所有记录用于大盘指标统计,cleaned_details仅筛选B站、CSDN有效流量数据用于深度分析。一开始我没有理解双分支的意义,尝试统一过滤全部零流量数据,导致全平台作品总量统计失真,仪表盘总览指标卡数值出错,反复调试后才明白不同分析场景对数据口径的要求存在本质区别。
实操中熟练掌握了助睿ETL各类组件:过滤记录多条件组合、替换NULL值填充文本空字段、字段选择剔除冗余采集字段、SQL脚本建表、分组聚合批量求和。过程中多次出现数据表字段不匹配、过滤逻辑写反、空值未填充导致聚合为空等问题,通过数据探查逐行核对记录才逐一修正。
