Adición de una línea de tendencia al gráfico de dispersión

1. Introducción

Diagrama de dispersión que es una forma útil para explorar las dos variables de relación, pero también tiene un shortcome: tenemos que supongo que es la tendencia de nuestros ojos. Si podemos agregar una línea de tendencia a la nube de puntos, que se hace nuestra opinión más clara y potente. Este paso no sólo beneficiará a los lectores, sino también a nosotros mismos analista de datos de separar lo que está pasando.

Sin embargo, matplotlib no tiene ningún argumento o incorporado en el método para hacerlo. Tenemos que hacer una línea de tendencia por nosotros mismos. En ecosistema pitón de hacer la regresión (línea de tendencia) está más lleno de gente. Bibliotecas de numpy, statsmodels, SciPy a sklearn, muchas bibliotecas tiene su propia manera de hacer la misma cosa. Me gustaría que tienen igual o cerca de interfaz para los usuarios, pero no es el caso. Así que en este artículo vamos a tratar de agregar una línea de tendencia tan fácil como sea posible. Después de eso, vamos a tener un glimps cómo otras bibliotecas hacen lo mismo.

Una nota rápida antes del inicio, la línea de tendencia es en realidad una regresión a los datos de dispersión, por lo que este artículo es también un proceso estándar de cómo hacer la regresión de datos en Python.

 

 

2. Los Datos

Vamos a utilizar dos conjunto de datos clásica "tips.csv" y "mpg.csv" como ejemplos.

Una forma rápida está utilizando Bulit-en bases de datos, consejos de Seaborn y mpg ya están dentro.

Seaborn importación como SNS 

consejos sns.load_dataset = ( "puntas") 
mpg = sns.load_dataset ( "mpg")

Esto es lo que parecen, 5 primeras líneas:

  

Podemos dibujar un gráfico de dispersión normal ver cómo se ve.

de matplotlib pyplot importación como plt 

fig, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 
ax1.scatter (puntas [ 'total_bill'], consejos [ 'punta'])

higo, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 
ax1.scatter (mpg [ 'caballos de fuerza'], mpg [ 'mpg'])

 

 

 

3. Seaborn

Como mencionamos antes, sin matplotlib ha incorporado en el método para agregar una línea de tendencia. Pero Seaborn tiene uno, llamado "regplot" (abreviatura de gráfico de regresión).

Esto puede resolver totalmente el problema sin siquiera saben cómo hacer una regresión. 

higo, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 

de dispersión = sns.regplot (consejos [ 'total_bill'], consejos [ 'punta'])

Los datos muestran una tendencia mpg curva, utilizaremos orden de los argumentos = 2 como a continuación.

# Usando el orden argumento = 
fig, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 

de dispersión = sns.regplot (mpg [ 'caballos de fuerza'], mpg [ 'mpg'], orden = 2)

  

Podemos hacer algún tipo de personalización dentro de Seaborn. No es tan obvio ni tan coordinar con matplotlib, pero sigue siendo bueno saber.

# Podemos especificar línea de color y el color de dispersión con line_kws 
fig, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 

de dispersión = sns.regplot (mpg [ 'caballos de fuerza'], mpg [ 'mpg'] , orden = 2, 
                      line_kws = { 'color': 'darkorange'}, scatter_kws = { 'color': 'rosa'})

En realidad, esto puede ser el fin de la historia. Tenemos una producción decente y manera bastante fácil para agregar una línea de tendencia al gráfico de dispersión.

Si puedes soportar conmigo, o si desea volver más tarde, estaremos encantados de ir en más detalle en el tema.

 

  

4. Numpy  

importar numpy como NP

La manera más fácil segundos de agregar una línea de tendencia está utilizando la biblioteca numpy. Esto nos puede sorprender cómo numpy poderoso es, sin siquiera usar statsmodels, scipy o sklearn.

En el método Seaborn, no tenemos idea de cuál es la función de la línea de tendencia es, o lo bien que se ajusta a los datos.

Usando numpy es otra forma de hacer lo mismo, pero podemos conseguir lo que la función de la línea de tendencia es. Al menos si se nos pide, podemos decir cuál es la función de línea de tendencia.

La función integrada de "np.poly1d ()" se puede imprimir directamente, lo cual es conveniente para nosotros los usuarios.

params = np.polyfit (puntas [ 'total_bill'], consejos [ 'punta'], 1) # 1 para 
función = np.poly1d (params) 

de impresión (función) 
# salida 
# 0.105 x + 0.9203

Uso de la función construimos anterior, podemos señalar a la tendencia dentro matplotlib.

fig, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 

ax1.scatter (puntas [ 'total_bill'], consejos [ 'punta']) 

