
简介IBM i2 Analysts Notebook 8.91 是一款面向情报分析、犯罪调查、金融反欺诈与网络安全领域从业者的数据挖掘与可视化工具帮助用户从海量复杂数据中识别模式、趋势与隐藏关联。资源包共 42 个文件以 exe 安装程序、htm 安装向导页面、pdf 用户指南与发布说明、msu 系统补丁及 dll 组件为主另含 doc 培训教材与 xml、ini 等配置文件压缩包约 443.77MB结构完整便于按安装、配置、学习三条线索取用。其中 i2forfree 版本无需加密狗简化了部署流程。已有 4658 人学习下载适合希望快速上手关联分析与网络图绘制、构建自定义分析模板与工作流的分析师也可作为团队协作与案例共享的实践参考。1. 情报分析师的“作战台”i2 Analysts Notebook 8.91 到底解决什么问题如果你手头正堆着几十万条通话记录、转账流水、聊天日志和涉案人员名单Excel 已经卡到转不动关系图靠 PPT 手画到崩溃那你大概率已经在找 i2 Analysts Notebook 这类工具了。IBM i2 Analysts Notebook 8.91 是 i2 系列里做关联分析、时间线重建、社交网络图谱的核心桌面端常被叫做“情报分析系统软件”里的重武器。它不负责采集数据也不负责爬取它干的事是把已经到手的结构化表格、CSV、数据库导出文件变成一张能交互、能下钻、能出报告的关系网络图。适合谁适合做反欺诈、内部审计、案件研判、供应链溯源、威胁情报整编的从业者。你不需要会写代码但必须理解“实体—关系—属性”这套建模逻辑否则导入进去的只是一团彩色毛线。2. 把数据喂进 i2从 CSV 到实体关系图的完整链路2.1 先想清楚“实体”和“链接”再动手i2 Analysts Notebook 的核心数据模型只有两个东西Entity实体和Link链接。实体可以是人、电话、账号、车牌、公司链接就是它们之间发生的关系比如“通话”“转账”“任职”“同住”。很多新手翻车就翻在第一步把一张宽表直接拖进去结果每个字段都变成一个独立实体图面炸成烟花。正确做法是先做数据整形把原始表拆成“实体表”和“关系表”两张。常见做法是实体表至少包含EntityID、EntityType、Label三列关系表包含FromID、ToID、LinkType、StartTime、EndTime、Weight。这样导入后 i2 才能自动识别节点和连线而不是把“张三”和“13800000000”当成两个互不相干的点。2.2 用 Python 做导入前的标准化清洗i2 8.91 对 CSV 的编码和日期格式比较敏感我一般会先用 pandas 把数据洗一遍输出 UTF-8 带 BOM 的 CSV避免中文乱码和日期解析失败。下面这段脚本处理的是最常见的通话记录场景一列主叫、一列被叫、一列通话时间、一列时长。import pandas as pd # 读取原始通话记录假设是 GBK 编码的 CSV raw pd.read_csv(cdr_raw.csv, encodinggbk, dtypestr) # 实体表去重后的电话号码 entities pd.DataFrame({ EntityID: pd.unique(raw[[caller, callee]].values.ravel()), }) entities[EntityType] Phone entities[Label] entities[EntityID] entities.to_csv(entities_phone.csv, indexFalse, encodingutf-8-sig) # 关系表每一通电话就是一条 Link links raw.rename(columns{ caller: FromID, callee: ToID, call_time: StartTime, duration: Weight }) links[LinkType] Call links[EndTime] pd.to_datetime(links[StartTime]) pd.to_timedelta(links[Weight].astype(int), units) links links[[FromID, ToID, LinkType, StartTime, EndTime, Weight]] links.to_csv(links_call.csv, indexFalse, encodingutf-8-sig)逻辑说明pd.unique把主叫和被叫合并去重保证每个号码在实体表里只出现一次这是 i2 识别节点的前提。Weight直接映射通话时长导入后可以用线宽表示强度。EndTime由开始时间加秒数算出i2 的时间线视图依赖这个字段做区间展示。参数上唯一要改的是列名映射你的原始表叫什么就改rename里的键。注意dtypestr是为了防止电话号码被 pandas 自动转成科学计数法这个坑我见过太多次。2.3 在 i2 里配置导入映射并生成第一张图打开 Analysts Notebook 8.91新建一个 Chart然后走Data Import CSV。关键在映射界面把EntityID拖到Entity IDEntityType拖到Entity TypeLabel拖到Label关系表那边把FromID映射到From EntityToID映射到To EntityLinkType映射到Link Type。时间字段要手动指定格式常见的是yyyy-MM-dd HH:mm:ss如果你原始数据是2024/5/1 8:30这种先在清洗阶段统一成标准格式别指望 i2 自动猜。导入完成后按CtrlG自动布局一般先用Circular看整体密度再用Hierarchical看层级关系。如果节点超过五千建议先按时间或类型过滤否则布局会跑到你怀疑人生。3. 让图谱说话时间线、社交网络与中心度分析3.1 时间线视图把“什么时候发生”钉死i2 8.91 的时间线不是简单排序它能把实体和链接按时间轴展开特别适合做案件时序重建。操作路径是View Timeline然后把关系表里的StartTime和EndTime拖到时间轴字段上。这里有个细节如果一条 Link 没有 EndTime它会显示成一个点事件有 EndTime 才会显示成条带。我一般会把转账、通话、登录都做成条带这样能一眼看出某个号码在凌晨三点密集通话同时段又有大额转账这种“时间重叠”往往是突破口。时间线支持缩放和过滤你可以框选一个时间段让主图只显示该时段活跃的实体这个联动比手动筛选快得多。3.2 用中心度指标找出“关键节点”图好看没用得算出谁最重要。i2 内置了多种中心度算法在Analyze Centrality里可以选Degree、Betweenness、Closeness。Degree 就是连接数适合找“话务量最大”的号码Betweenness 是介数中心度适合找“桥梁”角色——那种自己通话不多但两个团伙都跟他有联系的人。操作上先选中整个图或一个子集运行算法后 i2 会把得分写进实体属性你可以用Size by Attribute让节点大小随得分变化。参数建议如果图很密先跑 Degree 做粗筛把低于阈值的节点隐藏再跑 Betweenness否则计算量会很大。常见误区是只看 Degree 就下结论结果漏掉了真正起串联作用的中介节点。3.3 条件格式与图标集让异常自己跳出来i2 的Conditional Formatting是很多人忽略的功能。你可以给实体设置规则比如Weight 3600的链接标红加粗EntityType BankAccount的节点用方形图标StartTime在凌晨 0 点到 5 点的链接用虚线。这些规则在Format Conditional Formatting里配置支持多条件叠加。我通常会把“高频通话 深夜时段 大额转账”三条规则同时打开图面上剩下的基本就是需要重点看的对象。注意规则优先级是从上到下匹配别把宽泛条件放在前面否则后面的精细规则永远不生效。4. 避坑与排查i2 8.91 实操中最容易翻车的五件事4.1 导入后中文全是问号现象CSV 导入后实体标签显示为???或乱码。原因i2 8.91 默认按系统区域编码解析中文 Windows 下常按 GBK 读而你的文件是 UTF-8。解决清洗阶段统一输出utf-8-sig或者在导入向导的 Encoding 下拉里手动选 UTF-8。如果已经导入乱了删掉 Chart 重新导别试图在 i2 里改编码改不回来。4.2 日期字段识别失败导致时间线空白现象时间线视图里所有事件堆在同一天或者干脆不显示。原因日期格式和 i2 预期的不一致比如2024.05.01这种点分隔或者05/01/2024这种月日顺序歧义。解决在 pandas 里用pd.to_datetime统一转成yyyy-MM-dd HH:mm:ss字符串再导出。如果原始数据有“上午/下午”这种中文先替换成 24 小时制。i2 的日期解析是黑匣子别跟它较劲提前洗好最省事。4.3 节点太多导致布局卡死现象导入一万个实体后点自动布局进度条卡住内存飙升。原因i2 的布局算法对节点数敏感尤其是 Betweenness 这种全局算法复杂度接近 O(n³)。解决先按时间窗口或实体类型过滤把单次分析的节点控制在两千以内。如果必须看全量先用 Degree 做一次粗布局再对子集跑精细算法。我一般会拆成多个 Chart用Merge Chart按需合并而不是一个图塞到底。4.4 关系表里出现重复链接导致权重翻倍现象两个号码之间明明只通了 10 次话图上显示权重 20。原因实体表去重了但关系表没去重同一对 FromID/ToID 出现多条记录i2 默认会累加或并列显示。解决在清洗阶段用groupby聚合把同一对实体的多条关系合并成一条权重求和或取平均。如果业务上需要保留每次通话那就把 LinkType 设成不同值让 i2 显示为多条平行线而不是重复计数。4.5 导出报告时图面元素丢失现象在 i2 里看一切正常导出 PDF 或图片后图标、颜色、标签全变了。原因条件格式和图标集依赖本地字体和主题导出时如果目标环境没有对应字体就会回退成默认样式。解决导出前在File Export里勾选“Embed fonts”或“Flatten image”把图面栅格化。如果是要给别人编辑的.anb文件把自定义图标打包进模板一起发。这个坑血泪经验给领导汇报前一定先导出一份预览别到了会议室才发现图花了。5. 进阶技巧用属性驱动布局和批量生成子图5.1 按属性分组布局而不是全局一锅粥当实体类型超过三种全局布局基本没法看。我习惯用Group by Attribute先把实体按EntityType或Community分组然后对每个组单独布局再用Layout Arrange Groups把组框排开。这样出来的图既有整体结构又能看清每个团伙内部的连接。具体操作在Analyze Grouping里选一个属性字段i2 会自动生成分组框你可以拖动框的位置框内节点会跟着走。如果某个组太大右键Ungroup再单独处理。这个技巧在分析多团伙案件时特别管用比手动框选快十倍。5.2 用“查找路径”功能验证假设i2 的Find Path能回答“A 和 B 之间最短的关系链是什么”。操作是选中两个实体右键Find Path可以限定最大跳数和链接类型。比如你怀疑两个看似无关的账户之间有资金中转就限定LinkType Transfer最大跳数设 3跑出来的路径如果经过一个中间账户那这个账户就是重点排查对象。参数上跳数别设太大超过 4 跳的结果基本没有业务解释力。跑完后可以把路径高亮保存成一个子图单独导出给办案人员。5.3 批量生成子图并自动命名如果你有一批重点号码想每个号码生成一张以它为中心的二度关系图手动做会疯。常见做法是用 i2 的Scripting功能支持 VBScript写个循环读取一个号码列表对每个号码执行Select Neighbors深度 2然后Create Sub Chart最后用号码命名保存。下面是一个简化的脚本骨架实际路径和对象名需要根据你的 Chart 结构调整。 假设当前 Chart 已打开号码列表在外部文件里 Dim fso, file, ts, phone Set fso CreateObject(Scripting.FileSystemObject) Set file fso.OpenTextFile(C:\targets.txt, 1) Do Until file.AtEndOfStream phone file.ReadLine 按 Label 查找实体 Dim ent Set ent ActiveDocument.CurrentChart.FindEntityByLabel(phone) If Not ent Is Nothing Then ActiveDocument.CurrentChart.ClearSelection ent.Selected True 选中二度邻居 ActiveDocument.CurrentChart.SelectNeighbors 2 生成子图 ActiveDocument.CurrentChart.CreateSubChart 保存子图文件名用号码 ActiveDocument.SaveAs C:\output\ phone .anb End If Loop file.Close逻辑说明FindEntityByLabel按标签找实体SelectNeighbors 2选中两度以内的所有节点和链接CreateSubChart把选中部分抽成新图。参数上2可以改成1或3取决于你想要多宽的关系范围。注意脚本运行前先备份原图因为CreateSubChart会改变当前文档状态。这个脚本我一般用来做初筛跑完后再人工看哪些子图值得深挖。5.4 验证分析结果是否靠谱的一个习惯i2 的图再漂亮也只是数据的投影。我每次做完一张图都会强制走一遍反向验证随机挑三个实体手动回原始数据里查它们的连接关系看是否和图面一致。如果对不上大概率是导入时字段映射错了或者关系表有重复。这个习惯救过我很多次尤其是赶报告的时候图面越“完美”越要怀疑是不是漏了脏数据。从那以后我每次导入完都先跑一遍小样本核对确认无误再上全量。希望帮到你。本文还有配套的精品资源点击获取