データの差分チェックが大変だったことはありますか?
私はマーケティング・営業企画の仕事でデータを扱っているので、定期的にダウンロードするデータや、システムに取り込む前のデータ修正時など、2つのデータの相違点(変わった点)をチェックすることがよくあります。
限られた差なら、目で見比べれば確認できます。同じ順番に並べ替えて隣に置くと見比べることも効率化できます。しかし件数が増えてくるとそうもいきませんし、人が変えたデータには、「変えたよ」と伝えてくれたところ以外にも意図的なものか意図しないもの問わず、差は含まれてきます。
同じかどうかを判定するのはコンピューターの得意とするところです。
なので本当は人の目を酷使するのではなく、ツール化・自動化をしたいところ。
と思いつつもなかなかこれといったツール化や自動化ができてないので、記事にします。
差分チェックとは何か
2つのテキストデータの違っているところをチェックすること、とここでは表現します。
テキストデータといっても、.txtの拡張子ファイルだけではなく、csv/tsvやExcelやスプレッドシートの表形式のデータも含みます。
例えば、3か月分の売上データがあったとします。
会社名, 12月売上, 1月売上, 2月売上
ABC company. , 1000000, 1000000, 900000
ABC company, 1000000, 9000000, 900000
こういうデータに対して、会社名と2月売上が変わっていることをチェックするのを差分チェックと呼びます。
差分チェックに使えるツール
Webやダウンロード型のDiffツール
テキストの差分チェックには以下のようなツールが使えます(データの取り扱いにはご注意ください)
すると手軽に、会社名と2月の金額の差を検知できます。
Diff(ディフ) とは、Difference(ディファレンス)の略で、2つのファイルを比較するソフトウェアのことです。例にあげたような簡易Webツール以外にも、無料で使えるツールがあります。
DF(デフ)というツール(DF の評価・使い方 – フリーソフト100)は、実際のプロジェクトで使っていたこともあります。
OSやDBMSのコマンド
Unix/Linuxにはdiffという差分比較のコマンドもあります。
Oracleデータベースであれば、SQLの中に、minusコマンドというのがあります。
select * from テーブルA
MINUS
select * from テーブルB
テーブルAとテーブルBは項目定義が同じの時に、全項目の値が一致するレコードを除いて、差があるものだけを抽出してくれます。
Excel関数「=」「EXACT関数」
Excelでの差分チェックは、vlookup関数が思いつく方も多いかもしれませんが、もっとシンプルなのは「=」や「EXACT関数」を使うことです。
Excelは大文字と小文字を区別しないで同じものと見なす場合がある点は注意です。ピボットテーブルでは大文字と小文字違いは、同じものとして集計されます。また、セル比較を「=」でやった場合にはTRUE(一致)の答えが返されます。
Excelでデータ作成しておいて、AlteryxやTableauなど別ツール側に取り込んだ時に、別データだったことに気づくことはありますのでご注意ください。
EXACT関数を使うと、大文字小文字は区別されます。
Excel/Googleスプレッドシート関数「vlookup」
hlooupとか最近はxlookupという関数もあるようですが、とにかくマッチングして該当する行や列の別セルを引っ張ってこれるので便利です。「違う」だけではなく、何が違うのかを目で見比べることができます。
vlookupはGoogleスプレッドシートでも使えますね。
Excel同梱のCOMアドインInquire
自分で試せてないのですがExcel2013以降にはアドインがあるようなので試してみたいところです。
https://sqlazure.jp/r/tool/644/
Alteryx
Alteryx(アルテリックス)を使って2つのファイルを比較することも可能です。キー項目で複数のテーブルをJoinして、項目比較する感じですね。MS Accessでも、普通のデータベースのSQLでもやれることですが、それをGUIベースで、繰り返し可能なワークフローとして登録できるのが便利です。
人がやるかツールに委ねるか
なんでもツール化して自動化するのがいいかというとそうでもないと思っています。それにかけるコスト(お金も時間も)はかかるので、どこまでを人手でやって、どこまでをツールに委ねるかは、その差分チェック作業の目的や内容、求められる品質や実施頻度によってきます。
とはいえこの記事を読んでくださってる方は、差分チェックになんらかの形で関わっていて、だとするとチェック作業に時間をとられたり、チェック品質に悩まされたりしたことがあるかと思うので、紹介したツールのどれかが参考になれば幸いです。