En el artículo anterior dibujamos gráficos en Matplotlib utilizando subplots.
En este artículo voy a realizar un análisis de regresión lineal utilizando polynomial de numpy.
1. ¿Qué es el análisis de regresión lineal?
Si miramos en Wikipedia, la regresión lineal se explica de la siguiente manera.
En estadística, la regresión lineal es una técnica de análisis de regresión que modela la relación lineal entre una variable dependiente y y una o más variables independientes X.
-Wikipedia-
Dicho de forma muy sencilla, se puede decir que es la pendiente promedio que tienen los valores representados en el gráfico.
Al representar la regresión lineal en un gráfico, podemos mostrar con mayor claridad la relación entre dos valores que a simple vista solo se percibe de forma vaga.

El gráfico de arriba es una visualización de datos descargados de kaggle.
Incluye el nivel educativo de los padres, la raza y el rendimiento de los estudiantes; entre ellos, he representado la relación entre las puntuaciones de matemáticas y lectura.
Puedes descargar el archivo adjunto a continuación o acceder al enlace para descargarlo. El archivo de abajo está traducido al coreano, así que elige lo que te resulte más cómodo.
2. Dibujar el gráfico
Primero, dibujemos un gráfico de dispersión (scatter) de las puntuaciones de matemáticas y lectura de los estudiantes, como en el gráfico anterior.
Comenzamos exactamente con el mismo código que vimos en la clase anterior y solo cambiamos la ruta del archivo que cargamos.
import pandas as pd
# 모듈 호출 및 한글폰트 설정
import matplotlib.pyplot as plt
import matplotlib
# MacOS에서 폰트설정
# matplotlib.rcParams["font.family"] = "AppleGothic"
# 윈도우에서 폰트설정
matplotlib.rcParams["font.family"] = "Malgun Gothic"
# 폰트 크기 설정
matplotlib.rcParams["font.size"] = 13
# 마이너스 출력 문제 해결
plt.rcParams['axes.unicode_minus'] = False
score = pd.read_excel("./StudentsPerformance.xlsx")
score.head(3)
Ahora utilizaremos esto para pasar las puntuaciones de matemáticas y lectura como parámetros de plt.scatter.
plt.scatter(score["수학점수"], score["읽기점수"])
El gráfico no se ve muy bonito, así que lo he mejorado un poco.
He añadido el color del gráfico, la transparencia (alpha), y las etiquetas de cada eje.
plt.scatter(score["수학점수"], score["읽기점수"], alpha=0.4, color="green")
plt.xlabel("수학점수")
plt.ylabel("읽기점수")
Como ya hemos completado el gráfico básico, ahora vamos a realizar un análisis de regresión lineal utilizando numpy.
3. Polynomial
Tras importar polymomial de numpy, solo hay que introducir como parámetros los valores x, los valores y que queremos analizar y el grado del polinomio.
Vamos a realizar un análisis de regresión lineal de primer grado de las puntuaciones de matemáticas y lectura.
from numpy.polynomial import Polynomial
f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)Al introducirlo de este modo, polynomial devuelve la función lineal predicha.
Por lo tanto, f se convierte en una función que recibe los valores x como parámetro.
Probemos a ver el valor predicho introduciendo lo siguiente.
from numpy.polynomial import Polynomial
f = Polynomial.fit(score["수학점수"], score["읽기점수"], 1)
f(40)
El valor predicho de la puntuación de lectura para un estudiante con 40 puntos en matemáticas es 40.
Ahora dibujemos el gráfico.
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.
Por eso, si pasamos directamente las puntuaciones de matemáticas como parámetro a f, cuanto mayor sea el grado, más caótico quedará el gráfico.


Primero debemos generar los números del 0 al 100 y luego usarlos como valores x de la función lineal para dibujar el gráfico.
numpy.linspace recibe como parámetros el punto de inicio, el punto final y la cantidad de números a generar entre ellos para producir los valores.
import numpy as np
x = np.linspace(0,100,200)
plt.plot(x,f(x))Si comprobamos los valores de x, podemos ver que se han generado como a la izquierda.
Y si dibujamos el gráfico con esto, obtenemos lo siguiente.


5. Completar el gráfico
Ahora solo 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. Para terminar
En este artículo hemos dibujado un gráfico para ver qué tipo de relación tienen dos valores mediante un análisis de regresión lineal.
En el siguiente artículo, voy a plantearme cómo completar el expediente académico de bachillerato utilizando la visualización de datos.
댓글을 불러오는 중...