LoginSignup
4
0

More than 1 year has passed since last update.

インフォマティカのCloud Data Profilingでデータプロファイリングしてみた(その2) ~さらにプロファイリングしてみた~

Last updated at Posted at 2023-03-02

1. はじめに

以下の記事では、ほぼデフォルト設定でデータプロファイリングを行いました。

しかし、それでデータ品質の問題が全てわかるかと言うと実際にはそんなことはなくて、まだまだ問題が隠れたままになっていることの方が多いと思います。
そこで、この記事では、プロファイリング結果の見方と、プロファイリング結果からどのようにして問題を検出していくのかを見ていきたいと思います。

2. プロファイリング対象のデータについて

前回記事と同じく、CSVファイルの疑似顧客データを使います。
各カラムの想定は次の通りです。

カラム名 想定
No 個人に割り当てられた一意の番号。数字型。
last_name 名前。文字列型。
first_name 名字。文字列型。
phone 電話番号(ハイフン等は含まない)。数値型。
date_of_birth 生年月日(yyyy/mm/dd形式)。文字列型。
address 都道府県名(「東京都」「千葉県」「大阪府」のように「都」「県」「府」も含む)。文字列型。

なお、以下はCSVファイルの抜粋(ヘッダー行1行と、データ行3行)です。

No,last_name,first_name,phone,date_of_birth,address
1,紺野,理桜,0984531772,1945/05/04,沖縄県
2,高島,翔,09048227466,1953/12/05,熊本県
3,福元,浩秋,09088285042,1990/11/09,福島県

人名や電話番号は全て架空のものです。
また、記事を書くために、このデータには不正なデータをいくつか仕込んでいます。かなりわざとらしいところもありますが、その点はご容赦ください:bow:

3. プロファイリング結果の見方と問題検出の流れ

これ以降ではカラムごとに見ていきます。
なお、前回記事で一度プロファイリングを実行しているため、最初にそのプロファイリング結果を見ることから始めます。そして、そのプロファイリング結果に気になるところがある場合は、設定変更して再度プロファイリングを行い、問題を検出していきます。

3.1 「No」カラム

サマリビューから確認します。
2023-01-10-13-14-09.png
「NULLの行のパーセンテージ」がゼロなので、NULLの行はありません。そして、「個別の行のパーセンテージ」が100%で、「重複のある行のパーセンテージ」がゼロなので、値は重複していないことがわかります。

また、データ型を見ると、Integer(4)が100%なので、全て4桁で収まる数値だと判断できます。
2023-01-10-13-33-28.png
念のため、パターンも確認しておきましょう。
2023-01-10-13-37-11.png
9(4)999は、それぞれ4桁と3桁の数値を意味しています。

9は数字、Xは文字の意味で、9(4)は数字4桁のことです。数字も文字も3桁までは999XXXと表示されますが、4桁以上は桁数がカッコ内に書かれます。

しかし、Othersという謎のパターンがあります。
これはデフォルト設定だと全体で5%未満のパターンはOthersと表示されてしまうためです。今回のプロファイリング対象のCSVファイルは3000件のデータですので、5%というと150件です。まあまあの量ですね。これがOthersでまとめられてしまうのはちょっと困りそうです。
ですので、全て表示されるように設定を変更します。それでは何パーセントに変更すればいいのでしょうか? 一概に何パーセントが良いとは言えないのですが、今回は1件しかなくても表示されるようにしたいと思います。3000件中の1件は0.0333...%ですので、それよりも小さい0.01%を設定します。

「スケジュール」タブを開き、少し下にスクロールすると「詳細オプション」に「パターンのしきい値の割合」というところがありますので、ここに0.01を設定します。
2023-01-16-14-13-28.png
設定を保存して、再度プロファイリングを実行しましょう。プロファイリング終了後、改めて確認すると以下のようになりました。
2023-01-10-15-35-24.png
Othersがなくなって、999が表示されています。これは、それぞれ2桁と1桁の数値ですので、最初から表示されていた9(4)999も合わせて考えると、パターンからは1〜4桁の数値であることがわかります。
したがって、このカラムは

