1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

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

今回は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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?