https://github-ranking.com/repositories
眺めていて、star 数と、folk 数の相関はどの程度あるのか気になりましたので、
Search | GitHub Developer Guide と、
Python Data Analysis Library — pandas: Python Data Analysis Library
使用して、相関関係を調べてみました。


目次


サンプルの抽出

  • Github star 数が100以上のプロジェクトを対象に抽出 前回抽出時と同様です。
    言語としては、JavaPythonJavascript対象に抽出します。
    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 は以下を参考に、実装しました。

推測するな計測せよいう言葉を思い出しました。
以上です。

コメント