Skip to content

EJERCICIO DESAROLLADO POR JARINSON CASTRO DATA ANALYST

Cada año, los estudiantes de secundaria estadounidenses presentan los SAT, que son exámenes estandarizados diseñados para medir habilidades de alfabetización, cálculo y escritura. Hay tres secciones: lectura, matemáticas y redacción, cada una con una puntuación máxima de 800 puntos. Estos exámenes son extremadamente importantes para los estudiantes y las universidades, ya que juegan un papel fundamental en el proceso de admisión.

Analizar el rendimiento de las escuelas es importante para una variedad de partes interesadas, incluyendo profesionales de la política y la educación, investigadores, el gobierno e incluso padres que están considerando a qué escuela deberían asistir sus hijos.

Se te ha proporcionado un conjunto de datos llamado schools.csv, cuya vista previa se muestra a continuación.

Se te ha asignado la tarea de responder tres preguntas clave sobre el rendimiento en el SAT de las escuelas públicas de la ciudad de Nueva York (NYC).

# Importamos pandas
import pandas as pd

# Leemos el csv
schools = pd.read_csv("schools.csv")
pd.DataFrame(schools)

# Revisamos las primeras filas del DF.
schools.head()

1. ¿QUÉ ESCUELAS DE NYC TIENEN LOS MEJORES RESULTADOS EN MATEMÁTICA?

  • Se consideran "buenos resultados" si alcanzan como mínimo 80% del máximo puntaje de 800 puntos en matemáticas.
#Primero me gustaría ver la lista completa y ordenada de mayor a menor de los puntajes
#para corroborar si el resultado final hace sentido.

schools[["average_math"]].sort_values("average_math",ascending=False).head()
#Luego de validar, procedo con el código.
math_scores = schools[schools["average_math"]>=800*0.8]
best_math_schools = math_scores[["school_name","average_math"]].sort_values("average_math",ascending=False)

print(best_math_schools)

2. ¿CUÁLES SON LAS 10 ESCUELAS CON LOS MEJORES PUNTAJES SAT COMBINADOS?

  • ¿Cómo se calcula el "total_sat"? Es la suma de los puntajes de math, reading y writing
#Vamos a agregar la nueva columna.

schools["total_SAT"] = schools["average_math"] + schools["average_reading"] + schools["average_writing"]
schools_srt = schools[["school_name","total_SAT"]].sort_values("total_SAT",ascending=False)
top_10_schools = schools_srt.iloc[:10]

print(top_10_schools)

3. ¿QUÉ DISTRITO TIENE LA MAYOR DESVIACIÓN ESTÁNDAR EN EL PUNTAJE COMBINADO DEL SAT? Requerimientos:

The DataFrame should contain one row, with: "borough" - the name of the NYC borough with the largest standard deviation of "total_SAT". "num_schools" - the number of schools in the borough. "average_SAT" - the mean of "total_SAT". "std_SAT" - the standard deviation of "total_SAT".

#1) Mi primera pregunta es si los colegios no se repiten:
#Usaré un primer método sencillo:
conteo = schools.value_counts("school_name") #==> 375 filas.

#Usaré un segundo método, para validar a detalle:
schools.pivot_table(values="total_SAT",index=["borough","school_name"]) #Veo que tenemos 375 filas.

#Ya con el double-check, voy a usar drop_duplicates para ver si el número de filas baja.
schools.drop_duplicates(subset="school_name") #Seguimos con 375 filas. No hay duplicados.
# Armamos el DF que nos pide el ejercicio, lo trabajo con un group by para usar aggregate functions.
schools_group = schools.groupby("borough")["total_SAT"].agg(["count","mean","std"])

#Llevo a 2 decimales.
schools_round = schools_group[["count","mean","std"]].round(2)

#Tengo que cambiar los nombres según el requerimiento.
schools_rename = schools_round.rename(columns={"count":"num_schools","mean":"average_SAT","std":"std_SAT"})

#Por último, lo ordeno y segmento para quedarme con el top 1:
largest_std = schools_rename.sort_values("std_SAT",ascending=False)
largest_std_dev = largest_std_dev.iloc[:1]

print(largest_std_dev)