このガイドでは、ClickHouse を基盤とする高速なインプロセス SQL OLAP Engine である chDB を使って、Marimo ノートブックで ClickHouse Cloud 上のデータセットを探索する方法を学びます。
前提条件:
- Python 3.8 以上
- 仮想環境
- 稼働中の ClickHouse Cloud サービスと 接続情報
まだ ClickHouse Cloud アカウントをお持ちでない場合は、サインアップして
トライアルを開始し、300 ドル分の無料クレジットを受け取れます。
このガイドで学べること:
- chDB を使って Marimo ノートブックから ClickHouse Cloud に接続する
- リモートのデータセットにクエリを実行し、結果を Pandas DataFrame に変換する
- Marimo で Plotly を使ってデータを可視化する
- 対話的なデータ探索のために、Marimo のリアクティブな実行モデルを活用する
このガイドでは、ClickHouse Cloud でスターターデータセットの 1 つとして提供されている UK Property Price データセットを使用します。
このデータセットには、1995 年から 2024 年までに英国で住宅が売買された価格に関するデータが含まれています。
このデータセットを既存の ClickHouse Cloud サービスに追加するには、アカウント情報を使用して console.clickhouse.cloud にログインします。
左側のメニューで Data sources をクリックし、次に Predefined sample data をクリックします。
UK property price paid data (4GB) のカードで Get started を選択します。
次に Import dataset をクリックします。
ClickHouse は default データベースに pp_complete テーブルを自動的に作成し、2,892 万行の価格データを取り込みます。
認証情報が漏洩する可能性を低減するため、Cloud のユーザー名とパスワードをローカルマシンの環境変数として追加することを推奨します。
ターミナルで次のコマンドを実行し、ユーザー名とパスワードを環境変数として追加します。
上記の環境変数は、現在のターミナルセッション中のみ有効です。
永続的に設定するには、シェルの設定ファイルに追加してください。
次に、仮想環境を有効にします。
仮想環境内で、このガイドで使用する以下のパッケージをインストールします。
次のコマンドを実行して、新しい Marimo ノートブックを作成します。
localhost:2718 で Marimo インターフェイスを表示した新しいブラウザーウィンドウが開くはずです。
Marimo のノートブックは純粋な Python ファイルとして保存されるため、バージョン管理しやすく、他のユーザーとも簡単に共有できます。
新しいセルで必要なパッケージをインポートします。
セルにマウスポインターを合わせると、「+」記号が付いた2つの丸が表示されます。
これらをクリックすると、新しいセルを追加できます。
新しいセルを追加し、簡単なクエリを実行して、すべてが正しく設定されていることを確認してください。
先ほど実行したセルの下に、次のような結果が表示されます。
UK price paidデータをセットアップし、MarimoノートブックでchDBも動作するようになったので、さっそくデータを探索していきましょう。
たとえば、英国の特定の地域、具体的には首都ロンドンで、価格が時系列でどのように変化してきたかを確認したいとします。
ClickHouseのremoteSecure関数を使うと、ClickHouse Cloudから簡単にデータを取得できます。
また、chDBに指示して、このデータをインプロセスでPandas DataFrameとして返すこともできます。これは、データを扱う際の便利で使い慣れた方法です。
以下のクエリを含む新しいセルを作成し、ClickHouse Cloud サービスから英国の不動産取引価格データを取得して、pandas.DataFrame に変換します:
上のスニペットでは、chdb.query(query, "DataFrame") は指定したクエリを実行し、結果を Pandas DataFrame として出力します。
このクエリでは、ClickHouse Cloud に接続するために remoteSecure 関数を使用しています。
remoteSecure 関数は、次のパラメータを受け取ります。
- 接続文字列
- 使用するデータベース名とテーブル名
- ユーザー名
- パスワード
セキュリティのベストプラクティスとして、ユーザー名とパスワードのパラメータは関数内に直接指定するのではなく、環境変数を使用することを推奨します。ただし、必要に応じて直接指定することも可能です。
remoteSecure 関数は、リモートの ClickHouse Cloud サービスに接続し、クエリを実行して結果を返します。
データのサイズによっては、これに数秒かかる場合があります。
この例では、年ごとの平均価格を返し、town='LONDON' で絞り込んでいます。
その後、結果は df という変数に DataFrame として格納されます。
これでデータを見慣れた形で扱えるようになったので、ロンドンの不動産価格が時系列でどのように変化してきたのかを見ていきましょう。
Marimo は、Plotly のような対話型プロットライブラリとの相性が特に優れています。
新しいセルで、対話型チャートを作成します。
おそらく予想どおり、ロンドンの不動産価格は時間の経過とともに大幅に上昇しています。
Marimoの強みの1つは、リアクティブな実行モデルにあります。さまざまな町を動的に選択できるインタラクティブなウィジェットを作成してみましょう。
新しいセルで、別の町を選べるドロップダウンを作成します:
別のセルで、町の選択に連動するクエリを作成します。ドロップダウンを変更すると、このセルは自動的に再実行されます。
次に、町を変更すると自動的に更新されるチャートを作成します。
チャートは動的なDataFrameの上に移動して、
ドロップダウンのあるセルの下に表示されるようにできます。
これで、ドロップダウンから町を選ぶと、チャートが動的に更新されます。
ロンドンの不動産価格が年ごとにどのように分布しているかを見て、データをさらに詳しく掘り下げていきましょう。
箱ひげ図を使うと、中央値、四分位数、外れ値がわかるため、平均価格だけを見るよりもはるかに理解が深まります。
まずは、年ごとの違いをインタラクティブに確認できる年スライダーを作成します。
新しいセルに、次の内容を追加します:
では、選択した年の個々の物件価格をクエリしてみましょう。
ここでは集計は行いません。分布を作成するには、個々の取引データをすべて使いたいためです。
セルの右上にあるオプションボタンをクリックすると、
コードを非表示にできます。
スライダーを動かすと、Marimo のリアクティブ実行によって、プロットが自動的に更新されます。
このガイドでは、Marimo ノートブックを使って、chDB で ClickHouse Cloud 内のデータを探索する方法を説明しました。
UK Property Price データセットを例に、remoteSecure() 関数を使ってリモートの ClickHouse Cloud データにクエリを実行し、その結果を分析や可視化のために直接 Pandas の DataFrame に変換する方法を紹介しました。
chDB と Marimo のリアクティブな実行モデルにより、データサイエンティストは ClickHouse の強力な SQL 機能を、Pandas や Plotly などの使い慣れた Python ツールと組み合わせて活用できます。さらに、対話型ウィジェットと依存関係の自動追跡によって、探索的分析をより効率的かつ再現性高く進められます。