忘れないようにメモっとく

機械学習とかプログラミングとか。

CRANとGithub

R Advent Calendar 2014 : ATND 19日目の記事です。Rのパッケージ{biganalytics}にプルリクを送ったときの話をします。

bigmemoryプロジェクト

biganalyticsはbigmemoryプロジェクト内のパッケージのひとつです。 bigmemoryプロジェクト(The bigmemory Project)は、イェール大学のJay氏とMike氏によるプロジェクトです。Rを使っていると「メモリ乗り切らないよー」とか「計算遅いよー」ってことはあるあるだと思いますが、bigmemoryプロジェクトには、データの参照渡しや複数コアでの実行など、簡単に言うとでかいデータを扱うための実装が詰まってます。(@sfchaosさんのslideshareより↓↓)

biganalyticsパッケージにプルリクを送りたい...

さて、bigmemoryプロジェクトにはbiganalyticsという、解析用のパッケージがあり、この中にbigkmeans()という、でかいデータでもいい感じにクラスタリングができるfunctionが実装されています。

k-means法は空間内の距離計算方法を変えることによって結果が変わってくるのですが、デフォルトでは、Euclid距離での実装がほとんどだと思います。(k-means法の距離尺度については、Matlabのドキュメントが分かりやすいです。 K 平均クラスタリング - MATLAB kmeans - MathWorks 日本)

bigkmeans()はEuclid距離のみの実装だったので、Cosine距離の計算方法も欲しいなーと思っていたわけです。とはいえ、RのパッケージはCRANで管理されていて、ドキュメントはPDFに残す伝統(?)があるようなので、Githubのようにプルリク送るにはどうやったらいいかなーと思ってたのですが、、

あったんですね、CRANのGithubリポジトリ→ cran · GitHub biganalyticsもありました。→ cran/biganalytics · GitHub

ですが、リポジトリのDescriptionをみると"Unofficial read-only mirror of all CRAN R packages"って書いてあるんですよね。。 一応ダメ元で送ってみたら、「read-onlyって書いてあるよね!パッケージ作った人に直接言ってね!(意訳)」という感じだったので、パッケージ作ったMike氏に聞いてみたら教えてくれました。(こちらの本家(?)のリポジトリはググっても見つけられなかったorz)→ kaneplusplus/biganalytics · GitHub こちらに提出したプルリクはMergeされて、めでたくCosine距離が追加されました。が、CRANへの実装はいつになるのかな...?

CRANとGithub

リポジトリが2つあるのはややこしいですけど、パッケージのリポジトリが公開されているのは、Rユーザにとっても開発者にとってうれしいことですよね。bigmemoryみたいなパッケージはこれから需要も増えるし、機能も追加されていくので、複数人で開発したほうがパッケージの品質もいいものになると思います。

言語の魅力はパッケージのコミュニティ次第だと思っていて、例えば、データ分析界隈でPythonが使われているのも(Rubyではなく)、統計・機械学習ライブラリが豊富だからで、Perlは若者に人気なさそうですけどCPANの資産は大きいですよね。 Rに関しても、言語仕様が気持ち悪いとか言われてる気がしますけど、やっぱりCRANがあるから使うんですよね。CRANで公開されているパッケージの機能追加やバグ報告をGithubみたいに気軽にできると、みんなでわいわい参加してるっぽくていいなあと思いました。(小並感