データサイエンス100本ノックをAlteryxで。45日目(解答)

100本ノック

このページは解答編です。

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-045: 顧客データ(customer.csv)の生年月日(birth_day)は日付型でデータを保有している。これをYYYYMMDD形式の文字列に変換し、顧客ID(customer_id)とともに10件表示せよ。

解答ワークフローは以下のようになります。

今回の問題は、日付型のデータを欲しい形に加工する問題となります。これを行うには日時ツールもしくはフォーミュラツール内の関数DateTimeFormatで行います。

ところで、元データはCSV形式となっているため、読み込んだ直後はすべて文字列型となっています。このままでは都合が悪いので、日付型に変更しましょう。

そもそも、Alteryxの日付型は「YYYY-MM-DD」という表記である必要があります。今回扱うフィールド「生年月日(birth_day)」については元々「YYYY-MM-DD」形式になっているため、セレクトツールでデータ型を変更するだけでOKです。つまり以下のように設定しましょう。

ここからが本番です。

日付ツールを使うケース

日付を扱う場合は、日付ツールが利用可能です。

日付ツールは、「日時型→テキスト型」「テキスト型→日時型」の双方向の変換が可能です。今回は、日時型からテキスト型の変換の機能を利用します。どちらを使うかは、設定の一番上の「変換するフォーマットを選択」のところで決めることができますが、その中でも「日付/時刻形式を文字列に変換する」を選択します。

それ以外は、変換元の日付型のフィールド(今回は「birth_day」)を選択し、さらに新しい列名を入力しましょう。言語設定は、言語に応じてよく使うパターンが異なるため、このプリセットを変更することができます(しかし、なぜか日本でよく使われるスラッシュ区切りがないのは不思議です)。

今回は、メジャーな形式であるためプリセットから「yyyyMMdd」を選択しましょう。ちなみに、プリセットにない場合は「カスタム」を選択します。カスタムを選択する場合は、以下のように設定します。

カスタムセッティングの場合、下側にある例、出力、というところにカスタム設定で行ったものがそのまま反映されるため、こちらを参考にしながら設定を行いましょう。ちなみに、書式はこちらから確認できますが、以下にサンプル含めてご紹介します。ちなみに、日付型→文字列型の場合の内容に限って記載しています。

カテゴリ書式説明サンプル(日本語)サンプル(英語)
yyyy年を 4 桁の数字で表記します。20222022
yy年を最後の 2 桁の数字で表記します。2222
M先頭に 0 を付けずに、月を 1 桁の数字で表記します。※英語版では機能しません1
MM 1 桁月の先頭に 0 を付けて、月を数字で表記します。0101
MMM月名を省略形で表記します。1月Jan
MMMM完全な名前で月名を表記します。1月January
Mon月名を 3 文字の省略形で表記します。1月Jan
Month月名で表記します。1月January
d1 桁の日の先頭に 0 を付けずに、日付を数字で表記します。※英語版では機能しません2
dd1 桁の日の先頭に 0 を付けて、日付を 2 桁の数字で表記します。0202
曜日day完全な名前で曜日を表記します。日曜日Sunday
dy曜日を 3 文字の省略形で表記します。Sun
EEEE完全な名前で曜日を表記します。日曜日Sunday

ちなみに、プリセットにある形式と同じ内容を書くと、強制的にプリセットが選択されます(アイコンを次にクリックしたときにはプリセットに変わっています)。

話を戻して、元のワークフローの話に戻りたいと思います。

ここであとは不要項目を削除して、最初の10件をサンプリングツールなどで取得すれば完了です。

フォーミュラツール使用の場合

次に、日付ツールではなくフォーミュラツールを使う方法をご紹介します。

フォーミュラツールを使う場合も、日付型の変更までは同様です。その後、フォーミュラツールのDateTimeFormat関数を使っていきます。設定としては以下のとおりです。

DateTimeFormat関数は以下の書式となります。

DateTimeFormat(dt,f,l)
dt日付型/日時型日付型、日時型のフィールドまたは値
fフォーマット%a、%Yなどの指定フォーマット
l言語言語オプション。省略すると英語になります。言語オプションで月や曜日の名称が変わります(その言語に適した言葉になるため、月曜日であれば、英語だとMonday、日本語だと月曜日と出力されます)。

フォーマットは日時ツールのカスタムフォーマットと同じように独自のフォーマットが存在します。こちらも日付型→文字列型の変換の場合に限って掲載します。ソースはこちらとなります。ちなみに、これらは日時ツールでも使用可能です。

カテゴリ書式説明サンプル(日本語)サンプル(英語)
%y西暦年の下 2 桁2222
%Y4 桁の西暦年20222022
%C西暦2020
%m0101
%b,%h月名の省略形1月Jan
%B月名の完全形1月January
%d0202
%e日、先頭の 0 をスペースで置き換え 2 2
%j年の日付、001 – 365002002
曜日%a曜日名の省略形Sun
%A曜日名の完全形日曜日Sunday
%u月曜日 = 1 として示す 10 進数での曜日77
%U週の始まり = 日曜日として示す週の数 (00 – 53)0101
%w日曜日 = 0 として示す数値での曜日00
%W週の始まり = 月曜日として示す週の数 (00 – 53)0000

「月」「日」の頭に0がつかないタイプがないなどちょっと癖があるように思います。ただ、週数やその年の何日目か、などを出力することもできるため、便利な部分もあります。うまく使い分けていきたいところです。

さて、元のワークフロー作成に戻ります。

ここであとは不要項目を削除して、最初の10件をサンプリングツールなどで取得すれば完了です。

まとめ

今回は、日時ツールもしくはフォーミュラツールを使った日付型からテキスト型への変換方法を学ぶことのできる問題でした。

解答ワークフローダウンロード

コメント

タイトルとURLをコピーしました