图数据库中时间序列数据的序列聚合

2023-12-29

All,

我是图形数据库领域的新手,想知道此类示例是否适用于图形数据库。

假设我正在看一场棒球比赛。当每个球员击球时,有 3 种可能的结果:安打、三振或保送。

对于每个击球手和整个棒球赛季,我想弄清楚的是序列的计数。

例如,对于 N 次上垒的击球手,有多少人具有特定的序列(例如,击球/保送/三振或击球/击球/击球/击球),如果是这样,有多少相同的击球手重复了该序列按时间索引的相同序列。为了进一步解释,时间可以让我知道特定的序列(例如击球/保送/三振或击球/击球/击球/击球)是否发生在赛季开始、中期或后半段。

对于键值类型数据库,原始数据如下所示:

Batter      Time        Game    Event       Bat
-------     -----       ----    ---------   ---
Charles     April       1       Hit         1
Charles     April       1       strikeout   2
Charles     April       1       Walk        3
Doug        April       1       Walk        1
Doug        April       1       Hit         2
Doug        April       1       strikeout   3
Charles     April       2       strikeout   1
Charles     April       2       strikeout   2
Doug        May         5       Hit         1
Doug        May         5       Hit         2
Doug        May         5       Hit         3
Doug        May         5       Hit         4

因此,我的输出将如下所示:

Sequence                    Freq        Unique Batters  Time
-----------------------     ----        --------------  ------
hit                         5000        600             April
walk/strikeout              3000        350             April
strikeout/strikeout/hit     2000        175             April
hit/hit/hit/hit/hit         1000        80              April
hit                         6000        800             May
walk/strikeout              3500        425             May
strikeout/strikeout/hit     2750        225             May
hit/hit/hit/hit/hit         1250        120             May
.                           .           .               .
.                           .           .               .
.                           .           .               .
.                           .           .               .

如果这对于图数据库来说是可行的,那么它也可以扩展吗?如果击球手不是有 3 种可能的结果,而是 10,000,000 名击球手有 10,000 种可能的结果怎么办?

更重要的是,这 10,000 个独特的结果将在组合设置中排序(例如 10,000 个选择 2、10,000 个选择 3 等)。

我的问题是,如果图形数据库合适,您会建议如何设置解决方案?

非常感谢。


自从提出这个问题以来,图数据库已经取得了长足的进步,但问题的答案是,绝对是的,图数据库可以用来找到更好的性能模式。

免责声明:我是 Objectiveivity, Inc. 的现场运营总监。

这不是产品插头。市场上的很多产品都可以解决这个问题。您特别提到将问题扩大化,这很可能是某些产品的限制因素。

为了解决这个问题,我使用了 Objectivity/DB 数据库,它是一个大规模可扩展的对象/图形数据库,具有称为 DO for Declarative Objectiveivity 的全功能图形导航查询语言。

这是我用来解决该问题的模式:

CREATE CLASS Season  {
    year                : Integer,      
    games               : List { Element: Reference { referenced: Game }, CollectionTypeName: TreeListOfReferences }        
}

CREATE CLASS Game {
    date                : DateTime,
    homeTeam            : Reference { referenced: Team, inverse: homeGames },
    awayTeam            : Reference { referenced: Team, inverse: awayGames },
    from                : Reference { referenced: Season, inverse: games },
    innings             : Reference { referenced: Inning, inverse: game }
}

CREATE CLASS Inning {
    number              : Integer,
    game                : Reference { referenced: Game, inverse: innings },
    batters             : Reference { referenced: AtBat, inverse: inning }
}

CREATE CLASS AtBat {
    result              : String,
    inning              : Reference { referenced: Inning, inverse: batters },
    batter              : Reference { referenced: Player, inverse: atBats },
    nextAtBat           : Reference { referenced: AtBat, inverse: prevAtBat },
    prevAtBat           : Reference { referenced: AtBat, inverse: nextAtBat },
    nextBatter          : Reference { referenced: AtBat, inverse: prevBatter },
    prevBatter          : Reference { referenced: AtBat, inverse: nextBatter }
}

CREATE CLASS Player {
    name                : String,
    teams               : List { Element: Reference { EdgeClass: PlayedFor, EdgeAttribute: team }, CollectionTypeName: TreeListOfReferences },
    atBats              : List { Element: Reference { referenced: AtBat, inverse: batter }, CollectionTypeName: TreeListOfReferences }
}

