quantilesGK
導入バージョン: v23.4.0
Greenwald-Khanna アルゴリズムを使用して、数値データの数列に対する複数の分位点を、異なるレベルで同時に計算します。
この関数は quantileGK と同様に動作しますが、複数の分位点レベルを1回の処理で計算できるため、個別の分位点関数を呼び出すよりも効率的です。
Greenwald-Khanna アルゴリズムは、データストリームに対する分位点を非常に効率よく計算するためのアルゴリズムです。 このアルゴリズムは、2001 年に Michael Greenwald と Sanjeev Khanna によって提案されました。 このアルゴリズムは非常に効率的で、各項目あたり O(log n) の空間と O(log log n) の時間しか必要としません (n は入力サイズ) 。 また、精度を制御可能な近似分位点を提供するため、高い精度も備えています。
構文
quantilesGK(accuracy, level1, level2, ...)(expr)Parameters
accuracy— 分位点の精度。定数の正の整数です。accuracyの値が大きいほど、エラーは小さくなります。たとえば、accuracy引数を 100 に設定すると、計算された分位点の誤差は高い確率で 1% 以下になります。計算される分位点の精度と、アルゴリズムの計算量の間にはトレードオフがあります。UInt*level— 分位点のレベル。0 から 1 までの 1 つ以上の定数の浮動小数点数です。Float*
Arguments
expr— カラムの値に対する式で、結果は数値データ型、Date、DateTime、またはDateTime64になります。(U)Int*orInt128orUInt128orInt256orUInt256orFloat*orDecimal*orDateorDateTimeorDateTime64
戻り値
指定したレベルの分位点を、指定されたレベルと同じ順序で格納した Array。数値データ型の場合、出力フォーマットは入力フォーマットと一致します。Array((U)Int*) or Array(Int128) or Array(UInt128) or Array(Int256) or Array(UInt256) or Array(Float*) or Array(Decimal*) or Array(Date) or Array(DateTime) or Array(DateTime64)
Examples
GK アルゴリズムを使用した複数の分位点の計算
SELECT quantilesGK(1, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);┌─quantilesGK(1, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [1,1,1] │
└──────────────────────────────────────────────────┘より高精度の分位点
SELECT quantilesGK(100, 0.25, 0.5, 0.75)(number + 1) FROM numbers(1000);┌─quantilesGK(100, 0.25, 0.5, 0.75)(plus(number, 1))─┐
│ [251,498,741] │
└────────────────────────────────────────────────────┘