图构建:从 Pandas 导入
此 Jupyter Notebook 托管于 此处 Neo4j 图数据科学客户端 Github 仓库中。
此 Notebook 展示了 gds.graph.construct
方法(仅在 GDS 2.1+ 中可用)的使用,以便直接在内存中构建图。
如果您正在使用 AuraDS,目前无法将投影图导出回 Neo4j。 |
1. 设置
我们需要一个 Neo4j 和 GDS 可用的环境,例如 AuraDS(预装 GDS)或 Neo4j Desktop。
或者,您可以使用 Aura 无服务器图分析 并跳过下面的整个设置部分。 |
一旦此环境的凭据可用,我们就可以安装 graphdatascience
包并导入客户端类。
%pip install graphdatascience
import os
from graphdatascience import GraphDataScience
当使用本地 Neo4j 设置时,默认连接 URI 为 bolt://localhost:7687
# Get Neo4j DB URI, credentials and name from environment if applicable
NEO4J_URI = os.environ.get("NEO4J_URI", "bolt://localhost: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)