CREATE CLASS PlayedFor {
    player              : Reference { referenced: Player, inverse: teams },
    team                : Reference { referenced: Team, inverse: players },
    start               : DateTime,
    end                 : DateTime
}

CREATE CLASS Team {
    name                : String,
    homeGames           : Reference { referenced: Game, inverse: homeTeam },
    awayGames           : Reference { referenced: Game, inverse: awayTeam },        
    players             : List { Element: Reference { EdgeClass: PlayedFor, EdgeAttribute: team }, CollectionTypeName: TreeListOfReferences }
}   

以下是该架构的摘要。每个玩家都连接到他们自己的每一个 AtBat 对象。每个玩家的 AtBat 对象以双向链表的形式存在。每个 AtBat 对象都指向拥有它的 Player。

A sample dataset might look like this: enter image description here

这个想法是找到用户定义的 AtBat 对象序列,然后找到拥有该序列的 Player。在下面的查询中,我们正在寻找“三振出局”、“击中”和“三振出局”模式。当我们找到该模式时,我们需要知道与该模式关联的玩家。因为所有 AtBat 对象都链接回所属的 Player,所以我们在查询中所要做的就是表达所需的 AtBat 对象序列,然后从最后一个 AtBat 对象导航到它所连接的 Player 对象。查询如下:

match path = (a1:AtBat {result == "Strike Out"})
           -[:nextAtBat]->(a2:AtBat {result == "Hit"})
           -[:nextAtBat]->(a3:AtBat {result == "Strike Out"})
           -->(p:Player) 
           group by p.name
           return a1.result, a2.result, a3.result, p.name;

结果示例如下所示:

