あなたの研究室ではデータ分析を行う際に何を用いるでしょうか。STATASPSSなど高機能な統計分析ソフトを用いているでしょうか。
厳密な数値を用いて示すことは出来ませんが恐らく、多くの研究室ではマイクロソフトのエクセルを用いて分析に当たっている場合が殆どだと思います。

なぜエクセルがここまで広く用いられているのかと言われれば、はっきりとした理由を示すのは難しいです。大学生の研究、という領域に限って幾つかの理由を上げるとするならば、次の2点が挙げられるでしょうか。

  1. パソコンに元々インストールされている場合が多い

  2. 手軽な計算・表作成・グラフ作成を即座に実行できる

これらは確かにエクセルが持つ重要な利点です。しかし、研究を進める上でエクセルにはどうしても見過ごすことが出来ない点があります。それは「再現性の担保」の困難さです。

エクセルの危うさ

次の状況を想像してみてください。

あなたは今から実験から得られたデータを使って分析を行います。行と列の持ち方が少し気に入らないからと行列を入れ替えたり、比較したいデータ列のみを抽出する。そのデータに対して平均などの統計値の計算・統計値を用いた分析、あるいは回帰分析・t検定、そして試行錯誤を伴う諸々のグラフ作成などを行う。

一連の操作を終えてこんな気持ちになったことはないでしょうか。「色々操作をしたけど、ボスにはどういう形で報告しようかな。」

そう思ったら先ほど得られた分析結果について、もう一度振り返る必要があります。統計値やグラフを全て報告する時間は当然ないので最も分析結果を如実に示すもののみを報告する必要がありますが、散らばっているエクセルファイルを隅から隅まで眺め、且つどのような手順でそれらの結果が得られたかをまとめなくてはなりません。

私自身何度もこのような状況を経験し、何とか発表資料にまとめるということを繰り返していたことがありました。当然、この時期にやっていた研究結果について、「もう一度詳細に報告してくれ」と言われてもそれは困難を極めます。私が分析に用いたエクセルは幾つものファイルに分散しており、どれをどの順番で使用したかが今となってはまるで分からないからです。

このような経験をしたことが一度でもある方には、その分析をRで行い、再現性を保てるようにすることをお勧めします。

プログラムとして再利用可能性を高めることの意義

今回エクセルの代替手段としてお勧めするRとは統計分析に特化したオープンソースのプログラミング言語です。R自体の特徴として挙げるべき点はいくつも存在していますが、エクセルを従来使っていた方に対して強調したいのは、「Rはデータフレームというエクセルに近い概念をベースにデータをもつ言語である」点です。データフレームとはテーブルのような概念で、普段からスプレッドシートを見ている人であれば見慣れた形式でデータを扱うことができるので、コマンドの意味を察しやすいと思います。

また本記事では、Rによる分析の再現性確保のための有効なツールとしてRmarkdownをご紹介いたします。

エクセルを使用する分析における*アンチパターンを、先ほど私の体験を交えて述べましたが、図式してもう一度見てみます。

*アンチパターン:動作やプロセス、構造についての繰り返されるパターンで、最初は有益だと思えるが、最終的に悪い結果をもたらすもの

エクセルだけで*アドホックに分析を行ってしまうと、結果がなぜそうなったのかを示すのがほとんど不可能になってしまうことは先ほど述べた通りです。

*アドホック:限定目的的な

ただ、VBAを駆使して分析手順に再現性を持たせようとしている方もいらっしゃるでしょう。その場合、上述した問題は解決できますが、最終的に得られたアウトプットを用いて報告書を作成する際にコピペするのは避けられません。

コピペすることによる弊害はイメージしにくいかもしれません。それだけに頻繁に行われる操作ですが、この記事をご覧のみなさまも次のような経験があるのではないでしょうか。

  • 図表や出力結果をコピペすべき場所が間違っていた。
  • データやログの差し替えをしなければならず、同じコピペを一から繰り返した。
  • レポートの中の図・表・数値がどのスクリプトによって出力されたものなのかわからず、ボスから質問された時に動揺した、あるいは答えられなかった。

このような問題は、Rmarkdownを使えば解決できます。RmarkdownではRのコードとその出力結果、そして注釈などの文章を全て単一のhtmlファイルにすることが出来ます。つまり、レポート作りの自動化が可能になるのです。

本記事ではR、そしてRmarkdownの実用例を、実際にデータを用いてエクセルと比較しながら見ていきたいと思います。実行環境はRが3.4.0、Rstudioが1.0.143です。

簡単な集計

データセットはKaggleで公開されているポケモンの種族値データを利用しています。

