新闻

关于 igraph 发布和其他事项

R/igraph 0.6

发行说明

igraph 0.6 是 igraph 的一个主要新版本。它包含许多新特性和重大更改,大量的错误修复和改进。与往常一样,我们感谢那些发送评论、错误报告、问题的人,特别是那些贡献代码的人。

请参阅下面的主要更改列表,其中包含指向文档相关部分的链接。 R 中的所有新特性都列在此处。

请参阅最后以获取(更)完整的更改列表。

Nexus 存储库

igraph 支持来自 R 和 Python 的 Nexus 网络存储库。 Nexus 是一个在线网络数据集数据库。您可以搜索 Nexus 并直接从 R 和 Python 下载网络。 详细信息请参阅手册

R 中从 1 开始编号

R 接口中最大的变化是,从该版本开始,顶点和边的编号从 1 开始。此更改可能会让很多人感到痛苦,因为它会使现有的代码与 igraph 0.6 不兼容。为了使切换更容易,现在 CRAN 上有一个 igraph0 包; igraph0 使用基于 0 的顶点和边 ID,可用于运行旧代码。但请注意,igraph0 将来不会再被开发。 对于当前和未来的工作,请使用 igraph 包。

(另请注意,在 Python 和 C 中,顶点和边的编号仍然从零开始,因为这些语言传统上使用基于零的索引。)

社区检测改进

通过精确的模块化优化进行社区结构检测。 由于模块化优化是 NP 完全问题,因此这仅适用于小图。 参见手册

添加了 Blondel 等人的多级模块化优化算法。 参见文档

基于 Aaron Clauset 代码的分层随机图和社区发现。 参见手册

感谢 Emmanuel Navarro 的代码,我们现在支持 InfoMAP 社区发现方法。 参见手册

Newman 和 Girvan 的边介数社区检测方法现在也适用于加权图。 参见文档

我们添加了一些函数来比较各种社区结构。 参见文档

Igraph 现在实现了 Spectral Coarse Graining 方法,由 David Morton 提供,我们的实现基于他的代码。 参见文档

内聚块查找函数已在 C 中从头重写。它们现在速度更快,并且具有更好的 API。 参见文档

所有社区检测函数现在都返回一个 communities 对象。 我们为这些对象定义了各种操作,更多信息请参阅 R 手册

度数、紧密度、介数和特征向量中心性的中心化得分。 参见文档

个性化 PageRank 得分。 参见文档

权威和中心性得分、介数和紧密度计算现在都支持边权重。 参见文档

杉山布局

Igraph 现在实现了用于分层有向无环图的 Sugiyama 布局算法。 参见文档

二分图中的最大匹配

Igraph 现在实现了 push-relabel 算法和 Kuhn-Munkres 算法(也称为匈牙利方法),以查找非加权和加权二分图中的最大匹配。 参见文档

默认隐藏图形结构

如果您键入 igraph 对象的名称,则图形的边不再转储到屏幕上,只会打印图形的简短摘要

> karate
IGRAPH UNW- 34 78 -- Zachary's karate club network
+ attr: name (g/c), Citation (g/c), Author (g/c), Faction (v/n), name (v/c), weight (e/n)

要查看图形结构,可以使用 str() 函数。 更多信息请参阅 R 文档

更轻松地操作图形

现在有更新更轻松的方法可以向图形添加新的顶点/边,或删除现有的顶点/边。 有关详细信息,请参阅 R 文档。 在 Python 中,您可以将图形视为虚拟邻接矩阵。 有关详细信息,请参阅 Python 文档

igraphdata

新的 R 包 igraphdata 包含一些示例图形数据集。

在 R 和 Python 图形中标记顶点组

您可以使用阴影区域在图形图中标记顶点组。 默认情况下,社区和内聚块使用此技术绘制。 参见 plot.igraph() 函数的 mark.groups 参数。

[R] R 包中的 igraph 演示

我们在 igraph R 包中包含了一些演示,要获取演示列表,请在 R 提示符下键入此内容

> demo(package="igraph")
Demos in package igraph:
  centrality              Classic and other vertex centrality indices
  cohesive                Cohesive blocking, the Moody & White method
  community               Community structure detection
  crashR                  A crash-course into R
  smallworld              Small-world networks

更好地处理 R 和 Python 中的属性

现在,当操作图形时,许多 igraph 函数会保留顶点、边和图形属性。 也可以使用灵活的 API 组合属性。 参见手册