:o: NULLなし
:o: 重複なし
:o: 数値型(桁数は1~4)

ということがわかりました。
このカラムは特に問題なさそうです。

3.2 「last_name」カラムと「first_name」カラム

この2つのカラムは名前と名字で、同じようなカラムなので同時に見ることにします。

まずはサマリビューです。
2023-01-10-16-42-46.png
どちらも「NULLの行のパーセンテージ」がゼロなので、NULLの行はありません。また、「個別の行のパーセンテージ」「重複のある行のパーセンテージ」を見ると値の重複があるようですが、同姓や同名が存在することは特におかしなことではないので、値の重複があることは問題ないでしょう。

データ型を確認すると、last_nameが
2023-01-10-16-57-16.png
となっていて、first_nameは
2023-01-10-16-58-17.png
です。
どちらもString型で100%となっているので、これも問題なさそうです。

パターンはどうでしょうか? last_nameが
2023-01-10-17-01-36.png
となっていて、first_nameは
2023-01-10-17-02-51.png
です。
XXXXXXは、それぞれ1文字、2文字、3文字の意味です。それくらいの長さの名前は普通ですので、これらのパターンは問題なさそうです。しかし、それ以外の次の5つのパターンが気になります。

  1. bX
  2. bXX
  3. XXb
  4. XXXb
  5. X X

まず1~4の4つですが、これらに出てくるbは半角スペースを意味します。名前の前後に半角スペースのある名前の人はいないはずなので不正なデータです。
5番目のX Xは文字と文字の間が広くなっています。わかりにくいですが、これは全角スペースが入っていることを表しています。名前に全角スペースが含まれている人もいないはずなので、これも不正なデータと言えます。
念のため、X Xのパターンをドリルダウンして実際のデータを見てみましょう。
2023-01-13-13-26-56.png
名前の途中に全角スペースが入っていますが、全角スペースを取り除けば正しい名前になりそうです。

さて、ここまで見て、bXXXbのように名前の前後に半角スペースが入っているケースがあるのであれば、名前の前後に全角スペースが入っているケースもありそうな気がしてきました。そんなことを気にしながら、last_nameのパターンを改めてよく見てみると、XXが2つあることに気がつきます。
2023-01-12-15-40-59.png
同じパターンが別々に表示されるのはおかしいです。そこで、2番目のXXをマウスで選択して反転表示させてみます。すると全角スペースが隠れていました。
2023-01-12-15-42-43.png
注意していないと見逃してしまいそうですが、名前の後ろに全角スペースがついているデータがあることがわかりました。
半角スペースはbと表示してくれるのですが、全角スペースはそのまま表示されるため、全角スペースはちょっと注意が必要です。

多数のパターンが表示されているときに、全て反転表示させて確認するのはあまり現実的な方法とは言えません。本当はCloud Data Profilingの機能で全角スペースをわかりやすく表示してくれるといいのですが、少なくとも現在は全角スペースがこのように表示されてしまいます。そこで考えられる対策としては、全角スペースを可視化できるフォントを使用することだと思います。下の画像は、ブラウザのフォントを、全角スペースを可視化可能なRicty Diminishedに変更して表示したときのものです。全角スペースもわかるように表示されるため、これであれば反転表示させなくても全角スペースを確認できます。
2023-01-12-17-23-35.png

以上から、この2つのカラムは

:o: NULLなし
:o: 重複はあるが問題ない
:o: 文字列型
:x: 半角スペースや全角スペースが含まれるデータが存在する(本来、半角スペースや全角スペースは含まれていはいけない)

ということがわかりました。
半角スペース、全角スペースが含まれているデータが存在することが問題です。

3.3 「phone」カラム

