#自媒体运营 #数据分析 #数据可视化 #数据清洗 #自媒体 #ETL操作
从原始作品数据到可分析数据表,本实验完成自媒体运营分析的第一步:数据清洗、平台筛选、缺失值处理与目标表输出。
一、实验背景
在自媒体运营分析中,我们采集到的原始数据往往不能直接用于后续分析。
例如,本次实验使用的“自媒体作品数据明细.csv”中包含了 B站、CSDN、微信、知乎、小红书等多个平台的数据,但不同平台的数据完整程度并不一致。
有些平台虽然存在作品记录,但浏览量大量为 0;有些作品点赞、收藏、分享等互动字段可能为空;还有一些采集辅助字段只用于记录来源,并不适合放入后续分析表中。
因此,在正式进行作品特征构建和可视化探索之前,需要先通过ETL完成数据清洗与预处理。
本次实验的核心目标是:
将一份原始 CSV 数据,通过 ETL 转换流程加工成两张规范数据表,为实验7-2和实验7-3继续使用。
二、实验目标
本实验完成后,需要输出两张目标表:
目标表 | 作用 |
|---|---|
summary_all_platforms | 保存所有平台的每日汇总数据,用于后续仪表盘顶部概况指标展示 |
content_analysis | 保存 B站 和 CSDN 的有效作品明细,作为实验7-2作品特征构建的输入表 |
这两张表的设计思路并不一样。
summary_all_platforms面向的是全平台概况统计,所以它不做平台过滤,要保留所有平台的数据,用来统计全班总共发布了多少作品、覆盖了多少平台、产生了多少浏览和互动。
content_analysis面向的是重点平台深度分析,所以它只保留 B站 和 CSDN 中浏览量大于 0 的有效记录,方便后续计算互动率、标题关键词特征等内容。
一份CSV原始数据分成“全平台汇总”和“重点平台明细清洗”两条处理分支
三、实验环境
本实验使用在线实验平台完成。
数据源文件:
自媒体作品数据明细.csv输出数据库表:
summary_all_platformscontent_analysis
ETL采用可视化拖拽式操作方式,不需要编写复杂程序,只需要通过组件拖拽、连线和参数配置,就可以完成数据读取、清洗、转换和写入。
四、核心设计思路
4.1 为什么要进行数据清洗?
原始数据中主要存在以下几个问题。
第一,平台数据质量不一致。
原始数据包含 B站、CSDN、微信、知乎、小红书等平台,但部分平台浏览量字段大量为 0,无法支撑有效的互动分析。
第二,存在无效作品记录。
有些作品的浏览量、点赞数、收藏数、分享数全部为 0,这类数据对后续运营分析帮助不大。
第三,存在字段缺失。
作者名称、作品标题等字段可能为空。如果不处理,后续可视化展示时容易出现空白,甚至影响计算逻辑。
第四,存在分析阶段不需要的字段。
例如source_file这类字段主要用于记录采集批次,对后续分析没有直接价值,可以在清洗阶段删除。
因此,本实验通过 ETL 对原始数据进行过滤、填充、分组聚合和字段选择,使数据变成后续分析可以直接使用的规范结构。
4.2 为什么要分成两条处理分支?
本实验不是简单地把 CSV 导入数据库,而是要同时满足两类分析需求。
第一类需求是全平台概况展示。
比如后续仪表盘顶部需要展示“总作品数”“覆盖平台数”“总浏览量”“总互动量”等指标。这类指标需要从所有平台数据中统计,不能只看 B站 和 CSDN。
第二类需求是重点平台深度分析。
比如后续要分析 B站 和 CSDN 的作品表现、标题特征、互动表现等,这类分析需要依赖浏览量有效的数据。如果保留大量浏览量为 0 的平台数据,会干扰分析结果。
所以,本实验采用“一份输入,两条分支”的处理方式:
自媒体作品数据明细.csv │ ├── 分支一:全平台聚合统计 │ └── 输出 summary_all_platforms │ └── 分支二:重点平台明细清洗 └── 输出 content_analysis图2 实验7-1最终ETL转换流:上方为全平台汇总分支,下方为重点平台清洗分支
五、实验准备
5.1 进入助睿ETL项目空间
首先登录在线实验平台,进入“数据集成”或“ETL”模块。
进入后,可以新建一个实验项目,也可以继续使用前面实验已经创建好的项目。为了方便管理,建议项目名称设置为:
实验7_自媒体运营分析或者:
自媒体运营分析_姓名图3 进入ETL项目空间,准备创建实验7-1转换流
5.2 复制实验数据文件
本实验使用的数据文件是:
自媒体作品数据明细.csv该文件一般位于助睿ETL公共空间中。正式操作时,需要先把它复制到自己的项目文件库中。
操作步骤如下:
在项目资源区找到“公共空间”或“公共资源”。
找到
自媒体作品数据明细.csv。点击文件右侧的更多操作按钮。
选择“复制到项目空间”或“导出到项目空间”。
返回自己的项目文件库,确认该 CSV 文件已经存在。
这里建议不要直接使用公共空间中的文件路径。 把文件复制到自己的项目空间后,后续 CSV 输入组件读取文件会更加稳定,也方便实验提交和检查。
图4 将公共空间中的“自媒体作品数据明细.csv”复制到自己的项目文件库
5.3 检查数据库连接
本实验需要将清洗结果写入数据库表,因此需要提前确认项目中已经配置好数据库连接。
如果前面实验已经配置过团体私有数据库,可以直接使用原有连接。 如果没有,需要新建数据库连接,并填写主机、端口、数据库名、用户名和密码。
配置完成后,一定要点击“测试连接”。只有测试连接成功,后续 SQL 建表和表输出组件才能正常运行。
图5 检查或新建团体私有数据库连接,并测试连接是否成功
六、步骤一:创建目标表
在正式清洗数据之前,需要先创建两张目标表。 原因很简单:后续“表输出”组件需要把数据写入数据库,如果数据库中还没有对应表,运行时就会报错。
本实验需要创建:
summary_all_platforms content_analysis可以通过“执行一个SQL脚本”组件来完成建表操作。
6.1 创建全平台概况表 summary_all_platforms
summary_all_platforms用于保存所有平台的每日汇总结果。
建表 SQL 如下:
DROP TABLE IF EXISTS summary_all_platforms; CREATE TABLE summary_all_platforms ( 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='全平台每日作品汇总表';这张表的特点是: 它保留所有平台,不做过滤。B站的投币数、微信的推荐数、知乎的喜欢数和赞同数分别单独保留字段,不强行合并成一个指标。这样可以避免不同平台互动含义混淆。
图6 使用“执行一个SQL脚本”组件创建summary_all_platforms目标表
6.2 创建内容分析表 content_analysis
content_analysis用于保存清洗后的 B站 和 CSDN 有效作品明细。 这张表是实验7-2的输入表,所以除了基础字段外,还提前预留了互动总数和标题关键词特征字段。
建表 SQL 如下:
DROP TABLE IF EXISTS content_analysis; CREATE TABLE content_analysis ( `date` DATE COMMENT '采集日期', author_name VARCHAR(100) COMMENT '作者昵称', title VARCHAR(500) COMMENT '作品标题', platform VARCHAR(20) COMMENT '平台名称', 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 NULL COMMENT '互动总数,实验7-2计算', has_best TINYINT(1) DEFAULT NULL COMMENT '是否含“保姆级”,实验7-2计算', has_lowcode TINYINT(1) DEFAULT NULL COMMENT '是否含“零代码”,实验7-2计算', has_practice TINYINT(1) DEFAULT NULL COMMENT '是否含“实战”,实验7-2计算', has_tutorial TINYINT(1) DEFAULT NULL COMMENT '是否含“教程/指南”,实验7-2计算', has_pit TINYINT(1) DEFAULT NULL COMMENT '是否含“踩坑”,实验7-2计算' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='清洗后作品明细表';这里需要注意,date是数据库中的常见关键字,因此建表时建议使用反引号:
`date`这样可以避免字段名和数据库关键字冲突。
图7 使用“执行一个SQL脚本”组件创建content_analysis目标表
6.3 运行SQL脚本
SQL 粘贴完成后,点击运行按钮执行转换流。
如果运行成功,组件上会出现绿色对勾,日志中不会出现ERROR。 如果出现报错,优先检查数据库连接是否选择正确,以及 SQL 中字段名、英文逗号、括号是否完整。
七、步骤二:配置CSV文件输入
目标表创建完成后,开始搭建正式的数据清洗转换流。
在左侧组件栏中找到“CSV文件输入”组件,将其拖入画布。
双击组件,配置 CSV 文件路径。选择刚刚复制到自己项目空间中的:
自媒体作品数据明细.csv常用配置如下:
配置项 | 设置内容 |
|---|---|
文件路径 | 选择项目文件库中的 |
分隔符 | 英文逗号 |
是否包含列头 | 是 |
文本限定符 | 双引号 |
编码 | 优先选择 UTF-8 |
预览 | 点击预览确认字段正常显示 |
如果预览时中文出现乱码,可以尝试将编码改为 GBK。 如果字段名没有正常识别,要检查是否勾选了“包含列头行”。
图9 配置CSV文件输入组件,选择“自媒体作品数据明细.csv”
图10 预览CSV数据,确认字段名、中文内容和数值字段显示正常
八、步骤三:搭建全平台聚合统计分支
第一条分支用于生成summary_all_platforms表。
这一分支的处理流程是:
CSV文件输入 → 排序记录 → 分组 → 表输出这条分支不进行平台过滤,因为它的目标是统计所有平台的整体概况。
8.1 配置排序记录组件
从左侧组件栏拖入“排序记录”组件,并将“CSV文件输入”连接到“排序记录”。
双击“排序记录”,添加排序字段:
排序字段 | 排序方式 |
|---|---|
crawl_date | 升序 |
platform | 升序 |
之所以先排序,是因为后面的分组组件通常需要输入数据按照分组字段排序,这样才能稳定完成聚合统计。
图11 配置排序记录组件,按照采集日期和平台进行升序排序
8.2 配置分组组件
拖入“分组”组件,将“排序记录”连接到“分组”。
双击“分组”组件,先设置分组字段:
分组字段 |
|---|
crawl_date |
platform |
然后设置聚合字段。
输出字段名 | 源字段 | 聚合方式 | 含义 |
|---|---|---|---|
content_count | title或 | 计数 | 统计作品数量 |
total_views | view_count | 求和 | 总浏览数 |
total_likes | like_count | 求和 | 总点赞数 |
total_favorites | favorite_count | 求和 | 总收藏数 |
total_shares | share_count | 求和 | 总分享数 |
total_coins | coin_count | 求和 | 总投币数 |
total_recommend | recommend_count | 求和 | 总推荐数 |
total_likes_zhihu | love_count | 求和 | 知乎喜欢数 |
total_approvals | agree_count | 求和 | 知乎赞同数 |
这里最重要的是:输出字段名必须和summary_all_platforms表中的字段名一致。
如果分组组件输出字段叫sum_view_count,但目标表字段叫total_views,后面表输出时就可能映射失败。因此建议直接在分组组件中把输出字段名写成目标表字段名。
图12 在分组组件中选择crawl_date和platform作为分组字段
图13 配置作品数量、浏览量、点赞数、收藏数等字段的计数与求和
8.3 输出到 summary_all_platforms
拖入“表输出”组件,将“分组”连接到“表输出”。
双击“表输出”,配置如下:
配置项 | 内容 |
|---|---|
数据库连接 | 选择前面测试成功的连接 |
目标表 | summary_all_platforms |
是否清空表 | 建议调试时勾选 |
字段映射 | 确认分组输出字段与目标表字段一一对应 |
如果多次运行实验,建议勾选清空目标表,避免重复插入相同数据。
图14 配置表输出组件,将全平台汇总结果写入summary_all_platforms
九、步骤四:搭建重点平台明细清洗分支
第二条分支用于生成content_analysis表。
这一分支的处理流程是:
CSV文件输入 → 过滤记录 → 替换NULL值 → 字段选择 → 表输出1同时,过滤失败的数据连接到“空操作”,表示直接丢弃。
过滤记录 ├── 匹配成功 → 替换NULL值 └── 匹配失败 → 空操作图15 从CSV输入拉出第二条分支,搭建重点平台明细清洗流程
9.1 配置过滤记录组件
拖入“过滤记录”组件,并从“CSV文件输入”连接到“过滤记录”。
本步骤的目标是只保留:
B站 且 浏览量 > 0 或者 CSDN 且 浏览量 > 0逻辑表达式如下:
(platform = 'B站' AND view_count > 0) OR (platform = 'CSDN' AND view_count > 0)在助睿ETL中过滤条件可以按照下面的方式配置:
逻辑关系 | 字段 | 判断符 | 值 |
|---|---|---|---|
第一组 | platform | = | B站 |
AND | view_count | > | 0 |
OR 第二组 | platform | = | CSDN |
AND | view_count | > | 0 |
配置完成后,需要设置两个输出方向:
输出方向 | 连接组件 | 含义 |
|---|---|---|
匹配成功 | 替换NULL值 | 保留符合条件的数据 |
匹配失败 | 空操作 | 丢弃不符合条件的数据 |
这里要特别注意括号逻辑。 正确逻辑是:
(B站 且 浏览量大于0) 或者 (CSDN 且 浏览量大于0)不能写成:
平台 = B站 或者 平台 = CSDN 且 浏览量大于0否则可能导致部分浏览量为 0 的数据被错误保留。
图16 配置过滤记录组件,只保留 B站 和 CSDN 中浏览量大于0的有效作品
图17 匹配成功的数据进入替换NULL值,匹配失败的数据进入空操作丢弃
9.2 配置替换NULL值组件
过滤后的数据进入“替换NULL值”组件。
根据实验指导书,数值字段基本没有空值,但作者名称和作品标题可能存在空值。因此这里主要填充文本字段。
建议配置如下:
字段 | 替换值 |
|---|---|
author_name | 未知作者 |
title | 未知标题 |
如果老师要求和实验指导书保持完全一致,也可以统一填成:
未知如果后续检查发现数值字段也有 NULL,可以额外把这些字段填充为 0:
like_count favorite_count share_count coin_count view_count图18 配置替换NULL值组件,将作者名称和作品标题中的空值填充为默认文本
9.3 配置字段选择组件
字段选择组件的作用有两个。
第一,删除后续分析不需要的字段。 例如source_file是采集批次标记,不需要进入分析表。
第二,把原始CSV字段名整理成目标表字段名。 例如 CSV 中可能叫like_count,但目标表中叫likes,这里就需要进行重命名。
建议字段保留与重命名如下:
CSV原始字段 | 目标字段 | 处理方式 |
|---|---|---|
crawl_date | date | 保留并重命名 |
author_name | author_name | 保留 |
title | title | 保留 |
platform | platform | 保留 |
like_count | likes | 保留并重命名 |
favorite_count | favorites | 保留并重命名 |
share_count | shares | 保留并重命名 |
coin_count | coins | 保留并重命名 |
view_count | views | 保留并重命名 |
url | url | 保留 |
source_file | — | 删除 |
recommend_count | — | 删除 |
love_count | — | 删除 |
agree_count | — | 删除 |
这里一定要保证字段选择后的输出字段能够对应content_analysis表结构。
content_analysis中的以下字段本实验暂时不用填:
total_interaction has_best has_lowcode has_practice has_tutorial has_pit这些字段会在实验7-2中继续加工。
图19 配置字段选择组件,删除无关字段并统一字段名称
9.4 输出到 content_analysis
拖入第二个“表输出”组件,可以命名为:
表输出1_content_analysis将“字段选择”连接到这个表输出组件。
配置如下:
配置项 | 内容 |
|---|---|
数据库连接 | 选择同一个数据库连接 |
目标表 | content_analysis |
是否清空表 | 调试时建议勾选 |
字段映射 | 确认字段选择后的字段与目标表字段对应 |
需要映射的字段主要包括:
date author_name title platform likes favorites shares coins views url不需要映射的字段包括:
total_interaction has_best has_lowcode has_practice has_tutorial has_pit这些字段可以保持默认 NULL,等待实验7-2继续计算。
图20 配置表输出1,将清洗后的重点平台明细数据写入content_analysis
十、步骤五:运行完整转换流
所有组件配置完成后,先保存转换流,再点击运行。
运行时建议选择:
配置项 | 建议设置 |
|---|---|
运行方式 | local |
日志级别 | 基本日志 |
是否清空日志 | 建议勾选 |
点击启动后,等待所有组件执行完成。
如果执行成功,关键组件上会出现绿色对勾,日志中不会出现ERROR。
图21 运行完整转换流,等待所有组件执行完成
图22 所有关键节点显示绿色对勾,表示转换流运行成功
十一、步骤六:检查输出结果
运行成功后,需要分别检查两张表。
11.1 检查 summary_all_platforms
summary_all_platforms应该满足以下条件:
包含所有平台
按日期和平台汇总
有作品数量字段
content_count有浏览、点赞、收藏、分享等汇总字段
B站、微信、知乎等平台特色指标分别保留
可以通过数据探查、表预览或数据库查询进行检查。
示例检查 SQL:
SELECT * FROM summary_all_platforms LIMIT 20;图23 预览summary_all_platforms,检查所有平台汇总结果是否正常
11.2 检查 content_analysis
content_analysis应该满足以下条件:
只包含 B站 和 CSDN
浏览量字段
views大于 0作者名称和标题没有空值
不包含
source_file字段名与目标表结构一致
示例检查 SQL:
SELECT platform, COUNT(*) AS content_count FROM content_analysis GROUP BY platform;也可以检查是否还存在浏览量为 0 的数据:
SELECT * FROM content_analysis WHERE views <= 0;如果查询结果为空,说明过滤条件生效。
图24 预览content_analysis,检查是否只保留 B站 和 CSDN 的有效作品
十二、实验结果说明
完成实验7-1后,原始自媒体作品数据已经被加工成两类结果。
第一类是全平台汇总数据。 它保留所有平台信息,适合用于后续仪表盘顶部概览,例如总作品数、总浏览量、总互动量、平台覆盖情况等。
第二类是重点平台明细数据。 它只保留 B站 和 CSDN 的有效作品记录,适合继续做作品互动分析、标题特征分析和内容表现对比。
这一步虽然看起来只是清洗数据,但它决定了后面所有分析是否可靠。如果数据源没有清理干净,后续的图表、指标和结论都会受到影响。
十三、常见问题与解决办法
13.1 表输出时报错:目标表不存在
原因通常是还没有执行建表 SQL,或者 SQL 脚本使用的数据库连接和表输出组件使用的连接不是同一个。
解决办法:
先运行 SQL 脚本创建目标表。
确认 SQL 脚本组件和表输出组件使用同一个数据库连接。
重新选择目标表并刷新字段。
13.2 字段映射失败
原因通常是 ETL 输出字段名和数据库表字段名不一致。
例如,分组组件输出的是:
sum_view_count但数据库表字段是:
total_views这时表输出就无法自动匹配。
解决办法是在分组组件或字段选择组件中统一输出字段名,使其和目标表字段完全一致。
13.3 content_analysis 表没有数据
可能原因包括:
过滤条件写错。
平台字段值和CSV实际值不一致。
浏览量字段名写错。
匹配成功分支没有连接到后续组件。
解决办法:
先在CSV预览中确认平台字段是否确实是:
B站 CSDN再确认浏览量字段到底叫:
view_count还是:
views最后检查过滤成功的数据是否连接到了“替换NULL值”组件。
13.4 数据重复
如果多次运行转换流,但没有清空目标表,就可能出现重复数据。
解决办法:
在表输出组件中勾选“清空目标表”或“截断表”。
或者运行前手动执行:
TRUNCATE TABLE summary_all_platforms; TRUNCATE TABLE content_analysis;13.5 中文乱码
如果CSV预览时中文显示乱码,通常是编码不匹配。
解决办法:
优先使用 UTF-8。
如果仍然乱码,尝试 GBK。
修改编码后重新预览,确认中文正常显示再继续。
十四、实验小结
本次实验完成了自媒体运营分析的第一步:数据清洗与预处理。
整个实验的核心不是简单导入数据,而是通过 ETL 流程把原始数据拆分成两个不同用途的数据结果:
summary_all_platforms:服务于全平台概况展示 content_analysis:服务于重点平台深度分析在操作过程中,我们使用了 CSV 文件输入、排序记录、分组、过滤记录、替换NULL值、字段选择、表输出等多个助睿ETL组件,完成了从原始文件到数据库目标表的完整数据加工流程。
本实验完成后,后续实验7-2就可以基于content_analysis继续计算互动总数、互动率和标题关键词特征;实验7-3则可以基于清洗后的数据进行可视化探索和仪表盘制作。
十五、实验流程回顾
最后用一张流程图回顾本实验的完整操作:
准备阶段 ├── 登录助睿ETL ├── 进入实验项目 ├── 复制自媒体作品数据明细.csv └── 检查数据库连接 建表阶段 ├── 创建 summary_all_platforms └── 创建 content_analysis 数据处理阶段 ├── CSV文件输入 │ ├── 分支一:全平台聚合统计 │ ├── 排序记录 │ ├── 分组 │ └── 表输出 summary_all_platforms │ └── 分支二:重点平台明细清洗 ├── 过滤记录 ├── 替换NULL值 ├── 字段选择 └── 表输出 content_analysis 检查阶段 ├── 检查 summary_all_platforms ├── 检查 content_analysis └── 查看运行日志是否无ERROR图25 实验7-1最终成果:两张目标表成功生成,转换流运行完成
数据分析的第一步往往不是画图,也不是直接计算指标,而是把原始数据整理成“可信、干净、可复用”的分析数据。
实验7-1正是这个过程: 先保留全平台概况,再筛选重点平台有效数据;既不丢失整体统计视角,也为后续深度分析准备了高质量明细表。
完成这一步后,整个自媒体运营分析项目就有了稳定的数据基础