jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

分析はプログラミングを利用したほうが良いのはなぜか?(初学者向け)

今回は,統計学やデータ分析の初学者の方に向けて,「なぜプログラミングを利用したほうが良いのか?」を考えてみます。

データ分析の方法

何らかの方法でデジタル化されたデータがあれば,それを使って,計算し,データの特徴を調べられます。数量で扱えるデータであれば,データの平均や散らばり,データの分布の形状などです。これらの計算は,手計算でもできます。でも,せっかくデジタルデータになっているので,計算用のアプリケーションを利用すると簡単に行えます。計算にアプリケーションを利用するのであれば以下の2つの方法が考えられます。

実際には,前者の表計算アプリケーションを利用する人が圧倒的に多いと思います。しかし,私はあえて後者のプログラミング言語を利用する方法をおすすめしたいと思います。でも,プログラミング言語を利用して,データの分析を行うにはちょっとしたコツと言うか,算数や数学の計算と異なる考え方をする必要があると思います。今回はそれを説明していきます。

具体例で,手計算,表計算アプリ,プログラミング言語による計算を比較

具体例があった方が話しやすいので,以下のような例を考えてみましょう。

Aさん,Bさん,Cさん,Dさん,Eさんの5人に一日の平均睡眠時間を尋ねたところ,それぞれ6時間,8時間,5時間,7時間,6時間という答えになりました。この5人全体としては,睡眠時間についてどんな傾向を持っているでしょうか?

こんな問題があったとして,真っ先に思いつくのは「グループ全体としての平均睡眠時間は〜時間です」だと思います。
たった5人の計算であれば,紙とペンで計算もできます。やってみましょう。

手計算の場合

平均を求める式を言葉で表すと,以下のようになります。
(Aさんの睡眠時間 + Bさんの睡眠時間 + Cさんの睡眠時間 + Dさんの睡眠時間 + Eさんの睡眠時間) ➗ 人数 = グループの平均睡眠時間
データがあるので,数字に直しましょう。
( 6 + 8 + 5 + 7 + 6) ➗5 = 6.4時間

これで良いと思います。この例だったらデータのサイズがわずか5人なので,計算の手間もそれほどではありません。でも,これがある学校の生徒1000人の平均睡眠時間を計算する場合だったらどうでしょうか?そうなると手計算の手間がかかりすぎるので,以下で示すようなアプリケーションを利用するのが良いでしょう。

表計算アプリケーションの場合

では,表計算アプリケーションでも計算してみましょう。まず以下のように,データを表にしてみました。

f:id:jnobuyuki:20181117190035p:plain

このように表ができたら,セルの数を参照して平均を計算できます。以下のように,手計算と同じように参照しながら計算することができます。
f:id:jnobuyuki:20181118022148p:plain

しかし,表計算アプリケーションには,便利な関数(マイクロソフトエクセルならaverage関数)があり,データの個数を自分で入力しなくても計算可能です。

f:id:jnobuyuki:20181118022308p:plain

ここで上の2つの方法を比べてみましょう。上の方法は,手計算の場合とほぼ同じです。なので,エクセルに慣れていない人でも,すぐに意味がわかると思います。一方,下の方法は,average関数というエクセル特有の仕組みを使っているので,計算の中身がわからないです。ここが少し不安になるかもしれませんね。ただし,計算の際に参照している数字は同じであることが見て取れます。

Rを使った方法

では,プログラミングを利用する方法としてRで同じ計算をしてみましょう。Rを電卓のような感じで利用するのであれば,以下のようにコードを書くと良いでしょう。

(6 + 8 + 5 + 7 + 6) / 5

Rでもエクセルと同じような関数が用意されています。mean関数です。引数として,カッコの中に数字を入れるのも同じです。

mean(c(6, 8, 5, 7, 6))

Rのようなプログラミング言語で計算する場合,入力する数字や計算の結果をオブジェクトと呼ばれるものに保存できます。例えば以下のように書きます。

sleepTimeData <- c(6,8,5,7,6)

sleepTimeDataMean <- mean(sleepTimeData)

print(sleepTimeDataMean)

上記で,sleepTimeDataやsleeTimeDataMeanがオブジェクトです。名前は好きなものが使えます*1。この形にしてしまうとmean関数を利用する際に数字がぱっと見てわかる数字が一切ありません。この方法に慣れていない人は,ここで自分が何をしているのかわからなくなると思ってしまうかもしれません。落ち着いて,上の行を見れば具体的な数字が出てくるので,mean関数にどんな数字を使っているのかがわかります。

なぜプログラミングした方が良いのか?

なぜプログラマは,数字を記入せずに,ぱっと見ではわからない書き方をしているのでしょうか。次の例を考えてみましょう。

sleepTimeData <- c(6,8,5,7,6,4,9,10, 7, 8, 6, 6, 5, 9, 3, 7)

sleepTimeDataMean <- mean(sleepTimeData)

print(sleepTimeDataMean)

この例では,先の例に比べてたくさんの人の睡眠時間を使って平均を計算しています。ここ大事なのは,入力として使うオブジェクト(ここではsleepTimeData)の行だけ,数字が違うことです。残りの2行は先程の例と全く同じコードが書かれています。もしも,オブジェクトを使わずに計算すると以下のようになってしまいます。

(6 + 8 + 5 + 7 + 6 + 4 + 9 + 10 + 7 + 8 + 6 + 6 + 5 + 9 + 3 + 7) / 16

このように書くと,数字が変わるたびに計算式を毎回変更しなければいけないですね。そして,数字がいくつあるかも数えなければいけません。この例では,多いとは言っても比較的少ない数の数字の計算ですが,これが1000とか10000になると大変です。一方,オブジェクトを利用すれば,入力の段階でミスをしなければ,数字の数を数えることもなく,いつでも同じ計算用のコードを利用できるわけです。

実は,この他にもプログラミングを利用した方が良い理由があるのですが,それは別の記事になっているので,こちらを御覧ください。

webbeginner.hatenablog.com

まとめ

今回は,データ分析の方法として,数式で手計算する方法,表計算アプリケーションを利用する方法,プログラミンを利用する方法を比較してみました。その結果として,プログラミングを利用すると,一度作った計算手続きを他の計算にもうまく利用できることを示しました。今までプログラミングをしたことがなくて,難しそうと思っている人も,オブジェクトの利用の仕方を工夫しながらぜひ挑戦してみてください。

*1:命名は,中身がわかるようにした方が良いと思います。また,すでにRで使われている名前のオブエジェクトは避けたほうが良いです