☰
i2 Analyst‘s Notebook 8.91 关系图分析实战:数据导入、布局与避坑指南
2026/10/17 5:00:46 网站建设 项目流程

简介:IBM i2 Analyst's Notebook 8.91 是一款面向情报分析、犯罪调查、金融反欺诈与网络安全领域从业者的数据挖掘与可视化工具,适合具备一定分析基础、需要处理海量关联数据的分析师与调查人员。它通过图形化网络图呈现实体关系,内置关联分析算法与多条件智能搜索,支持 CSV、Excel、XML 等格式导入整合,并提供协作共享、自定义模板、工作流管理、版本回溯与隐私保护等能力,帮助用户从复杂数据中识别模式、趋势与异常。资源包共 42 个文件,以 exe 安装程序、htm 安装向导页面、pdf 用户指南与发布说明、msu 系统补丁及 dll、xml 配置为主,压缩包约 443.77MB,内含无需加密狗的 i2forfree 版本,并附带培训教材与快速入门文档,便于快速部署与上手。目前已有 4662 人学习下载,适合希望系统掌握情报关联分析流程、搭建可视化研判环境的读者参考使用。

1. 从一张关系图说起:i2 Analyst's Notebook 8.91 到底解决什么问题

很多做数据分析的同行第一次接触 i2 Analyst's Notebook 8.91,都是被一张密密麻麻的关系图逼出来的。线索散在通话记录、转账流水、出行台账、聊天摘要里,用表格翻三天也看不出谁和谁是一伙的。这个工具的核心价值,就是把实体和关系变成可交互的图,让你用眼睛顺着连线找结构,而不是用 SQL 一行行猜。它适合谁?做案件梳理、反欺诈分析、供应链溯源、内部审计的从业者,尤其是那些手里数据量不算大、但关系复杂度高、需要向非技术决策者讲清楚的人。8.91 这个版本号意味着它属于较成熟的桌面分析套件,重点不在采集,而在导入、建模、布局和导出这条链路上。下面我按实际落地顺序,把选型理由、导入配置、布局参数和踩坑点拆开讲。

2. 导入前的数据准备:把 CSV 和 Excel 变成可分析的实体关系

2.1 为什么先做数据清洗而不是直接拖进 i2

i2 Analyst's Notebook 8.91 的导入向导很宽容,CSV、Excel、文本都能读,但宽容不等于省事。我见过太多人把原始流水直接拖进去,结果生成几千个孤立节点,图上一团乱麻,最后怪工具不好用。真正的问题在数据层:同一个手机号有带区号和不带区号两种写法,同一个人的名字有全角和半角差异,时间戳格式混着2024/1/5和2024-01-05。这些在表格里只是显示差异,到了图里就是两个完全不同的实体,关系自然连不起来。

常见做法是先在外部把数据整理成两张表:一张实体表,一张关系表。实体表至少包含唯一标识、类型、显示名称;关系表包含起点标识、终点标识、关系类型、时间、权重。这一步用 Python 的 pandas 做最顺手,因为后面导入时字段映射会清晰很多。不要指望 i2 在导入阶段帮你做模糊匹配,它的强项是图分析,不是数据清洗。

2.2 用 pandas 生成标准实体表和关系表

下面这段代码把一份模拟的通话记录整理成 i2 能直接识别的两个 CSV。注意字段命名尽量用英文,避免中文列名在某些导入模板里出现编码问题。

import pandas as pd # 模拟原始通话记录:主叫、被叫、通话时间、时长(秒) raw = pd.read_csv("raw_calls.csv", encoding="utf-8") # 统一手机号格式:去掉空格、横线,补全国码前缀 def normalize_phone(x): if pd.isna(x): return None s = str(x).replace(" ", "").replace("-", "") if s.startswith("0"): s = "+86" + s[1:] # 模拟场景:去掉前导0再加国码 return s raw["caller"] = raw["caller"].apply(normalize_phone) raw["callee"] = raw["callee"].apply(normalize_phone) # 实体表:所有出现过的号码,去重后给一个类型标签 entities = pd.concat([raw["caller"], raw["callee"]]).dropna().unique() entity_df = pd.DataFrame({ "EntityID": entities, "EntityType": "Phone", "Label": entities }) entity_df.to_csv("entities.csv", index=False, encoding="utf-8-sig") # 关系表:每一通电话是一条边,带上时间和时长作为属性 relation_df = raw.rename(columns={ "caller": "SourceID", "callee": "TargetID", "duration": "Weight" })[["SourceID", "TargetID", "call_time", "Weight"]] relation_df["LinkType"] = "Call" relation_df.to_csv("relations.csv", index=False, encoding="utf-8-sig") print("实体数:", len(entity_df), "关系数:", len(relation_df))

