图谱示例

行为健康治疗计划

使用 Wiley 治疗计划

我使用“Wiley 治疗计划”数据集作为我们领域模型的基础,因为它是行为健康领域采用的一种标准。行为健康治疗的一个关键方面是创建一个由四个部分组成的治疗计划(打包为库),包括:问题 (Problem)、目标 (Goal)、目的 (Objective) 和干预措施 (Intervention)。

问题 (The Problem)

问题通用地陈述了病人所面临的困扰。例如,这可能是抑郁症 (Depression)、低自尊 (Low self-Esteem)、药物滥用 (Substance Abuse) 或其他问题。

目标 (The Goal)

目标是最终结果。例如,病人可能有一个目标:“Demonstrate respect and regard for self and others”。

目的 (The Objectives)

目的 (Objectives) 是从问题到目标过程中的里程碑:指示病人将如何改善。

干预措施 (The Intervention)

干预措施是作为计划一部分执行的任务或活动。这些可能是由病人及参与治疗计划的其他人采取的行动。

其他复杂情况

在实践中,上述模型存在一些难题,使得在关系数据库中实现 Wiley 计划变得困难。

首先是存在从问题到目标再到干预措施的链接,这将干预措施限制为仅与特定问题和/或目标相关的那些。在 SQL 数据库中设置此项需要一个单独的表来维护每个计划的“关联”。生成适当的计划需要多次遍历关联表,导致查询可能需要两到十秒才能运行完成,具体取决于加载了多少库。

第二个变化是,并非所有人都会按照问题 → 目标 → 目的 → 干预措施的既定顺序使用该计划。任何实用的治疗计划系统实现都必须允许用户从计划中的任何一点开始并从那里进行工作。例如,用户可以从目标开始,然后跳到干预措施,再到问题。

第三,信息(目标、目的、干预措施)会被重用。例如,目标A 可以在库A 中用于问题A,但也可能在同一库中的其他问题或跨多个库中再次使用。

Domain Model
图 1. Wiley 治疗计划领域模型

使用 Neo4j 实现 Wiley 计划

在 Neo4j 中实现此模型产生了 300 个节点和 12 万条关系。典型查询在大约 500 毫秒内运行并 `RETURN` 500-700 个值。此外,添加偏离 Wiley 计划的自定义计划也很容易,且不影响性能。

Domain Model
图 2. 修改后的 Wiley 治疗计划领域模型

节点

(:Library)
(:Problem)
(:Goal)

关系

(:Library)-[:HAS_PROBLEM]->(:Problem)-[:HAS_GOAL]->(:Goal)
(:Problem)-[:HAS_OBJECTIVE]->(:Objective)
(:Problem)-[:HAS_INTERVENTION]->(:Intervenion)

样本数据集

该样本数据集包含一个库、一个问题、四个目的、目标和干预措施。

使用案例

显示所有目的

MATCH (c:Objective)
RETURN c.Description AS Objective

显示所有问题

MATCH (c:Problem)
RETURN c.Description AS Problem

显示所有目标

MATCH (c:Goal)
RETURN c.Description AS Goal

查找所有库和问题编号 17 的干预措施

MATCH (lib:Library)-[:HAS_PROBLEM]->(st:Problem{name:'17'})-[:HAS_INTERVENTION]-(i:Intervention)
RETURN lib.Description AS Library, st.Description AS Problem, i.Description AS Intervention;

显示一个库的所有问题、干预措施和目的

MATCH (lib:Library{GroupID:'230'})-[:HAS_PROBLEM]->(st:Problem{name:'17'})-[:HAS_INTERVENTION]-(i:Intervention) with i,st MATCH (st)-[:HAS_OBJECTIVE]->(m:Objective)
RETURN st.Description AS Problem, m.Description AS Objective, i.Description AS Intervention;

结论

使用 SQL 开发治疗计划工具花费了数月时间才使其正确并达到可用的性能水平。我使用 py2neo 将数据导入图谱。总的来说,从开始到结束不到一周时间(创建这个 gist 花费的时间更长)。

© . All rights reserved.