来自csv的Neo4J中的分层图

时间:2017-07-09 18:29:22

标签: python neo4j

我有一个csv如下:

City State  Country
A     WB      BAN
B     WB      BAN
C     MA      BAN
D     MA      BAN
E     RG      BAN

另一个文件有城市销售。我必须根据用户的要求在python中交替计算城市,地区,州的销售额。我可以在Neo4j中表示这些并从python中的单个函数访问销售,它会根据需要自动获取城市,州或地区吗?

城市销售数据如下:

City  Period   Sales_Amt($)
A      May17    $5
B      May17    $10
C      May17    $15
D      May17    $5

1 个答案:

答案 0 :(得分:1)

数据的加载(例如使用LOAD CSV)可能如下所示:

LOAD CSV WITH HEADERS FROM 'file:///hierarchy.csv' as line fieldterminator ','
MERGE (c:Country {id: line.countryId})
MERGE (s:State {id: line.stateId})
MERGE (ci:City {id: line.cityId})
MERGE (c)-[:HAS_STATE]->(s)
MERGE (s)-[:HAS_CITY]->(ci);

销售数据的负载可能如下所示:

LOAD CSV WITH HEADERS FROM 'file:///sales.csv' as line fieldterminator ','
MATCH (ci:City {id: line.cityId})
CREATE (s:Sale {period: line.period, amount: toFloat(line.amount)})
MERGE(ci)-[:HAS_SALE]->(s);

现在,您必须根据入口点(国家,州,城市)的内容构建查询:

MATCH (c:Country {id: "theinputforcountry})-[:HAS_STATE]->(s:State)-[:HAS_CITY]->(ci:City)-[:HAS_SALE]->(s:Sale)
RETURN c.id, sum(s.amount);

MATCH (s:State {id: "theinputforstate"})-[:HAS_CITY]->(ci:City)-[:HAS_SALE]->(s:Sale)
RETURN s.id, sum(s.amount);

MATCH (ci:City {id: "theinputforcity"})-[:HAS_SALE]->(s:Sale)
RETURN ci.id, sum(s.amount);

希望这有帮助!

此致 汤姆

P.S。可以走一个可变长度的路径(所以你不必指定整个路径),也可以把它变成一个更通用的查询,它只是在WHERE和RETURN子句(WHERE)上有所不同会得到你输入的密钥,然后RETURN将在你输入的级别上进行分组)......但是这两种方法都使你不太清楚你想要完成什么(imo: - )。