サマリビューを確認します。
2023-01-13-13-38-35.png
「NULLの行のパーセンテージ」がゼロなので、NULLの行はありません。また、「個別の行のパーセンテージ」が100%で、「重複のある行のパーセンテージ」がゼロなので、値は重複していないことがわかります。

データ型を見てみましょう。
2023-01-13-13-57-21.png
このカラムはハイフンを含まない電話番号を想定しているため、全て数値であることを期待していましたが、Decimal型、Integer型とされたのは98.83%で100%となっていません。String型では100%なので、1.17%のデータは数値以外の文字を含んでいるようです。

次にパターンです。
2023-01-13-14-29-14.png
またOthersが表示されてしまいました。
「No」カラムを確認しているときにパターンのしきい値を変更したのに、再びOthersが表示されたのは、今度は出力されたパターンの数が多いからです。デフォルト設定だとパターンの数が10を超えるとOthersと表示されてしまうのです。
というわけで、再び設定を変更します。
具体的には、パターンのしきい値を変更したときと同様に、「スケジュール」タブを開き、「詳細オプション」の「最大パターン数」を変更します。値をいくつにするかですが、これも一概にいくつが良いとは言えないため、とりあえず全てのパターンが表示されそうな100と大き目な数を設定してみます。
2023-01-16-14-16-11.png
設定を保存して、再度プロファイリングを実行します。
すると、以下のようにOthersは表示されなくなりました。
2023-01-13-15-26-48.png
さて、数値以外が含まれているパターンを確認すると次のように9つありました。

  1. 999-9(4)-9(4)
  2. 999-999-9(4)
  3. p999q999-9(4)
  4. 9(4)-99-9(4)
  5. p9(4)q99-9(4)
  6. 99-9(4)-9(4)
  7. 999-99-9(4)
  8. p99q9(4)-9(4)
  9. p9(4)q9-9(4)

全てのパターンにハイフンが入っています。
9とハイフンだけで構成される1, 2, 4, 6, 7のパターンでドリルダウンしてみます(下の画像は5レコードだけ抜粋したものです)。ハイフンの入った電話番号になっています。
2023-01-13-17-11-48.png
3, 5, 8のパターンには9とハイフンの他にpqという表示があります。pは"("で、qは")"を意味するので、これらのパターンは数字の他に丸括弧とハイフンが入っていることになります。
こちらもドリルダウンすると丸括弧とハイフンの入った電話番号になっていることが確認できます(下の画像は5レコードだけ抜粋したものです)。
2023-01-13-17-29-13.png

以上から、このカラムは

:o: NULLなし
:o: 重複なし
:x: 数値型がほとんどだが、文字列型のデータも存在する(本来は全て数値型)
:x: ハイフンと丸括弧が含まれるデータが存在する(本来、数字以外は含まれてはいけない)

ということがわかりました。
数字以外にハイフンと丸括弧が含まれているデータ存在することが問題です。

電話番号を扱う場合、本当は以下のようにまだまだ確認した方が良いと思われることがありますが、やり始めると記事が長くなりすぎてしまうので、この記事では割愛します。

  • 電話番号の桁数は正しいか?
  • 電話番号はゼロで始まっているか?(ただし、国番号から始まっているデータもあるかもしれないので、ゼロかどうかだけでは判断してはいけない可能性あり)
    、、、など

3.4「date_of_birth」カラム

サマリビューを確認します。
2023-01-16-14-39-48.png
「NULLの行のパーセンテージ」が0.7%となっていてNULLの行があることがわかります。そして、「個別の行のパーセンテージ」が100%でないですが、同じ誕生日の人がいてもおかしくないので、これは問題ありません。
ここで気になるのは最大値です。"9999/12/31"となっています。これは明らかに不正な値です。

データ型を確認します。
2023-01-16-14-47-56.png
yyyy/mm/ddという形式で"/"が含まれているため、String型で100%となっているのは問題なさそうです。

パターンはどうでしょうか?
2023-01-16-14-49-32.png
NULL以外のデータは全てyyyy/mm/dd形式となっているようです。こちらも問題ありません。

