neo4j cypher SET для каждого атрибута ребра из массива numpy - PullRequest
0 голосов
/ 18 октября 2019

Если у меня запрос на шифрование (с использованием py2neo):

edges = graph.run("MATCH (r:edge) RETURN r.col1 r.col2 r.col3").to_data_frame()

, и это возвращает кадр данных столбцов.

Затем я выполняю некоторые операции в python и передаю кадр данныхс помощью алгоритма ML, чтобы сделать некоторые прогнозы, поэтому в конечном итоге я получаю прогноз для каждого ребра в edges - назовем это y_predict (длина которого равна edges).

ТеперьЯ хочу взять этот новый массив / список y_predict и установить новый атрибут на каждом из ребер, которые только что были возвращены. Но я просто хочу, чтобы первое значение в y_predict было присвоено этому атрибуту по первому ребру в edges, а второе - ко второму и т. Д. ...

Если я выполню:

edges = graph.run(f"MATCH (r:edge) \
SET r.att1 = {y_predict}")

это установит весь список на каждое ребро в edges вместо каждого значения в отдельности.

Есть ли способ сделать это в шифре?

1 Ответ

1 голос
/ 20 октября 2019

Во-первых, вам понадобится какой-то способ уникальной идентификации каждого edge, чтобы вы могли сопоставить вычисленное y_predict с правильным узлом. Ниже я предполагаю, что триплет col1, col2 и col3 являются уникальными.

Я не знаком с py2neo, но в прямом Cypher вы можете передать массив в виде строки JSON и затем пройтичерез массив с помощью команды unwind.

Если вы передадите JSON в форме

{predictions: [{col1: "A", col2: "B", col3: "C", prediction: 75}, {col1: "D", col2: "E", col3: "F", prediction: 100}]}

, тогда эта команда Cypher установит y_predict на каждом узле

unwind {predictions} as p
match (e:edge {col1: p.col1, col2: p.col2, col3: p.col3})
set e.y_predict = p.prediction

Чтобы использовать идентификатор узла вместотри значения столбца, JSON может быть отформатирован следующим образом

{predictions: [{e_id: 72, prediction: 75}, {e_id: 67, prediction: 100}]}

и использоваться с этим Cypher

unwind {predictions} as p
match (e:edge) where id(e) = p.e_id
set e.y_predict = p.prediction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...