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

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>

https://qiita.com/advent-calendar/2023

https://qiita.com/advent-calendar/2023/elixir

## はじめに

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

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

https://qiita.com/RyoWakabayashi/items/7729f0e35bfec62e53b0

:::note info
2023/12/4 最新情報を追記
:::

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

![visualization.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/7fc10aa1-650c-e84a-6770-23c9ee023e9f.png)

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

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

![スクリーンショット 2023-11-22 10.02.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/fff29911-0557-2a51-a9b6-b4180f36516b.png)

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

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

https://github.com/RyoWakabayashi/elixir-learning/blob/main/livebooks/qiita/calender_2023.livemd

## 実装

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

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

セットアップ
```elixir
Mix.install([
  {:req, "~> 0.3"},
  {:req_easyhtml, "~> 0.1"},
  {:explorer, "~> 0.7"},
  {:kino, "~> 0.11"},
  {:kino_vega_lite, "~> 0.1"}
])
```

エイリアス、マクロの設定
```elixir
alias Explorer.DataFrame
alias Explorer.Series
require Explorer.DataFrame
```

リクエストの準備
```elixir
req =
  Req.new(http_errors: :raise)
  |> ReqEasyHTML.attach()
```

Elixir Advent Calendar 2023 のデータフレームへの読込
```elixir
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()
```

データテーブルの表示
```elixir
calendar_df
|> DataFrame.arrange(desc: count)
|> Kino.DataTable.new()
```

![スクリーンショット 2023-11-22 13.26.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/15cf05ed-2922-94ca-a6d8-701a6e50c5ed.png)

グラフ表示
```elixir
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/77882760-6876-8476-529e-d925adf6052d.png)

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

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

![スクリーンショット 2023-11-22 13.26.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/15cf05ed-2922-94ca-a6d8-701a6e50c5ed.png)

![visualization.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/77882760-6876-8476-529e-d925adf6052d.png)

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

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

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

![スクリーンショット 2023-11-22 13.31.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/881daf66-5f60-5519-c700-7a7f9f49a0ea.png)

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

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

![スクリーンショット 2023-12-04 9.48.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/964f0b40-d7bc-57f3-2ab0-7845bb511b7a.png)

![visualization (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/70e33a04-7241-0f84-f19f-ab4fb61f469a.png)

![スクリーンショット 2023-12-04 9.52.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/4b681e5c-7447-dff0-b417-5f4dff264ba7.png)

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

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

まだまだ伸びそうですね

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

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

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

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

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

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

![スクリーンショット 2023-12-26 9.04.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/9138f47c-dfc7-bd7e-973b-1c569daf3d24.png)

![visualization.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/f32f9407-5afa-8f8e-b906-91b7e058a4ee.png)

![スクリーンショット 2023-12-26 9.05.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/62df3a2b-d28a-7be8-a39d-f0225a06aeb0.png)

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

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

![スクリーンショット 2024-01-01 0.10.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/cbf234d8-d068-a5fb-d2e6-7d92f5fd3942.png)

![visualization (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/1a30737f-427e-45cb-83ec-7d0c91f5b87c.png)

![スクリーンショット 2024-01-01 0.11.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/9f3b5828-71ac-8573-3eec-e81215ab7d9e.png)

合計 334 記事！

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

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

## まとめ

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

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

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