R:主要新特性

  • 顶点和边的编号从 1 而不是 0 开始。 请注意,这使得大多数旧的 R igraph 代码与 igraph 0.6 不兼容。 如果要使用旧代码,请使用 igraph0 包。
  • [[[ 运算符现在可以在 igraph 图形上使用,对于 [,图形的行为类似于邻接矩阵,对于 [[,它被视为邻接表。 使用一些新的运算符,操作图形结构(即添加/删除边和顶点)也简单得多。 更多信息请参阅 ?graph.structure
  • 在采用顶点或边向量或列表的所有函数中,都可以给出顶点/边名称而不是数字 ID。
  • 新包 igraphdata 包含许多可以直接在 igraph 中使用的数据集。
  • Igraph 现在支持从 Nexus 在线数据存储库加载图形,请参阅 nexus.get()nexus.info()nexus.list()nexus.search()
  • 现在所有社区结构查找算法都返回一个 communities 对象,该对象具有许多有用的操作,详细信息请参阅 ?communities
  • 顶点和边属性现在处理得更好。 它们尽可能被保留,并且可以通过灵活的 API 进行组合。 参见 ?attribute.combination
  • R 现在以更结构化和信息丰富的方式将 igraph 图形打印到屏幕。 summary() 的输出也进行了相应更新。

R:其他新特性

  • 可以通过阴影标记绘图上的顶点组。 默认情况下,社区和内聚块使用此方法绘制。
  • 现在提供了一些 igraph 演示,可以通过 demo(package="igraph") 查看列表。
  • 在绘制图形时,igraph 现在尝试选择最佳布局算法。
  • 添加了一个简单的控制台,使用 Tcl/Tk。 它包含一个用于状态消息的文本区域和一个状态栏。 参见 igraph.console()
  • 重新实现了 igraph 选项支持,参见 igraph.options()getIgraphOpt()
  • Igraph 函数现在可以打印状态消息。

R:新的或更新的函数

社区检测

  • 添加了 Blondel 等人的多级模块化优化社区结构检测算法,参见 multilevel.community()
  • 两个社区结构之间的距离:compare.communities()
  • 通过精确的模块化优化实现社区结构,optimal.community()
  • 分层随机图和社区发现,移植 Aaron Clauset 的代码。 参见 hrg.game()hrg.fit() 等。
  • 添加了 InfoMAP 社区发现方法,感谢 Emmanuel Navarro 的代码。 参见 infomap.community()

最短路径

  • 离心率 (eccentricity()) 和半径 (radius()) 计算。
  • 使用 get.shortest.paths() 进行的最短路径计算现在可以返回沿最短路径的边。
  • get.all.shortest.paths() 现在支持边权重。

中心性

  • 度数、紧密度、介数和特征向量中心性的中心化得分。 参见 centralization.scores()
  • 个性化 Page-Rank 得分,参见 page.rank()
  • 子图中心性,subgraph.centrality()
  • 权威 (authority.score()) 和中心性 (hub.score()) 得分现在支持边权重。
  • 支持介数和紧密度计算中的边权重。
  • bonpow()、Bonacich 的幂中心性和 alpha.centrality()、Alpha 中心性计算现在默认使用稀疏矩阵。
  • 特征向量中心性计算,evcent() 现在适用于有向图。
  • 介数计算现在可以使用任意大的整数,这是某些格子状图形避免溢出所必需的。

输入/输出和文件格式

  • graph.read() 中支持 DL 文件格式。 参见 http://www.analytictech.com/networks/dataentry.htm。
  • 支持在 write.graph() 中写入 LEDA 文件格式。

绘图和布局

  • 星形布局:layout.star()
  • 基于多维缩放的布局,layout.mds()
  • 新布局 layout.grid()layout.grid.3d()
  • 用于分层有向无环图的 Sugiyama 布局算法,layout.sugiyama()

图形生成器

  • 新的图形生成器:static.fitness.game()static.power.law.game()
  • barabasi.game() 已重写,现在支持三种算法,默认算法不会生成多个边或循环边。 图形生成过程现在可以从提供的图形开始。
  • Watts-Strogatz 图形生成器,igraph_watts_strogatz() 现在可以创建没有循环边的图形。

其他

  • 添加了 Spectral Coarse Graining 算法,参见 scg()
  • cohesive.blocks() 函数已在 C 中重写,现在速度更快。 它也具有更好的 API。 参见 demo("cohesive")
  • 添加了具有许多回调的通用广度优先和深度优先搜索实现,graph.bfs()graph_dfs()
  • 在 VF2(子)图同构函数中支持顶点和边着色(graph.isomorphic.vf2()graph.count.isomorphisms.vf2()graph.get.isomorphisms.vf2()graph.subisomorphic.vf2()graph.count.subisomorphisms.vf2()graph.get.subisomorphisms.vf2())。
  • Assortativity 系数,assortativity()assortativity.nominal()assortativity.degree()
  • 按顶点名称工作的顶点运算符:graph.intersection.by.name()graph.union.by.name()graph.difference.by.name()。 感谢 Magnus Torfason 贡献了他的代码!
  • 计算非诱导子图的函数:subgraph.edges()
  • 更全面的最大流量和最小切割计算,参见函数 graph.maxflow()graph.mincut()stCuts()stMincuts()
  • 检查有向图是否为 DAG,is.dag()
  • has.multiple() 用于判断图形是否具有多个边。
  • 添加了一个函数来计算顶点的多样性得分,graph.diversity()
  • 图形拉普拉斯算子计算 (graph.laplacian()) 现在支持边权重。
  • 双连通分量计算,biconnected.components() 现在返回组件本身。
  • bipartite.projection() 计算边的多重性。
  • 最大基数搜索:maximum.cardinality.search() 和 chordality 测试:is.chordal()
  • 凸包计算,convex.hull()
  • 收缩顶点,contract.vertices()

我们还修复了许多错误,抱歉,此处无法全部列出。 您可以查看我们的 bug 跟踪器 https://bugs.launchpad.net/igraph 以检查 bug 是否已修复。 感谢所有报告错误的人。 特别感谢 Minh Van Nguyen 提供了大量错误报告、文档修复和贡献的代码!