regresion paso lineal correlacion corrcoef coefcorr python pandas correlation

paso - regresion lineal python numpy



Use.corr para obtener la correlaciĆ³n entre dos columnas (7)

Tengo el siguiente marco de Top15 pandas Top15 :

Creo una columna que estima el número de documentos citables por persona:

Top15[''PopEst''] = Top15[''Energy Supply''] / Top15[''Energy Supply per Capita''] Top15[''Citable docs per Capita''] = Top15[''Citable documents''] / Top15[''PopEst'']

Quiero saber la correlación entre el número de documentos citables per cápita y el suministro de energía per cápita. Entonces uso el método .corr() (correlación de Pearson):

data = Top15[[''Citable docs per Capita'',''Energy Supply per Capita'']] correlation = data.corr(method=''pearson'')

Quiero devolver un solo número, pero el resultado es:


Cuando llamas a esto:

data = Top15[[''Citable docs per Capita'',''Energy Supply per Capita'']] correlation = data.corr(method=''pearson'')

Como la función DataFrame.corr () realiza correlaciones por pares, tiene cuatro pares de dos variables. Entonces, básicamente está obteniendo valores diagonales como correlación automática (correlación consigo mismo, dos valores ya que tiene dos variables) y otros dos valores como correlaciones cruzadas de uno frente a otro y viceversa.

Realice la correlación entre dos series para obtener un valor único:

from scipy.stats.stats import pearsonr docs_col = Top15[''Citable docs per Capita''].values energy_col = Top15[''Energy Supply per Capita''].values corr , _ = pearsonr(docs_col, energy_col)

o, si desea un solo valor de la misma función (corr de DataFrame):

single_value = correlation[0][1]

Espero que esto ayude.


Funciona así:

Top15[''Citable docs per Capita'']=np.float64(Top15[''Citable docs per Capita'']) Top15[''Energy Supply per Capita'']=np.float64(Top15[''Energy Supply per Capita'']) Top15[''Energy Supply per Capita''].corr(Top15[''Citable docs per Capita''])


Me encontré con el mismo problema. Parecía que Citable Documents per Person era un flotador, y Python lo omite de alguna manera por defecto. Todas las otras columnas de mi marco de datos estaban en formatos numpy, así que lo resolví convirtiendo la columna a np.float64

Top15[''Citable Documents per Person'']=np.float64(Top15[''Citable Documents per Person''])

Recuerde que es exactamente la columna que calculó usted mismo


Mi solución sería después de convertir datos a tipo numérico:

Top15[[''Citable docs per Capita'',''Energy Supply per Capita'']].corr()


Resolví este problema cambiando el tipo de datos. Si ve que el "Suministro de energía per cápita" es un tipo numérico, mientras que el "Citable docs per Capita" es un tipo de objeto. Convertí la columna para flotar usando un tipo. Tuve el mismo problema con algunas funciones np: count_nonzero y sum funcionaron mientras que mean y std no.


Si desea las correlaciones entre todos los pares de columnas, puede hacer algo como esto:

import pandas as pd import numpy as np def get_corrs(df): col_correlations = df.corr() col_correlations.loc[:, :] = np.tril(col_correlations, k=-1) cor_pairs = col_correlations.stack() return cor_pairs.to_dict() my_corrs = get_corrs(df) # and the following line to retrieve the single correlation print(my_corrs[(''Citable docs per Capita'',''Energy Supply per Capita'')])


Sin datos reales, es difícil responder la pregunta, pero supongo que está buscando algo como esto:

Top15[''Citable docs per Capita''].corr(Top15[''Energy Supply per Capita''])

Eso calcula la correlación entre sus dos columnas ''Citable docs per Capita'' y ''Energy Supply per Capita'' .

Para dar un ejemplo:

import pandas as pd df = pd.DataFrame({''A'': range(4), ''B'': [2*i for i in range(4)]}) A B 0 0 0 1 1 2 2 2 4 3 3 6

Entonces

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

da 1 como se esperaba.

Ahora, si cambia un valor, p. Ej.

df.loc[2, ''B''] = 4.5 A B 0 0 0.0 1 1 2.0 2 2 4.5 3 3 6.0

El comando

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

devoluciones

0.99586

que todavía está cerca de 1, como se esperaba.

Si aplica .corr directamente a su marco de datos, devolverá todas las correlaciones por pares entre sus columnas ; Es por eso que luego observa 1s en la diagonal de su matriz (cada columna está perfectamente correlacionada consigo misma).

df.corr()

por lo tanto regresará

A B A 1.000000 0.995862 B 0.995862 1.000000

En el gráfico que muestra, solo se representa la esquina superior izquierda de la matriz de correlación (supongo).

Puede haber casos en los que obtenga NaN en su solución; consulte esta publicación para ver un ejemplo.

Si desea filtrar las entradas por encima / debajo de un cierto umbral, puede verificar esta pregunta . Si desea trazar un mapa de calor de los coeficientes de correlación, puede verificar esta respuesta y si luego se encuentra con el problema con la superposición de etiquetas de eje, consulte la siguiente publicación .