neo4j operations
This commit is contained in:
@@ -2,6 +2,49 @@ import json
|
|||||||
import pandas as pd
|
import pandas as pd
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from collections import defaultdict
|
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
|
# 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_nodes_df.to_csv(OUTPUT_DIR / "network_nodes.csv", index=False)
|
||||||
network_edges_df.to_csv(OUTPUT_DIR / "network_edges.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")
|
print(f"Network: {len(network_nodes_df)} nodes, {len(network_edges_df)} edges")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user