8

パッケージ/ドライバー( https://github.com/nicolewhite/Rneo4j )のおかげで、人気のあるグラフ データベースを内部でNeo4j使用できます。RRNeo4j

パッケージの作成者である @ NicoleWhiteは、 GitHubでその使用方法の優れた例をいくつか 提供しています。

私にとって残念なことに、@NicoleWhite によって与えられた例とドキュメントは、次のように、各グラフ ノードとそれに関連付けられた and を手動で作成するという点で、少し単純化されすぎていlabelsますproperties

mugshots = createNode(graph, "Bar", name = "Mugshots", location = "Downtown")
parlor = createNode(graph, "Bar", name = "The Parlor", location = "Hyde Park")
nicole = createNode(graph, name = "Nicole", status = "Student")
addLabel(nicole, "Person")

小さなサンプル データセットを扱っている場合はこれで問題ありませんが、このアプローチは、各ユーザーがノードである数千人のユーザーを含む大規模なソーシャル グラフのようなものには適していません (このようなグラフでは、すべてのノードが使用されない場合があります)。に入力する必要がありますNeo4j)。

ベクトルまたはデータフレームを使用してこれを行う方法を理解しようとしています。おそらくapplyステートメントまたはforループを呼び出す解決策はありますか?

この基本的な試み:

for (i in 1:length(df$user_id)){
paste(df$user_id[i]) = createNode(graph, "user", name = df$name[i], email = df$email[i])
}

につながるError: 400 Bad Request

4

1 に答える 1

12

最初の試みとして、トランザクション エンドポイント用に追加したばかりの機能を確認する必要があります。

http://nicolewhite.github.io/RNeo4j/docs/transactions.html

library(RNeo4j)

graph = startGraph("http://localhost:7474/db/data/")
clear(graph)

data = data.frame(Origin = c("SFO", "AUS", "MCI"),
                  FlightNum = c(1, 2, 3),
                  Destination = c("PDX", "MCI", "LGA"))


query = "
MERGE (origin:Airport {name:{origin_name}})
MERGE (destination:Airport {name:{dest_name}})
CREATE (origin)<-[:ORIGIN]-(:Flight {number:{flight_num}})-[:DESTINATION]->(destination)
"

t = newTransaction(graph)

for (i in 1:nrow(data)) {
  origin_name = data[i, ]$Origin
  dest_name = data[i, ]$Dest
  flight_num = data[i, ]$FlightNum

  appendCypher(t, 
               query, 
               origin_name = origin_name, 
               dest_name = dest_name, 
               flight_num = flight_num)
}

commit(t)

cypher(graph, "MATCH (o:Airport)<-[:ORIGIN]-(f:Flight)-[:DESTINATION]->(d:Airport)
               RETURN o.name, f.number, d.name")

ここでは、Cypher クエリを作成し、データ フレームをループして値をパラメータとして Cypher クエリに渡します。作成されたノードごとに個別の HTTP 要求を送信しているため、現在の試行は遅くなります。トランザクション エンドポイントを使用すると、1 つのトランザクションで複数のものを作成できます。データ フレームが非常に大きい場合は、トランザクションごとに約 1000 行に分割します。

2 回目の試行として、neo4j-shell で LOAD CSV を使用することを検討してください。

于 2014-08-13T21:31:38.233 に答える