常见问题
我尝试安装 igraph 时遇到了错误!我该怎么办?
首先,请查看我们的安装说明,包括故障排除部分。如果这未能解决您的问题,请通过 igraph 论坛联系我们。我们将尽力帮助您!
我刚安装了 igraph。现在我该做什么?
请参阅快速入门!然后您可以查看我们的示例图库中的更多示例,阅读关于图的生成、分析和可视化的详细说明,并查阅完整的API 文档。
我以为 igraph 是一个 R 包,这是同一个包吗?
igraph 是一个用 C 语言编写的软件包,它提供了多种编程语言的接口,例如 R、Python 和 Mathematica。许多函数在不同语言中具有相似的名称和功能,但并非完全匹配,因此您偶尔会发现某些函数只在一种语言中支持,而在另一种语言中不支持。有关如何请求功能的说明,请参阅下面的常见问题解答。
我想使用 igraph 但不懂 Python,该怎么办?
igraph 可以从多种编程语言中使用,例如 C、R、Python 和 Mathematica。虽然确切的函数名称略有不同,但大多数功能是共享的,因此如果您会其中任何一种语言的编程,您就可以使用 igraph:只需在我们的主页上查阅相应语言的安装说明即可。
如果您完全不熟悉编程,或者不懂 Python 但仍想使用 igraph 的 Python 接口,您应该首先学习 Python。网上有许多资源,包括在线课程、视频、教程等。igraph 没有使用很多高级的 Python 特有技巧,因此一旦您能够使用诸如 pandas
或 matplotlib
等标准模块,那么学习 igraph 应该会很容易。
我想要一个用于操作/算法 X 的函数,你们能添加吗?
我们正在持续扩展 igraph 以包含新功能,社区的请求是指导这些工作的最佳方式。当然,我们人手有限,所以不能保证每个晦涩的社区检测算法都会包含在软件包中。请在我们的论坛上开启一个新帖子,描述您的请求。如果您的请求是修改现有函数或特定的代码片段,您可以直接开启一个 GitHub issue(请确保没有类似的 issue!——如果有,请在那里评论)。
igraph 与类似软件包(networkx, graph-tool)有什么区别?
所有这些软件包都专注于图/网络分析。
警告
以下差异和相似之处在撰写本文时(2022 年 1 月)被认为是准确的。如果您发现不正确或过时的信息,请开启一个 Github issue,我们将对其进行更新。
差异
igraph 支持多种编程语言(例如 C、Python、R、Mathematica)。networkx 和 graph-tool 仅支持 Python。
igraph 的核心库是用 C 语言编写的,这使得它通常比 networkx 更快。graph-tool 是用大量模板化的 C++ 编写的,因此它可以像 igraph 一样快,但支持的架构较少。graph-tool 的编译时间可能比 igraph 长得多(数小时对比大约一分钟)。
igraph 顶点是从 0 开始连续的数字 ID 且有序的,并有一个可选的“顶点名称”。networkx 节点则由其名称定义且无序。
边也类似,igraph 中的边使用整数 ID 且有序,而 networkx 则不然。
igraph 可以使用
matplotlib
绘制图,并对 plotly 提供实验性支持,因此它可以生成动画、notebook 小部件和交互式图(例如缩放、平移)。networkx 对matplotlib
有很好的支持,但不支持 plotly。graph-tool 仅通过 Cairo 和 GTK+ 支持静态图像。在设计方面,当您有一个相对静态的网络需要分析时,igraph 表现出色,但它在处理不断增加和删除顶点及边的动态网络时可能会遇到困难。随着我们改进 igraph 的核心 C 库,这种情况在不久的将来可能会改变。目前,networkx 可能更适合模拟此类高度动态的图。
相似之处
许多任务都可以通过 igraph、graph-tool 和 networkx 同样出色地完成。
所有这些都可以读写多种图文件格式。
所有这些都可以可视化图,各有优缺点。
注意
igraph 包含从 networkx 转换的函数,反之亦然,因此您可以使用 igraph 创建和操作网络,如果需要,之后可以将其转换为 networkx 或 graph-tool。反之,您可以在 networkx 或 graph-tool 中加载图,如果需要更高的速度、特定的算法、matplotlib 动画等,则可以将图转换为 igraph 对象。您甚至可以使用 igraph 将图从 networkx 转换为 graph-tool,反之亦然!
我想为 igraph 贡献力量,我该从哪里开始?
感谢您的热情!igraph 是回馈开源社区或学习图知识的绝佳机会。根据您在软件工程、编程、沟通或数据科学方面的技能,有些任务可能比其他任务更适合您。
如果您想立即开始编码,可以查看 GitHub issues,看看是否有听起来足够简单并能激发您兴趣的任务,然后留言表示您有兴趣承担。我们会尽快回复并指导您的下一步工作。
C 核心库还有各种 “理论问题”。您可以通过研究图论文献或寻找图问题的解决方案,在没有任何编程知识的情况下为这些问题做出贡献。一旦理论障碍被克服,其他人就可以着手编码部分:这真是一项团队努力!
如果这些都不太可行,或者您有特定的想法,或者您希望以纯编程以外的方式做出贡献,请在我们的论坛上与我们联系,我们会提出一些建议。