😀

Qiitaの言語別記事数・フォロワー数ランキングをシェル芸で作る

3 min read

今回はGithubのシンタックスハイライト対応言語一覧[1]を使って,

  • Qiitaでの言語別記事数タグフォロワー数CSVを作成(2020年03月14日時点)
  • ソートしランキングにする

ことを考える.

結果

記事数Top10[2]

articleRank10.csv
ランク,言語,記事数,フォロワー数
001,Python,38538,71962
002,JavaScript,32653,72158
003,Ruby,26104,40486
004,PHP,19102,44786
005,Java,14326,47284
006,CSS,7329,46345
007,Cpp,7123,30398
008,HTML,6518,55321
009,Objective-C,4030,19990
010,Scala,3094,12501

読者数Top10[3]

followRank10.csv
ランク,言語,記事数,フォロワー数
001,JavaScript,32653,72158
002,Python,38538,71962
003,HTML,6518,55321
004,Java,14326,47284
005,CSS,7329,46345
006,PHP,19102,44786
007,Ruby,26104,40486
008,Cpp,7123,30398
009,C#,3042,26228
010,Objective-C,4030,19990

手段

2パートです.

CSV作成パート

qiitaLangCSV
$ curl -s "https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml" |
egrep -o '^[^\ \#][^:]+' | sed '1d;y/+/p/'| while read i
    do echo "$i,$(
        curl -s "https://qiita.com/tags/${i,,}" |
        tr -d \\n | grep -oPm1 '(?<=<span class="tsi-Stats_count">)\d+'
    )" | tr \\n ,;echo
done | sed 's/\([0-9]\),$/\1/g' > result

ランキング作成パート

  • もし数値が同じであればもうひとつの数値で比較する
makeRank
$ head=ランク,言語,記事数,フォロワー数
$ (echo $head;sort -t, -rnk2 -rnk3 result | nl -nrz -s, -w3 | head) > articleRank10.csv
$ (echo $head;sort -t, -rnk3 -rnk2 result | nl -nrz -s, -w3 | head) > followRank10.csv

ちなみに

image.png

  • タグがない言語は全545言語中40%218言語
Terminal
$ cat result | tee >(wc -l) >(grep -c ",,") 1>/dev/null | nl -nln
1       218
2       545
$ cat result | tee >(wc -l) >(grep -c ",,") 1>/dev/null |
  tr \\n / | sed 's/^/scale=1;/;s/.$/*100\n/' | bc
40.0
  • タグはあるが記事もフォロワーもいない言語は15言語
Terminal
$ grep ",0,0" result
CSON,0,0
CWeb,0,0
Cool,0,0
Eiffel,0,0
Fancy,0,0
Harbour,0,0
Jison,0,0
Jolie,0,0
Nit,0,0
Nu,0,0
Raku,0,0
STON,0,0
Tea,0,0
UrWeb,0,0
XC,0,0
$ grep -c ",0,0" result
15
  • タグはあり記事もあるがフォロワーがいない言語は64言語
Terminal
$ grep -P '(?<!,0),0$' result | head
ABNF,1,0
APL,27,0
ASN.1,5,0
ApacheConf,1,0
Batchfile,2,0
Befunge,1,0
CLIPS,2,0
COLLADA,5,0
Chapel,2,0
Cycript,2,0
$ grep -cP '(?<!,0),0$' result
64
  • タグはあり記事はないがフォロワーがいる言語は0言語
Terminal
$ grep -P ',0,[^0]+$' result
$ grep -cP ',0,[^0]+$' result
0
  • タグがあり記事もフォロワーもいる言語は248言語
Terminal
$ grep -vP ',0?(,|$)' result | head
4D,5,3
ABAP,46,34
ANTLR,12,7
ASP,43,14
ATS,35,2
ActionScript,249,247
Ada,27,10
Agda,29,18
Alloy,59,26
AngelScript,5,1
$ grep -vPc ',0?(,|$)' result
248
脚注
  1. https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml ↩︎

  2. https://gist.github.com/eggplants/8b78a265e71337df58a8461a16e9a3f5#file-articlerank-csv ↩︎

  3. https://gist.github.com/eggplants/8b78a265e71337df58a8461a16e9a3f5#file-followrank-csv ↩︎

GitHubで編集を提案

Discussion

ログインするとコメントできます