データ分析者を困らせるためのデータの作り方

この記事は 『CRESCO Advent Calendar 2017』25日目(最終日)の記事です。

第1金融ソリューション事業部、兼 3D円グラフ撲滅委員 所属りーだーです。

◆はじめに

データ分析者の最も時間のかかる作業は、その名の通りデータの「分析」と思われがちですが、その前の作業、データ前処理に最も作業時間がかかります。
その作業時間は、全体の8割とも、それ以上とも言われています。

データ前処理とはデータを集めたり、データに問題がないか確認したり、分析しやすいように加工したりする作業のことです。

もし提供されたデータが使いづらい、扱いづらいものであると、データ前処理の作業時間は膨大な時間になります。

今回は、どんなデータを渡すと、データ分析者は困ることになるのか、というお話です。

◆データが紙のみ

データが電子データすらなく提供されるケースです。。。

その場合、つらいですが、紙に書かれたデータを打ち込むことになります。
1,2枚程度ならばともかく、10…100…1000枚ともなれば、それだけで、1日、1週間、、、と容易に時間が過ぎてしまうことでしょう。

◆データはある、ただしスキャナで取り込んだPDF

悲しいことにほとんど紙と変わらない状態です。
同じくデータを打ち込んでいく作業になることでしょう。

OCR機能で文章がテキストとして取り込まれていれば、多少は楽になります。
しかし、もし画像として取り込まれていたら、紙のときと同じ作業を覚悟しないといけないかもしれません。

◆ファイル名は正しいけど中身が違う!?

データは無事に送られてきましたが、いつもと同じデータ加工をしてもうまくいきません。
なぜかと思ったら、データの中身が全く違う!?という問題です。

例えば、データを提供している担当者が急な休みで、別の人が代替わりしたものの間違えて違うファイルを送ってしまった、というケースですね。

データ分析者は、送られてきたデータが期待したデータであるかを毎回確認しなければならなくなるでしょう。

◆人間が見るために作られたデータ

同じデータでも、分析のしやすいデータとしにくいデータがあります。
分析しにくいデータを渡すことで、データ分析者は一手間かけてデータを加工してあげることになります。

人間が見るために作られて表は、分析には使いにくいことがあります。
人間が見やすいデータとして、次のような表を考えてみます。

店番号 売上1月 売上2月 売上3月 売上4月
1 100 150 100 90
2 200 220 180 190
3 200 190 150 190

1列目に店番号、2列目以降にその店舗の売上が月ごとに記載しています。
人間が見る分には見やすいのですが、データ分析するには不向きなデータの形をしています。

例えば、データ分析者は、以下のような表にデータの形を変える必要があるでしょう。

店番号 売上
1 1 100
1 2 150
1 3 100
1 4 90
2 1 200
2 2 220
2 3 180
2 4 190
3 1 200
3 2 190
3 3 150
3 4 190

例に出した表は、まだ加工しやすいです。

例えば、PDFやRTFファイルのように複数ページに同じ表が跨るような場合、エクセル方眼紙の場合、加工の難易度はさらに上昇します。
(エクセル方眼紙が人間にとって見やすいかと言われると疑問ですが。。)

◆空行や空列

エクセルでデータを作成するとき、欄外に半角スペースなどを入力してしまったときに発生します。

最後に追加される空行はデータとして読み込まれる場合もあるので、データ分析の邪魔をしてくれることでしょう。よくある問題なので、空行を削除する処理を毎回入れておいたりします。

◆値に格納される制御コード

エクセルのセル内改行が一番よく発生しますね。

エクセルでセル編集中に Alt+エンターを入れると、セル内に改行コードを入れることができます。
このときのセル内改行コードは LF です。
CSVファイルなどにすると、通常の改行コードは CRLF です。
セル内改行は、データ加工の邪魔になりますので、基本的には削除する処理を入れます。

制御コードのいやらしいところは人間の目に見えない点です。
見えないため、制御コードの存在に気づきにくくなります。

例えば、固定長ファイルを扱うとき、同じ項目でも、あるシステムからは半角スペース 0x20 で埋められるが、違うシステムからは null 0x00 で埋められるケース。

見た目上、同じ値なのに、なぜ別の値として扱われるんだと、分析者の頭を悩ませる事になります
運が悪いと、ずっと気づかないこともあるでしょう。

ちなみに実際に筆者が経験した悩ましいケースのひとつは、改行コード3種類 CR , CRLF , LF 混在型のデータです。

◆値の欠損

値が欠損であるとき、分析者は非常に困ることになるでしょう。
欠損は容易に発生しうる問題で、容易に分析者を困らせる方法の一つです。

例えば、性別が欠損であった場合、記入拒否して欠損なのか、そもそも記入欄がなかったのか、はたまた違う理由なのかはデータから読み取ることができません。

勝手に別の値に変えてしまうと、分析結果が誤ったものになりうるかもしれません。

欠損の理由は、大まかに下記の理由があります。
その理由によって対応方法も異なりますが、その理由が混在していると、更に対応は困難になるでしょう。

