Posted at

BigQueryで統計量の計算をしてみよう

More than 1 year has passed since last update.

BigQueryにはUDFという、ユーザ定義関数を実行することができます

また、StandardSQLでは外部jsをインクルードできるようになりました

今回、jsの統計ライブラリであるjstatsを読み込んで、BigQueryで統計量の計算をすることにしました


手順


  1. jstat.jsをGoogle Cloud Storageにアップする

  2. 以下のクエリをBigQueryで実行する


twoSidedDifferenceOfProportions

jStat.fn.twoSidedDifferenceOfProportions(.5, 134, .51, 101);

=> 0.879357522092445

CREATE TEMPORARY FUNCTION twoSidedDifferenceOfProportions(p1 FLOAT64, n1 FLOAT64, p2 FLOAT64, n2 FLOAT64)

RETURNS FLOAT64
LANGUAGE js AS """
return jStat.fn.twoSidedDifferenceOfProportions( p1, n1, p2, n2);
"""
OPTIONS (
library="gs://#{project_name}/jstat.js"
);

SELECT
twoSidedDifferenceOfProportions(0.5, 134, 0.51, 101)

=> 0.879357522092445


注意

以下のように最初FLOAT64の箇所をINT64としていて、数字が全く違うものが返ってきていました。

型はしっかり確認して利用しましょう。

CREATE TEMPORARY FUNCTION twoSidedDifferenceOfProportions(p1 FLOAT64, n1 INT64, p2 FLOAT64, n2 INT64)

RETURNS FLOAT64
LANGUAGE js AS """
return jStat.fn.twoSidedDifferenceOfProportions( p1, n1, p2, n2);
"""
OPTIONS (
library="gs://#{project_name}/jstat.js"
);

SELECT
twoSidedDifferenceOfProportions(0.5, 134, 0.51, 101)CREATE TEMPORARY FUNCTION twoSidedDifferenceOfProportions(p1 FLOAT64, n1 INT64, p2 FLOAT64, n2 INT64)
RETURNS FLOAT64
LANGUAGE js AS """
return jStat.fn.twoSidedDifferenceOfProportions( p1, n1, p2, n2);
"""
OPTIONS (
library="gs://#{project_name}/jstat.js"
);

SELECT
twoSidedDifferenceOfProportions(0.5, 134, 0.51, 101)

=> 0.0106513479995477