新闻

关于 igraph 发布和其他事项

python-igraph 0.6

发行说明

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

请看下面主要变更的列表,其中包含指向文档相关部分的链接。所有新功能都列在此处。

Nexus 存储库

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

支持 Python 3.x

igraph 的 Python 接口现在支持 Python 3。当前版本已在 Windows、Linux 和 Mac OS X 上使用 Python 3.2 进行了测试。请通过常用渠道报告您在使用 Python 3.x 中的 igraph 时遇到的任何错误。

社区检测改进

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

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

感谢 Emmanuel Navarro 的代码,我们现在支持 InfoMAP 社区查找方法。更多

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

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

凝聚块查找函数已在 C 中从头开始重写。它们现在快得多,并且具有更好的 API。请参阅文档

个性化 PageRank 分数。请参阅文档

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

杉山布局

Igraph 现在实现了杉山布局算法,用于分层有向无环图。请参阅文档

二分图中的最大匹配

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

命名图顶点

Python 接口现在以特殊方式处理 name 属性。属性的值在后台进行索引,从而可以在分摊常数时间内检索具有给定名称的顶点。此外,大多数图形查询方法都接受顶点名称以及顶点索引。请参阅文档以获取更多信息。

美观打印的图摘要

R 使用的相同图形摘要格式现在也被 Python 采用。使用 print 语句打印图形现在以简洁的格式打印摘要和边列表

>>> print karate
IGRAPH UNW- 34 78 -- Zachary's karate club network
+ attr: Author (g), Citation (g), name (g), Faction (v), id (v), name(v),
  weight (e)
+ edges (vertex names):
    Mr Hi -- Actor 2, Actor 3, Actor 4, Actor 5, ...
  Actor 2 -- Mr Hi, Actor 3, Actor 4, ...
...

使用 summary() 函数(在 igraph 命名空间中)打印图形仅打印简短摘要,而不打印边列表

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

使用 summary(graph, full=True) 打印图形会打印摘要、边列表、顶点和边属性。

更轻松地操作图形

您可以将图形视为虚拟邻接矩阵。有关详细信息,请参阅文档

在 R 和 Python 图中标记顶点组

您可以使用阴影区域在图形图上标记顶点组。默认情况下,使用此技术绘制社区和凝聚块。请参阅 Graph.__plot__ 函数的 mark_groups 参数。

Python 接口中重构的图形绘制器

Python 接口中的图形现在由图形绘制器类绘制,而不是由单一的绘图函数绘制。这允许人们用自定义图形绘制器替换默认图形绘制器;例如,一个将 igraph 图形发送到 UbiGraph 显示Cytoscape 的绘制器。默认图形绘制器还允许使用可插拔的顶点形状边绘制器来部分自定义绘图。

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

在 R 和 Python 中,当操作图形时,许多 igraph 函数现在保留顶点、边和图形属性。还可以使用灵活的 API 组合属性。有关更多信息,请参阅 Python 文档中许多图形方法的 combine_edgescombine_attrs 参数。

Python 接口中的新增功能

常规更新

  • Python 接口现在支持 Python 3.x。
  • 现在可以通过使用顶点 ID 或顶点名称对图形对象进行索引来将图形视为邻接矩阵。
  • 接受顶点 ID 或顶点 ID 列表的方法现在也应接受顶点名称。名称应在 name 顶点属性中给出。
  • Igraph 现在支持从 Nexus 在线数据存储库加载图形,请参阅 Nexus.get()Nexus.info()Nexus.list()Nexus.search()

社区检测

  • 添加了 Blondel 等人的多级模块化优化社区结构检测算法,请参阅 Graph.community_multilevel()
  • 两个社区结构之间的距离:compare_communities()
  • 通过精确的模块化优化进行社区结构检测,Graph.community_optimal_modularity()
  • 感谢 Emmanuel Navarro 的代码,添加了 InfoMAP 社区查找方法。请参阅 Graph.community_infomap()
  • 边介数社区检测现在支持加权图;请参阅 Graph.community_edge_betweenness()

