Pydeck、Python データ視覚化。Carto マップの列レイヤー。

Feb 18 2023
Python と pandas ライブラリを使用して、deck.gl の地理データ視覚化機能を検討します。

Python と pandas ライブラリを使用して、deck.gl の地理データ視覚化機能を検討します。Deck.gl は大規模なデータセット用の WebGL を利用した視覚化フレームワークであり、pydeckは Python 用の高スケール空間レンダリング (deck.gl を利用) です。

このプロジェクトでは、計算ドキュメントを作成および共有するためのオリジナルの Web アプリケーションであるJupyter Notebookを使用しています。シンプルで合理化されたドキュメント中心のエクスペリエンスを提供します。

このプロジェクトの主要な Python ライブラリはpydeck です。デフォルトでは、pydeck 0.6 は Carto を通じてベースマップ タイルを提供します。Mapbox に登録することで、必要に応じて Mapbox API キーを使用できます。ただし、このプロジェクトには Carto マップで十分です。

pip 経由で pydeck をインポートしましょう:

pip install pydeck

  1. まず、操作に必要な Python ライブラリ ( pandas、pydeck、os、およびオプションでmatplotlib.pyplot)をインポートします(この記事は将来開発する可能性があります)。
  2. import pandas as pd
    import pydeck as pdk
    from pydeck.types import String
    import matplotlib.pyplot as plt
    import os
    

    os.listdir() ## checking the current file composition of the folder
    df = pd.read_excel('stores.xlsx') ## reading .xlsx file to Pandas DataFrame
    df.set_index('Location Name') ## setting indexing to store's name
    
           
                    

    df.columns
    
    # output
    # Index(['Location Name', 'Address line 1', 'Address line 2', 'Address line 3',
    #    'City Name', 'Latitude', 'Longitude', 'Lat', 'Long', 'Postal Code',
    #      'Results'],
    #     dtype='object')
    

    df2 = df[['Location Name', 'City Name', 'Latitude', 'Longitude', 'Lat', 'Long', 'Postal Code', 'Results']]
    df2
    

df2["Long"] = df2["Long"].astype(float)
df2["Lat"] = df2["Lat"].astype(float)
df2

layer = pdk.Layer(
    'ColumnLayer',
    df2,
    get_position=['Long', 'Lat'],
    get_elevation=["Results"],
    auto_highlight=True,
    elevation_scale=5,
    pickable=True,
    extruded=True,
    get_radius=100,
    get_fill_color=["Results * 10", "Results", "Results * 40", 220],
    coverage=1
)

# Set the viewport location
view_state = pdk.ViewState(
    longitude=25.336900,
    latitude=54.734235,
    zoom=2,
    min_zoom=5,
    max_zoom=15,
    pitch=40.5,
    bearing=-27.36)

r = pdk.Deck(layers=[layer], initial_view_state=view_state)
r.to_html('stores.html')