13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2023

Day 20

完走賞を目指してみましょう!2023 on Livebook

Last updated at Posted at 2023-11-22

$\huge{元氣ですかーーーーッ!!!}$

はじめに

昨年、 @torifukukaiou さんの記事をパクったリスペクトして、以下の記事を書きました

Elixir Advent Calender 2022 について、誰が何記事投稿しているか、を Livebook で視覚化しています

2023/12/4 最新情報を追記

2022年の最終的な結果はこちら

visualization.png

最大が @torifukukaiou さんの 70 投稿で、 6 名もの完走者がいます

全体では 16 シリーズ * 25 記事 = 400 記事というとんでもないお祭り騒ぎでした

スクリーンショット 2023-11-22 10.02.03.png

というわけで、 $\huge{2023 年も Livebook でカレンダーの状況を見ていきましょう!}$

実装したノートブックはこちら

実装

と言っても、実は 2022 の実装をほぼ変えずに実行できてしまいました

依存モジュールをアップデートしたのと、 2022 を 2023 に書き換えるだけで実行できました

セットアップ

Mix.install([
  {:req, "~> 0.3"},
  {:req_easyhtml, "~> 0.1"},
  {:explorer, "~> 0.7"},
  {:kino, "~> 0.11"},
  {: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 2023 のデータフレームへの読込

calendar_df =
  req
  |> Req.get!(url: "https://qiita.com/advent-calendar/2023/elixir")
  |> then(& &1.body["[data-js-react-on-rails-store=AppStoreWithReactOnRails]"].nodes())
  |> Floki.text(js: true)
  |> Jason.decode!()
  |> get_in(["adventCalendars", "tableAdventCalendars"])
  |> Enum.at(0)
  |> 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()
  |> dbg()

データテーブルの表示

calendar_df
|> DataFrame.arrange(desc: count)
|> Kino.DataTable.new()

スクリーンショット 2023-11-22 13.26.15.png

グラフ表示

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: "記事数")

visualization.png

2023年11月22日現在の集計結果

@piacerex さんが 32 件でトップです

スクリーンショット 2023-11-22 13.26.15.png

visualization.png

ついで 2 名 26 件で完走賞達成、そこに私が追随しています

まだ開始1週間以上前の状況なのにカレンダー 10 シリーズなので、やはり Elixir の勢いはすごいですね

私もまだまだこれからです(他のカレンダーにも参加しているので実は完走賞確定済)

スクリーンショット 2023-11-22 13.31.33.png

2023年12月4日現在の集計結果

@piacerex さんが更に伸び、 41 件でトップです

スクリーンショット 2023-12-04 9.48.00.png

visualization (1).png

スクリーンショット 2023-12-04 9.52.33.png

4位以下の後続がグンと伸びていますね

参加者数も 26 から 37 に大幅増加し、シリーズも 14 、総記事数は 210 になりました

まだまだ伸びそうですね

2023年12月26日現在の集計結果

クリスマスが終わりました

投稿者数 40 人、記事数 293 という圧倒的ボリューム!

@piacerex さんが 46 件、もうすぐ 2 シリーズ分になります!
(しかも他のカレンダーにも投稿しているという、、、)

他にも私含め 6 名が完走しています!

まだ記事投稿はできるので、ここからどこまで伸びるか

スクリーンショット 2023-12-26 9.04.48.png

visualization.png

スクリーンショット 2023-12-26 9.05.41.png

2024年1月1日現在の集計結果

やれるだけのことはやりました

スクリーンショット 2024-01-01 0.10.59.png

visualization (2).png

スクリーンショット 2024-01-01 0.11.51.png

合計 334 記事!

11月以降の記事しか紐づけられない中で、とんでもない数です!

みんなの Elixir 愛が止まらないですね

まとめ

2023 も 2022 と変わらない方法でデータが取得できました

完全にカレンダーの仕組みが完成されている証ですね

この記事は今後も定期的に更新していきます

13
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?