RNeo4j is Neo4j's R driver. It allows you to read and write data from / to Neo4j directly from your R environment.
First and foremost, download Neo4j!
If you're on Windows, download the .exe
and follow the instructions. You'll get a GUI where you simply press "Start" to start Neo4j.
If you're on OS X, you can download either the .dmg
or the .tar.gz
. The .dmg
will give you a GUI where you simply press "Start" to start Neo4j. Otherwise, download the .tar.gz
, unzip, navigate to the directory and execute ./bin/neo4j start
.
If you're on Linux, you have to use the .tar.gz
. Download the .tar.gz
, unzip, navigate to the directory and execute ./bin/neo4j start
.
These depencies are are only required if you want to use the Bolt interface.
They must be present at build time, and libneo4j-client
must also be present at runtime.
C:\RTools\mingw_64
, C:\RTools\mingw_32
, C:\MinGW\bin
, and C:\MinGW\1.0\bin
)brew install rust
(or https://rustup.rs but see "Rust Path" section)brew install llvm
brew install cleishm/neo4j/libneo4j-client
sudo apt-get install cargo
sudo pacman -S rust
sudo apt-get install clang libclang-dev
sudo pacman -S clang
clang
. It may be called llvm
.sudo apt-get install libneo4j-client-dev
By default, on *nix systems (such as Linux and OS X), rustup only sets the PATH in your shell. That means that if you try to build RNeo4j in a GUI application like RStudio, it may fail. To work around this issue, simply build RNeo4j in a terminal.
install.packages("RNeo4j")
devtools::install_github("nicolewhite/RNeo4j")
Go to the latest release and download the source code. You can then install with install.packages
.
install.packages("/path/to/file.tar.gz", repos=NULL, type="source")
library(RNeo4j)
graph = startGraph("http://localhost:7474/db/data/")
If you have authentication enabled, pass your username and password.
graph = startGraph("http://localhost:7474/db/data/", username="neo4j", password="password")
clear(graph, input=F)
nicole = createNode(graph, "Person", name="Nicole", age=24) greta = createNode(graph, "Person", name="Greta", age=24) kenny = createNode(graph, "Person", name="Kenny", age=27) shannon = createNode(graph, "Person", name="Shannon", age=23)
r1 = createRel(greta, "LIKES", nicole, weight=7) r2 = createRel(nicole, "LIKES", kenny, weight=1) r3 = createRel(kenny, "LIKES", shannon, weight=3) r4 = createRel(nicole, "LIKES", shannon, weight=5)
If you're returning tabular results, use cypher
, which will give you a data.frame
.
query = " MATCH (nicole:Person)-[r:LIKES]->(p:Person) WHERE nicole.name = 'Nicole' RETURN nicole.name, r.weight, p.name " cypher(graph, query)
For anything more complicated, use cypherToList
, which will give you a list
.
query = " MATCH (nicole:Person)-[:LIKES]->(p:Person) WHERE nicole.name = 'Nicole' RETURN nicole, COLLECT(p.name) AS friends " cypherToList(graph, query)
Both cypher
and cypherToList
accept parameters. These parameters can be passed individually or as a list.
query = " MATCH (p1:Person)-[r:LIKES]->(p2:Person) WHERE p1.name = {name1} AND p2.name = {name2} RETURN p1.name, r.weight, p2.name " cypher(graph, query, name1="Nicole", name2="Shannon") cypher(graph, query, list(name1="Nicole", name2="Shannon"))
p = shortestPath(greta, "LIKES", shannon, max_depth=4) n = nodes(p) sapply(n, "[[", "name")
p = shortestPath(greta, "LIKES", shannon, max_depth=4, cost_property="weight") n = nodes(p) sapply(n, "[[", "name") p$weight
library(igraph) query = " MATCH (n)-->(m) RETURN n.name, m.name " edgelist = cypher(graph, query) ig = graph.data.frame(edgelist, directed=F) betweenness(ig) closeness(ig)
igraph
plot(ig)
ggnet
library(network) library(GGally) net = network(edgelist) ggnet(net, label.nodes=TRUE)
visNetwork
Read this blog post and check out this slide deck.
clear(graph, input=F)
library(hflights) hflights = hflights[sample(nrow(hflights), 1000), ] row.names(hflights) = NULL head(hflights) addConstraint(graph, "Carrier", "name") addConstraint(graph, "Airport", "name") query = " CREATE (flight:Flight {number: {FlightNum} }) SET flight.year = TOINT({Year}), flight.month = TOINT({DayofMonth}), flight.day = TOINT({DayOfWeek}) MERGE (carrier:Carrier {name: {UniqueCarrier} }) CREATE (flight)-[:OPERATED_BY]->(carrier) MERGE (origin:Airport {name: {Origin} }) MERGE (dest:Airport {name: {Dest} }) CREATE (flight)-[o:ORIGIN]->(origin) CREATE (flight)-[d:DESTINATION]->(dest) SET o.delay = TOINT({DepDelay}), o.taxi_time = TOINT({TaxiOut}) SET d.delay = TOINT({ArrDelay}), d.taxi_time = TOINT({TaxiIn}) " tx = newTransaction(graph) for(i in 1:nrow(hflights)) { row = hflights[i, ] appendCypher(tx, query, FlightNum=row$FlightNum, Year=row$Year, DayofMonth=row$DayofMonth, DayOfWeek=row$DayOfWeek, UniqueCarrier=row$UniqueCarrier, Origin=row$Origin, Dest=row$Dest, DepDelay=row$DepDelay, TaxiOut=row$TaxiOut, ArrDelay=row$ArrDelay, TaxiIn=row$TaxiIn) } commit(tx) summary(graph)
Error in curl::curl_fetch_memory(url, handle = handle) : Couldn't connect to server
Neo4j probably isn't running. Make sure Neo4j is running first. It's also possible you have localhost resolution issues; try connecting to http://127.0.0.1:7474/db/data/
instead.
Error: client error: (401) Unauthorized Neo.ClientError.Security.AuthorizationFailed No authorization header supplied.
You have auth enabled on Neo4j and either didn't provide your username and password or they were invalid. You can pass a username and password to startGraph
.
graph = startGraph("http://localhost:7474/db/data/", username="neo4j", password="password")
You can also disable auth by editing the following line in conf/neo4j-server.properties
.
# Require (or disable the requirement of) auth to access Neo4j dbms.security.auth_enabled=false
Check out the contributing doc if you'd like to contribute!
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.