JupySQL は、Jupyter ノートブックや IPython シェルで SQL を実行できる Python ライブラリです。
このガイドでは、chDB と JupySQL を使用してデータにクエリを実行する方法を学びます。
まず、仮想環境を作成します:
次に、JupySQL、IPython、JupyterLabをインストールします。
JupySQL は IPython で使用でき、次を実行して起動できます:
または、Jupyter Lab では次を実行します。
JupyterLab を使用している場合は、このガイドの残りの手順に進む前に、ノートブックを作成してください。
運賃、チップ、乗車地区を含む約300万件のタクシー乗車記録で構成されるニューヨーク市のタクシーデータセットを使用します。
乗車記録は複数の TSV ファイルに分割されているため、まずこれらをダウンロードします。
次に、chDB 用の dbapi モジュールをインポートします。
次に、chDB への接続を作成します。
永続化したデータはすべて taxi.chdb ディレクトリに保存されます。
では、sqlマジックをロードし、chDB への接続を確立します:
次に、クエリ結果が切り捨てられないよう、表示上限を表示します:
trips_ プレフィックスが付いた複数のファイルをダウンロードしました。
DESCRIBE 句を使用してスキーマを確認しましょう。
これらのファイルに対して直接 SELECT クエリを実行し、データの内容を確認することもできます。
スキーマを振り返ると、金額に関連するカラムであるtrip_distance、fare_amount、tip_amountは、数値型ではなくStringとして推論されています。
データをテーブルにインポートする際に、これらを修正します。
次に、これらの TSV ファイルのデータをテーブルに格納します。
default データベースではデータはディスクに永続化されないため、先に別のデータベースを作成する必要があります。
次に、TSV ファイル内のデータ構造からスキーマを導出した trips テーブルを作成します。
REPLACE 句を使用して金額関連のカラムを Float64 にキャストし、transform 関数を使用して数値の pickup_borocode カラムを人間が読める borough 名に変換します。
テーブル内のデータを簡単に確認してみましょう。
300万件強の乗車記録に加え、2つ目のテーブルも取り込みましょう。
New York CityのTaxi & Limousine Commissionは市内をタクシーゾーンに分割しており、ルックアップファイルには各ゾーンと対応するboroughが記載されています。
そのファイルをダウンロードしましょう:
次に、CSV ファイルの内容に基づいて、zones というテーブルを作成します。
実行が完了したら、取り込んだデータを確認してみましょう:
データのインジェストが完了したので、いよいよデータをクエリしてみましょう!
各 borough は、異なる数のタクシーゾーンで構成されています。
2 つのテーブルを結合するクエリを作成し、各 borough で乗車した乗車記録数と、タクシーゾーンあたりの乗車記録数を調べます。
マンハッタンとクイーンズのタクシーゾーン数は同じですが、マンハッタンでは乗車記録数が14倍以上です。
%%sql マジックと同じ行で --save パラメータを使用すると、クエリを保存できます。
--no-execute パラメータを指定すると、クエリの実行をスキップできます。
保存クエリを実行すると、実行前に共通テーブル式 (CTE) に変換されます。
次のクエリでは、平均チップ額が最も高い地区を算出します。
上位のエントリは乗車記録数がごく少ない地域のため、1回の高額な乗車でも平均が大きく偏ります。
これらを除外しましょう。
クエリではパラメータも使用できます。
パラメータは通常の変数です。
次に、クエリ内で {{variable}} 構文を使用できます。
次のクエリは、乗車記録数が 10,000 回を超える地域のうち、平均チップ額が最も高い地域を検索します。
空港から市内への長距離送迎では、チップ額が積み上がるため、他を大きく引き離して最も多くなります。
JupySQL には、限定的ではありますが、グラフ作成機能もあります。
箱ひげ図やヒストグラムを作成できます。
ここではヒストグラムを作成しますが、その前に、まず20マイル未満の各乗車記録の距離を返すクエリを書いて (保存して) おきましょう。
これを使って、各距離バケットに該当する乗車記録数を数えるヒストグラムを作成できます。
次に、以下を実行してヒストグラムを作成します。
ほとんどの乗車記録は1〜3マイルと短く、空港へ向かう乗車記録は長距離側に裾を引いています。