「H3とPlotlyを使用してヘキサゴンマップを構築する:包括的なチュートリアル」
「包括的なチュートリアル:H3とPlotlyを使ってヘキサゴンマップを構築する方法」
データ分析におけるヘキサゴンマップの可能性を解き放つ
通常、異なる地域間の変数をコロプレスマップを使用して視覚化する場合、一般的に知られている行政ジオメトリを使用します。たとえば、ヨーロッパ全体の失業率を見たい場合、各国内の各州ごとに可視化することができます。
ただし、行政地域は不規則でサイズが異なることが多いです。そのため、地域全体の任意の変数を可視化するための有用な代替手段は、それを分割するためにヘキサゴンを使用することです。利点には、地域間のバランスの取れた形状による比較の向上と、領域の改善されたカバレッジが含まれます。さらに、ヘキサゴンマップは視覚的な偏りを最小限に抑える利点があります。通常の行政境界とは異なり、ヘキサゴンマップは領域の均等な表現を提供するため、データの認識の歪みを防ぐことができます。
本記事では、Pythonを使用してヘキサゴンマップを作成する手順をステップバイステップで説明します。このために、マップ構築プロセスを効率化する2つのライブラリ、H3とPlotlyを使用します。
データ分析:バルセロナ市ホテルデータセット
本記事で使用するデータセットは、バルセロナ市のオープンデータポータルで提供されています。このオープンデータポータルでは、バルセロナ市に関する人口統計、経済、社会学のデータなどが自由にアクセスできます。 私たちが利用しているデータセットには、バルセロナのすべてのホテルの情報が含まれています。ファイルは以下のリンクからダウンロードできます。
- 「ChatGPT(GPT-4)および他の言語モデル向けの専門プロンプトの書き方」
- CI/CDパイプライン:Azure上のデータ処理アプリケーションのためのパート1:コンテナインスタンス
- 統計的推定と推論の初心者向け解説
バルセロナ市のホテル – Open Data Barcelona
バルセロナ市のホテルのリストと場所
opendata-ajuntament.barcelona.cat
ホテルの数は、ヘキサゴンマップ上で可視化する変数です。次のセクションでは、この可視化の作成方法をステップバイステップで説明します。
データの読み込みとクリーニング
ファイルをダウンロードした後、分析の最初のステップはデータの読み込みとクリーニングです。この場合、データセットには分析には関係のない多くの列が含まれており、それらは調査しません。具体的には、ホテルの名前、地理的な位置(緯度と経度)、場所に関連する属性(今回は使用しません)を選択します。これらの列を選択した後、より簡単な名前に変更し、データセットを可視化する準備が整います。
H3を使用したヘキサゴングリッド生成
ヘキサゴンマップを使用してデータを視覚化するためには、最初にグリッドを作成する必要があります。これを実現するために、Uberによって開発されたH3ライブラリを使用します。 get_hexagon_grid
関数は、GeoDataFrame
形式のヘキサゴングリッドを作成する責任を持ちます。まず、特定の場所(緯度
と経度
)でヘキサゴンを作成します。この場合、バルセロナの中心です。このヘキサゴンのサイズはresolution
パラメータで定義されます。その後、同じサイズの追加のヘキサゴンが中心のヘキサゴンを中心に同心円状に生成されます。作成する同心円状のリングの数はring_size
パラメータで決定されます。最後に、これらのヘキサゴンのコレクションをGeoDataFrame
に変換し、それぞれのヘキサゴンにH3ライブラリが提供するIDに対応する固有のIDが割り当てられます。
この記事では、六角形グリッドを構築するために使用される各機能の詳細には触れませんが、興味のある読者は、ライブラリのドキュメントを参照して詳細な理解を得ることができます。
H3 | H3
六角形の階層的なジオスペーシャルインデックスシステム
h3geo.org
以下のグラフは、resolution
とring_size
パラメータが作成されたグリッドにどのように影響を与えるかを示しています。 Resolution
は六角形のサイズを制御し、より高い解像度ほど小さな六角形が作成されます。一方、ring_size
パラメータは中央の六角形を中心に作成される同心のリングの数を制御します。言い換えれば、より大きなring_size
はより多くの同心円をもたらします。以下のグラフでは、すべてのプロットが同じ軸制限を持っています。観察できるように、同じエリアをカバーするために、より高い解像度を使用するには、より多くのリングが必要です。なぜなら、以前述べたように、作成されるすべての六角形は中央の六角形と同じサイズだからです。
選択したresolution
は、特定のエリア全体で表現したい変数の変動に依存します。変動が大きい場合は、より高いresolution
が考慮されます。この特定のケースでは、解像度9
を選択しました。さらに、ring_size
はカバーする目的の地域と以前に選択したresolution
に依存します。この具体的なケースでは、ring_size
を45
に設定することで、バルセロナ市全体をカバーするのに十分です。この結論に至るまでの詳細には触れませんが、一般的には、バルセロナ市のポリゴンの境界ボックスを取得し、そのエリアをカバーするために必要なリングの数を決定しました。
以下は、先述のパラメータとget_hexagon_grid
関数を使用して、六角形ネットワークをGeoDataFrame
の形で作成したものです。
上記のように、get_hexagon_grid
関数は、2つの列を持つGeoDataFrame
を提供します。最初の列はH3ライブラリによって各ポリゴンに割り当てられた固有のIDとして機能し、2番目の列には実際のポリゴンが含まれており、geometry
という名前が付けられています。
各ホテルをそれぞれの六角形に割り当てる
六角形グリッドを作成した後は、各ホテルを所属する六角形に割り当てる必要があります。 calculate_hexagon_ids
関数は、各ホテルが所属する六角形を計算し、この情報を格納するためのHexagon_ID
という新しい列を作成します。
今や、すべてのホテルのデータセットには、各ホテルが位置する六角形に関する情報も含まれています。この情報は、Hexagon_ID
列にアルファベット数字の識別子として表示されます。
可視化する変数に基づいたデータのグループ化
六角形のIDが割り当てられた後、表示したいデータを計算します。この特定のケースでは、各六角形内のホテルの数を表示したいと考えています。これを実現するために、Hexagon_ID
でのグループ化とcount
操作を行います。さらに、各グループ内のホテル名を表示するホバー機能を実装したいと考えています。これを実現するために、グループ化のためにすべてのホテル名を結合する操作を行います。ホバー表示のテキストを定義するために、PlotlyはHTMLを使用するため、結合の際にHTMLの<br>
タグを使用します。
上記のように、グループ化されたデータフレームには3つの列があります:(1) Hexagon_ID
、ユニークな六角形の識別子を含んでいます。(2) Count
、その六角形内のホテルの数を保持しています。(3) Hotels
、その六角形内のホテルのリストを含んでいます。
データの可視化: バルセロナのホテルの六角形を用いた地図的表現
データをグループ化した後、最後のステップであるPlotlyを使用して六角形の地図を作成することができます。
create_choropleth_map
関数は、グループ化されたデータセットと各六角形のジオメトリを含むデータセットを処理し、六角形の地図を生成します。この地図を使用すると、市内のホテルの集中度が高い地域を視覚化することができます。
地図を作成するためには、Plotly Expressで利用可能なchoropleth_mapbox
関数を使用します。この関数は、定義されたジオメトリ(この場合、作成された六角形のセット)を持つ地図を生成し、ユーザーが選択した連続的なカラースケールに従って色を塗ります。六角形の一つにマウスを重ねると、その六角形内にあるホテルのリストを表示することができます。
この場合、背景地図にはcarto-positron
が使用されていますが、このパラメータは都市の通りや興味のある場所の識別をより良くするために、open-street-map
などの異なるマップスタイルを簡単に調整することができます。さらに、異なるカラースケールを利用することもできます。前の場合ではViridis
カラースケールを使用しましたが、今回の場合はReds
カラースケールを使用しています。
この地図はインタラクティブであり、興味のある地域にズームインすることができます。赤みがかった地域にズームインすると明らかになるように、バルセロナのほとんどのホテルはプラサ・デ・カタルーニャ周辺に位置しています。
まとめ
行政区域を用いたコロプレス地図は、地理的な領域内で変数がどのように分布しているかを視覚化する有用な手段です。ただし、不規則な形状と大きさの行政区域のため、変数の分布のバイアスが生じるというデメリットがあります。そのため、規則的な幾何学的形状の六角形マップの使用は、領域全体での分布を分析するための非常に有用な代替手段となります。この記事では、Uber H3ライブラリを使用して六角形グリッドを作成し、Plotlyの可視化に使用してバルセロナのホテルの分布を表示する方法について詳しく説明しました。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles