https://github-ranking.com/repositories
を眺めていて、star
数と、folk
数の相関はどの程度あるのか気になりましたので、
Search | GitHub Developer Guide と、
Python Data Analysis Library — pandas: Python Data Analysis Library を
使用して、相関関係を調べてみました。
目次
サンプルの抽出
-
Github
のstar
数が100以上のプロジェクトを対象に抽出 前回抽出時と同様です。
言語としては、Java
、Python
、Javascript
を対象に抽出します。
repository search api の仕様上、最大1000件までしか取得できないため、
API のソート項目を変えながら、取得可能な Repository の情報で計測しました。
取得できたRepository 数は言語ごと以下の通りです。-
Python
6257 -
Java
6321 -
Javascript
7884
-
分析対象のデータ
repository search api の 結果をmongodb に登録して、csvにexportしたものをスプレッドシート化しました。
result_20170402 - Google スプレッドシート
JAVAの集計
Google スプレッドシートの結果をcsv化して、そのまま pandas の input にできそうでしたので、
csv として取り込み、結果を出力します。
実行には、python2.7
のコンソールを使用し、スプレッドシート内のjava のリポジトリに対して、
基本統計量、散布図行列を出力します。
Google スプレッドシートの読み込み
from StringIO import StringIO
import requests
import pandas
r = requests.get('https://docs.google.com/spreadsheets/d/1-eaat9apP0uQN0aol13cTv9Uw0yT3XtfUo_QUQUKA8k/export?gid=0&format=csv')
data = r.content
df = pandas.read_csv(StringIO(data), index_col=0)
基本統計量の出力
df[df["language"] == "Java"].describe()
-------------------------------------------------------
stargazers_count watchers open_issues_count forks size
count 6321.000000 6321.000000 6321.000000 6321.000000 6321.000000
mean 659.195222 659.195222 27.766334 215.249644 33304.605442
std 1332.807329 1332.807329 113.631184 491.484568 202102.429395
min 100.000000 100.000000 0.000000 1.000000 0.000000
25% 145.000000 145.000000 1.000000 36.000000 657.000000
50% 223.000000 223.000000 5.000000 70.000000 2924.000000
75% 545.000000 545.000000 20.000000 191.000000 14416.000000
max 22831.000000 22831.000000 6191.000000 10463.000000 11350797.000000
-------------------------------------------------------
相関係数の出力
df[df["language"] == "Java"].corr()
-------------------------------------------------------
stargazers_count watchers open_issues_count forks size
stargazers_count 1.000000 1.000000 0.228468 0.800199 0.048178
watchers 1.000000 1.000000 0.228468 0.800199 0.048178
open_issues_count 0.228468 0.228468 1.000000 0.242374 0.089682
forks 0.800199 0.800199 0.242374 1.000000 0.113771
size 0.048178 0.048178 0.089682 0.113771 1.000000
-------------------------------------------------------
Pythonの集計
基本統計量の出力
df[df["language"] == "Python"].describe()
-------------------------------------------------------
stargazers_count watchers open_issues_count forks size
count 6257.000000 6257.000000 6257.000000 6257.000000 6257.000000
mean 617.881093 617.881093 35.913697 141.751159 16253.790954
std 1534.197000 1534.197000 254.831352 409.022332 100037.912722
min 100.000000 100.000000 0.000000 0.000000 0.000000
25% 139.000000 139.000000 2.000000 25.000000 204.000000
50% 202.000000 202.000000 7.000000 52.000000 815.000000
75% 477.000000 477.000000 23.000000 120.000000 5027.000000
max 31619.000000 31619.000000 17028.000000 10386.000000 4322157.000000
-------------------------------------------------------
相関係数の出力
df[df["language"] == "Python"].corr()
-------------------------------------------------------
stargazers_count watchers open_issues_count forks size
stargazers_count 1.000000 1.000000 0.201521 0.771532 0.045506
watchers 1.000000 1.000000 0.201521 0.771532 0.045506
open_issues_count 0.201521 0.201521 1.000000 0.265423 0.072412
forks 0.771532 0.771532 0.265423 1.000000 0.099959
size 0.045506 0.045506 0.072412 0.099959 1.000000
-------------------------------------------------------
JavaScriptの集計
基本統計量の出力
df[df["language"] == "JavaScript"].describe()
-------------------------------------------------------
stargazers_count watchers open_issues_count forks size
count 7884.000000 7884.000000 7884.000000 7884.000000 7884.000000
mean 1194.904363 1194.904363 33.850457 230.328133 13104.392948
std 4417.520233 4417.520233 106.947963 977.011052 87318.273356
min 100.000000 100.000000 0.000000 0.000000 0.000000
25% 142.000000 142.000000 2.000000 15.000000 234.000000
50% 197.000000 197.000000 7.000000 42.000000 966.500000
75% 511.250000 511.250000 22.000000 120.000000 5122.250000
max 250923.000000 250923.000000 2873.000000 49852.000000 5330358.000000
-------------------------------------------------------
相関係数の出力
df[df["language"] == "JavaScript"].corr()
-------------------------------------------------------
stargazers_count watchers open_issues_count forks size
stargazers_count 1.000000 1.000000 0.344046 0.676855 0.041534
watchers 1.000000 1.000000 0.344046 0.676855 0.041534
open_issues_count 0.344046 0.344046 1.000000 0.330792 0.135409
forks 0.676855 0.676855 0.330792 1.000000 0.071747
size 0.041534 0.041534 0.135409 0.071747 1.000000
-------------------------------------------------------
集計結果について
集計結果は以下の通り
-
Java の Star と Folk の相関係数
0.800199 -
Python の Star と Folk の相関係数
0.771532 -
JavaScript の Star と Folk の相関係数
0.676855
Star 数と、Folk 数は少なからず正の相関はあると思っていました。
静的言語の Folk数は、動的言語に比べて少ないかなと思っていたのですが、そんなことはなく、
Java に関しては、Python 、 JavaScript に比べて、Folkされる傾向があるようです。1
サンプリングの仕方による?
Folkは、なんらかの形で コントリビュートしようとするところからきているのだとしたら、
Java は コントリビュートしようとする人が多いのかもしれません。2
もっと真面目に調べると何かわかる?
参考サイト
Pandas は以下を参考に、実装しました。
推測するな計測せよ
という言葉を思い出しました。
以上です。
コメント