助睿实验7-2-作品特征构建
一、实验背景
在实验7-1完成数据清洗后,content_analysis 表已包含B站和CSDN的有效作品记录,但还缺少两个关键维度的分析特征:
- 互动总数:原始数据中点赞、收藏、分享、投币等互动指标分散在不同字段中,需要一个综合指标来反映作品的总体互动规模。
- 标题特征:在内容同质化(全班作品主题一致)的前提下,标题成为数据差异的主要来源。需要将标题中是否包含特定关键词(如"保姆级""零代码""实战"等)提取为0/1标志字段,便于后续量化分析标题对互动数据的影响。
此外,还需要在关键词级别进行汇总统计,计算含有各关键词的作品的平均互动数,为实验7-3的标题影响分析提供数据支撑。
实验目标:使用助睿ETL完成互动总数计算、标题关键词特征提取(更新content_analysis表),以及关键词级别汇总统计(输出title_feature_analysis表)。
二、实验步骤
步骤1:读取数据
将实验7-1输出的 content_analysis 表作为输入数据源,拖入助睿ETL工作区。助睿ETL支持跨项目引用数据集。

步骤2:提取标题特征
使用"JavaScript代码"组件对 title 字段进行关键词匹配,生成5个0/1标志字段:
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 |
1 或 0 |
标题中包含"保姆级" |
|
has_lowcode |
1 或 0 |
标题中包含"零代码" |
|
has_practice |
1 或 0 |
标题中包含"实战" |
|
has_tutorial |
1 或 0 |
标题中包含"教程"或"指南" |
|
has_pit |
1 或 0 |
标题中包含"踩坑" |

步骤3:计算互动总数
接入"计算器"组件,新增 total_interaction 字段:total_interaction = likes + favorites + shares + coins。该字段将分散的互动指标合并为一个综合指标。

步骤4:回填更新
使用"插入/更新"组件,以 id 为查询关键字,将计算得到的 total_interaction 和5个标题特征字段(has_best/has_lowcode/has_practice/has_tutorial/has_pit)更新到 content_analysis 表。
关键点:使用"插入/更新"而非"表输出"。前者按id匹配更新已有记录,后者每次运行会新增行导致数据重复。这意味着本实验可以反复运行而不会产生重复数据。

步骤5:创建关键词汇总表
在助睿ETL中创建 title_feature_analysis 表,字段如下:
|
字段 |
类型 |
说明 |
|
id |
INT |
自增主键 |
|
platform |
VARCHAR(20) |
平台名称(B站/CSDN) |
|
feature_name |
VARCHAR(50) |
关键词名称 |
|
avg_interaction |
DECIMAL(10,2) |
含该关键词作品的平均互动总数 |
|
overall_avg |
DECIMAL(10,2) |
该平台整体平均互动总数 |
|
sample_count |
INT |
含该关键词的作品数量 |

步骤6:计算整体平均值
不设分组条件,直接计算 AVG(total_interaction) 得到平台整体平均值(overall_avg),然后通过"增加常量"组件标注 feature_name。这一步为后续关键词对比提供基线数据。

步骤7:计算各关键词平均值
以"保姆级"为例:先通过"过滤记录"筛选 has_best = 1 的记录,再通过"分组"组件计算 AVG(total_interaction) 和 COUNT(id),最后通过"增加常量"组件标注 feature_name = '保姆级'。

步骤8:合并与入库
使用"记录集连接"组件按 feature_name 匹配,将整体平均值和关键词平均值合并。最后通过"表输出"组件入库(不勾选"裁剪表",因为其他关键词数据还需追加)。

步骤9:复制处理其他关键词
复制整个分支,仅修改两处:过滤条件(has_lowcode=1 等)和常量值("零代码"等)。重复5次即可覆盖全部5个关键词。

三、实验结果
- content_analysis 表(更新后):新增 total_interaction(互动总数)字段和5个标题特征标志字段(has_best、has_lowcode、has_practice、has_tutorial、has_pit),所有记录均已正确填充。
- title_feature_analysis 表:包含5个关键词分别在B站和CSDN的 avg_interaction、overall_avg 和 sample_count。该表可直接用于实验7-3的标题影响提升倍率分析。
四、核心组件说明
|
组件名称 |
功能 |
配置要点 |
|
表输入 |
读取 content_analysis 表 |
选择实验7-1输出的结果表作为数据源 |
|
JavaScript代码 |
提取标题关键词特征 |
使用 indexOf 判断关键词是否存在,返回0或1 |
|
计算器 |
计算衍生数值字段 |
公式:likes + favorites + shares + coins |
|
插入/更新 |
按主键回填数据 |
查询关键字=id,更新6个特征字段,不新增行 |
|
过滤记录 |
筛选含特定关键词的记录 |
例如 has_best = 1 筛选含"保姆级"的作品 |
|
排序记录 + 分组 |
聚合计算AVG和COUNT |
排序字段=id升序,计算平均互动数和样本数 |
|
增加常量 |
添加标识字段 |
feature_name = '保姆级'等,用于区分不同关键词分支 |
|
记录集连接 |
合并两个数据流 |
按 feature_name 匹配,合并整体平均值和关键词平均值 |
|
表输出 |
写入目标表 |
不勾选"裁剪表",支持追加多个关键词数据 |
五、问题与解决
问题1:为什么用"插入/更新"而非"表输出"?
"表输出"每次运行会新增行,如果重复执行会导致 content_analysis 表中出现大量重复数据。"插入/更新"按 id 匹配,id 已存在则只更新指定字段,id 不存在才插入。由于 content_analysis 表中的 id 已存在,实际只会更新,不会新增行。这样实验可以反复调试运行,不会产生数据冗余。
问题2:为什么需要"增加常量"组件?
聚合后的数据只有数值,没有关键词名称。5个关键词分支的数据合并后,如果没有常量标签,无法区分哪一行对应哪个关键词。"增加常量"相当于给每一行贴上一个标签,是后续合并和区分数据的关键步骤。
问题3:如何高效处理5个关键词?
不需要重新搭建5个Pipeline。处理完第一个关键词(如"保姆级")后,复制整个分支,仅修改两处:过滤条件(has_lowcode = 1 等)和常量值("零代码"等)。这样可以大幅减少重复劳动,同时保证所有分支的处理逻辑一致。
六、实验总结
本实验在清洗后的数据基础上完成了特征工程,主要收获如下:
- 理解了特征工程的核心价值:将原始数据转化为适合分析的数值特征(互动总数)和标志特征(标题关键词0/1标记),为后续分析提供可量化的维度。
- 掌握了"JavaScript代码"组件在文本处理中的应用:通过 indexOf 进行关键词匹配,批量自动标注,替代了人工标注的低效方式。
- 理解了"插入/更新"与"表输出"的区别:前者适用于更新已有数据的场景(可重复执行),后者适用于首次写入或追加新数据。
- 学会了分支复用的技巧:通过修改过滤条件和常量值快速复制处理逻辑,提升ETL Pipeline的构建效率。
更多推荐



所有评论(0)