Alteryx Designerの利用実例:都内の新旧タクシー料金を比較するデータを準備してみる
全国1億2千万人のAlteryxユーザの皆様、こんにちは。今日も元気にデータ加工してますか? 今回はちょっとばかし(かなり?)古いネタになりますが、「東京都内の新旧タクシー料金を比較する」を題材に、今までに弊社エントリに書かれた個別の内容を応用する形で、Alteryxデータ加工の実践的な例を紹介します。
ことのあらまし
かれこれ一年以上前の話になりますが、平成29年1月30日から、東京都特別区、三鷹市、武蔵野市におけるタクシーの料金が改定されています。
この情報を元に、新しい料金体系で距離毎にどのくらいの差が発生するのかをTableau Desktopで確認します。
まず、Excelを使って、ワークブック内のinputシートに10kmまでの距離における料金表を作成しました。それぞれの個別の料金体系はシンプルなので、Excelで簡単にデータを作ることができます。
- A,B列は旧料金の距離(単位:メートル)と料金(単位:円)
- 旧料金は0〜2000メートルまで730円、それ以降280メートル毎に90円追加
- C,D列は新料金の距離(単位:メートル)と料金(単位:円)
- 新料金は0〜1052メートルまで410円、それ以降237メートル毎に80円追加
- 新旧両方とも、移動速度が遅い場合の追加料金は考慮せず
一覧表にまとめた場合、刻み幅が違うので、行数は異なることになります。
これを同じExcelワークブックの別のシート(output)へ、以下の形で出力したい訳です。
- 新旧両方の料金体系を、距離の列でまとめる
- 距離を表すA列は、新旧両方の料金が変化するポイント(1053メートル,2001メートル等)を含む
- 新旧それぞれ料金が変化するポイントに来るまでは、同じ料金を保持する
こちらのデータを作る為に、今回Alteryx Designerを使用しました。
Alteryx Desktopを使用して、データ加工する
以下の環境で、データ加工を確認しました。
- MacBook Pro (Retina, 13-inch, Early 2015)
- macOS High Sierra 10.13.5
- VMware Fusion 10.1.2
- Windows 10 Pro 1803
- Alteryx Designer 2018.2.5.48994 日本語インストール
Alteryx Designer上の手順は以下です。
- Excelファイルを読み込む(データ入力)
- データを分割する(選択)
- 無駄な空白行を削除する(フィルタ)
- 新旧料金データをまとめる(ジョイン、ユニオン)
- 距離でソートする(並べ替え)
- null値を"同列に直前に現れたデータ"で埋める(複数行フォーミュラ)
- Excelファイルに書き出す(データ出力)
ツールの働きを順番に細かく見ていきましょう。
1.Excelファイルを読み込む(データ入力)
まず、データ入力(Data Input)ツールでExcelワークブックのinputシートから入力データを読み込みます。
【まめちしき】取り込んだデータに同じ名前のカラム(今回の例では"距離")がある場合、Alteryx Designerでは警告と共にカラム名に連番を自動的に振ってくれます。
以降、新料金の方の"距離"は"距離2"と変更されています。
2.データを分割する(選択)
次に、選択(Select)ツールで旧料金と新料金の2つにデータを分割します。この際にデータ型をInt64に変更しておきました。
3.無駄な空白行を削除する(フィルタ)
旧料金は新料金ほど小刻みに料金が変わらないため、新料金と行数を比較するとデータが含まれる行数が少ないです。フィルタ(Filter)ツールで不要な空白行を削除します。
フィルタには"距離の値がnullである"と設定し、Falseブランチからデータを取り出して「距離の値がnullではないデータ」を表現しています。
4.新旧料金データをまとめる(ジョイン、ユニオン)
新料金、旧料金をまとめる作業を行いますが、ここまでのデータを単純にユニオン(Union)ツールを使って縦に結合してしまうと、同じ距離で新旧それぞれの料金が変化する場合のデータが1行で表現できません。
要はこういうことです。初乗りの料金はそれぞれ距離0メートルにおける料金としてデータに含まれていますが、これを単純にユニオンしてしまうと、以下のデータになってしまいます。
本来はこうあってほしいですよね。
そこで、このような同じ距離を持つデータを統合する為に一旦ジョイン(Join)ツールを使います。
Left Outer Join:旧料金だけ料金が変化する距離の抽出
Natural Join:旧料金も新料金も変化する距離の抽出
Right Outer Join:新料金だけ料金が変化する距離の抽出
これら3種類のデータをユニオン(Union)ツールを使って縦に結合します。どのカラム同士を結合するかは手動で設定しました。下記画面キャプチャを参考にしてください。
5.距離でソートする(並べ替え)
ユニオンによる結合ではデータのソートは行われないので、並べ替え(Sort)ツールを使い、距離で結合済み全体データのソートを行います。
ここまででだいぶ形にはなりましたが、上画面キャプチャを見て頂ければお分かりの通り、(料金が)変化しない地点における料金の値がnullになっています。これではTableauで正しく表示してくれません。これを次のステップで対処します。
6.null値を"同列に直前に現れたデータ"で埋める(複数行フォーミュラ)
料金が変化しない場合、前の料金を適用する為には、複数行フォーミュラ(Multi-Row Formula)ツールを使用します。
複数行フォーミュラ(Multi-Row Formula)ツールでは、表構造のデータの"前の行"および"次の行"を指定することができるので、それを設定します。
解りやすく書くと、以下の記述になります。「旧料金の値がnullだった場合は前の行の旧料金の値を設定する、そうでない(nullでない)場合は旧料金の値をそのまま利用する」という表現であることが理解できると思います。
IF IsNull([旧料金]) THEN [Row-1:旧料金] ELSE [旧料金] ENDIF
ちなみに、同じ内容を以下のようにも記述できます。
IIF(IsNull([旧料金]), [Row-1:旧料金], [旧料金])
新しく別に複数行フォーミュラツールを配置し、旧料金と同様に新料金の設定を行います。
今回は操作対象が2カラムだけだったので、複数行フォーミュラツールを2つ並べて、気合いで対処しました。 しかしもっと列が多い場合はその分だけツールを並べる事になり大変です。その際の対処法は下記ブログエントリにありますので参考になさってください。
7.Excelファイルに書き出す(データ出力)
最後に、編集結果をExcelワークブックの別のシート(output)に出力して終了です。
出力オプションをデフォルトの「新しいシートを作成する」のままにしておくと、2回目以降の実行の際に既にシートがあるので作成できない旨のエラーが発生するので、
加工したデータをTableau Desktopで読み込み、タクシー料金の変化を確認する
ここまでで得られたExcelファイル上の出力結果をTableau Desktopに読み込ませてグラフ表示させてみます。 幸いなことに、最新バージョンである2018.1から新機能として"ジャンプグラフ"が表示できるようになりました。
タクシーの料金は不連続な値なので、階段グラフよりジャンプグラフの方が適切でしょうから、こちらを使ってみます。
いかがでしょうか・・・ものすごく微妙ですね・・・。という訳で、それぞれの料金が変わるポイントにおける差額を計算し、新料金が高い場合は赤、そうでない(同じ料金を含む)場合は青で色分けしました。
これでだいぶ解りやすくなりました。走行距離が2.0kmを超えた辺りで新料金が高いところが出始めて、6.5kmを超えると新料金が安いところはなくなるという事が見えてきました。
まとめ
「東京都の新旧タクシー料金比較」を題材に、実際の業務に使うイメージでデータ加工と表示の流れを見てみました。これでAlteryxとTableauをどのように連携させるのか、イメージが膨らめば何よりです。それでは、また。yokatsukiでした。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。