LoginSignup
3
2

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

Last updated at Posted at 2019-06-27

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

QiitaAPIについて

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

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

このような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について詳しくは https://qiita.com/api/v2/docs

使うプログラミング言語

基本的に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を追加しました

2024年1月20日に、新しい纏めの記事を書きました

3
2
7

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
2