使用python-igraph和mysql结果创建有向加权图
我正在使用python-igraph这个库,想要根据从MySQL查询结果生成一个有向加权图。我在我的数据集中对一个表进行了查询,想要根据这个查询的结果来创建图。简单来说,我的查询会返回以下内容:
A B Weight
1 2 3
2 4 5
有没有人能解释一下如何用python-igraph来实现这个?这真的可能吗?
1 个回答
5
假设你是直接从Python查询数据库,使用的是一个兼容DB-API 2.0的MySQL模块,你可以用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
是可迭代的这一特性,所以它可能不适用于其他数据库模块,但你可以很简单地用iter(cursor.fetchone, None)
把一个通用的DB-API 2.0游标变成可迭代的。
另外,确保你在edge_foreign_keys
中传入的两个列名和MySQL查询中包含源节点和目标节点的列名一致。查询结果中的其他列会被保存为边的属性。