Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで相関関係を調べる方法:Spearman相関とPearson相関の使い方

相関関係(Correlation)とは、2つの変数間の関係の強さを測定するための統計用語です。一方の変数が変化したとき、もう一方の変数も予測可能なパターンで変化するような強い関係が存在する場合、これらの変数は「相関している」と言います。

また、片方の変数の変動が、もう片方の変数に対して正の方向・負の方向どちらの影響を与えるかによって、それぞれ正の相関負の相関に分類されます。相関係数の値は、理想的には -1 から +1 の範囲で表されます。

  • +1 またはそれに近い値:正の相関があるとされ、2つの変数は同じ方向に同時に変動します。
  • -1 またはそれに近い値:負の相関があるとされ、2つの変数は互いに逆方向へ同時に変動します。
  • 0 またはそれに近い値:2つの変数の間に相関はないと判断されます。

相関係数を算出する手法は複数あり、Pythonでは numpyscipy.stats が提供する関数として簡単に利用できます。ここでは代表的な2つの手法、Spearman(スピアマン)相関Pearson(ピアソン)相関の使い方を解説します。

Spearman相関の計算方法

Spearman相関は、線形な関連性を持つ変数間の関係の強さを測定するために用いられる統計手法です。scipy.stats パッケージに組み込まれた数式に基づいて結果が算出され、相関分析において最も広く使われている手法のひとつです。

以下の例では、numpy.random.randn() 関数を使ってランダムに生成した2つのデータセットを用意し、spearmanr() を適用して相関を求めます。

コード例

from numpy.random import randn
from numpy.random import seed
from scipy.stats import spearmanr
seed(1)
data_input1 = 20 * randn(1000) + 100
data_input2 = data_input1 + (10 * randn(1000) + 50)
correlation = spearmanr(data_input1, data_input2)
print(correlation)

実行結果

SpearmanrResult(correlation=0.8724050484050484, pvalue=1.58425746359e-312)

この結果から、相関係数は約 0.87 であり、2つの変数の間には強い正の相関があることがわかります。また、p値が極めて小さいため、この相関は統計的に有意であると判断できます。

Pearson相関の計算方法

Pearson相関は、線形に関連する変数間の関係の強さを測定するもうひとつの標準的な手法です。こちらも scipy.stats パッケージに実装された数式に基づいて結果が計算されます。

先ほどと同様に、numpy.random.randn() 関数で生成した2つの変数を用意し、pearsonr() を適用して最終的な相関係数を取得します。

コード例

from numpy.random import randn
from numpy.random import seed
from scipy.stats import pearsonr
seed(1)
data1 = 20 * randn(1000) + 100
data2 = data1 + (10 * randn(1000) + 50)
correlation, _ = pearsonr(data1, data2)
print('Pearsons correlation: %.3f' % correlation)

実行結果

Pearsons correlation: 0.888

このように、Pearson相関でも約 0.89 という高い相関係数が得られました。どちらの手法でも、2つの変数の間に強い正の相関が存在することを確認できました。

まとめ

相関分析を行う際は、データの性質に応じて適切な手法を選択することが重要です。一般的に、連続値のデータで線形関係を確認したい場合は Pearson 相関、順位や非線形な単調関係を評価したい場合は Spearman 相関が適しています。Pythonでは scipy.stats を使うことで、どちらの手法も数行のコードで簡単に実装できます。

  1. Pythonの名前空間とスコープの仕組みをわかりやすく解説

    Pythonでは、変数・関数・ライブラリ・モジュールなど、さまざまな「名前」を扱います。ところが、使おうとした変数名が、すでに別の変数や関数、メソッドの名前として存在している――そんな場面に遭遇することは珍しくありません。このような名前の衝突を避けるためにも、Pythonがこれらの名前をどのように管理しているのかを理解しておく必要があります。その鍵となるのが「名前空間(namespace)」という概念です。 名前空間の3つの種類 Pythonの名前空間は、大きく次の3つに分類されます。 ローカル名前空間(Local Namespace)関数の中で定義された変数や関数の名前を保持する名前空

  2. Pythonで学ぶ相関と回帰分析の基礎|Seabornを使ったデータ分析入門

    相関(Correlation)とは、2つのデータセット間に存在する依存関係を含む統計的な関係性を指します。一方、線形回帰(Linear Regression)は、従属変数と1つ以上の独立変数の間の関係を直線的なアプローチで捉える手法です。独立変数が1つの場合は「単回帰」、複数ある場合は「重回帰」と呼ばれます。相関とは何か依存現象の身近な例としては、親と子の身体的特徴(外見)の類似性や、商品の価格と供給量の関係などが挙げられます。価格が上がれば供給量が増える、といった具合に、変数同士が互いに影響し合う様子を統計的に表したものが相関です。本記事では、Pythonの可視化ライブラリ「Seaborn」