Skip to content

Instantly share code, notes, and snippets.

@TDahlberg
Created August 15, 2016 16:18
Show Gist options
  • Save TDahlberg/3c1ec0247be39e507ab3bd0b571558f8 to your computer and use it in GitHub Desktop.
Save TDahlberg/3c1ec0247be39e507ab3bd0b571558f8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Import all the things"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"import ipywidgets as widgets\n",
"from tabulate import tabulate\n",
"\n",
"from scipy.stats import kendalltau\n",
"from __future__ import print_function\n",
"from ipywidgets import interact, interactive, fixed\n",
"from IPython.display import display\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Read in the CSV"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Match_addr</th>\n",
" <th>EIN</th>\n",
" <th>NAME</th>\n",
" <th>ICO</th>\n",
" <th>STREET</th>\n",
" <th>CITY_1</th>\n",
" <th>STATE</th>\n",
" <th>ZIP</th>\n",
" <th>GROUP_</th>\n",
" <th>SUBSECTION</th>\n",
" <th>...</th>\n",
" <th>INCOME_AMT</th>\n",
" <th>REVENUE_AMT</th>\n",
" <th>code</th>\n",
" <th>Zip5</th>\n",
" <th>Zip4</th>\n",
" <th>Eco</th>\n",
" <th>Lat</th>\n",
" <th>Long</th>\n",
" <th>description</th>\n",
" <th>category</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>NaN</td>\n",
" <td>61519148</td>\n",
" <td>AVON LIONS CHARITIES INC</td>\n",
" <td>% DUANE E STARR</td>\n",
" <td>PO BOX 39</td>\n",
" <td>AVON</td>\n",
" <td>CT</td>\n",
" <td>06001-0039</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>T12</td>\n",
" <td>6001</td>\n",
" <td>39</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>Fund Raising &amp; Fund Distribution</td>\n",
" <td>philanthropy</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>34 Stockbridge Dr, Avon, Connecticut, 06001</td>\n",
" <td>66074890</td>\n",
" <td>DELTA MU HOUSE ASSOCIATION OF KAPPA KAPPA GAMM...</td>\n",
" <td>% KAREN GREENBERG</td>\n",
" <td>34 STOCKBRIDGE DR</td>\n",
" <td>AVON</td>\n",
" <td>CT</td>\n",
" <td>06001-4415</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>6001</td>\n",
" <td>4415</td>\n",
" <td>NaN</td>\n",
" <td>41.799419</td>\n",
" <td>-72.899200</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>44 Copplestone Rd, Avon, Connecticut, 06001</td>\n",
" <td>66055634</td>\n",
" <td>UNITED STATES POWER SQUADRONS</td>\n",
" <td>% CLIFFORD W MCKIBBIN</td>\n",
" <td>44 COPPLESTONE RD</td>\n",
" <td>AVON</td>\n",
" <td>CT</td>\n",
" <td>06001-2913</td>\n",
" <td>1041</td>\n",
" <td>3</td>\n",
" <td>...</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>6001</td>\n",
" <td>2913</td>\n",
" <td>NaN</td>\n",
" <td>41.776310</td>\n",
" <td>-72.869194</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>21 Waterville Rd, Avon, Connecticut, 06001</td>\n",
" <td>61502263</td>\n",
" <td>FOLEY FAMILY FOUNDATION INC</td>\n",
" <td>% PEPE &amp; HAZARD KATHLEEN BORNHORST</td>\n",
" <td>21 WATERVILLE RD</td>\n",
" <td>AVON</td>\n",
" <td>CT</td>\n",
" <td>06001-2097</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>...</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>T20Z</td>\n",
" <td>6001</td>\n",
" <td>2097</td>\n",
" <td>NaN</td>\n",
" <td>41.803600</td>\n",
" <td>-72.818550</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>107 Craigemore Cir, Avon, Connecticut, 06001</td>\n",
" <td>60787490</td>\n",
" <td>BRIARCLIFF SWIMMING &amp; RECREATION CLUB INC</td>\n",
" <td>% PETER SCOTT</td>\n",
" <td>107 CRAIGEMORE CIR</td>\n",
" <td>AVON</td>\n",
" <td>CT</td>\n",
" <td>06001-3418</td>\n",
" <td>0</td>\n",
" <td>7</td>\n",
" <td>...</td>\n",
" <td>35597</td>\n",
" <td>35597</td>\n",
" <td>NaN</td>\n",
" <td>6001</td>\n",
" <td>3418</td>\n",
" <td>NaN</td>\n",
" <td>41.808411</td>\n",
" <td>-72.881012</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 35 columns</p>\n",
"</div>"
],
"text/plain": [
" Match_addr EIN \\\n",
"0 NaN 61519148 \n",
"1 34 Stockbridge Dr, Avon, Connecticut, 06001 66074890 \n",
"2 44 Copplestone Rd, Avon, Connecticut, 06001 66055634 \n",
"3 21 Waterville Rd, Avon, Connecticut, 06001 61502263 \n",
"4 107 Craigemore Cir, Avon, Connecticut, 06001 60787490 \n",
"\n",
" NAME \\\n",
"0 AVON LIONS CHARITIES INC \n",
"1 DELTA MU HOUSE ASSOCIATION OF KAPPA KAPPA GAMM... \n",
"2 UNITED STATES POWER SQUADRONS \n",
"3 FOLEY FAMILY FOUNDATION INC \n",
"4 BRIARCLIFF SWIMMING & RECREATION CLUB INC \n",
"\n",
" ICO STREET CITY_1 STATE \\\n",
"0 % DUANE E STARR PO BOX 39 AVON CT \n",
"1 % KAREN GREENBERG 34 STOCKBRIDGE DR AVON CT \n",
"2 % CLIFFORD W MCKIBBIN 44 COPPLESTONE RD AVON CT \n",
"3 % PEPE & HAZARD KATHLEEN BORNHORST 21 WATERVILLE RD AVON CT \n",
"4 % PETER SCOTT 107 CRAIGEMORE CIR AVON CT \n",
"\n",
" ZIP GROUP_ SUBSECTION ... INCOME_AMT REVENUE_AMT \\\n",
"0 06001-0039 0 3 ... 0 0 \n",
"1 06001-4415 0 6 ... 0 0 \n",
"2 06001-2913 1041 3 ... 0 0 \n",
"3 06001-2097 0 3 ... 1 NaN \n",
"4 06001-3418 0 7 ... 35597 35597 \n",
"\n",
" code Zip5 Zip4 Eco Lat Long \\\n",
"0 T12 6001 39 NaN NaN NaN \n",
"1 NaN 6001 4415 NaN 41.799419 -72.899200 \n",
"2 NaN 6001 2913 NaN 41.776310 -72.869194 \n",
"3 T20Z 6001 2097 NaN 41.803600 -72.818550 \n",
"4 NaN 6001 3418 NaN 41.808411 -72.881012 \n",
"\n",
" description category \n",
"0 Fund Raising & Fund Distribution philanthropy \n",
"1 NaN NaN \n",
"2 NaN NaN \n",
"3 NaN NaN \n",
"4 NaN NaN \n",
"\n",
"[5 rows x 35 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = pd.read_csv(\"/Users/tylerdahlberg/projects/internal/nonprofit_mailinglist/RawData/all_nonprofits.csv\", \n",
" index_col=0,error_bad_lines=False)\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"data.rename(columns = {\"CITY_1\":'CITY'},inplace=True) # Because it was duplicated"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## This is the code to create a new dataframe of just a city and state:\n",
"#summary = data.loc[(data[\"CITY\"] == city) & (data[\"STATE\"] == state)]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create a Summary Function"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def summarizeCity(city,state):\n",
" # Set up all the output stats, pivot table to be used\n",
" print(city,state)\n",
" summary = data.loc[(data[\"CITY\"] == city) & (data[\"STATE\"] == state)]\n",
" print(\"\\nNarrowed to city / state\\n\")\n",
" print(city,state,\"has\",len(summary),\"nonprofits\")\n",
" print(\"Median ASSETS:\",summary[\"ASSET_AMT\"].median())\n",
" print(\"Median REVENUE:\",summary[\"REVENUE_AMT\"].median())\n",
" print(\"Median INCOME:\",summary[\"INCOME_AMT\"].median())\n",
" print('\\nTop 10 Nonprofit Categories by Asset Amount')\n",
" pivot = summary.pivot_table(index=\"category\",values=\"ASSET_AMT\", aggfunc=[len,np.median]).sort_values('len',ascending=False)\n",
" print('\\n',pivot.sort_values(by=['len','median'],ascending=False).head(10))\n",
" \n",
" # Set the plot style\n",
" sns.set(style='darkgrid')\n",
"\n",
" # Initialize the matplotlib figure\n",
" f, ax = plt.subplots(figsize=(5, 8))\n",
"\n",
" # Plot the data\n",
" sns.set_color_codes(\"pastel\")\n",
" sns.barplot(x=\"median\", y='category', data=pivot.reset_index().sort_values('median',ascending=False).head(10),label=\"Median\", saturation=0.5)\n",
" \n",
" # Add a legend and informative axis label\n",
" ax.legend(ncol=1, loc=\"center right\", frameon=True)\n",
" ax.set(ylabel=\"\",xlabel=\"Top 10 Nonprofit Categories by Median Revenue\")\n",
" sns.despine(left=True, bottom=True)"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"PHILADELPHIA PA\n",
"\n",
"Narrowed to city / state\n",
"\n",
"PHILADELPHIA PA has 7652 nonprofits\n",
"Median ASSETS: 14702.0\n",
"Median REVENUE: 4721.5\n",
"Median INCOME: 25565.0\n",
"\n",
"Top 10 Nonprofit Categories by Asset Amount\n",
"\n",
" len median\n",
"category \n",
"religious 762 0.0\n",
"human_services 440 0.0\n",
"elementary_secondary_schools 407 17978.0\n",
"philanthropy 319 470539.5\n",
"arts 281 1987.5\n",
"community_capacity_bldg 268 3870.5\n",
"rec_sports 161 0.0\n",
"youth_dev 150 0.0\n",
"housing_shelter 123 104246.5\n",
"healthcare 102 52110.0\n"
]
},
{
"data": {
"image/png": "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\nb94cAG9vby5fvkx2djbDhw8vn8GlpqZy6tQpQkNDAejYseNNgzIoKAiA7OxsMjIyGDt2LADFxcV0\n7tyZv/71r7zzzjsMGzYMb29vxo4dS1JSEv/+978ZMmQIdrudsrIyzp49S6NGjZgzZw4eHh5cuHCB\ne+65B4CAgADMZjMAmZmZ5X0+88wz5XXcddddwE+z4MzMzAo5dyIiVYmCspLc6BqjyWSicePGrFmz\nBrPZTHx8PHfeeScnT57kyJEjtGzZkqNHj960fReXny4v+/j44O/vz/Lly/H09GTv3r14eHiQkJBA\np06dGDVqFDt27GDVqlU88sgj3H///cyePRu73c7y5ctp0qQJL7zwAgkJCdStW5fJkydfdwwNGzbk\nzJkzNG3alJiYmPLQ1LVUEanpFJQO5ubmxvPPP8/gwYOx2WwEBATQq1cvRo4cyauvvsrOnTt/1XU+\nk8nE1KlTCQ8Px2az4eXlxfz587ntttuYNGkSb7/9NjabjSlTpnDnnXdy6NAhBg8eTGFhIT179sTD\nw4OnnnqKQYMGUbduXfz8/EhPTy9v+2ezZ88mMjISFxcXGjZsyHPPPce7775b4edHRKSqMdntdruz\ni5A/jtdnPYWfb11nl/GrZWZfpmfvOQQGBhnuZ7F4kZGR56CqHKsmjw00vurOYvGqtLY1o6zCli1b\nxpdfflk+s7Pb7ZhMJv72t7/xpz/9ycnViYj8MSgoq7CXX36Zl19+2dlliIj8oemBAyIiIgYUlCIi\nIgYUlCIiIgYUlCIiIgYUlCIiIgYUlCIiIgYUlCIiIgYUlCIiIgYUlCIiIgYUlCIiIgYUlCIiIgb0\nrFdxqNzcImeX8JtU17pF5PdTUIpDDR+1nJycAmeX8ZsEBDR1dgki4gQKSnEoq9Vao9fEE5GaR9co\nRUREDCgoRUREDCgoRUREDCgoRUREDCgoRUREDCgoRUREDOj2EHGo5OTkanUfZUBAU8xms7PLEBEn\nUlCKQ0WteAkvH3dnl3FL8nKKean/AgIDg5xdiog4kYJSHMrLx516Deo6uwwRkVuma5QiIiIGFJQi\nIiIGFJQiIiIGFJQiIiIGFJQiIiIGFJQiIiIGFJQiIiIGFJQiIiIGFJQiIiIGFJQiIiIGFJQiIiIG\nFJQiIiIGFJRVzHfffcfy5csd3m9SUhJff/31rzomPj6exYsXV1JFIiJVg1YPqWJatWpFq1atHN7v\n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\nxeJFRkaes8uoFDV5bKDxVXcWi1eltV2lZpQVpUmTJkRERBAdHU1ZWRkzZswAIDIykvT0dFasWAHA\nBx98wLZt28pnRXa7HZPJxPjx42nXrp3T6v9ZWloaEydOvKa+++67Tx+aERFxkBo5o5SqSzPK6qsm\njw00vuquMmeUVf7JPCIiIs6koBQRETGgoBQRETGgoBQRETGgoBQRETGgoBQRETGgoBQRETGgoBQR\nETGgoBQRETGgoBQRETFQI5/1KlVXYXZWlWpHRORmFJTiUIteCCUnp6BC2goIaFoh7YiIGFFQikNZ\nrdYa/WBmEal5dI1SRETEgIJSRETEgIJSRETEgIJSRETEgIJSRETEgIJSRETEgG4PEYdKTk7+zfdR\nBgQ0xWw2V3BFIiLGFJTiUGs3f4mPn/+vPi4nM42nekBgYFAlVCUicmMKSnEoHz9/LI2aOLsMEZFb\npmuUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBhSU\nIiIiBhSUIiIiBhSUIiIiBhSUVVBiYiIRERHXfD8sLIyUlBTi4+PZt29fpfWfkJDAY489xj/+8Y/r\nbr948SLbt2+vtP5FRKoSrR5SRZlMphtue/rppyu177179xIZGcnDDz983e3fffcde/fu5YknnqjU\nOkREqgIFpQPFx8eTkJBAQUEBubm5vPTSS7z++uvs2rWLWrVqsWjRIqxWK7fddhspKSm8+OKL5Obm\nMnDgQJ555pnydqKjo7FYLPTv3585c+Zw9OhRSktLGT16NN27d79u33v27GHVqlW4ubnRsGFDlixZ\nwoULF5gxYwZXrlwhPT2dMWPG4OLiwv79+zl27Bg+Pj6kpaWxdu1azGYzHTt2JCIigpUrV/L999/z\nwQcfsGrVKjZv3oy3tzfr16/n8uXLDBs2zFGnVESk0ikoHayoqIi1a9eSlZVFv379sNls192vrKyM\nlStXUlpaylNPPUVwcPA1+yQkJJCbm8umTZvIy8tjzZo1NwzKnTt38uKLL/Loo4/y4Ycfkp+fz8mT\nJxk2bBj33nsvR44cITo6mtWrV/PPf/6T3r1706xZM6ZMmUJcXBzu7u5MnDiRL774gpEjR7Jx40ZC\nQ0NJT09nx44dDBw4kI8++ohly5ZV6PkSEXE2BaWD3XvvvQA0aNAAb29vTp48Wb7NbreXf92uXTvM\nZjNmsxmr1cq5c+eueTv25MmTtG/fHgAvLy9eeeWVG/Y7efJkVq5cSWxsLFarlZ49e2KxWHj77bfZ\nvHkzAFeuXLnqmNOnT5Odnc3w4cOx2+1cvnyZM2fOEBQUVL5Pnz59iIiIoFOnTlgsFnx9fX/jmRER\nqZr0YR4HO3bsGACZmZnk5+fj7+9Peno6drud//znP+X7HT9+HJvNxuXLlzl58iSBgYFXBSnA7bff\nztGjRwHIy8szfMtz48aNjB49mtjYWGw2G//85z9ZunQpf/nLX5g/fz7333//Ne0HBATg7+/PmjVr\niI2N5dlnn6Vdu3a4uLhQVlYGwG233YaXlxcrVqy46u1hEZGaQjNKB8vIyOC5554jPz+fmTNnkp6e\nTnh4OAEBAdSvX798v9q1azN8+HAuXbrE6NGj8fb2vmZG2b17dw4ePMigQYOw2WyMGjXqhv22bduW\nESNG4OHhgYeHB8HBwbi5uTF//nzeeecdGjZsSG5u7lXH+Pr68txzzzF48GBsNhsBAQH06tWL3Nxc\nTpw4wbvvvsuQIUMIDQ0lKiqKhQsXVuzJEhGpAkz2/55GSKWJj48nJSXlurd+VGe7du3ixIkTjB49\n+qb7Ll69F0ujJr+6j4wLqTzYzo/AwKCb7+xEFosXGRl5zi6jUtTksYHGV91ZLF6V1rZmlDXIlStX\neOGFF66ZeQYFBTFr1qxK6XPJkiUcOnSIlStXVkr7IiLOpqB0oMq+/9HNzY3Y2NhK7eO/jRs3zqH9\niYg4mj7MIyIiYkBBKSIiYkBBKSIiYkBBKSIiYkBBKSIiYkBBKSIiYkBBKSIiYkBBKSIiYkBBKSIi\nYkBBKSIiYkBBKSIiYkDPehWHyslM+x3H+VVsMSIit0BBKQ71XN8HyMkp+A1H+hEQ0LTC6xERuRkF\npTiU1Wqt0WviiUjNo2uUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBhSUIiIiBnR7iDhUcnLy\nLd1HGRDQFLPZ7ICKRESMKSjFoT75RyINff0N90nPToPeEBgY5KCqRERuTEEpDtXQ158/NWzi7DJE\nRG6ZrlGKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgY\nUFCKiIgYUFCKiIgYUFCKiIgY+E1B2b17d0pKSiq6lutKS0tj3759DunLUbp27erU/n/v63fu3Dn6\n9+9fgRWJiFRdvykoTSZTRddxQ19++SXffPONw/r7I6iI18+RPwMiIs5002W2SktLmTFjBmfOnMFm\nszFmzJjybT/++CPTpk2juLiY2rVrM2fOHEpLSxk3bhyNGzfm/Pnz9OrVixMnTnD8+HEefvhhxo0b\nR1JSEnPnzgWgfv36zJs3j+PHjxMTE4Obmxtnz56ld+/eDB8+nHfeeYfi4mLuuecePD09iY6Oxm63\nc/nyZRYtWoSrqysjR47Ex8eH++67jw8//JA9e/ZgMplYuHAhbdq04fHHH79mXCUlJYwZM4b8/HyK\niooYN24cnTt35uOPP2bdunWYzWY6duxIREQE2dnZTJ48mUuXLgHwxhtv4OPjw4QJE8jPz6esrIyx\nY8dy//33ExISwn333cf333+PyWRi+fLl1K1bl2nTppGcnExAQABXrlwB4MSJE7z++uvYbDZycnKY\nOXMm7du3Jzg4GKvVitVqZd++fWzevBlvb2/Wr1/P5cuXGTZs2HVfq8jISFJTUykqKmLIkCGEhISw\nb98+li1bBkDr1q2ZNWsWdrudmTNnkpqaislkYtmyZdSpU6f8eLvdztChQ+nVqxfHjx9n7ty5mM1m\n3N3dy1+3ny1ZsoRDhw5hs9l49NFHefHFF2/l505EpNq4aVBu2rQJX19foqKiyM3NZfDgweXb5s+f\nz5AhQ+jWrRtffPEFCxYsYNy4cZw9e5Y1a9ZQWFhIjx49OHDgAO7u7nTv3p1x48Yxbdo05s2bh9Vq\nZfPmzcTExNClSxfS0tLYtm0bRUVFdOvWjREjRhAeHk5KSgrBwcG8//77LFy4EIvFwsqVK9m1axdP\nPPEEWVlZbN26FbPZzLlz5/jss8/o2rUr+/fvZ+zYsdcd15kzZ8jNzWXVqlVkZWVx6tQpLl68SHR0\nNHFxcbi7uzNx4kQOHjzIvn376NGjB/379+fbb7/l6NGjHDt2jC5duhAWFsaFCxcYNGgQn3zyCfn5\n+Tz55JO89tprvPrqq+zfvx+z2UxJSQkbNmwgLS2NPXv2AD8F5eTJk2nRogXbt28nLi6O9u3b8+OP\nP/Lhhx/i7e2Nl5cXO3bsYODAgXz00UflofffCgoKOHz4MBs3bgTg4MGDlJWVMWfOHLZs2YKPjw+r\nV6/mxx9/BKBfv3506NCByMhIPv/8c7KysmjQoAELFiygoKCAPn368Oc//7n8tWrZsiWffPIJ8+bN\nY9KkSeX9bt++ndjYWPz8/Ni6dest/tiJiFQfNw3KpKQkDh8+zL/+9S8AysrKyMnJKd+2cuVKYmJi\nsNvtuLm5AdCkSRM8PDxwc3PDz88PLy+vq9pMTk5m1qxZwE8z1sDAQADuuOMOTCYTderUoXbt2tfU\n0qhRI+bMmYOHhwcXLlzgnnvuASAgIACz2QxA3759iY2NxWaz0aVLF1xdrz/E22+/nf79+xMREUFp\naSlhYWGcPn2a7Oxshg8fXj5rTU1N5dSpU/Tt2xeA9u3b0759e7Zt28ZTTz1VXpeXlxdZWVkA3Hnn\nnQD4+/tTUlLChQsXaNu2bfn3/P39y4/7eTaXn5+Pp6cnAL6+vnh7ewPQp08fIiIi6NSpExaLBV9f\n3+uOx8PDg8jISKZNm0ZBQQEhISHk5ORQv359fHx8AMpnoiaTibvuugsAPz8/ioqKSE5OpnPnzuVt\n3X777aSmppKRkUHLli0BuPfee1m8ePFV/S5YsICFCxeSmZnJgw8+eN3aRESqs5sGZfPmzfH39yc8\nPJzi4mLefvttPvroIwCsVisvvPAC7du35+TJk3z99dfXHG+326/b5htvvEHjxo355ptvyMzMBK5/\n3ctkMmGz2QCYNm0aCQkJ1K1bl8mTJ1+1z886duxIVFQUW7ZsueFsEn4K+YKCAlauXElGRgYDBw5k\n06ZN+Pv7s2bNGsxmM/Hx8dx5552kpKRw9OhRWrZsyVdffcWnn36K1Wrlq6++olWrVly4cIFLly5R\nv3796/ZltVrZuXNn+ezzwoULAERFRbFw4UKaN2/OW2+9xfnz568Zz2233YaXlxcrVqzgmWeeueF4\nMjIyOHbsGNHR0ZSUlPDwww/z5JNPcunSJS5duoS3tzdz584lJCTkuq+J1Wrl66+/pmfPnuTn55OU\nlERAQAANGzbk+++/p2XLliQmJtKsWTPgp9f1ypUr7Nq1qzw8e/XqRe/evcv/EBARqQluGpT9+/dn\n2rRphIWFUVBQwMCBA8t/kU+YMIGZM2dSUlJCcXExU6dOBa7+RX+98JsxYwYTJkygrKwMFxcXoqKi\nysPjv7Vs2ZKVK1fSunVrnnrqKQYNGkTdunXx8/MjPT39un2EhISwa9curFbrDcfVrFkzoqOj+fjj\nj7Hb7YwZMwYfHx+ee+45Bg8ejM1mIyAggF69ehEeHs6UKVP46KOPyuv18vJiypQp7N69m+LiYubM\nmYPZbL7u2Hv27MnBgwfp378//v7+5bPCkJAQxowZQ7169WjUqBG5ubnXrTU0NLQ8VG/EYrGQkZHB\ngAEDcHV1ZdiwYbi6ujJjxgzCw8Mxm820bt2atm3bXrfG/v3789prrzFo0CCKi4sZNWoUvr6+zJkz\nhzlz5mC323F1dSUqKqr8ODc3N+rVq0doaCi1a9emW7duCkkRqXFM9utNL6q51atX4+PjQ58+fZxd\nSoXYtWsXJ06cYPTo0c4u5Xfb+tb/8KeGTQz3OZeeSsCffQkMDHJQVRXHYvEiIyPP2WVUipo8NtD4\nqjuLxevmO/1GN51RVjeRkZGkp6ezYsUKAD744AO2bdtWPnOy2+2YTCbGjx9Pu3btnFnqLfn5U6Ur\nV64EYO/evaxZs+aa8QwZMoSePXs6s1QRkRqpRs4operSjLL6qsljA42vuqvMGaUeYSciImJAQSki\nImJAQSkiImJAQSkiImJAQSkiImJAQSkiImJAQSkiImJAQSkiImJAQSkiImJAQSkiImJAQSkiImKg\nxj0UXaq29Oy0W9ongOsvUC0i4mgKSnGoHs/eR05OgeE+AfgSENDUQRWJiBhTUIpDWa3WGr2CgYjU\nPLpGKSIiYkBBKSIiYkBBKSIiYkBBKSIiYkBBKSIiYkBBKSIiYkC3h4hDJScnG95HGRDQFLPZ7MCK\nRESMKSjFob5YvQd/n0bX3ZaWcwH6QGBgkIOrEhG5MQWlOJS/TyOa+N3m7DJERG6ZrlGKiIgYUFCK\niIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgYUFCKiIgY\nUFCKiIgYUFDWAIsWLWLr1q0V0lZCQgIZGRlkZmYye/bsCmlTRKQ6U1DKVdatW0d+fj5+fn5Mnz7d\n2eWIiDidltmqBkpLS5kxYwZnzpzBZrMxZswYcnNzefvtt/H19eXKlStYrVYSExPZsGEDixcvBqBr\n164cOHCA06dP89prr3HlyhXq1KnD4sWLyczM5PXXX8dms5GTk8PMmTO5ePEi3333HZMmTeKNN95g\n0qRJbNy4kc8//5ylS5fi7u6Oj48P8+bN4/jx48TExODm5sbZs2fp1asXI0eOdPKZEhGpeArKamDT\npk34+voSFRVFbm4ugwcPprCwkK1bt+Lt7U14eHj5viaT6Zrj58+fz8iRI+nSpQv79u3jP//5Dxcv\nXmTy5Mm0aNGC7du3ExcXx+zZs2nVqhVz5szBzc2tvK3p06ezYcMGLBYLsbGxLFu2jODgYNLS0ti2\nbRtFRUV069ZNQSkiNZKCshpISkri8OHD/Otf/wJ+mmG6uLjg7e0NQIcOHQyPT0lJoV27dgAEBwcD\ncPjwYZYtW0adOnXIz8/H09OzfH+73V7+dXZ2Np6enlgslv/b3r1HRXGffQD/suByNXIxGN7qi3JR\nWkADEkFBQINGhVUuVUuOGhKMYos1VjhAZBe5iiWICdYc22M8iRgDVpNGkFQSFUwAUSJgImIpGojc\nEQmg3Haf9w8O87Jc1rQVFfp8/mJndn7zPDOz+8z8dpgfAMDBwQEpKSlYsmQJZs+eDTU1NWhra0NL\nS+vxJcwYY88QLpTjgJmZGUxMTLBlyxZ0d3fj/fffR2ZmJlpbW2FgYIDr16/DxMQEmpqaaGxsBADc\nvXsX9+/fBwBYWFjg+vXrWLhwIc6cOYO2tjacPn0a77zzDszMzJCamora2loAgEgkgkKhENZtaGiI\nzs5ONDc3Y+rUqSgqKsLMmTOf+DZgjLGnhQvlOLB+/XpIpVJs3LgRnZ2d8Pf3h1QqRWBgIPT19aGh\n0b8bbWxsMHnyZKxfvx5mZmaYMWMGACA0NBQymQyHDh2Cjo4OkpKS0NfXhx07dmDKlCmYNm2aUFTt\n7OwQFhamdMdrbGwsgoODhavYxMRE3Lp1a8RuXsYYm2jUaHA/G2Nj7Kuk05gx9X9GnFfTXIspSyxg\najrrCUf1+Dz//GQ0NbU/7TDGxETODeD8xrvnn588Zm3zv4cwxhhjKnChZIwxxlTgQskYY4ypwIWS\nMcYYU4ELJWOMMaYCF0rGGGNMBS6UjDHGmApcKBljjDEVuFAyxhhjKnChZIwxxlTgQskYY4ypwIWS\nMcYYU4FHD2FPVF1rg8p5U2DxBKNhjLFH40LJnqiFgcvR2to54rwpsMD06f/7hCNijDHVuFCyJ8rc\n3HxCD/XDGJt4+DdKxhhjTAUulIwxxpgKXCgZY4wxFdSIiJ52EIwxxtiziq8oGWOMMRW4UDLGGGMq\ncKFkjDHGVOBCyRhjjKnAhZIxxhhTgQslY4wxpgIXSsYYY0wFftYrG3NEhD179qCiogJisRjx8fGY\nMWPG0w5rVKWlpXjnnXdw7NgxVFdXIzw8HCKRCJaWloiKigIAZGRkID09HZMmTUJQUBDc3d3R3d2N\n0NBQtLS0QE9PD4mJiTAwMEBJSQkSEhKgoaGBRYsWITg4GABw8OBB5ObmQkNDAxEREZg7d+6Y5tXX\n15JfBZ8AABJbSURBVIe3334bd+/eRW9vL4KCgmBhYTFh8lMoFIiMjMTt27chEokQHR0NsVg8YfID\ngJaWFvj5+eHo0aNQV1efULn5+vpCT08PADB9+nQEBQU9O/kRY2Ps3LlzFB4eTkREJSUltG3btqcc\n0ej+8pe/kJeXF61fv56IiIKCgujKlStERCSTySgnJ4eamprIy8uLent7qb29nby8vKinp4eOHj1K\nqampRESUlZVFcXFxRES0Zs0aqqmpISKiN998k8rLy+n777+n1157jYiIamtryc/Pb8xzO3XqFCUk\nJBARUVtbG7m7u0+o/HJycujtt98mIqLLly/Ttm3bJlR+vb299Lvf/Y5eeeUVqqqqmlC5dXd3k4+P\nj9K0Zyk/7nplY664uBiLFy8GAMybNw/ffffdU45odKampvjTn/4kvP7+++/h4OAAAHB1dUV+fj7K\nysowf/58aGhoQE9PDzNnzsTNmzdRXFwMV1dX4b2FhYXo6OhAb28vpk+fDgBwcXHBN998g+LiYjg7\nOwMATExMoFAo0NraOqa5rVy5Ejt27AAAyOVyqKur48aNGxMmPw8PD8TGxgIAamtrMWXKlAmV3759\n++Dv7w9jY2MQ0YTK7ebNm3jw4AECAwMREBCA0tLSZyo/LpRszHV0dGDy5MnCaw0NDSgUiqcY0eiW\nLVsGdXV14TUNesKjrq4uOjo60NnZqZSPjo6OMH2g60hXVxft7e1K04ZOH6mNsaStrS2sZ8eOHdi5\nc+eEyg8ARCIRwsPDERcXBy8vrwmT3+nTp2FkZARnZ2chp8GfofGcGwBoaWkhMDAQR44cwZ49exAS\nEvJM7Tv+jZKNOT09PXR2/v9gzQqFAiLR+DhHGxxnZ2cnnnvuOejp6Sl9sAZPH8hz4MM48AEf/N4p\nU6Zg0qRJSttk6Id3rNTV1SE4OBgbNmyAp6cnkpKSJlR+AJCYmIiWlhb8+te/Rnd394h5jLf8Tp8+\nDTU1NXzzzTeoqKhAWFiY0lXQeM4NAGbOnAlTU1Phb319fdy4ceOZyW98fFuxcc3e3h65ubkAgJKS\nEsyePfspR/Tz/epXv8KVK1cAAHl5eZg/fz5sbW1RXFyMnp4etLe3o6qqCpaWlrCzsxPyzM3NhYOD\nA/T09CAWi1FTUwMiwtdff4358+fDzs4OX3/9NYgItbW1ICLo6+uPaS7Nzc0IDAxEaGgofHx8AAC/\n/OUvJ0x+f/vb3/DnP/8ZAKCpqQmRSAQbGxsUFRWN+/zS0tJw7NgxHDt2DFZWVvjjH/+IxYsXT5h9\nd+rUKSQmJgIAGhoa0NHRAWdn52dm3/HoIWzM0aC7XgFg7969mDVr1lOOanR3797Frl278Mknn+DO\nnTuQSqXo7e2Fubk54uLioKamhpMnTyI9PR1EhG3btsHDwwNdXV0ICwtDU1MTxGIxkpOTYWRkhLKy\nMsTHx0OhUMDZ2RlvvfUWgP477/Ly8kBEiIiIgL29/ZjmFR8fj+zsbJiZmYGIoKamht27dyMuLm5C\n5Pfw4UNERESgubkZfX192Lp1K8zMzBAZGTkh8huwadMmREdHQ01NbcIcm729vYiIiEBtbS1EIhFC\nQ0Ohr6//zOw7LpSMMcaYCtz1yhhjjKnAhZIxxhhTgQslY4wxpgIXSsYYY0wFLpSMMcaYClwoGWOM\nMRW4ULJxKyYmBt7e3vD09ISNjQ18fHzg4+ODTz/99LG0397eDk9PTzQ0NAjTLl26BIlEgldeeQUH\nDx4ccTk3N7dh80JDQ3HmzJnHEte/6vr163j55Zfx+uuv48CBA8jLywMABAQEjPh+IsKRI0fg7e0N\nHx8f+Pn54YsvvnjkelJSUlBSUvI4Qx9xHQPx/7v+k33h7++PBQsWQC6XK0338vLCG2+88S+15ebm\nhoaGBnz55Zc4dOjQvxXPYAcOHICLiwt8fHzg7e2NlStXwtvbG6Wlpf9x2//t+BF2bNySyWQA+h8Q\nsGnTpsdWIIH+JwhJpVJUV1cL0x4+fAiZTIYTJ07A2NgYgYGBKCgowMKFC4ct/8EHH8DDwwNWVlaP\nLaZ/14ULF+Dt7Y3t27cL0/r6+oSnugyVlJSEqqoqfPzxx9DR0UFdXR02btwIQ0NDLFiwYNT1XLly\nBW5ubo89/sF27tw5pu0/ipqaGnR1dZGfny886L+yshL37t2DsbHxv9wW0P8wdw8Pj8cS34YNGxAU\nFCS8/uCDD5CYmIgTJ048lvb/W3GhZBPSgwcPIJVKcevWLYhEImzevBkSiQQnT57EhQsXcP/+fbS0\ntMDDwwOhoaHDls/IyEBMTIzSF3NJSQnMzc3xwgsvAAAkEgmys7NHLJRbt25FeHg4Tp06pfSQdQD4\n6quvkJqaCiKCqakpoqOjYWBgADc3N/j5+eHSpUvo6upCUlISrKys8Oqrr2LOnDkoLS1Fb28vdu/e\nDScnJ4SGhqK9vR01NTUICwvD5MmTkZCQgJ6eHhgZGSE6Ohr/+Mc/kJGRATU1NYjFYlRWVmLx4sW4\ndu0a5HI5/P39lb5EOzo6cPz4cZw7dw46OjoA+kdYSElJEV5/+OGHyMrKwsOHD6Guro4DBw7g22+/\nRXl5OSIiInDo0CGoq6sjOjoabW1t0NHRQWRkJKysrFBXVyfEPWfOHBQVFeHixYsq91dmZiZaW1ux\nbNkyVFdXw9XVFRKJBKdPn0ZaWhqICLa2tpBKpQCAiIgIVFVVAegvHL6+vsP2T05ODo4ePYq+vj5s\n374dy5Ytw29+8xvs3LkTjo6OAPofkJ+eng5DQ0OlZZcvX44vvvhCKJRnz57FihUrcOfOHQD9jwqU\nyWRoaGiAuro6du3aBUdHR9y/fx8hISFobGyEpaUlenp6AAAnT55EaWkp4uLikJWVhY8++gjd3d3o\n7u5GfHw87O3t8eqrr8Le3h5Xr15Fa2sroqKisGjRohGP/QFEhLq6OuHxbEPjCgkJgb29Pdzd3ZGZ\nmQl9fX20trZizZo1uHjxIvLy8nDw4EEoFArMmDEDsbGxeO6551QepwNtVldXY/PmzTh37tyo22Nc\neeRAXIw943788UdaunSp0rS9e/dSYmIiERG1tLTQkiVLqLKykjIyMsjV1ZVaW1upp6eH1q5dS+fP\nnx+1bVdXV6qvrycios8++0wYV5OIKC8vj7Zs2TJsGTc3N6qvr6etW7cKY+SFhITQ559/To2NjUpt\nHj58mP7whz8I6zp+/DgRER09epR27txJRET+/v4klUqJiOi7774jFxcXksvlFBISQpGRkUTUP56f\nu7s7lZeXExFRZmamMKZmSkoKvf/++0px9PX1kbW19bDYS0pKyNXVddTt8dNPP9Ebb7xB3d3dRES0\nf/9+2rt3rxDnt99+S0RE69ato4qKCiIiqqiooFWrVhER0bZt2ygjI4OIiLKzs4UYEhISRt1fK1eu\nFNY/EP/Nmzdpw4YN1NPTQ0RE+/bto8OHD1N+fr4w3mlLS4swPuVgISEhFBQURERE9fX15OzsTPfu\n3aOMjAyKiIggIqKCggLhPYP5+/tTfn4+LV26lORyORER+fr60sWLF+n1118nIqLt27dTbm6u0L6H\nhwd1dXWRTCYTjofCwkKysrKi+vp6ysjIoMjISJLL5RQQEEBtbW1ERJSenk7BwcHCevft20dE/eNu\nrl27dlhsKSkp5OzsTN7e3rRkyRJyd3en6Ohoam5uVhlXTEwMffLJJ0RE9PHHH1NcXBw1NzeTt7c3\ntbe3ExFRWloayWQyIlJ9nBYXFxMR0Q8//EDLly9Xud7xhK8o2YRUWFiI5ORkAIChoSGWLl2KoqIi\naGhowMPDQzjLXrVqFQoLC7FkyZJHtkkjPO1xoPtspPfFxMTAx8dHqVuttLQUdnZ2mDZtGgBg3bp1\n8PT0FOYPXKXMnj0bly5dEqavW7cOAGBtbQ1DQ0PcunULAISR2auqqjB16lShq9fT0xNRUVHo6up6\nZF5D8xkpzwGTJ0/Gvn37cObMGdy5cweXLl1SGh2eiNDe3o4bN24gLCxMaKujowMdHR0oKChASkoK\nAGDFihXCqPWXL18edX9ZW1sPi6OwsBC3b9/GunXrQETo7e3FvHnzsHbtWlRWVmLz5s1wc3PDrl27\nRsxj4Cpz2rRpmDt3LsrKyrBq1Sq899576OnpwWeffTbilSjQ/8D1F198EZcvX4aBgQHMzc0hFouF\n+QUFBaipqcH+/fsB9I/9WV1djaKiImGsU0dHR5iYmCi1KxKJkJqaivPnz+P27du4fPkytLW1hfkD\nx4alpSXa2tpGjG2g67WxsREBAQGwsbGBkZHRqHHV1NRg9erVSE5Oxvr165GVlYWwsDBcu3YNtbW1\n2LhxI4gIcrkczz///LBYhh6nIxltvRYWFiqXe5ZwoWQT0tDxLgc+7BoaGkpdoQqFYljX6GimTZuG\npqYm4XVTU5PK36WMjY0RGhqK8PBwmJmZCXEMLkQKhQJ9fX3C64Ev3KEFS0NDQ2mZgddaWlrCtKEF\nTqFQDLvpZLCRCqKlpSXa29vR1NSk9MV45swZ/PTTT3B3d0dAQAA2btwINzc3GBkZ4Z///KdSG3K5\nHDo6Okq/GTc0NEBPTw/q6uojrlfV/hrIcej7JRIJwsLCAPR3tSsUCujp6SEzMxP5+fm4ePEifHx8\ncPbsWejq6iotP/QYmDRpEnR1deHi4oLs7GxcuXIFcXFxo267FStWIDs7GwYGBli1atWw2I4fPy50\nVTc1NWHq1KnD9unQ466jowN+fn7w9fWFo6MjLC0t8de//lWYr6mpCWDkk7OhjI2NERMTgzfffBML\nFy6EiYkJiEgprsbGRuH4bWpqwvXr19Ha2gpbW1vU1dXB0dER7733HgCgp6cHDx48ENof6Tgd/Hdv\nb++o22PwescLvuuVTQhDv3wXLlwofMncu3cPFy5cwEsvvQSgfxieBw8eoKurC1lZWcLI6I9iZ2eH\nyspK/Pjjj+jr60NmZuYjl/X29sYLL7yAnJwcAMC8efNw7do11NfXA+j/LdTJyemR687KygLQf0X6\n8OHDYWfj5ubmaGlpQXl5OYD+wjZr1qxhBWLAaCcH2tra8Pf3R1RUlDBmX01NDVJSUmBubo6ysjKY\nm5tj06ZNsLW1RW5urlCM1dXVIZfLoa+vDxMTE5w9exZA//betGkTAGDRokXCHafnz58X1uHk5DTq\n/hrJggUL8Pe//x337t0DEUEqlSItLQ05OTmIiIiAu7s7IiMjoampqXTX8oDMzEwht5s3b8LW1hZA\n/5Xm/v37sXTpUqWTk6FcXV1RUFCA/Px8uLi4KM1zcnJCWloaAKCiogISiQTd3d1YtGgRPv/8cwD9\nv3ffvXtXabmqqiqIxWJs3boVCxYsQF5e3qgnOqqu+gc4ODjA1dVVGHPU0dFRKa7Vq1cLPQ4DPRAD\nvRsvvvgirl69ipqaGgDAu+++K1zxj8bAwACVlZUAgC+//HLU7TF4veMFX1GyCWHoWfb27dsRFRUF\niUQCIkJwcDDmzJmDsrIyGBgYIDAwEPfv34evr6/KQjW4XS0tLSQkJOC3v/0tenp68PLLL494t+LQ\nWGJiYiCRSAD0n+lHRUUhKCgIfX19mD59OuLj40dcbrAffvgBPj4+EIlEOHDgwLD3a2pqIjk5GTKZ\nDF1dXdDX1xe6OEeLzc3NDRKJBJ9++qlSUQgJCUFqairWrl0LsVgMdXV1REREwMnJCZ2dnUhPT4eX\nlxfEYjFsbGyEm1hcXV0RGRmJpKQkJCcnY8+ePTh8+DDEYjHeffddAMDu3bsRFhaGEydOwMrKSijk\nv//970fdXyPFb21tjaCgILz22msgIlhbWyMwMBAAcO7cOXh6ekJTUxNeXl7C1fzgNrS0tODr6wu5\nXI74+Hhh4N6XXnoJcrl81G7XgfVrampi7ty50NLSGlZQZTIZZDIZVq9eDTU1NaSkpEBLSwtvvfUW\nwsLCIJFIYG5ujhkzZigtZ2NjAwsLC6xYsQLa2tpwcHDA1atXh+23kV6PZteuXfDy8kJZWRmioqIg\nlUqHxQUAa9aswaFDh4QrSGNjY8TGxiI4OBgKhQK/+MUvhII72rq3bNmC8PBwpKenK30uRtse4wkP\ns8X+q5w8eRJlZWWIjY192qH8bIPvJhzvPvzwQ7i5uWHmzJnCWIHp6elPOyxBeXk5pFKpUpcnY3xF\nydgz7udePYwHpqam2LFjB0QiEbS0tBAdHf20QxIcOXIEH330EVJTU592KOwZw1eUjDHGmAp8Mw9j\njDGmAhdKxhhjTAUulIwxxpgKXCgZY4wxFbhQMsYYYyr8HwzgLv4FBYhDAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1033bafd0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"summarizeCity('PHILADELPHIA','PA')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CHICAGO\n",
"IL\n",
"CHICAGO IL\n",
"\n",
"Narrowed to city / state\n",
"\n",
"CHICAGO IL has 16432 nonprofits\n",
"Median ASSETS: 65583.0\n",
"Median REVENUE: 5826.5\n",
"Median INCOME: 61064.0\n",
" median len\n",
"category \n",
"philanthropy 634626.0 1158\n",
"mutual_member_benefit 612455.5 88\n",
"housing_shelter 209249.0 182\n",
"allergy_disease_research 121349.5 16\n",
"med_research 46304.0 37\n",
"healthcare 41454.0 171\n",
"public_safety 18808.5 24\n",
"community_capacity_bldg 12433.5 563\n",
"environment 7450.5 63\n",
"diseases 7210.5 85\n",
"civil_rights 2691.0 56\n",
"elementary_secondary_schools 1245.5 797\n",
"education 1179.0 145\n",
"rec_sports 326.5 246\n",
"international 1.0 129\n",
"crime_and_legal 1.0 94\n",
"science_tech 0.5 21\n",
"religious 0.0 1200\n",
"human_services 0.0 785\n",
"arts 0.0 691\n",
"youth_dev 0.0 287\n",
"mentalhealth_crisisintervention 0.0 231\n",
"employment 0.0 119\n",
"public_social_benefit 0.0 110\n",
"animal 0.0 67\n",
"historical 0.0 66\n",
"unknown 0.0 59\n",
"food 0.0 47\n",
"social_science 0.0 23\n"
]
}
],
"source": [
"## Create a widget to interact with data\n",
"city = widgets.Text(description=\"String\",value=\"City (ALL CAPS)\")\n",
"display(city)\n",
"\n",
"state = widgets.Text(description=\"String\",value=\"State (Abbr, ALL CAPS)\")\n",
"display(state)\n",
"\n",
"def handle_submit(sender):\n",
" print(city.value)\n",
" print(state.value)\n",
"\n",
" summarizeCity(city.value,state.value)\n",
" \n",
"city.on_submit(handle_submit)\n",
"state.on_submit(handle_submit)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"biganimals = data[data['category']=='animal'].sort_values(by='ASSET_AMT',ascending=False).groupby('STATE').head(10)\n",
"biganimals.to_csv('/Users/tylerdahlberg/Downloads/biganimals.csv')"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"bigsports = data[data['code']=='N50'].sort_values(by='REVENUE_AMT',ascending=False).head(10)\n",
"bigsportsprint = bigsports[['NAME','ASSET_AMT','CITY','STATE']]\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment