記事の対象者と解消できるお悩み
【対象者】
プログラミング未経験のビジネス職
【興味関心】
- 数値データの分析
- SQLスキルアップ
- BigQueryの関数活用
- 売上分析
- 顧客分析
- KPI設定と分析
【解消できるお悩み】
- 売上データや顧客データを分析したいけど、計算式をSQLで書く方法がわからない…
- 平均値や合計値を簡単に計算したい
- BigQueryで数値データを効率的に扱う方法を知りたい
- データ分析で、もっと業務を効率化したい
- 売上や顧客に関するKPIを設定し、分析したい
記事作成者
【人物】株式会社志庵 代表取締役 佐藤 光 起業6年目
【経歴】株式会社光通信➜光通信同期と起業➜データアナリスト転職➜SaaSで2度目起業
【会社実績】
SaaS 資金調達無しARR2億円
SaaS GMV200億円
【内容】自社AaaSであるStruccle、webスクレイピング、BigQueryに関する記事を作成
各種用語
- ARR(Annual Recurring Revenue)
- サブスクリプションサービスの年間売上※当社はSaaS売上
- Struccle(ストラクル)
- 株式会社志庵が独自開発しているAaaS
- AaaS(アース)
- Data Analytics as a Serviceの意
- SaaS(サース)
- Software as a Serviceの意
- GoogleCloudPlatform
- Googleが提供するクラウドプラットフォーム。この中に様々なサービスが存在する。
- GCP(ジーシーピー)
- GoogleCloudPlatformの略
- BigQuery(ビッグクエリ)
- 上記GCPの中に含まれるデータ分析基盤サービス
- SQL(エスキューエル)
- データベースを操作するプログラミング言語
- クエリ
- SQLで記述した命令文
- クエリ例)
- SQL構文のクエリ⬇
SELECT item_name, price FROM sales_table where price >= 1000;
- 上記クエリ(命令文)の意味としては「売上テーブル(sales_table)から価格(price)が1000円以上の商品名(item_name)と価格(price)を抽出する」
- SQL構文のクエリ⬇
- ペタバイト
- データの単位 ペタバイト=1000テラバイト=約100兆行のデータ
概要
データ分析では、数値データを扱うことは非常に一般的です。売上データ、顧客の年齢、商品の価格など、多くのデータが数値で表されます。Google CloudのBigQueryは、数値データを操作するための豊富な数学関数を備えています。これらの関数を使いこなすことで、数値データの計算、変換、分析を効率的に行うことができます。
この記事では、BigQueryで利用できる基本的な数学関数を、分かりやすい例とともに紹介します。BigQueryの無料公開データセットを使って、実際に手を動かしながら数学関数をマスターしましょう!
目次
- BigQueryの数学関数とは?
- BigQueryの基本数学関数一覧
- BigQuery公開データで実践!数学関数を使った分析例
- FAQ:BigQueryに関するよくある質問
- まとめ:BigQueryの数学関数をマスターして、データ分析スキルを向上させよう!
1. BigQueryの数学関数とは?
BigQueryの数学関数は、数値データに対して様々な数学的操作を行うための関数です。これらの関数を活用することで、数値データの計算、変換、分析を効率的に行うことができます。BigQueryは、標準SQLで定義されている多くの数学関数をサポートしており、加算、減算、乗算、除算などの基本的な演算から、三角関数、指数関数、対数関数などの高度な関数まで、幅広い計算に対応できます。
2. BigQueryの基本数学関数一覧
BigQueryで利用できる基本的な数学関数を、例とともに紹介します。
2.1 ABS
数値の絶対値を返します。
構文:
ABS(numeric_expression)
例: -10 の絶対値を取得する
SELECT ABS(-10) AS absolute_value;
2.2 SIGN
数値の符号を返します。正の数値の場合は 1、負の数値の場合は -1、0 の場合は 0 を返します。
構文:
SIGN(numeric_expression)
例: 10 の符号を取得する
SELECT SIGN(10) AS sign_int
2.3 IS_INF
数値が正または負の無限大かどうかを判定します。無限大の場合は TRUE、そうでない場合は FALSE を返します。
構文:
IS_INF(numeric_expression)
例: 数値が無限大かどうかを判定する
SELECT num, IS_INF(num) AS is_infinity
from (
select 1 num union all
select cast('inf' as float64) num
)
2.4 IS_NAN
数値が NaN(非数)かどうかを判定します。NaN の場合は TRUE、そうでない場合は FALSE を返します。
構文:
IS_NAN(numeric_expression)
例: valが NaN かどうかを判定する
SELECT val, IS_NAN(val) AS is_nan_
from (
select 1 val union all select cast("NaN" as float64) val
)
2.5 IEEE_DIVIDE
2 つの数値の除算を行い、IEEE 754 標準に従って結果を返します。0 で除算した場合は、無限大または NaN を返します。
構文:
IEEE_DIVIDE(dividend, divisor)
例: val で除算する
SELECT val, IEEE_DIVIDE(val, 2) AS result, IEEE_DIVIDE(val, 0) zero_div
from (
select 10 val union all select 0 val
)
2.6 RAND
0 以上 1 未満の乱数を返します。オプションでシード値を指定できます。
構文:
RAND()
RAND(int64_expression)
例: 乱数を生成する
SELECT RAND() AS random_number;
2.7 SQRT
数値の平方根を返します。
構文:
SQRT(numeric_expression)
例: 16 の平方根を計算する
SELECT SQRT(16) AS square_root;
2.8 POW
数値のべき乗を返します。
構文:
POW(base, exponent)
例: 2 の 3 乗を計算する
SELECT POW(2, 3) AS power;
2.9 EXP
数値の指数関数を返します。
構文:
EXP(numeric_expression)
例: 2 の指数関数を計算する
SELECT EXP(2) AS exponential;
2.10 LN
数値の自然対数を返します。
構文:
LN(numeric_expression)
例: 10 の自然対数を計算する
SELECT LN(10) AS natural_logarithm;
2.11 LOG
指定された底に対する数値の対数を返します。底を省略した場合は、底は 10 となります。
構文:
LOG(base, numeric_expression)
LOG(numeric_expression)
例: 100 の 10 を底とする対数を計算する
SELECT LOG(100, 10) AS logarithm;
2.12 LOG10
数値の 10 を底とする対数を返します。
構文:
LOG10(numeric_expression)
例: 100 の 10 を底とする対数を計算する
SELECT LOG10(100) AS logarithm;
2.13 GREATEST
引数の中で最大の値を返します。
構文:
GREATEST(expression[, ...])
例: 10, 20, 30 の中で最大の値を取得する
SELECT GREATEST(num_1, num_2, num_3) AS greatest_value
from (
select 10 num_1, 20 num_2, 30 num_3
)
2.14 LEAST
引数の中で最小の値を返します。
構文:
LEAST(expression[, ...])
例: 10, 20, 30 の中で最小の値を取得する
SELECT LEAST(num_1, num_2, num_3) AS least_value
from (
select 10 num_1, 20 num_2, 30 num_3
)
2.15 DIV
被除数を除数で割った商の整数部分を返します。
構文:
DIV(dividend, divisor)
例: 10 を 3 で割った商の整数部分を取得する
SELECT DIV(10, 3) AS quotient;
2.16 SAFE_DIVIDE
被除数を除数で割った商を返します。除数が 0 の場合は、NULL を返します。
構文:
SAFE_DIVIDE(dividend, divisor)
例: 10 を 0 で割った商を取得する(NULLが返る)
SELECT SAFE_DIVIDE(10, 0) AS quotient;
2.17 MOD
被除数を除数で割った余りを返します。
構文:
MOD(dividend, divisor)
例: 10 を 3 で割った余りを取得する
SELECT MOD(10, 3) AS remainder;
2.18 ROUND
数値を指定された桁数に丸めます。桁数を省略した場合は、0 桁に丸めます。
構文:
ROUND(numeric_expression[, digits])
例: 3.14159 を小数点以下第2位に丸める
SELECT ROUND(3.14159, 2) AS rounded_value;
2.19 TRUNC
数値を指定された桁数に切り捨てます。桁数を省略した場合は、0 桁に切り捨てます。
構文:
TRUNC(numeric_expression[, digits])
例: 3.14159 を小数点以下第1位に切り捨てる
SELECT TRUNC(3.14159, 1) AS truncated_value;
2.20 CEIL
数値以上の最小の整数を返します。
構文:
CEIL(numeric_expression)
例: 3.14159 以上の最小の整数を取得する
SELECT CEIL(3.14159) AS ceiling_value;
2.21 FLOOR
数値以下の最大の整数を返します。
構文:
FLOOR(numeric_expression)
例: 3.14159 以下の最大の整数を取得する
SELECT FLOOR(3.14159) AS floor_value;
2.22 COS
数値のコサインを返します。
構文:
COS(numeric_expression)
例: 0 のコサインを計算する
SELECT COS(0) AS cosine;
2.23 COSH
数値のハイパボリックコサインを返します。
構文:
COSH(numeric_expression)
例: 1 のハイパボリックコサインを計算する
SELECT COSH(1) AS hyperbolic_cosine;
2.24 ACOS
数値のアークコサインを返します。
構文:
ACOS(numeric_expression)
例: 1 のアークコサインを計算する
SELECT ACOS(1) AS arc_cosine;
2.25 ACOSH
数値のハイパボリックアークコサインを返します。
構文:
ACOSH(numeric_expression)
例: 2 のハイパボリックアークコサインを計算する
SELECT ACOSH(2) AS hyperbolic_arc_cosine;
2.26 SIN
数値のサインを返します。
構文:
SIN(numeric_expression)
例: 0 のサインを計算する
SELECT SIN(0) AS sine;
2.27 SINH
数値のハイパボリックサインを返します。
構文:
SINH(numeric_expression)
例: 1 のハイパボリックサインを計算する
SELECT SINH(1) AS hyperbolic_sine;
2.28 ASIN
数値のアークサインを返します。
構文:
ASIN(numeric_expression)
例: 1 のアークサインを計算する
SELECT ASIN(1) AS arc_sine;
2.29 ASINH
数値のハイパボリックアークサインを返します。
構文:
ASINH(numeric_expression)
例: 2 のハイパボリックアークサインを計算する
SELECT ASINH(2) AS hyperbolic_arc_sine;
2.30 TAN
数値のタンジェントを返します。
構文:
TAN(numeric_expression)
例: 0 のタンジェントを計算する
SELECT TAN(0) AS tangent;
2.31 TANH
数値のハイパボリックタンジェントを返します。
構文:
TANH(numeric_expression)
例: 1 のハイパボリックタンジェントを計算する
SELECT TANH(1) AS hyperbolic_tangent;
2.32 ATAN
数値のアークタンジェントを返します。
構文:
ATAN(numeric_expression)
例: 1 のアークタンジェントを計算する
SELECT ATAN(1) AS arc_tangent;
2.33 ATANH
数値のハイパボリックアークタンジェントを返します。
構文:
ATANH(numeric_expression)
例: 0.5 のハイパボリックアークタンジェントを計算する
SELECT ATANH(0.5) AS hyperbolic_arc_tangent;
2.34 ATAN2
2 つの数値の反正接を返します。結果は、-π から π の範囲のラジアンで表されます。
構文:
ATAN2(y, x)
例: y = 1、x = 1 の反正接を計算する
SELECT ATAN2(1, 1) AS arc_tangent2;
3. BigQuery公開データで実践!数学関数を使った分析例
ここでは、BigQueryの公開データセット「NYC Taxi Trips」を使って、数学関数を使った簡単なSQL分析例を紹介します。このデータセットには、ニューヨーク市のタクシー乗車に関する情報が格納されています。
例:乗車距離をキロメートルに変換し、チップ金額の降順TOP10を取得
NYC Taxi Tripsデータセットの`trips`テーブルには、乗車距離がマイル単位で格納されています。これをキロメートルに変換するには、以下のクエリを実行します。
SELECT
trip_distance, -- 乗車距離(マイル)
ROUND(trip_distance * 1.60934, 2) AS trip_distance_km, -- 乗車距離をキロメートルに変換し、小数点以下第2位に丸める
tip_amount, -- チップの金額
CEIL(tip_amount) AS tip_amount_ceil, -- チップの金額以上の最小の整数を取得
FLOOR(tip_amount) AS tip_amount_floor -- チップの金額以下の最大の整数を取得
FROM bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2015
where tip_amount > 0
order by tip_amount desc
LIMIT 10
このクエリでは、`trip_distance`カラム(数値型)に1.60934を掛けて、キロメートルに変換しています。`LIMIT 10`句は、結果を10件に制限するために使用しています。
4. FAQ:BigQueryに関するよくある質問
Q1. BigQueryの無料枠を超えて利用すると、どのくらい費用がかかりますか?
A1. 無料枠を超えた場合、従量課金制で料金が発生します。料金は、処理したデータ量やストレージ容量などによって異なります。詳しくは、BigQueryの料金ページをご確認ください。
Q2. BigQueryで使えるSQLは、他のデータベースと同じですか?
A2. BigQueryは標準SQLをサポートしており、他のデータベースで学んだSQLの知識を活かすことができます。ただし、BigQuery独自の関数や構文も存在するため、BigQueryのドキュメントで詳細を確認することをおすすめします。
Q3. SQLの学習には、どのような教材がありますか?
A3. SQLの学習には、オンライン学習サイト、書籍、動画教材など、様々な教材があります。初心者向けの教材から、上級者向けの教材まで、レベルに合わせて選ぶことができます。Googleが提供するBigQueryのチュートリアルもSQLの学習に役立ちます。
5. まとめ:BigQueryの数学関数をマスターして、データ分析スキルを向上させよう!
BigQueryの数学関数は、数値データを扱う分析に非常に役立ちます。この記事で紹介した関数以外にも、様々な数学関数が用意されています。BigQueryの公式リファレンスなどを参考に、数学関数をマスターし、データ分析スキルを向上させましょう!
BigQuery導入サポート、転職検討中の方はお問い合わせフォームからご相談くださいませ。
誠心誠意精一杯対応いたします。
【参考URL】
GoogleCloudPlatform:https://console.cloud.google.com/welcome/new
BigQuery:https://cloud.google.com/bigquery?hl=ja
BigQueryリリース情報:https://cloud.google.com/bigquery/docs/release-notes
BigQuery料金:https://cloud.google.com/bigquery/pricing
BigQuery料金無料枠:https://cloud.google.com/bigquery/pricing?hl=ja#free-tier
Google Cloud活用事例:https://cloud.google.com/customers/index.html?hl=ja#
Looker Studio:https://cloud.google.com/looker-studio?hl=ja
Looker Studioサンプル:https://cloud.google.com/bigquery/docs/visualize-looker-studio?hl=ja