Marimo ノートブックと chDB でデータを探索する
このガイドでは、chDB — ClickHouse をベースにした高速なインプロセス SQL OLAP エンジン — を利用して、Marimo ノートブック上で ClickHouse Cloud 上のデータセットを探索する方法を説明します。
前提条件:
- Python 3.8 以上
- 仮想環境
- 稼働中の ClickHouse Cloud サービスと、その接続情報
まだ ClickHouse Cloud アカウントをお持ちでない場合は、サインアップして トライアルを開始し、300ドル分の無料クレジットを入手できます。
このガイドで学べること:
- Marimo ノートブックから chDB を使って ClickHouse Cloud に接続する方法
- リモートデータセットに対してクエリを実行し、結果を Pandas の DataFrame に変換する方法
- Marimo 上で Plotly を使ってデータを可視化する方法
- 対話的なデータ探索のために、Marimo のリアクティブな実行モデルを活用する方法
ここでは、スターターデータセットの 1 つとして ClickHouse Cloud 上で利用可能な 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 は自動的に pp_complete テーブルを default データベース内に作成し、そのテーブルに 2,892 万行の価格データを投入します。
認証情報が漏洩する可能性を減らすため、ClickHouse Cloud のユーザー名とパスワードをローカルマシンの環境変数として登録することをお勧めします。ターミナルから次のコマンドを実行して、ユーザー名とパスワードを環境変数として追加します:
認証情報の設定
上記の環境変数は、ターミナルセッションの間だけ有効です。 永続的に設定するには、シェルの設定ファイルに追加してください。
Marimo のインストール
まず仮想環境を有効にします。 仮想環境を有効にした状態で、このガイドで使用する次のパッケージをインストールします。
次のコマンドで新しい Marimo ノートブックを作成します:
新しいブラウザーウィンドウが開き、localhost:2718 で Marimo インターフェースが表示されます。

Marimo ノートブックは純粋な Python ファイルとして保存されるため、バージョン管理や他者との共有が容易です。
依存関係のインストール
新しいセルで必要なパッケージをインポートします。
セルにマウスカーソルを合わせると、「+」記号の付いた2つの円が表示されます。 これらをクリックすると新しいセルを追加できます。
新しいセルを追加し、すべてが正しく設定されていることを確認するために、簡単なクエリを実行してください。
直前に実行したセルの下に、次のような結果が表示されるはずです。

データの探索
UK price paid データセットをセットアップし、Marimo ノートブック上で chDB が稼働していれば、データの探索を始めることができます。
首都ロンドンのような、UK の特定エリアにおける価格が時間とともにどのように変化したかを確認したいとします。
ClickHouse の remoteSecure 関数を使うと、ClickHouse Cloud からデータを簡単に取得できます。
chDB に対して、このデータを同一プロセス内で Pandas のデータフレームとして返すよう指示できます。これはデータを扱ううえで便利でなじみのある形式です。
ClickHouse Cloud データのクエリ実行
新しいセルを作成し、次のクエリを使用して ClickHouse Cloud サービスから UK price paid データを取得し、それを pandas.DataFrame に変換します。
上記のスニペットでは、chdb.query(query, "DataFrame") が指定したクエリを実行し、その結果を Pandas の DataFrame として出力します。
このクエリでは、remoteSecure 関数を使用して ClickHouse Cloud に接続しています。
remoteSecure 関数は、以下のパラメータを受け取ります:
- 接続文字列
- 使用するデータベース名とテーブル名
- ユーザー名
- パスワード
セキュリティのベストプラクティスとして、関数内でこれらを直接指定することも可能ではありますが、ユーザー名とパスワードのパラメータには環境変数を使用することを推奨します。
remoteSecure 関数は、リモートの ClickHouse Cloud サービスに接続し、クエリを実行して結果を返します。
データのサイズによっては、これに数秒かかる場合があります。
この例では、年ごとの平均価格を返し、town='LONDON' でフィルタリングしています。
結果は df という変数の DataFrame に保存されます。
データの可視化
データが扱い慣れた形式で利用可能になったので、ロンドンの不動産価格が時間とともにどのように変化したかを見ていきます。
Marimo は、Plotly のようなインタラクティブなプロットライブラリと特に相性良く動作します。 新しいセルで、インタラクティブなチャートを作成します:
おそらく予想どおり、ロンドンの不動産価格は時間の経過とともに大幅に上昇しています。

Marimo の大きな強みの 1 つは、そのリアクティブな実行モデルです。さまざまな町を動的に選択できるインタラクティブなウィジェットを作成しましょう。
インタラクティブな町の選択
新しいセルで、さまざまな町を選択するためのドロップダウンを作成します。
別のセルで、町の選択に応じて反応するクエリを作成します。ドロップダウンを変更すると、このセルは自動的に再実行されます。
次に、町を変更すると自動的に更新されるチャートを作成します。 チャートを動的データフレームの上に移動し、ドロップダウンを含むセルの直下に表示されるようにします。
ドロップダウンから町を選択すると、グラフが動的に更新されるようになりました。

インタラクティブな箱ひげ図で価格分布を探索する
ロンドンの物件価格について、年ごとの分布を調べて、データをさらに深掘りしてみましょう。 箱ひげ図を使うと、中央値や四分位数、外れ値を確認でき、単なる平均価格よりもはるかに深い理解が得られます。 まず、異なる年をインタラクティブに切り替えて探索できるように、年を選択するスライダーを作成します。
新しいセルに、次のコードを追加します。
では、選択した年の各物件の価格をクエリしてみましょう。 ここでは集計は行わない点に注意してください。分布を作成するために、すべての個々のトランザクションが必要です。
セルの右上にあるオプションボタンをクリックすると、 コードを非表示にできます。 スライダーを動かすと、Marimo のリアクティブ実行機能によりプロットが自動的に更新されます。
