正規化集約

特定のバケット値に対して特定の正規化/再スケーリング値を計算する親パイプライン集約です。正規化できない値は、スキップギャップポリシーを使用してスキップされます。

構文

normalize 集約は、単独で次のようになります:

Js

  1. {
  2. "normalize": {
  3. "buckets_path": "normalized",
  4. "method": "percent_of_sum"
  5. }
  6. }


表 75. normalize_pipeline パラメータ

パラメータ名 説明 必須 デフォルト値
buckets_path 正規化したいバケットへのパス(詳細については [buckets_path 構文](045ebb369a1af050.md#buckets-path-syntax “buckets_path Syntax”)を参照) 必須
method 適用する特定の メソッド 必須
format 出力値のための DecimalFormat パターン。指定された場合、フォーマットされた値は集約の value_as_string プロパティに返されます オプション null

メソッド

正規化集約は、バケット値を変換するための複数のメソッドをサポートしています。各メソッド定義は、次の元のバケット値のセットを例として使用します: [5, 5, 10, 50, 10, 20].

  • rescale_0_1
  • このメソッドは、最小値がゼロ、最大値が1になるようにデータを再スケーリングし、残りは線形に正規化されます。
    1. x' = (x - min_x) / (max_x - min_x)
  1. [0, 0, .1111, 1, .1111, .3333]
  • rescale_0_100
  • このメソッドは、最小値がゼロ、最大値が100になるようにデータを再スケーリングし、残りは線形に正規化されます。
    1. x' = 100 * (x - min_x) / (max_x - min_x)
  1. [0, 0, 11.11, 100, 11.11, 33.33]
  • percent_of_sum
  • このメソッドは、各値をその合計のパーセンテージとして正規化します。
    1. x' = x / sum_x
  1. [5%, 5%, 10%, 50%, 10%, 20%]
  • mean
  • このメソッドは、各値が平均からどれだけ異なるかによって正規化されます。
    1. x' = (x - mean_x) / (max_x - min_x)
  1. [4.63, 4.63, 9.63, 49.63, 9.63, 9.63, 19.63]
  • z-score
  • このメソッドは、各値が平均からの距離を標準偏差に対して表すように正規化されます。
    1. x' = (x - mean_x) / stdev_x
  1. [-0.68, -0.68, -0.39, 1.94, -0.39, 0.19]
  • softmax
  • このメソッドは、各値を指数化し、元の値の指数の合計に対して相対的に正規化します。
    1. x' = e^x / sum_e_x
  1. [2.862E-20, 2.862E-20, 4.248E-18, 0.999, 9.357E-14, 4.248E-18]

次のスニペットは、各月の総売上のパーセンテージを計算します:

Python

  1. resp = client.search(
  2. index="sales",
  3. size=0,
  4. aggs={
  5. "sales_per_month": {
  6. "date_histogram": {
  7. "field": "date",
  8. "calendar_interval": "month"
  9. },
  10. "aggs": {
  11. "sales": {
  12. "sum": {
  13. "field": "price"
  14. }
  15. },
  16. "percent_of_total_sales": {
  17. "normalize": {
  18. "buckets_path": "sales",
  19. "method": "percent_of_sum",
  20. "format": "00.00%"
  21. }
  22. }
  23. }
  24. }
  25. },
  26. )
  27. print(resp)

Ruby

  1. response = client.search(
  2. index: 'sales',
  3. body: {
  4. size: 0,
  5. aggregations: {
  6. sales_per_month: {
  7. date_histogram: {
  8. field: 'date',
  9. calendar_interval: 'month'
  10. },
  11. aggregations: {
  12. sales: {
  13. sum: {
  14. field: 'price'
  15. }
  16. },
  17. percent_of_total_sales: {
  18. normalize: {
  19. buckets_path: 'sales',
  20. method: 'percent_of_sum',
  21. format: '00.00%'
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }
  28. )
  29. puts response

Js

  1. const response = await client.search({
  2. index: "sales",
  3. size: 0,
  4. aggs: {
  5. sales_per_month: {
  6. date_histogram: {
  7. field: "date",
  8. calendar_interval: "month",
  9. },
  10. aggs: {
  11. sales: {
  12. sum: {
  13. field: "price",
  14. },
  15. },
  16. percent_of_total_sales: {
  17. normalize: {
  18. buckets_path: "sales",
  19. method: "percent_of_sum",
  20. format: "00.00%",
  21. },
  22. },
  23. },
  24. },
  25. },
  26. });
  27. console.log(response);

コンソール

  1. POST /sales/_search
  2. {
  3. "size": 0,
  4. "aggs": {
  5. "sales_per_month": {
  6. "date_histogram": {
  7. "field": "date",
  8. "calendar_interval": "month"
  9. },
  10. "aggs": {
  11. "sales": {
  12. "sum": {
  13. "field": "price"
  14. }
  15. },
  16. "percent_of_total_sales": {
  17. "normalize": {
  18. "buckets_path": "sales",
  19. "method": "percent_of_sum",
  20. "format": "00.00%"
  21. }
  22. }
  23. }
  24. }
  25. }
  26. }
buckets_path はこの正規化集約に sales 集約の出力を再スケーリングに使用するよう指示します

| | method は適用する再スケーリングを設定します。この場合、percent_of_sum は親バケット内のすべての売上のパーセンテージとして売上値を計算します。
| | format は、Javaの DecimalFormat パターンを使用してメトリックを文字列としてフォーマットする方法に影響を与えます。この場合、100を掛けて % を追加します。

次のような応答が返される可能性があります:

コンソール-結果

  1. {
  2. "took": 11,
  3. "timed_out": false,
  4. "_shards": ...,
  5. "hits": ...,
  6. "aggregations": {
  7. "sales_per_month": {
  8. "buckets": [
  9. {
  10. "key_as_string": "2015/01/01 00:00:00",
  11. "key": 1420070400000,
  12. "doc_count": 3,
  13. "sales": {
  14. "value": 550.0
  15. },
  16. "percent_of_total_sales": {
  17. "value": 0.5583756345177665,
  18. "value_as_string": "55.84%"
  19. }
  20. },
  21. {
  22. "key_as_string": "2015/02/01 00:00:00",
  23. "key": 1422748800000,
  24. "doc_count": 2,
  25. "sales": {
  26. "value": 60.0
  27. },
  28. "percent_of_total_sales": {
  29. "value": 0.06091370558375635,
  30. "value_as_string": "06.09%"
  31. }
  32. },
  33. {
  34. "key_as_string": "2015/03/01 00:00:00",
  35. "key": 1425168000000,
  36. "doc_count": 2,
  37. "sales": {
  38. "value": 375.0
  39. },
  40. "percent_of_total_sales": {
  41. "value": 0.38071065989847713,
  42. "value_as_string": "38.07%"
  43. }
  44. }
  45. ]
  46. }
  47. }
  48. }