【问题标题】:Create a directed weighted graph using python-igraph and mysql results使用 python-igraph 和 mysql 结果创建有向加权图
【发布时间】:2014-08-20 04:35:54
【问题描述】:

我正在使用 python-igraph 并尝试从 MySQL 查询结果生成有向加权图。我在我的数据集中的一个表上运行一个查询,我想基于它创建图表。基本上我的查询将返回以下内容:

A B Weight
1 2 3
2 4 5

谁能解释如何使用 python-igraph 完成它?有可能吗?

【问题讨论】:

标签: python mysql igraph


【解决方案1】:

假设您使用适当的 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。上面的代码 sn-p 还利用了 cursor 可迭代的事实,因此它可能无法与其他数据库模块一起使用,但很容易采用通用 DB-API 2.0 游标并仅使用 @987654327 使其可迭代@。

此外,请确保您在edge_foreign_keys 中传递的两个列名与 MySQL 查询中包含源节点和目标节点的列名匹配。查询结果中的任何其他列都将保存为边缘属性。

【讨论】:

  • 顺便提一下,如果使用psycopg2包连接PostgreSQL,使用conn.cursor(cursor_factory = psycopg2.extras.RealDictCursor)生成字典表示。
  • +1 用于在 iGraph 中调出 DictList 函数。我整天都在通过文档搜索一种从内存中读取边缘列表的方法!最终使用了 TupleList。
  • 您在回答中提到您无法验证此解决方案。我做到了。要将字符串用作键,请确保您的连接具有正确的游标类型:cursorclass=MySQLdb.cursors.DictCursor
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多