- 筆者は Hacker Newsの全データをダウンロードし、それを DuckDBで分析した
- 20GBに及ぶ全アイテム(ストーリー + コメント)をJSONファイルとして保存し、今後の更新にも対応できる構成にした
- DuckDBを活用し、「Python」「JavaScript」「Ruby」「Rust」などの言及比率を週単位で時系列分析した
- SQLの作成にはLLMを活用し、初心者でも複雑な分析を簡単に進められた
- このプロジェクトは公開サイト hn.unlurker.com で確認でき、誰でもこのデータを分析のベースとして再利用できる
Hacker Newsの全データをクロールする
hn.unlurker.com の作成にあたり、Go言語で独自のHN APIクライアントを開発し、最新のGo機能とリンターを活用する個人プロジェクトとして始めた
- Hacker Newsのアイテム(HN APIにおけるストーリーとコメント)を、0番から順番にすべてダウンロードする
scan コマンドを実装
- ダウンロードは何度か中断されたが、再開可能な構造により数時間で約20GiBのJSONファイルを確保した
DuckDBによるテキスト時系列分析
grep で簡単なパターン検索をしていたところ、分析ツールとしてDuckDBを試用。小規模な単一ファイル分析に最適化された高速DBだった
- JSONファイルをテーブルとして読み込み、アイテム本文内で言及された言語の比率を週単位で計算
- Python、JavaScript、Java、Ruby、Rustのキーワードを含む比率を、12週移動平均で可視化できるようSQLを作成
- DuckDBの新しいUIのおかげで使いやすく、LLMの助けでSQLも簡単に作成可能だった
結果と今後の計画
- DuckDBはこの規模のデータ分析に優れた性能と使いやすさを提供した
- データ確保完了後、筆者は冗談半分本気半分で「LLMベースのボットを何百個も訓練してHacker Newsを置き換える」と言及
- しかし実質的なデータ収集と分析の目的は達成され、プロジェクトはここで終了
- 今後の分析は、誰かがこのデータをもとに新しいインサイトを引き出す役目だと述べている
参考リンク
1件のコメント
Hacker News のコメント
2つのDBがHacker Newsのテーブルを更新しており、ダウンロードせずに分析できる
過去に @fesshole のTwitter/Blueskyアカウントに対して似たようなことをした
Hacker Newsの全内容を含む20 GiBのJSONファイルを持っていた
Javaに対するクエリにはJavaScriptのすべてのインスタンスが含まれるため、Javaが過大に表現されている
Hacker Newsをダウンロードするときのネチケットは何なのか気になる
今後は多くのAPIがduckdbファイルを返すオプションを提供するようになると予想している
似たような作業をしたことがある
Hacker Newsの全コンテンツをローカルにダウンロードしたあと、LLMベースのボットを訓練して投稿者として運用できる
累積チャートを使わないでほしいという要望
過去にHacker Newsのデータダンプを作成したことがある