
做社会网络分析的人几乎都绕不开 Ucinet 这个名字。不少人第一次找它的时候会把标题敲成 Ucient搜出来的东西对不上其实正确拼写是 Ucinet——一个从 1980 年代一路迭代到今天的关系数据分析工具包NetDraw 则是同一个安装包里自带的可视化模块专门负责把算出来的关系结构画成图。这一整套东西解决的核心问题很具体当你手上有一张谁和谁有关系的表朋友关系、合作记录、信息传递路径、部门往来频次你需要把它们变成密度、中心性、派系、结构洞这些能写进报告的数字同时还要有一张拿得出手的网络图。它适合三类人写论文需要做实证分析的研究生、做组织诊断和团队协作分析的顾问以及任何手里攥着一堆关系数据却不知道怎么往下走的人。下面这些内容是我自己反复安装、迁移、翻车又修好的完整记录。1. 先把这套工具的分工和定位说清楚1.1 Ucinet 管算NetDraw 管画很多人一开始以为 Ucinet 和 NetDraw 是两套独立软件装了一个发现另一个用不了就开始怀疑自己下错了包。实际情况是Ucinet 是主程序NetDraw 是它目录下的一个可执行文件两者共享同一套数据格式NetDraw 甚至能直接从 Ucinet 的菜单里被调起来。分工上Ucinet 负责所有算的活——中心性、凝聚子群、结构洞、QAP 相关与回归、二模网络转换NetDraw 负责所有看的活——布局、配色、节点大小映射、导出图片。理解这一点非常重要因为它决定了你的工作流数据先进 Ucinet 算指标算完把指标作为属性挂回网络再用 NetDraw 出图。我见过太多人反过来操作先在 NetDraw 里调了半天布局想算个中介中心性发现没这个功能又回头重新导数据。正确顺序是先算后画因为图的视觉元素节点大小、颜色深浅本质上是在表达那些算出来的数字顺序颠倒等于白干。1.2 它到今天还有人在用的三个理由第一是免费门槛和功能覆盖的平衡。同类工具里有的偏学术、有的偏商业而 Ucinet 把一整套经典 SNA 指标打包在一起从最基础的密度到比较冷门的 E-I 指数、CONCOR 分块都有一个包解决绝大部分需求。第二是数据格式开放它读的是纯文本矩阵你不写代码也能手工构造数据可控性极强。第三是它的输出结果格式老派但完整每一步运算都会生成一份带参数说明的日志文本写方法部分的时候直接抄参数就行不用回忆自己当时勾了什么。1.3 谁适合看这篇按需求对号入座如果你只是想要一张好看的网络图Ucinet 可能有点重NetDraw 单独用也够但如果你要写网络密度为 0.32平均路径长度为 2.1这类句子就必须走 Ucinet。如果你手上有问卷收集来的提名关系比如每人写出三个最常沟通的同事你需要的是二模转一模、对称化、二值化这一套预处理流程。如果你做的是组织内部协作诊断你大概率会用上结构洞和 k-核。下面从安装开始讲每一步我都会说明为什么这么做而不只是告诉你点哪里。2. 安装环节多数人栽在路径和权限上2.1 拿到安装包后的第一件事看清分发形式Ucinet 的分发方式和普通商业软件不太一样。多数版本是一个压缩包解压之后直接就是一堆 exe 和 dll 文件没有传统的下一步下一步安装向导也有一部分版本带了简易安装程序。这两种我都遇到过判别方法很简单打开压缩包看根目录里有没有 Ucinet.exe。如果有说明它是绿色分发解压到你想放的位置就能直接跑如果只有 setup 或者 install 字样的文件才走安装流程。提示官方渠道提供的是试用版本功能和使用期限上会有一定限制具体限制以官方页面说明为准。不要在非官方来源下载所谓的完整版这类文件被替换过运行库的概率不低SNA 数据往往涉及组织内部信息安全性上不值得冒险。2.2 目录规划为什么我坚持装在 C:\Ucinet6这是整套流程里最容易翻车、也最容易被忽视的一步。Ucinet 和 NetDraw 内部对文件路径的处理比较老派路径里出现空格、中文或者其他特殊字符都可能导致读写失败或者程序直接闪退。我踩过的典型坑是把软件装在C:\Program Files\Ucinet 6结果 NetDraw 打开数据文件时报cannot open file换到C:\Ucinet6立刻正常因为 Program Files 里带空格。我的固定做法是软件装在C:\Ucinet6数据单独放在D:\sna\project01这类短路径下全程只用英文字母、数字和下划线。具体可以按这个顺序操作新建目录C:\Ucinet6把解压出来的全部文件放进去注意是文件本身不要多套一层文件夹。在 D 盘建一个工作目录比如D:\sna里面按项目分子目录。所有数据文件、导出结果、图片统统放在工作目录里不要放在软件目录下避免以后换版本的时候把数据一起删掉。给Ucinet.exe建一个桌面快捷方式右键属性里把起始位置设为你的工作目录这样程序默认的打开路径就是数据所在的地方。第 4 步很多人不做觉得无所谓但它能省掉你每次打开文件都要从 C 盘一路点回 D 盘的时间。顺便说如果你用的是较新的 Windows 系统第一次运行可能会弹出权限或者防火墙相关的询问选允许即可。如果装在 C 盘根目录下运行报错可以试着右键以管理员身份运行但更推荐的做法是直接换个不需要提权的目录。2.3 首次启动与 NetDraw 的联动检查Ucinet 启动之后你会看到一个比较朴素的窗口上面是菜单栏File、Data、Transform、Network、Tools、Visualize、Options 之类中间是空的。先做一次联动检查点Visualize菜单看看里面有没有 NetDraw 这一项。如果有点一下NetDraw 应该会独立弹出一个窗口。能弹出来说明你的目录结构和运行环境没问题后面所有的数据准备和出图都可以放心做。如果点了没反应通常是两种情况一是 NetDraw.exe 不在当前 Ucinet 目录下有的压缩包会把它放在子文件夹里把它挪到和 Ucinet.exe 同级二是杀毒软件把 exe 拦下来了看看隔离区有没有。我遇到过一回折腾了半小时以为是兼容性问题最后发现是安全软件静默拦截。2.4 非 Windows 环境的处理思路这套工具是为 Windows 设计的官方没有原生支持其他系统。如果你用的是 macOS 或者 Linux只有两条路装一个 Windows 兼容环境或者用虚拟机跑一个 Windows。两者的差别很明显兼容环境轻量、启动快但对老式 Windows 控件的支持有时不完整偶尔会出现菜单文字显示不全的情况虚拟机占地大、需要额外的系统授权但稳定性最好几乎不会遇到诡异问题。做研究的话我建议直接用虚拟机省心尤其是你要连续跑几天分析的时候稳定性比省那点硬盘空间重要得多。另外要注意文件共享的设置数据放在共享目录里两个系统都能读写避免来回拷贝弄乱版本。3. 数据准备把关系翻译成软件能读的格式3.1 邻接矩阵最直观也最容易出错Ucinet 的核心数据形式是邻接矩阵行和列都是节点格子里填关系的强度或者有无。比如 5 个人的朋友关系就是一张 5×5 的表第 i 行第 j 列填 1 表示 i 认为 j 是朋友填 0 表示不是。听起来简单但实际数据里藏着几个必须处理干净的问题。第一个是对称性。如果数据来自提名式问卷A 提名了 B但 B 没提名 A这个矩阵是不对称的。你要先判断研究问题需不需要对称化——研究相互认可的朋友关系就需要研究谁主动联系谁就不需要。第二个是二值化。原始数据可能是沟通频次1 到 5 分如果要算派系或者 k-核必须先转成 0/1而切分点定在哪里会显著影响结果常见的做法是用均值或者中位数做阈值。第三个是自环也就是对角线上的值算密度和中心性之前通常要清零否则结果会被自己和自己那格污染。3.2 DL 文本格式手写与批量生成的标准写法Ucinet 原生读得最顺的是 DL 格式的纯文本文件。它长这样dl n4 formatfullmatrix labels: A B C D data: 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 0逐行解释一下第一行dl n4 formatfullmatrix声明节点数量和矩阵形式labels:后面跟节点标签一行一个data:后面就是矩阵本体行与行之间用换行分隔同一行的数字用空格或制表符隔开。格式名里fullmatrix是完整矩阵适合节点不多的情况节点一多手写完整矩阵就太痛苦了这时可以换成edgelist只写有关系的那几条边一行一条后跟一个数值列表示强度dl n4 formatedgelist labels: A B C D data: A B 1 B C 1 B D 1 C B 1节点数量多、边比较稀疏的时候边列表格式最多能省掉九成以上的输入量。另外还有一种nodelist格式适合每个节点后面跟一串它连向谁的记录方式从访谈或者开放问卷整理出来的数据经常是这种形态直接对齐格式就能导入。注意DL 文件的编码和换行符都要留意。保存时选 ANSI 或者本地编码用 UTF-8 有时会出现标签乱码换行符用 Windows 的 CRLF 最稳从 Linux 或者 mac 系统拷过来的文件可以先另存一次。3.3 Excel 中转的完整流程与保存细节现实里绝大多数人是在 Excel 里整理数据的因为问卷导出来就是表格。从 Excel 到 Ucinet 有两条路我两条都用过各有适用场景。第一条是手工搭矩阵再另存。在 Excel 里把行标签和列标签都写上中间填数值然后另存为文本文件。要注意的是Excel 另存为文本文件制表符分隔之后打开一看往往是每行都在同一个单元格里挤着这是正常的Ucinet 读的时候能正确解析。但标签行要处理一下Ucinet 期望的是标签块 数据块的结构如果 Excel 里是行列双标签的交叉表导入时容易把标签当数值读进去。我的做法是先把交叉表整理成第一列是行标签第一行是列标签的标准形态再另存为制表符分隔的 txt。第二条是用 Ucinet 自带的表格编辑器粘贴。步骤是在 Ucinet 里找到 Data 菜单下的电子表格入口打开一个矩阵表格然后直接从 Excel 里选中数据区域复制粘贴进去最后保存为 Ucinet 数据集。这条路的好处是不用关心文本编码坏处是粘贴大矩阵的时候容易错位超过几百乘几百的矩阵建议还是走文本导入。保存成 Ucinet 数据集之后你会看到目录里多出两个文件一个. ##h后缀的头文件和. ##d后缀的数据文件中间的井号是实际文件名的一部分。这两个文件必须成对出现缺一个就打不开。很多人从别人那里拷数据只拷了其中一个然后抱怨文件损坏其实只是没拷全。3.4 属性文件让图有颜色、有大小属性文件是 NetDraw 出图的灵魂。它的结构很简单一列是节点 ID必须和网络文件里的标签完全一致大小写、空格都不能差后面几列是属性值比如部门、职级、中心性得分。保存方式和网络数据一样也是 ##h 加 ##d 两个文件。属性里最常用的是连续型的指标比如中介中心性得分用它来映射节点大小还有分类型的属性比如部门用它来映射颜色。一个经验属性文件里的节点顺序不必和网络文件一致程序是按 ID 匹配的但顺序一致会让排查错误容易很多所以我会习惯性地把两个文件都按同一套 ID 排序。另外属性表里出现网络中没有的节点或者网络里有属性表没覆盖的节点都会导致部分节点显示异常导入前用一次排序 去重 对比就能筛出来。4. Ucinet 核心分析实操4.1 中心性四个指标怎么选怎么读中心性是使用频率最高的分析Ucinet 里对应Network菜单下的Centrality and Power子菜单里面有几个常用指标选错了指标比算错数还麻烦。指标衡量的是什么适用场景注意点点度中心性直接连接的数量找最活跃、最显眼的节点受网络规模影响跨网络比较必须先标准化接近中心性到其他所有节点的平均距离找信息扩散最快的人网络不连通时会失效孤岛节点算不出来中介中心性处在多少条最短路径上找桥梁和把关人计算量大节点多时明显变慢特征向量中心性连接对象本身的重要性找圈子里的核心人物对孤立的小圈子不敏感实际操作路径是先打开网络数据集再进Network → Centrality and Power选对应指标弹出的对话框里通常有是否对称化是否标准化这类勾选项。如果网络是有向的而你用的是接近中心性几乎一定要勾对称化因为有向图的距离计算要求强连通否则大量节点得不到结果输出里会是一排空白。算完之后 Ucinet 会把结果写进一个文本窗口内容包含每个节点的得分和一组描述统计。这个窗口可以直接另存为 txt也可以复制到 Excel 里再做排序和作图。我在实操中的习惯是先看描述统计里的最大值、均值和标准差再看排名前几的节点因为单看排名容易忽略其实大家得分都差不多这种情况而后者往往才是更有意义的发现。4.2 凝聚子群派系、n-派系与 k-核找小圈子有三种常见算法入口都在Network → Subgroups下面。派系Cliques要求最严格必须两两全部相连也就是一个完全子图n-派系n-Cliques放松了距离要求允许成员之间隔着最多 n 步k-核k-Core换了个思路要求每个成员至少和 k 个组内成员相连。选哪个取决于你的数据质量。提名式问卷数据往往存在缺失用严格派系算出来的小圈子会碎成一堆两三人小组这时候改用 n-派系更实际。k-核适合分析大网络里的核心层比如你想说明这个组织里有 20 个人构成了信息流转的骨干k-核的输出直接就是分层剥离的结果。使用 k-核时注意 k 值的选择k 太小几乎全网都属于核心k 太大可能只剩下几个人通常从 2 开始逐个试看输出规模什么时候出现明显收缩那个临界点往往最有解释力。这里有个容易忽略的点派系分析之前必须做对称化和二值化。有向的或者带权值的矩阵直接丢进去结果基本没有意义。二值化的阈值怎么定最好在方法部分写清楚因为它直接影响派系的个数和大小。4.3 结构洞与中介角色结构洞的概念用来描述那些连接互不相通群体的位置入口在Network → Ego Networks → Structural Holes。输出一般包括有效规模、效率、限制度和等级度四个指标其中最常被引用的是限制度值越低说明这个节点受到的约束越小越处在洞的位置上。我个人的读法是限制度低 有效规模大 典型的桥梁角色。只有有效规模大但限制度也高说明这个人连接的人多但都在同一个圈子里反而没那么稀缺。做结构洞分析时数据结构要特别小心。如果网络里存在孤立的节点或者只有单条连接的节点这些节点的指标会出现异常值最好先做一次连通性检查把孤立点单独说明不要混进结论里。4.4 二模网络的降维从人-事到人-人问卷和档案里最常出现的是二模数据一张表是人和人另一张是人和事参加过的项目、所属的委员会、共同署名过的文章。要分析人与人之间的关系就得先把二模降成一模入口在Data菜单下的 affiliations 相关功能。降维的逻辑很简单两个人共同参与同一件事就在他们之间连一条边。这里有三个参数必须自己拿主意。第一是共现次数的阈值比如共同参与 1 次以上还是 2 次以上才算有关系阈值越低网络越密、噪音越多。第二是对角线处理也就是自己和自己的那格通常要按这个人参与了多少件事来填如果设成 0后续算某些指标会失真。第三是要不要保留数值也就是把共现次数作为边的权重还是直接二值化。做可视化和做统计分析的答案可能不一样前者保留权重更有层次感后者二值化更清爽。5. NetDraw 出图从能看到能放进报告5.1 打开数据与第一张图NetDraw 可以通过 Ucinet 的Visualize菜单启动也可以直接双击运行。打开数据的操作是File → Open → Ucinet dataset选中那个 ##h 文件##d 会自动被读取。数据一进来NetDraw 会先按默认布局画出一张图通常是一个圆环或者随机分布看起来很乱别慌这只是起点。一个必须记住的顺序问题先打开网络数据再打开属性数据。属性是通过File菜单里的属性相关入口加载的如果你先加载属性再换网络文件属性和节点可能对不上。另外如果网络是二模数据或者有向数据NetDraw 打开时会提示你选择按哪种关系画图选错了会导致后面所有设置都要重来。5.2 布局算法的选择逻辑与调参布局决定了图好不好看也决定了图能不能传达你想说的东西。常用的几类算法各有性格。环形和按属性排列适合展示顺序或者分组比如按部门把节点排成几个弧段一眼能看出跨部门连接的多少。缺点是掩盖了结构信息节点位置不代表任何关系特征。弹簧嵌入类算法最常用的一类原理是让有连接的节点互相吸引、没有连接的互相排斥最终形成的图里聚在一起的就是关系紧密的。缺点是每次运行结果不完全一样出图前要固定一个满意版本不要反复重跑。多维尺度类和主成分类把网络距离转成二维坐标结果相对稳定适合写论文时说明这张图基于多维尺度分析。缺点是节点多的时候会挤成一团。调参方面弹簧嵌入类算法通常有迭代次数和初始布局两个可调项。迭代次数太少图会蜷成一团太多又浪费时间一般默认值够用图太乱可以适当增加然后重新跑。我通常会先跑一次看整体形态如果有一堆节点挤在边缘说明图的密度太高考虑先按关系强度过滤掉弱连接再出图。5.3 节点、连线的属性映射这一步是把算出来的数字变成看得见的东西。操作入口在属性相关菜单下的节点和连线设置里。节点属性可以映射到大小、颜色、形状、标签尺寸连线属性可以映射到粗细、颜色、样式。我的出图规范是这样的节点大小映射中介中心性或点度中心性颜色映射一个分类变量部门、群体形状映射另一个分类变量如果只有两类。标签只在节点数量较少时全部显示超过 50 个节点就只标出排名靠前的几个否则一片糊。连线方面二值网络统一用细灰线带权网络用线宽表示强度有向网络用箭头但要注意箭头过多会让图变成刺猬必要时只画重要方向。提示设置完之后记得把当前配置保存下来NetDraw 的很多视觉设置不会跟着数据文件走。做系列图比如对比两个时期的时候保存配置能保证两张图的视觉标准一致这在报告里非常重要读者会默认颜色和大小代表同样的含义。5.4 出图格式与后期加工NetDraw 支持导出多种图片格式。如果图要放进论文或者正式报告优先选矢量格式放大不糊后期可以再编辑如果只是放在文档或者演示里导出成高分辨率位图也可以记得把尺寸调大一些默认导出尺寸往往偏小投到投影仪上就看出颗粒感了。导出之后我一般还会做两件小事一是把节点标签的字体统一NetDraw 默认字体在中文环境下有时会显示得很奇怪二是检查一下有没有节点跑出画布尤其是标签较长的节点图边缘的节点标签很容易被裁掉。这两步花不了一分钟但能省掉重新导出的麻烦。6. 常见问题与排查技巧实录6.1 打不开、闪退、报错速查表下面这些是我这些年遇到过的典型故障按出现频率排序排查思路都是从最简单的可能性开始。现象最可能的原因处理办法双击 exe 无反应被安全软件拦截检查隔离区添加信任报 cannot open file路径含空格或中文把软件和数据都挪到纯英文短路径只能看到 ##h 没有 ##d文件没拷全重新拷贝成对的两个文件导入后提示节点数不符标签和数据行数不一致打开文本文件数行数检查是否有空行NetDraw 打开数据一片空白选中了没有关系的那个关系类型重新选择要展示的关系算中介中心性卡住网络过大或存在异常密集结构缩小网络或改用近似算法图上标签显示成方块字体不支持换成通用字体或改用英文标签排查的一个通用原则是一次只改一个变量怀疑是路径问题就只改路径怀疑是编码就只改编码同时改三样问题解决了你也不知道是哪一步起的作用下次还会踩。6.2 中文与编码问题这是中文用户最头疼的地方。Ucinet 和 NetDraw 的底层代码年代久远对多字节字符的支持并不完整节点标签里的中文有时能正常显示有时变成乱码还跟具体版本和系统区域设置有关。我的建议是从源头避开节点标签统一用英文、拼音或者编号比如 N001 到 N200另建一张对照表存在 Excel 里出图之后再按对照表替换标签。这个做法看着麻烦实际省事得多。因为一旦进入中文字符的不确定性领域你很难判断问题出在数据文件编码、程序读文件的编码还是系统区域设置排查成本极高。用编号做标签程序层面永远稳定最后需要中文的时候在图片编辑软件里替换或者干脆在图注里放对照表学术上这也是常见做法。属性文件里的中文同理尤其是有中文的分类型属性部门名称、地区名称如果显示异常也是先改成编号再想办法。6.3 结果解读中最容易踩的三个坑第一个坑是把中心性排名当成重要性排名。中心性只是网络结构位置的一种度量得分高不等于这个人重要可能只是因为他处在信息必经之路上也可能因为数据收集的偏差比如只有他一个人做了完整填答。报告里写结论的时候要说在整个网络的连接结构中处于中心位置而不是这个人最有影响力。第二个坑是忽略网络边界对指标的影响。你截取的是公司的一个部门但实际的协作关系跨部门存在那么你算出来的接近中心性必然偏高因为很多路径被切断了。这属于结构性偏差只能在方法部分说清楚局限不能靠算法修正。第三个坑是跨网络直接比较得分。两个规模不同、密度不同的网络中心性得分绝对值没有可比性必须先在各自网络内部做标准化再比较相对位置。这一点在对比两个团队、两个时期的分析里特别容易出错我自己就犯过一次差点把结论写反。7. 我这些年攒下的一些效率技巧7.1 批量处理与脚本化思路数据分析做到后面往往不是做一次而是换阈值、换时间段、换子群体做很多次。手工重复点击很容易出错我的做法是把每次分析的参数记在一个单独的表格里包括网络文件名、阈值、是否对称化、算法选项、输出文件名一个项目一行。这样做的好处有两个一是能立刻复现任何一次历史分析二是写方法部分的时候不用回忆直接照抄表格。更省事的办法是利用 Ucinet 的命令行能力把常见操作写成批处理脚本。思路是把一串操作按顺序列成命令文本让程序一口气跑完输出多个结果文件。学习成本不低但如果你的分析涉及几十个网络投入产出比很高。起步阶段可以先用手动跑一遍 记录参数的方式等流程固定下来再考虑脚本化。7.2 结果归档的目录约定最后分享一个我认为最值得坚持的习惯从第一次分析开始就建立固定的目录结构。我的约定是每个项目一个文件夹里面固定四个子目录data放原始数据和清洗后的数据集output放所有运算结果文本graph放导出的图片和配置文件notes放参数记录和想到的问题。文件命名统一用日期_内容_版本的格式。这个习惯的好处会在三周之后显现出来。当你需要把两个月前的某张图重新导一遍或者回答当时那个阈值设的是多少的时候你能在三十秒内找到答案而不是从一堆叫新建文件夹2的目录里翻。数据一致性在 SNA 项目里比在任何地方都重要因为你做出的每一个结论都建立在某一次具体的参数选择上能追溯到那次选择你的分析才站得住。