5 ポイント 投稿者 GN⁺ 2025-05-02 | 1件のコメント | WhatsAppで共有
  • 筆者は 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件のコメント

 
GN⁺ 2025-05-02
Hacker News のコメント
  • 2つのDBがHacker Newsのテーブルを更新しており、ダウンロードせずに分析できる

    • BigQueryにはGoogle Cloudアカウントが必要で、クエリは無料枠に収まりそう
    • ClickHouseは登録不要で、ブラウザから直接クエリを実行できる
  • 過去に @fesshole のTwitter/Blueskyアカウントに対して似たようなことをした

    • 完全なアーカイブをダウンロードし、モデルをファインチューニングして、より気の利いた告白を生成した
    • しかし結局、罪のない機械に不適切な内容を教え込んでしまったのだと気づいた
  • Hacker Newsの全内容を含む20 GiBのJSONファイルを持っていた

    • テキストだけのサイトなのに、この量には驚いた
    • 18年間で200億バイトを超えるテキストが投稿されていた
  • Javaに対するクエリにはJavaScriptのすべてのインスタンスが含まれるため、Javaが過大に表現されている

  • Hacker Newsをダウンロードするときのネチケットは何なのか気になる

    • サーバーに負荷をかける前にDangに問い合わせるべきなのか、それとも大手テック企業がすでに何度もやっていると考えるべきなのか
  • 今後は多くのAPIがduckdbファイルを返すオプションを提供するようになると予想している

    • どうせjsonをデータベースにロードするのなら、レスポンスとしてデータベースを受け取るほうが効率的だ
  • 似たような作業をしたことがある

    • BigQueryのデータセットを使ってデータをparquetとしてエクスポートし、ダウンロードしてduckdbでクエリした
  • Hacker Newsの全コンテンツをローカルにダウンロードしたあと、LLMベースのボットを訓練して投稿者として運用できる

    • これは冗談で言ったことだが、いつか誰かが試すのではないかと恐れている
  • 累積チャートを使わないでほしいという要望

    • 読者の認識を歪める可能性が高い
    • 特定のデータポイントの高さを判断しづらく、依存関係を示唆してしまうことがある
  • 過去にHacker Newsのデータダンプを作成したことがある

    • 新しい項目ほど時間とともにより多く更新されるので、最近ダウンロードした項目が古い項目よりも古く見えるような機能を実装するとよさそうだ