矩阵统计聚合

编辑

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

计数

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

平均值

每个字段的平均值。

方差

每个字段的测量值,表示样本与平均值的离散程度。

偏度

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

峰度

每个字段的测量值,量化分布的形状。

协方差

一个矩阵,定量描述一个字段的变化如何与另一个字段相关联。

相关性

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

与其他度量聚合不同,matrix_stats 聚合不支持脚本。

以下示例演示了使用矩阵统计来描述收入和贫困之间关系的方法。

resp = client.search(
    aggs={
        "statistics": {
            "matrix_stats": {
                "fields": [
                    "poverty",
                    "income"
                ]
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    aggregations: {
      statistics: {
        matrix_stats: {
          fields: [
            'poverty',
            'income'
          ]
        }
      }
    }
  }
)
puts response
const response = await client.search({
  aggs: {
    statistics: {
      matrix_stats: {
        fields: ["poverty", "income"],
      },
    },
  },
});
console.log(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 参数控制聚合将对数组或多值字段使用哪个数组值。此参数可以取以下值之一:

平均值

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

最小值

选择最低的值。

最大值

选择最高的值。

总和

使用所有值的总和。

中位数

使用所有值的中位数。

缺失值

编辑

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

resp = client.search(
    aggs={
        "matrixstats": {
            "matrix_stats": {
                "fields": [
                    "poverty",
                    "income"
                ],
                "missing": {
                    "income": 50000
                }
            }
        }
    },
)
print(resp)
const response = await client.search({
  aggs: {
    matrixstats: {
      matrix_stats: {
        fields: ["poverty", "income"],
        missing: {
          income: 50000,
        },
      },
    },
  },
});
console.log(response);
GET /_search
{
  "aggs": {
    "matrixstats": {
      "matrix_stats": {
        "fields": [ "poverty", "income" ],
        "missing": { "income": 50000 }      
      }
    }
  }
}

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