第53回 プログラミングの現場感覚
コンピュータにしろネットワークにしろ,ITはただの道具である.それを使ってナンボのものだというのは良くわかる.コンピュータの中の仮想空間と言ったところで,それを構成する現実社会のデータが存在することが多い.情報システムが使われる目的や現場の状況を理解しなければ,SE業は務まらないのである.
学生が作っているソフトウェアや実験装置を見ていると,物理や現実社会の拘束条件をまったく無視しているので,びっくりすることがある.式から出てくる数値をまったく疑わないから,何かのまちがいでトランジスタのコレクタ電圧が1万Vになっても,何の疑問も持たない.それは変だと気がつくのは多少なりとも現実を知っているからなのだが,単体のトランジスタを見る機会もない今の学生には,もはや現実に触れる機会などないのである.
ITも現実リアル・ワールドとつながってこそ意味があるのだが,リアル・ワールドはなかなか手ごわい.今回は最近私が経験した現場感覚のプログラミングよもやま話をしよう.
まだあった16ビットの壁
ある企業との共同研究で,北海道と沖縄の大手スーパーマーケットのPOSデータを使うことになった.データの中身は,全商品について店舗ごとの1日単位の売り上げ個数と売上額を数年間分集計したもので,それがCSV形式になっている.大型スーパーになるとリストにある商品数は5万種以上,店舗数も100以上になる.1年間分としても,単純に計算すると18億レコード強になる.実際はすべての店舗がすべての商品を扱うわけではないから,それより小さいが,億単位のレコード数は確実にある.
そこで,まずはデータを見てみようということで,1か月分だけExcelに読み込んだところ,16ビットの壁にぶつかった.このデータは1か月分でも1千万くらいはあるのだが,Excelの行数は最大65,536行に制限されているのである.Excelが想定しているのは人間が手入力できるようなレベルの行数ということで,切りの良い16ビットの行番号になっているらしい.ということで,現実のデータの中身を見るために小さなプログラムをVB6で作ることにした.
次は32ビットの壁
提供された生データはCSV形式なので,VB6でスキャンするのは簡単なことである.ある商品の年間売り上げ集計や季節変動などをグラフ化するのは赤子の手をひねるようなものと思っていたら,ここにも壁があった.このデータベースは1500億円規模の系列スーパーの全売り上げである.このスーパーの事業規模を知りたくなって,売り上げ金額をすべて足してみようと思ったのだが,VB6の整数は16ビットと32ビットで,32ビット符号なしとしても,約40億円までしか積算できないではないか.VB.NETでは64ビット整数が使えるのだが,それだけのためにVB.NETに切り替えるのもつらい.VB6版の画像処理や表示のライブラリが手元にあることもあり,なんとかVB6の枠内でこなしたいところである.苦肉の策で,倍精度実数(64ビット IEEE753形式)を使うことを考えた.教科書的にはお金の計算には整数を使うのが常識なのだが,場合によっては実数を使うことができる.つまり,64ビットのIEEE754形式では仮数部が52ビットあり,計算法も規格化されているので,10進で15桁までの整数は誤差なく表現されているのである.もちろん一度でも端数が出る計算を行ったらアウトであるが,足し算,掛け算,割り切れる割り算しか行わなければ,約100兆円まで整数と同じように扱えることが保証されている.
POS情報にはJANコードという13桁の商品コード(バーコード)も付随するのだが,これも32ビットの範囲を越えている.それでも15桁以内だから倍精度実数で取り扱うことができる.文字列扱いでも良いのだが,売り上げデータ構造体のサイズや一致比較の速度などが大きく違ってくるのである.
もちろん,銀行や大規模流通の世界ではこういったデータを日常的に使っているわけで,今回私が経験したような事例はすべて織り込み済みなのである.COBOL言語はそういう現実の経理データを取り扱うために設計されていたわけで,私がCOBOLの現場感覚を知らなかったというだけのことなのだ.
現実のデータから見える現実
なんだかんだと苦労して,総額5000億円分のPOSデータがPCで閲覧できるようになったのだが,これが明らかにする現実もいろいろと興味深いものなのである.
チョコレートといえばバレンタイン・デーということで,その代表的な板チョコの1月,2月の売り上げを北海道と沖縄で比べてみたら,おもしろい傾向を見つけた.北海道ではバレンタイン・デーの3週間前から週末にピークを作りながら徐々に売り上げが上がってくるが,沖縄では2月14日直前の週末に一度だけ鋭いピークを作るのである.北海道の中にも地域性があって,港町のスーパーほど早期から売れ出す傾向がある.身近な女性たちにこの話をしたら,スーパーで買うチョコレートは加工用原材料のチョコレートであり,それは溶かされて別な形になって彼氏のところに届くので,事前の加工の時間があるということらしい.ということは,北海道の女性は数週間前にターゲットの彼氏を想定して行動しているが,沖縄の女性は直前に贈る相手を決めているのだろうか.
来年のバレンタイン・デーのデータ分析が楽しみである.
やまもと・つよし
北海道大学大学院情報科学研究科
メディアネットワーク専攻
情報メディア学講座
|