データ型やパターンは問題ないことがわかりましたが、最初のサマリビューで気になった"9999/12/31"のような不正なデータが他にも存在するのか、という疑問が残ります。
このようなデータを検出するために、Cloud Data Qualityのルール仕様を利用することにします。ルール仕様は簡単に言うと、データがある条件を満たしたときに実行するアクションを定義したもの(プログラムで言うところの if 〜 then 〜 を定義したもの)で、プロファイリングするときのルールとして利用することができます。

ルール仕様はマイサービスで「データ品質」を開き、続けて「新規...」、「ルール仕様」をクリックすることで作成できます。
2023-01-19-16-51-00.png

ここでは次のような出力を行うルール仕様を作成します。

  • NULLの場合 :arrow_right: 'NULL'と出力
  • NULLではなく現在日時よりも先の日付 :arrow_right: '未来日'と出力
  • 上記以外 :arrow_right: '有効日付'と出力

実際のルール仕様の画面では以下のように設定します。
2023-01-17-15-01-55.png
ルール仕様が作成できたら、再びプロファイリングの画面に戻り、作成したルール仕様を「ルール」タブで「date_of_birth」カラムに設定します。
2023-01-17-16-34-44.png
設定後、保存を行い、プロファイリングを再実行します。
するとプロファイリング結果に先ほど設定したルールの行が追加されています。
2023-01-25-14-24-29.png
追加されたルール仕様の行をクリックして値を確認します。
2023-01-17-16-47-39.png
「未来日」のデータが5件ありました。「未来日」でドリルダウンしてみましょう。
2023-01-17-16-48-45.png
たしかに未来の日付が入っていることが確認できます。

以上から、このカラムは

:x: NULLあり
:o: 重複はあるが問題ない
:o: 文字列型
:o: NULLでないデータは全てyyyy/mm/dd形式
:x: 未来の日付が入っているデータが存在する

ということがわかりました。
NULLがあること、未来日のデータが存在することが問題です。

3.5 「address」カラム

サマリビューから確認します。
2023-01-25-14-26-32.png
「NULLの行のパーセンテージ」がゼロなので、NULLの行はありません。また、「重複のある行のパーセンテージ」が98.4%と高いですが、このカラムは都道府県名が格納されているため重複があることは特に問題ありません。
ここで気になるのは最小値で、"XXX"と明らかに不正な値になっています。

データ型を確認します。
2023-01-17-17-19-54.png
String(4)で100%とあるので4文字以内の文字列型となっているようです。都道府県名は4文字以内(「神奈川県」のように「県」も含むと最大で4文字)のため、特におかしなところはありません。

続いてパターンです。
2023-01-17-17-20-38.png
3文字、もしくは4文字であることがわかります。これも特におかしなところはありません。

そうなると最初のサマリビューで確認できた"XXX"が気になります。このようなデータは他にはないか確認する必要があります。
そのために、今回もルール仕様を使用します。データが正しい都道府県名か確認すればいいのですが、以下のように都道府県名を一つずつ確認するようなルールを47行書くのは少々大変です。
2023-01-30-15-05-49.png
したがって、ここではディクショナリを利用します。

ディクショナリはマイサービスで「データ品質」を開き、続けて「新規...」、「ディクショナリ」をクリックすることで作成できます。
2023-01-25-15-21-12.png
ディクショナリの内容は都道府県名を入力するだけです。CSVファイルを用意してインポートさせて作成することも可能です。
2023-01-25-15-28-33.png
ディクショナリが作成できたら、このディクショナリを使ったルール仕様を作成します。
ルール仕様では、 入力データがディクショナリに含まれていたらVALID、含まれていなければINVALIDと出力するロジックを設定します。
2023-01-25-16-03-46.png
プロファイリングの定義で、「address」カラムに対してルール仕様を設定します。
2023-01-25-16-07-39.png
設定を保存して、プロファイリングを再実行すると、ルール仕様の行が追加されています。
2023-01-25-16-12-43.png
追加されたルール仕様の行をクリックして値を確認します。
2023-01-25-16-14-17.png
INVALIDのデータが8個ありますので、ドリルダウンして確認します。
2023-01-25-16-16-54.png
サマリビューで確認できた"XXX"の他に"あああ"というデータもありました。

以上から、このカラムは

:o: NULLなし
:o: 重複はあるが問題ない
:o: 文字列型(桁数は3もしくは4)
:x: 都道府県名ではない値(具体的には"XXX"と"あああ")が入っているデータが存在する

ということがわかりました。
都道府県名以外のデータが含まれているデータが存在することが問題です。

3.6 全カラムのまとめ

全カラムの確認結果です。

カラム名 プロファイリング結果
No :o: NULLなし
:o: 重複なし
:o: 数値型(桁数は1~4)
last_name
first_name
:o: NULLなし
:o: 重複はあるが問題ない
:o: 文字列型
:x: 半角スペースや全角スペースが含まれるデータが存在する(本来、半角スペース・全角スペースは含まれていはいけない)
phone :o: NULLなし
:o: 重複なし
:x: 数値型がほとんどだが、文字列型のデータも存在する(本来は全て数値型)
:x: ハイフンと丸括弧が含まれるデータが存在する(本来、数字以外は含まれてはいけない)
date_of_birth :x: NULLあり
:o: 重複はあるが問題ない
:o: 文字列型
:o: NULLでないデータは全てyyyy/mm/dd形式
:x: 未来の日付が入っているデータが存在する
address :o: NULLなし
:o: 重複はあるが問題ない
:o: 文字列型(桁数は3もしくは4)
:x: 都道府県名ではない値(具体的には"XXX"と"あああ")が入っているデータが存在する

デフォルト設定でプロファイリングしただけでは検出できない問題もありました。プロファイリングを何度も行うのは大変ですが、データの問題を検出するためには必要な作業だと言えます。

4. 最後に

プロファイリングを繰り返しながらデータの問題を検出してみました。実際の業務ではもっと複雑な問題が隠れていることが多いとは思いますが、どのようにプロファイリングを進めていくのか雰囲気だけでも感じていただければ幸いです。
また、この記事を読んで、自分の持っているデータが気になった場合は、是非プロファイリングしてみてください!

(2023/03/23 追記)
続編を書きました。

仲間募集中!

NTTデータ Data&Intelligence事業部 では、以下の職種を募集しています。

1. 「クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)」の募集 クラウド/プラットフォーム技術の知見に基づき、ITアーキテクトまたはPMとして、DWH、BI、ETL領域における、ソリューション開発の推進や、コンサルティング工程のシステムグランドデザイン策定時におけるアーキテクト観点からの検討を行う人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=808

2. AI/データ活用を実践する「クラウド・ソリューションアーキテクト」 AI/データ活用を実践する「クラウド・ソリューションアーキテクト」として、クラウド先進テクノロジーを積極活用し、お客様のビジネス価値創出活動を実践。AI/データ活用の基本構想立案コンサルティングからクラウドプラットフォーム提供・活用を支援しています。お客様のAI・データ活用を支援するクラウド・ソリューション提案、アーキテクチャ設計・構築・継続活用支援(フルマネージドサービス提供)、および最新クラウドサービスに関する調査・検証で、クラウド分析基盤ソリューションのメニュー拡充を実施する人材を募集します。

https://nttdata.jposting.net/u/job.phtml?job_code=807

また、取り扱う主なソリューションについては、以下のページも参照ください。

ソリューション紹介

1. NTTデータとInformaticaについて データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。

https://enterprise-aiiot.nttdata.com/service/informatica

2. Trusted Data Foundationについて ~データ資産を分析活用するための環境をオールインワンで提供するソリューション~

https://enterprise-aiiot.nttdata.com/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ(Datalake+DWH+AI/BI)を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0