仕事で使うデータは、だいたいExcelでハンドリングできる範囲で収まっているのだが、先日1レコードあたりの情報量はさほどではないものの、1000万レコードを超えるデータを扱うことになってしまった。当然、Excelではオーバーフローするので、チームのAccess使いにお願いしてデータを作ってもらっていたのだが、なかなか思うようにならないのも一面の事実。
そこで、BIツールのTableauを使ってみることに。以前からライセンスは持っていたのだが、あまり使いこなせず、主にパートナーメンバーに使ってもらっていた。恐る恐る使い始めてみると、癖はあるもののそれに慣れると意外と使いやすそうなイメージ。そこでAmazonでHow To本を購入。Tableauのソフトに同梱されているサンプルデータを使いながらの解説なのでわかりやすかった。連休の谷間に自分でもやりながら本を読みすすめる。大体のグラフの作り方は理解できたように思う。あとは、単独の分布に対する各種統計値をどうやって計算し、表示させるかかな。
次いで、件の1000万レコードのデータに挑戦。ヒストグラムを作って、平均値などを求めるのが目的。ヒストグラムを作ったところ、グラフが現れない。区間幅を示す「ビン」の幅を思いっきり広げたところ、どかんと現れた。データを見直してみると、数値の低い区間にその殆どが集中しており、しかも、最大値が非常に大きい極端なロングテールになっていることがわかった。なので小さい区間幅(ビン)でヒストグラムを作るとL字型に近いものができて見えないということだった。そこで、X軸の最大値をデータよりも小さく設定するとそれなりのグラフが出来上がった。
スッキリしたのもつかの間、今度はビンの設定の問題が発覚した。Tableauは下限値を超え、上限値以下のデータをその区間のデータとして集計している。今回ほしいのは、下限値以上、上限値未満の集計だ。設定を見てみたがそのような設定は見当たらず。Google先生にお伺いしてもこれといったお答えは無し。
昼休みを挟んで頭を捻ってみたが、なかなかこれといったアイディアは浮かばず。トイレに経ったときにひらめいた。区間の境界値を1ずらしてみてはどうだろう?つまり1以上10未満のデータを集計したいときには、0超10以下の区間に対してデータを-1したものを集計する、と言ったもの。これは今回ヒストグラムで分類したい値が自然数なので有効そうだ。各行のデータを-1したものを作って、それで普通にビンを設定。その行のヒストグラムを作ってみるが結果は変わらず。試行錯誤しているうちに、区間は-1したもので作成し、集計は元データでやってみると見事に出来上がった。あとから考えてみると、そりゃそうだ。両方とも-1すると区間をずらすことにはならない。
これでスッキリ。ヒストグラムを作りたいデータが小数点以下を含んでいたらどうするのか、それはまた次の宿題。ご存じの方がいたらぜひ。