最短路径

  • 离心率 (Graph.eccentricity()) 和半径 (Graph.radius()) 计算。
  • 使用 Graph.get_shortest_paths() 的最短路径计算现在可以返回沿最短路径的顶点或边 ID。
  • Graph.get_all_shortest_paths() 现在支持边权重。
  • 现在可以使用 Graph.neighborhood() 检索顶点的邻域

中心性

  • 个性化 Page-Rank 分数,请参阅 Graph.pagerank()
  • 权威 (Graph.authority_score()) 和中心 (Graph.hub_score()) 分数现在支持边权重。
  • 支持介数和紧密度计算中的边权重。
  • 特征向量中心性计算,Graph.evcent() 现在适用于有向图。
  • 介数计算现在可以使用任意大的整数,这是某些格子状图形避免溢出所必需的。

输入/输出和文件格式

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

绘图和布局

  • 星形布局:Graph.layout_star()
  • 基于多维缩放的布局,Graph.layout_mds()
  • 网格布局:Graph.layout_grid(), Graph.layout_grid_3d()
  • 用于分层有向无环图的杉山布局算法:Graph.layout_sugiyama()
  • 可以使用 Graph.__plot__()mark_groups 关键字参数在图上标记顶点组。默认情况下,使用此方式绘制社区和凝聚块。请注意,plot() 当然也接受相同的关键字参数。
  • 重新设计的图形绘图框架:图形绘制器现在从 AbstractGraphDrawer 派生。该框架允许实现自定义图形绘制器,例如 UbiGraphDrawerCytoscapeDrawer。边由边绘制器类(从 AbstractEdgeDrawer 派生)绘制,现在可以通过 ShapeDrawers 实现自定义顶点形状。
  • 现在将多个边绘制成曲线以使其可见。请参阅 Graph.__plot__()autocurveedge_curved 关键字参数。请注意,plot() 当然也接受这些参数。
  • 更好的标签放置算法支持多行标签和相对于节点中心指定标签的距离和角度。
  • 添加了 rescale() 函数,用于将数值列表重新缩放到不同的范围,适用于绘图。

图形生成器

  • 新的图形生成器:Graph.Static_Fitness(), Graph.Static_Power_Law()
  • Graph.Barabasi() 已重写,现在支持三种算法,默认算法不会生成多重边或环边。图形生成过程现在可以从提供的图形开始。
  • Watts-Strogatz 图形生成器 Graph.Watts_Strogatz() 现在可以创建没有环边的图形。

其他

  • 现在可以更好地处理顶点和边属性。只要有可能,它们就会被保留,并且可以通过 Graph.simplify()Graph.contract_vertices()Graph.to_undirected()combine_edgescombine_attrs 关键字参数组合。
  • 现在以更简洁和信息丰富的方式打印图形。print() 打印简短的信息标头和边列表,而 summary() 仅打印标头。summary() 还理解控制应添加输出的哪些部分的关键字参数;请参阅 GraphSummary 类。
  • 图案搜索现在可以为找到的每个图案调用回调函数,请参阅 Graph.motifs_randesu()
  • 传递性计算现在支持权重,请参阅 Graph.transitivity_local_undirected()
  • 添加了凝聚块计算,请参阅 Graph.cohesive_blocks()
  • 添加了反馈弧集,请参阅 Graph.feedback_arc_set()
  • 现在可以仅请求顶点对的 Jaccard 或 Dice 相似性,请参阅 Graph.similarity_jaccard_pairs() 和类似的函数。
  • 支持 VF2(子)图同构函数中的顶点和边着色 (Graph.isomorphic_vf2(), Graph.count_isomorphisms.vf2(), Graph.get_isomorphisms_vf2(), Graph.subisomorphic_vf2(), Graph.count_subisomorphisms_vf2(), Graph.get_subisomorphisms_vf2())。
  • 同配系数,Graph.assortativity(), Graph.assortativity_nominal()Graph.assortativity_degree()
  • 计算非诱导子图的函数:Graph.subgraph_edges()
  • Graph.has_multiple() 用于判断图形是否具有多重边。
  • 添加了一个函数来计算顶点的多样性得分,Graph.diversity()
  • 图形拉普拉斯算子计算 (Graph.laplacian()) 现在支持边权重。
  • Graph.bipartite_projection() 计算边的多重性。
  • 顶点收缩,Graph.contract_vertices()

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