Skip to content

Instantly share code, notes, and snippets.

@pybokeh
Last active August 29, 2015 14:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pybokeh/f41f2afce2c008ca498b to your computer and use it in GitHub Desktop.
Save pybokeh/f41f2afce2c008ca498b to your computer and use it in GitHub Desktop.
css
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# <center>Summarizing Ohio Teachers' Salary Using Python and Pandas Library</center>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This IPython notebook demonstrates how to do basic data cleaning and analysis on a csv or Excel file containing salary information of Ohio's teachers. We will be using the Python programming language and Pandas data analysis package to perform the data analysis."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I obtained Ohio teachers' salary information from Ohio's state treasurer's <a href='http://www.tos.ohio.gov/Transparency_Teacher.aspx'>web site</a>.&nbsp;&nbsp;<strong>NOTE:</strong> Teachers' salary information is public information!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='top'></a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sections"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- [Fetching the data](#fetch)\n",
"- [Data clean-up](#clean)\n",
"- [Basic summary counts](#basic_summary)\n",
"- [Filtering data](#sql)\n",
"- [Simple visualization and Top School Districts](#visualization)\n",
"- [Merging data sets together](#merging)\n",
"- [Top 25 Median Salaries by School Discricts](#top25)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='fetch'></a>"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Fetching The Data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can get the data (xlsx file) directly from the Ohio treasurer's web site (*can take a couple minutes*):"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas as pd\n",
"from urllib import request\n",
"f = request.urlopen(\"http://www.tos.ohio.gov/Documents/Transparency/2012-2013%20School%20Year%20Staff%20Information.xlsx\")\n",
"ohio = pd.read_excel(f, \"2012 - 2013 School Year Staff I\")"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"or"
]
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Download the data locally as a CSV file, then read it:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas as pd\n",
"# Let's read the data, but we need to remove commas and dollar signs from the PAY AMOUNT column\n",
"# Otherwise it will be read as a string or text value. We can't do statistics on text or string values!\n",
"# 'ohio' is a data structure created by pandas that is similar to what a table would look like\n",
"ohio = pd.read_csv('/home/pybokeh/Desktop/2012-2013_School_Year_Staff_Information.csv',\n",
" converters={'PAY AMOUNT': lambda x: float(x.replace('$', '').replace(',',''))})"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 51
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Now let's take a peek at our data. But Pandas can be finicky on how it views the dataframe. So let's do some customization per this [FAQ](http://pandas.pydata.org/pandas-docs/stable/faq.html):"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pd.set_option('large_repr','truncate')\n",
"pd.set_option('max_columns',15)\n",
"pd.set_option('max_rows',50)\n",
"ohio"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>LAST NAME</th>\n",
" <th>FIRST NAME</th>\n",
" <th>EDUCATION LEVEL</th>\n",
" <th>JOB DESCRIPTION</th>\n",
" <th>DISTRICT NAME</th>\n",
" <th>COUNTY NAME</th>\n",
" <th>SCHOOL NAME</th>\n",
" <th>CITY NAME</th>\n",
" <th>DAYS WORKED</th>\n",
" <th>HOURS WORKED PER DAY</th>\n",
" <th>PAY AMOUNT</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0 </th>\n",
" <td> ROZELLE</td>\n",
" <td> LINDA</td>\n",
" <td> Non-degree</td>\n",
" <td> Teaching Aide Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 4.00</td>\n",
" <td> 10.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1 </th>\n",
" <td> BROWN</td>\n",
" <td> MICHELL</td>\n",
" <td> Non-degree</td>\n",
" <td> Teaching Aide Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 0.00</td>\n",
" <td> 10.30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2 </th>\n",
" <td> WILDER</td>\n",
" <td> GLORIA</td>\n",
" <td> Non-degree</td>\n",
" <td> Food Service Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 6.25</td>\n",
" <td> 11.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3 </th>\n",
" <td> NAZAROVECH</td>\n",
" <td> MICHELLE</td>\n",
" <td> Bachelors</td>\n",
" <td> Education Administrative Specialist Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 4.00</td>\n",
" <td> 15.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4 </th>\n",
" <td> CADE</td>\n",
" <td> DEREK</td>\n",
" <td> Bachelors</td>\n",
" <td> Tutor/Small Group Instructor Assignment (Serve...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 0.00</td>\n",
" <td> 20.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5 </th>\n",
" <td> DARR</td>\n",
" <td> RACHEL</td>\n",
" <td> Bachelors</td>\n",
" <td> Tutor/Small Group Instructor Assignment (Serve...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 0.00</td>\n",
" <td> 20.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6 </th>\n",
" <td> DRAKEFORD</td>\n",
" <td> LEONDRA</td>\n",
" <td> Bachelors</td>\n",
" <td> Tutor/Small Group Instructor Assignment (Serve...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 0.00</td>\n",
" <td> 20.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7 </th>\n",
" <td> MOORE</td>\n",
" <td> BONITA</td>\n",
" <td> Bachelors</td>\n",
" <td> Tutor/Small Group Instructor Assignment (Serve...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 0.00</td>\n",
" <td> 20.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8 </th>\n",
" <td> EADES</td>\n",
" <td> JOHN</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 8.00</td>\n",
" <td> 22.58</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9 </th>\n",
" <td> EADES</td>\n",
" <td> JOHN</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 0</td>\n",
" <td> 7.00</td>\n",
" <td> 25.80</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td> WHITE</td>\n",
" <td> ZACHARY</td>\n",
" <td> Masters</td>\n",
" <td> Publicity Relations Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 1.00</td>\n",
" <td> 1500.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td> WHITE</td>\n",
" <td> ZACHARY</td>\n",
" <td> Masters</td>\n",
" <td> Other Extra/Intra \u0013 Curricular Activities Assi...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 1.00</td>\n",
" <td> 1500.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td> FANT</td>\n",
" <td> DAVID</td>\n",
" <td> Doctorate</td>\n",
" <td> Advisor Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 185</td>\n",
" <td> 0.00</td>\n",
" <td> 2000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td> HARROLD</td>\n",
" <td> CYNTHIA</td>\n",
" <td> Non-degree</td>\n",
" <td> Advisor Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 1.00</td>\n",
" <td> 2100.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td> HARROLD</td>\n",
" <td> CYNTHIA</td>\n",
" <td> Non-degree</td>\n",
" <td> Advisor Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 2.00</td>\n",
" <td> 3150.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td> WHITE</td>\n",
" <td> ZACHARY</td>\n",
" <td> Masters</td>\n",
" <td> Other Office/Clerical Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 1.00</td>\n",
" <td> 3296.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td> DANIEL-CAIN</td>\n",
" <td> LAJOYCE</td>\n",
" <td> Masters</td>\n",
" <td> Other Professional \u0013 Educational Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 70</td>\n",
" <td> 1.00</td>\n",
" <td> 3500.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td> SMITH</td>\n",
" <td> JENNIFER</td>\n",
" <td> Bachelors</td>\n",
" <td> Treasurer Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 66</td>\n",
" <td> 8.00</td>\n",
" <td> 5608.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td> WHITE</td>\n",
" <td> MICHELLE</td>\n",
" <td> Bachelors</td>\n",
" <td> Other Official/Administrative Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 260</td>\n",
" <td> 3.00</td>\n",
" <td> 8000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td> BROWN</td>\n",
" <td> MICHELL</td>\n",
" <td> Non-degree</td>\n",
" <td> Parent Coordinator Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 5.00</td>\n",
" <td> 10000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td> DANIEL-CAIN</td>\n",
" <td> LAJOYCE</td>\n",
" <td> Masters</td>\n",
" <td> Other Professional \u0013 Educational Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 77</td>\n",
" <td> 7.00</td>\n",
" <td> 11550.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td> SMITH</td>\n",
" <td> TROY</td>\n",
" <td> Masters</td>\n",
" <td> Supplemental Service Teaching Assignment (Serv...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 68</td>\n",
" <td> 8.00</td>\n",
" <td> 15394.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td> DARR</td>\n",
" <td> RACHEL</td>\n",
" <td> Bachelors</td>\n",
" <td> Supplemental Service Teaching Assignment (Serv...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 92</td>\n",
" <td> 8.00</td>\n",
" <td> 17128.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td> WITHEM</td>\n",
" <td> SHAWN</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 183</td>\n",
" <td> 8.00</td>\n",
" <td> 18946.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td> MOORE</td>\n",
" <td> BONITA</td>\n",
" <td> Bachelors</td>\n",
" <td> Tutor/Small Group Instructor Assignment (Serve...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 117</td>\n",
" <td> 8.00</td>\n",
" <td> 19540.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td> HARROLD</td>\n",
" <td> CYNTHIA</td>\n",
" <td> Non-degree</td>\n",
" <td> Other Office/Clerical Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 5.00</td>\n",
" <td> 26250.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td> NORWOOD</td>\n",
" <td> RODNEY</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 159</td>\n",
" <td> 8.00</td>\n",
" <td> 29583.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td> JACKSON</td>\n",
" <td> IRMA</td>\n",
" <td> Non-degree</td>\n",
" <td> Clerical Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 240</td>\n",
" <td> 8.00</td>\n",
" <td> 30900.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td> DRAKEFORD</td>\n",
" <td> LEONDRA</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 185</td>\n",
" <td> 7.00</td>\n",
" <td> 30995.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td> DRAKEFORD</td>\n",
" <td> LEONDRA</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 185</td>\n",
" <td> 8.00</td>\n",
" <td> 31500.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td> NEWMAN</td>\n",
" <td> KRISTINA</td>\n",
" <td> Masters</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 183</td>\n",
" <td> 7.00</td>\n",
" <td> 31577.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td> WHITE</td>\n",
" <td> ZACHARY</td>\n",
" <td> Masters</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 5.00</td>\n",
" <td> 32445.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td> WILSON</td>\n",
" <td> ALEY</td>\n",
" <td> Non-degree</td>\n",
" <td> Clerical Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 221</td>\n",
" <td> 8.00</td>\n",
" <td> 32782.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td> HENSLEY</td>\n",
" <td> LINDA</td>\n",
" <td> Masters</td>\n",
" <td> Supplemental Service Teaching Assignment (Serv...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 159</td>\n",
" <td> 7.00</td>\n",
" <td> 33293.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td> SABURI</td>\n",
" <td> SARAH</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 7.00</td>\n",
" <td> 34421.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td> CONWELL-SAUNDERS</td>\n",
" <td> TABITHA</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 7.00</td>\n",
" <td> 35453.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td> SIMINDINGER</td>\n",
" <td> HOLLY</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 7.00</td>\n",
" <td> 35454.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td> CASERTA</td>\n",
" <td> JOSEPH</td>\n",
" <td> Masters</td>\n",
" <td> Remedial Specialist Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 7.00</td>\n",
" <td> 35454.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td> STURKIE</td>\n",
" <td> KISCA</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 8.00</td>\n",
" <td> 36517.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td> DIXON</td>\n",
" <td> JUANITA</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 8.00</td>\n",
" <td> 36517.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td> MCCONNELL</td>\n",
" <td> JUDITH</td>\n",
" <td> Masters</td>\n",
" <td> Supplemental Service Teaching Assignment (Serv...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 175</td>\n",
" <td> 8.00</td>\n",
" <td> 37272.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td> BELL</td>\n",
" <td> JAMES</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 7.00</td>\n",
" <td> 37613.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td> TRAYLOR</td>\n",
" <td> CHARLES</td>\n",
" <td> Non-degree</td>\n",
" <td> Other Office/Clerical Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 240</td>\n",
" <td> 8.00</td>\n",
" <td> 39000.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td> NAZAROVECH</td>\n",
" <td> MICHELLE</td>\n",
" <td> Bachelors</td>\n",
" <td> Curriculum Specialist Assignment </td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 221</td>\n",
" <td> 8.00</td>\n",
" <td> 39231.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td> HOLDEN</td>\n",
" <td> JULIE</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 8.00</td>\n",
" <td> 39903.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td> Reese</td>\n",
" <td> Devin</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 8.00</td>\n",
" <td> 42333.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td> CADE</td>\n",
" <td> DEREK</td>\n",
" <td> Bachelors</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 8.00</td>\n",
" <td> 42333.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td> MITCHELL</td>\n",
" <td> LUCY</td>\n",
" <td> Masters</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 188</td>\n",
" <td> 8.00</td>\n",
" <td> 42333.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td> BASHORE</td>\n",
" <td> BRIGITTE</td>\n",
" <td> Masters</td>\n",
" <td> Supplemental Service Teaching Assignment (Serv...</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 185</td>\n",
" <td> 8.00</td>\n",
" <td> 42405.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td> WHITE</td>\n",
" <td> MICHELLE</td>\n",
" <td> Bachelors</td>\n",
" <td> Treasurer Assignment</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Franklin</td>\n",
" <td> A+ Arts Academy</td>\n",
" <td> Columbus</td>\n",
" <td> 173</td>\n",
" <td> 8.00</td>\n",
" <td> 44000.00</td>\n",
" </tr>\n",
" <tr>\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",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>338809 rows \u00d7 11 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 2,
"text": [
" LAST NAME FIRST NAME EDUCATION LEVEL \\\n",
"0 ROZELLE LINDA Non-degree \n",
"1 BROWN MICHELL Non-degree \n",
"2 WILDER GLORIA Non-degree \n",
"3 NAZAROVECH MICHELLE Bachelors \n",
"4 CADE DEREK Bachelors \n",
"5 DARR RACHEL Bachelors \n",
"6 DRAKEFORD LEONDRA Bachelors \n",
"7 MOORE BONITA Bachelors \n",
"8 EADES JOHN Bachelors \n",
"9 EADES JOHN Bachelors \n",
"10 WHITE ZACHARY Masters \n",
"11 WHITE ZACHARY Masters \n",
"12 FANT DAVID Doctorate \n",
"13 HARROLD CYNTHIA Non-degree \n",
"14 HARROLD CYNTHIA Non-degree \n",
"15 WHITE ZACHARY Masters \n",
"16 DANIEL-CAIN LAJOYCE Masters \n",
"17 SMITH JENNIFER Bachelors \n",
"18 WHITE MICHELLE Bachelors \n",
"19 BROWN MICHELL Non-degree \n",
"20 DANIEL-CAIN LAJOYCE Masters \n",
"21 SMITH TROY Masters \n",
"22 DARR RACHEL Bachelors \n",
"23 WITHEM SHAWN Bachelors \n",
"24 MOORE BONITA Bachelors \n",
"25 HARROLD CYNTHIA Non-degree \n",
"26 NORWOOD RODNEY Bachelors \n",
"27 JACKSON IRMA Non-degree \n",
"28 DRAKEFORD LEONDRA Bachelors \n",
"29 DRAKEFORD LEONDRA Bachelors \n",
"30 NEWMAN KRISTINA Masters \n",
"31 WHITE ZACHARY Masters \n",
"32 WILSON ALEY Non-degree \n",
"33 HENSLEY LINDA Masters \n",
"34 SABURI SARAH Bachelors \n",
"35 CONWELL-SAUNDERS TABITHA Bachelors \n",
"36 SIMINDINGER HOLLY Bachelors \n",
"37 CASERTA JOSEPH Masters \n",
"38 STURKIE KISCA Bachelors \n",
"39 DIXON JUANITA Bachelors \n",
"40 MCCONNELL JUDITH Masters \n",
"41 BELL JAMES Bachelors \n",
"42 TRAYLOR CHARLES Non-degree \n",
"43 NAZAROVECH MICHELLE Bachelors \n",
"44 HOLDEN JULIE Bachelors \n",
"45 Reese Devin Bachelors \n",
"46 CADE DEREK Bachelors \n",
"47 MITCHELL LUCY Masters \n",
"48 BASHORE BRIGITTE Masters \n",
"49 WHITE MICHELLE Bachelors \n",
" ... ... ... \n",
"\n",
" JOB DESCRIPTION DISTRICT NAME \\\n",
"0 Teaching Aide Assignment A+ Arts Academy \n",
"1 Teaching Aide Assignment A+ Arts Academy \n",
"2 Food Service Assignment A+ Arts Academy \n",
"3 Education Administrative Specialist Assignment A+ Arts Academy \n",
"4 Tutor/Small Group Instructor Assignment (Serve... A+ Arts Academy \n",
"5 Tutor/Small Group Instructor Assignment (Serve... A+ Arts Academy \n",
"6 Tutor/Small Group Instructor Assignment (Serve... A+ Arts Academy \n",
"7 Tutor/Small Group Instructor Assignment (Serve... A+ Arts Academy \n",
"8 Teacher Assignment A+ Arts Academy \n",
"9 Teacher Assignment A+ Arts Academy \n",
"10 Publicity Relations Assignment A+ Arts Academy \n",
"11 Other Extra/Intra \u0013 Curricular Activities Assi... A+ Arts Academy \n",
"12 Advisor Assignment A+ Arts Academy \n",
"13 Advisor Assignment A+ Arts Academy \n",
"14 Advisor Assignment A+ Arts Academy \n",
"15 Other Office/Clerical Assignment A+ Arts Academy \n",
"16 Other Professional \u0013 Educational Assignment A+ Arts Academy \n",
"17 Treasurer Assignment A+ Arts Academy \n",
"18 Other Official/Administrative Assignment A+ Arts Academy \n",
"19 Parent Coordinator Assignment A+ Arts Academy \n",
"20 Other Professional \u0013 Educational Assignment A+ Arts Academy \n",
"21 Supplemental Service Teaching Assignment (Serv... A+ Arts Academy \n",
"22 Supplemental Service Teaching Assignment (Serv... A+ Arts Academy \n",
"23 Teacher Assignment A+ Arts Academy \n",
"24 Tutor/Small Group Instructor Assignment (Serve... A+ Arts Academy \n",
"25 Other Office/Clerical Assignment A+ Arts Academy \n",
"26 Teacher Assignment A+ Arts Academy \n",
"27 Clerical Assignment A+ Arts Academy \n",
"28 Teacher Assignment A+ Arts Academy \n",
"29 Teacher Assignment A+ Arts Academy \n",
"30 Teacher Assignment A+ Arts Academy \n",
"31 Teacher Assignment A+ Arts Academy \n",
"32 Clerical Assignment A+ Arts Academy \n",
"33 Supplemental Service Teaching Assignment (Serv... A+ Arts Academy \n",
"34 Teacher Assignment A+ Arts Academy \n",
"35 Teacher Assignment A+ Arts Academy \n",
"36 Teacher Assignment A+ Arts Academy \n",
"37 Remedial Specialist Assignment A+ Arts Academy \n",
"38 Teacher Assignment A+ Arts Academy \n",
"39 Teacher Assignment A+ Arts Academy \n",
"40 Supplemental Service Teaching Assignment (Serv... A+ Arts Academy \n",
"41 Teacher Assignment A+ Arts Academy \n",
"42 Other Office/Clerical Assignment A+ Arts Academy \n",
"43 Curriculum Specialist Assignment A+ Arts Academy \n",
"44 Teacher Assignment A+ Arts Academy \n",
"45 Teacher Assignment A+ Arts Academy \n",
"46 Teacher Assignment A+ Arts Academy \n",
"47 Teacher Assignment A+ Arts Academy \n",
"48 Supplemental Service Teaching Assignment (Serv... A+ Arts Academy \n",
"49 Treasurer Assignment A+ Arts Academy \n",
" ... ... \n",
"\n",
" COUNTY NAME SCHOOL NAME CITY NAME DAYS WORKED HOURS WORKED PER DAY \\\n",
"0 Franklin A+ Arts Academy Columbus 0 4.00 \n",
"1 Franklin A+ Arts Academy Columbus 0 0.00 \n",
"2 Franklin A+ Arts Academy Columbus 0 6.25 \n",
"3 Franklin A+ Arts Academy Columbus 0 4.00 \n",
"4 Franklin A+ Arts Academy Columbus 0 0.00 \n",
"5 Franklin A+ Arts Academy Columbus 0 0.00 \n",
"6 Franklin A+ Arts Academy Columbus 0 0.00 \n",
"7 Franklin A+ Arts Academy Columbus 0 0.00 \n",
"8 Franklin A+ Arts Academy Columbus 0 8.00 \n",
"9 Franklin A+ Arts Academy Columbus 0 7.00 \n",
"10 Franklin A+ Arts Academy Columbus 188 1.00 \n",
"11 Franklin A+ Arts Academy Columbus 188 1.00 \n",
"12 Franklin A+ Arts Academy Columbus 185 0.00 \n",
"13 Franklin A+ Arts Academy Columbus 188 1.00 \n",
"14 Franklin A+ Arts Academy Columbus 188 2.00 \n",
"15 Franklin A+ Arts Academy Columbus 188 1.00 \n",
"16 Franklin A+ Arts Academy Columbus 70 1.00 \n",
"17 Franklin A+ Arts Academy Columbus 66 8.00 \n",
"18 Franklin A+ Arts Academy Columbus 260 3.00 \n",
"19 Franklin A+ Arts Academy Columbus 188 5.00 \n",
"20 Franklin A+ Arts Academy Columbus 77 7.00 \n",
"21 Franklin A+ Arts Academy Columbus 68 8.00 \n",
"22 Franklin A+ Arts Academy Columbus 92 8.00 \n",
"23 Franklin A+ Arts Academy Columbus 183 8.00 \n",
"24 Franklin A+ Arts Academy Columbus 117 8.00 \n",
"25 Franklin A+ Arts Academy Columbus 188 5.00 \n",
"26 Franklin A+ Arts Academy Columbus 159 8.00 \n",
"27 Franklin A+ Arts Academy Columbus 240 8.00 \n",
"28 Franklin A+ Arts Academy Columbus 185 7.00 \n",
"29 Franklin A+ Arts Academy Columbus 185 8.00 \n",
"30 Franklin A+ Arts Academy Columbus 183 7.00 \n",
"31 Franklin A+ Arts Academy Columbus 188 5.00 \n",
"32 Franklin A+ Arts Academy Columbus 221 8.00 \n",
"33 Franklin A+ Arts Academy Columbus 159 7.00 \n",
"34 Franklin A+ Arts Academy Columbus 188 7.00 \n",
"35 Franklin A+ Arts Academy Columbus 188 7.00 \n",
"36 Franklin A+ Arts Academy Columbus 188 7.00 \n",
"37 Franklin A+ Arts Academy Columbus 188 7.00 \n",
"38 Franklin A+ Arts Academy Columbus 188 8.00 \n",
"39 Franklin A+ Arts Academy Columbus 188 8.00 \n",
"40 Franklin A+ Arts Academy Columbus 175 8.00 \n",
"41 Franklin A+ Arts Academy Columbus 188 7.00 \n",
"42 Franklin A+ Arts Academy Columbus 240 8.00 \n",
"43 Franklin A+ Arts Academy Columbus 221 8.00 \n",
"44 Franklin A+ Arts Academy Columbus 188 8.00 \n",
"45 Franklin A+ Arts Academy Columbus 188 8.00 \n",
"46 Franklin A+ Arts Academy Columbus 188 8.00 \n",
"47 Franklin A+ Arts Academy Columbus 188 8.00 \n",
"48 Franklin A+ Arts Academy Columbus 185 8.00 \n",
"49 Franklin A+ Arts Academy Columbus 173 8.00 \n",
" ... ... ... ... ... \n",
"\n",
" PAY AMOUNT \n",
"0 10.00 \n",
"1 10.30 \n",
"2 11.00 \n",
"3 15.00 \n",
"4 20.00 \n",
"5 20.00 \n",
"6 20.00 \n",
"7 20.00 \n",
"8 22.58 \n",
"9 25.80 \n",
"10 1500.00 \n",
"11 1500.00 \n",
"12 2000.00 \n",
"13 2100.00 \n",
"14 3150.00 \n",
"15 3296.00 \n",
"16 3500.00 \n",
"17 5608.00 \n",
"18 8000.00 \n",
"19 10000.00 \n",
"20 11550.00 \n",
"21 15394.00 \n",
"22 17128.00 \n",
"23 18946.00 \n",
"24 19540.00 \n",
"25 26250.00 \n",
"26 29583.00 \n",
"27 30900.00 \n",
"28 30995.00 \n",
"29 31500.00 \n",
"30 31577.00 \n",
"31 32445.00 \n",
"32 32782.00 \n",
"33 33293.00 \n",
"34 34421.00 \n",
"35 35453.00 \n",
"36 35454.00 \n",
"37 35454.00 \n",
"38 36517.00 \n",
"39 36517.00 \n",
"40 37272.00 \n",
"41 37613.00 \n",
"42 39000.00 \n",
"43 39231.00 \n",
"44 39903.00 \n",
"45 42333.00 \n",
"46 42333.00 \n",
"47 42333.00 \n",
"48 42405.00 \n",
"49 44000.00 \n",
" ... \n",
"\n",
"[338809 rows x 11 columns]"
]
}
],
"prompt_number": 2
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"I also like to see if there are any Null values in our dataframe. So we need to change the view behavior to get what I call the summary view:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pd.set_option('large_repr','info')\n",
"ohio.describe"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"<bound method DataFrame.describe of <class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 338809 entries, 0 to 338808\n",
"Data columns (total 11 columns):\n",
"LAST NAME 338792 non-null object\n",
"FIRST NAME 338715 non-null object\n",
"EDUCATION LEVEL 338809 non-null object\n",
"JOB DESCRIPTION 338809 non-null object\n",
"DISTRICT NAME 338754 non-null object\n",
"COUNTY NAME 338501 non-null object\n",
"SCHOOL NAME 325879 non-null object\n",
"CITY NAME 325786 non-null object\n",
"DAYS WORKED 338809 non-null int64\n",
"HOURS WORKED PER DAY 338809 non-null float64\n",
"PAY AMOUNT 338809 non-null float64\n",
"dtypes: float64(2), int64(1), object(8)>"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data Clean-Up"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[[back to top](#top)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### There are apparently some blank/null values in some of the columns. We are going to use the fillna() function to fill missing values with whatever we want. I will fill them with 'missing'. Since the missing values are from columns that do not contain numeric values, this is not a concern for us normally."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Fill in missing values with \"missing\". Use inplace=True so that we don't need to create a new data set\n",
"ohio.fillna({'LAST NAME':'missing','FIRST NAME':'missing','DISTRICT NAME':'missing','COUNTY NAME':'missing',\n",
" 'SCHOOL NAME':'missing','CITY NAME':'missing'}, inplace=True)\n",
"ohio.describe"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"<bound method DataFrame.describe of <class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 338809 entries, 0 to 338808\n",
"Data columns (total 11 columns):\n",
"LAST NAME 338809 non-null object\n",
"FIRST NAME 338809 non-null object\n",
"EDUCATION LEVEL 338809 non-null object\n",
"JOB DESCRIPTION 338809 non-null object\n",
"DISTRICT NAME 338809 non-null object\n",
"COUNTY NAME 338809 non-null object\n",
"SCHOOL NAME 338809 non-null object\n",
"CITY NAME 338809 non-null object\n",
"DAYS WORKED 338809 non-null int64\n",
"HOURS WORKED PER DAY 338809 non-null float64\n",
"PAY AMOUNT 338809 non-null float64\n",
"dtypes: float64(2), int64(1), object(8)>"
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Now, none of our columns have missing values. It is important to fill in missing values or else they may not be included in counts we do later on. But since none of the missing values were numeric values, we are ok anyway."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Another way to find out what the data type is for each of our columns in our dataframe is to use the dtypes attribute:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ohio.dtypes"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"LAST NAME object\n",
"FIRST NAME object\n",
"EDUCATION LEVEL object\n",
"JOB DESCRIPTION object\n",
"DISTRICT NAME object\n",
"COUNTY NAME object\n",
"SCHOOL NAME object\n",
"CITY NAME object\n",
"DAYS WORKED int64\n",
"HOURS WORKED PER DAY float64\n",
"PAY AMOUNT float64\n",
"dtype: object"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='basic_summary'></a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Basic Summary Counts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[[back to top](#top)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Let's see what kind and how many school-related jobs are there in Ohio using pandas groupby function. The groupby function allows us to perform similar data slicing and dicing that you can do with Excel's pivot tables or SQL's count(*)/group by:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"job_description = ohio.groupby('JOB DESCRIPTION').size().order(ascending=False)\n",
"job_description[:20]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
"JOB DESCRIPTION\n",
"Teacher Assignment 108686\n",
"Coaching Assignment 40449\n",
"Advisor Assignment 26549\n",
"Vehicle Operating (Bus) Assignment 13956\n",
"Food Service Assignment 13926\n",
"Custodian Assignment 12178\n",
"Teaching Aide Assignment 11818\n",
"Clerical Assignment 11762\n",
"Other Extra/Intra \u0013 Curricular Activities Assignment 11404\n",
"Instructional Paraprofessional Assignment 9270\n",
"Supplemental Service Teaching Assignment (Serves Students with Disability Conditions Only) 7565\n",
"Other Professional \u0013 Educational Assignment 6693\n",
"Monitoring Assignment 5018\n",
"Tutor/Small Group Instructor Assignment (Serves Students Without Disability Conditions Only) 4609\n",
"Counseling Assignment 4033\n",
"Principal Assignment 3541\n",
"Remedial Specialist Assignment 3512\n",
"Speech and Language Therapist Assignment 2765\n",
"Psychologist Assignment 2276\n",
"Coordinator Assignment 2232\n",
"dtype: int64"
]
}
],
"prompt_number": 6
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"As expected, overwhelmingly, most of the jobs at schools are teachers (\"Teacher Assignment\")."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='sql'></a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Filtering Data Sets Using SQL-like Criteria"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[[back to top](#top)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Let's assume, I'm only interested in a certain school district and teaching positions like in Dublin, Ohio, pay amount greater than zero, and are full-time teachers (worked a least 6 months and work 8-hour days):"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"criterion1 = ohio['DISTRICT NAME'].str.contains('Dublin', na=False)\n",
"criterion2 = ohio['PAY AMOUNT'] > 0\n",
"criterion3 = ohio['JOB DESCRIPTION'] == 'Teacher Assignment'\n",
"criterion4 = ohio['DAYS WORKED'] > 180\n",
"criterion5 = ohio['HOURS WORKED PER DAY'] >=8\n",
"dublin_teachers = ohio[criterion1 & criterion2 & criterion3 & criterion4 & criterion5]\n",
"print(\"There are:\", str(len(dublin_teachers)), \"teachers that met the criteria.\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"There are: 813 teachers that met the criteria.\n"
]
}
],
"prompt_number": 57
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Let's look at some sample data by using panda's head() function (by default, it shows first 5 rows of data):"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pd.set_option('large_repr','truncate') # Earlier we invoked pd.set_option('large_repr','info'), so need to override this\n",
"dublin_teachers.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>LAST NAME</th>\n",
" <th>FIRST NAME</th>\n",
" <th>EDUCATION LEVEL</th>\n",
" <th>JOB DESCRIPTION</th>\n",
" <th>DISTRICT NAME</th>\n",
" <th>COUNTY NAME</th>\n",
" <th>SCHOOL NAME</th>\n",
" <th>CITY NAME</th>\n",
" <th>DAYS WORKED</th>\n",
" <th>HOURS WORKED PER DAY</th>\n",
" <th>PAY AMOUNT</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>94270</th>\n",
" <td> YUEN</td>\n",
" <td> AMBER</td>\n",
" <td> Masters</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> Dublin City</td>\n",
" <td> Franklin</td>\n",
" <td> Dublin Scioto High School</td>\n",
" <td> Dublin</td>\n",
" <td> 185</td>\n",
" <td> 8</td>\n",
" <td> 27862</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94291</th>\n",
" <td> KECK</td>\n",
" <td> WHITNEY</td>\n",
" <td> Masters</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> Dublin City</td>\n",
" <td> Franklin</td>\n",
" <td> Willard Grizzell Middle School</td>\n",
" <td> Dublin</td>\n",
" <td> 185</td>\n",
" <td> 8</td>\n",
" <td> 28927</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94292</th>\n",
" <td> SANZONE</td>\n",
" <td> CATHRYN</td>\n",
" <td> Masters</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> Dublin City</td>\n",
" <td> Franklin</td>\n",
" <td> Dublin Coffman High School</td>\n",
" <td> Dublin</td>\n",
" <td> 185</td>\n",
" <td> 8</td>\n",
" <td> 28927</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94333</th>\n",
" <td> ROGERS</td>\n",
" <td> TARA</td>\n",
" <td> Masters</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> Dublin City</td>\n",
" <td> Franklin</td>\n",
" <td> Dublin Coffman High School</td>\n",
" <td> Dublin</td>\n",
" <td> 185</td>\n",
" <td> 8</td>\n",
" <td> 30976</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94334</th>\n",
" <td> CHAMBERS</td>\n",
" <td> KRISTEN</td>\n",
" <td> Masters</td>\n",
" <td> Teacher Assignment</td>\n",
" <td> Dublin City</td>\n",
" <td> Franklin</td>\n",
" <td> Daniel Wright Elementary School</td>\n",
" <td> Columbus</td>\n",
" <td> 185</td>\n",
" <td> 8</td>\n",
" <td> 31058</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows \u00d7 11 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 58,
"text": [
" LAST NAME FIRST NAME EDUCATION LEVEL JOB DESCRIPTION DISTRICT NAME \\\n",
"94270 YUEN AMBER Masters Teacher Assignment Dublin City \n",
"94291 KECK WHITNEY Masters Teacher Assignment Dublin City \n",
"94292 SANZONE CATHRYN Masters Teacher Assignment Dublin City \n",
"94333 ROGERS TARA Masters Teacher Assignment Dublin City \n",
"94334 CHAMBERS KRISTEN Masters Teacher Assignment Dublin City \n",
"\n",
" COUNTY NAME SCHOOL NAME CITY NAME DAYS WORKED \\\n",
"94270 Franklin Dublin Scioto High School Dublin 185 \n",
"94291 Franklin Willard Grizzell Middle School Dublin 185 \n",
"94292 Franklin Dublin Coffman High School Dublin 185 \n",
"94333 Franklin Dublin Coffman High School Dublin 185 \n",
"94334 Franklin Daniel Wright Elementary School Columbus 185 \n",
"\n",
" HOURS WORKED PER DAY PAY AMOUNT \n",
"94270 8 27862 \n",
"94291 8 28927 \n",
"94292 8 28927 \n",
"94333 8 30976 \n",
"94334 8 31058 \n",
"\n",
"[5 rows x 11 columns]"
]
}
],
"prompt_number": 58
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Basic Summary Statistics"
]
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Summary statistics on columns containing numeric values using pandas describe() function:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dublin_teachers.describe()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>DAYS WORKED</th>\n",
" <th>HOURS WORKED PER DAY</th>\n",
" <th>PAY AMOUNT</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td> 813.000000</td>\n",
" <td> 813</td>\n",
" <td> 813.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td> 185.029520</td>\n",
" <td> 8</td>\n",
" <td> 74544.772448</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td> 0.453899</td>\n",
" <td> 0</td>\n",
" <td> 15850.050199</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td> 183.000000</td>\n",
" <td> 8</td>\n",
" <td> 27862.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td> 185.000000</td>\n",
" <td> 8</td>\n",
" <td> 62115.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td> 185.000000</td>\n",
" <td> 8</td>\n",
" <td> 76947.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td> 185.000000</td>\n",
" <td> 8</td>\n",
" <td> 88932.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td> 195.000000</td>\n",
" <td> 8</td>\n",
" <td> 95857.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows \u00d7 3 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 59,
"text": [
" DAYS WORKED HOURS WORKED PER DAY PAY AMOUNT\n",
"count 813.000000 813 813.000000\n",
"mean 185.029520 8 74544.772448\n",
"std 0.453899 0 15850.050199\n",
"min 183.000000 8 27862.000000\n",
"25% 185.000000 8 62115.000000\n",
"50% 185.000000 8 76947.000000\n",
"75% 185.000000 8 88932.000000\n",
"max 195.000000 8 95857.000000\n",
"\n",
"[8 rows x 3 columns]"
]
}
],
"prompt_number": 59
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wow, Dublin city teachers are paid pretty well on average."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='visualization'></a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simple Visualization"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[[back top top](#top)]"
]
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Let's create a histogram of Dublin City Teachers Salary"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dublin_teachers['PAY AMOUNT'].hist()\n",
"title(\"Dublin City Teachers Salary Histogram\", weight='bold')\n",
"xlabel(\"Salary\")\n",
"ylabel(\"Frequency/Qty\")\n",
"show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nRK5CYII=\n",
"text": [
"<matplotlib.figure.Figure at 0x7f365498a410>"
]
}
],
"prompt_number": 60
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Now, let's create a list of highest median teacher salaries by district and city across all of Ohio.<br>\n",
"But, before we do, we should probably check if there are sample sizes that are too low:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"c1 = ohio['PAY AMOUNT'] > 0\n",
"c2 = ohio['JOB DESCRIPTION'] == 'Teacher Assignment'\n",
"c3 = ohio['DAYS WORKED'] > 180\n",
"c4 = ohio['HOURS WORKED PER DAY'] >=8\n",
"\n",
"ohio_teachers = ohio[c1 & c2 & c3 & c4]\n",
"ohio_teachers_counts = ohio_teachers.groupby(['DISTRICT NAME','CITY NAME']).size()\n",
"print(ohio_teachers_counts.order(ascending=True))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"DISTRICT NAME CITY NAME \n",
"Ansonia Local Ansonia 1\n",
"Anthony Wayne Local Whitehouse 1\n",
"Athens-Meigs ESC Chauncey 1\n",
"Big Walnut Local Galena 1\n",
"Butler County ESC Hamilton 1\n",
"Capital High School Columbus 1\n",
"Cliff Park High School Springfield 1\n",
"Constellation Schools: Mansfield Community Middle Mansfield 1\n",
"Cuyahoga Heights Local Cuyahoga Heights 1\n",
"Darke County ESC Greenville 1\n",
"Dohn Community Cincinnati 1\n",
"EHOVE Career Center missing 1\n",
"East Central Ohio ESC New Philadelphia 1\n",
"Elyria City Schools Elyria 1\n",
"Fairborn Digital Academy Fairborn 1\n",
"...\n",
"Talawanda City Oxford 156\n",
"Shaker Heights City Shaker Heights 160\n",
"Olentangy Local missing 173\n",
"South-Western City Galloway 175\n",
"Avon Lake City Avon Lake 200\n",
"Olentangy Local Lewis Center 242\n",
"Princeton City Cincinnati 250\n",
"Olentangy Local Powell 290\n",
"Ohio Virtual Academy Maumee 296\n",
"Findlay City Findlay 305\n",
"Upper Arlington City Upper Arlington 315\n",
"South-Western City Columbus 327\n",
"Middletown City Middletown 350\n",
"South-Western City Grove City 568\n",
"Dublin City Dublin 727\n",
"Length: 385, dtype: int64\n"
]
}
],
"prompt_number": 61
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='merging'></a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Merging Data Sets"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[[back to top](#top)]"
]
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"As you can see, we have school districts with just one teacher for some reason. We need to filter them out if we want make a list of top median salaries statistically meaningful. First, we need to make a data set containing the median salaries and then merge it with the teacher counts data set above using the concat() function:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"c1 = ohio['PAY AMOUNT'] > 0\n",
"c2 = ohio['JOB DESCRIPTION'] == 'Teacher Assignment'\n",
"c3 = ohio['DAYS WORKED'] > 180\n",
"c4 = ohio['HOURS WORKED PER DAY'] >=8\n",
"\n",
"ohio_teachers = ohio[c1 & c2 & c3 & c4]\n",
"median_pay = ohio_teachers.groupby(by=['DISTRICT NAME', 'CITY NAME'])['PAY AMOUNT'].median()\n",
"top_districts = median_pay.order(ascending=False)\n",
"# Let's just get the top 25 school districts\n",
"top_districts.head(25)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 62,
"text": [
"DISTRICT NAME CITY NAME \n",
"Oak Hills Local Cincinnati 104625.0\n",
"Cuyahoga Heights Local Cuyahoga Heights 91375.0\n",
"Lakewood City Lakewood 87080.0\n",
"Brecksville-Broadview Heights City Brecksville 84704.0\n",
"Upper Arlington City Upper Arlington 83209.0\n",
"Brecksville-Broadview Heights City Broadview Heights 82548.0\n",
"Shaker Heights City Shaker Heights 80133.0\n",
"Revere Local Bath 79901.5\n",
"Perry Local Perry 79686.0\n",
"Parma City Parma 78887.0\n",
"Bay Village City missing 78741.0\n",
"Van Wert City Van Wert 78469.0\n",
"Lorain City Lorain 77773.0\n",
"Dublin City Dublin 77029.0\n",
"Independence Local Independence 76998.0\n",
"Great Oaks Inst Of Technology Wilmington 76723.0\n",
" missing 75853.5\n",
"Revere Local Richfield 75451.0\n",
" Akron 75451.0\n",
"Dublin City Powell 74981.0\n",
"Warrensville Heights City missing 74589.0\n",
"Great Oaks Inst Of Technology Milford 73877.5\n",
"Mentor Exempted Village Mentor 72965.0\n",
"Trotwood-Madison City Trotwood 72162.0\n",
"Upper Valley Career Center Piqua 71325.0\n",
"Name: PAY AMOUNT, dtype: float64"
]
}
],
"prompt_number": 62
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Above, we have the median salaries. Hmmm, Oak Hills Local has a median salary of over $100,000. But, I wonder how many teachers are in that school district? Next, we are going to merge this data set with the teacher counts data set using the concat() function to find out:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Concatenate the 2 data sets along the column axis (axis=1) and label the 2 columns as median and count\n",
"top_median_salary = pd.concat([top_districts, ohio_teachers_counts], axis=1, keys=['median','count'])\n",
"top_median_salary.sort(columns='median', ascending=False, inplace=True)\n",
"top_median_salary.head(50)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>median</th>\n",
" <th>count</th>\n",
" </tr>\n",
" <tr>\n",
" <th>DISTRICT NAME</th>\n",
" <th>CITY NAME</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Oak Hills Local </th>\n",
" <th>Cincinnati</th>\n",
" <td> 104625.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Cuyahoga Heights Local</th>\n",
" <th>Cuyahoga Heights</th>\n",
" <td> 91375.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Lakewood City</th>\n",
" <th>Lakewood</th>\n",
" <td> 87080.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Brecksville-Broadview Heights City</th>\n",
" <th>Brecksville</th>\n",
" <td> 84704.0</td>\n",
" <td> 69</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Upper Arlington City</th>\n",
" <th>Upper Arlington</th>\n",
" <td> 83209.0</td>\n",
" <td> 315</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Brecksville-Broadview Heights City</th>\n",
" <th>Broadview Heights</th>\n",
" <td> 82548.0</td>\n",
" <td> 116</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Shaker Heights City</th>\n",
" <th>Shaker Heights</th>\n",
" <td> 80133.0</td>\n",
" <td> 160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Revere Local</th>\n",
" <th>Bath</th>\n",
" <td> 79901.5</td>\n",
" <td> 2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Perry Local</th>\n",
" <th>Perry</th>\n",
" <td> 79686.0</td>\n",
" <td> 87</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Parma City</th>\n",
" <th>Parma</th>\n",
" <td> 78887.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Bay Village City</th>\n",
" <th>missing</th>\n",
" <td> 78741.0</td>\n",
" <td> 5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Van Wert City</th>\n",
" <th>Van Wert</th>\n",
" <td> 78469.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Lorain City</th>\n",
" <th>Lorain</th>\n",
" <td> 77773.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Dublin City</th>\n",
" <th>Dublin</th>\n",
" <td> 77029.0</td>\n",
" <td> 727</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Independence Local</th>\n",
" <th>Independence</th>\n",
" <td> 76998.0</td>\n",
" <td> 62</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Great Oaks Inst Of Technology</th>\n",
" <th>Wilmington</th>\n",
" <td> 76723.0</td>\n",
" <td> 35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>missing</th>\n",
" <td> 75853.5</td>\n",
" <td> 78</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Revere Local</th>\n",
" <th>Akron</th>\n",
" <td> 75451.0</td>\n",
" <td> 59</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Richfield</th>\n",
" <td> 75451.0</td>\n",
" <td> 81</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Dublin City</th>\n",
" <th>Powell</th>\n",
" <td> 74981.0</td>\n",
" <td> 27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Warrensville Heights City</th>\n",
" <th>missing</th>\n",
" <td> 74589.0</td>\n",
" <td> 36</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Great Oaks Inst Of Technology</th>\n",
" <th>Milford</th>\n",
" <td> 73877.5</td>\n",
" <td> 34</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Mentor Exempted Village</th>\n",
" <th>Mentor</th>\n",
" <td> 72965.0</td>\n",
" <td> 2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Trotwood-Madison City</th>\n",
" <th>Trotwood</th>\n",
" <td> 72162.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Upper Valley Career Center</th>\n",
" <th>Piqua</th>\n",
" <td> 71325.0</td>\n",
" <td> 15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Princeton City</th>\n",
" <th>Cincinnati</th>\n",
" <td> 71150.0</td>\n",
" <td> 250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Great Oaks Inst Of Technology</th>\n",
" <th>Cincinnati</th>\n",
" <td> 70880.5</td>\n",
" <td> 98</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Berea City</th>\n",
" <th>Berea</th>\n",
" <td> 70656.0</td>\n",
" <td> 142</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Hamilton County ESC</th>\n",
" <th>Cincinnati</th>\n",
" <td> 70393.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Avon Lake City</th>\n",
" <th>Avon Lake</th>\n",
" <td> 70138.0</td>\n",
" <td> 200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Bay Village City</th>\n",
" <th>Bay Village</th>\n",
" <td> 68736.0</td>\n",
" <td> 139</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Dublin City</th>\n",
" <th>missing</th>\n",
" <td> 68343.0</td>\n",
" <td> 27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Lakota Local</th>\n",
" <th>missing</th>\n",
" <td> 68048.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Big Walnut Local</th>\n",
" <th>Galena</th>\n",
" <td> 67709.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>South-Western City</th>\n",
" <th>Galloway</th>\n",
" <td> 67526.0</td>\n",
" <td> 175</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Berea City</th>\n",
" <th>Middleburg Heights</th>\n",
" <td> 67384.0</td>\n",
" <td> 54</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Dublin City</th>\n",
" <th>Columbus</th>\n",
" <td> 67277.5</td>\n",
" <td> 32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Warrensville Heights City</th>\n",
" <th>Warrensville Heights</th>\n",
" <td> 65538.0</td>\n",
" <td> 62</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Marion Local</th>\n",
" <th>Maria Stein</th>\n",
" <td> 65234.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Elyria City Schools</th>\n",
" <th>Elyria</th>\n",
" <td> 65119.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Big Walnut Local</th>\n",
" <th>Sunbury</th>\n",
" <td> 65118.0</td>\n",
" <td> 13</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Green Local</th>\n",
" <th>Uniontown</th>\n",
" <td> 64697.0</td>\n",
" <td> 2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>South-Western City</th>\n",
" <th>Grove City</th>\n",
" <td> 64310.0</td>\n",
" <td> 568</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Montpelier Exempted Village</th>\n",
" <th>Montpelier</th>\n",
" <td> 64306.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Olentangy Local</th>\n",
" <th>Galena</th>\n",
" <td> 64070.0</td>\n",
" <td> 27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Scioto County Career Technical Center</th>\n",
" <th>Lucasville</th>\n",
" <td> 63918.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Stow-Munroe Falls City School District</th>\n",
" <th>Stow</th>\n",
" <td> 63698.0</td>\n",
" <td> 2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Buckeye Local</th>\n",
" <th>Kingsville</th>\n",
" <td> 63564.0</td>\n",
" <td> 19</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Olentangy Local</th>\n",
" <th>Lewis Center</th>\n",
" <td> 62797.0</td>\n",
" <td> 242</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Tecumseh Local</th>\n",
" <th>New Carlisle</th>\n",
" <td> 62364.0</td>\n",
" <td> 1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>50 rows \u00d7 2 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 63,
"text": [
" median count\n",
"DISTRICT NAME CITY NAME \n",
"Oak Hills Local Cincinnati 104625.0 1\n",
"Cuyahoga Heights Local Cuyahoga Heights 91375.0 1\n",
"Lakewood City Lakewood 87080.0 1\n",
"Brecksville-Broadview Heights City Brecksville 84704.0 69\n",
"Upper Arlington City Upper Arlington 83209.0 315\n",
"Brecksville-Broadview Heights City Broadview Heights 82548.0 116\n",
"Shaker Heights City Shaker Heights 80133.0 160\n",
"Revere Local Bath 79901.5 2\n",
"Perry Local Perry 79686.0 87\n",
"Parma City Parma 78887.0 1\n",
"Bay Village City missing 78741.0 5\n",
"Van Wert City Van Wert 78469.0 1\n",
"Lorain City Lorain 77773.0 1\n",
"Dublin City Dublin 77029.0 727\n",
"Independence Local Independence 76998.0 62\n",
"Great Oaks Inst Of Technology Wilmington 76723.0 35\n",
" missing 75853.5 78\n",
"Revere Local Akron 75451.0 59\n",
" Richfield 75451.0 81\n",
"Dublin City Powell 74981.0 27\n",
"Warrensville Heights City missing 74589.0 36\n",
"Great Oaks Inst Of Technology Milford 73877.5 34\n",
"Mentor Exempted Village Mentor 72965.0 2\n",
"Trotwood-Madison City Trotwood 72162.0 1\n",
"Upper Valley Career Center Piqua 71325.0 15\n",
"Princeton City Cincinnati 71150.0 250\n",
"Great Oaks Inst Of Technology Cincinnati 70880.5 98\n",
"Berea City Berea 70656.0 142\n",
"Hamilton County ESC Cincinnati 70393.0 1\n",
"Avon Lake City Avon Lake 70138.0 200\n",
"Bay Village City Bay Village 68736.0 139\n",
"Dublin City missing 68343.0 27\n",
"Lakota Local missing 68048.0 1\n",
"Big Walnut Local Galena 67709.0 1\n",
"South-Western City Galloway 67526.0 175\n",
"Berea City Middleburg Heights 67384.0 54\n",
"Dublin City Columbus 67277.5 32\n",
"Warrensville Heights City Warrensville Heights 65538.0 62\n",
"Marion Local Maria Stein 65234.0 1\n",
"Elyria City Schools Elyria 65119.0 1\n",
"Big Walnut Local Sunbury 65118.0 13\n",
"Green Local Uniontown 64697.0 2\n",
"South-Western City Grove City 64310.0 568\n",
"Montpelier Exempted Village Montpelier 64306.0 1\n",
"Olentangy Local Galena 64070.0 27\n",
"Scioto County Career Technical Center Lucasville 63918.0 1\n",
"Stow-Munroe Falls City School District Stow 63698.0 2\n",
"Buckeye Local Kingsville 63564.0 19\n",
"Olentangy Local Lewis Center 62797.0 242\n",
"Tecumseh Local New Carlisle 62364.0 1\n",
"\n",
"[50 rows x 2 columns]"
]
}
],
"prompt_number": 63
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"Looks like the merge worked, but next we need to filter out the districts with low teacher counts. There are school districts with high median salaries, but they had only 1 teacher! So to make our top list meaningful, we should probably make our data set contain districts with at least 10 teachers:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a name='top25'></a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Top 25 Highest Median Salaries of Ohio School Teachers by District and City"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[[back to top](#top)]"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"criteria1 = top_median_salary['count'] >= 10\n",
"top_median_salary = top_median_salary[criteria1]\n",
"top_median_salary.head(25)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th></th>\n",
" <th>median</th>\n",
" <th>count</th>\n",
" </tr>\n",
" <tr>\n",
" <th>DISTRICT NAME</th>\n",
" <th>CITY NAME</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Brecksville-Broadview Heights City</th>\n",
" <th>Brecksville</th>\n",
" <td> 84704.0</td>\n",
" <td> 69</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Upper Arlington City</th>\n",
" <th>Upper Arlington</th>\n",
" <td> 83209.0</td>\n",
" <td> 315</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Brecksville-Broadview Heights City</th>\n",
" <th>Broadview Heights</th>\n",
" <td> 82548.0</td>\n",
" <td> 116</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Shaker Heights City</th>\n",
" <th>Shaker Heights</th>\n",
" <td> 80133.0</td>\n",
" <td> 160</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Perry Local</th>\n",
" <th>Perry</th>\n",
" <td> 79686.0</td>\n",
" <td> 87</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Dublin City</th>\n",
" <th>Dublin</th>\n",
" <td> 77029.0</td>\n",
" <td> 727</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Independence Local</th>\n",
" <th>Independence</th>\n",
" <td> 76998.0</td>\n",
" <td> 62</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Great Oaks Inst Of Technology</th>\n",
" <th>Wilmington</th>\n",
" <td> 76723.0</td>\n",
" <td> 35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>missing</th>\n",
" <td> 75853.5</td>\n",
" <td> 78</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">Revere Local</th>\n",
" <th>Akron</th>\n",
" <td> 75451.0</td>\n",
" <td> 59</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Richfield</th>\n",
" <td> 75451.0</td>\n",
" <td> 81</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Dublin City</th>\n",
" <th>Powell</th>\n",
" <td> 74981.0</td>\n",
" <td> 27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Warrensville Heights City</th>\n",
" <th>missing</th>\n",
" <td> 74589.0</td>\n",
" <td> 36</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Great Oaks Inst Of Technology</th>\n",
" <th>Milford</th>\n",
" <td> 73877.5</td>\n",
" <td> 34</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Upper Valley Career Center</th>\n",
" <th>Piqua</th>\n",
" <td> 71325.0</td>\n",
" <td> 15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Princeton City</th>\n",
" <th>Cincinnati</th>\n",
" <td> 71150.0</td>\n",
" <td> 250</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Great Oaks Inst Of Technology</th>\n",
" <th>Cincinnati</th>\n",
" <td> 70880.5</td>\n",
" <td> 98</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Berea City</th>\n",
" <th>Berea</th>\n",
" <td> 70656.0</td>\n",
" <td> 142</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Avon Lake City</th>\n",
" <th>Avon Lake</th>\n",
" <td> 70138.0</td>\n",
" <td> 200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Bay Village City</th>\n",
" <th>Bay Village</th>\n",
" <td> 68736.0</td>\n",
" <td> 139</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Dublin City</th>\n",
" <th>missing</th>\n",
" <td> 68343.0</td>\n",
" <td> 27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>South-Western City</th>\n",
" <th>Galloway</th>\n",
" <td> 67526.0</td>\n",
" <td> 175</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Berea City</th>\n",
" <th>Middleburg Heights</th>\n",
" <td> 67384.0</td>\n",
" <td> 54</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Dublin City</th>\n",
" <th>Columbus</th>\n",
" <td> 67277.5</td>\n",
" <td> 32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Warrensville Heights City</th>\n",
" <th>Warrensville Heights</th>\n",
" <td> 65538.0</td>\n",
" <td> 62</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>25 rows \u00d7 2 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 64,
"text": [
" median count\n",
"DISTRICT NAME CITY NAME \n",
"Brecksville-Broadview Heights City Brecksville 84704.0 69\n",
"Upper Arlington City Upper Arlington 83209.0 315\n",
"Brecksville-Broadview Heights City Broadview Heights 82548.0 116\n",
"Shaker Heights City Shaker Heights 80133.0 160\n",
"Perry Local Perry 79686.0 87\n",
"Dublin City Dublin 77029.0 727\n",
"Independence Local Independence 76998.0 62\n",
"Great Oaks Inst Of Technology Wilmington 76723.0 35\n",
" missing 75853.5 78\n",
"Revere Local Akron 75451.0 59\n",
" Richfield 75451.0 81\n",
"Dublin City Powell 74981.0 27\n",
"Warrensville Heights City missing 74589.0 36\n",
"Great Oaks Inst Of Technology Milford 73877.5 34\n",
"Upper Valley Career Center Piqua 71325.0 15\n",
"Princeton City Cincinnati 71150.0 250\n",
"Great Oaks Inst Of Technology Cincinnati 70880.5 98\n",
"Berea City Berea 70656.0 142\n",
"Avon Lake City Avon Lake 70138.0 200\n",
"Bay Village City Bay Village 68736.0 139\n",
"Dublin City missing 68343.0 27\n",
"South-Western City Galloway 67526.0 175\n",
"Berea City Middleburg Heights 67384.0 54\n",
"Dublin City Columbus 67277.5 32\n",
"Warrensville Heights City Warrensville Heights 65538.0 62\n",
"\n",
"[25 rows x 2 columns]"
]
}
],
"prompt_number": 64
},
{
"cell_type": "heading",
"level": 4,
"metadata": {},
"source": [
"So now, we have our list of top 25 median salaries by school districts in all of the state of Ohio with at least 10 teachers.<br>\n",
"We're done!"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<link href='http://fonts.googleapis.com/css?family=Source+Code+Pro' rel='stylesheet' type='text/css'>\n",
"<link href='http://fonts.googleapis.com/css?family=Raleway' rel='stylesheet' type='text/css'>\n",
"<style>\n",
"\n",
" body {\n",
" font-family: 'Raleway', sans-serif;\n",
" color: #eff1f5;\n",
" }\n",
"\n",
" /*Selectors*/\n",
"\n",
" div.cell.selected {\n",
" border: none;\n",
" }\n",
"\n",
" div.prompt {\n",
" display: none;\n",
" }\n",
"\n",
" body {background-color:#2b303b;}\n",
"\n",
" div#maintoolbar, div#header {display: none !important;}\n",
"\n",
" div#notebook {border-top: none;}\n",
"\n",
" div.input_area {\n",
" border-radius: 0px;\n",
" background-color: #2b303b;\n",
" border: none;\n",
" }\n",
"\n",
" code, pre {\n",
" font-family: \"Source Code Pro\";\n",
" }\n",
"\n",
" div.output_area pre {font-weight: normal; color: #c0c5ce;}\n",
"\n",
" .rendered_html table, .rendered_html th, .rendered_html tr, .rendered_html td {\n",
" border: 1px #4f5b66 solid;\n",
" white-space: nowrap;\n",
" }\n",
" .rendered_html thead {\n",
" background-color: #65737e;\n",
" }\n",
" .rendered_html th {font-weight: normal;}\n",
" table.dataframe tr {border: 1px #4f5b66;}\n",
"\n",
" div.cell.selected {border-radius: 0px;}\n",
" div.text_cell_render, div.output_html {color: #eff1f5;}\n",
"\n",
" .highlight .hll {background-color:#2b303b;}\n",
" .highlight {background-color:#2b303b;\n",
" font-family: \"Source Code Pro\",;\n",
" }\n",
" .highlight .c { color: #ab7967; font-style: italic } /* Comment */\n",
" .highlight .err { border: 1px solid #FF0000 } /* Error */\n",
" .highlight .k { color: #bf616a;; } /* Keyword */\n",
" .highlight .o { color: #666666 } /* Operator */\n",
" .highlight .cm { color: #ab7967; font-style: italic } /* Comment.Multiline */\n",
" .highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n",
" .highlight .c1 { color: #ab7967; font-style: italic } /* Comment.Single */\n",
" .highlight .cs { color: #ab7967; font-style: italic } /* Comment.Special */\n",
" .highlight .gd { color: #A00000 } /* Generic.Deleted */\n",
" .highlight .ge { font-style: italic } /* Generic.Emph */\n",
" .highlight .gr { color: #FF0000 } /* Generic.Error */\n",
" .highlight .gh { color: #000080; } /* Generic.Heading */\n",
" .highlight .gi { color: #00A000 } /* Generic.Inserted */\n",
" .highlight .go { color: #888888 } /* Generic.Output */\n",
" .highlight .gp { color: #000080; } /* Generic.Prompt */\n",
" .highlight .gu { color: #800080; } /* Generic.Subheading */\n",
" .highlight .gt { color: #0044DD } /* Generic.Traceback */\n",
" .highlight .kc { color: #bf616a; } /* Keyword.Constant */\n",
" .highlight .kd { color: #bf616a; } /* Keyword.Declaration */\n",
" .highlight .kn { color: #bf616a; font-weight: normal;} /* Keyword.Namespace */\n",
" .highlight .kp { color: #bf616a; } /* Keyword.Pseudo */\n",
" .highlight .kr { color: #bf616a; } /* Keyword.Reserved */\n",
" .highlight .kt { color: #bf616a; } /* Keyword.Type */\n",
" .highlight .p { color: #c0c5ce; } /* Brackets */\n",
" .highlight .o { color: #c0c5ce; } /* =, ., !, etc */\n",
" .highlight .n { color: #a3be8c; } /* Most text */\n",
" .highlight .m { color: #b48ead; } /* Literal.Number */\n",
" .highlight .s { color: #ebcb8b; } /* Literal.String */\n",
" .highlight .na { color: #a3be8c; } /* Name.Attribute */\n",
" .highlight .nb { color: #6a9fb5; } /* Name.Builtin */\n",
" .highlight .nc { color: #a3be8c; } /* Name.Class */\n",
" .highlight .no { color: #a3be8c;} /* Name.Constant */\n",
" .highlight .nd { color: #a3be8c; } /* Name.Decorator */\n",
" .highlight .ni { color: #a3be8c; } /* Name.Entity */\n",
" .highlight .ne { color: #a3be8c; } /* Name.Exception */\n",
" .highlight .nf { color: #d08770;} /* Name.Function */\n",
" .highlight .nl { color: #a3be8c; } /* Name.Label */\n",
" .highlight .nn { color: #a3be8c; font-weight: normal;} /* Name.Namespace */\n",
" .highlight .nt { color: #a3be8c; } /* Name.Tag */\n",
" .highlight .nv { color: #a3be8c; } /* Name.Variable */\n",
" .highlight .ow { color: #bf616a; } /* Operator.Word */\n",
" .highlight .w { color: #bbbbbb } /* Text.Whitespace */\n",
" .highlight .mf { color: #b48ead; } /* Literal.Number.Float */\n",
" .highlight .mh { color: #b48ead;} /* Literal.Number.Hex */\n",
" .highlight .mi { color: #b48ead; } /* Literal.Number.Integer */\n",
" .highlight .mo { color: #b48ead; } /* Literal.Number.Oct */\n",
" .highlight .sb { color: #ebcb8b; } /* Literal.String.Backtick */\n",
" .highlight .sc { color: #ebcb8b; } /* Literal.String.Char */\n",
" .highlight .sd { color: #ebcb8b; font-style: italic } /* Literal.String.Doc */\n",
" .highlight .s2 { color: #ebcb8b; } /* Literal.String.Double */\n",
" .highlight .se { color: #ebcb8b; } /* Literal.String.Escape */\n",
" .highlight .sh { color: #ebcb8b; } /* Literal.String.Heredoc */\n",
" .highlight .si { color: #ebcb8b; } /* Literal.String.Interpol */\n",
" .highlight .sx { color: #ebcb8b; } /* Literal.String.Other */\n",
" .highlight .sr { color: #ebcb8b; } /* Literal.String.Regex */\n",
" .highlight .s1 { color: #ebcb8b;} /* Literal.String.Single */\n",
" .highlight .ss { color: #ebcb8b; } /* Literal.String.Symbol */\n",
" .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n",
" .highlight .vc { color: #bf616a; } /* Name.Variable.Class */\n",
" .highlight .vg { color: #19177C } /* Name.Variable.Global */\n",
" .highlight .vi { color: #19177C } /* Name.Variable.Instance */\n",
" .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */\n",
"\n",
" .widget-hlabel {\n",
" color: #d0d0d0;\n",
" }\n",
"\n",
" .mpld3-xaxis line, .mpld3-yaxis line {\n",
" stroke: #d0d0d0 !important;\n",
" }\n",
" .mpld3-xaxis text, .mpld3-yaxis text, .mpld3-text {\n",
" fill: #d0d0d0 !important;\n",
" }\n",
"\n",
" .rickshaw_graph .y_ticks text {\n",
" fill: #d0d0d0 !important;\n",
" opacity: 1.0;\n",
" }\n",
"\n",
" .rickshaw_graph .detail .x_label {\n",
" color: black;\n",
" }\n",
"\n",
"</style>\n"
],
"metadata": {},
"output_type": "pyout"
}
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[[back to top](#top)]"
]
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment