腕に着けているスマートバンドの公式アプリから、記録をまとめて書き出す機能(エクスポート)を使った。届いたのは、表形式のファイル(CSV)が22個、合わせて40MB。いちばん大きいファイルは37万行を超えていた。
スマートバンドの話として読まなくていい。家計簿アプリやカード明細、ポイント履歴の書き出しでも、同じことが起きる。「書き出したはいいが、大きすぎて開けない」ファイルを、中身を読まずに把握する話だ。健康の数値そのものは、この記事には一切出てこない。
なぜ書き出して、なぜ全部読まなかったか
書き出した理由は単純で、アプリの画面で見られる範囲より長く、自分の手元に記録を残しておきたかったからだ。ところが届いたのは、中身の分からないファイルの山だった。消してよいものか、残すべきものか、それを決めるには「何が入っているか」を知る必要があった。
全部読まなかった理由も単純だ。自分は、この手のファイルを自分で開く代わりに、AIに整理させることが多い。ただしAIには、一度に読める文字の量に上限がある。40MBの文字ファイルは、その上限を1回で超える。読ませた時点で、そのあとの指示が何も入らなくなり、作業がそこで止まる。
以前、似た大きさのファイルを不用意に読ませて、実際にそうなった。整理を頼んだつもりが、読み込みだけで終わってしまい、やり直しになった。それ以来、「大きなファイルは全文を読ませない」と決めて、手元のメモにも書いてある。今回はその決めごとを守った側の話だ。
最初に取ったのは「形」だけ
宅配の箱を開ける前に、伝票の「個数・重さ・発送日」だけを見るのに近い。中身を見なくても、何がどれくらい入っているかの見当はつく。
言葉を先にそろえておく。この手のファイルは表の形をしていて、1行が1回の記録、列が項目(いつ・何の記録か・値)にあたる。37万行というのは、37万回分の記録という意味だ。
やったことは4つ。どれも、ファイルの中の値は1つも読んでいない。
- ファイルごとの行数を数える
- 各行が「何の記録か」を示す列だけを数える
- 時刻の列の、いちばん古い日付といちばん新しい日付を取る
- 月ごとに何行あるかを数える
具体的には、AIにこう頼んだ。「このフォルダにあるファイルについて、値の列は読まずに、ファイルごとの行数、記録の種類ごとの件数、時刻の最小と最大、月別の件数だけを数える手順を書いて」。返ってきたのは、パソコンで動く小さな集計プログラムだった。それを自分のパソコンで実行すると、結果が数十行の一覧になって出てくる。人間がやったのは「値は読むな、件数と日付だけ取れ」と決めたことと、出てきた一覧を読むことだけだ。
分かったこと
まず、22個のうち10個は空だった。中身が0バイト、つまり何も書かれていない。さらに5個は見出しの行だけで、記録が1行もない。実際にデータが入っていたのは7個だけだった。
次に、行数の偏り。全部で37万6千行ほどあるうち、99.6%が1つのファイルに入っていた。センサーが刻んだ、加工前の記録だ。残りのファイルは、7つ合わせて1,600行ほどしかない。
その加工前の記録を「種類」で数えると、上位2種類だけで全体の70%を占めていた。しかも2つの件数がぴったり同じだった。同じ周期で同時に書かれている値だと考えられる(値や時刻を突き合わせたわけではないので、ここは推測だ)。容量を食っていたのは、実質この2種類だった。
ここが一番の学びだったのだが、日ごとに集計済みのファイルが別に1つ入っていた。1,448行、261KB。1日につき指標ごとに1行ずつある形で、期間は加工前の記録と同じだった。日々の推移を見るのが目的なら、37万行の方ではなく、まずこちらを開くのが順番だと分かった。今回はそこまで行っていない。
冒頭の「異常に古い日付」が目印だった
時刻の列で、いちばん古い日付を取ったら、2000年12月31日と出た。バンドを着け始めたのは今年だ。
行数を見ると、その日付を持つ行はたった2行。ダミーの値だった。書き出しの仕様で、日付が無い記録に仮の日付が入るらしい。公式の説明を確かめたわけではないので「らしい」と書く。この2行を除くと、実際の期間は約3か月だった。
もし「一番古い日付」だけを見て「2000年からのデータがある」と読んでいたら、期間の見積もりが四半世紀ずれていた。自分の場合は着け始めた時期を覚えていたから疑えたが、他人のデータや古い書き出しなら、そのまま信じていたかもしれない。件数と日付を並べて取ったから気づけた。片方だけなら、たぶん見落としている。
開く前に「何か月分・何件・いちばん古い日付」を見る
自分が今回持ち帰ったのは3つ。
大きなファイルは、「値」より先に「形」を取る。
行数、種類ごとの件数、日付の最小と最大、月ごとの分布。この4つで、中身を1行も読まずに「何が、どれだけ入っているか」は分かる。値の良し悪しは分からない。それでも、消してよいか・どれを開くべきかは決められる。
一番古い日付が、自分の記憶とかけ離れていたら、ダミーを疑う。
書き出し機能は、空欄を仮の値で埋めることがある。「最小値」を鵜呑みにしない。件数を横に置く。
加工前の記録と集計版が両方あるなら、集計版から開く。
37万行の隣に、1,448行の日次集計があった。目的が「推移を眺める」なら、後者から。加工前の記録は、集計版で説明がつかなくなったときに初めて開く。
家計簿やカード明細の書き出しに置き換えるなら、こうなる。開く前に「何か月分か、何件あるか、いちばん古い日付はいつか」を先に見る。その3つだけで、開く必要があるファイルかどうかは決まる。
同じ健康まわりのデータでは、体組成計の測定を自動で取ってくる仕組みを組んだ話と、その初回が来なかった話も書いた。あちらは「取ってくる側」、今回は「取ってきたあとに読む側」の話になる。
各指標の値そのものは、今回は見ていない
この集計で分かったのは「何が、どれだけ入っているか」までで、各指標の値そのもの(平均や推移)は今回まったく見ていない。必要になったら、日次集計版を対象に別途やる。
展開した40MBのフォルダは、元の圧縮ファイル(2.4MB)から作り直せる。だから展開フォルダは消してもよいのだが、消す前にこの集計の結果を1枚のメモに残した。結果が残っていない状態で消すと、次に同じことを知りたくなったとき、また40MBと向き合うことになるからだ。
本記事にアフィリエイトリンクやPR案件は含まれていない。


Comments