
第一次接触 Ucinet 和 NetDraw多数人都是被论文或者课程作业里那张密密麻麻的节点连线图逼进来的。这类社会网络分析的活儿说难不难说简单也真能让人卡三天——卡在装不上、卡在数据读不进去、卡在算出来的数字自己都不敢信。这篇东西就是把这几年我在做社会网络分析SNA项目时踩过的坑从安装部署、数据准备、NetDraw 出图到 Ucinet 核心计算一条线捋清楚。看完你至少能做到三件事在自己机器上把 Ucinet 和 NetDraw 跑起来把一份 Excel 名单变成软件认得的矩阵把中心性、凝聚子群、结构洞这几类常用指标算出来并且敢写进报告。刚入门的朋友可以照着抄有一定基础的朋友可以直接跳到第 4、5 章看布局算法和分析菜单的取舍逻辑。1. Ucinet 和 NetDraw 到底谁管什么1.1 先把名字纠正过来Ucinet 不是一个绘图软件标题里的 Ucient 是非常常见的拼写笔误正式名称是Ucinet读作 you-see-net配套的可视化组件叫NetDraw。这个笔误之所以流传广是因为很多人是先在别人的论文方法部分看到这两个词再回头去搜的搜的时候顺手打错了。名字纠正过来之后分工其实特别清楚Ucinet 是计算引擎加数据管家负责矩阵运算、指标计算、统计检验、结果输出NetDraw 是画图的负责把矩阵变成一张人看得懂的节点—连线图。这两个东西是打包在一起分发的你装好 Ucinet 之后同一个目录下就躺着一个 netdraw.exe。NetDraw 可以独立双击启动也可以在 Ucinet 里通过 Visualize 菜单直接带着当前数据集拉起来。这个带着数据启动的细节很关键后面第 4 章会专门说因为它决定了你是省事还是白折腾。1.2 三个典型场景判断你要不要学它不是所有网络分析都得用 Ucinet。它的舒适区是中小规模网络的经典分析方法具体集中在三类场景里。第一类是学术研究场景。论文方法部分要写采用 Ucinet 6 计算度中心性与中介中心性使用 NetDraw 绘制网络图这套表述在社会科学、情报学、管理学领域几乎是标准配置。原因很实在Ucinet 把大量经典算法做成了菜单而且每个方法都有对应的原始文献引用写方法部分的时候好交代。第二类是组织诊断场景。比如一个部门想看清楚内部信息是怎么流动的谁是实际的隐形枢纽哪些小组之间几乎零交流。这类活儿通常网络规模不大几十到几百人但要求结论稳、可解释Ucinet 的结构洞、E-I 指数、块模型正好对口。第三类是文献计量与共现网络。关键词共现、作者合作、机构合作这类网络节点几百上千边数可能上万。这种规模下 Ucinet 还能算慢一点但能算NetDraw 画图就比较吃力了需要配合过滤手段。1.3 它的长处和短板先讲明白免得中途换工具Ucinet 最大的长处是方法齐全。中心性、凝聚子群、结构等价、块模型、QAP 相关与回归、结构洞、核心—边缘分析这些在别的工具里要写代码或者装好几个包才能凑齐的东西它一个菜单栏就全给了。第二个长处是结果自带解释性输出日志窗口会把均值、标准差、最小值最大值、网络中心势这些描述统计一起打出来不用自己再算一遍。短板也很清楚。第一界面是上世纪末的风格菜单层级深找功能靠记路径第二原生只跑 Windows非 Windows 系统得靠虚拟机第三性能上限不高几千个节点的网络做中介中心性计算会明显等待NetDraw 在边数过万时渲染会卡到几乎没法拖拽第四出图美观度不如现在的网页端可视化库做汇报封面图往往还得导出来再加工。知道短板在哪你就不会在做到一半的时候骂工具而是提前规划好哪些环节换工具。2. 安装部署从拿到包到第一次成功启动2.1 装之前先确认三件事路径、权限、区域设置路径是第一大坑。Ucinet 系列程序对中文路径和带空格的路径兼容性很差典型症状是能打开软件、能点菜单但一读数据就报错或者 NetDraw 打开数据集是空白。所以安装目录请用纯英文、无空格、层级浅的路径比如D:\SNA\ucinet6\。放在C:\Program Files\下面也不是不行但那个目录有权限限制日志文件写入可能被拦建议换到 D 盘或者用户目录下的英文文件夹。权限问题是第二大坑。如果你把程序解压到了系统保护目录运行时写日志、写临时文件都会失败表现是程序点完没反应。解决办法简单粗暴别放系统目录。区域设置是第三大坑而且最隐蔽。老版本的 Windows 程序在非 Unicode 编码上容易出现标签乱码尤其是你的数据里有中文节点名的时候。如果发现打开的图里节点标签是方块或者问号先别怀疑数据去看一下系统的非 Unicode 程序的语言设置把它调成与数据编码匹配的语言重启软件再试。2.2 解压式部署目录怎么规划才不返工Ucinet 6 是绿色包没有安装向导解压完就能用。解压后你会看到主程序、NetDraw 程序、一批示例数据集和帮助文档。既然不用安装那就更要花两分钟把目录规划好不然做完三个项目之后你的文件夹会变成一团浆糊。我自己的习惯是这样分的D:\SNA\ ucinet6\ 程序本体只读不动 data\ 自己的矩阵和属性文件 output\ 计算结果、日志、导出的图 ref\ 示例数据、方法说明、备忘把程序和数据分开好处是将来升级程序版本的时候直接把 ucinet6 文件夹换掉就行你的数据一个字节都不会受影响。另外强烈建议在桌面建两个快捷方式分别指向 ucinet.exe 和 netdraw.exe中间切换会顺手很多。注意不要把程序目录放在网盘同步文件夹或者文档这种会被自动同步的位置。同步客户端在后台锁文件会导致日志写入失败表现是软件莫名卡住。2.3 第一次启动的验证清单五步走完再干活装完先别急着上真数据按下面五步走一遍确认环境没问题。第一步双击 ucinet.exe。正常情况下会弹出主窗口同时弹出一个日志窗口。日志窗口是 Ucinet 的灵魂你点的每一个菜单操作它都会翻译成一行命令打印出来出错信息也在这里。别关它。第二步看日志窗口开头几行。正常会打印版本号、程序路径、工作目录。如果这里显示的工作目录不是你以为的那个后面所有文件找不到的错误都能提前解释清楚。第三步打开自带示例数据集。用 File 菜单里的打开功能去程序目录的示例数据文件夹里挑一个比如经典的网络数据集。能正常打开说明读取链路没问题。第四步跑一个最简单的结果验证计算链路。选 Network 菜单下的 Cohesion再选 Density密度。密度这个指标最简单结果就是一个数日志里还会打印节点数、边数。如果日志里出现报错把报错原文记下来绝大多数是路径或者权限问题。第五步独立启动一次 NetDraw。双击 netdraw.exe用它的 File 菜单打开刚才那个示例数据集。图出来了说明可视化链路也通了。2.4 非 Windows 环境上的可行做法与性能提醒Mac 和 Linux 上的通行做法是装一个 Windows 虚拟机把 Ucinet 目录拷进去跑。这条路能走通但有几个实际问题要注意。一是共享文件夹的路径映射。虚拟机和宿主机的共享目录路径写法跟你在宿主机上看到的不一样如果你把数据放在共享目录里Ucinet 里配置的路径很容易失效。我一般建议数据也拷进虚拟机内别跨盘操作做完再拷出来。二是图形性能。NetDraw 的拖拽和布局迭代在虚拟机里会明显变慢尤其是开了三维加速不兼容的时候。如果你主要是画图尽量在虚拟机设置里把显存给足。三是一句实话别在虚拟机里跑大网络。几千个节点的中介中心性计算在虚拟机里可能要等上几十分钟很容易让人误以为程序卡死了。3. 数据准备把Excel名单变成软件认得的矩阵3.1 Ucinet 认哪几种数据格式很多人卡在第一步不是软件装不上是数据读不进去。所以先把格式说清楚。Ucinet 能吃进去的数据形态主要有下面几类各有各的适用场合数据格式典型后缀适合什么人说明DL 文本格式.txt / .dl愿意手写或脚本生成的人最灵活支持多种矩阵写法Ucinet 数据集.##h .##d程序内部默认两个文件必须成对出现Excel 工作簿.xls / .xlsx从表格起手的人需要严格的行列标签布局纯文本矩阵.csv / .txt从数据库导出的人要保证行列对齐Pajek 网络文件.net需要在工具间迁移的人带节点的属性描述其中.##h 和 .##d 这对文件是新手的重灾区。Ucinet 把自己保存的数据集拆成头文件和数据文件两部分两个文件的主文件名必须一致缺一个或者改错一个名字数据就打不开。所以复制、改名、压缩打包的时候一定要成对操作。3.2 手写 DL 文件两个模板直接抄DL 格式Data Language是 Ucinet 最有价值的一个设计纯文本、可读、可版本管理比二进制数据集靠谱得多。最常用的两种写法是全矩阵和边列表。全矩阵写法适合节点数少、你手里已经有现成矩阵的情况dl n4 formatfullmatrix labels: 张三 李四 王五 赵六 data: 0 1 0 1 1 0 1 0 0 1 0 0 1 0 0 0这几行拆开看第一行的dl是声明n4告诉程序有四个节点formatfullmatrix说明下面是完整矩阵。labels:后面跟一行节点名顺序必须和矩阵的行列顺序严格对应。data:之后就是矩阵本体行代表发出关系的节点列代表接收关系的节点。这里1表示有关系0表示没关系。边列表写法适合节点多、关系稀疏的情况也就是绝大部分真实数据dl n4 formatedgelist1 labels embedded data: 张三 李四 1 李四 王五 1 王五 张三 1 赵六 张三 1labels embedded的意思是节点名直接写在数据行里程序会自动去重、自动编号。好处是你根本不用操心节点总数只要n4写得对就行。如果数据量特别大这个n值建议先统计一下再填填小了程序会截断数据而且不一定报错这是很阴的一个坑。3.3 从 Excel 导入的正确姿势大部分人的原始数据是 Excel 里的名单表比如谁给谁发过邮件谁和谁合作过论文。往 Ucinet 里导 Excel布局必须满足三条硬要求。第一条第一行和第一列留给标签左上角那个单元格空着。也就是说一行往下是行标签一列往右是列标签。第二条数值区只能有数字任何文字、备注、合并单元格都会被当成非法内容导入直接失败。第三条不要有空白行列Excel 里看起来空着的单元格导入时可能被识别成一列全零数据。操作路径是 Data 菜单下的 Import选 Excel。导入完成后第一件事是核对维度打开结果数据集看一眼行列数对不对。行数列数错了后面所有计算都是错的而且错得很安静。3.4 数据清洗的四个高频返工点数据进得去不代表数据是对的。下面四件事每次都得检查一遍我把它叫做进门前四问。一问方向。你的关系是有向还是无向有向数据谁关注谁、谁发给谁不能直接拿去做只适用于无向网络的算法。做之前要明确需要用 Transform 菜单里的 Symmetrize 做对称化别等到结果出来才发现算法用错了。二问对角线。对角线上的数值代表自己和自己的关系。绝大多数分析里对角线应该是 0。如果你是从问卷你对自己的了解程度这类问题来的数据可能会有非零对角线那就得先处理掉否则中心性指标会被污染。三问标签。节点名里的空格、逗号、引号是最容易出问题的地方。DL 格式用空格分隔字段所以节点名里带空格会让程序把名字截断。建议全部替换成下划线或者连写导出的时候再改回来看得懂的名字。四问孤立点。没人连的孤立节点要不要保留留着会让网络密度、平均度这些指标被稀释删掉又可能丢失这个人确实完全被隔离这个重要信息。我的做法是保留但做好标记出图的时候单独用颜色区分分析的时候心里有数就行。4. NetDraw 出图从默认毛线团到能进报告4.1 打开数据与第一眼检查NetDraw 打开数据有两条路。一路是独立启动 netdraw.exe 再用 File 菜单打开数据集另一路是在 Ucinet 里算完某个指标之后用 Visualize 菜单直接把它拉起来这时候 NetDraw 里已经带着当前的数据集和刚算出来的属性列。后者省事得多尤其是你想按中心性大小给节点上色的时候等于省了一次属性文件的制作。图打开之后先别急着调布局先做三件检查。检查节点数对不对检查边的数量对不对检查标签有没有乱码。第一眼看到的图通常是一团毛线球这很正常任何网络图在随机布局下都是这个鬼样子不用怀疑数据。4.2 布局算法怎么选先看这张表布局是网络图的灵魂同一个网络换一种布局讲出来的故事完全不一样。NetDraw 的 Layout 菜单下有一堆算法选哪个不能靠感觉。布局类型视觉特征什么时候用要注意什么圆形布局节点均匀排在圆周上节点少、只想看连线结构掩盖聚类结构不适合展示群体弹簧嵌入核心聚集、外围松散通用首选展示整体结构每次迭代结果都不一样Kamada-Kawai结构对称、间距均匀网络较小时追求美观大网络收敛慢多维尺度按相似性排布距离想看谁和谁像距离含义需要解释清楚随机布局完全打散只作为对照或调试没有分析价值别用来汇报弹簧嵌入是默认首选它的逻辑是把边当成弹簧、把节点当成带电粒子互相排斥又靠边拉着迭代到能量较低的状态。这个机制决定了它有个特性带有随机性同一个数据跑两次位置不完全一样。所以如果你要出正式图跑出满意效果之后一定要保存别关掉软件重开。另外一个小技巧弹簧嵌入可以反复点几次看哪个结果讲故事讲得最好。这不是玄学迭代次数不同确实会落在不同的局部较优状态上。4.3 用属性把图讲成故事颜色、大小、形状、标签只会画黑白图的网络分析是没讲完的。一张能进报告的网络图通常至少承载两到三层信息节点大小表示重要性比如度中心性节点颜色表示分组比如部门连线粗细表示关系强度。这三层信息叠上去图就从结构展示变成结论展示。实现路径在 NetDraw 的 Properties 菜单下节点颜色、形状、大小可以选按属性取值连线颜色、粗细可以选按关系强度取值。前提是你得有一份属性文件格式很简单第一行是属性名第一列是节点名中间是属性值一个节点一行。节点名的拼写必须和数据文件里完全一致多一个空格都不认。提示属性文件做好之后先拿几个已知节点核对一下有没有挂错。颜色挂错是最难发现的错误图上看起来还挺好看结论全反了。标签的处理也有讲究。节点少的时候全显示节点多的时候建议只显示重点节点的标签剩下的用编号。NetDraw 里可以按属性筛选标签显示范围别让几百个名字糊在一起。4.4 连线粗细、箭头和过滤跟可视化噪声作斗争网络图最大的敌人是噪声。边一多图就是一片黑什么结构都看不出来。处理噪声有四招。第一招是阈值过滤。关系强度低于某个值的边直接不画。阈值怎么定看你的数据分布比如取所有边权的中位数或者取一个能让图既不空也不糊的经验值。第二招是按度数过滤节点。只显示度数大于某个值的节点把边缘角色暂时隐藏。这一招在汇报场景里特别有效因为听众通常只关心核心结构。第三招是关系叠加的取舍。NetDraw 支持同时显示多种关系比如邮件往来和线下会议叠在一张图上。理论上很美好实践上超过两种关系就基本看不清了建议一次只展示一到两种。第四招是箭头方向的简化。有向图里每个边都带箭头视觉负担翻倍。如果方向不是你的分析重点可以切成无向显示图会清爽很多。4.5 出图与分辨率的坑NetDraw 的导出在 File 菜单下支持图片格式和矢量格式。这里有个非常现实的坑直接导出的 JPG 分辨率偏低放到 Word 里再放大就糊成马赛克印出来更没法看。我的处理流程是这样的先在 NetDraw 里把图调整到满意然后把窗口拉到最大再导出导出时优先选矢量格式这类格式放大不失真如果必须用位图就选支持大尺寸的格式。另外别忘了同时保存一份数据格式的图NetDraw 自己的格式这样下次还能回来继续调不用从头再来。5. Ucinet 计算几组最常用的分析流程5.1 中心性四个指标不是并列关系中心性是使用频率最高的一类指标但很多人把四个指标当成四个备选项轮流用这是不对的。它们回答的是不同问题。指标回答的问题计算要点常见误用度中心性谁连接的人最多一行求和可归一化忽略方向有向图要分出入度接近中心性谁离所有人最近依赖可达性网络不连通时结果会失真中介中心性谁在关键路径上基于最短路径计数大规模网络计算慢注意等待特征向量中心性谁连接的人本身也重要迭代求解解释起来门槛高汇报要慎用度中心性最直观就是数连接数在有向网络里要分成出度和入度两个方向看一个信息发出者和一个信息收集者的角色差异全在这两个数上。接近中心性要注意网络是否连通不连通的话有些节点之间根本没有路径距离算不出来结果就不能直接横向比较。中介中心性在组织诊断里最有说服力它找出的是信息必须经过的那个人。特征向量中心性在学术上很优雅但汇报给非专业听众时解释成本很高我一般只在论文里用汇报PPT里用度中心性和中介中心性就够了。操作路径都在 Network 菜单下的 Centrality and Power 分组里。算完之后不要只看数据集里的数值一定要回日志窗口看描述统计那里会给出最大值最小值均值和网络中心势这几个汇总数字往往比单个节点的排名更有故事。5.2 凝聚子群从 clique 到 k-plex 的松紧调节凝聚子群要解决的问题是网络里有没有天然形成的小圈子。最严格的定义是派系要求圈子内任意两人都直接相连这个条件太苛刻现实中很难满足。所以需要逐级放宽。n-派系放宽了路径长度允许圈子成员之间通过不超过 n 步的中介相连。k-plex换了个思路允许每个成员至少和圈内大部分人直接相连缺失一部分关系没关系。这两个参数n 和 k越大圈子越松散找出来的群体也越大。实操建议先用严格条件跑一遍看有多少结果再逐步放宽。如果一开始就用很松的条件你会得到一堆重叠严重、几乎覆盖全网的大群体等于什么都没分析出来。另外不同方法找出来的群体会重叠这不矛盾一个人同时属于多个圈子是很正常的现实。5.3 结构洞找到那个不可替代的人结构洞分析是组织网络诊断里最能出结论的一个方法。核心逻辑是如果一个人连接的两个群体之间没有其他通路那么他占据了结构洞位置拥有信息中介的天然优势。这套方法输出的指标里约束系数最关键数值越低说明这个人越不可替代。同时还会输出有效规模、效率和层级等指标。我自己的解读习惯是先把约束系数从低到高排个序取最低的那几个人再回图上去看这几个人的位置是不是真的处在桥梁上。指标和图形互相验证结论才站得住。要提醒一点结构洞分析对数据的完整性很敏感。如果你收集的关系数据只覆盖了部分成员漏掉的边会让某些人的约束系数被高估从而掩盖真实的结构洞位置。5.4 QAP 与 MRQAP关系数据不能做普通回归这是最容易被做错的一块。关系数据矩阵形式的边之间不满足普通统计检验要求的独立性假设一个节点的存在会同时影响很多条边用普通的相关系数和回归直接跑得到的显著性水平是虚高的。正确做法是用QAP 类方法它的原理是随机重排矩阵的行列成千上万次构造一个随机情况的分布再看真实值在这个分布里的位置有多极端。Ucinet 在 Testing Hypotheses 菜单下提供了 QAP 相关和 QAP 回归回归里又有几种不同的置换方式。实操上有两点要注意。第一置换次数要够几百次的结果不稳定一般设置到几千次量级第二MRQAP 的几种方法在样本量不同的时候表现不一样小样本尤其要谨慎最好把两种方法的结果对照一下结论一致才敢下判断。5.5 日志窗口让整个分析过程可复现日志窗口这个东西新手当它是噪音老手当它是宝贝。它会把你每一次菜单点击翻译成一行命令并记录下来包括参数、数据集名、输出名。为什么重要因为论文投稿或者项目复盘的时候经常过几个月需要重新跑一遍。这时候你打开当时的日志文件照着看一遍就知道当时到底用了什么参数。我的习惯是每做完一个完整的分析流程就把日志另存一份命名带上项目名和日期。另外一个不受重视的用法日志里如果有报错信息那是最准确的诊断线索。图形界面上的报错提示往往很笼统日志里的原文才知道到底哪个文件、哪一行出了问题。6. 常见问题速查与排错实录6.1 启动与数据读取类问题双击没反应或者闪退。九成是路径问题或者权限问题。先确认程序目录是纯英文无空格再确认不在系统保护目录和同步盘里。还不行就换一个盘符重新解压一份比排查权限快得多。打开数据集是空的但明明有数据。先检查是不是只复制了 .##h 没复制 .##d这对文件必须成对。再检查目录里是不是有同名的旧文件在捣乱。Excel 导入失败。按顺序排查有没有合并单元格数值区有没有文字第一行第一列是否留空有没有带公式的单元格建议先粘贴成纯数值。节点标签出现问号方块。这是编码问题检查系统的非 Unicode 程序语言设置或者干脆把节点名先改成纯英文跑流程最后出图时再换回中文。6.2 结果怎么看数值合理性自查算出结果别急着写进报告先做合理性自查这几步能拦住大部分低级错误。网络密度是个很好的第一道校验证。如果密度接近 1说明你的关系数据几乎人人相连这在真实社会网络里极少出现八成是把不认识编码成了 1。如果密度接近 0 而且节点数很多检查一下是不是边表里节点名的写法不一致导致程序把同一个人当成了两个人。中介中心性的结果也有个自查办法所有节点的中介中心性之和应该接近一个固定值如果一个网络里所有节点的这个值都是 0说明网络被切成了互不连通的几块需要先做联通分量分析。6.3 画图卡顿与图形太乱图太乱的处理办法在第 4.4 节已经说了过滤这里补充两个性能层面的技巧。一是计算和画图分开大网络先在 Ucinet 里算完指标导出属性和子网络再拿子网络进 NetDraw 画图别在 NetDraw 里直接开全量数据。二是把弹簧嵌入的迭代次数调低先看整体结构确定了再迭代精修。6.4 常见问题速查表现象最可能的原因处理办法程序闪退路径含中文/空格或权限受限换纯英文目录重新解压数据集打不开.##h 与 .##d 不成对把两个文件一起复制主名保持一致导入后行列数不对Excel 有合并单元格或空行空列清理表格重导一次标签乱码编码设置不匹配调整区域设置或先改用英文标签布局每次都不一样弹簧嵌入本身带随机性满意后立刻保存不要关掉重开导出图模糊位图分辨率不足改用矢量格式或最大化窗口后导出结果全部为 0数据未正确读入或全为 0 值回日志窗口看实际读取的数据集名和维度7. 长期使用下来的几条个人经验7.1 工作流固定下来能省掉一半返工我的固定工作流是这样的原始数据永远只读所有清洗、转换、计算都在副本上做输出统一进 output 目录命名规则是项目名_分析内容_日期。这套习惯听起来啰嗦但真正做到第三次项目的时候你就会发现能省下大量这个结果到底是怎么来的的回忆时间。另外强烈建议把 DL 文件当源代码管理。它是纯文本可以放在版本控制里可以写注释可以对比不同版本之间的差异。而二进制数据集一旦被覆盖你永远不知道上一版长什么样。7.2 对该不该换工具我的判断标准用了几年之后我的判断很明确Ucinet 做计算NetDraw 做初稿最终出图视场景决定。如果网络规模在几百节点以内、分析方法是经典方法、需要写清楚方法出处这套组合几乎无可替代。但如果网络到了几千节点、需要交互式探索或者对图形美观度有很高要求那就把 Ucinet 当计算引擎用把结果导出到别处画图各取所长没必要硬扛。还有一个被很多人忽略的小技巧做汇报图的时候先想好要讲哪一句结论再决定怎么布局和上色。是先定结论再配图而不是先画出来再想怎么解释这个顺序反过来会浪费大量时间在无意义的调参上。我踩过这个坑画了三个小时图最后发现要讲的内容根本不需要那么复杂一半的调整都是白做工。