Edited at

QiitaAPIで各プログラミング言語のタグの記事とフォロワーの数を調べて纏めたりする(pythonとrubyを使う)

今どのプログラミング言語がどれくらい人気なのか気になるので、qiitaで書かれた記事のタグを調べて見ましたが、一々調べるよりもコードを書いてQiitaAPIからデータを取得して分析する方が楽なので、書いてみました。この記事では試してみたこととその結果を纏めてみます。


QiitaAPIについて

QiitaAPIにアクセスしたらタグの記事の数とフォローしている人数を調べることができます。

例えばc++のタグ https://qiita.com/api/v2/tags/c++

QiitaAPIについて詳しくは https://qiita.com/api/v2/docs

このようなjsonデータが出ます

{"followers_count":24875,"icon_url":"https://s3-ap-northeast-1.amazonaws.com/qiita-tag-image/fe7df47710bdae8b8565b323841a6b89e2f66b89/medium.jpg?1515774066","id":"C++","items_count":5919}


使うプログラミング言語

基本的にQiitaAPIのようなAPIは色んな言語で簡単に扱えるようですが、今回はrubypythonを使ってQiitaAPIを通じて色んなプログラミング言語のタグの記事とフォロワーの数を調べて纏めてみます。

最初は全部rubyでやってみたいと思っていたのですが、データの分析やグラフを描くことがやはりpythonのpandasmatplotlibを使ったほうがずっと楽です。

なのでrubyでデータをcsvに保存して、pythonでグラフを描くという形になります。

ここで挙げるのは自分が知っている言語だけです。それ以外知らない言語もあるかもしれないです。その他に、私の知っている言語の中にも IDLなどqiitaで全然記事が見つからない言語もあります。

プログラミング言語だけ比べるので、htmlxmlみたいなマークアップ言語や、cssみたいなスタイルシート言語などは含まれません。


rubyでタグのデータをcsvに保存する

rubyでは標準モジュールとしてopen-uriというスクレイピング用のモジュールがあるので、簡単にQiitaAPIからデータを取得できます。

csvの扱いも簡単にcsvモジュールが使えます。これも標準モジュールなので個別にインストールする必要がありません。

require "open-uri"

require "json"
require "csv"

gengo = %w!c c++ csharp cobol clojure delphi elm
erlang fortran golang haskell java javascript julia
kotlin lisp lua objective-c pascal perl php prolog
python r ruby rust scala swift typescript vb.net!

col = %w!id items_count followers_count!

CSV.open('qiitaprogramming.csv','w'){|csv|
gengo.each{|gg|
data = JSON.parse(open('https://qiita.com/api/v2/tags/'+gg).read)
csv << col.map{|c|data[c]}
}
}

こういうcsvファイルが出来ます。左の方が記事の数で、右の方がフォロワーの数です。

C,2632,21744

C++,5919,24875
C#,7427,23077
cobol,56,45
Clojure,619,550
Delphi,347,148
Elm,452,463
Erlang,524,446
Fortran,255,196
golang,2886,2025
Haskell,1904,9497
Java,12165,39527
JavaScript,26386,59733
Julia,570,620
Kotlin,2576,2243
lisp,267,358
Lua,452,320
Objective-C,3946,17766
Pascal,82,14
Perl,1469,12188
PHP,16169,37330
Prolog,207,96
Python,28671,55570
R,2727,1912
Ruby,21943,34065
Rust,1298,1527
Scala,2830,10363
Swift,11791,6603
TypeScript,3036,2325
VB.Net,359,322


pythonでデータを並べて棒グラフを描く

pythonにもスクレイピング用のモジュールがたくさんあります。ここではrequestsというモジュールを使います。

データを数によって並べるにはpandasでは一番やりやすいです。

グラフを描くにはmatplotlibが一番です。

どれでも標準モジュールではないからインストールする必要がありますが、anacondaとか使っていたら最初から含まれているはずです。

pip install requests pandas matplotlib

ちなみに、rubyにもdaruというpandasと似ているモジュールが存在します。https://github.com/SciRuby/daru/wiki/pandas-vs-daru

import requests

import matplotlib.pyplot as plt
import pandas as pd

lis_tagid = '''c c++ csharp cobol clojure delphi elm
erlang fortran golang haskell java javascript julia
kotlin lisp lua objective-c pascal perl php prolog
python r ruby rust scala swift typescript vb.net
'''
.split()

gengo = []
n_follow = []
n_item = []
for tagid in lis_tagid:
r = requests.get('https://qiita.com/api/v2/tags/'+tagid)
r.raise_for_status()
data = r.json()
gengo.append(data['id'])
n_follow.append(data['followers_count'])
n_item.append(data['items_count'])

df = pd.DataFrame(index=gengo)
df['記事'] = n_item
df['フォロワー'] = n_follow
print(df)
y = range(len(df))

plt.figure(figsize=[6,6])
plt.gca(ylim=[min(y)-0.5,max(y)+0.5])
df.sort_values('フォロワー',inplace=True)
plt.yticks(y,['%s: %6s'%x for x in df['フォロワー'].iteritems()])
plt.barh(y,df['フォロワー'],color='#882244')
plt.title(u'フォロワㄧ',family='AppleGothic')
plt.tight_layout()

plt.figure(figsize=[6,6])
plt.gca(ylim=[min(y)-0.5,max(y)+0.5])
df.sort_values('記事',inplace=True)
plt.yticks(y,['%s: %6s'%x for x in df['記事'].iteritems()])
plt.barh(y,df['記事'],color='#337744')
plt.title(u'記事',family='AppleGothic')
plt.tight_layout()
plt.show()

結果

                記事  フォロワー

C 2632 21744
C++ 5919 24875
C# 7427 23077
cobol 56 45
Clojure 619 550
Delphi 347 148
Elm 452 463
Erlang 524 446
Fortran 255 196
golang 2886 2025
Haskell 1904 9497
Java 12165 39527
JavaScript 26386 59733
Julia 570 620
Kotlin 2576 2243
lisp 267 358
Lua 452 320
Objective-C 3946 17766
Pascal 82 14
Perl 1469 12188
PHP 16169 37330
Prolog 207 96
Python 28671 55570
R 2727 1912
Ruby 21943 34065
Rust 1298 1527
Scala 2830 10363
Swift 11791 6603
TypeScript 3036 2325
VB.Net 359 322

Figure_1.png

Figure_2.png


纏め

結果から見ると、フォロワーの数はjavascriptの方が一番ですが、記事の数はpythonの方が一番です。

javascriptはウェブ開発に欠かせない言語ですし、データサイエンスや機械学習のおかげでこの数年の間にpythonはどんどん人気な言語になってきたようです。

二年前のこの記事を調べてみたら https://qiita.com/ty-edelweiss/items/b8172c2e22726bc08aeb

あの時pythonの記事はrubyよりも少なかったようです。

javaとphpとrubyもその次に人気のようです。

C言語などはフォロワーが多い割には記事が少ないです。

結果としてフォロワーと記事の数を見ると、この数年間のプログラミング言語の使う傾向をある程度示せるはずです。

編集: 2019年6月28日に、Rustを追加しました