gpt4 book ai didi

python - 父子关系可视化、模式匹配和全文搜索

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:05 25 4
gpt4 key购买 nike

我有如下数据集:

Parent  ID    Path      GrandParent  GrandParentID   Child  ModPath 
John 100 home\123 Matt 50 Ian Ian\123
John 100 home\123 Matt 50 Andrew Andrew\123
John 100 home\123 Matt 50 Danny Danny\123

我如何才能最好地在 Kibana/elasticsearch 中表示我的数据以显示每个事件的父子结构?理想情况下,我想将上面的这个集合分类为单个事件,就像我在下面使用 groupby 的 Python Pandas 中所做的那样。

Parent  ID    Path      GrandParent  GrandParentID   Child    ModPath 
John 100 home\123 Matt 50 Ian Ian\123
Andrew Andrew\123
Danny Danny\123

如果 kibana/elasticsearch 不是最好的方法/工具集,您是否可以推荐任何其他开源的可视化和引用工具集/方法?

理想情况下,我希望能够搜索 parent 、 child 或祖 parent ,并以可视化方式或在表格中显示所有关系和关系的属性。

Python 是由于引用 pandas 而使用的标签。

最佳答案

Neo4j 擅长模式匹配和关系可视化。 ElasticSearch 更适合全文搜索,但 Neo4j 应该能够通过一些小的更改充分处理这一问题。

这是一个示例,说明如何在 Neo4j 中对其进行建模和查询,以及查询的表格和图形结果。您可以使用它来与其他答案以及您尝试的其他解决方案进行比较。

现在让我们将它们建模为 :Person 节点,它们之间具有 :CHILD 关系。

您没有暗示数据会比这三代更进一步,所以现在假设数据库中的所有结构都遵循这种模式。

在 Cypher 中,让我们在示例图中创建节点:

create (matt:Person{name:'Matt', ID:50})
create (john:Person{name:'John', ID:100, path:'home/123'})
create (ian:Person{name:'Ian', path:'Ian/123'})
create (andrew:Person{name:'Andrew', path:'Andrew/123'})
create (danny:Person{name:'Danny', path:'Danny/123'})

create (matt)-[:CHILD]->(john)
create (john)-[:CHILD]->(ian)
create (john)-[:CHILD]->(andrew)
create (john)-[:CHILD]->(danny)

接下来让我们确保他们的名字有小写版本以利用索引查找:

match (p:Person)
set p.lowerName = lower(p.name)

然后我们将在 lowerName 上添加索引,这样以后任何匹配都很快:

create index on :Person(lowerName)

我们已准备好进行查询。

这里我们使用硬编码的小写lookup,但在实际版本中,您会将lookup作为参数,然后运行lower( ) 在匹配前将其变为小写。

with 'ian' as lookup
// find the grandparent root node
match (:Person{lowerName:lookup})<-[:CHILD*0..]-(grandparent)
where size ((grandparent)<-[:CHILD]-()) = 0
with grandparent
match p=(grandparent)-[:CHILD]->(parent)-[:CHILD]->(child)
return parent.name as Parent, parent.ID as ID, parent.path as Path,
grandparent.name as GrandParent, grandparent.ID as GrandParentID,
collect(child {Child:child.name, ModPath:child.path}) as children,
collect(p) as path

无论您在查询中使用哪个名称,这都会起作用。它将为每个祖父 + parent 对以及该 parent 的所有 child 返回一行。收集到子项的匹配路径可确保尽管有投影,但结果的图形 View 仍然可用。

当然,您可以根据要公开的数据执行不同的投影,或者直接返回节点,这将包括它们的所有属性。

这是结果行和列(忽略路径列): enter image description here

这是结果的图形 View : enter image description here

关于python - 父子关系可视化、模式匹配和全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com