はじめに
こんにちは、y.koです。【初心者向けAlteryx】第2回です!今回も前回に引き続きAlteryx Weekly Challengeを取り上げていきたいと思います!
今回は日本語版、
チャレンジ#71:クジラのいるところ(Whale→Will:意思のあるところ)に道は開ける ~Where There’s a Whale There’s a Way ~
です!ダジャレっぽくかけてるの個人的にお気に入りです笑
問題および解答
データセット<クジラ移動データ.xlsx><クジラ_群れ.xlsx>を使用して、クジラの各群れが毎年移動するために泳いだ距離の合計(キロメートル)を見つけ、その群れのクジラが泳いだ距離の平均(キロメートル)を求めてください(群れの合計移動距離/クジラの頭数)。次に、クジラの種類ごと、年ごとに、平均移動距離(キロメートル)が最も長い群れを見つけてください。
そして、以下が解答の一例です。
自分自身で組み立てたものであるため公式サイトに載ってある解答例と異なっていますが、最終的な答えは同じですので参考にしてみてください!(もっと効率的な方法があればご教示願いたいです…)
解説
この問題はデータ量が多い割には取り掛かりやすい問題ではないかと思います。前回同様考え方のフローを下に示してみました。
では詳しくプロセスを見ていきましょう。便宜上下図のようにツールそれぞれに番号をつけ、それぞれの意味で表しました。
① クジラ移動データ.xlsxには4つのフィールドがあるが、全部String型(文字列型)になっている。しかし、移動距離を計算するときに用いる"Kilometers"というフィールドは、数値型である必要がある(文字列型のままだと四則演算ができない)。そのため、セレクトツールを用いて、"Kilometers"フィールドをint型にする。実際のデータも見つつ、サイズが足らなくならないように今回はint32にした。
② ①で型変換したデータとクジラ_群れ.xlsxを結合する。
③ ②で結合したものと手入力データとして既に存在してあるクジラ_種類を結合する。このとき、重複しているフィールドは取り除く。
④ 💡この問題における一番のポイント!💡
この問題では群の比較が多いため、サマライズツールを用いて群固有のID(Pod_ID)やクジラの種類でグループ化する。また年ごとの比較があるため、年もグループ化を行う。この3つの条件でグルーピングされたそれぞれのグループに属する全クジラの合計移動距離が"Kilometers"のフィールドでSumアクションとして算出される。また、クジラ一匹ずつそれぞれに固有のIDがあるため、一意のレコード数を数えることにより、そのグループに属するクジラの頭数がわかる。
このようにして各群の毎年の合計移動距離および各群のクジラの頭数が得られた。
⑤ [合計移動距離]/[頭数]を計算することにより、平均移動距離を求めることができる。ここで注意事項として、デフォルトでは新しく作成した平均移動距離のフィールドはString型であるが、数値として後の比較ができず、また必ず割り切れるとは限らず小数点以降も発生するため、浮動小数点数型であるdouble型もしくは小数のfloat型に変更する。
⑥ データ加工は⑤までで全て終わらすことができたため、あとは平均移動距離が最も長い群れを見つけるためのソーティングである。
平均移動距離のフィールドが降順となるように並べ、↓
⑦
クジラの種類ごと年ごとであるためグループとして残すように該当のカラムにチェックを入れて、最初の1行が平均移動距離が最も長い群れとなる。
④で用いたサマライズツールのアクションにおいて、似つかわしく紛らわしく感じるものがあります。
集計オプションのCountとCountDistinctです。英語名を日本語で説明すると、
Count=レコード数を数える
CountDistinct=グループ内の一意のレコード数を数える
一意とは???????と最初私はかなり頭を抱えていたので、具体例を出してみましょう。次のリストがあるとします。
- アップル
- アップル
- オレンジ
- バナナ
このリストをCountで数えると4つの項目があるため4個という結果が返されます。一方CountDistinctで数えると、"アップル"が2つの重複しているため3個という結果が返されます。
この問題では、クジラの頭数を数えるためにCountDistinctを使いました。クジラ固有のIDが重複していたら、それって同じクジラということですよね!
おわりに
以上チャレンジ#71の解説をしてみました!
ある程度流れがわかったところだと思いますので、ツールの使い方や関数の紹介等も今後ブログでもっと詳しく一緒に学んでいけたらと思います!
最後まで読んでくださりありがとうございました、次回もお楽しみに!
y.ko