蛍光ペンの交差点[別館]

"どの点に関心をもつべきか ―をわれわれが学びとるのは,もっぱら仮説からだけである"

統計を始めたい人に僕がPythonよりRを勧める理由

今回は「ほぼRしか使ったことがない」人間*1が、できる限り二者の優劣をくっきり述べる。

僕はほとんどRしか使ったことがない。Pythonはtfidfやクイックソートをライブラリ無しで実装した程度。

 

前半の主張は以下である。

 

過去のRでの10回程度の解析において、Rで不十分さを感じてPythonを使った経験は1度だけ、しかも部分的にしかなかった。Rの使いにくさを感じることも最近はだいぶ無くなった。だから初学者には「事足りる」Rを勧める。

 

前半の主張

 

今までにRでやった解析の内容は大体以下である。

(未発表)は途中で頓挫した、もしくは現在進行中/契約により詳細&解析結果の公開不可能のプロジェクトである。

 

  1. [ビジネス・製造業] 米国新車価格の線形重回帰分析(授業の期末課題)
  2. [ビジネス・不動産] 不動産賃貸価格の線形重回帰分析(発表スライド
  3. [ビジネス・IT] EコマースサイトのARIMAモデルによる売上予測
  4. [教育系](未発表)項目応答理論による問題難易度推定
  5. [ビジネス・投資](未発表)企業業績データの可視化
  6. [ビジネス・不動産](未発表)不動産賃貸価格の一般化線形モデル分析
  7. [ビジネス・IT](未発表)Eコマースサイトの顧客データ分析
  8. [ビジネス・IT](未発表)大手レビューサイトにおけるレビューのクラスタリング
  9. [ビジネス・マーケティング](未発表)大手ポイントカードの購買データ分析
  10. [ビジネス・マーケティング](未発表)商品人気の生存分析
  11. [スポーツ系](未発表)スポーツの練習中における、選手の位置変化の可視化
  12. [バイオ系](未発表)バイオ系実験データの前処理と結果予測モデル構築
  13. [ビジネス・インフラ](未発表)屋内地図データの可視化と行動予測

 

各プロジェクトは、すっげー概算でそれぞれ1000行ほどのスクリプトで分析されているが、これらは現在までのところ、全てRのみで完結している。

 

 

そして、僕が今までにやった解析の中で、Pythonを使った前処理が必要だったものは以下である。

 

  1. (未発表)数冊の書籍を対象としたテキストマイニング
  • 理由:Rのテキストマイニング用のライブラリは、Pythonのnltkライブラリに比べると明らかに劣っており、僕の環境では(内部で呼ばれる)Javaのバージョンすら合っておらず起動困難だった。nltkライブラリでは大した苦難もなく必要な処理が完遂できた。

 

自然言語処理を目的とするのでない限り、Rで十分なのではないかと思われる。

 

 

 

後半の主張

 

また、僕が一番好きなのは、正確には統計学というよりは、探索的データ解析と呼ばれる分野である。

 

 Tukey's championing of EDA encouraged the development of statistical computing packages, especially S at Bell Labs. The Sprogramming language inspired the systems 'S'-PLUS and R.

(英Wikipedia "Exploratory Data Analysis"から引用)
(拙訳:数学者ジョン・チューキーが探索的データ解析(EDA)を擁護したことで、統計計算用のパッケージソフトウェアの開発は勢いづいた。その中でも、ベル研究所の「S(エス)」というプログラミング言語は特に主力だった。Sはのちに誕生することになる、「S-PLUS」と「R」という二つの言語に大きな影響を与えた。)

 

このような成立経緯から、Rには、デフォルトで探索的データ解析をやりやすくする機能が色々と備わっている。特に、RStudioという作業環境でやるとそれは顕著だ。プロットの連続表示や保存が非常に直観的にできる。

 

そして、数年前から、dplyr/tidyrとggplot2というライブラリがRのコミュニティに登場した。これが決定打だった。前者は統計解析の大部分を占める前処理を異常なまでに効率化し、後者は"Grammar of Graphics"という、可視化を数学的に定義しようとした学術書の実装として、明らかに並はずれた表現力を持っていた。dplyrとtidyrについてはRStudio公式のチートシート(Data Wrangling Cheat Sheet)を見れば何となくその全貌が、ggplot2については公式のドキュメントの例を見ればその強力さが分かるかと思う。

 

ちなみに最近はrvestという、Rでクローラーを書くためのライブラリも同じ著者から登場した。

 

探索的データ解析は、とにかく楽しい。楽しいのだが、やれ欠損値が入っているだのデータが整形されていないだの高次元で見えにくいだので時間を取られるのは非常に嫌なことであり、dplyr/tidyrとggplot2は、その面倒な作業を圧倒的に楽にさせてくれる。

 

ぶっちゃけ、dplyr/tidyrとggplot2がもし存在してなかったら、僕もPythonに移っていたと思う。それくらいにこのライブラリ群の存在は大きい。習い始めは「案外ごちゃごちゃしてね?」と思うかもしれないが、実際にそれを別の記法でやると更にスパゲッティになることを僕は既に体験している(僕は最初の2つの解析は、このライブラリ群なしでRを使っていた)。

%>%演算子やselect, group_by, filter関数などの記法の整頓具合や、充実したレファレンス、そして今も活発に続くバグ修正など、このライブラリ群は今後も安定して改善され続けると思われる。(%>%演算子の凄さについてはこのチュートリアル参照)

 

 

要約: 僕はRで学んだ。Pythonはあまり使っていない。だが「Rで圧倒的な能力不足を感じた」ことを理由としてPythonを使った経験は1度しかないため、統計を目的とする人たちにRを教えることに問題はないと思う。さらに、Rは成立経緯からして徹底的に「探索的データ解析」に向いた言語であり、初級のデータ分析に費やされる半分ほどの時間は統計解析ではなく探索的データ解析であることを考えると、Rを選ぶメリットは十分にある。特に、dplyr/tidyrとggplot2という3強ライブラリが登場してからは、顕著になった。

 

*1:ただし、プログラミング言語としては、C, C++, Ruby, JavaScriptを頻用し、Lisp, OCaml,SQLを書いたことがある