我正在使用 python-igraph 并尝试从 MySQL 查询结果生成有向加权图。我在我的数据集中的一个表上运行查询,我想基于它创建图表。基本上我的查询将返回以下内容:
A B Weight
1 2 3
2 4 5
谁能解释一下如何使用 python-igraph 完成它?有可能吗?
最佳答案
假设您使用适当的 DB-API 2.0 兼容 MySQL 模块直接从 Python 查询数据库,您可以使用 Graph.DictList
方法来实现您的目标。 Graph.DictList
从字典列表表示创建图形,并且可以配置 MySQL 查询游标以在获取行时生成字典而不是元组。这是未经测试的,因为我手头没有 MySQL 数据库,但它显示了总体思路:
import MySQLdb
import MySQLdb.cursors
conn = MySQLdb.connect(host='...', cursorclass=MySQLdb.cursors.DictCursor)
cursor = conn.cursor()
cursor.execute("SELECT source, target, weight FROM whatever")
graph = Graph.DictList(vertices=None, edges=cursor, edge_foreign_keys=('source', target'))
这里的重要部分是在连接到数据库时使用 cursorclass=MySQLdb.cursors.DictCursor
。上面的代码片段还利用了 cursor
是可迭代的这一事实,因此它可能不适用于其他数据库模块,但是很容易采用通用的 DB-API 2.0 游标并使其可迭代使用 iter(cursor.fetchone, None)
。
此外,请确保您在 edge_foreign_keys
中传递的两个列名与 MySQL 查询中包含源节点和目标节点的列名相匹配。查询结果中的任何其他列都将保存为边缘属性。
关于python - 使用 python-igraph 和 mysql 结果创建有向加权图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25396799/