例えば、打ち間違いと記入拒否が混在していると、それぞれを区別することができなくなります。
区別ができないと、それぞれに合った対応もできなくなるため、分析からデータを落とすことにもなりかねません。

打ち間違い・打ち忘れ
間違えて deleteキーを押してしまう、または記入漏れによって発生。
測定エラー
測定器が正常に測定できなかったときに発生。
例えば、モーションキャプチャではは全身に測定するためのポイントを付けて測定しますが、ポーズや速度によって、正常に測定できないことがあります。
記入拒否
アンケートの自由入力欄などで、記入がなかった場合に発生。
マスキング(匿名化)
個人情報など、データ提供時に隠すために発生。

◆区分値・初期値の意味を知らせない

データ容量を減らすためであったり、分析しやすいために、例えば、男性を 1 、女性を 2 にみたいに設定することがあります。
データ提供元で、この区分値が設定されており、提供先に知らせていないと、その値の意味は値の設定者しか知らないので、分析者は、その値の意味を都度聞くことになります。

ひとつふたつならばともかく、何百、何千、何万の項目を聞くのは非常に時間がかかります。

どのような値で設定しているか、どのようなときにその値は発生しうるのかを連携しておかないと、単に困るだけでなく、分析を誤る原因にもなりかねないでしょう。

  • null
  • 0
  • 1
  • 半角スペース
  • *
  • #N/A
  • -99999999
  • 1/1/1
  • 9999/12/31

◆形式を勝手に変える

YYYY/MM/DD → YYYY年MM月DD日

エクセルやCSVファイルでデータのやり取りをしていると、発生することがあります。

例えば、担当者が変更になり、引き継いだこの表のこの形式ちょっと見づらいから変えちゃお、という気軽な気持ちで変えられたりすると、悲しいことになります。
ちょっとした形式の変化でもデータが機械的に読めなくなるので、告知のない形式変更は嫌がらせに使えます(非推奨)。

◆列(項目)やヘッダーを増やす・減らす

これもエクセルやCSVファイルであることです。

ヘッダー行を増やしたりすると、今まで2行目からデータを読んでいたのに、ヘッダーが2行目にも来たので、変なデータが読み取れてしまいます。

読み込み時に形式エラーで気づければよいのですが、たまたま文字型しかないとかヘッダーが読み取れてしまうと、まったく気づかぬままデータ加工してしまい、最悪、データ分析までいっても気づかないことがあります。

項目を増やしたりもよくあることですが、項目の読み取り位置が変わるため、誤った読込をしてしまいかねません。

◆同名でカラム定義が揃っていない

データベースであることですが、同じカラムにも関わらず、型や長さが揃っていないケースです。

違うベンダーが作った複数のシステムを扱っていたりすると発生することがあります。

この場合、同じ名前なだけで、違うカラムなのかどうかも怪しまれます。
さらに、前述の初期値の考えも異なることがあるので、注意が必要です。

◆同名カラムのデータの入り方が異なる

同じカラムで型も長さも同じだけど、データの入り方が違うケース。
そのままでは使えないので、どれかに統一することになります。

例えば、以下のように、値の埋め方、寄せ方が異なるケースです。

ゼロ埋め
0000012345
左寄せ
12345
右寄せ
▲▲▲▲▲12345

※ ▲ = 半角スペース

◆別名だけど、同じカラム

同じカラムのはずだけど、名前が異なるケース。

例えば、以下のような項目を見たとき、果たして同じものだと定義情報のみだけで気づけるでしょうか。
この中に、全く違う意味の番号が含まれていたりすると、分析を誤らせる原因になりえるでしょう。

  • お客さま番号
  • お客様番号
  • お客さまNo
  • 顧客番号
  • 顧客No
  • 顧客ナンバー
  • ナンバー

◆データが提供後に訂正される

非常に時間のかかったデータ前処理も終わり、ようやくデータ分析をするぞ、またはデータ分析も終わった、というときに、
「すみません、渡したデータが間違えてましたー^^」
と来たら、データ分析者は悲しみに暮れ、頬を涙で濡らすことになります。

そして、それが何度も起きたら。。。

◆おわりに

記載したケース以外に、もっとつらいケースがまだまだ多く存在するかと思います。

また、データ前処理を終えても、様々な困難がデータ分析者を待ち受けていることでしょう。

  • さまざまさなデータ形式
    • webから取得(スクレイピング)
    • データベース(Oracle , DB2 ,…)
    • エクセル
    • CSV
    • XML
    • JSON
    • PDF
    • etc
  • 複数の言語とツール(R , Python , SPSS , SAS ,…)
  • データ容量
  • データ信頼性
  • データ分析に耐えられないPC
  • 基盤・システムの保守・開発
  • データ分析を全く知らない・不理解な人とのやり取り
  • etc

今回は、どんなデータを渡すと、データ分析者は困ることになるのか、という話でしたが、いかがでしたでしょうか。どういうことで困るのか、その理由の一端でも感じていただけたならば幸いです。

なお、「データ分析者を困らせるための~」と題しましたが、本当に困らせるためにデータを作ると、悲しい争いしか生まないので、決して故意に作らないようにお願い申し上げます。。。