Alteryxウィークリーチャレンジ#13中級やってみた!

全てのAlteryxウィークリーチャレンジャーに捧ぐ。#13の解説です。
2024.01.29

アルテリックス?アルタリクス?どちらでもわたしは一向にかまわんッッ!の國崎です。

Alteryxウィークリーチャレンジ#13をやってみたので、そちらの解説記事をご紹介します。
今回のチャレンジテーマは「#13: Inspire 2019 まで 500マイルズ」です。

今回のチャレンジでやること

お題

Alteryx Inspire 2019 まで, 何人かの同僚と私はウォーキングチャレンジをしています。私たちは(仮想上ですが)ミシシッピー州ナチェズからナチェズ・トレース・パークウェイ(https://www.nps.gov/natr/index.htm)に沿ってテネシー州、ナッシュビルまでの448 マイルズを歩いています。1月から開始して1日にウォーキング、ランニング、自転車などで3マイルずつ進んでInspireに間に合うようにナッシュビルに到着するのが目標です!

ルートに沿って現在のポジションを表示することで、進捗状況を表示したいと思います。

課題: 以下を含むマップを作成しましょう:
1) ルートを示す線
2) ルートの始点と終点を識別するポイント
3) 各参加者の現在位置を示すポイント。参加者の位置は、完了したマイル数に最も近い (ただし448 マイルズ以下) ノードです。

* natchez_trace_coordinates yxdb には、ルートに沿ったポイントの緯度/経度が含まれています。
* Participant List には参加者に関する情報が含まれています。
* Activity Log には、各参加者の1日に進んだマイルが含まれています。

ルートは Node coordinate data © OpenStreetMap contributors (https://www.openstreetmap.org/), および OSRM (http://project-osrm.org/)を使用して作成されました。両方のデータソースは以下の場所にあるオープンデータベースライセンスの下で利用可能です。 http://opendatacommons.org/licenses/odbl/1.0/

データベースの個々のコンテンツの権利は、データベースコンテンツライセンスの下でライセンスされています: http://opendatacommons.org/licenses/dbcl/1.0/

引用元:#13: Inspire 2019 まで 500マイルズ

用意されたデータ

今回は以下3種類のデータが用意されていました。

1.ルートに沿ったポイントの緯度/経度
Alteryx_13_1

2.参加者に関する情報
Alteryx_13_2

3.各参加者の1日に進んだマイル
Alteryx_13_3

ゴール

今回のゴールは以下3つです。

1) ルートを示す線
2) ルートの始点と終点を識別するポイント
3) 各参加者の現在位置を示すポイント

レッツチャレンジ!

ルートを示す線

ソートでポイントのレコードを並び替え

Alteryx_13_4

ソートを使って「ルートに沿ったポイントの緯度/経度」をnode_orderの昇順に並び替えます。
Alteryx_13_5

これでバラバラだったデータが登録順になりました。
Alteryx_13_6

ポイント作成で座標を出す

Alteryx_13_7

ポイント作成をつなげて座標データを出します。
Alteryx_13_8

ポリビルドで線をつける

Alteryx_13_9

ポリビルドをつなげて座標データをつなげた線を出します。
Alteryx_13_10

今回のスタートからゴールまでのルートがマップ上に可視化されました。
Alteryx_13_11

ルートの始点と終点を識別するポイント

フィルターで座標データを絞る

Alteryx_13_12

先ほどポイント作成で出した座標にフィルターをつなげてルートの始点と終点に絞った関数を書きます。
レコード数は結果ウィンドウから7393行だとわかるので以下の関数式を書いてみます。

[node_order] = 1 or [node_order] = 7393

始点と終点のポイントが可視化されました。
Alteryx_13_13

各参加者の現在位置を示すポイント

結合で参加者のデータをつなぐ

Alteryx_13_14

結合を使って「参加者に関する情報」と「各参加者の1日に進んだマイル」をつなぎます。

結合の出力を集計につなぐ

Alteryx_13_15

結合の出力Jを集計につなぎ参加者毎の現時点での走行距離を出します。
Alteryx_13_16

結合のLと集計をユニオンでつなぐ

Alteryx_13_17

ユニオンを使って結合のLと先ほど集計で出したデータをつなぎます。
なぜこんなことをするかというと、実は参加メンバーの中に走行距離が0のメンバーがいるからですね。
Alteryx_13_18

結合のJにはそのメンバーが含まれなかったのでここでつなげておきます。
ついでにクレンジングでNullを0にし、セレクトで余計なカラムを消しておきます。
Alteryx_13_19

「ルートに沿ったポイントの緯度/経度」から各累積距離を出す

ここで扱うデータを最初に触った「ルートに沿ったポイントの緯度/経度」に切り替えます。
上の【ポイント作成で座標を出す】複数行フォーミュラをつなげます。
Alteryx_13_20

以下式を入力し各座標の次の行先になる座標を新たにカラムで追加します。

[Row-1:Centroid]

距離をつなげて各座標につながる距離を出します。
Alteryx_13_21

累計をつなげて各距離の累積を出しました。
Alteryx_13_22

フィールド付加で累計とセレクトの各出力をつなぐ

Alteryx_13_23

先ほどセレクトで出力したデータと累計で出したデータをフィールド付加でつなぎます。

フィルターで余分に出来たレコードを削る

Alteryx_13_24

フィールド付加で増えた余分なレコードをフィルターで削ります。
カスタムフィルターで以下式を入れます。

[Miles to Date] <= [Sum_Miles]

これで各レコード毎の「参加者の走行距離以下の累計距離」のみ残します。

集計で必要なレコードのみ残す

Alteryx_13_25

集計を使い参加者の走行距離に最も近い累計距離のレコードを出します。
Alteryx_13_26

これで12レコードが残りました。
Alteryx_13_27

2つの結合を使い必要なカラムをつける

Alteryx_13_28

結合を2つ使って今回のゴールに必要なカラムをつけていきます。

まず1つめが先ほど集計で出したデータに、累計で出していたデータを結合します。
これで各レコードの位置情報がわかるようになりました。
Alteryx_13_29

ぶっちゃけ想定されているゴールである位置情報を求めるだけなら、これで完了ですが、模範解答だと他のカラムをついてたので、2つめの結合でそのデータをつけます。
「参加者に関する情報」を引っ張ってきて、上記で出したデータに結合します。
Alteryx_13_30

ソートで並び替えて完成

Alteryx_13_31

最後にソートで走行距離順に並び替えて完成です。
全12参加者の現在位置が可視化されました。
Alteryx_13_32

ついでに最終的なワークフローは以下になりました。
Alteryx_13_33

まとめ

こんな感じでAlteryx#13をやってみました。
パトラッシュ、僕はもう疲れたよ。

本日はこの辺で。