1.準備

1_3 分析の進め方(2019/1/11)

1)目的の整理

データがあるので、何かできるかを色々と試してみるというアプローチもあるかもしれませんが、本ブログでは、目的をもってデータ分析をするというアプローチについてのみ説明します。目的が無くデータ分析をしても無駄が多くなりますので、目的が分からない場合も先ず目的を整理してみるということをお勧めします。
つまり、何が知りたいのかを整理するということがデータ分析の最初の仕事ということになります。
しかし、目的は既に示されているからか考える必要は無いと思われる方もいるかもしれませんが、もし、目的が示されていた場合であっても、その目的が示されている背景を考えるのは重要なことです。目的が示されていても、その目的が曖昧な場合もあります。
データ分析を始める時は、最初のアプローチとして、必ず、どういう背景があって、何のために、何がしたいのかを明確にしてください。また、必要に応じて、納期、予算等の5W1Hの整理をすることをお勧めします。但し、データ分析の仕方については、以下で説明します。

2)データの整理

目的を達成するために手段としてデータ分析を行います。その為のデータを確保しなければなりません。
データは既に与えられているということもあるかもしれませんが、その場合であっても、目的を達成するに足りえるデータであるかを再確認してください。不足している場合は、補うことが可能かを確認してください。例えば、追加のアンケートを実施するとか、追加の日付のデータを入する等ということです。不十分なままでデータ分析を進めなければならない事も多いですが、その場合は、目的達成に対するどういう制限があるかを整理しておくことが重要です。稀ですが、データ分析することに意味が無い事もあります。
また、逆に、不要なデータが含まれていることもよくあります。不要なデータを含めてデータ分析を進めても無駄が増えるだけですので、データ分析の最初の段階で無駄をそぎ落とす事をお勧めします。
以下では、データ分析の為のデータが揃っている事を前提にして話を進めます。

3)シナリオの整理

データ分析を始める前に手順を決めなければなりません。納期に合わせて担当やスケジュールも併せて決める必要もあるかもしれません。
データ分析は、目的を達成するために多段階の作業をすることになります。一般的には、部分的な検証、複合的な検証等を通じて最終的な目的の検証を進め、最終的な検証を実施した後は、当該検証の妥当性を検証します。
データを分析して見なければ、手順を決められないということもよくありますが、その様な場合であっても、必ず、予想を立てて手順を決めてください。
例えば、概要の分析を行い、問題となっている部分を洗い出し、問題となっている部分にフォーカスして深堀していくということがよくあります。この様な場合は、データ分析をしてみなければ、問題となる部分が分からないので、手順を定めることができないと思うかもしれません。しかし、その様な場合であっても、このデータでこの目的を達成しようという意図があるのであれば、こういう分析をすればこういうことになるのではないかという何かしらの仮説があるはずです。つまり、その仮説に従って手順を定めようということです。
時間の制限が無く、ノーベル賞級の研究を成し遂げたいという様な事ではなく、目的と納期があってデータ分析を行うのであれば、スケジューリングは必須です。即ち、データ分析の手順があって、目的が達成されていくというシナリオが必須だということです。
また、仮説を立ててシナリオを作成してデータ分析を行うということは、データ分析者のノウハウの蓄積と能力向上に貢献します。データ分析のシナリオは、間違えることがよくあります。最初に想定していた仮説が間違えていたという場合もありますが、データ検証の方法の誤りや場合分けの誤りに気が付いたり、データ分析の途中でより良いアイデアを思いついたりすることがよくあります。そうした場合は、シナリオを書き換えてください。こうして予定を立てて、予定を見直すという行為をすることで人間は成長することができます。シナリオを作成せずに修正した場合は、その後も同じ過ちを犯してしまいます。
必ず、予めシナリオを整理するという習慣を身につけてください。スケジュールの作成においては、この様なシナリオの変更があり得るということを想定しておくことも必要です。こうしたことで、データ分析のプロジェクト管理能力も身についていきます。

4)その他留意事項

