記事の目的
データ受領後に分析を始める前に「初期分析」と呼ばれる基本的なデータの性質を理解するステップがある。現実の多くのデータはコンペなどにあるデータよりも汚いことが多く、またデータベースの定義書がないなんてことはざらにある。
この後に紹介するステップを最初にやることで、データをざっくりと理解できる。また、このステップをないがしろにすると、後から手戻りが発生することが多く、とても大事なことである。
①行数、列数
どのくらいのサイズのデータかによって、処理の重さなどが変わってくる。中間テーブルを作るべきかなどの検討材料にもなる。
②列の名前、形式
各テーブルにどのようなデータが入っているのかを理解する。後々分析を始める際に分析したいデータがそもそもあるのか、どのテーブルを結合すればよいのか、などを探る手掛かりになる。
また、データの形式を確認するのも大切である。例えば日付のデータが文字列で入っている場合に「2020/12/15」や「2020-12-15」などいろいろな形式がある。日時が数値型で入っている場合も注意が必要で、「20201215120000」みたいな形で入っていることもあれば、UNIXTIMEで「1608001200」となっていることもある。
(UNIXTIMEとはコンピュータシステム上での時刻表現の一種で1970年1月1日午前0時0分0秒からの経過秒数で時刻を表したもの)
特に注意が必要な点として、日付のタイムゾーン(日本時間なのか、世界標準時なのか)や区切り文字、「,」を含むのか含まないのかなどがあげられる。
③NULLの確認、除外
多くのデータセットには欠損値を表すNULLが含まれている。NULLが含まれたまま集計をすると、想定通りにいかないことが多いため、NULLが含まれる列はどれか、数はどの程度かを確認することが重要である。
また、NULLが本来の意味である不確定の値を示すのか、それとも特定の値を示すのかも確認する必要がある。特定の値とは、例えば返品フラグという列があった際に、返品があったものに1が入り、返品がないものにはNULLが入っていることがある。この場合のNULLは0に置き換えるなどの処理が必要である。
また、NULLの代わりに空白が入っているカラムもある。空白もNULLと同じようにどのような処理が適切かよく考える必要がある。
NULLは分析のノイズになることが多いため、NULLの多い列は使用しない、NULLを特定の値に置き換えて使用するなどの工夫は非常に大事な処理である。
④型
次にデータの型を確認する。最近の賢いライブラリやツールでは自動的に型を判別するものも多いが、ここで間違って認識されることもある。よくあるパターンとして、数値がIDで示される場合は0埋めした文字列で読み込むのが適切であるが、数字のまま読み込まれたりする。
⑤プライマリーキー
テーブルの行を一意に特定するための列の組み合わせを見つけるステップである。
ここを怠ると結合や集計を失敗するため、とても重要なステップになる。
また、プライマリーキーの確認と合わせて、テーブルの粒度を確認することも大切である。
テーブルの粒度とは、一行がどのような意味をもつかを確認するステップである。
経験した失敗として、注文履歴が注文IDごとに入っていると思っていたら同じ注文IDの行が複数あり、何かと思ったら完全に重複した行があったり、行が作られた時間を表す列の値だけが違ったりといったことがあった。
また、注文IDの例では返品があった場合に、別テーブルで管理されているのか、同じ注文IDで注文種別みたいな列で返品と入っているのか、同じ注文IDでマイナスの数値が入っているのかなどを確認するのも大事である。
⑥ヒストグラム
ヒストグラムを全ての列に対して見ることも重要である。ただ見るだけではなく、目的をもって見る。例えばNULLがあるのか、分布がどうなっているかである。
例えば、日付の列に注目し、どの期間のデータなのかを理解する。
後は目的として、あきらかな外れ値があるかどうかやデフォルト値がどうなっているかも確認したい。
⑦列間の関係
これは死ぬほどあるので、全パターンではなくある程度あたりを付けて確認するのが大事になってくる。例えば商品名と商品IDは1対1で対応しているのか、同じ商品が複数の商品名となっている場合に、正確に同じIDが振られているのか、もしくは異なるのかを確認し、必要なら修正することもある。同じ商品が複数の商品名となる例として、ECサイトの購買履歴ではキャンペーン中に「【期間限定50%オフ】商品A」などの商品名となる場合がある。
特に思い込みで失敗することがよくあるので、きちんと確認しながら進めないと、手戻りが発生するだけならまだいいが、間違った分析をしてしまうのは最悪である。
⑧全体的な数字を出して、既知の情報と比較し、集計の条件を確認する
ここまでくれば分析までもう少しである。テーブルの代表的な数値(総売上、商品数など)を出して、既知の情報と比較し、間違いがないか確認する。ここで既知の情報と比較とはお客さんが年次の売上のデータなどは出していることが多いので、それらの数字と比較することである。集計の条件が違っているなどあれば、ここで気づくことができる。またこの後の分析に、ここの数字を正しいとすることができるため、細かい分析を行った後にこれらの数値と比較することで、途中の計算式の間違いなどに気づくこともできる。
まとめ
まとめると、分析を始める前に確認することは以下のとおりである。
- 列数、行数
- 列の名前、形式
- NULLの確認、除外
- 型
- プライマリーキー
- ヒストグラム
- 列間の関係
- 全体的な数字を出して、既知の情報と比較し、集計の条件を確認する