マトリックス統計集約

matrix_stats 集約は、ドキュメントフィールドのセットに対して以下の統計を計算する数値集約です:

count 計算に含まれるフィールドごとのサンプル数。
mean 各フィールドの平均値。
variance 平均からのサンプルのばらつきを示すフィールドごとの測定。
skewness 平均周辺の非対称分布を定量化するフィールドごとの測定。
kurtosis 分布の形状を定量化するフィールドごとの測定。
covariance 一つのフィールドの変化が他のフィールドとどのように関連しているかを定量的に説明する行列。
correlation -1から1の範囲にスケーリングされた共分散行列。フィールドの分布間の関係を説明します。

他のメトリック集約とは異なり、matrix_stats 集約はスクリプトをサポートしていません。

以下の例は、収入と貧困の関係を説明するためにマトリックス統計を使用する方法を示しています。

Python

  1. resp = client.search(
  2. aggs={
  3. "statistics": {
  4. "matrix_stats": {
  5. "fields": [
  6. "poverty",
  7. "income"
  8. ]
  9. }
  10. }
  11. },
  12. )
  13. print(resp)

Ruby

  1. response = client.search(
  2. body: {
  3. aggregations: {
  4. statistics: {
  5. matrix_stats: {
  6. fields: [
  7. 'poverty',
  8. 'income'
  9. ]
  10. }
  11. }
  12. }
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.search({
  2. aggs: {
  3. statistics: {
  4. matrix_stats: {
  5. fields: ["poverty", "income"],
  6. },
  7. },
  8. },
  9. });
  10. console.log(response);

コンソール

  1. GET /_search
  2. {
  3. "aggs": {
  4. "statistics": {
  5. "matrix_stats": {
  6. "fields": [ "poverty", "income" ]
  7. }
  8. }
  9. }
  10. }

集約タイプは matrix_stats で、fields 設定は統計を計算するためのフィールドのセット(配列として)を定義します。上記のリクエストは以下のレスポンスを返します:

コンソール-結果

  1. {
  2. ...
  3. "aggregations": {
  4. "statistics": {
  5. "doc_count": 50,
  6. "fields": [ {
  7. "name": "income",
  8. "count": 50,
  9. "mean": 51985.1,
  10. "variance": 7.383377037755103E7,
  11. "skewness": 0.5595114003506483,
  12. "kurtosis": 2.5692365287787124,
  13. "covariance": {
  14. "income": 7.383377037755103E7,
  15. "poverty": -21093.65836734694
  16. },
  17. "correlation": {
  18. "income": 1.0,
  19. "poverty": -0.8352655256272504
  20. }
  21. }, {
  22. "name": "poverty",
  23. "count": 50,
  24. "mean": 12.732000000000001,
  25. "variance": 8.637730612244896,
  26. "skewness": 0.4516049811903419,
  27. "kurtosis": 2.8615929677997767,
  28. "covariance": {
  29. "income": -21093.65836734694,
  30. "poverty": 8.637730612244896
  31. },
  32. "correlation": {
  33. "income": -0.8352655256272504,
  34. "poverty": 1.0
  35. }
  36. } ]
  37. }
  38. }
  39. }

doc_count フィールドは、統計の計算に関与するドキュメントの数を示します。

マルチバリューフィールド

matrix_stats 集約は、各ドキュメントフィールドを独立したサンプルとして扱います。mode パラメータは、集約が配列またはマルチバリューのフィールドに対して使用する配列値を制御します。このパラメータは次のいずれかを取ることができます:

avg (デフォルト)すべての値の平均を使用します。
min 最低値を選択します。
max 最高値を選択します。
sum すべての値の合計を使用します。
median すべての値の中央値を使用します。

欠損値

missing パラメータは、値が欠けているドキュメントがどのように扱われるべきかを定義します。デフォルトでは無視されますが、値があるかのように扱うことも可能です。これは、フィールドごとのデフォルト値を指定するためにフィールド名:値のマッピングを追加することで行います。

Python

  1. resp = client.search(
  2. aggs={
  3. "matrixstats": {
  4. "matrix_stats": {
  5. "fields": [
  6. "poverty",
  7. "income"
  8. ],
  9. "missing": {
  10. "income": 50000
  11. }
  12. }
  13. }
  14. },
  15. )
  16. print(resp)

Js

  1. const response = await client.search({
  2. aggs: {
  3. matrixstats: {
  4. matrix_stats: {
  5. fields: ["poverty", "income"],
  6. missing: {
  7. income: 50000,
  8. },
  9. },
  10. },
  11. },
  12. });
  13. console.log(response);

コンソール

  1. GET /_search
  2. {
  3. "aggs": {
  4. "matrixstats": {
  5. "matrix_stats": {
  6. "fields": [ "poverty", "income" ],
  7. "missing": { "income": 50000 }
  8. }
  9. }
  10. }
  11. }
income フィールドに値がないドキュメントは、デフォルト値 50000 を持ちます。