developerWorks では最近、科学的、技術的作業分野でのオープン・ソース・ソフトウェアの役割の拡大に関していくつか記事を紹介してきました(参考文献のリンクを見てください)。こうした記事のために行われたインタビューの中で研究者が繰り返し指摘しているのは、オープン・ソースのアプリケーションの採用検討にあたっては、有料のパッケージに匹敵するくらいの実力を持ったプログラム、つまりメーカー独自の製品と同等、あるいはそれ以上の機能を持ったプログラムを検討しているということでした。
Rはまさにそうしたプログラムです。Rについては以前から書こうと思っていたのですが、単に記事をある程度の量に収めるために、Rを除外せざるを得ませんでした。それに対して何人かの研究者は私に対して、厳密な意味ではRは科学的 というよりむしろ統計的 ですが、非常に重要なのでもっと早く取り上げるべきだ、と強く勧めてきました。ではこの記事を読むようなサーバー側の開発者や管理者にとってRは何を意味するのか、Rと関連のソフトウェアをちょっと見てみましょう。
Rは産業レベルの実力を持った汎用の統計向きオープン・ソース言語で、20年以上に渡る実績があります。
70年代の中頃に、ベル研究所のチームが「S」と呼ばれる研究を開始しましたが、このプロジェクトはその後、統計能力に優れた本格的な汎用計算言語に発展しました。80年代初頭ではまだ、本格的なコンピューター・プログラムは苦痛を伴う低レベルの職人芸と経験が必要なものと技術者や研究者も思いこんでいたので、当時としては画期的なプロジェクトでした。Sは高品質な「汎用」の解決方法だったわけです。プロジェクトリーダーのDr. John Chambersは1999年に何にもまして「Sがデータを解析、視覚化、操作する方法を根本的に変えた」ことを称えられてACM Software System Awardを受賞したのです。Sにはいろいろな強みがありますが、その一つとしてFortranやCなど他の言語で書かれたモジュールとうまく連携動作できることがあります。
Insightful Corporation社ではS-PLUSいう製品を販売しています。これはSを基にした製品で、商業的にも成功し、実績も認められているものです。1990年代初頭、オークランド大学(University of Auckland)のRobert GentlemanとRoss IhakaはRの研究を始め、その後無料のソフトウェアとして配布しました。(Ihakaによると)RはSと非常に似ているとのことですが、Rの実装はそのインターフェースを含め、SやS-PLUSとは全く違ったものです。Chambersも1997年にRの中心開発チームに加わりましたが、このチームでは主にスキームについて研究しています。統計計算の専門家であるPatrick Burnsが書いていますが、「現時点ではS-PLUS、Rどちらも一方が他方を凌駕しているわけではなく、あることにはS-PLUSが優れ、あることにはRの方が優れている」ということです。
ではこれがどう関係してくるのでしょうか?社内でSを使っているLucent Corporationなどの大企業を、別な面から見てみましょう。ベル研究所(Bell Labs)を起源とするLucentでは、携帯電話料金のごまかし、回路設計会社に対する品質管理データ等の追跡にSベースのデータ解析を使っているおかげで、何百万ドルも節約できていると宣伝しています。他の手段ではとても実現できないような成果をSがもたらしているというわけです。こうした初期の成果があまりにも劇的だったため、その影響が現在ではデータ・マイニング(data mining)と呼ぶ技術の発展にも及んでいます。
サンディエゴに本社を置き、「エキシマ(excimer)光源の世界的メーカー」であるCymer, Inc.ももっと最近の似たような成功例を紹介しています。Cymerの顧客は半導体メーカーですが、顧客の拠点は世界中100ヶ所以上に渡ります。半導体工場は巨大で自動化されており、コストも巨額です。不良はもちろん、ちょっとした品質のバラツキが一日で何百万ドルもの損失になります。CymerではS-PLUSベースの分析ツールを使って、製品品質がリアルタイム で分かるようにし、そのおかげで意志決定のサイクルが何週間の単位から何分間の単位に短縮されたということです。
統計解析がなぜそんな奇跡のような結果を生むのでしょうか?統計解析は人の判断能力を増強し、また人の特性として判断能力が劣る部分を取って代わってくれるものです。人はパターンを検出するのは得意ですが、時には特定のパターンだけを検出してしまったりします。正しい統計解析というのはチップの製造、電話料金のごまかし、消費者の購買パターンなどにおけるごくわずかなシステム的信号を、意志決定者が変化に気づくずっと前に拾い上げてくれます。組織にとって変化を早く検出できるということは、「問題」のレベルになる以前にプロセスを修正したり調整したりすることができるということです。
Server clinic の読者の職場にはそうした例がいくらでもあるはずです。我々の多くはWebトラフィックやネットワーク・プロセスのログの波に溺れそうになっているので、次のような疑問は自然なものでしょう。「1秒以内に要求の98%を処理するのに帯域幅がどのくらい必要か」、「オフ・サイトのバックアップを顧客のトラフィックに影響無く送るには一日のどの時間帯が良いか」など。こうした疑問には、熟練した統計者が注意深くデータを縮小するか、Sなら簡単にやってのける解析やレポートに頼らない限り答えが出ません。
ではその力を、読者のみなさんが求めているレポートと解析に生かしてみましょう。統計結果を必要とするコンピューター・ユーザーの大部分はデスクトップ向けの「パッケージ」、つまりおなじみの表計算ソフトや関連の「オフィス・オートメーション」製品に頼りますが、確かにこうしたパッケージは非常に有効です。ただしSは汎用の計算言語として、大規模なサーバー側の問題を抽象化、比例処理する上で非常に高い能力を持っているのです。eコマースのデータやWebサービス、ネットワーク負荷、センサーの値など一般的な課題に対する統計計算を(ほぼ)リアルタイムで行うのであれば、Sの持つ抽象化能力が役に立つはずですし、他の言語に対してオープンなところも便利なはずです。ごく普通の経験しかない人ならば、かつてないような驚きを感じるでしょう。例えば次のような判断・・ある特定の倉庫におかしな「損失」があるのではないか、顧客がある特定のパターンで不正なデータを入力しているらしい、新しいサーバーは必要ないかどうか・・などについて、鍵となっている計算をいくつかキャッシュしさえすれば良いのです。
Sが統計に有効なことは理解できるでしょうが、使い道としては年末のレポートや時々必要になる予算要求くらいしかないと思っているかもしれません。それは明らかな間違いです。我々は常に統計的推論をしているものです。例えばトラフィックがどれ位か、天気がどうか、もっとハードウェアが必要かどうか、金曜の午後に顧客で5件の問題が同時に発生する可能性があるか等々です。我々は普通、直観が示す暗黙のモデルに従ってしまいがちですが、それがいかに誤ったものかは調査結果が語っており、その誤りによるコストも分かってきています。直観に代わってSを使うことで我々のモデルを明確化し、本当のコストや得失を計算することができるようになるのです。
S自体は簡単に学ぶことができ、使うこともできるので、(理論的にではなく)現実的に元が取れるものです。「すべきこと」のリストを書いたり、予算計画を立てたりするような技術だと思えばいいのかもしれません。ただし、表計算での損益計算の多くが紙の上だけのものであるのと同様に、Sで表現されたモデルが正確であるという保証はありません。こうしたツールでできることは何よりも、我々が立てた仮定とその結果を照らし合わせることです。正確な分析にはそれ以外方法はありません。
Sの再実装としてのRの設計は、その多くをスキーム・プログラミング言語における成果に負っています。その結果、なによりもRに言語解析スコーピング(lexical scoping)が備わることになりました。Rの標準的なFAQ(参考文献でリンクを見てください)には面白い例として、(言語解析の)終結によって、一般的な機能定義がどれほど自然な形で行えるようになるかを挙げています。またS-PLUSのドキュメントではサイズn のサンプルからのr 次統計の密度機能を計算する方法として次を挙げています。
リスト1. Sで表した、r次統計の密度
dorder <- function(n, r, pfun, dfun) {
f <- function(x) NULL
con <- round(exp(lgamma(n + 1) - lgamma(r) - lgamma(n - r + 1)))
PF <- call(substitute(pfun), as.name("x"))
DF <- call(substitute(dfun), as.name("x"))
f[[length(f)]] <-
call("*", con, call("*", call("^", PF, r - 1),
call("*", call("^", call("-", 1, PF), n - r), DF)))
f
}
|
言語解析スコーピングにより、同じものをRでは次のように表現できます。
リスト2. Rで表した、r次統計の密度
dorder <- function(n, r, pfun, dfun) {
con <- round(exp(lgamma(n + 1) - lgamma(r) - lgamma(n - r + 1)))
function(x) {
con * pfun(x)^(r - 1) * (1 - pfun(x))^(n - r) * dfun(x)
}
} |
開発環境としてのRの最大の強みは、PerlのCPANに相当するパッケージ・アーカイブのCRAN(Comprehensive R Archive Network 包括的Rアーカイブ・ネットワーク)でしょう。CRAN(これも参考文献でリンクを見てください)では、CRANを使わずに書いた方がずっと簡単な(他の言語で書かれた)コードを利用しています。
Sは専門的な統計分野では標準ですが、他にも強力な代替手段があります。MetlabやSASなど、以前の「オープン・ソース」シリーズ(参考文献)で触れた科学計算用商業パッケージは、十分満足できる品質の統計ライブラリーを誇っています。
さらに別の手段としては、汎用の計算言語に統計機能を追加して使う方法もあります。C、Fortran、Javaなどの言語用の良いライブラリーがあります。他の問題での場合と同じく、サーバー・クリニック では高レベル言語を好みます。特にPerl、PythonそれにYorikには、PDL、Numeric、Scientific Python、stats.py、SalStat等を含む、非常に洗練されたライブラリーがあります。このうちいくつかは視覚化、文書化に優れ、結果を高速かつ高品位のグラフィクスで生成する能力を持っています。
SalStatの作成者であるAlan James Salmoniは下記の例を挙げ、自然な、オブジェクト指向のPython用語でSalStatパッケージがいかに簡単に使えるかを説明しています。
リスト3. 簡単なSalStatの例
import salstat_stats
a = [2,3,4,3,4,5] # first data set
b = [6,7,8,7,8,4] # second data set
x = salstat_stats.TwoSampleTests(a,b)
x.TTestUnpaired()
print x.df # prints out the degrees of freedom
print x.t # t statistic
print x.prob # probability from the t statistic and the df
|
これだけ明快なコードを見れば、統計やソフトウェアの専門家もお粗末なパッケージに制約されて自分だけ苦労するより、お互いに協力して現実的な統計問題に取り組もうという気になるでしょう。
Rと関連プロジェクトでの経験をお知らせくださった方々全員に感謝いたします。膨大な量のソフトウェアが、サーバー・クリニック に紹介されるような問題を提起しています。最良の解決方法に追いついていくためには読者のみなさんの助けをうまく借りるしかないと私は思っています。
もちろん、解決方法があることや、その解決方法の名前を知っているだけでは不十分です。それをどう使うかを知らなければなりません。今回の記事での最後のヒントとしてCS&PP(Computer Science & Perl Programming)を見ることにします。これは2002年末店頭に現れたThe Perl Journalで公開された最良の記事に対して、更新記事を70集めた、700ページにもわたる資料です。ご期待に違わずCS&PPにはサーバー側でのプログラミング例が満載されており、Perl開発の範疇にとどまらない原則も説明されています。さらに、過去1年間にこのコラムでも取り上げた具体的な事項も網羅されています。例えば
- マイクロソフト・オフィスの自動化とデータ・マネージャー・コンポーネント
- 生物情報科学を含む、科学計算ソフトウェア
- セキュリティ
- 電子メール管理
CS&PP にはRが専門とする強力な統計処理機能について、簡単な例がいくつかあるだけですが、この本と言語の間には高レベルの関連があります。Rのとらえ方の一つは、大規模データの管理,要約,分析に関してRが効率の良い、柔軟性に富んだツールであると言うことです。Perlも同様に考えることができます。つまり膨大な観察結果から効率良く結果を抽出できる簡潔で強力な表現力を持っているのです。新しい考えを巡らし、その結果を思い描くには、どちらも現実的なツールと言えるでしょう。
- サーバー・クリニックの以前の記事も参照してください。
-
R home pageはGNUプロジェクトが維持管理しています。
-
CRAN(The Comprehensive R Archive Network 包括的Rアーカイブ・ネットワーク)は非常に成功している、アーカイブ、検索のサイトです。
- Rがもたらす価値の一端に触れるにはR News を読んでみるのが一番です。非常に面白く、またよく編集されています。このサイトを見ることでイギリスでのガス消費を予測したり、ゲノム関係データの取り扱い方針についての統計的手法に追いつくことができ、Rが持つ他の機能に関する「なぜ」「どうやって」に対する答えを見つけることができます。
- John Chambersのprofessional home pageはSに関する多数の出版物などを挙げています。
- Patrick BurnsがIntro to the S languageを公開しており、またhis frameful siteで2つのチュートリアルを紹介しています。
-
Insightful Corporationでは他の製品と並んでS-PLUSを販売しています。
-
StatLib -- Software and extensions for the S (Splus) languageはカーネギー・メロン大学で維持管理しているライブラリーです。
- Sの作成者であるJohn Chambersが、Sシステムとその発展について興味深い情報をS Systemとevolutionに載せています。
- Dictionary of Programming LanguagesにあるSの説明description of Sは、S言語の予備知識が全く無い人には面白く、役に立つでしょう。
- Statistics in Advanced Manufacturing(高度製造業における統計)、Process Improvement Through ... Analysis ...(・・解析・・によるプロセス改善)、Detecting Fraud in the Real World(実世界での不正検出)などは applications of Statistics Research at Bell Labs(ベル研究所における統計調査のアプリケーション)で作成されたアプリケーションのごく一例です。
-
Modern Applied Statistics with S-PLUS, 3rd ed ではプロセスや利益改善に大きな効果のある統計的推論について、実際的な紹介をしています。
-
A Brief History of Data Miningベル研究所他でのSに関する研究について軽く触れています。
-
Statistical Software Engineeringではプロジェクト管理や実行での、直観に頼らない手法について説明しています。
-
Telling the Truth with Statisticsは素粒子学者を対象とした大学レベルのクラスで、Webcastで提供されています。
-
statistical inference(統計的推測)のWikipediaページは分かりやすい言葉で用語を定義しており、関連の概念へのリンクも紹介されていて役に立ちます。
- 残念ながら、study of statistics is, all too often, tedious and even boring(統計の勉強は大体、面倒で退屈なもの)というのは事実です。このコラムを読んで日々の仕事に応用すべきだと思ったものの、退屈な勉強は我慢できないと思ったら、Central Queensland UniversityのExploring Dataページを眺めて確率統計に対する再びの愛をかき立ててみてください。
-
Statistical Inference(統計的推測)では統計的推測の数学的な構造を定義しています。
-
Intuition: Its Powers and Perils(直観:その力と危険)はDavid G. Myersの著作で、私たちの意志決定モデルを正しいものにする可能性につい述べています。
- このコラムではRでは他の言語で書かれたコードを使えることを説明しました。一例として、他の宝物と並んでR News の this issueで説明されている、R-Tcl/Tkパッケージがあります。
-
Scientific Pythonには初歩的な統計機能があります。
-
SalStatはstats.pyを修正、拡張したものです。stats.pyと同様SalStatはPythonで書かれており、Pythonで使うのが最適です。
-
Perl Data Languageのホームページの表現を借りて言えば、標準的なPerlで「科学計算で基本となる、巨大なN次元データ配列をコンパクトに保存し、高速処理する」ことができるようになります。
-
Computer Science & Perl Programming はO'Reilly and Associatesが今年出版したPerl技術に関する3巻の大著のうち最初の一冊です。
-
cephesは下位レベル形式での数学的機能の多くを、portable Cによって実装しています。
- CameronがdeveloperWorks で書いている、科学関係の話題についての次の記事も読んでみてください。
このシリーズではRを表題とした記事はありませんが、こうした分野のプログラムに取り組んでいる研究者の多くはRに使っており、また信頼もしています。
- Cameronのpersonal notes on open source for scienceを読んでみてください。
-
Yorick Plays a Roleは、この高レベル科学計算言語の機能を、視覚化が容易な点を強調しながら紹介しています。
- Cameronのpersonal notes on Schemeでは、この言語に関する膨大な量のオンライン記事を紹介しています。

Cameronは、Phaseit, Inc. の常勤のコンサルタントです。オープン・ソースなどの技術的なトピックについて、数々の執筆や発言を行っています。Cameronのメール・アドレスはclaird@phaseit.net です。