BigQueryで出したデータをExcelでVLOOKUPしたら大文字小文字を区別しなくてハマった話

@curry_ddd
·

ほぼタイトル通りです。BigQueryで集計したデータをExcel上でVLOOKUPしたら、BigQueryでは大文字小文字を区別して集計できていたところ、Excelはそこを無視するので、思ってたんと違うデータをVLOOKUPしておかしなことになりました。

解決法

・BigQueryで完結する

・INDEX +MATCHでなんとかする

です。

後者でやりました。

何をしようとしたのか

(ここから先はある程度ぼかしてます)

分析対象はセレクトショップ(アパレル系)のECサイトです。

いろんなブランドを扱っており、取扱ブランドを増やしたり減らしたりする中で、ECサイトの新規獲得に貢献しているブランドが知りたいねということになりました。

で、直近3か月ぶんの購入履歴から、「初めて購入した人」を抽出し、その初めてのお買い物ではどのブランドを買ったのか、という分析をすることにしました。

実数だけだと有名ブランドが有利なので、割合(初めて購入した人÷購入した人全体)で見て、新規のお客さんの割合が高いブランドは新規獲得に貢献できていると言えるんじゃないかな、という考え方です。

何をしたのか

①過去の購入履歴全体を集計対象にし、3か月以内に買っている かつ それが初めての購入だった という人の数を、ブランド名ごとに出しました。

②次に、3か月以内の購入全体に対し、(初めての購入かどうかに関わらず)ブランドごとに何人が買っているのか、というのを出しました。

②に対して①をブランド名をキーにVLOOKUPして、割り算をすれば、新規のお客さんの割合のデータが完成です!

何が起こったか

なぜか、新規のお客さんの割合が100%を超えるブランドがぽつぽつ出てきてしまいました。そんなはずはないんだけど……

なぜ起こったか

ブランド名に大文字・小文字の表記の揺れがあったことが究極的な原因です。

例えば「Nintendo」 と 「nintendo」 のどちらもある、みたいな感じです。

BigQueryは大文字と小文字を区別して集計するため、上記の2つは別のものとして集計されます。

しかし、VLOOKUPは大文字と小文字を区別しません。そのため、「Nintendo」 と 「nintendo」のどちらも、より上の方にある列の数字を引いてきてしまっていました。

今回は100%を超えるブランドが出て来たことで気づけましたが、たまたま100%を超えるものが無かった(数字が小さい方をどちらも参照していたケースなど)場合、気づくこと自体が困難であった可能性も高いです。

どうすればよかったか

本当は入力データが正しいのが一番いいんですが、そんなもん人間が作業している時点で無理なので、データ集計の担当者としてやるべきは「めんどくさがらずに割合の算出までBigQueryでやる」だったな、と思います。

クエリ書くよりExcelの関数でやっちゃった方が早いじゃーん、って手を抜いたからこんなことが起こる。

今回はタイムリミットが迫っていたので「Excel VLOOOKUP 大文字小文字を区別」でググり冒頭のブログに助けていただいたわけですが、本来ならより厳密に集計が可能なプラットフォームで作業を完結させるのが良いでしょう。

とっても勉強になりました。まだまだ世の中には落とし穴がたくさんあります、どんどん踏み抜いていかなきゃいけないな、と思いました。

@curry
日々のメモ Twitter: @curry_ddd Instagram: www.instagram.com/curry_ddd