- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在使用 compose() 合并两个图后尝试编写 GML 文件时,我收到以下错误消息:
NetworkXError: 'user_id' is not a valid key
背景是我使用以下方法导入两个 GML 文件:
g = nx.read_gml(file_path + "test_graph_1.gml")
h = nx.read_gml(file_path + "test_graph_2.gml")
每个节点(在两个 GML 文件中)文件的结构如下:
node [
id 9
user_id "1663413990"
file "wingsscotland.dat"
label "brian_bilston"
image "/Users/ian/development/gtf/gtf/img/1663413990.jpg"
type "friends"
statuses 21085
friends 737
followers 53425
listed 550
ffr 72.4898
lfr 0.1029
shape "triangle-up"
]
导入每个文件后,我可以检查所有节点属性,查看每个图中的节点是否唯一。
我还看到 NetworkX 默认丢弃“id”字段,并使用“label”作为节点的标识符。它保留了 user_id 属性(恰好是 Twitter user_id 并且很适合我的目的)。
运行
list(f.nodes(data=True))
我可以看到上面节点的数据是:
('brian_bilston',
{'ffr': 72.4898,
'file': 'wingsscotland.dat',
'followers': 53425,
'friends': 737,
'image': '/Users/ian/development/gtf/gtf/img/1663413990.jpg',
'lfr': 0.1029,
'listed': 550,
'shape': 'triangle-up',
'statuses': 21085,
'type': 'friends',
'user_id': '1663413990'})
(在此测试用例中)图 g 和图 h 共享一个公共(public)节点 - 如上所示。所有其他的用户 ID 和标签都是唯一的。
然后我使用以下方法合并两个图:
f = nx.compose(g,h)
这工作正常。
然后我从图中写出一个新的 GML,f,使用:
nx.write_gml(f, file_path + "one_plus_two.gml")
此时我得到上面的错误:
NetworkXError: 'user_id' is not a valid key
我已经检查了所有 user_id 的唯一性(以防我重复了一个):
uid = nx.get_node_attributes(f,'user_id')
print(uid)
哪些输出:
{'brian_bilston': '1663413990',
'ICMResearch': '100',
'justcswilliams': '200',
'MissBabington': '300',
'ProBirdRights': '400',
'FredSmith': '247775851',
'JasWatt': '160952087',
'Angela_Lewis': '2316946782',
'Fuzzpig54': '130136162',
'SonnyRussel': '828881340',
'JohnBird': '448476934',
'AngusMcAngus': '19785044'}
(为了便于阅读而格式化)。
因此,据我所知,所有 user_id 都是唯一的。
那么,如果这不是键唯一性的问题,错误告诉我什么?
我已经用尽了我的思考!
如有任何指点,将不胜感激!
最佳答案
我将此作为问题发布在 NextworkX GitHub 存储库上,管理员已在该存储库中进行了解答。
参见:https://github.com/networkx/networkx/issues/3100
我已经在下面发布了他的回答:
Yes -- this is a known issue: see #2131
The GML spec doesn't allow underscores in attribute names. We allow reading .gml files that don't correspond to the official GML spec. But we write only items that follow the spec. You should convert your attribute names to not include the underscore.
for n in G:
G.node[n]['userid'] = G.node[n]['user_id']
del G.node[n]['user_id']We should also add to the documentation a note about this.
关于python - 写入 GML 文件时出现 NetworkX 键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51612124/
我正在尝试对网络上的投票动态进行建模,并希望能够在 NetworkX 中创建一个图表,在其中我可以在节点上迭代投票过程,让它们的颜色变化对应于它们的投票“标签”。 我已设法获得此代码以查看每个节点的属
我无法计算简单 NetworkX 加权图的中心性。 这是正常的还是我做错了什么? 我使用简单的 add_edge(c[0],c[1],weight = my_values) 添加边,其中c[0],c[
我想在函数调用 d(n) 之前比较 networkx.Graph 对象 n 的状态(有副作用)之后与国家合作。 有一些可变的对象节点属性,例如 n.node[0]['attribute'],我想对其进
我正在使用 NetworkX 生成一些噪声数据的图表。我想通过删除虚假分支来“清理”图表,并希望避免重新发明轮子。 例如,链接的图片显示了一组示例图形,作为由灰线连接的彩色节点。我想修剪白框指示的节点
我目前正在尝试制定一种算法来在图中查找派系,幸运的是我从 Networkx 找到了一个函数的文档,该函数就是这样做的。不幸的是,变量名有点简洁,我很难理解代码的每一部分的作用。 这里是 find_cl
我正在尝试使用 NetworkX 在两个节点之间添加平行边,但由于以下错误而失败。我究竟做错了什么? import networkx as nx import graphviz g1 = nx.Mul
我希望将 Pajek 数据集转换为 networkx Graph()。数据集来自哥斯达黎加Family Ties 。我正在使用非常方便的 networkx.read_pajek(pathname) 函
我在networkx中有一个巨大的图,我想从每个节点获取深度为2的所有子图。有没有一种好的方法可以使用networkx中的内置函数来做到这一点? 最佳答案 正如我在评论中所说,networkx.ego
我希望将 Pajek 数据集转换为 networkx Graph()。数据集来自哥斯达黎加Family Ties 。我正在使用非常方便的 networkx.read_pajek(pathname) 函
我在使用以下代码时遇到问题。边连接节点。但是是否有可能有一个定向网络,如果一个“人”跟随一个“人”,但它只是一种方式,在边缘有箭头或方向。 plt.figure(figsize=(12, 12)) #
我正在 Windows 机器上使用 Python 3,尽管付出了很多努力,但仍未能安装 pygraphviz。单独讨论。 我有networkx和graphviz模块...是否有一个范例可以在netwo
我正在使用《Python 自然语言处理》一书(“www.nltk.org/book”)自学 Python 和 NLTK。 我在 NetworkX 上被困在第 4 章第 4 部分第 8 部分。当我尝试运
下面是我的代码: import networkx as nx for i in range(2): G = nx.DiGraph() if i==0: G.add_ed
我正在使用 deap 符号回归示例问题中的这段代码,图形显示正常,但我希望节点扩展为圆角矩形以适合文本 自动 . (我不想只是通过反复试验来指定节点大小)。我该怎么做? # show tree imp
我正在尝试使用 networkx 读取 gml 文件(很简单吧?),除非我尝试读取文件时出现错误“networkx.exception.NetworkXError: cannot tokenize u
如何按厚度在networkx中绘制N> 1000个节点的加权网络?如果我有一个源、目标节点和每个边的权重的 .csv 列表,我正在考虑使用该方法: for i in range(N) G.add_ed
我希望 networkx 在我的定向中找到绝对最长的路径, 无环图。 我知道 Bellman-Ford,所以我否定了我的图长度。问题: networkx 的 bellman_ford() 需要一个源节
我在图中有一个节点,它充当一种“临时连接器”节点。我想删除该节点并更新图中的边,以便其所有直接前辈都指向其直接后继者。 在 networkx 中是否有内置功能可以做到这一点,还是我需要推出自己的解决方
我有两张彩色图表。我想确定它们是否同构,条件是同构必须保留顶点颜色。 networkx 中是否有算法可以做到这一点? 这些图是无向且简单的。 最佳答案 检查documentation对于is_isom
我有一组起点-终点坐标,我想计算它们之间的最短路径。 我的起点-终点坐标有时位于一条长直线道路的中间。但是,OSMnx/networkx 计算的最短路径不会考虑中间边到最近节点的路径。 OSMnx 或
我是一名优秀的程序员,十分优秀!