矩阵统计聚合编辑

matrix_stats 聚合是一种数值聚合,它计算一组文档字段的以下统计信息

计数

计算中包含的每个字段样本数。

平均值

每个字段的平均值。

方差

每个字段的度量值,用于衡量样本与平均值的偏离程度。

偏度

每个字段的度量值,用于量化围绕平均值的不对称分布。

峰度

每个字段的度量值,用于量化分布的形状。

协方差

一个矩阵,定量描述一个字段的变化与另一个字段的变化之间的关系。

相关性

协方差矩阵缩放到 -1 到 1 的范围(含),描述字段分布之间的关系。

与其他指标聚合不同,matrix_stats 聚合不支持脚本。

以下示例演示了如何使用矩阵统计信息来描述收入与贫困之间的关系。

response = client.search(
  body: {
    aggregations: {
      statistics: {
        matrix_stats: {
          fields: [
            'poverty',
            'income'
          ]
        }
      }
    }
  }
)
puts response
GET /_search
{
  "aggs": {
    "statistics": {
      "matrix_stats": {
        "fields": [ "poverty", "income" ]
      }
    }
  }
}

聚合类型为 matrix_statsfields 设置定义用于计算统计信息的字段集(作为数组)。上述请求返回以下响应

{
  ...
  "aggregations": {
    "statistics": {
      "doc_count": 50,
      "fields": [ {
          "name": "income",
          "count": 50,
          "mean": 51985.1,
          "variance": 7.383377037755103E7,
          "skewness": 0.5595114003506483,
          "kurtosis": 2.5692365287787124,
          "covariance": {
            "income": 7.383377037755103E7,
            "poverty": -21093.65836734694
          },
          "correlation": {
            "income": 1.0,
            "poverty": -0.8352655256272504
          }
        }, {
          "name": "poverty",
          "count": 50,
          "mean": 12.732000000000001,
          "variance": 8.637730612244896,
          "skewness": 0.4516049811903419,
          "kurtosis": 2.8615929677997767,
          "covariance": {
            "income": -21093.65836734694,
            "poverty": 8.637730612244896
          },
          "correlation": {
            "income": -0.8352655256272504,
            "poverty": 1.0
          }
        } ]
    }
  }
}

doc_count 字段表示参与计算统计信息的文档数量。

多值字段编辑

matrix_stats 聚合将每个文档字段视为一个独立的样本。mode 参数控制聚合将对数组或多值字段使用哪个数组值。此参数可以采用以下值之一

avg

(默认)使用所有值的平均值。

min

选择最小值。

max

选择最大值。

sum

使用所有值的总和。

median

使用所有值的中位数。

缺失值编辑

missing 参数定义如何处理缺少值的文档。默认情况下,它们将被忽略,但也可以将它们视为具有值。这是通过添加一组字段名:值映射来指定每个字段的默认值来完成的。

GET /_search
{
  "aggs": {
    "matrixstats": {
      "matrix_stats": {
        "fields": [ "poverty", "income" ],
        "missing": { "income": 50000 }      
      }
    }
  }
}

income 字段中没有值的文档将使用默认值 50000