矩阵统计聚合

编辑

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

count

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

mean

每个字段的平均值。

variance

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

skewness

每个字段的度量,量化均值周围的不对称分布。

kurtosis

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

covariance

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

correlation

协方差矩阵缩放到 -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 参数控制聚合将对数组或多值字段使用哪个数组值。此参数可以采用以下值之一:

avg

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

min

选择最小值。

max

选择最大值。

sum

使用所有值的总和。

median

使用所有值的中位数。

缺失值

编辑

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

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