En el artículo anterior, creamos gráficos usando subplots en Matplotlib.
En este artículo, intentaremos realizar un análisis de regresión lineal utilizando polinomios de numpy.
1. ¿Qué es el análisis de regresión lineal?
Según Wikipedia, el análisis de regresión lineal se explica de la siguiente manera.
En estadística, la regresión lineal es un método de análisis de regresión que modela la relación lineal entre una variable dependiente y una o más variables independientes X.
-Wikipedia-
En términos simples, se puede describir como la pendiente promedio de los valores mostrados en el gráfico.
Al mostrar la regresión lineal en un gráfico, puede mostrar más claramente una relación de correlación entre dos valores que aparece vagamente a simple vista.

El gráfico anterior es una visualización de datos descargados de Kaggle.
Contiene el nivel educativo de los padres, raza, y el desempeño de los estudiantes, de los cuales se ha graficado la relación de puntuaciones de matemáticas y lectura.
Puedes descargar el archivo anexado a continuación, o usar el enlace para obtenerlo. Hemos proporcionado una versión en coreano, elige lo que te sea más conveniente.
2. Creando el gráfico
Primero, grafiquemos las puntuaciones de matemáticas y lectura de los estudiantes como un gráfico de dispersión, al igual que el gráfico anterior.
Comienza con el mismo código que vimos en la lección anterior, solo necesitas cambiar la ruta del archivo a cargar.
import pandas as pd
# Llamada de módulo y configuración de fuente en coreano
import matplotlib.pyplot as plt
import matplotlib
# Configuración de fuente en MacOS
# matplotlib.rcParams["font.family"] = "AppleGothic"
# Configuración de fuente en Windows
matplotlib.rcParams["font.family"] = "Malgun Gothic"
# Configuración de tamaño de fuente
matplotlib.rcParams["font.size"] = 13
# Solución de problema de signo menos
plt.rcParams['axes.unicode_minus'] = False
score = pd.read_excel("./StudentsPerformance.xlsx")
score.head(3)
Ahora, utiliza esto para ingresar las puntuaciones de matemáticas y lectura como parámetros en plt.scatter.
plt.scatter(score["수학점수"], score["읽기점수"])
El gráfico no se ve bonito, así que lo hemos ajustado un poco.
Hemos agregado color al gráfico, transparencia, y etiquetas para cada eje.
plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
Ahora que el gráfico básico está completo, utilicemos numpy para realizar un análisis de regresión lineal.
3. Polinomio
Después de llamar al polinomio de numpy, solo debes ingresar como parámetros los valores x e y, junto con el grado del polinomio deseado.
Realizaremos un análisis de regresión lineal de primer grado con las puntuaciones de matemáticas y lectura.
from numpy.polynomial import Polynomial
f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)Cuando lo ingresas de esta manera, el polinomio devuelve la función lineal predicha.
Por lo tanto, f será una función que recibe valores x como parámetros.
Mira los valores predichos ingresando el siguiente código.
from numpy.polynomial import Polynomial
f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)
f(40)
El valor predicho de lectura para un estudiante con una puntuación de matemáticas de 40 es 40.
Ahora, vamos a graficarlo.
4. Gráfico de regresión lineal
En los datos, las puntuaciones de matemáticas y lectura de los estudiantes no están ordenadas de 0 a 100.
Así que si pones las puntuaciones de matemáticas como parámetros en f, el gráfico se desordena a medida que aumenta el grado.


Primero, genera números del 0 a 100, y luego da estos números como valores x del polinomio lineal para graficarlo.
Linspace de numpy recibe como parámetros el punto de inicio, punto final y cantidad de números que se llenarán dentro para generar los valores.
import numpy as np
x = np.linspace(0,100,200)
plt.plot(x,f(x))Si verificas los valores de x, verás que fueron generados como se muestra a la izquierda.
Y al trazarlo así, se verá como sigue.


5. Completando el gráfico
Ahora solo nos queda superponer los dos gráficos.
plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
plt.plot(x, f(x),"r--")
6. Conclusiones
En este artículo, dibujamos un gráfico que muestra la relación entre dos valores a través del análisis de regresión lineal.
En el próximo artículo, exploraremos cómo llenar un informe escolar aprovechando la visualización de datos.
댓글을 불러오는 중...