今回は、データの「前処理」について話そうと思う。
前処理、と本稿で呼ぶのは、機械学習や可視化の前の処理すべてで、具体的には抽出や集計などの「データ加工」や「データ検証」のことを指す。
前処理は、これが結果に直結するというものではないため、データ活用事例の紹介記事などで触れられることもまずなく、分析業務に直接携わる者でなければその存在を意識することもないのではないだろうか。
ところが「データ分析業務は8割が前処理」と揶揄(やゆ)されることがあるほど、分析業務における前処理の比重は大きい。また、前処理が終わらなければ機械学習などの本格的な分析を始めることができないという構造もあり、分析プロジェクトのボトルネックに、容易になりうるのだ。
統計処理や機械学習に比べて単純な作業が多いせいか、あまり分析に必要なスキルとして一般に認知されていないと筆者は感じているが、実際には前処理はスキルが必要で、それ次第では(特にデータ加工の部分に関して)前処理にかかる時間を圧倒的に短縮できる。
扱うデータソースによって使えるソフトウェアや知識も異なるものが要求されるし、巨大なデータをさばくためにはデータベースや大規模並列分散環境を整えておく必要もあるが、準備とスキルとやり方次第で、前処理に掛かる時間はかなりコントロールできるようになるというのが筆者の主張である。
前処理は極めて重要
本稿では、データ加工や検証のための典型的な処理について、主にこれからデータ分析を始めるチームを対象に説明する。特に、分析のために溜めていたわけではないデータを分析する状況を想定している。
例えば、売り上げを計算するために蓄積されていた買い物のレシートデータ(POS)を分析によってマーケティングに生かす、というような状況であるが、現在のデータ活用過渡期と呼ぶべき現在においては、頻繁に直面する状況ではないかと思う。このような場合、データが正しく蓄積されていたかどうかの検証と、蓄積に適した形のデータから分析の目的に合わせた形への加工が必要になる。
一方で、分析の仕組みがシステムに組み込まれている場合や、蓄積用の他に分析用のデータを作って溜めているというような場合は前処理にかかる苦労は圧倒的に少なく、本稿で言うほど前処理が大変ということはないだろう。だが、現在はそうでない状況はまだまだ多く、分析を意識したデータ設計が当然になり、十分蓄積されるまでにはまだ間があると思われる。
まずは、データ加工の典型的な処理として、テーブル形式のデータに対して、筆者のチームでよくやる処理を紹介する。
テーブル形式のデータは、典型的にはリレーショナルデータベース(RDB)に保存されているもので、表計算ソフトで用いられる二次元配列をイメージされると良い。列方向(縦)の並びに意味(属性と呼ぶ)を持たせ、行方向(横)の並びが一つのモノを表す。列を「フィールド」、行を「レコード」とも呼ぶ。