Archived
1
0

Working on demographics for remaining schools.

This commit is contained in:
Shaun Setlock
2022-05-29 22:43:39 -04:00
parent e6a8ad32fe
commit 17309780cf
4 changed files with 271 additions and 580 deletions

View File

@@ -10,7 +10,7 @@
"import pandas as pd\n", "import pandas as pd\n",
"import numpy as np\n", "import numpy as np\n",
"\n", "\n",
"from great_schools import get_nearby_schools\n", "from great_schools import get_nearby_schools, get_demographics\n",
"from distance import get_distance\n", "from distance import get_distance\n",
"from secret import get_key\n", "from secret import get_key\n",
"from district_score import get_overall_rating" "from district_score import get_overall_rating"
@@ -302,6 +302,7 @@
" <tr style=\"text-align: right;\">\n", " <tr style=\"text-align: right;\">\n",
" <th></th>\n", " <th></th>\n",
" <th></th>\n", " <th></th>\n",
" <th>universal-id</th>\n",
" <th>state-id</th>\n", " <th>state-id</th>\n",
" <th>type</th>\n", " <th>type</th>\n",
" <th>level-codes</th>\n", " <th>level-codes</th>\n",
@@ -338,452 +339,247 @@
" <th></th>\n", " <th></th>\n",
" <th></th>\n", " <th></th>\n",
" <th></th>\n", " <th></th>\n",
" <th></th>\n",
" </tr>\n", " </tr>\n",
" </thead>\n", " </thead>\n",
" <tbody>\n", " <tbody>\n",
" <tr>\n", " <tr>\n",
" <th rowspan=\"5\" valign=\"top\">Acton-Boxborough School District</th>\n", " <th>Quincy School District</th>\n",
" <th>Acton-Boxborough Regional High School</th>\n", " <th>Central Middle School</th>\n",
" <td>6000505</td>\n", " <td>2501385</td>\n",
" <td>public</td>\n", " <td>2430315</td>\n",
" <td>h</td>\n",
" <td>9,10,11,12,UG</td>\n",
" <td>Acton</td>\n",
" <td>MA</td>\n",
" <td>1720</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.479694</td>\n",
" <td>-71.458084</td>\n",
" <td>59</td>\n",
" <td>9.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.479694, -71.458084)</td>\n",
" <td>21.179084</td>\n",
" <td>10.393596</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Blanchard Memorial School</th>\n",
" <td>6000005</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>KG,1,2,3,4,5,6</td>\n",
" <td>Boxborough</td>\n",
" <td>MA</td>\n",
" <td>1719</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.482014</td>\n",
" <td>-71.505814</td>\n",
" <td>59</td>\n",
" <td>8.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.482014, -71.505814)</td>\n",
" <td>23.513033</td>\n",
" <td>12.828547</td>\n",
" </tr>\n",
" <tr>\n",
" <th>C.T. Douglas Elementary School</th>\n",
" <td>6000020</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>KG,1,2,3,4,5,6</td>\n",
" <td>Acton</td>\n",
" <td>MA</td>\n",
" <td>1720</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.481873</td>\n",
" <td>-71.471588</td>\n",
" <td>59</td>\n",
" <td>6.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.481873, -71.471588)</td>\n",
" <td>21.874635</td>\n",
" <td>11.087128</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Luther Conant School</th>\n",
" <td>6000030</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>KG,1,2,3,4,5,6</td>\n",
" <td>Acton</td>\n",
" <td>MA</td>\n",
" <td>1720</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.475239</td>\n",
" <td>-71.436340</td>\n",
" <td>59</td>\n",
" <td>8.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.475239, -71.43634)</td>\n",
" <td>20.036107</td>\n",
" <td>9.279210</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Mccarthy-Towne School</th>\n",
" <td>6000015</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>KG,1,2,3,4,5,6</td>\n",
" <td>Acton</td>\n",
" <td>MA</td>\n",
" <td>1720</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.476936</td>\n",
" <td>-71.453590</td>\n",
" <td>59</td>\n",
" <td>5.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.476936, -71.45359)</td>\n",
" <td>20.896860</td>\n",
" <td>10.159317</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"5\" valign=\"top\">Winchester School District</th>\n",
" <th>Lynch Elementary School</th>\n",
" <td>3440020</td>\n",
" <td>public</td>\n",
" <td>p,e</td>\n",
" <td>PK,KG,1,2,3,4,5</td>\n",
" <td>Winchester</td>\n",
" <td>MA</td>\n",
" <td>1890</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.460964</td>\n",
" <td>-71.150330</td>\n",
" <td>464</td>\n",
" <td>7.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.460964, -71.15033)</td>\n",
" <td>7.607210</td>\n",
" <td>5.361206</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Mccall Middle School</th>\n",
" <td>3440305</td>\n",
" <td>public</td>\n", " <td>public</td>\n",
" <td>m</td>\n", " <td>m</td>\n",
" <td>6,7,8</td>\n", " <td>6,7,8</td>\n",
" <td>Winchester</td>\n", " <td>Quincy</td>\n",
" <td>MA</td>\n", " <td>MA</td>\n",
" <td>1890</td>\n", " <td>2170</td>\n",
" <td>Middlesex County</td>\n", " <td>Norfolk County</td>\n",
" <td>42.449566</td>\n", " <td>42.261284</td>\n",
" <td>-71.134735</td>\n", " <td>-71.011436</td>\n",
" <td>464</td>\n", " <td>349</td>\n",
" <td>7.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.449566, -71.134735)</td>\n",
" <td>6.523996</td>\n",
" <td>6.308317</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Muraco Elementary School</th>\n",
" <td>3440040</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>KG,1,2,3,4,5</td>\n",
" <td>Winchester</td>\n",
" <td>MA</td>\n",
" <td>1890</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.463272</td>\n",
" <td>-71.131409</td>\n",
" <td>464</td>\n",
" <td>9.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.463272, -71.131409)</td>\n",
" <td>7.288029</td>\n",
" <td>6.293099</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Vinson-Owen Elementary School</th>\n",
" <td>3440025</td>\n",
" <td>public</td>\n",
" <td>p,e</td>\n",
" <td>PK,KG,1,2,3,4,5</td>\n",
" <td>Winchester</td>\n",
" <td>MA</td>\n",
" <td>1890</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.449741</td>\n",
" <td>-71.175018</td>\n",
" <td>464</td>\n",
" <td>9.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.449741, -71.175018)</td>\n",
" <td>7.758212</td>\n",
" <td>4.359471</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Winchester High School</th>\n",
" <td>3440505</td>\n",
" <td>public</td>\n",
" <td>h</td>\n",
" <td>9,10,11,12</td>\n",
" <td>Winchester</td>\n",
" <td>MA</td>\n",
" <td>1890</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.455719</td>\n",
" <td>-71.134201</td>\n",
" <td>464</td>\n",
" <td>8.0</td>\n", " <td>8.0</td>\n",
" <td>2021.0</td>\n", " <td>2021.0</td>\n",
" <td>(42.455719, -71.134201)</td>\n", " <td>(42.261284, -71.011436)</td>\n",
" <td>6.883474</td>\n", " <td>7.944981</td>\n",
" <td>6.235460</td>\n", " <td>19.199411</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Natick School District</th>\n",
" <th>Brown</th>\n",
" <td>2501156</td>\n",
" <td>1980010</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>KG,1,2,3,4</td>\n",
" <td>Natick</td>\n",
" <td>MA</td>\n",
" <td>1760</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.292339</td>\n",
" <td>-71.384941</td>\n",
" <td>294</td>\n",
" <td>7.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.292339, -71.384941)</td>\n",
" <td>16.826936</td>\n",
" <td>14.194884</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Wakefield School District</th>\n",
" <th>Dolbeare Elementary School</th>\n",
" <td>2501667</td>\n",
" <td>3050005</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>KG,1,2,3,4</td>\n",
" <td>Wakefield</td>\n",
" <td>MA</td>\n",
" <td>1880</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.518574</td>\n",
" <td>-71.065102</td>\n",
" <td>424</td>\n",
" <td>8.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.518574, -71.065102)</td>\n",
" <td>10.436914</td>\n",
" <td>10.107841</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Southborough School District</th>\n",
" <th>Albert S. Woodward Memorial School</th>\n",
" <td>2503218</td>\n",
" <td>2760050</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>2,3</td>\n",
" <td>Southborough</td>\n",
" <td>MA</td>\n",
" <td>1772</td>\n",
" <td>Worcester County</td>\n",
" <td>42.304043</td>\n",
" <td>-71.527367</td>\n",
" <td>387</td>\n",
" <td>NaN</td>\n",
" <td>2020.0</td>\n",
" <td>(42.304043, -71.527367)</td>\n",
" <td>23.683438</td>\n",
" <td>18.208098</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Wilmington School District</th>\n",
" <th>Wildwood</th>\n",
" <td>2501816</td>\n",
" <td>3420015</td>\n",
" <td>public</td>\n",
" <td>p,e</td>\n",
" <td>PK,KG</td>\n",
" <td>Wilmington</td>\n",
" <td>MA</td>\n",
" <td>1887</td>\n",
" <td>Middlesex County</td>\n",
" <td>42.550678</td>\n",
" <td>-71.153496</td>\n",
" <td>462</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>(42.550678, -71.153496)</td>\n",
" <td>13.322938</td>\n",
" <td>7.376087</td>\n",
" </tr>\n", " </tr>\n",
" </tbody>\n", " </tbody>\n",
"</table>\n", "</table>\n",
"<p>325 rows × 16 columns</p>\n",
"</div>" "</div>"
], ],
"text/plain": [ "text/plain": [
" state-id \\\n", " universal-id \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 6000505 \n", "Quincy School District Central Middle School 2501385 \n",
" Blanchard Memorial School 6000005 \n", "Natick School District Brown 2501156 \n",
" C.T. Douglas Elementary School 6000020 \n", "Wakefield School District Dolbeare Elementary School 2501667 \n",
" Luther Conant School 6000030 \n", "Southborough School District Albert S. Woodward Memorial School 2503218 \n",
" Mccarthy-Towne School 6000015 \n", "Wilmington School District Wildwood 2501816 \n",
"... ... \n",
"Winchester School District Lynch Elementary School 3440020 \n",
" Mccall Middle School 3440305 \n",
" Muraco Elementary School 3440040 \n",
" Vinson-Owen Elementary School 3440025 \n",
" Winchester High School 3440505 \n",
"\n", "\n",
" type \\\n", " state-id \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School public \n", "Quincy School District Central Middle School 2430315 \n",
" Blanchard Memorial School public \n", "Natick School District Brown 1980010 \n",
" C.T. Douglas Elementary School public \n", "Wakefield School District Dolbeare Elementary School 3050005 \n",
" Luther Conant School public \n", "Southborough School District Albert S. Woodward Memorial School 2760050 \n",
" Mccarthy-Towne School public \n", "Wilmington School District Wildwood 3420015 \n",
"... ... \n",
"Winchester School District Lynch Elementary School public \n",
" Mccall Middle School public \n",
" Muraco Elementary School public \n",
" Vinson-Owen Elementary School public \n",
" Winchester High School public \n",
"\n", "\n",
" level-codes \\\n", " type \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School h \n", "Quincy School District Central Middle School public \n",
" Blanchard Memorial School e \n", "Natick School District Brown public \n",
" C.T. Douglas Elementary School e \n", "Wakefield School District Dolbeare Elementary School public \n",
" Luther Conant School e \n", "Southborough School District Albert S. Woodward Memorial School public \n",
" Mccarthy-Towne School e \n", "Wilmington School District Wildwood public \n",
"... ... \n",
"Winchester School District Lynch Elementary School p,e \n",
" Mccall Middle School m \n",
" Muraco Elementary School e \n",
" Vinson-Owen Elementary School p,e \n",
" Winchester High School h \n",
"\n", "\n",
" level \\\n", " level-codes \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 9,10,11,12,UG \n", "Quincy School District Central Middle School m \n",
" Blanchard Memorial School KG,1,2,3,4,5,6 \n", "Natick School District Brown e \n",
" C.T. Douglas Elementary School KG,1,2,3,4,5,6 \n", "Wakefield School District Dolbeare Elementary School e \n",
" Luther Conant School KG,1,2,3,4,5,6 \n", "Southborough School District Albert S. Woodward Memorial School e \n",
" Mccarthy-Towne School KG,1,2,3,4,5,6 \n", "Wilmington School District Wildwood p,e \n",
"... ... \n",
"Winchester School District Lynch Elementary School PK,KG,1,2,3,4,5 \n",
" Mccall Middle School 6,7,8 \n",
" Muraco Elementary School KG,1,2,3,4,5 \n",
" Vinson-Owen Elementary School PK,KG,1,2,3,4,5 \n",
" Winchester High School 9,10,11,12 \n",
"\n", "\n",
" city \\\n", " level \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School Acton \n", "Quincy School District Central Middle School 6,7,8 \n",
" Blanchard Memorial School Boxborough \n", "Natick School District Brown KG,1,2,3,4 \n",
" C.T. Douglas Elementary School Acton \n", "Wakefield School District Dolbeare Elementary School KG,1,2,3,4 \n",
" Luther Conant School Acton \n", "Southborough School District Albert S. Woodward Memorial School 2,3 \n",
" Mccarthy-Towne School Acton \n", "Wilmington School District Wildwood PK,KG \n",
"... ... \n",
"Winchester School District Lynch Elementary School Winchester \n",
" Mccall Middle School Winchester \n",
" Muraco Elementary School Winchester \n",
" Vinson-Owen Elementary School Winchester \n",
" Winchester High School Winchester \n",
"\n", "\n",
" state \\\n", " city \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School MA \n", "Quincy School District Central Middle School Quincy \n",
" Blanchard Memorial School MA \n", "Natick School District Brown Natick \n",
" C.T. Douglas Elementary School MA \n", "Wakefield School District Dolbeare Elementary School Wakefield \n",
" Luther Conant School MA \n", "Southborough School District Albert S. Woodward Memorial School Southborough \n",
" Mccarthy-Towne School MA \n", "Wilmington School District Wildwood Wilmington \n",
"... ... \n",
"Winchester School District Lynch Elementary School MA \n",
" Mccall Middle School MA \n",
" Muraco Elementary School MA \n",
" Vinson-Owen Elementary School MA \n",
" Winchester High School MA \n",
"\n", "\n",
" zip \\\n", " state zip \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 1720 \n", "Quincy School District Central Middle School MA 2170 \n",
" Blanchard Memorial School 1719 \n", "Natick School District Brown MA 1760 \n",
" C.T. Douglas Elementary School 1720 \n", "Wakefield School District Dolbeare Elementary School MA 1880 \n",
" Luther Conant School 1720 \n", "Southborough School District Albert S. Woodward Memorial School MA 1772 \n",
" Mccarthy-Towne School 1720 \n", "Wilmington School District Wildwood MA 1887 \n",
"... ... \n",
"Winchester School District Lynch Elementary School 1890 \n",
" Mccall Middle School 1890 \n",
" Muraco Elementary School 1890 \n",
" Vinson-Owen Elementary School 1890 \n",
" Winchester High School 1890 \n",
"\n", "\n",
" county \\\n", " county \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School Middlesex County \n", "Quincy School District Central Middle School Norfolk County \n",
" Blanchard Memorial School Middlesex County \n", "Natick School District Brown Middlesex County \n",
" C.T. Douglas Elementary School Middlesex County \n", "Wakefield School District Dolbeare Elementary School Middlesex County \n",
" Luther Conant School Middlesex County \n", "Southborough School District Albert S. Woodward Memorial School Worcester County \n",
" Mccarthy-Towne School Middlesex County \n", "Wilmington School District Wildwood Middlesex County \n",
"... ... \n",
"Winchester School District Lynch Elementary School Middlesex County \n",
" Mccall Middle School Middlesex County \n",
" Muraco Elementary School Middlesex County \n",
" Vinson-Owen Elementary School Middlesex County \n",
" Winchester High School Middlesex County \n",
"\n", "\n",
" lat \\\n", " lat \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 42.479694 \n", "Quincy School District Central Middle School 42.261284 \n",
" Blanchard Memorial School 42.482014 \n", "Natick School District Brown 42.292339 \n",
" C.T. Douglas Elementary School 42.481873 \n", "Wakefield School District Dolbeare Elementary School 42.518574 \n",
" Luther Conant School 42.475239 \n", "Southborough School District Albert S. Woodward Memorial School 42.304043 \n",
" Mccarthy-Towne School 42.476936 \n", "Wilmington School District Wildwood 42.550678 \n",
"... ... \n",
"Winchester School District Lynch Elementary School 42.460964 \n",
" Mccall Middle School 42.449566 \n",
" Muraco Elementary School 42.463272 \n",
" Vinson-Owen Elementary School 42.449741 \n",
" Winchester High School 42.455719 \n",
"\n", "\n",
" lon \\\n", " lon \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School -71.458084 \n", "Quincy School District Central Middle School -71.011436 \n",
" Blanchard Memorial School -71.505814 \n", "Natick School District Brown -71.384941 \n",
" C.T. Douglas Elementary School -71.471588 \n", "Wakefield School District Dolbeare Elementary School -71.065102 \n",
" Luther Conant School -71.436340 \n", "Southborough School District Albert S. Woodward Memorial School -71.527367 \n",
" Mccarthy-Towne School -71.453590 \n", "Wilmington School District Wildwood -71.153496 \n",
"... ... \n",
"Winchester School District Lynch Elementary School -71.150330 \n",
" Mccall Middle School -71.134735 \n",
" Muraco Elementary School -71.131409 \n",
" Vinson-Owen Elementary School -71.175018 \n",
" Winchester High School -71.134201 \n",
"\n", "\n",
" district-id \\\n", " district-id \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 59 \n", "Quincy School District Central Middle School 349 \n",
" Blanchard Memorial School 59 \n", "Natick School District Brown 294 \n",
" C.T. Douglas Elementary School 59 \n", "Wakefield School District Dolbeare Elementary School 424 \n",
" Luther Conant School 59 \n", "Southborough School District Albert S. Woodward Memorial School 387 \n",
" Mccarthy-Towne School 59 \n", "Wilmington School District Wildwood 462 \n",
"... ... \n",
"Winchester School District Lynch Elementary School 464 \n",
" Mccall Middle School 464 \n",
" Muraco Elementary School 464 \n",
" Vinson-Owen Elementary School 464 \n",
" Winchester High School 464 \n",
"\n", "\n",
" rating \\\n", " rating \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 9.0 \n", "Quincy School District Central Middle School 8.0 \n",
" Blanchard Memorial School 8.0 \n", "Natick School District Brown 7.0 \n",
" C.T. Douglas Elementary School 6.0 \n", "Wakefield School District Dolbeare Elementary School 8.0 \n",
" Luther Conant School 8.0 \n", "Southborough School District Albert S. Woodward Memorial School NaN \n",
" Mccarthy-Towne School 5.0 \n", "Wilmington School District Wildwood NaN \n",
"... ... \n",
"Winchester School District Lynch Elementary School 7.0 \n",
" Mccall Middle School 7.0 \n",
" Muraco Elementary School 9.0 \n",
" Vinson-Owen Elementary School 9.0 \n",
" Winchester High School 8.0 \n",
"\n", "\n",
" year \\\n", " year \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 2021.0 \n", "Quincy School District Central Middle School 2021.0 \n",
" Blanchard Memorial School 2021.0 \n", "Natick School District Brown 2021.0 \n",
" C.T. Douglas Elementary School 2021.0 \n", "Wakefield School District Dolbeare Elementary School 2021.0 \n",
" Luther Conant School 2021.0 \n", "Southborough School District Albert S. Woodward Memorial School 2020.0 \n",
" Mccarthy-Towne School 2021.0 \n", "Wilmington School District Wildwood NaN \n",
"... ... \n",
"Winchester School District Lynch Elementary School 2021.0 \n",
" Mccall Middle School 2021.0 \n",
" Muraco Elementary School 2021.0 \n",
" Vinson-Owen Elementary School 2021.0 \n",
" Winchester High School 2021.0 \n",
"\n", "\n",
" coordinates \\\n", " coordinates \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School (42.479694, -71.458084) \n", "Quincy School District Central Middle School (42.261284, -71.011436) \n",
" Blanchard Memorial School (42.482014, -71.505814) \n", "Natick School District Brown (42.292339, -71.384941) \n",
" C.T. Douglas Elementary School (42.481873, -71.471588) \n", "Wakefield School District Dolbeare Elementary School (42.518574, -71.065102) \n",
" Luther Conant School (42.475239, -71.43634) \n", "Southborough School District Albert S. Woodward Memorial School (42.304043, -71.527367) \n",
" Mccarthy-Towne School (42.476936, -71.45359) \n", "Wilmington School District Wildwood (42.550678, -71.153496) \n",
"... ... \n",
"Winchester School District Lynch Elementary School (42.460964, -71.15033) \n",
" Mccall Middle School (42.449566, -71.134735) \n",
" Muraco Elementary School (42.463272, -71.131409) \n",
" Vinson-Owen Elementary School (42.449741, -71.175018) \n",
" Winchester High School (42.455719, -71.134201) \n",
"\n", "\n",
" distance-to-downtown \\\n", " distance-to-downtown \\\n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 21.179084 \n", "Quincy School District Central Middle School 7.944981 \n",
" Blanchard Memorial School 23.513033 \n", "Natick School District Brown 16.826936 \n",
" C.T. Douglas Elementary School 21.874635 \n", "Wakefield School District Dolbeare Elementary School 10.436914 \n",
" Luther Conant School 20.036107 \n", "Southborough School District Albert S. Woodward Memorial School 23.683438 \n",
" Mccarthy-Towne School 20.896860 \n", "Wilmington School District Wildwood 13.322938 \n",
"... ... \n",
"Winchester School District Lynch Elementary School 7.607210 \n",
" Mccall Middle School 6.523996 \n",
" Muraco Elementary School 7.288029 \n",
" Vinson-Owen Elementary School 7.758212 \n",
" Winchester High School 6.883474 \n",
"\n", "\n",
" distance-to-work \n", " distance-to-work \n",
"district-name name \n", "district-name name \n",
"Acton-Boxborough School District Acton-Boxborough Regional High School 10.393596 \n", "Quincy School District Central Middle School 19.199411 \n",
" Blanchard Memorial School 12.828547 \n", "Natick School District Brown 14.194884 \n",
" C.T. Douglas Elementary School 11.087128 \n", "Wakefield School District Dolbeare Elementary School 10.107841 \n",
" Luther Conant School 9.279210 \n", "Southborough School District Albert S. Woodward Memorial School 18.208098 \n",
" Mccarthy-Towne School 10.159317 \n", "Wilmington School District Wildwood 7.376087 "
"... ... \n",
"Winchester School District Lynch Elementary School 5.361206 \n",
" Mccall Middle School 6.308317 \n",
" Muraco Elementary School 6.293099 \n",
" Vinson-Owen Elementary School 4.359471 \n",
" Winchester High School 6.235460 \n",
"\n",
"[325 rows x 16 columns]"
] ]
}, },
"execution_count": 9, "execution_count": 9,
@@ -792,198 +588,70 @@
} }
], ],
"source": [ "source": [
"boston_df.reset_index(inplace=True)\n",
"boston_df.set_index(['district-name','name'],inplace=True)\n", "boston_df.set_index(['district-name','name'],inplace=True)\n",
"boston_df.sort_index(inplace=True)\n", "boston_df.sort_index(inplace=True)\n",
"boston_df" "boston_df.sample(5)"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 10, "execution_count": 10,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"name": "stdout",
"output_type": "stream",
"text": [
"['h' 'e' 'm' 'e,m' 'p,h' 'p,e' 'p,e,m' 'p,e,h' 'm,h']\n"
]
}
],
"source": [ "source": [
"print(boston_df['level-codes'].unique()) " "#print(boston_df['level-codes'].unique()) "
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 11, "execution_count": 11,
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [],
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>state-id</th>\n",
" <th>type</th>\n",
" <th>level-codes</th>\n",
" <th>level</th>\n",
" <th>city</th>\n",
" <th>state</th>\n",
" <th>zip</th>\n",
" <th>county</th>\n",
" <th>lat</th>\n",
" <th>lon</th>\n",
" <th>district-id</th>\n",
" <th>rating</th>\n",
" <th>year</th>\n",
" <th>coordinates</th>\n",
" <th>distance-to-downtown</th>\n",
" <th>distance-to-work</th>\n",
" </tr>\n",
" <tr>\n",
" <th>name</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Harry Lee Cole</th>\n",
" <td>380005</td>\n",
" <td>public</td>\n",
" <td>p,e</td>\n",
" <td>PK,KG,1,2</td>\n",
" <td>Boxford</td>\n",
" <td>MA</td>\n",
" <td>1921</td>\n",
" <td>Essex County</td>\n",
" <td>42.660408</td>\n",
" <td>-71.001770</td>\n",
" <td>102</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>(42.660408, -71.00177)</td>\n",
" <td>20.532659</td>\n",
" <td>18.184645</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Spofford Pond</th>\n",
" <td>380013</td>\n",
" <td>public</td>\n",
" <td>e</td>\n",
" <td>3,4,5,6</td>\n",
" <td>Boxford</td>\n",
" <td>MA</td>\n",
" <td>1921</td>\n",
" <td>Essex County</td>\n",
" <td>42.697018</td>\n",
" <td>-71.017365</td>\n",
" <td>102</td>\n",
" <td>7.0</td>\n",
" <td>2021.0</td>\n",
" <td>(42.697018, -71.017365)</td>\n",
" <td>22.917933</td>\n",
" <td>19.554889</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" state-id type level-codes level city state zip \\\n",
"name \n",
"Harry Lee Cole 380005 public p,e PK,KG,1,2 Boxford MA 1921 \n",
"Spofford Pond 380013 public e 3,4,5,6 Boxford MA 1921 \n",
"\n",
" county lat lon district-id rating \\\n",
"name \n",
"Harry Lee Cole Essex County 42.660408 -71.001770 102 NaN \n",
"Spofford Pond Essex County 42.697018 -71.017365 102 7.0 \n",
"\n",
" year coordinates distance-to-downtown \\\n",
"name \n",
"Harry Lee Cole NaN (42.660408, -71.00177) 20.532659 \n",
"Spofford Pond 2021.0 (42.697018, -71.017365) 22.917933 \n",
"\n",
" distance-to-work \n",
"name \n",
"Harry Lee Cole 18.184645 \n",
"Spofford Pond 19.554889 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [ "source": [
"boston_df.loc[\"Boxford School District\"]" "#boston_df.loc[\"Quincy School District\"]"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 12, "execution_count": 12,
"metadata": {}, "metadata": {},
"outputs": [],
"source": [
"from district_score import get_overall_rating\n",
"\n",
"overall_df = get_overall_rating(boston_df)\n",
"overall_df = overall_df.set_index(keys='district-name', drop=True)\n",
"overall_df.sort_values(by='weighted_ave', ascending=False, inplace=True)\n",
"overall_df.reset_index(inplace=True)\n",
"overall_df.index += 1\n",
"#print(overall_df.to_markdown())"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [ "outputs": [
{ {
"ename": "ValueError", "name": "stdout",
"evalue": "If using all scalar values, you must pass an index", "output_type": "stream",
"output_type": "error", "text": [
"traceback": [ "{'message': 'Too Many Requests'}\n"
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m/home/shaun/Code/git/schools/main/analysis.ipynb Cell 20'\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> <a href='vscode-notebook-cell:/home/shaun/Code/git/schools/main/analysis.ipynb#ch0000020?line=0'>1</a>\u001b[0m get_overall_rating(boston_df)\n",
"File \u001b[0;32m~/Code/git/schools/main/district_score.py:56\u001b[0m, in \u001b[0;36mget_overall_rating\u001b[0;34m(df)\u001b[0m\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/main/district_score.py?line=53'>54</a>\u001b[0m district_dict \u001b[39m=\u001b[39m {\u001b[39m'\u001b[39m\u001b[39mdistrict-name\u001b[39m\u001b[39m'\u001b[39m: district}\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/main/district_score.py?line=54'>55</a>\u001b[0m district_dict \u001b[39m=\u001b[39m {\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mdistrict_dict, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mstats}\n\u001b[0;32m---> <a href='file:///home/shaun/Code/git/schools/main/district_score.py?line=55'>56</a>\u001b[0m overall \u001b[39m=\u001b[39m pd\u001b[39m.\u001b[39;49mDataFrame(district_dict)\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/main/district_score.py?line=56'>57</a>\u001b[0m \u001b[39mprint\u001b[39m(overall)\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/main/district_score.py?line=57'>58</a>\u001b[0m \u001b[39mreturn\u001b[39;00m\n",
"File \u001b[0;32m~/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py:636\u001b[0m, in \u001b[0;36mDataFrame.__init__\u001b[0;34m(self, data, index, columns, dtype, copy)\u001b[0m\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py?line=629'>630</a>\u001b[0m mgr \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_init_mgr(\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py?line=630'>631</a>\u001b[0m data, axes\u001b[39m=\u001b[39m{\u001b[39m\"\u001b[39m\u001b[39mindex\u001b[39m\u001b[39m\"\u001b[39m: index, \u001b[39m\"\u001b[39m\u001b[39mcolumns\u001b[39m\u001b[39m\"\u001b[39m: columns}, dtype\u001b[39m=\u001b[39mdtype, copy\u001b[39m=\u001b[39mcopy\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py?line=631'>632</a>\u001b[0m )\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py?line=633'>634</a>\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(data, \u001b[39mdict\u001b[39m):\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py?line=634'>635</a>\u001b[0m \u001b[39m# GH#38939 de facto copy defaults to False only in non-dict cases\u001b[39;00m\n\u001b[0;32m--> <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py?line=635'>636</a>\u001b[0m mgr \u001b[39m=\u001b[39m dict_to_mgr(data, index, columns, dtype\u001b[39m=\u001b[39;49mdtype, copy\u001b[39m=\u001b[39;49mcopy, typ\u001b[39m=\u001b[39;49mmanager)\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py?line=636'>637</a>\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(data, ma\u001b[39m.\u001b[39mMaskedArray):\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/frame.py?line=637'>638</a>\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mnumpy\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mma\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mmrecords\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mmrecords\u001b[39;00m\n",
"File \u001b[0;32m~/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py:502\u001b[0m, in \u001b[0;36mdict_to_mgr\u001b[0;34m(data, index, columns, dtype, typ, copy)\u001b[0m\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=493'>494</a>\u001b[0m arrays \u001b[39m=\u001b[39m [\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=494'>495</a>\u001b[0m x\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=495'>496</a>\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mhasattr\u001b[39m(x, \u001b[39m\"\u001b[39m\u001b[39mdtype\u001b[39m\u001b[39m\"\u001b[39m) \u001b[39mor\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39misinstance\u001b[39m(x\u001b[39m.\u001b[39mdtype, ExtensionDtype)\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=496'>497</a>\u001b[0m \u001b[39melse\u001b[39;00m x\u001b[39m.\u001b[39mcopy()\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=497'>498</a>\u001b[0m \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m arrays\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=498'>499</a>\u001b[0m ]\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=499'>500</a>\u001b[0m \u001b[39m# TODO: can we get rid of the dt64tz special case above?\u001b[39;00m\n\u001b[0;32m--> <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=501'>502</a>\u001b[0m \u001b[39mreturn\u001b[39;00m arrays_to_mgr(arrays, columns, index, dtype\u001b[39m=\u001b[39;49mdtype, typ\u001b[39m=\u001b[39;49mtyp, consolidate\u001b[39m=\u001b[39;49mcopy)\n",
"File \u001b[0;32m~/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py:120\u001b[0m, in \u001b[0;36marrays_to_mgr\u001b[0;34m(arrays, columns, index, dtype, verify_integrity, typ, consolidate)\u001b[0m\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=116'>117</a>\u001b[0m \u001b[39mif\u001b[39;00m verify_integrity:\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=117'>118</a>\u001b[0m \u001b[39m# figure out the index, if necessary\u001b[39;00m\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=118'>119</a>\u001b[0m \u001b[39mif\u001b[39;00m index \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m--> <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=119'>120</a>\u001b[0m index \u001b[39m=\u001b[39m _extract_index(arrays)\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=120'>121</a>\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=121'>122</a>\u001b[0m index \u001b[39m=\u001b[39m ensure_index(index)\n",
"File \u001b[0;32m~/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py:664\u001b[0m, in \u001b[0;36m_extract_index\u001b[0;34m(data)\u001b[0m\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=660'>661</a>\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mPer-column arrays must each be 1-dimensional\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=662'>663</a>\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m indexes \u001b[39mand\u001b[39;00m \u001b[39mnot\u001b[39;00m raw_lengths:\n\u001b[0;32m--> <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=663'>664</a>\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mIf using all scalar values, you must pass an index\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=665'>666</a>\u001b[0m \u001b[39melif\u001b[39;00m have_series:\n\u001b[1;32m <a href='file:///home/shaun/Code/git/schools/venv/lib64/python3.10/site-packages/pandas/core/internals/construction.py?line=666'>667</a>\u001b[0m index \u001b[39m=\u001b[39m union_indexes(indexes)\n",
"\u001b[0;31mValueError\u001b[0m: If using all scalar values, you must pass an index"
] ]
} }
], ],
"source": [ "source": [
"get_overall_rating(boston_df)" "boston_schools = get_demographics(api_key,'2500919')"
] ]
} }
], ],
"metadata": { "metadata": {
"interpreter": { "interpreter": {
"hash": "dae3ff348533214ca96918f3de2a71cf7a825bd7ff89c94afcc9465db0c546d9" "hash": "4fc861b332db140b7b363b167627eee6a3238262e7c99e0237067fec0875fee7"
}, },
"kernelspec": { "kernelspec": {
"display_name": "Python 3.10.4 ('venv': venv)", "display_name": "Python 3.8.10 ('venv': venv)",
"language": "python", "language": "python",
"name": "python3" "name": "python3"
}, },
@@ -997,7 +665,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.10.4" "version": "3.8.10"
}, },
"orig_nbformat": 4 "orig_nbformat": 4
}, },