{
  _Projection
  {
    a1.result:'Strike Out',
    a2.result:'Hit',
    a3.result:'Strike Out',
    p.name:'Player0_TeamA'
  },
  _Projection
  {
    a1.result:'Strike Out',
    a2.result:'Hit',
    a3.result:'Strike Out',
    p.name:'Player0_TeamB'
  },
  _Projection
  {
    a1.result:'Strike Out',
    a2.result:'Hit',
    a3.result:'Strike Out',
    p.name:'Player10_TeamA'
  },

此图描述了查找模式,然后从最后一个 AtBat 导航到关联的 Player:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图数据库中时间序列数据的序列聚合 的相关文章

随机推荐

  • 基于 Linux 内核头文件中的功能的条件编译

    考虑一下我正在使用导出到用户空间的 Linux 标头中的某些功能的情况 例如perf event open http man7 org linux man pages man2 perf event open 2 html from
  • 如何使用 .isdigit 输入负数?

    当我尝试这个时 if question isdigit is True 我可以很好地输入数字 这会过滤掉字母 字母数字字符串 例如 当我尝试 s1 和 s 时 它会转到 else 问题是 当我输入负数 例如 1 时 isdigit 将 符号
  • Flask 应用程序在 heroku 上失败,但与 foreman 一起工作

    我正在尝试使用 Heroku 部署一个相当基本的应用程序 并且之前已经成功 但由于某种原因 当我现在尝试时遇到导入错误 Foreman start 工作没有问题 但是当我尝试启动应用程序时 似乎发生了一些破坏导入的事情 这是我收到的日志消息
  • AngularJS 与 Django - 模板标签冲突

    我想将 AngularJS 与 Django 一起使用 但是它们都使用 作为他们的模板标签 有没有一种简单的方法可以更改两者之一以使用其他自定义模板标签 对于 Angular 1 0 您应该使用 interpolateProvider ap
  • 如何在keras中实现麦克劳林级数?

    我正在尝试使用麦克劳林级数来实现可扩展的 CNN 基本思想是第一个输入节点可以分解为具有不同阶数和系数的多个节点 将单个节点分解为多个节点可以生成与麦克劳林级数不同的非线性线连接 谁能给我一个关于如何扩展的可能想法CNN麦克劳林级数非线性展
  • Shopware 6:为产品创建继承的实体扩展

    我想在 Shopware 6 3 5 4 中创建产品扩展 我遵循本指南 https developer shopware com docs guides plugins plugins framework data handling add
  • ' aria-label='img 应该是 PIL 图像。得到'> img 应该是 PIL 图像。得到

    我试图迭代加载程序以检查它是否正常工作 但是给出了以下错误 TypeError img should be PIL Image Got
  • 从 Spring boot 1.2 升级到 1.5.2 后,Tomcat 8.5 启动期间出现 FileNotFoundException

    I upgraded Spring Boot从 1 2 0 到1 5 2 After那个升级 Tomcat8 5正在投掷文件未找到异常 during startup 下边是one of那些异常 它正在抛出超过 10个类似的例外情况 我不知道
  • 如何将 Android 测试设备添加到 Firebase?

    我正在将 Firebase 分析集成到我的 Android 应用程序中 但我无法在文档或谷歌中看到如何添加测试设备 因此它不依赖于统计数据 我测试了很多 所以如果计算我自己的事件 我的主要统计数据将被损坏 在admob我做 AdReques
  • IE 9 中框大小调整 border-box 和 min-width 的问题

    我正在使用盒子大小 边框框模型 当内联块元素与一个最小宽度包含在一个内联块元素 容器 容器在 Internet Explorer 9 中太宽 在 FF 10 0 Chrome 17 0 Opera 11 5 和 Safari 5 1 2 中
  • Caret::train - 未估算的值

    我试图通过将 knnImpute 传递给 Caret 的 train 方法的 preProcess 参数来估算值 根据以下示例 这些值似乎未进行估算 仍为 NA 然后被忽略 我究竟做错了什么 任何帮助深表感谢 library caret s
  • 使用 int dtype 进行 numpy 数组计算时出错(需要时无法自动将 dtype 转换为 64 位)

    当计算的输入是具有 32 位整数数据类型的 numpy 数组 但输出包含需要 64 位表示的较大数字时 我遇到了 numpy 计算不正确的问题 这是一个最小的工作示例 arr np ones 5 dtype int 2 24 300 arr
  • 检查数组是否为空[重复]

    这个问题在这里已经有答案了 我有以下代码 然而 empty error 仍然返回true 即使没有设置任何内容 有什么不对吗 数组中有两个元素 这绝对并不意味着数组为空 作为快速解决方法 您可以执行以下操作 errors array fil
  • 当可选项为空时如何返回?

    我喜欢那个选项 https docs oracle com javase 8 docs api java util Optional html现在在Java标准库中 但我一直遇到一个基本问题 我还没有弄清楚如何以最佳方式解决 最容易阅读和理
  • 强制网页适合网络视图

    我需要两件事 我需要显示一个显示整个网页 水平 的网络视图 并自动将其缩小到显示整个页面边缘到边缘所需的任何宽度 我很好奇如果这个 a 完全可以做到 b 如果是这样 我可以仅使用 WebView 或 c 如果我需要修改页面的 HTML 以挤
  • 创建两个连接表的数据库选择?

    我必须数据库表 课程 和 学生 课程表包含列 id course name course number 学生表包含列 学生姓名 学生编号 课程编号 我已经创建了课程表 但创建学生表时遇到问题 两个班级可能有相同的学生 因此相同的学生行将存在
  • 防止父级在子 div 中滚动

    当我滚动到孩子的底部时div the body元素开始滚动 我怎样才能防止这种情况发生 我只想要body当光标位于其上时滚动 例子 JsFiddle http jsfiddle net 5mmay 当然是通过添加一些 javascript
  • 将 Perl“die”和“warn”包装在实用程序子例程中

    我想编写一个小子例程 它可以以一致的方式装饰所有错误消息 而不必在我的程序中复制它 但是我希望行号来自调用它的地方 而不是来自调用它的地方die warn发生 在 C 中 我只使用预处理器宏 但 Perl 没有这些 实现这一点的最佳方法是什
  • 如何使用javascript触发文本框上的焦点事件?

    如何使用javascript触发文本框上的焦点事件 例如 在 jQuery 中 我们可以使用以下命令触发焦点事件 textBox focus 同样 我们在纯 JavaScript 中是否有类似的触发器功能 我最终不得不摆弄这个问题 并想出了
  • 图数据库中时间序列数据的序列聚合

    All 我是图形数据库领域的新手 想知道此类示例是否适用于图形数据库 假设我正在看一场棒球比赛 当每个球员击球时 有 3 种可能的结果 安打 三振或保送 对于每个击球手和整个棒球赛季 我想弄清楚的是序列的计数 例如 对于 N 次上垒的击球手