图构建:从 Pandas 导入
此 Jupyter 笔记本托管于 此处,位于 Neo4j 图数据科学客户端的 Github 仓库中。
该笔记本展示了如何使用 gds.graph.construct 方法(仅在 GDS 2.1+ 可用)在内存中直接构建图。
| 如果您使用 AuraDS,当前无法将投影的图导回 Neo4j。 |
1. 设置
我们需要一个可用 Neo4j 和 GDS 的环境,例如自带 GDS 的 AuraDS 或 Neo4j Desktop。
| 此外,您可以使用 Aura Graph Analytics,并跳过下方整个“设置”部分。 |
一旦获得该环境的凭据,就可以安装 graphdatascience 包并导入客户端类。
%pip install graphdatascience
import os
from graphdatascience import GraphDataScience
使用本地 Neo4j 设置时,默认连接 URI 为 bolt://:7687
# Get Neo4j DB URI, credentials and name from environment if applicable
NEO4J_URI = os.environ.get("NEO4J_URI", "bolt://:7687")
NEO4J_AUTH = None
NEO4J_DB = os.environ.get("NEO4J_DB", "neo4j")
if os.environ.get("NEO4J_USER") and os.environ.get("NEO4J_PASSWORD"):
NEO4J_AUTH = (
os.environ.get("NEO4J_USER"),
os.environ.get("NEO4J_PASSWORD"),
)
gds = GraphDataScience(NEO4J_URI, auth=NEO4J_AUTH, database=NEO4J_DB)
使用 AuraDS 时,连接 URI 略有不同,因为它使用 neo4j+s 协议。客户端还应包含 aura_ds=True 标志以启用 AuraDS 推荐的设置。
# On AuraDS:
#
# gds = GraphDataScience(NEO4J_URI, auth=NEO4J_AUTH, database=NEO4J_DB, aura_ds=True)
from graphdatascience import ServerVersion
assert gds.server_version() >= ServerVersion(2, 1, 0)
我们还导入 pandas,以从原始数据源创建 Pandas DataFrame。
import pandas as pd
2. 加载 Cora 数据集
CORA_CONTENT = "https://data.neo4j.com/cora/cora.content"
CORA_CITES = "https://data.neo4j.com/cora/cora.cites"
我们可以将每个 CSV 本地加载为 Pandas DataFrame。
content = pd.read_csv(CORA_CONTENT, header=None)
cites = pd.read_csv(CORA_CITES, header=None)
我们需要执行额外的预处理步骤,将 subject 字段(数据集中的字符串)转换为整数,因为节点属性必须是数值才能投影到图中。我们可以使用映射来实现。
SUBJECT_TO_ID = {
"Neural_Networks": 0,
"Rule_Learning": 1,
"Reinforcement_Learning": 2,
"Probabilistic_Methods": 3,
"Theory": 4,
"Genetic_Algorithms": 5,
"Case_Based": 6,
}
现在我们可以创建一个新的 DataFrame,其中包含 nodeId 字段、节点标签列表,以及额外的节点属性 subject(使用 SUBJECT_TO_ID 映射)和 features(将所有特征列转换为单个数组列)。
nodes = pd.DataFrame().assign(
nodeId=content[0],
labels="Paper",
subject=content[1].replace(SUBJECT_TO_ID),
features=content.iloc[:, 2:].apply(list, axis=1),
)
让我们查看新 DataFrame 的前 5 行
nodes.head()
现在我们创建一个包含节点之间关系的新 DataFrame。要创建等价的无向图,需要显式添加正向和逆向关系。
dir_relationships = pd.DataFrame().assign(sourceNodeId=cites[0], targetNodeId=cites[1], relationshipType="CITES")
inv_relationships = pd.DataFrame().assign(sourceNodeId=cites[1], targetNodeId=cites[0], relationshipType="CITES")
relationships = pd.concat([dir_relationships, inv_relationships]).drop_duplicates()
同样,查看新 DataFrame 的前 5 行
relationships.head()
最后,我们可以创建内存中的图。
G = gds.graph.construct("cora-graph", nodes, relationships)