实验7-2:自媒体运营分析-作品特征构建
1 实验目的
在实验7-1 清洗后的数据的基础上,使用助睿ETL完成以下两类特征的计算与存储:
(1)标题特征与互动总数(更新明细表)
-
计算互动总数(
total_interaction = likes + favorites + shares + coins) -
提取5个标题特征标志字段(
has_best、has_lowcode、has_practice、has_tutorial、has_pit) -
将计算结果更新到
content_analysis表
(2)关键词级别的汇总数据
-
分别计算含每个关键词的作品的平均互动总数
-
将互动汇总结果输出到
title_feature_analysis表
通过本实验,学生应掌握:
-
理解特征工程在数据分析中的核心作用
-
使用助睿ETL的“计算器”组件计算衍生指标
-
使用“JavaScript代码”组件完成文本关键词的自动标注
-
使用“插入/更新”组件回填数据,不新建表、不覆盖已有基础数据
-
使用“过滤+聚合”组件组合完成分组统计计算
2 实验环境
- 实验平台:
本次实验使用助睿数智(Uniplore) 作为一站式数据科学平台。该平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能,适用于数据分析教学与企业数据加工场景。
- 数据处理工具:助睿ETL(数据集成平台)
助睿ETL核心优势:
全元数据驱动架构:平台内所有对象类型均通过元数据标准化定义,覆盖数据读取、处理、写入的全流程
零代码拖拽式操作:通过可视化方式完成数据的抽取(Extract)、转换(Transform)、加载(Load),无需编写复杂代码
丰富的预处理组件:内置筛选、填充、聚合、连接、字段选择等多种转换节点,灵活应对各类数据清洗场景
Pipeline(转换)机制:面向数据流通处理的核心功能单元,由多个不同功能的Transform步骤组合构成,聚焦数据本身的加工转换操作
开源内核高可用引擎:基于开源内核的高可用引擎架构,通过标准化插件体系可灵活扩展引擎能力
本次实验使用的核心组件:
| 组件 | 用途 |
|---|---|
| 表输入 | 读取 content_analysis 表中待处理的数据 |
| 计算器 | 计算互动总数(likes + favorites + shares + coins) |
| JavaScript代码 | 提取标题中的5个关键词特征标志 |
| 插入/更新 | 按 id 匹配,更新 content_analysis 表中的特征字段 |
| 过滤记录 + 聚合 | 分别统计整体平均值和每个关键词的平均值 |
| 增加常量 | 为每个关键词分支添加名称标识 |
| 合并记录 | 将5个关键词的统计结果合并为5行 |
| 表输出 | 将互动数据汇总写入 title_feature_analysis 表 |
3 核心设计思路
本次实验构建两类特征,并将数据更新到实验7-1 的content_analysis 表中:
-
互动总数:
likes + favorites + shares + coins,反映作品的用户互动规模(绝对值) -
标题特征:把标题中是否包含特定关键词提取为0/1标志字段,后续量化对比这些词的实际效果
数据处理流程:

4 实验步骤
4.1 更新 content_analysis 表(标题特征+互动总数)
步骤1:导入数据
将实验7-1输出的 content_analysis表作为输入,拖入助睿ETL工作区。助睿ETL支持跨项目引用数据集,可直接选择实验一输出的结果表。
步骤2:提取标题特征(核心分析维度)
在"JavaScript代码"组件中,可以直接使用JJavaScript代码对 title 字段进行关键词匹配,生成5个标题特征标志字段。
var title = title; // 字段名直接作为变量使用
// 判断关键词
var has_best = title.indexOf("保姆级") !== -1 ? 1 : 0;
var has_lowcode = title.indexOf("零代码") !== -1 ? 1 : 0;
var has_practice = title.indexOf("实战") !== -1 ? 1 : 0;
var has_tutorial = (title.indexOf("教程") !== -1 || title.indexOf("指南") !== -1) ? 1 : 0;
var has_pit = title.indexOf("踩坑") !== -1 ? 1 : 0;
// 将结果赋值给新字段(输出字段需在字段表中提前定义)
has_best = has_best;
has_lowcode = has_lowcode;
has_practice = has_practice;
has_tutorial = has_tutorial;
has_pit = has_pit;