View File

@@ -24,8 +24,7 @@ def get_overall_rating(df: pd.DataFrame):
'h_ave': 0, 'h_ave': 0,
'weighted_ave': 0 'weighted_ave': 0
} }
overall = pd.DataFrame() overall_df = pd.DataFrame()
districts = list(df.index.unique(level=0)) districts = list(df.index.unique(level=0))
for district in districts: for district in districts:
scores = {} scores = {}
@@ -53,6 +52,6 @@ def get_overall_rating(df: pd.DataFrame):
stats['weighted_ave'] = round(weighted_ave,2) stats['weighted_ave'] = round(weighted_ave,2)
district_dict = {'district-name': district} district_dict = {'district-name': district}
district_dict = {**district_dict, **stats} district_dict = {**district_dict, **stats}
overall = pd.DataFrame(district_dict) district_df = pd.DataFrame.from_dict(district_dict, orient='index')
print(overall) overall_df = pd.concat([overall_df,district_df.T])
return return overall_df

View File

@@ -42,4 +42,27 @@ def get_nearby_schools(key: str, lat: str, lon: str, dist: str):
for school in r['schools']: for school in r['schools']:
schools.append(school) schools.append(school)
count = count + 1 count = count + 1
return schools return schools
# Endpoint: demographics
def get_demographics(key: str, universal_id: str):
'''
Returns a dictionary of schools received from the nearby schools endpoint.
Parameters:
key (str): API key
lat (str): latitude
lon (str): longitude
dist (str): radius of search
Returns:
schools (dict): Collated response from API
'''
url = f'https://gs-api.greatschools.org/schools/' + '{universal_id}' + '/metrics'
params = {
}
headers = {
"x-api-key": key
}
# make request
r = requests.get(url=url, params=params, headers=headers).json()
print(r)

View File

@@ -63,6 +63,7 @@ Send2Trash==1.8.0
six==1.16.0 six==1.16.0
soupsieve==2.3.2 soupsieve==2.3.2
stack-data==0.2.0 stack-data==0.2.0
tabulate==0.8.9
terminado==0.13.3 terminado==0.13.3
testpath==0.6.0 testpath==0.6.0
tornado==6.1 tornado==6.1