Skip to content

Instantly share code, notes, and snippets.

@ejfox
Created May 6, 2021 17:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ejfox/5204cf3094de9261e05e3291cd22daca to your computer and use it in GitHub Desktop.
Save ejfox/5204cf3094de9261e05e3291cd22daca to your computer and use it in GitHub Desktop.
Import CSV with Neo4J Cypher
// clear data
MATCH (n:Officer) delete n;
MATCH (n:Incident) delete n;
MATCH (n:Precinct) delete n;
MATCH (n:Penalty) delete n;
CREATE CONSTRAINT officerIdConstraint ON (officer:Officer) ASSERT officer.id IS UNIQUE
CREATE CONSTRAINT incidentIdConstraint ON (incident:Incident) ASSERT incident.id IS UNIQUE
CREATE CONSTRAINT precinctIdConstraint ON (precinct:Precinct) ASSERT precinct.id IS UNIQUE
CREATE CONSTRAINT penaltyIdConstraint ON (penalty:Penalty) ASSERT penalty.id IS UNIQUE
// CREATE INDEX FOR (c:Country) ON (c.name)
// CREATE PRECINCTS
LOAD CSV WITH HEADERS FROM "http://localhost:11001/project-185bb75c-b944-451a-9c0f-aeba860ae68a/nypd_complaints.csv" AS csvLine
MERGE (precinct:Precinct {pct: COALESCE(csvLine.IncidentPrecinct, 'NO PRECINCT SET')})
RETURN precinct
// CREATE PENALTIES
LOAD CSV WITH HEADERS FROM "http://localhost:11001/project-185bb75c-b944-451a-9c0f-aeba860ae68a/nypd_complaints.csv" AS csvLine
MERGE (penalty:Penalty {penaltyRec: COALESCE(csvLine.PenaltyRec, "NO PENALTY RECOMMENDATION"), penaltyDesc: COALESCE(csvLine.PenaltyDesc, "NO PENALTY DESCRIPTION")})
return penalty
// CREATE OFFICERS
LOAD CSV WITH HEADERS FROM "http://localhost:11001/project-185bb75c-b944-451a-9c0f-aeba860ae68a/nypd_complaints.csv" AS csvLine
MERGE (officer:Officer {id: toInteger(csvLine.OfficerID), lastName: csvLine.LastName, firstName: csvLine.FirstName, status: csvLine.Status, gender: csvLine.OfficerGender})
RETURN officer
// CREATE INCIDENTS
LOAD CSV WITH HEADERS FROM "http://localhost:11001/project-185bb75c-b944-451a-9c0f-aeba860ae68a/nypd_complaints.csv" AS csvLine
CREATE (incident:Incident {id: toInteger(csvLine.ComplaintID), date: csvLine.IncidentDate, ccrbDisposition: csvLine.CCRBDisposition, nypdDisposition: csvLine.NYPDDisposition, location: csvLine.LocationType, reason: csvLine.ContactReason, outcome: csvLine.ContactOutcome, impactedRace: csvLine.ImpactedRace, impactedGender: csvLine.ImpactedGender, incidentCommand: csvLine.IncidentCommand})
// CREATE RELATIONSHIPS BETWEEN OFFICERS AND PRECINCTS
LOAD CSV WITH HEADERS FROM "http://localhost:11001/project-185bb75c-b944-451a-9c0f-aeba860ae68a/nypd_complaints.csv" AS csvLine
MATCH (officer:Officer {id: toInteger(csvLine.ShieldNo)}), (precinct:Precinct {pct: csvLine.IncidentPrecinct})
CREATE (officer)-[:MEMBER_OF {currentRank: csvLine.CurrentRankLong}]->(precinct)
// CREATE RELATIONSHIPS BETWEEN OFFICERS AND INCIDENTS
LOAD CSV WITH HEADERS FROM "http://localhost:11001/project-185bb75c-b944-451a-9c0f-aeba860ae68a/nypd_complaints.csv" AS csvLine
MATCH (officer:Officer {id: toInteger(csvLine.OfficerID)}), (incident:Incident {id: toInteger(csvLine.ComplaintID)})
CREATE (officer)-[:NAMED_IN {allegation: csvLine.Allegation}]->(incident)
// CREATE RELATIONSHIPS BETWEEN INCIDENTS AND PENALTIES
USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS FROM "http://localhost:11001/project-185bb75c-b944-451a-9c0f-aeba860ae68a/nypd_complaints.csv" AS csvLine
MATCH (incident:Incident {id: toInteger(csvLine.ComplaintID)}), (penalty:Penalty {id: toInteger(csvLine.AllegationID)})
CREATE (incident)-[:RESULTED_IN]->(penalty)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment