Pydeck, trực quan hóa dữ liệu Python. Lớp cột trên bản đồ Carto.

Feb 18 2023
Tôi sẽ khám phá khả năng trực quan hóa dữ liệu địa lý của deck.gl với thư viện Python và pandas.

Tôi sẽ khám phá khả năng trực quan hóa dữ liệu địa lý của deck.gl với thư viện Python và pandas. Deck.gl là khung trực quan hóa dựa trên WebGL dành cho các bộ dữ liệu quy mô lớn và pydeck là kết xuất không gian quy mô lớn cho Python (được cung cấp bởi deck.gl).

Đối với dự án này, tôi đang sử dụng Jupyter Notebook — ứng dụng web gốc để tạo và chia sẻ tài liệu tính toán. Nó cung cấp trải nghiệm đơn giản, sắp xếp hợp lý, lấy tài liệu làm trung tâm.

Thư viện Python chính cho dự án này là pydeck. Theo mặc định, pydeck 0.6 cung cấp các ô bản đồ cơ sở thông qua Carto. Bạn có thể tùy chọn sử dụng khóa API Mapbox bằng cách đăng ký Mapbox. Nhưng, bản đồ Carto là đủ cho dự án này.

Hãy nhập pydeck qua pip:

pip install pydeck

  1. Chúng tôi bắt đầu bằng cách nhập các thư viện Python cần thiết cho các hoạt động của mình: pandas, pydeck, os và tùy chọn matplotlib.pyplot (tôi có thể phát triển bài đăng này trong tương lai)
  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')