返回值说明:
| 字段 | 返回值 | 条件 |
|---|---|---|
has_best |
1 / 0 | title中含"保姆级"为1,否则为0 |
has_lowcode |
1 / 0 | title中含"零代码"为1,否则为0 |
has_practice |
1 / 0 | title中含"实战"为1,否则为0 |
has_tutorial |
1 / 0 | title中含"教程"或"指南"为1,否则为0 |
has_pit |
1 / 0 | title中含"踩坑"为1,否则为0 |
设计思路:这五个关键词在数据中高频出现,且与“教学价值”“实操性”强相关,是分析标题影响力的理想切入点。每个特征独立提取,便于在BI中做分组对比。
步骤3:计算互动总数
接入“计算器”组件,新增 interactions 字段:interactions = likes + favorites + shares + coins
步骤4:数据更新
使用“插入/更新”组件,将计算好的特征数据回填到 content_analysis 表
关键配置:
| 配置项 | 设置 |
|---|---|
| 目标表 | content_analysis |
| 查询关键字 | id(匹配依据) |
| 更新字段 | total_interaction, has_best, has_lowcode, has_practice, has_tutorial, has_pit |
字段映射::
| 流字段 | 表字段 |
|---|---|
| id | id |
| interactions | total_interaction |
| has_best | has_best |
| has_lowcode | has_lowcode |
| has_practice | has_practice |
| has_tutorial | has_tutorial |
| has_pit | has_pit |
“插入/更新” vs “表输出”的区别:如果使用“表输出”,每次运行都会新增行,导致数据重复。“插入/更新”按
id匹配,如果id已存在则更新指定字段,如果不存在才插入新行(本例中id一定存在,所以只做更新,不新增行)。这样本实验可以反复运行,不会产生重复数据。
步骤5:执行转换流
完整转换流如下,点击运行

数据结果:

4.2 输出关键词级别的汇总表
步骤1:创建目标表
在助睿ETL中创建以下目标表用来存储本节最后输出的数据:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 自增主键 |
| platform | VARCHAR(20) | 平台(B站/CSDN) |
| feature_name | VARCHAR(50) | 关键词名称 |
| avg_interaction | DECIMAL(10,2) | 含该关键词的平均互动总数 |
| overall_avg | DECIMAL(10,2) | 该平台整体平均互动总数 |
| sample_count | INT | 含该关键词的作品数 |
步骤2:计算整体平均互动数
接入“排序记录”、“分组”组件,按id升序排序,不设分组条件,直接计算 AVG(total_interaction),得到 overall_avg。
聚合完成后,接入“增加常量”组件,新增字段 feature_name = '保姆级',为这一行数据贴上名称标签,以便用于后续与关键词数据连接。
步骤3:计算关键词的平均互动数
以“保姆级”为例,表输入组件复制分发另一条分支,先接“过滤记录”组件,设置 has_best = 1,只保留含“保姆级”的作品。
然后接入“排序记录”、“分组”组件,按id升序排序,计算 AVG(total_interaction) 得到 avg_interaction,COUNT(id) 得到 sample_count。
聚合完成后,接入“增加常量”组件,新增字段 feature_name = '保姆级',为这一行数据贴上名称标签。
为什么要加这个常量?因为聚合后的数据只有数值,没有关键词名称。如果不加,5个分支的数据合并后无法区分谁是谁。常量就是给每一行贴上一个“标签”,告诉下游“这一行是保姆级的数据”。
步骤4:合并整体平均值和关键词平均值
接下来将整体平均值和关键词平均值进行合并,使用“记录集连接”组件,匹配字段为feature_name,由于2个分支都只有1行数据,所以无需排序。
步骤5:数据入库
用”表输出”组件将合并后的数据入库,这里需要注意:不勾选“裁剪表”,因为还有其他关键词数据也要入库,不用删除已有数据。
步骤6:执行转换流
一个关键词的互动汇总数据加工转换流如下,点击运行:

查看数据:

接下来加工其他关键词的数据:
复制粘贴整个分支,然后只修改两处:过滤条件(如
has_lowcode = 1)和常量值(如零代码)。其他组件配置完全相同。
最后的完整数据情况如下:

5 实验输出
| 输出表 | 数据粒度 | 用途 |
|---|---|---|
content_analysis(更新) |
作品级 | 排名、趋势、概况等明细分析 |
title_feature_analysis(新建) |
关键词级 | 标题特征互动分析 |
6 实验总结和收获
6.1 实验总结
本次实验在实验7-1数据清洗的基础上,围绕自媒体作品特征构建这一核心目标,完成了两项主要工作:一是在作品明细层面计算了互动总数(total_interaction)并提取了5个标题关键词特征标志字段,通过"插入/更新"组件将结果回填至 content_analysis 表;二是在关键词汇总层面,针对每个关键词分别统计了含该关键词作品的平均互动总数、整体平均互动总数和样本数量,将汇总结果写入 title_feature_analysis 表。整个实验流程涵盖了从数据读取、特征计算、数据回填到分组聚合、多分支合并的完整ETL链路,最终得到了可用于后续BI分析的结构化特征数据。
6.2 收获与体会
(1)深化了对特征工程的理解
通过本次实验,我切实体会到特征工程在数据分析流程中的关键作用。原始数据中的点赞、收藏、分享、投币等字段各自只反映了用户互动的一个侧面,而将它们加总为 total_interaction 后,能够从整体维度衡量作品的受欢迎程度。同时,将非结构化的标题文本转化为0/1二值特征(has_best、has_lowcode 等),是将定性信息定量化的一种典型做法,使得后续可以按关键词分组进行统计对比,从而量化不同标题策略对互动效果的影响。这种"从原始数据中提炼分析维度"的思维方式,是数据分析师的核心能力之一。
(2)掌握了助睿ETL多组件协同构建转换流的方法
本次实验涉及的组件种类较多,包括计算器、JavaScript代码、插入/更新、过滤记录、聚合、增加常量、记录集连接和表输出等,每个组件承担不同的职责。在实践中,我学会了如何根据数据处理逻辑合理编排组件顺序,理清上下游数据流关系。例如,在关键词汇总部分,需要先从同一张源表分出多条处理分支,每条分支独立完成"过滤→排序→聚合→增加常量"的流程,最后再通过"记录集连接"组件按 feature_name 合并。这种"分而治之、再合并"的设计模式在处理多维度统计时非常实用。
(3)理解了"插入/更新"与"表输出"的适用场景差异
实验中对 content_analysis 表使用"插入/更新"而非"表输出"进行数据写入,这一选择让我对两种组件的区别有了更清晰的认识。"表输出"每次执行都会追加新行,适合一次性写入或增量写入的场景;而"插入/更新"按主键匹配已有记录进行字段更新,适合对已有表进行字段回填的场景。正确使用写入组件能够避免数据重复,保证转换流的可重入性,这在工程实践中是非常重要的细节。
(4)体会了JavaScript组件在文本处理中的灵活性
使用"JavaScript代码"组件进行标题关键词匹配,让我认识到在零代码ETL平台中,脚本组件是对可视化组件能力的重要补充。对于简单的数值计算可以使用"计算器"组件完成,但对于字符串匹配、正则提取等文本处理任务,脚本组件提供了更大的灵活性。通过 indexOf 方法判断关键词是否存在于标题中,并将结果转化为0/1值,代码简洁且逻辑清晰,体现了脚本组件在特征提取场景下的实用价值。
(5)认识到数据标签化在多分支汇总中的重要性
在关键词汇总流程中,每个分支在聚合后都通过"增加常量"组件添加了 feature_name 字段来标识当前分支对应的关键词。这个看似简单的步骤实际上解决了一个关键问题——聚合后的数据丧失了来源信息,如果不贴标签,多条分支合并后将无法区分各行数据的含义。这种"为数据添加语义标签"的做法,在多维度统计和报表生成中具有普遍的参考价值,也体现了数据工程中注重数据可追溯性的设计理念。
更多推荐



所有评论(0)