这是我的代码:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
data = pd.read_csv('death_regression2.csv')
data3 = data.replace(r'\s+', np.nan, regex = True)
plt.figure(figsize=(90,90))
corr = data3.corr()
print(np.shape(list(corr)))
print(np.shape(data3))
(135,)
(4909,204)
因此,在使用相关函数之前,参数总数为204(列数)
但是在使用data3.corr()之后,一些参数丢失了,减少到135。
如何检查数据中所有列之间的相关性?
最佳答案
在没有看到任何其他数据来了解为什么缺少列的情况下,我们将不得不检查 pd.DataFrame.corr
的作用。
当documentation概述时,它计算列的成对相关。因为未指定任何参数,所以使用默认方法并计算Pearson's r,它测量两个变量(X,Y)之间的线性相关性,并且可以采用介于-1和1之间的值,该值对应于精确的负线性相关性和精确的正线性相关性,并且介于两者之间的所有值,其中0为无相关关系(即X对Y的图是随机的,线性回归将拟合平坦的斜率)。
对于非数字变量,没有相关性的概念(至少在Pearson的r和此答案的上下文中),并且pd.DataFrame.corr
只是忽略了非数字(即,非浮点或非整数值)并删除了这些列,解释了为什么您的列较少。
如果您的删除值实际上是数字但存储为(例如)字符串,则可能需要在调用.corr()
之前对其进行转换。
举个例子:
x = np.random.rand(10)
y = np.random.rand(10)
x_scaled = x*6
cat = ['one', 'two', 'three', 'four', 'five',
'six','seven', 'eight', 'nine', 'ten']
df = pd.DataFrame({'x':x, 'y':y, 'x_s':x_scaled, 'cat':cat})
df.corr()
返回:
x y x_s
x 1.000000 -0.470699 1.000000
y -0.470699 1.000000 -0.470699
x_s 1.000000 -0.470699 1.000000
这是我们的相关矩阵,但我们的非数字列(
cat
)已删除。如果将不同的数字变量相互绘制,则会得到下图:
这有助于突出显示不同的相关性:偶然在
x
和y
之间存在负线性相关。