neo4j operations

This commit is contained in:
Ianatrix
2026-02-08 15:22:15 +01:00
parent 142ef81125
commit 4f1a5c311f

View File

@@ -2,6 +2,49 @@ import json
import pandas as pd
from pathlib import Path
from collections import defaultdict
from neo4j import GraphDatabase
NEO4J_URI = "bolt://localhost:7687"
NEO4J_USER = "neo4j"
NEO4J_PASSWORD = "password"
driver = GraphDatabase.driver(
NEO4J_URI,
auth=(NEO4J_USER, NEO4J_PASSWORD)
)
def load_nodes(df, label):
with driver.session() as session:
for _, row in df.iterrows():
session.run(
f"""
MERGE (n:{label} {{id: $id}})
SET n += $props
""",
id=row["id"],
props=row.drop("id").dropna().to_dict()
)
def load_edges(edges_df):
with driver.session() as session:
for _, row in edges_df.iterrows():
session.run(
"""
MATCH (s {id: $source})
MATCH (t {id: $target})
CALL apoc.create.relationship(s, $type, {}, t)
YIELD rel
RETURN rel
""",
source=row["source"],
target=row["target"],
type=row["type"].upper()
)
# KONFIGURATION
@@ -433,6 +476,19 @@ network_edges_df = pd.DataFrame(network_edges)
network_nodes_df.to_csv(OUTPUT_DIR / "network_nodes.csv", index=False)
network_edges_df.to_csv(OUTPUT_DIR / "network_edges.csv", index=False)
load_nodes(nodes_df[nodes_df['kind']=="Gene"], "Gene")
load_nodes(nodes_df[nodes_df['kind']=="Disease"], "Disease")
load_nodes(nodes_df[nodes_df['kind']=="Compound"], "Compound")
load_nodes(nodes_df[nodes_df['kind']=="Symptom"], "Symptom")
load_nodes(nodes_df[nodes_df['kind']=="Side Effect"], "SideEffect")
load_edges(edges_df)
print(f"Network: {len(network_nodes_df)} nodes, {len(network_edges_df)} edges")