逻辑说明:normalize_phone负责把号码统一成同一种写法,这是避免孤立节点的关键。实体表用EntityID作为唯一键,EntityType给后续按类型着色留出空间。关系表里SourceID和TargetID必须和实体表的EntityID完全一致,否则导入后会出现悬空边。Weight字段可以映射成连线粗细,call_time可以映射成时间轴属性。

参数说明:encoding="utf-8-sig"是为了让 Excel 直接打开不乱码,i2 导入时选 UTF-8 也能正常读。如果你的数据里有中文标签,建议保留utf-8-sig,省得在导入向导里反复调编码。Weight如果全是 1,可以省略,但保留它能让后续按通话时长过滤更灵活。

2.3 导入向导里三个必须手动改的映射项

打开 i2 Analyst's Notebook 8.91,选择导入电子表格,向导会一步步问字段含义。这里有三处默认值容易翻车。第一,实体类型默认可能是Unknown,要手动改成Phone或Person,否则后面按类型筛选时找不到。第二,关系方向默认是单向,如果你的数据是双向通话,要勾选双向或导入两次反向边,不然图上的箭头会误导判断。第三,日期字段如果被识别成字符串,时间轴功能就用不了,要在映射时指定日期格式,常见做法是yyyy-MM-dd HH:mm:ss。

导入完成后先别急着布局,用Ctrl+A全选,看右下角统计的节点数和边数是否和 CSV 行数对得上。对不上就回到映射步骤查,多半是某个字段被当成了空值。

3. 布局与视觉编码:让关系图从毛线团变成可读结构

3.1 什么时候用环形布局,什么时候用层次布局

布局不是越自动越好。i2 内置的布局算法有十几种,最常用的是环形、层次、分组和力导向。环形布局适合展示一个核心节点和周围一圈联系人的场景,比如一个号码和多个号码的通话,视觉上中心突出。层次布局适合有明确上下级或资金流向的场景,比如转账链路,它会按方向把节点排成一层层。力导向布局适合没有明确中心、关系网密集的场景,但它计算量大,节点超过两千个就会明显卡顿。

我的习惯是:先用力导向看整体聚类,发现明显团伙后再切到环形或分组布局做局部展示。不要一上来就追求完美布局,先让图能看,再调参数。

3.2 按权重和类型做视觉编码的具体参数

视觉编码决定了图能不能一眼看懂。在 i2 里,选中节点或边,右键打开属性,可以按字段设置颜色、大小、图标。下面这张表是我常用的映射方案,针对通话数据。

字段映射对象取值范围建议
EntityType节点图标Phone / Person / Account不同类型用不同形状,不要只靠颜色
Weight连线粗细1 到 100超过 100 的做截断,否则粗线盖住节点
call_time时间轴日期范围开启时间轴滑块,按天过滤
LinkType连线颜色Call / Transfer颜色不超过五种,多了反而乱

设置节点大小时,如果直接用Weight求和,会出现超级节点把其他节点挤到角落的情况。常见做法是对权重取对数,或者设置一个上限。i2 的属性映射里没有内置对数函数,我一般先在 pandas 里算好一列SizeScore,取log1p(Weight)再导入。

3.3 用条件格式高亮关键节点

图大了之后,靠肉眼找关键节点不现实。i2 支持按属性做条件格式,比如把通话次数超过 50 的节点标红,把只出现一次的节点调成灰色。操作路径是:选择节点,打开Format菜单,选Conditional Formatting,新建规则,字段选Degree或你导入的权重列,条件设大于阈值,格式设成红色边框加粗。

这里有个细节:Degree是 i2 根据边自动算的度数,不需要你提前在 CSV 里准备。但如果你导入的是有向边,Degree默认算的是入度加出度,想单独看入度要在规则里选InDegree。这个区别在分析资金归集时很关键,出度大的是分散转账,入度大的是归集账户。

4. 避坑与排查:导入和布局阶段最常见的五个翻车点

4.1 导入后节点全是孤立点,边一条都没有

现象:CSV 明明有几千行关系,导入后图上只有一堆散点,统计面板显示边数为零。原因:关系表里的SourceID和TargetID与实体表的EntityID存在不可见字符差异,比如尾部空格、全角冒号、BOM 头。解决:在 pandas 里对两边的 ID 列统一执行str.strip(),并检查是否有\ufeff残留。导入前用set(relations.SourceID) - set(entities.EntityID)看差集,差集为空再导入。

