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

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

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

Alteryxウィークリーチャレンジ#6をやってみたので、そちらの解説記事をご紹介します。
今回のチャレンジテーマは「#6:4月のクリプトアナリティクス」です。

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

お題

私たちは、次のトランスミッションを繰り返し受信しましたが、通信チャネルの信頼性がとても低くて解読不能でした! 各位置で最も頻度の高い文字をそれぞれの文字列で分析すれば、メッセージを再構築できると思います。

昨日、私たちは以下を受け取りました:

Htl2!
ce+lo
ve8lz
HDlcF
u8pho

私たちは、最初の列にある「H」を1番、そして次の列にある「e」を2番目に最も頻繁に受信したので、「Hello」というあいさつが送られたと考えていました。

次のメッセージの解読を手伝ってもらえますか?

引用元:#6:4月のクリプトアナリティクス

用意されたエクセルデータ

100行の文字列が配置されたデータになります。
Alteryx_6_1

ゴール

上のエクセルデータの各文字列ごとに使われている単語で最も多いものを抜き出しつなげる。
(ある言葉になっている)

レッツチャレンジ!

フォーミュラで各行の文字数を算出する

Alteryx_6_2

フォーミュラを使い以下の式を書いて今回の用意された各行の文字列が何文字かを把握します。

Length([data])

これを行う意図としては、この後に使う正規表現で何文字分の列に分割すればいいか把握するために行います。
今回の作業で各行ごとの文字数が算出されました。
Alteryx_6_3

ソートで最大の文字数を知る

Alteryx_6_4

ソートを使って、各行の中で最大数の文字数がどれくらいかを把握します。
フォーミュラで作られた文字数カラムの[length]を降順で並び替えます。
Alteryx_6_5

結果どの行も62文字であることがわかりました。
Alteryx_6_6

今回のデータだとすべての行が62文字のため意味のない作業になりましたが、仮に各行の最大数にばらつきがあった場合はこの作業が必要になります。

正規表現で1文字毎のカラムを出力

Alteryx_6_7

正規表現で「.」を入力し各文字ごとのカラムを出力します。
出力方法は「トークン化」で、列に分割で今回のデータの最大文字数である「62」を指定します。
Alteryx_6_8

実行するとlength以降の文字列で各文字ごとのカラムが出力されました。
Alteryx_6_9

集計で各カラムごとの最頻度の文字を抽出する

Alteryx_6_10

集計を使い各カラムで最も使われている文字を抽出します。
今回の場合だとdata1~data62が各文字ごとに区切ったカラムなので、それぞれアクションで最頻値を指定して追加します。
Alteryx_6_11

実行すると各カラムごとの最頻度の文字が行に出力されました。
Alteryx_6_12

転置で行を列の値に転換する

Alteryx_6_13

転置を使って行で出力された各カラムのデータを1つのカラムに転換します。
データ列で出力されたカラム[Mode_data1~Mode_data62]までにチェックを入れて実行します。
Alteryx_6_14

行で入っていた各値が列の値に変換されました。
Alteryx_6_15

集計を再度使い全ての値を連結する

Alteryx_6_16

集計を再度使い、出力された列の値を全て連結します。
注意点としては、この時の区切り記号はナシにします。
Alteryx_6_17

実行すると今回のゴールとなる言葉が出てきました。
Alteryx_6_18

Alteryx_6_19

You have successfully solved this challenge! CONGRATULATIONS!
あなたはこの課題を見事に解決した!おめでとう

シャレオツ。

まとめ

こんな感じでAlteryx#6をやってみました。
他の方の解答を見ると、やり方が色々あるみたいで見比べてみると面白い発見がありそうな気もします。

本日はこの辺で。