Проблема была в том, как я загружал данные.
Ранее я загружал его, используя:
ЗАГРУЗИТЬ CSV С ЗАГОЛОВКАМИ ИЗ "file: ///estimates-of-station-usage-2016-17.csv" AS line
СОЗДАТЬ вещи
Однако это означало, что многие узлы были продублированы с одинаковыми свойствами, так что они были различимы, но не сразу различались.
Чтобы избежать этой проблемы, используйте CREATE только для тех узлов, которые, как вы знаете, будут уникальными, затем используйте MERGE для создания узлов, которые будут связывать другие узлы вместе.
Код загрузки моего CSV изменен на:
LOAD CSV WITH HEADERS FROM "file:///estimates-of-station-usage-2016-17.csv" AS line
CREATE (s:Station {name: line.`Station Name` , entriesAndExits: toInteger(replace(trim(line.`1617 Entries & Exits`), ",", "")) })
MERGE (fo:FacilityOwner {name: coalesce(line.`Station Facility Owner`, "Unknown")})
MERGE (r:Region {name: coalesce(line.Region, "Unknown")})
MERGE (la:LocalAuthority {name: coalesce(line.`Local Authority`, "Unknown")})
MERGE (fo)-[:OWNS]->(s)
MERGE (la)-[:RESPONSIBLE_FOR]->(s)
MERGE (la)-[:IN]->(r)
MERGE (s)-[:IN]->(r)
MERGE (fo)-[:OPERATES_IN]->(r)
RETURN s,r,la,fo;
MATCH (s:Station)
WHERE NOT exists(s.name) OR NOT exists(s.entriesAndExits)
DETACH DELETE s
RETURN s;
MATCH (r:Region)
WHERE r.name = "Unknown"
DETACH DELETE r
RETURN r;
MATCH (fo:FacilityOwner)
WHERE fo.name = "Unknown"
DETACH DELETE fo
RETURN fo;
MATCH (la:LocalAuthority)
WHERE la.name = "Unknown"
DETACH DELETE la
RETURN la;
- Спасибо Дейву Беннетту и Гаю Кодеру за их полезные комментарии.
Примечание к данным CSV:
Поля в CSV-файле - это все простые строки. При анализе количества записей для станций имеется много кодового шума, поскольку записи этого столбца представляют собой числа, отформатированные в виде строк, включая лишние пробелы и запятые, для разделения групп из 3 цифр, например, «546,123».