Alteryxで電話番号の表記を整える
こんにちは、小澤です。
電話番号の入力、なかなか厄介ですよね。 ハイフンの有無だったり、「0」で始まるか「+81」で始まるかだったりと、意外と表記揺れが結構あったりします。 今回は、alteryxのサンプルで、それら様々な表記の電話番号を整える方法を見ていきたいと思います。
サンプルのワークフロー
今回見ていくワークフローは Help > Sample Workflows > Clean and prepare data > Normalize Data > Normalize phone numbers になります。
ワークフローの内容は以下のようになっています。
入力データの内容は以下のようになっています。
データは1000件あるので、全部をお見せすることはできませんが、画像中のものでもいくつか他と表記が異なるものが混ざっているのがわかります。
不正なデータを取り除く
まずは、不正なデータを取り除いている部分です。
まずは、RegExツールで正規表現を用いて、特定のフォーマットにマッチするかを確認しています。
こちらの正規表現は、
(.*[\(].*[\)].*[-].*)
となっています。 最初の
[\(].*[\)]
の部分で、括弧で囲われた任意の文字列を指定しています。 次に、
.*[-].*
でハイフンで繋がった2つの任意の文字列を指定しています。 これによって、「(123)-456-7890」のような形式のもののみがマッチするようになっており、以下のようにこの形式を満たしていないものを弾くことができています。
ただし、「.*」はどんな文字でも許容されるので、「(12a)456-789あ」のような数字以外が含まれるもの、「(111123)456-7777899」のような桁数が合わないもの、「(123)456 - 7890」のような空白が含まれているものもヒットしてしまうので注意が必要です。
実際にこのような判定を行う際は、要件に合わせて適切な正規表現を記述する必要がります。
RegExツールでマッチしたか否かの結果は「Match Status Filed Name」で指定したカラムが作成されそこにBoolean型で追加されます。 その次のFilterツールでマッチしなかったものを取り出したのが上の図のものになっています。
マッチしたものは以下のようになっており、22行目のデータのように一部怪しいデータもまだ含まれています。
今回のデータでは弾きたい文字列は、空白文字のみになるため、次のFormulaツールで置換して空白文字を取り除いています。
アメリカの電話番号のみに絞る
続いて、アメリカの電話番号のみに絞り込んでいます。
こちらもやっていることは先ほどと同じです。 RegExツールで正規表現の指定を行い、マッチするもののみFilterツールで取り出しています。
RegExツールの設定は以下のようになっています。
こちらの正規表現
(.*[\(]\d\d[\)].*)
は括弧の中の数字が2桁のものをアメリカ以外の電話番号であるとして取り出しています。 この結果がfalseのもの(括弧内が3桁のもの)がアメリカの電話番号となるようなので、Filterツールではそれで取り出しています。
番号の分割
最後に、電話番号のそれぞれのパーツを取り出しています。
こちらもRegExツールを利用していますが、ここでは正規表現のマッチするかの判定ではなく、分割のために利用しています。 設定は以下のようになっています。
ここでの正規表現は以下のようになっています
(\(\d{3}\))(\d{3})[-](\d{4})
- 括弧で括られた3桁の数字
- その次の3桁の数字
- ハイフン
- 最後の4桁の数字
となっており、ハイフン以外をそれぞれ括弧でグループ化しています。 その下の「Output Fields」で電話番号中のそれぞれに対応する部分と出力の列のとの結びつけを行っています。
出力は以下のようになります。
正しく分割されている他、想定していないパターンが含まれるものは、結果がnullになっているのが確認できるかと思います。
終わりに
今回は、サンプルある電話番号を整形するワークフローについて解説しました。
ここでの例以外にも、正規表現で置換するなどといったことも可能ですので、多少の表記ゆれば解消したいとか、より厳密にやりたいとかといった状況にも対応可能かと思います。
正規表現の表記は慣れるまでとっつきづらいところもあるかと思いますが、知っておくとデータの整形時に威力を発揮するツールでもあります。
Alteryxに興味をお持ちいただいた方はこちらからお問い合わせください。