LoginSignup
3
1

More than 5 years have passed since last update.

AtCoderの使用言語をRで集計した

Last updated at Posted at 2019-04-05

#WaterCellTechNightで話をするためにAtCoderの使用言語ランキングを作成したので、方法と結果を紹介します。
(ちなみにAtCoderの話は特にしていません > Project Eulerの話

データソース

kenkoooo/AtCoderProblems: Problem manager for AtCoder usersで公開されているAPIからAccepted Count for each languageを読み込みました。

Rパッケージ

データの読み込みにrlist、加工にdplyr、可視化にggplot2を使いました。

library(rlist)
library(dplyr)
library(ggplot2)

データの読み込み

list.load()で読み込み、list.stack()でデータフレームにしました。

list.load("https://kenkoooo.com/atcoder/resources/lang.json") %>% 
  list.stack() -> ac_lang

JSONの構造が簡単だったので、実際のところrlistの機能を使う必要はありませんでした。次のように、jsonlite::read_json()simplifyVector = TRUEで使用しても良いと思います。

jsonlite::read_json("https://kenkoooo.com/atcoder/resources/lang.json", simplifyVector = TRUE)

集計

各言語について、使用者数、AC合計、AC平均(AC合計/使用者数)を求めました。

ac_summary <- ac_lang %>% 
  group_by(language) %>% 
  summarise(
    使用者数 = n(),
    AC合計 = sum(count),
    AC平均 = round(AC合計 / 使用者数, 2)
  ) 

可視化

plot_ac <- function(target){
  target <- rlang::enquo(target)
  ac_summary %>%
    ggplot(aes(x = reorder(language, !!target), y = !!target)) +
    geom_col() +
    coord_flip() +
    xlab("Language") +
    ylab(target) +
    theme_classic(base_family = "IPAexGothic")
}

まず使用者数をカウントしてみました。

plot_ac(使用者数)

image.png

やはりC++が強いですね。その他も上位はメジャーな言語が占めているようです。

ところでTextの高順位がちょっと気になります。おそらく提出テストに使っている人がそこそこ居るのでしょう。

そこで、少し工夫してメインの使用言語を集計して、同じように可視化してみました。

ac_lang %>% 
  group_by(user_id) %>% 
  summarise(language = language[which.max(count)]) %>% 
  ungroup() %>% 
  count(language, sort = TRUE) %>% 
  ggplot(aes(x = reorder(language, n), y = n)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  xlab("Language") +
  ylab("使用者数(メイン言語)") +
  theme_classic(base_family = "IPAexGothic")

image.png

Textの順位が落ち着きました。おそらくこちらのほうが実情に近いのではないでしょうか。

次に、ACの平均をプロットしてみました。

plot_ac(AC平均)

image.png

ユーザーあたりのAC数平均を求めると、意外な言語が上位に来たりして面白いですね。

AtCoderの他に、Project Eulerについても同様に可視化を行ったのですが、以前実施したときとほとんど同じだったので、Project Eulerについては前回の記事をご覧ください。

3
1
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
3
1