gpt4 book ai didi

python - 写入 GML 文件时出现 NetworkX 键错误

转载 作者:太空狗 更新时间:2023-10-30 00:58:31 27 4
gpt4 key购买 nike

在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com