Alteryx+Tableau連携で開始日/終了日のデータから欠損値を補完してみる

投稿者:

開始と終了のデータが入っているデータを持っていることありませんか?

例えば、宿泊施設のチェックイン日とチェックアウト日、病院の入院日と退院日、システムのログイン時間とログアウト時間、学校の入学年月と卒業/退学年月など。

そのとき、各月/各日/各時間に何人存在したのか、いつがピークなのか、などを知りたい場合が多いと思います。

宿泊施設であれば、何月何週がピークか、何曜日は何%の満室率なのか、去年の同月同曜日と比較して今年の状況はどうなのか、など。

これを知りたくても、チェックイン日とチェックアウト日のデータのままではなかなか分析することが難しいと思います。チェックイン日とチェックアウト日の間の日にちのデータが存在しないためです。

例えば、あるお客様は、6/1にチェックインして6/3にチェックアウトをしています。6/2も宿泊していますが、6/2にこのお客様が宿泊施設を利用したことをデータで表現するには”6/2”という行を生成する必要があります。

そこで、ここでは、宿泊施設のチェックイン日とチェックアウト日のデータ数行を使って、間の利用日を補完して、各日にちに何名のお客様が利用しているのか把握したいと思います。

データの加工をAlteryxで行い、アウトプットをtdeで出してTableauで可視化してみます。

チェックイン日とチェックアウト日のデータの形として、次の2種類を考えてみます。

A. チェックイン/チェックアウト列と日付列
B. チェックイン列とチェックアウト列

———————-

A. チェックイン/チェックアウト列と日付列

チェックインもしくはチェックアウトの列と、日にちの列が、2列に分かれているタイプ。

最終的に、Alteryxでこういう形に変更してみます。

Alteryxのフローとしてはシンプルです。

チェックイン日とチェックアウト日を別の列にしてから、宿泊施設を利用した日にちはDateNew列に1行発生するように作り変えています。

ノード1. “In/Out”にある”Input Data”でデータに接続

ノード2. “Transform”にある”Cross Tab”で縦型から横型に変換

IDごとに、In/Outの列を横型に変え、それらの列にDate列の値を入れるという処理を指定します。

ここまでの結果はこんな形。宿泊者ごとに、InとOutが別の列に入りました。

ノード3. “Preparation”にある”Generate Rows”から行を作成

DateNewというDate型の列を作成。最初の値はInだが、Outと同じ日づけになるまで、次の行で1日足し続けるという指定をしています。

4. “In/Out”の”Browse”で確認しつつ、”In/Out”の”Output Data”でtdeを出力

tdeをTableauで読み込めば、きれいに見せられますね!

6/2と6/3はどの人も宿泊していますし、宿泊数が多いことがわかりましたね。

B. チェックイン列とチェックアウト列

お客様ごとにチェックイン日とチェックアウト日の2列で構成されているデータです。

本日が6/19のとき、ID:4に関してはまだチェックアウトしていないので、本日6/19までの2日間、施設を利用していることをデータとして示す必要があります。

こちらの場合は、最終的にAlteryxでこういう形に変更しました。
宿泊施設を利用した日にちはDateNew列に1行発生するように作り変えています。

Aのデータの持ち方より、Alteryxのフローはもっとシンプル。

1. “In/Out”にある”Input Data”でデータに接続

2. “Preparation”にある”Generate Rows”から行を作成

最初の値はInだが、Outもしくは本日と同じ日づけになるまで、次の行で1日足し続けるという指定をしています。

3. “In/Out”の”Browse”で確認しつつ、”In/Out”の”Output Data”でtdeを出力

開始時と終了時しかデータとしてはもっていないけども、それらの間の時間数を把握したいことはよくあると思います。

以上の通り、Alteryxのフローは難しくなく作れますので、ぜひトライしてみてください!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です