Alteryxウィークリーチャレンジ#13中級やってみた!
アルテリックス?アルタリクス?どちらでもわたしは一向にかまわんッッ!の國崎です。
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種類のデータが用意されていました。
ゴール
今回のゴールは以下3つです。
1) ルートを示す線
2) ルートの始点と終点を識別するポイント
3) 各参加者の現在位置を示すポイント
レッツチャレンジ!
ルートを示す線
ソートでポイントのレコードを並び替え
ソートを使って「ルートに沿ったポイントの緯度/経度」をnode_orderの昇順に並び替えます。
ポイント作成で座標を出す
ポリビルドで線をつける
今回のスタートからゴールまでのルートがマップ上に可視化されました。
ルートの始点と終点を識別するポイント
フィルターで座標データを絞る
先ほどポイント作成で出した座標にフィルターをつなげてルートの始点と終点に絞った関数を書きます。
レコード数は結果ウィンドウから7393行だとわかるので以下の関数式を書いてみます。
[node_order] = 1 or [node_order] = 7393
各参加者の現在位置を示すポイント
結合で参加者のデータをつなぐ
結合を使って「参加者に関する情報」と「各参加者の1日に進んだマイル」をつなぎます。
結合の出力を集計につなぐ
結合の出力Jを集計につなぎ参加者毎の現時点での走行距離を出します。
結合のLと集計をユニオンでつなぐ
ユニオンを使って結合のLと先ほど集計で出したデータをつなぎます。
なぜこんなことをするかというと、実は参加メンバーの中に走行距離が0のメンバーがいるからですね。
結合のJにはそのメンバーが含まれなかったのでここでつなげておきます。
ついでにクレンジングでNullを0にし、セレクトで余計なカラムを消しておきます。
「ルートに沿ったポイントの緯度/経度」から各累積距離を出す
ここで扱うデータを最初に触った「ルートに沿ったポイントの緯度/経度」に切り替えます。
上の【ポイント作成で座標を出す】に複数行フォーミュラをつなげます。
以下式を入力し各座標の次の行先になる座標を新たにカラムで追加します。
[Row-1:Centroid]
フィールド付加で累計とセレクトの各出力をつなぐ
先ほどセレクトで出力したデータと累計で出したデータをフィールド付加でつなぎます。
フィルターで余分に出来たレコードを削る
フィールド付加で増えた余分なレコードをフィルターで削ります。
カスタムフィルターで以下式を入れます。
[Miles to Date] <= [Sum_Miles]
これで各レコード毎の「参加者の走行距離以下の累計距離」のみ残します。
集計で必要なレコードのみ残す
集計を使い参加者の走行距離に最も近い累計距離のレコードを出します。
2つの結合を使い必要なカラムをつける
結合を2つ使って今回のゴールに必要なカラムをつけていきます。
まず1つめが先ほど集計で出したデータに、累計で出していたデータを結合します。
これで各レコードの位置情報がわかるようになりました。
ぶっちゃけ想定されているゴールである位置情報を求めるだけなら、これで完了ですが、模範解答だと他のカラムをついてたので、2つめの結合でそのデータをつけます。
「参加者に関する情報」を引っ張ってきて、上記で出したデータに結合します。
ソートで並び替えて完成
最後にソートで走行距離順に並び替えて完成です。
全12参加者の現在位置が可視化されました。
まとめ
こんな感じでAlteryx#13をやってみました。
パトラッシュ、僕はもう疲れたよ。
本日はこの辺で。