import pandas as pd # Libreria para el tratamiento de DataFrames
import matplotlib.pyplot as plt # Libreria gráfica
import seaborn as sns # Libreria gráfica
from sklearn.model_selection import train_test_split # Dividir los datos en entrenamiento y prueba
from sklearn.linear_model import LinearRegression # Modelo de Regresión lineal
# Lectura del dataset
saber_pro = pd.read_csv("/work/base_saberpro.csv")
# Primeras 5 filas del dataset
saber_pro.head()
# ¿Que columnas tienen los datos?
saber_pro.columns
# ¿Que tamaño tienen los datos?
saber_pro.shape
# ¿Hay datos nulos?
saber_pro.info()
# ¿Como se comportan las variables categoricas?
saber_pro.describe(include=["O"])
# Gráficamos la variable depediente que es el puntaje de los estudiantes
plt.figure(figsize=(9,5))
sns.histplot(data = saber_pro, x = "PUNT_GLOBAL", color = "g",
binwidth = 10, binrange = [0, 300], kde = True)
plt.title("Resultados de los estudiantes")
plt.xlabel("Puntaje")
plt.show()
# Resultados y género
plt.figure(figsize=(9,5))
sns.histplot(data = saber_pro, x = "PUNT_GLOBAL", palette = "rocket", hue = "ESTU_GENERO",
binwidth = 10, binrange = [0, 300], kde = True)
plt.title("Resultados de los estudiantes por género")
plt.xlabel("Puntaje")
plt.show()
# Resultados y estrato socioeconómico
plt.figure(figsize=(9,5))
sns.histplot(data = saber_pro, x = "PUNT_GLOBAL", palette = "rocket", hue = "FAMI_ESTRATOVIVIENDA", multiple = "stack",
binwidth = 10, binrange = [0, 300], kde = True)
plt.title("Resultados de los estudiantes y estrato socioeconómico")
plt.xlabel("Puntaje")
plt.show()
# Resultados y institución educativa
plt.figure(figsize=(9,5))
sns.histplot(data = saber_pro, x = "PUNT_GLOBAL", palette = "magma", hue = "INST_ORIGEN", multiple = "stack",
binwidth = 10, binrange = [0, 300], kde = True)
plt.title("Resultados de los estudiantes y institución educativa")
plt.xlabel("Puntaje")
plt.show()
# Resultados y modalidad de estudio
plt.figure(figsize=(9,5))
sns.histplot(data = saber_pro, x = "PUNT_GLOBAL", palette = "magma", hue = "ESTU_METODO_PRGM", multiple = "stack",
binwidth = 10, binrange = [0, 300], kde = True)
plt.title("Resultados de los estudiantes y modalidad de estudio")
plt.xlabel("Puntaje")
plt.show()
# Procedemos a seleccionar nuestras columnas de interes
saber_pro = saber_pro[["ESTU_GENERO", "ESTU_AREARESIDE", "ESTU_VALORMATRICULAUNIVERSIDAD", "ESTU_PAGOMATRICULABECA",
"FAMI_EDUCACIONPADRE", "FAMI_EDUCACIONMADRE", "FAMI_ESTRATOVIVIENDA", "FAMI_TIENEINTERNET",
"FAMI_TIENECOMPUTADOR", "FAMI_TIENELAVADORA", "FAMI_TIENEHORNOMICROOGAS", "FAMI_TIENESERVICIOTV",
"FAMI_TIENEAUTOMOVIL", "FAMI_TIENEMOTOCICLETA", "FAMI_TIENECONSOLAVIDEOJUEGOS",
"ESTU_HORASSEMANATRABAJA", "ESTU_METODO_PRGM", "INST_ORIGEN", "ESTU_ESTADOCIVIL", "ESTU_SIMULACROTIPOICFES", "PUNT_GLOBAL"]]
# Observamos las 5 primeras filas de nuestro dataset
saber_pro.info()
# Creación de nuestra variable independiente
X = saber_pro.drop(["PUNT_GLOBAL"], axis = 1)
# Creación de nuestra variable dependiente
Y = saber_pro["PUNT_GLOBAL"]
# Procedemos a la creación de las variables dummys
X = pd.get_dummies(data = X, drop_first=True)
# Información de la variable X
X.info()
# Dividimos nuestros datos con train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = .20, random_state = 40)
print('Muestras de entrenamiento: ',X_train.shape[0])
# 80% son datos de entramiento y 20% de test
# Regresión lineal
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
# Capacidad predictora
regressor.score(X_test, Y_test)
# Instalamos la libreria
pip install statsmodels
# Importamos el modelo
import statsmodels.api as sm
# Creación del modelo con statsmodels
X_train = sm.add_constant(X_train, prepend=True)
modelo = sm.OLS(endog=Y_train, exog=X_train,)
modelo = modelo.fit()
print(modelo.summary())