【365日後にPredictive Master】大企業の平社員がAlteryx Weekly Challengeに挑む #008

## はじめに
こんにちは、積立お兄さんです。
大企業新卒３年目のAlteryx初心者です。
ひょんなことから「**365日後にPredictive Masterになる！**」という目標を掲げて、公式のWeekly Challengeにコツコツ挑戦しています。

この記事では、Alteryx歴3か月の平社員が、実務で生かせそうなノーコード分析力をどうやって身につけていくかを記録＆共有していきます。

- 目標：ETLツールを自在に使いこなせるようになる
- 対象読者：Alteryxを始めたばかりの方/Weekly Challengeの解説が欲しい方

---

## 今回のチャレンジ：Weekly Challenge #008

先に白状いたしますが、今回のチャレンジは自力では解けませんでした。
ACEの方のものをもろパクリして作成しております。ですが、内容はしっかりと理解して作成したため、その解説を行っていこうと思います。

- タイトル：[Weekly Challenge #008：三角、三角、三角.....] [LINK](https://community.alteryx.com/t5/%E3%82%A6%E3%82%A3%E3%82%AF%E3%83%AA%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA/%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8-8-%E4%B8%89%E8%A7%92-%E4%B8%89%E8%A7%92-%E4%B8%89%E8%A7%92/td-p/405561)
- レベル感：中級者向け（個人的には上級）
- ゴール：入力では16点の座標が準備されている。これを使用して、516個のユニークな三角形を空間ツールを使用して描画する。
- 入力
<img width="250" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/d2877270-20e5-4d02-a1cc-d6bbaed24248.png
">
- 出力
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/28373c46-4d0a-4984-8a7f-2ef271717bba.png
">
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/42b643f1-f7b9-46e7-bcbd-70aa709cca19.png
">

---

## 解いた流れと使用ツール

### ワークフロー全体

<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/f29960ca-a5dd-49ba-9ba9-8674f55b7f5d.png
">

### 処理の手順と解説
1. **レコードIDツール**　：各座標にラベル付の用途でindexの列を作成。
1. **フィールド付加ツール**：三角形を構成する３点の内、２点目を選択する。各１点目に対して２点目１６点（１６＊１６＝２５６）の合計２５６パターンの行が完成する。
1. **フィルターツール**：フィールド付加ツールの出力段階では、２つの点が同じ点のパターンが存在してしまう。こうなると三角形が作成できないので、それらを除外する必要がある。レコードIDツールでindexを付与しているため、各行に対して同じ点を付与しないように[RecordID_1] < [Record_2]としている。こうすることで、点１と点２、点２と点３のように２点が重複しないようになる。
1. **フィールド付加ツール**：２と同様の考えで３点目を選択する。
1. **フィルターツール**　：３と同様の考えで、各点が重複しないようにする。
1. **フィルターツール**：重複のない３点の座標が手に入ったが、まだ考えるべきことがある。それは、３点すべてが１直線上にある場合に三角形が作成できないという点である。よって、３点の座標を用いて３角形の面積を計算し、誤差含めて0.001より多きもののみ採用するようにした。

計算の公式は以下のものを使用している（引用元：https://univ-juken.com/vector-sankakkei）
高校数学で学んだベクトルの計算です。忘れているなぁ...
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/c7abe3d6-0ba1-415f-9c31-a0ba39e5a1d5.png
">
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/18e7292e-22e8-4399-801c-95fc5231cc1f.png
">
7. **セレクトツール**：必要な列以外を消す。また、この後のフローで各列の値を結合するので、文字列型に変換しておく。
8. **フォーミュラツール**：以下のような形に変換する。
'{ "type": "Polygon", "coordinates": [ [ [' + [Longitude_1] +','+[Latitude_1]+'], ['+[Longitude_2]+','+[Latitude_2]+'],['+[Longitude_3]+','+[Latitude_3]+'], ['+[Longitude_1] +','+[Latitude_1]+'] ] ] }'

上記の式は、**GeoJSON形式**で三角形のポリゴンを記述している文字列を作成する式です。

✅ **GeoJSONとは？**
- 地理空間データを表すための**標準的なJSON形式**
- Alteryxでは、このGeoJSON文字列を ST_CreateSpatialObj() などでSpatialオブジェクトに変換可能です

✅ **各パーツの説明**
|  部分  |  意味  |
| ---- | ---- |
|  "type": "Polygon"  |  ジオメトリの種類 → 「ポリゴン（多角形）」  |
|  "coordinates": [[...]]  |  多角形の頂点の座標リスト  |
|  [Longitude_1], [Latitude_1]  |  1つ目の点（経度, 緯度）  |
|  [Longitude_2], [Latitude_2]  |  2つ目の点  |
|  [Longitude_3], [Latitude_3]  |  3つ目の点  |
|  [Longitude_1], [Latitude_1]（再度）  |  始点と同じ座標で終点を閉じる → ポリゴンの必須要件！  |

つまり、三角形の3点を指定し、始点と終点を一致させて1つのポリゴンを閉じている構造です。


9.　**セレクトツール**：８で作成した列をSpetialObj型に変換する。


---

## 詰まったポイントとその解決

- **問題１：そもそも描画ってどうやんの！？**
→ まずそもそもこれ。インタラクティブレッスンで、空間ツールを使用して描画する方法を見た気がするが、忘れてしまっていた。一方で、ACEの方のものを見るとGeoJSONを使用することで描画できる方法を見つけた。これの方が直感的で簡単な気がした（個人の感想）。
- **問題２：数学力の欠如**
→ 16点から三角形をたくさん作るときの考え方がわからなかった。これは単純に16点中3点を選んで結べばよい。ただ、１直線状の３点を除く必要がある。
また、ベクトルを用いた三角形の面積の公式は完全に忘れていた。高校数学勉強し直したくなったなぁ。
---

## 結果と出力確認
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658349/a2ad9c9b-7d38-4fe1-8631-c27350d7875f.png
">

→行が516行あるので、おそらく問題なくできているはず（数えるのは勘弁）。

---

## 今日の学び・振り返り

- **新しく覚えたツール**：フィールド付加ツール
- **新たな知識１**：フィールド付加ツールを使用するとかんたんに２つのデータを連結させることができる。ソースの方は繰り返しで連結させることができる。
- **新たな知識２**：GeoJSON形式で書いたものをSpetialOjb型に変換すると、図形を描画することができる。

---

## 次回予告
次は【Weekly Challenge #009】に挑戦予定！
図形を描画する方法を学べた。なかなか楽しかったが個人的には激むず。
自力でやられた方々すごいなぁ。

今日もお疲れ様でした！

---
## タグ
`Alteryx` `weekly Challenge` `データ分析` `Predictive Master` `365日チャレンジ` `ノーコード`