見出し画像

SQL分析データ準備と基礎統計#21:計算済みの値で箱ひげ図を可視化

箱ひげ図(Box Plot)は量的変数の統計量を確認する際によく利用されますが、多くの可視化ライブラリでは通常、元のデータセットから各統計量を計算して可視化します。件数が少ないときはわざわざこちらで計算しなくても代わりにやってくれて便利なのですが、数百万件とかのデータベース内のデータをローカルに持ってきて、ライブラリに食わせ、計算させるのは非現実的です。データベース側で計算し、その計算済みの値を利用して箱ひげ図を描いてくれたら、ネットワーク上を通るデータセットがせいぜい数件となって軽くて済むのに.. そんなお悩みをお持ちの奥さま方に嬉しいお知らせです。いくつかのライブラリで実施できる、計算済みの値を利用して箱ひげ図を可視化する方法をご紹介します。

使うライブラリは以下からどれでもお好きなものを:

  • Vega, Vega-Lite (Teradata SQL Kernel)

  • ggplot2 (R)

  • Altair (Python)

  • Plotly (Python)

そして箱ひげ図に利用する指標もいろいろありますが、最低限使われるものを対象とします。通常第1四分位と第3四分位が箱の両端に、最小値と最大値がひげの両端に、第2四分位と平均値が箱の中に表現されます。

  • 最小値

  • 第1四分位

  • 第2四分位(中央値)

  • 第3四分位

  • 最大値(第4四分位)

  • 平均値

各指標のデータベース側における計算方法例については以下を参照ください

元のCSVファイルは以下です。複数の変数について上述の指標が格納されています。


ggplot2 (R)

こちらはRをJupyter Labで利用している前提です。ggplot2は可視化結果をいったんファイルとして出力するため、出力画像をそのままノートブックに出すのは難しいですが、セルをマークダウンにして出力した画像ファイルをそのままドラッグすれば表示されます。データはCSVファイルをRのデータフレームにしています。


Vega-Lite (Teradata SQL Kernel)

Jupyter LabのExtensionでTeradataにSQL実行できるカーネル(Teradata SQL Kernel)を追加できるため、以下のノートブックはそれを使ったものです。Teradata SQL Kernelにおいて、Select文の実行結果は特定のディレクトリにCSVで格納されるため、流れとしてはそれをコピーして利用するとします。仕組みとしては、Teradata SQL KernelにあるマジックコマンドでVega、Vega-Liteによる可視化ができるので、それを使います。その際、マジックコマンドではJSONファイルを指定し、JSONファイルで定義を書いてあげて、その定義内にCSVファイルを指定するのですが、一つ注意が必要です。JSONファイルはJupyter Labのホームディレクトリからの位置を記述すること、そしてCSVファイルはJSONファイルからの位置を記述することです。通常Windowsの環境だとユーザーディレクトリがJupyter Labのホームとして設定されていることが多いかと思います(C:\users\yourusername)。なのでこの直下にJSONファイルとCSVファイルがあればファイル名だけでディレクトリパスは記述する必要がなく、C:\users\yourusername\documents\scrに両方あれば、ご覧のような書き方になります。

それぞれで呼び出しているJSONファイルは以下。CSVファイルは上述のと同じです。


Altair (Python)

上述のVega(とVega-Lite)をPythonで実装したのがこちらのAltairです。いったんCSVをpandasのデータフレームにしています。なぜか絵が表示されないですが似たようなものですので割愛したままにします。ご自身の環境で動かしてみれば描画されると思います。


Plotly (Python)

こちらもCSVをpandasのデータフレームにしています。色分けは試行錯誤しましたが諦めました。これも絵が表示されないのでご自身の環境で確認してみてください。

以上、計算済みの結果を利用して箱ひげ図を可視化する例についてご紹介しました。昔は築地市場から飛び出してきて隅田川に落ちたネズミを、スズキが捕食してたなんて話を聞いたことがあるのですが、今はあのあたりもすっかりすっきりしてしまい、真偽も定かではありません。

#teradata #analytics #boxplot #python #r #sql #jupyterlab #ggolot2 #vega #vegalite #altair  #plotly  

///

この記事が気に入ったらサポートをしてみませんか?