Last active
November 12, 2018 17:53
-
-
Save jvilledieu/2dc83327b5de17f0988e to your computer and use it in GitHub Desktop.
Data importation script for call records analysis article
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Setup initial constraints | |
CREATE CONSTRAINT ON (a:PERSON) assert a.number is unique; | |
CREATE CONSTRAINT ON (b:CALL) assert b.id is unique; | |
CREATE CONSTRAINT ON (c:LOCATION) assert c.cell_tower is unique; | |
CREATE CONSTRAINT ON (d:STATE) assert d.name is unique; | |
CREATE CONSTRAINT ON (e:CITY) assert e.name is unique; | |
//Create the appropriate nodes | |
USING PERIODIC COMMIT 1000 | |
LOAD CSV WITH HEADERS FROM "file:c:/Users/Jean/Downloads/call_records_dummy.csv" AS line | |
MERGE (a:PERSON {number: line.CALLING_NBR}) | |
ON CREATE SET a.first_name = line.FIRST_NAME, a.last_name = line.LAST_NAME, a.full_name = line.FULL_NAME | |
ON MATCH SET a.first_name = line.FIRST_NAME, a.last_name = line.LAST_NAME, a.full_name = line.FULL_NAME | |
MERGE (b:PERSON {number: line.CALLED_NBR}) | |
MERGE (c:CALL {id: line.ID}) | |
ON CREATE SET c.start = toInt(line.START_DATE), c.end= toInt(line.END_DATE), c.duration = line.DURATION | |
MERGE (d:LOCATION {cell_tower: line.CELL_TOWER}) | |
ON CREATE SET d.address= line.ADDRESS, d.state = line.STATE, d.city = line.CITY | |
MERGE (e:CITY {name: line.CITY}) | |
MERGE (f:STATE {name: line.STATE}) | |
//Setup proper indexing | |
DROP CONSTRAINT ON (a:PERSON) ASSERT a.number IS UNIQUE; | |
DROP CONSTRAINT ON (a:CALL) ASSERT a.id IS UNIQUE; | |
DROP CONSTRAINT ON (a:LOCATION) ASSERT a.cell_tower IS UNIQUE; | |
CREATE INDEX ON :PERSON(number); | |
CREATE INDEX ON :CALL(id); | |
CREATE INDEX ON :LOCATION(cell_tower); | |
//Create relationships between people and calls | |
USING PERIODIC COMMIT 1000 | |
LOAD CSV WITH HEADERS FROM "file:c:/Users/Jean/Downloads/call_records_dummy.csv" AS line | |
MATCH (a:PERSON {number: line.CALLING_NBR}),(b:PERSON {number: line.CALLED_NBR}),(c:CALL {id: line.ID}) | |
CREATE (a)-[:MADE_CALL]->(c)-[:RECEIVED_CALL]->(b) | |
//Create relationships between calls and locations | |
MATCH (a:CALL {id: line.ID}), (b:LOCATION {cell_tower: line.CELL_TOWER}) | |
CREATE (a)-[:LOCATED_IN]->(b) | |
//Create relationships between locations, cities and states | |
MATCH (a:LOCATION {cell_tower: line.CELL_TOWER}), (b:STATE {name: line.STATE}), (c:CITY {name: line.CITY}) | |
CREATE (b)<-[:HAS_STATE]-(a)-[:HAS_CITY]->(c) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment