создать график возраста apache из графика networkx
Я начал использовать apache age, и мне было интересно, есть ли классный способ напрямую поместить networkx graph в базу данных apache age?
Я использую обходной путь, чтобы получить края и узлы, связанные с их атрибутами, чтобы вставить их в эпоху apache, используя цикл for, есть ли лучший и более быстрый способ?
4 ответа
В настоящее время эта функция находится в стадии разработки. Но наверняка в будущем вы увидите больше таких надежных и эффективных функций.
На данный момент вы можете следовать следующей структуре необработанного кода, чтобы поместить график networkx в базу данных apache-age , а затем визуализировать его в age-viewer.
#import apache-age python driver and networkx
from apache-age import GraphDatabase
import networkx as nx
#connect to the database
driver = GraphDatabase.driver(**xyz**->argument to connect to age database**)
query = "
SELECT * FROM cypher('graph_name', $$
MATCH p = (actor {name: 'Willam Defoe'})-[:ACTED_IN*2]-(co_actor)
RETURN relationships(p)
$$) as (r agtype);"
# run the query
result = driver.run(query)
# iterate through the result
# find the nodes and edges from result
# and add them to the nx.graph
# This bit doesn't work
G = nx.Graph(result)
Примечание . Код не является исполняемым файлом, я предоставил только необработанную структуру.
Недурно! если вы найдете этот ответ подходящим! :)
Чтобы иметь возможность перенести граф NetworkX в Apache AGE, данные графа необходимо преобразовать в формат, совместимый с графовыми таблицами, используемыми Apache AGE. Одним из возможных подходов может быть циклическое перебор графа networkx, который включает узлы и ребра и ввести их в базу данных.
При этом, если граф большой, итерация по всему графу может занять много времени. В этом случае есть несколько подходов, которые могут улучшить производительность:
- Параллельная обработка
- Конверсия данных
- Пакетная вставка
Эти методы помогут повысить производительность и эффективность передачи. Надеюсь это поможет!
Функция в настоящее время недоступна. На данный момент другие разработки имеют более высокий приоритет.
При этом вы можете запросить эту функцию в репозитории Github:
https://github.com/apache/возраст
Если вам повезет, он может быть принят.
EDI:T Спасибо Камлешу в комментариях к этому обновлению.
Таким образом, вы можете видеть, что в настоящее время он открыт для исследований и разработок.
# Import Apache-Age and NetworkX libraries
from apache_age import GraphDatabase
import networkx as nx
# Connect to the graph database using Apache-Age
driver = GraphDatabase.driver(**xyz**->argument to connect to age database**)
# Run the Cypher query to create a relationship between two nodes with label `Person`
query = "
SELECT *
FROM cypher('graph_name', $$
MATCH (a:Person), (b:Person)
WHERE a.name = 'Node A' AND b.name = 'Node B'
CREATE (a)-[e:RELTYPE {name:a.name + '<->' + b.name}]->(b)
RETURN e
$$) as (e agtype);"
result = driver.run(query)
# Extract nodes and edges from the result
nodes = set()
edges = []
for record in result:
relationship = record.get("e")
start_node = relationship.start
end_node = relationship.end
nodes.add(start_node)
nodes.add(end_node)
edges.append((start_node, end_node, {'rel_name': relationship.get('name')}))
# Create a dictionary representation of the graph
graph_dict = {node: [] for node in nodes}
for edge in edges:
graph_dict[edge[0]].append(edge[1])
# Create a directed NetworkX graph object from the dictionary
G = nx.DiGraph(graph_dict)
Примечание. Надеюсь, это поможет вам, но функция, которую вы пытаетесь использовать, сейчас недоступна.