pointInPolygon 関数でドイツ国内の基地局数を集計したうえで、ClickHouse Agents を使ってその結果を地図上に可視化します。
前提条件
このチュートリアルには、以下が必要です。- ClickHouse Cloud アカウント (サインアップ時に 300 ドル分の無料クレジットが付与されます)
- ClickHouse Cloud サービス
サンプルデータを読み込む
このチュートリアルで使用するデータセットは、世界最大の基地局オープンデータベースである から提供されています。
2021 年時点で、世界中の基地局に関する数千万件のレコードを収録しており、各レコードには地理座標のほか、国コードやネットワークなどのメタデータが含まれています。
- ClickHouse Cloud の左側のメニューにあるドロップダウンから、対象のサービスを選択します
- Data sources を選択します
- Add sample data カードをクリックします
- Cell Towers (1.1 GB) データセットを選択します
- 宛先データベースに
defaultを指定し、Import datasetをクリックします
スキーマを確認する
- 左側のメニューから SQL console を選択します
- ホームアイコンの横にある + タブをクリックして、新しいクエリを作成します
- SQL エディタに次のクエリを入力し、Run をクリックします。
lon と lat で表されます。基本的なクエリを実行する
次のクエリを実行して、種類別の基地局数を確認します。次に、モバイル国コード (MCC) ごとの基地局数を確認します。基地局の数が最も多い国の MCC は 310、262、250 であることがわかります。
Dictionary を使用すると、数値の Dictionary を作成したので、これを使用して、同じリストに MCC と並べて国名も返せるようになりました。
mcc カラム値を国名に置き換えられます。Query
Response
地理空間データを取り込む
特定の地理的範囲内に基地局がいくつあるかを知りたい場合もあるでしょう。
ClickHouse には、次に、ドイツ (本土) の輪郭を表す座標をテーブルに挿入します。これで、
pointInPolygon 関数をはじめ、このようなユースケースに役立つ Geo 関数が数多く用意されています。例として、ドイツ国内にある基地局の数を調べたい場合を考えてみましょう。
polygon 型のカラムを 1 つだけ持つ germany という名前のテーブルを作成します。pointInPolygon 関数を使って、ドイツ本土にある基地局の数を確認できます。Query
Response
任意:ClickHouse Agents を使ってデータを可視化する
次に、このデータを可視化してみましょう。以下は任意の実行例です。ClickHouse Agents はモデル駆動型のベータ機能であるため、計画、ツールのトレース、出力は実行ごとに異なる場合があります。
ClickHouse Agents を使用すると、SQL やオーケストレーションロジックを自分で記述しなくても、会話を通じて ClickHouse のデータを手軽にクエリ・探索できます。
エージェントはユーザーの意図を解釈して手順を計画し、設定済みのツールを呼び出して結果を返します。左側メニューの下部にある組織名の下の ClickHouse agents をクリックして、ClickHouse Agents を開きます。
チャットから ClickHouse agent にメッセージを送信できます。
「Visualize cell towers within Germany on a map using the
default.cell_towers and default.germany tables」と入力して送信します。
ある実行例では、エージェントは次の手順を実行しました。mcc_country_dictでドイツの Mobile Country Code を検索し、MCC が262であることを特定しました。pointInPolygonを使用して、germanyのポリゴン内にあるmcc = 262の基地局を数え、2,588,635 基という結果を得ました。追加のmccフィルタによって、ポリゴン内にあっても他国に登録されている基地局が除外されるため、前述の件数よりわずかに少なくなっています。- 260 万個の点を個別にプロットするのではなく、
lonとlatを丸めて基地局を 0.1° × 0.1° のグリッドに集約し、4,821 個のセルを生成しました。さらに、セルごとの件数の合計がちょうど 2,588,635 になることを確認し、ビニングの過程で欠落や二重カウントが発生していないことを検証しました。 germanyからポリゴンを取得してグリッド上に輪郭として描画し、対数カラースケールを用いることで、密度の高い都市部のセルと疎らな農村部のセルの両方が見えるようにしました。
次のステップ
このチュートリアルでは、OpenCelliD の基地局データセットを ClickHouse Cloud に読み込み、そのスキーマを確認したうえで、数千万行を対象に集計クエリを実行しました。 さらに、Dictionary を作成して数値のmcc カラムに国名を付与し、ドイツの輪郭をポリゴンとして保存して、pointInPolygon でその内部にある基地局の数をカウントしました。
最後に、ClickHouse Agents を使用し、集計コードや描画コードを自分で書くことなく、その問いを密度マップとして可視化しました。
次のステップとして、以下のようなことを試してみてください。
- エージェントに追加で質問する。
LTEとGSMなどの無線方式によって密度がどう異なるか、あるいはNRの基地局が最も多い都市はどこかを尋ねてみてください。繰り返し使うプロンプトはプロンプトライブラリに保存できます。また、エージェントビルダーで特定用途向けのエージェントを構築することもできます。 - 国ごとに比較する。 他の国のポリゴンを挿入し、それぞれに対して同じ
pointInPolygonクエリを実行します。作成した Dictionary を使えば、結果に国名のラベルを付けられます。 - H3 や geohash で基地局を集計する。 エージェントは単純な丸め処理によるグリッドを使用しました。ClickHouse には H3 関数や geohash 関数も用意されています。これらは階層的なセルを生成するため、ズーム可能なマップに適しています。
- 他のデータセットを探索する。 NYC タクシーデータセットにも乗車地点と降車地点の座標が含まれています。そのほかにも、サンプルデータセットの一覧に多数のデータセットが掲載されています。