图结构:从 Pandas 导入
此 Jupyter 笔记本托管在 Neo4j 图数据科学客户端 Github 存储库的 此处 。
该笔记本展示了 gds.graph.construct
方法(仅在 GDS 2.1+ 中可用)的用法,用于直接在内存中构建图。
如果您使用的是 AuraDS,目前无法将投影后的图写回 Neo4j。 |
1. 设置
我们需要一个 Neo4j 和 GDS 可用的环境,例如 AuraDS(预装了 GDS)或 Neo4j 桌面。
一旦这些凭据可用,我们就可以安装 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.server_version.server_version 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)