見出し画像

pydeckを使ってみた。

こんにちは。しげまつです。
ブロスタAIは環境に反映されるまでの反応が遅くて「ん~~~~~~~~~~~。」となってます。
今回はpydeckやってみるかーーと思ってpydeckのコード理解して実行してみました。


import pydeck as pdk
import pandas as pd
GREAT_CIRCLE_LAYER_DATA = "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/flights.json"  # noqa

df = pd.read_json(GREAT_CIRCLE_LAYER_DATA)

# Use pandas to prepare data for tooltip
df["from_name"] = df["from"].apply(lambda f: f["name"])
df["to_name"] = df["to"].apply(lambda t: t["name"])

# Define a layer to display on a map
layer = pdk.Layer(
    "GreatCircleLayer",
    df,
    pickable=True,
    get_stroke_width=12,
    get_source_position="from.coordinates",
    get_target_position="to.coordinates",
    get_source_color=[64, 255, 0],
    get_target_color=[0, 128, 200],
    auto_highlight=True,
)

# Set the viewport location
view_state = pdk.ViewState(latitude=50, longitude=-40, zoom=1, bearing=0, pitch=0)

# Render
r = pdk.Deck(
    layers=[layer],
    initial_view_state=view_state,
    tooltip={"text": "{from_name} to {to_name}"},
)
r.picking_radius = 10

r.to_html("great_circle_layer.html")

上の公式からコードを拝借。ではこのコードを理解していこう。

import pydeck as pdk
import pandas as pd
GREAT_CIRCLE_LAYER_DATA = "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/flights.json"  # noqa

df = pd.read_json(GREAT_CIRCLE_LAYER_DATA)

ここまでは簡単。
pydeckとpandasをimport してデータ読み込んだだけ。

dfの中身

処理前
df["from_name"] = df["from"].apply(lambda f: f["name"])
df["to_name"] = df["to"].apply(lambda t: t["name"])

これはdfのfromとtoの名前を取り出して新しいカラムとして追加してる。

処理後
layer = pdk.Layer(
    "GreatCircleLayer",
    df,
    pickable=True,
    get_stroke_width=12,
    get_source_position="from.coordinates",
    get_target_position="to.coordinates",
    get_source_color=[64, 255, 0],
    get_target_color=[0, 128, 200],
    auto_highlight=True,
)

なんかいろいろやってるけど、dfと get_source_position="from.coordinates", get_target_position="to.coordinates",を理解すればよい。ほかのところは色などを指定している。

・dfはdf使いますよーって指定しているだけ。
・get_source_position="from.coordinates"は書き換えるとfrom["coordinates"]
 出発地点の緯度経度を指定している
・get_target_position="to.coordinates"上と一緒でこっちは目的地の緯度経度 
 を指定している。

view_state = pdk.ViewState(latitude=50, longitude=-40, zoom=1, bearing=0, pitch=0)

vies_stateは地図出したとの初期位置の設定。

r = pdk.Deck(
    layers=[layer],
    initial_view_state=view_state,
    tooltip={"text": "{from_name} to {to_name}"},
)

何個かうえでしていたlayerとview_state使ってpydeck使う設定。
これしないと地図は出てこない。

r.picking_radius = 10

r.to_html("great_circle_layer.html")

r.picking_radiusはわからない。なくても動くからスルー。
r.to_htmlで表示。htmlとして保存。

そしたあら不思議。

簡単でした。緯度経度さえあればこれが作れます。
位置情報データほしいね。


今回はこんな感じでさらば。

この記事が気に入ったらサポートをしてみませんか?