Photo by Jannis Lucas on Unsplash.
Every year, American high school students take SATs, which are standardized tests intended to measure literacy, numeracy, and writing skills. There are three sections - reading, math, and writing, each with a maximum score of 800 points. These tests are extremely important for students and colleges, as they play a pivotal role in the admissions process.
Analyzing the performance of schools is important for a variety of stakeholders, including policy and education professionals, researchers, government, and even parents considering which school their children should attend.
You have been provided with a dataset called schools.csv, which is previewed below.
You have been tasked with answering three key questions about New York City (NYC) public school SAT performance.
# Re-run this cell
import pandas as pd
# Read in the data
schools = pd.read_csv("schools.csv")
# Preview the data
schools.head()
# Start coding here...
# Identify the schools whose results in maths are above 80% of the maximum possible score (80% of 800 points) ordered by results in descending order.
best_math_schools=schools[schools["average_math"]>=(800*0.8)]
best_math_schools=best_math_schools[["school_name", "average_math"]].sort_values("average_math", ascending=False)
print(best_math_schools.head())
#Identify the top 10 performing based on results across the three SAT sections
#calculate the total sat as a sum
schools["total_SAT"]=schools['average_math']+schools['average_reading']+ schools['average_writing']
#select only the useful columns, sort by total SAT descending and select the first 10 lines
top_10_schools=schools[["school_name", "total_SAT"]].sort_values("total_SAT",ascending=False).head(10)
print(top_10_schools)#Locate the NYC borough (neighbourhood) with the largest standard deviation for "total_SAT" storing as a DataFrame called largest_std_dev with "borough" as the index and three columns: "num_schools" for the number of schools in the borough, "average_SAT" for the mean of "total_SAT", and "std_SAT" for the standard deviation of "total_SAT". Round all numeric values to two decimal places.
#group by borough and pass the three required functions (number of schoosl=sum, mean and standard deviation)
grouped_schools=schools.groupby("borough")["total_SAT"].agg(['count','mean', 'std'])
#rename the columns as required by the project and sort by std
largest_std_dev=grouped_schools.rename(columns={'count': 'num_schools', 'mean': 'average_SAT', 'std': 'std_SAT'}).sort_values('std_SAT', ascending=False)
#round all numerical values to two decimal places as requested
largest_std_dev=largest_std_dev.round(2)
#select the first borough by std
largest_std_dev=largest_std_dev.head(1)