ポケモンでは、各ポケモンに基礎パラメータとして種族値というものが振られており、このデータはその一覧を示したものです。種族値にはHP・攻撃・防御・特殊攻撃・特殊防御・素早さの6種類が存在しています。

まず、このデータについてデータの個数を数えて見ます。

[エクセル]

manu0.gif

[R]

1.png

エクセル、R共に列数を取得するコマンド自体は一行ですが、エクセルの場合、データを表示する場所を確保する必要があります。とは言えまだこの段階では大きな差はありません。

次に各種族値の平均を取得してみます。

[エクセル]

manu1.gif

[R]

2.pngエクセルではまずデータの格納場所を作った後に、種族値合計の平均を求め、それを横にコピーして各種族値の平均を計算しています。

対してRでは列ごとの平均を計算する関数(colMeans)が既に用意されているため、データの個数を数えた時と同程度の記述量で済んでいます。

ここでは平均のみを計算しました。これ以外にも要約統計量として挙げられる最小値・最大値・中央値・第一4分位点・第三4分位点についても、エクセルの場合は平均と同じ処理を種類数だけ繰り返す処理を行う必要がありますが、Rではやはり関数が既に用意されているので同程度の記述量で済みます。

3.png

グラフ描画や回帰分析

更にグラフの描画などについても比較していきます。データの全体的な傾向を見るために、種族値合計についてヒストグラム描いてみます。

[エクセル]

hist.gif

エクセルでヒストグラムを書くためにはまずデータ区間を設定する必要があります。種族値合計は最大で720だと先ほどの要約統計量からわかっているので、50刻みでデータ区間を設定し、データ分析タブからヒストグラムを選択して、対象データを選び、ボタンを押下して、ようやくヒストグラムが得られます。

この手続きはRでは必要ありません。実質二行(内一行は日本語の文字化け対策)で処理が完了します。4.pngこのようにヒストグラムを見ると、300前後と500前後に大きな山があることがわかります。

最後に回帰分析をしてみます。今回のデータに対する仮説は「ポケモンの種族値合計は世代が更新されるごとに全体的にインフレーションを起こしている可能性はないだろうか」です。

シリーズ物というのはバージョンアップするたびにパワーバランスを保つためにキャラクターの能力値にインフレーションが起きがちではないでしょうか。

ポケモンはこれまでにたくさんのシリーズが発売されてきましたが、登場するポケモンの種類の刷新具合から各フェーズは世代と呼ばれています。今回は第6世代までを対象にしたデータですが、世代の更新は全体の能力値のインフレーションに寄与しているのでしょうか?

まずエクセルでの結果です。

[エクセル]

regression1.gif

ヒストグラムよりも手間はかかっていませんが、マウスを用いて入力すべき箇所は殆ど同じです。

続いてRでの結果です。これまでと同程度の記述量で結果が得られます。

5.png結果を見ると、世代の更新は種族値合計に対して正の効果を持ってはいますが、回帰係数の大きさ、そしてR二乗値が約0.005であることも踏まえるとそれほど大きい効果ではないようです。

散布図にプロットしたのが以下に示す図です。近似曲線の挙動からも、それほど大きな影響を及ぼしてはおらず、ゲームバランスが保たれていることがわかります。7.png

Rmarkdownでの出力

最後にこれまでの分析を報告書にまとめることを考えてみます。

エクセルの場合、これまで出力してきた計算結果をワードやパワーポイントにコピペしていく工程が発生します。勿論この程度の量であれば作業量自体は大してありませんが、前述したようにこの分析をフォーカスするデータを変えてもう一度行う時などには、これまでの分析工程をもう一度全てやり直す必要があります。どのような手順でこのデータが得られたのか、という情報を複雑な分析に対しても保持し続けるのはおそらく不可能でしょう。

対してRの場合には、ここまでのプログラムをRmarkdwonファイルにまとめておけば、次のようなhtmlファイルにまとめて出力することが可能です。コピペは当然必要なく、対象データを変える場合でも、書いた処理はそのまま再利用できます。

[htmlファイルをpdf化したもの]

[今回作成したRmdのGist]

再利用することを前提に分析を

研究を進めていく上で、過去に行った分析について振り返らないということはほぼ間違いなくあり得ません。ボスに報告する時、論文にまとめる時、研究発表のための資料作りの時に、振り返るべき瞬間は何度も訪れます。

その時に、散らばったエクセルファイルを見て、この結果はどういう手順を踏んで得られたんだっけ、という思考を巡らせ、自分のメモなどを見直して思い出す作業をするのは時間の無駄だと思います。

Rを学ぶ上で学習コストが全くないとは言えませんが、とっつきやすく、そして学ぶ価値のあるツールだと僕は思っています。ぜひこの機会に、Rを学び始めてみてください。