{ "cells": [ { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [], "source": [ "# imports\n", "import pandas as pd\n", "import numpy as np\n", "\n", "from great_schools import get_nearby_schools\n", "from distance import get_distance\n", "from secret import get_key\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Shaun and Daniela's Boston Public School Analysis\n", "#### 2021.04.10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fetch the API key from the local filesystem." ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "# get the API key\n", "api_key_file = '../keys/api.key'\n", "api_key = get_key(api_key_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the `nearby_schools` API endpoint to grab raw data of all schools within the maximum radius" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "# Some columns will dropped immediately as pre-processing.\n", "drops = [\n", " 'nces-id',\n", " 'school-summary',\n", " 'street',\n", " 'fipscounty',\n", " 'phone',\n", " 'fax',\n", " 'web-site',\n", " 'overview-url',\n", " 'rating-description',\n", " 'distance',\n", "]\n", "\n", "# Grab data for Boston.\n", "refresh = False\n", "boston_nearby_schools_file = '../data/nearby_schools/boston.csv'\n", "if refresh:\n", " boston_schools = get_nearby_schools(api_key,\"42.3\",\"-71.2\",\"50\")\n", " boston_df = pd.DataFrame.from_dict(boston_schools)\n", " boston_df.drop(columns=drops,inplace=True)\n", " boston_df.to_csv(boston_nearby_schools_file, )\n", "else:\n", " boston_df = pd.read_csv(boston_nearby_schools_file)\n", " boston_df.set_index(keys=[\"universal-id\"], drop=True, inplace=True)\n", " boston_df.drop(columns=[\"Unnamed: 0\"], inplace=True)\n", "\n", "# Grab data for Buffalo.\n", "refresh = False\n", "buffalo_nearby_schools_file = '../data/nearby_schools/buffalo.csv'\n", "if refresh:\n", " buffalo_schools = get_nearby_schools(api_key,\"42.9625\",\"-78.7425\",\"50\")\n", " buffalo_df = pd.DataFrame.from_dict(buffalo_schools)\n", " buffalo_df.drop(columns=drops,inplace=True)\n", " buffalo_df.to_csv(buffalo_nearby_schools_file)\n", "else:\n", " buffalo_df = pd.read_csv(buffalo_nearby_schools_file)\n", " buffalo_df.set_index(keys=[\"universal-id\"], drop=True, inplace=True)\n", " buffalo_df.drop(columns=[\"Unnamed: 0\"], inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Process the `lat` and `lon` columns from the API output into tuples.\n", "\n", "Then create two new columns:\n", "- Distance to Downtown\n", "- Distance to Work" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "# Form tuple to represent coordinates\n", "boston_df['coordinates'] = list(zip(boston_df.lat,boston_df.lon))\n", "#boston_df.drop(columns=['lat', 'lon'], inplace=True)\n", "\n", "# Define coordinates of important places\n", "downtown=(42.3674836866797, -71.07134540735377) # Science Museum\n", "work=(42.47381059540949, -71.25414135292398) # Hartwell\n", "\n", "# Create new columns to tabulate distance to these important places\n", "boston_df['distance-to-downtown'] = boston_df['coordinates'].apply(func=get_distance,p2=downtown)\n", "boston_df['distance-to-work'] = boston_df['coordinates'].apply(func=get_distance,p2=work)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For Boston, drop all schools that aren't in Massachusetts." ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | state-id | \n", "name | \n", "type | \n", "level-codes | \n", "level | \n", "city | \n", "state | \n", "zip | \n", "county | \n", "lat | \n", "lon | \n", "district-name | \n", "district-id | \n", "rating | \n", "year | \n", "coordinates | \n", "distance-to-downtown | \n", "distance-to-work | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| universal-id | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
| 2501042 | \n", "7050505 | \n", "Masconomet Regional High School | \n", "public | \n", "h | \n", "9,10,11,12 | \n", "Boxford | \n", "MA | \n", "1921 | \n", "Essex County | \n", "42.627754 | \n", "-70.974693 | \n", "Masconomet School District | \n", "259 | \n", "8.0 | \n", "2021.0 | \n", "(42.627754, -70.974693) | \n", "30.005931 | \n", "28.583420 | \n", "
| 2500337 | \n", "350380 | \n", "Young Achievers Science and Math School | \n", "public | \n", "p,e,m | \n", "PK,KG,1,2,3,4,5,6,7,8 | \n", "Mattapan | \n", "MA | \n", "2126 | \n", "Suffolk County | \n", "42.282269 | \n", "-71.095016 | \n", "Boston School District | \n", "99 | \n", "2.0 | \n", "2021.0 | \n", "(42.282269, -71.095016) | \n", "9.673200 | \n", "24.989359 | \n", "
| 2500402 | \n", "440017 | \n", "Kennedy K-5 Elementary School | \n", "public | \n", "e | \n", "KG,1,2,3,4,5 | \n", "Brockton | \n", "MA | \n", "2301 | \n", "Plymouth County | \n", "42.059696 | \n", "-71.037262 | \n", "Brockton School District | \n", "111 | \n", "4.0 | \n", "2021.0 | \n", "(42.059696, -71.037262) | \n", "34.339345 | \n", "49.384728 | \n", "
| 2501682 | \n", "3070010 | \n", "Boyden | \n", "public | \n", "e | \n", "KG,1,2,3,4,5 | \n", "Walpole | \n", "MA | \n", "2071 | \n", "Norfolk County | \n", "42.105808 | \n", "-71.258743 | \n", "Walpole School District | \n", "426 | \n", "6.0 | \n", "2021.0 | \n", "(42.105808, -71.258743) | \n", "32.933990 | \n", "40.921772 | \n", "
| 2501507 | \n", "2760305 | \n", "P. Brent Trottier Middle School | \n", "public | \n", "m | \n", "6,7,8 | \n", "Southborough | \n", "MA | \n", "1772 | \n", "Worcester County | \n", "42.299240 | \n", "-71.542259 | \n", "Southborough School District | \n", "387 | \n", "8.0 | \n", "2021.0 | \n", "(42.29924, -71.542259) | \n", "39.445654 | \n", "30.606258 | \n", "