Некоторые из моих столбцов пропадают, когда я использую df.corr в Pandas - PullRequest
0 голосов
/ 04 марта 2019

Вот мой код:


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.

Как проверить корреляцию между всеми столбцами в данных?

1 Ответ

0 голосов
/ 05 марта 2019

Не видя каких-либо дополнительных данных, чтобы понять, почему вы пропускаете столбцы, нам придется проверить, что делает pd.DataFrame.corr.

Как указано в документации вычисляет попарные корреляции столбцов.Поскольку вы не указали никаких аргументов, он использует метод по умолчанию и вычисляет r Пирсона , который измеряет линейную корреляцию между двумя переменными (X, Y) и может принимать значения от -1 до 1, соответствующиек точной отрицательной линейной корреляции с точной положительной линейной корреляцией и всеми значениями между ними, где 0 не является корреляцией (т. е. график X относительно Y является случайным, а линейная регрессия будет соответствовать плоскому наклону).

Для нечисловых переменных не существует понятия корреляции (по крайней мере, в контексте 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) был удален.

Если вы строите различные числовые переменные для каждогоиначе вы получите следующий график:

pearsons_r_example

, который помогает выделить различные корреляции: случайно существует отрицательная линейная корреляция между x и y.

...