API · Pandas

Pandas DataFrame.corr() 関数

DataFrame の corr()関数は、データフレームの列間の相関関係を見つけます。

このページの内容

Python Pandas の DataFrame.corr() は、DataFrame の列どうしの相関を計算し、相関行列として返します。method 引数で pearson、kendall、spearman のいずれかを選択できます。

pandas.DataFrame.corr() の構文とパラメーター

DataFrame に対してこのメソッドを呼び出します。たとえば、df.corr(method="pearson", min_periods=1) のように指定できます。method 引数は相関の計算方法を選び、省略時は pearson が使われます。min_periods 引数は、列のペアごとに結果を得るために必要な有効な観測値の最小数を指定します。行列内のペア数ではなく、それぞれのペアに個別に適用されます。

このメソッドは、選択した入力列を行と列に並べた DataFrame を返します。対角線上の各値は、列とその列自身との相関を表します。対角線以外の値は、2つの列の関係の方向と強さを示しますが、相関だけで因果関係が証明されるわけではありません。例では数値列を明示し、計算対象を分かりやすくします。手法を比較するときは、入力が変わった影響ではなく計算方法の違いを比べられるよう、同じ行と列を使ってください。係数を解釈する前に、その列ペアでどの観測値が利用できるか、また選んだ手法が要約したい関係に適しているかを確認しましょう。

Pearson 相関行列を計算する

簡単な例として、数値列を2つ作り、既定の計算方法で corr() を呼び出します。この例では、返された行列を correlations に格納するため、あとで確認したり分析に利用したりできます。

import pandas as pd

scores = pd.DataFrame({
    "study_hours": [1, 2, 3, 4],
    "score": [2, 4, 5, 8],
})
correlations = scores.corr()
print(correlations)
             study_hours     score
study_hours     1.000000  0.981156
score           0.981156  1.000000

この呼び出しでは pearson が使われます。行列の各軸には両方の列名が並び、それらが交差する位置に列ペアごとの結果が示されます。表にラベルなどの非数値データが含まれている場合は、列の暗黙的な扱いに頼らず、メソッドを呼び出す前に比較したい数値列を選択してください。

Kendall 相関行列を計算する

数値列の Kendall 順位相関を計算するには、method="kendall" を渡します。手法を比較する際は、同じ問いに答える行列になるよう、入力列をそろえてください。

import pandas as pd

scores = pd.DataFrame({
    "study_hours": [1, 2, 3, 4],
    "score": [2, 4, 5, 8],
})
correlations = scores.corr(method="kendall")
print(correlations)
             study_hours  score
study_hours          1.0    1.0
score                1.0    1.0

返されるオブジェクトも相関を示す DataFrame です。異なる2つの列ラベルが交差する位置の値を見ると、その列ペアの Kendall 相関を確認できます。対角線には各列と自身との相関が示されます。

min_periods を Spearman 相関で使う

結果を得るために必要な有効なペア観測値の最小数を指定するには、min_periods を設定します。この例では、各列ペアで同時に利用できる観測値が少なくとも3つある場合に、Spearman 順位相関が計算されます。入力では欠損値を None で表しています。

import pandas as pd

measurements = pd.DataFrame({
    "first": [1, 2, 3, None],
    "second": [2, 4, None, 8],
    "third": [1, 3, 5, 7],
})
correlations = measurements.corr(method="spearman", min_periods=3)
print(correlations)
        first  second  third
first     1.0     NaN    1.0
second    NaN     1.0    1.0
third     1.0     1.0    1.0

first と second の両方に観測値がある行は2つだけなので、このペアはしきい値の3に達しません。他のペアは、それぞれのペアで共通して有効な観測値を使って評価されます。この設定は各ペアの相関結果が得られるかどうかを制御するもので、列ペアの数を指定するものではありません。