はじめに
今年も Advent Calender の季節がやってきました
というわけで 2024 年も「誰が何記事投稿しているか」を Livebook で視覚化しています
2023 年の最終的な結果はこちら
最大が @piacerex さんの 62 投稿で、 7 名もの完走者がいます
14 シリーズ * 25 記事 = 350 記事という怒涛の勢いです
というわけで、 $\huge{2024 年も Livebook でカレンダーの状況を見ていきましょう!}$
実装したノートブックはこちら
実装
昨年のノートブックを少し更新し、 2024 年の現時点のカレンダーを確認します
セットアップ
Mix.install([
{:req, "~> 0.5"},
{:req_easyhtml, "~> 0.1"},
{:explorer, "~> 0.9"},
{:kino, "~> 0.14"},
{:kino_vega_lite, "~> 0.1"}
])
エイリアス、マクロの設定
alias Explorer.DataFrame
alias Explorer.Series
require Explorer.DataFrame
リクエストの準備
req =
Req.new(http_errors: :raise)
|> ReqEasyHTML.attach()
Elixir Advent Calendar 2024 のデータフレームへの読込
calendar_df =
req
|> Req.get!(url: "https://qiita.com/advent-calendar/2024/elixir")
|> then(& &1.body["[data-js-react-on-rails-store=AppStoreWithReactOnRails]"].nodes)
|> Floki.text(js: true)
|> Jason.decode!()
|> get_in(["adventCalendars", "tableAdventCalendars"])
|> hd()
|> Map.fetch!("items")
|> Enum.frequencies_by(&get_in(&1, ["user", "urlName"]))
|> then(fn map ->
%{
name: Enum.map(map, fn {name, _} -> name end),
count: Enum.map(map, fn {_, count} -> count end)
}
end)
|> DataFrame.new()
データテーブルの表示
calendar_df
|> DataFrame.arrange(desc: count)
|> Kino.DataTable.new()
グラフ表示
x = Series.to_list(calendar_df["name"])
y = Series.to_list(calendar_df["count"])
VegaLite.new(width: 800, height: 400)
|> VegaLite.data_from_values(x: x, y: y)
|> VegaLite.mark(:bar)
|> VegaLite.encode_field(:x, "x", type: :nominal, sort: "-y", title: "アカウント名")
|> VegaLite.encode_field(:y, "y", type: :quantitative, title: "記事数")
2024 年 12 月 1 日時点の更新です
私がまだ 41 記事で独走しています
きっと、誰かが追い抜いてくれるはず
2024 年 12 月 6 日時点の更新です
完走予定者が 4 名に増えました!
私は 65 記事まで来ました
100 まで行けるか!?
2024 年 12 月 11 日時点の更新です
完走予定者 5 名!
私はついに 3 周完走しました
まとめ
開始前から 3 名の完走予定者がいる状況
さすが Elixir ですね
この記事は今後も定期的に更新していきます