LoginSignup
2
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-13

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

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

ことを考える.

結果

  • 列名: ランク,言語,記事数,フォロワー数
  • 全体の結果はここ
    • 以下に示すのは結果をheadしたもの

記事数Top102

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

読者数Top103

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