PythonやR言語で相関係数を計算する方法

Data Science

2018.2.20

Topics

こんにちは。データサイエンスチーム tmtkです。
この記事では、パソコンで相関係数を計算する方法について解説します。具体的には、Microsoft Excel、R言語、Python(Pandas)、Python+Spark(PySpark)の4つの方法での計算を解説します。

相関係数とは

相関係数とは、2つの変数に線形関係があるかどうかを判定するための値です。
データとして(x_1, y_1), \ldots, (x_n, y_n)というものが与えられたとき、このデータにおける変数x, yの相関係数r_{xy}r_{xy} = \frac{\frac{1}{n}\sum_{i=1}^n(x_i-\overline{x})(y_i-\overline{y})}{s_xs_y}で定義されます。ここで、\overline{x}, \overline{y}はそれぞれx, yの平均、s_x, s_yはそれぞれx, yの標準偏差です。xの標準偏差s_xs_x = \sqrt{\frac{1}{n}\sum_{i=1}^n (x_i-\overline{x})^2}で定義されます。
相関係数は、x, yの間に線形関係y = ax + b (a \neq 0)があるとき、r_{xy}= \pm 1になります。

相関係数の計算の具体例

それでは、具体的なデータを例にして、相関係数を計算してみます。
いま、3人の生徒、一郎、二郎、三郎が英語と数学の試験を受けて、英語と数学それぞれの成績が、一郎は10点と10点、二郎は20点と40点、三郎は30点と90点だったとします。このとき、英語の点数と数学の点数の相関係数を計算する、という問題について考えることにします。

名前 英語 数学
一郎 10 10
二郎 20 40
三郎 30 90

ただし、コンピュータで処理するため、次のようなCSVファイルが用意されていると仮定します。
score.csv

Name,English,Mathematics
Ichiro,10,10
Jiro,20,40
Saburo,30,90

Microsoft Excelで計算

まずは、みんな大好きMicrosoft Excelで相関係数を計算してみましょう。まずはscore.csvをExcelで開きます。
ファイルを開く
Microsoft Excelには、CORRELという相関係数を計算するための関数があります。今回はこれを使って計算します。
適当なセルに、=CORREL(B2:B4,C2:C4)と入力すると、英語の得点と数学の得点の相関係数が計算できます。B2:B4が英語の得点が入っているセルで、C2:C4で数学の得点が入っているセルを指定しています。
CORREL関数を使う
Enterキーで確定すると、相関係数が計算されます。
確定して計算
Microsoft Excelではほかに、「分析ツール」というものを使って相関係数を計算する方法もあります。興味がある方は調べてみてください。

R言語で計算

次に、R言語で計算してみます。R言語の環境はMicrosoft Excelと違って無料で入手できるのでうれしいですね。
R Studioやターミナルから、Rのコンソールを起動します。
次に、score.csvを読み込みます。必要があれば、score.csvへのパスを変更します。

df <- read.csv("./score.csv")

最後に、English列とMathematics列の相関係数をcor関数で計算します。

cor(df["English"], df["Mathematics"])

Rでの計算
これで、R言語で相関係数が計算できました。

Python(Pandas)で計算

今度は、機械学習界隈で人気のPythonで計算してみます。Pythonでは、データ分析ライブラリのPandasを使ってみます。
まず、PythonのREPLを起動します。私は便利なIPythonを使うことにしています。
次に、Pandasをimportします。

import pandas as pd

read_csv関数でscore.csvを読み込みます。

df = pd.read_csv("./score.csv")

最後に、corrメソッドで相関係数を計算します。

df.corr()

!
PythonとPandasでの計算
これで、PythonとPandasで相関係数が計算できました。

Python+Spark(PySpark)で計算

最後に、PythonをつかってApache Spark上で計算してみます。ビッグデータを扱っている方はSparkをつかっているかもしれませんね。
まず、PySparkを起動します。

pySpark

SparkのDataFrameとしてscore.csvを読み込みます。ヘッダを有効にし、型を自動的に推論します。

df = spark.read.option("header", True).option("inferSchema", True).csv("score.csv")

corrメソッドを使って相関係数を計算します。

df.corr("English", "Mathematics")

PySparkでの計算
これで、PySparkで相関係数が計算できました。

まとめ

この記事では、相関係数の紹介と、いろいろなソフトウェアでの相関係数の計算方法の解説を行いました。

参考

tmtk

データ分析と機械学習とソフトウェア開発をしています。 アルゴリズムとデータ構造が好きです。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら