Home » How to Calculate Correlation in Python

How to Calculate Correlation in Python

by Tutor Aspire

One way to quantify the relationship between two variables is to use the Pearson correlation coefficient, which is a measure of the linear association between two variables. It always takes on a value between -1 and 1 where:

  • -1 indicates a perfectly negative linear correlation between two variables
  • 0 indicates no linear correlation between two variables
  • 1 indicates a perfectly positive linear correlation between two variables

The further away the correlation coefficient is from zero, the stronger the relationship between the two variables.

This tutorial explains how to calculate the correlation between variables in Python.

How to Calculate Correlation in Python

To calculate the correlation between two variables in Python, we can use the Numpy corrcoef() function.

import numpy as np

np.random.seed(100)

#create array of 50 random integers between 0 and 10
var1 = np.random.randint(0, 10, 50)

#create a positively correlated array with some random noise
var2 = var1 + np.random.normal(0, 10, 50)

#calculate the correlation between the two arrays
np.corrcoef(var1, var2)

[[ 1. 0.335]
[ 0.335 1. ]]

We can see that the correlation coefficient between these two variables is 0.335, which is a positive correlation.

By default, this function produces a matrix of correlation coefficients. If we only wanted to return the correlation coefficient between the two variables, we could use the following syntax:

np.corrcoef(var1, var2)[0,1]

0.335

To test if this correlation is statistically significant, we can calculate the p-value associated with the Pearson correlation coefficient by using the Scipy pearsonr() function, which returns the Pearson correlation coefficient along with the two-tailed p-value.

from scipy.stats.stats import pearsonr

pearsonr(var1, var2)

(0.335, 0.017398)

The correlation coefficient is 0.335 and the two-tailed  p-value is .017. Since this p-value is less than .05, we would conclude that there is a statistically significant correlation between the two variables.

If you’re interested in calculating the correlation between several variables in a Pandas DataFrame, you can simpy use the .corr() function.

import pandas as pd

data = pd.DataFrame(np.random.randint(0, 10, size=(5, 3)), columns=['A', 'B', 'C'])
data

  A B C
0 8 0 9
1 4 0 7
2 9 6 8
3 1 8 1
4 8 0 8

#calculate correlation coefficients for all pairwise combinations
data.corr()

          A         B         C
A  1.000000 -0.775567 -0.493769
B -0.775567  1.000000  0.000000
C -0.493769  0.000000  1.000000

And if you’re only interested in calculating the correlation between two specific variables in the DataFrame, you can specify the variables:

data['A'].corr(data['B'])

-0.775567

Additional Resources

The following tutorials explain how to perform other common tasks in Python:

How to Create a Correlation Matrix in Python
How to Calculate Spearman Rank Correlation in Python
How to Calculate Autocorrelation in Python

You may also like