データ分析は、シナリオに従って、スケジュールに合わせて進めていくことになりますが、必ず行ってもらいたい留意事項があります。(1)データの確認、(2)データ分析の記録、(3)再現性の確保、以上の3点です。
「データの確認」とは、入手したデータを信用しないという立場をとって下さいということです。想定していた通りのデータでは無い事がよくあります。例えば、想定外のコードがある、余分なデータがある、並び順が異なる、あるはずのものが無い、データ件数が想定外等です。先ず、テキストエディタで実データを眺めることをお勧めします。百聞は一見に如かずです。データ項目毎に基礎統計量をチェックするという様な事も重要ですが、眼で見ることでしかわかり得ないことがあります。眼で見る時は、データの最初の方は丹念に見てください。そして、最後も確認してください。更に、全件を確認してください。
ビッグデータの場合、全件を確認するなんて不可能だと思われる方もいるかもしれませんが、テキストエディタで読み込める範囲のデータであれば、何件であっても眼で確認できます。テキストエディタには、右端にスクロールバーが付いていますので、そのスクロールバーを上から下までスライドするだけです。これを時間の許す範囲でゆっくりとスライドさせてください。多くの場合、異常なデータがあれば、そうそう速いスピードでスライドしていても見つけることが可能です。人間の眼は非常に優れた確認能力があることに痛感させられます。
「データ分析の記録」とは、まさしく行ったことはすべて記録に残しておくということです。データ分析件数、欠測値・エラー件数、処理時間、留意事項等です。プロジェクトによっては、誰がいつ行ったのかも重要になります。
「データ確認」の結果によっては、データクリーニングが発生する場合があります。データ提供元に確認して修正する必要がある場合もありますし、修正ができず何かしらの代替的な手段を採ることもありますが、このデータクリーニングについては、何をどの様に行ったのかを具体的に記録しておいてください。
データ分析は、同じことを繰り返し行うことが多くあります。同じことではなくとも似たようなことを行うことはよくあります。そのような場合に重要になるのが、以前に行ったプロジェクトのシナリオやそのデータ分析の記録です。これがデータ分析のノウハウになります。
「再現性の確保」とは、プロジェクトで行ったデータ分析を、最初から最後まで、同じことが処理可能であり、同じ結果が得られるということを保証するというものです。
また、部分的な再現性を確保する事も望まれます。例えば、部分的に条件を変えてやり直す必要が発生するようなことはよくあります。この場合、最初からやり直すのではなく、必要最低限の範囲で、再処理可能であることが重要です。データ分析は、より良い結果を閲るために、可能な範囲で何度でも処理をやり直すことが求められます。全ての場合分けで考えたら星の数の様になってしまうので、統計的に妥当な範囲でケースを絞り込んで行う場合もあります。
データクリーニングを行った場合は、元のデータとクリーニング後の両データを残すだけでなく、記録から同様の修正が可能になる様、データクリーニングの再現性も確保するようにしておいてください。
人間は間違う生き物ですので、自分の行ったことは間違っている可能性があるものと考える必要がります。つまり、再現性を確保し、処理結果の検証ができるようにしておくことは必須だということです。

5)プロジェクトの準備

データ分析は、プロジェクト単位で管理できるようにすることが必要です。複数の人間が関わるプロジェクトで複数のパソコンを活用することに案る場合は、異なるパソコンでの処理結果を1カ所で管理できるような方法が求められることになりますが、本ブログでは、1人の人が1台のパソコンでプロジェクトを遂行するという前提で説明します。
プロジェクトの管理を容易にするため、1つのプロジェクトは、1つのフォルダの下で管理します。本ブログでは、「Cディスク」の下に、「Python」というフォルダがあり、その下にプロジェクト毎のフォルダがあるものとして説明を進めます。例えば、「教育用標準データセット(ssdse)」に対する分析というプロジェクトがあった場合、「C:\Python\ssdse」というフォルダを作成します。プロジェクトの名前は、区別がつくように命名してください。
また、同じプロジェクトが複数あるような場合は、ssdse1、ssdse2の様に区別したり、年別であれば、ssdse2018、ssdse2019の様にプロジェクト名に年を付す等して区別してください。複数ある場合は、ssdseというフォルダの下に、ssdse2016、ssdse2017、ssdse2018、ssdse2019のフォルダを階層的に作成する等してください。
プロジェクト毎のフォルダの下には、シナリオが置かれ、元データのフォルダがあり、シナリオに従った各処理毎のフォルダが置かれます。処理毎のフォルダの下には、当該処理プログラムや当該処理結果データが配置されます。処理手順は、プログラムと別に記述しても良いですが、煩雑にならなければ、プログラム内に、コメントとして記載してもかまいません。処理結果をプログラム内に書くことも可能です。本ブログでは、複雑なプログラムを示すことはありませんので、プログラム内に手順や処理結果を記載する方法で示します。
それでは、プロジェクトのフォルダを作成し、元データやシナリオを整理し終えたら、処理毎のフォルダを用意しながら処理を進めてください。本ブログもこの様なスタイルで説明を進めていきます。