用途
本技能用于从结构化数据导出的多个 CSV 文件中重建用户活动历史,属于元数据层面的取证分析。其核心原则是:表头即模式,时间戳即骨架,跨文件键关系即连接组织;在分析内容之前,先提取元数据本身能提供的全部信息。
适用场景包括:处理来自平台导出、GDPR 导出或 API 转储的多个 CSV 文件;在更深层内容分析前建立基线指标;识别数据缺口、缺失文件或模式不一致;计算账号存活期、活动频率、内容创建比率;从分散在各文件中的时间戳构建用户活动时间线。
不适用场景:仅单个 CSV 文件且无交叉引用可能;非结构化数据(日志、自由文本);需要内容级分析(情感、主题建模)时,本技能仅处理元数据。
主要能力
核心流程为六步:清点(INVENTORY)→ 模式映射(SCHEMA MAP)→ 交叉引用(CROSS-REFERENCE)→ 时间线(TEMPORAL)→ 指标(METRICS)→ 报告(REPORT)。
- 文件清点:列出每个 CSV 的文件名、大小、行数和校验和,并可与校验清单(如包含 filename、sha256 的 checkfile.csv)核对,校验不匹配标记为潜在损坏或篡改。
- 模式映射:提取每个文件表头,构建列与文件的对应关系,找出出现在两个及以上文件中的共享列作为连接键候选,常见共享列包括 id、permalink、date/timestamp/created_at、subreddit/channel/category、ip 等。
- 时间骨架:从含日期列的文件中提取最早与最晚时间戳,建立各数据类型的活动窗口,并可计算账号存活期。
- 基线指标:从元数据计算出账号存活期、内容创建比率(发帖数/评论数)、活动速率、活跃天数占比、分组集中度、时间覆盖度、表头文件与数据文件对比等。
- PII 扫描:标记含个人身份信息的列,如 IP 地址、邮箱、电话、生日、与真实身份关联的用户名,报告前须做脱敏处理。
- 缺口分析:识别空文件、缺失时间戳、IP 缺口、模式不匹配、孤儿引用等数据质量问题。
使用方式
技能提供 Python 示例代码完成各步骤:使用 csv 与 pathlib 遍历目录生成文件清单,读取表头并统计行数;使用 collections.defaultdict 构建列到文件的映射并求共享键交集;使用 pandas.read_csv 配合 usecols 与 parse_dates 显式解析日期列并求最小最大值;校验和可用 sha256sum,行数可用 wc -l。最终报告输出至 docs/analysis/01-csv-metadata-forensic.md,结构包含文件清单、模式映射、时间骨架、基线指标、PII 清单、数据质量问题及下游分析建议。
适用场景与限制
推荐实践包括:先校验校验和再分析;映射模式时只读表头,不加载全量数据;显式指定日期解析,不依赖自动推断;解析失败的行应记录文件名与行号而非静默丢弃;用 pd.concat 的 join="outer" 合并模式略有差异的文件;元数据中低频出现的值往往最具分析价值。
应避免的做法包括:在模式映射前就跳入内容分析;假设所有 id 列指向同一实体(帖子 ID 与评论 ID 分属不同命名空间);将空 IP 字段视为“无数据”;不指定 dtype 导致 ID 前导零丢失;用自然日计算活动速率而忽略休眠期;忽略 _headers 文件;仅从元数据推断行为动机。
本技能应做的事:解析元数据表头并计算结构化基线、识别连接键与跨文件关系、计算时间边界与活动指标、标记 PII、识别数据缺口与质量问题、产出结构化报告。不应做的事:做出元数据无法支持的行为推断、执行内容分析、未标记直接处理 PII、跳过数据校验、在未明确区分的情况下合并不同用户或账号的数据。
数据不足时的处理:最低可用数据为 2 个及以上 CSV 文件且至少 1 个共享列、至少 1 个含时间戳列的文件、至少 1 个含大于 0 行数据的文件。若无校验文件则注明“完整性未验证”;若无时间戳列则只报告结构指标;若仅单个 CSV 则注明“语料不足以进行取证重建”;空文件应在清单中标注“存在但为空”且不排除出模式映射;样本少于 10 条记录时所有指标标注为低置信度并附样本量;缺失注册日期时以最早观测时间戳作为下界代理;模式不匹配时同时报告两套模式,并以实际数据文件表头作为分析依据。
当不确定时,报告能够确定的内容,并明确说明无法确定的内容;一份标注了自身缺口的报告比一份建立在静默假设上的完整报告更有价值。所有指标应标注样本量 n=,避免将“无数据”等同于“无活动”,注意父子关系,勿忽略 OS 级文件元数据(修改日期、大小)及重复行。