こんにちは、麗です。
前編では、CSVに時刻の列がない問題を、ポストID(Snowflake ID)から時刻を復元することで越えた話を書きました。
後編は、実データを入れた瞬間に出てきた、もっと大きな壁のお話です。
完成したツールはこちら。

壁その2:実データを入れたら、ランキングが「成立しなかった」
ロジックができて、いざ自分の実データを入れてみました。
ここで、一番大きな壁が出てきました。
ベスト時間帯のランキングが、表示できない。
理由はすぐにわかりました。
曜日7 × 時間帯24 = 168個のマスがあるのに対して、3ヶ月分のCSVに入っていたのは数十件。
自分の場合、リプライを抜くと72件でした。
168個の枠に72件を散らせば、1マスあたり平均0.4件。
ほとんどのマスが「1件」か「ゼロ件」になってしまいます。
これでは「火曜21時が最強!」と言われても、根拠はたった1投稿。
まったくあてになりません。
実際、検証中にこんなことが起きました。
たった1件しかないマスが「平均インプレッション1693」を叩き出して、堂々と『ベスト時間』の顔をしていたんです。
その1投稿がたまたま伸びただけ。
平均でもなんでもありません。
個人のSNS分析で、平均値が平気で嘘をつく典型例です。
毎日決まった時刻に投稿している人でもない限り、誰もがこの壁に当たると思います。
解決:嘘をつかせない。代わりに「粒度」を変える
対処の方向は、二つありました。
ひとつは「1件でも表示する」。
採用したのは、もうひとつのほう。
「5件未満のマスは灰色にして、ベスト3の対象から外す」でした。
この最低件数のルールは、絶対に崩さないうえで、集計の粒度のほうを自動で粗くしていくことにしました。
具体的には、こう段階を踏みます。
まず「曜日×1時間」で見る → 足りなければ
「曜日×時間帯(朝・昼・夜などのざっくり区分)」に広げる → それでも足りなければ
「時間帯だけ」「曜日だけ」まで粗くする
そして、どの粒度に切り替えたのかを画面に正直に表示します。
「データが足りないので、曜日ごとの傾向に切り替えました」というふうに。
データが少ないことを隠してそれっぽい数字を出すのではなく、「今はここまでしか言えません」と正直に言う。
少ないなら少ないなりの、信頼できる答えだけを返したかったんです。
灰色のマスは、飾りじゃありません。
嘘の『ベスト時間』を生まないための、いちばん大事な機能なんです。
データは、ブラウザの外に出ない
設計で守ったことを、ひとつだけ。
このツールはHTMLファイル一枚でできていて、外部のライブラリも、サーバーへの送信も一切使っていません。
落としたCSVは、あなたのブラウザの中だけで処理されて、どこにも送られません。
アカウントの分析データという、それなりにセンシティブなものを扱うからこそ、ここは外せませんでした。
おわりに
派手なツールではありません。
やることはひとつ、「自分の投稿のベストな時間帯を、実データから可視化する」だけです。
機能を盛らず、一点に絞りました。
つまずいたのは、CSVに時刻がなかったことと、実データを入れたら件数が足りずランキングが成立しなかったこと。
どちらも「やってみて初めてわかった」壁で、Fableと相談しながら一つずつ越えていきました。
もし同じように「自分のベスト投稿時間」が気になっている方がいたら、よかったら触ってみてください。
(ご利用はXプレミアム以上に加入している方が対象です。無料プランではCSVが取得できないため使えません。)