x = np.linspace (0, 50) 
AX1. plot (x, la función (x), color = 'rojo', anchura de línea = 2)

  

Del mismo modo que vamos a hacer el mismo conjunto de datos a mpg.

params = np.polyfit (mpg [ 'caballos de fuerza'], mpg [ 'mpg'], 2) # 2 órdenes 
de función = np.poly1d (params) 

de impresión (función) 
# salida 
# 2 
# 0,001231 x - 0,4662 x + 56,9

  

fig, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 

ax1.scatter (mpg [ 'caballos de fuerza'], mpg [ 'mpg']) 

x = np.linspace (50, 225) 
AX1. plot (x, la función (x), color = 'r', anchura de línea = 2)

Creo que este método también es bastante fácil. Dos funciones importantes en este caso está muy bien diseñado, especialmente la salida de la función y podemos usarlo para el dibujo.

 

 

5. Modelo de Estado  

En la sección anterior hablamos acerca de cómo obtener la expresión (función) de la línea de tendencia. Pero todavía no tenemos idea de lo bueno o malo del fitness es.

Normalmente no tenemos a conocer esta parte de infomación, pero si tenemos que entrar en esta parte, el uso de statsmodel es una idea buena.

oles de importación statsmodels.formula.api 

consejos tips.dropna = () # dropna por nosotros mismos o puede obtener el error 

curva = oles ( '~ punta total_bill', consejos) # construcción de expresión y x ~ 
curva = curve.fit () 

print (curve.params) 
# salida 
# Intercept 0.920270 
# total_bill 0.105025 
# dtype: float64

El uso de estos infomación, podemos función construida por nosotros mismos y dibujar la línea de tendencia.

# Podemos utilizar np.poly1d () para construir la función de si queremos 
# pero aquí le damos una forma común: 
def f (x): 
    curve.params retorno [1] * x + curve.params [0] 


higo, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 

ax1.scatter (puntas [ 'total_bill'], consejos [ 'punta']) 

x = np.linspace (0, 50) 
ax1.plot (x , f (x), color = 'rojo', anchura de línea = 2)

  

No es de extrañar que es el mismo que antes, pero buena parte es que podemos tener un resumen de la siguiente curva.

Si estamos haciendo la regresión y tratar de averiguar qué parámetro es lo suficientemente bueno o malo, esta tabla infomación puede ser un salvador de la vida.

curve.summary ()

  

Ahora vamos a hacer lo mismo al conjunto de datos mpg. Cuando traté de hacer este proceso, he encontrado si la regresión es 2 órdenes, tengo que hacer el varibale por mí mismo. Tal vez estoy equivocado, si tengo nueva infomación Voy a actualizar.

mpg = mpg.dropna () 

de dispersión # millas por galón es de 2 órdenes de tendencia, 
# en este método statsmodel tenemos que hacerlo por nosotros mismos 
mpg [ 'horsepower2'] = mpg [ 'potencia'] ** 2 

# regresión por los mismos 
# construcción de expresión y ~ x ** 2 + x 
curva = ols ( 'mpg ~ horsepower2 + caballos de fuerza', mpg) 
curva = curve.fit () 

curve.params 
# salida 
#Intercept 56.900100 
# horsepower2 0,001231 
#horsepower -0.466190 
#dtype: float64

 

# Nuestra expresión de regresión 
def f (x): 
    curve.params de retorno [1] * x ** 2 + curve.params [2] * x + curve.params [0] 

fig, AX1 = plt.subplots (1, 1, figsize = (8, 6)) 

ax1.scatter (mpg [ 'caballos de fuerza'], mpg [ 'mpg']) 

x = np.linspace (50, 225) 
ax1.plot (x, f (x), color =' r', anchura de línea = 2)

  

 

curve.summary ()

 

 

6. Resumen

  • Si no nos importa nada, sólo tiene que utilizar regplot de seabron () para agregar una línea de tendencia.
  • Si queremos también una expresión de la tendencia, podemos utilizar ployfit de numpy () adn ploy1d (). Useage de ploy1d () está más allá de este método. Puede ser utilizado para construir la expresión con los parámetros producidos por otras bibliotecas.
  • Si queremos obtener infomación completa de la aptitud o haciendo la regresión formal, statsmodel tiene una buena tabla de salida.

Vamos a parar aquí. No sólo porque el artículo ya es demasiado largo, sino también que no tengo llena de entender scipy y sklearn.

Deseamos a nuestro tema de hoy está bien explicado y lo suficientemente fácil de utilizar por todo el mundo. Si estoy equivocado en cualquier parte, por favor hágamelo saber.

 

 

 

 

 

 

 

Supongo que te gusta

Origin www.cnblogs.com/drvongoosewing/p/12496786.html
Recomendado
Clasificación