4.2 中文标签显示成方块或乱码

现象:节点上本该显示中文姓名,结果全是问号或方块。原因:CSV 编码和 i2 读取编码不一致,常见是文件存成了 GBK,而导入时选了 UTF-8。解决:统一用utf-8-sig保存,导入向导里编码选 UTF-8。如果已经导入且不想重来,可以在 i2 里改字体,换成支持中文的字体,但编码问题导致的乱码改字体也救不回来,只能重新导入。

4.3 力导向布局跑到一半卡死

现象:点击力导向布局后进度条不动,程序无响应。原因:节点数超过软件舒适区,或者存在大量双向边导致迭代不收敛。解决:先按度数过滤,只保留度数大于 2 的节点做布局,把一度节点隐藏。另一个办法是先用环形布局快速出图,再对局部子图用力导向。i2 8.91 对单次布局的节点数没有硬性提示,但经验值是超过三千就分块处理。

4.4 时间轴滑块拖不动或日期全挤在一起

现象:时间轴范围从 1970 年到 2099 年,所有边挤在一个点上。原因:日期字段被识别成文本,i2 按字符串排序,或者有空日期被当成了默认值。解决:回到导入映射,把日期列显式指定为日期类型,格式选yyyy-MM-dd HH:mm:ss。如果数据里有空日期,在 pandas 里先填充一个合理默认值或直接删除该行,不要让空值进入时间轴。

4.5 导出图片后分辨率太低,打印看不清

现象:屏幕上看着清晰的图,导出 PNG 后放大就模糊,节点标签糊成一团。原因:导出时用了屏幕分辨率,没有设置输出尺寸。解决:导出对话框里选Custom Size,把宽度设成 3000 像素以上,DPI 设 300。如果图特别大,分区域导出再拼接,比一张巨图更实用。另外,导出前把不重要的节点标签关掉,只留关键节点,否则再高的分辨率也救不了信息过载。

5. 进阶技巧:用子图、时间窗和导出模板做可复现的分析

5.1 把大图拆成可复现的子图

分析做到后期,图会越来越大,直接展示给决策者效果很差。我的做法是按时间窗和关系类型拆子图。比如先按周切分,看每周新增的联系;再按关系类型切分,只看转账不看通话。i2 里可以用Select菜单下的Select by Attribute做条件选择,选中后右键Create Subgraph,生成一个新的图表窗口。子图继承原图的布局和格式,但只包含选中的节点和边。

这个操作的好处是可复现:你把筛选条件记下来,下次数据更新后重新跑一遍,得到的子图结构一致,方便对比。建议把筛选条件写在一个文本文件里,比如「LinkType = Transfer AND Weight > 10000 AND call_time between 2024-01-01 and 2024-03-31」,下次直接照着选。

5.2 用时间窗动画看关系演变

i2 的时间轴不只是过滤器,还能做动画。开启时间轴后,点击播放按钮,图会按时间顺序逐条显示边。这个功能在展示资金归集过程时特别有用:你能看到钱从多个账户逐步汇入一个核心账户的动态过程。参数上,播放速度可以调,建议先慢后快,让观众看清关键节点。如果边太多,动画会变成闪烁,这时候要先做子图筛选,把边数降到几百条以内再播放。

5.3 导出模板让重复分析省一半时间

如果你每周都要做类似的分析,每次都手动调颜色、大小、布局会很累。i2 支持把当前图的格式设置保存成模板,下次导入新数据后直接套用。操作路径是:File->Save as Template,选一个名字保存。模板会记录节点图标、颜色映射、条件格式规则和布局参数。新数据导入后,打开模板,把字段映射重新指一遍,格式自动套上。

这里有个坑:模板里的字段名必须和新数据的字段名一致,否则映射会丢。所以我在 2.2 节强调字段命名要固定,不要这次叫SourceID,下次叫From。固定命名是模板能复用的前提。

5.4 一个我常犯的错误

早期我总想把所有数据塞进一张图,觉得信息越全越好。结果图大到没法看,布局跑不动,导出也糊。后来才明白,i2 的价值在于聚焦,不是堆量。现在我的习惯是:先做一张全局概览图,只保留度数为 1 的节点做背景;然后按分析目标拆三到五张子图,每张图只回答一个问题。这样每张图都能讲清楚一件事,导出和汇报也轻松。希望这个习惯能帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询