Skip to content

Instantly share code, notes, and snippets.

@detrout
Created May 21, 2020 17:34
Show Gist options
  • Save detrout/a9ee8510f0e4c40af00f65d5d7223a20 to your computer and use it in GitHub Desktop.
Save detrout/a9ee8510f0e4c40af00f65d5d7223a20 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Demo of how I think it'd be useful to show the fraction population"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas\n",
"from matplotlib import pyplot"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 17 4\n",
"18 34 26\n",
"35 49 25\n",
"50 64 24\n",
"65 79 12\n",
"80 99 8\n",
"Name: cases, dtype: int64"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cases = pandas.Series({\n",
" (0,17): 4,\n",
" (18,34): 26,\n",
" (35,49): 25,\n",
" (50,64): 24,\n",
" (65,79): 12,\n",
" (80,99): 8, \n",
"})\n",
"cases.name = 'cases'\n",
"cases"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"MultiIndex([( 0, 17),\n",
" (18, 34),\n",
" (35, 49),\n",
" (50, 64),\n",
" (65, 79),\n",
" (80, 99)],\n",
" )"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cases.index"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# http://www.dof.ca.gov/Forecasting/Demographics/Projections/documents/P1_Age_1yr.xlsx\n",
"ages_yr = pandas.read_excel(\n",
" 'http://www.dof.ca.gov/Forecasting/Demographics/Projections/documents/P1_Age_1yr.xlsx',\n",
" skiprows=[0,1,105],\n",
" index_col=0,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Population\n",
"Age (0-100+) 40129160\n",
"0 458584\n",
"1 450783\n",
"2 454325\n",
"3 475575\n",
" ... \n",
"96 21404\n",
"97 12190\n",
"98 6593\n",
"99 3199\n",
"100 2948\n",
"Name: 2020, Length: 102, dtype: int64"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ages_yr['2020']"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"age_band_percent = {}\n",
"for start, end in cases.index:\n",
" total_population = ages_yr['2020'].loc['Age (0-100+)']\n",
" band = 0\n",
" for year in range(start, end+1):\n",
" #print(start,end,ages_yr['2020'].loc[year+1])\n",
" band += ages_yr['2020'].loc[year+1]\n",
" age_band_percent[(start,end)] = (band / total_population) * 100\n",
"age_band_percent = pandas.Series(age_band_percent)\n",
"age_band_percent.name = '% pop'"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead tr th {\n",
" text-align: left;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th>0</th>\n",
" <th>18</th>\n",
" <th>35</th>\n",
" <th>50</th>\n",
" <th>65</th>\n",
" <th>80</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>17</th>\n",
" <th>34</th>\n",
" <th>49</th>\n",
" <th>64</th>\n",
" <th>79</th>\n",
" <th>99</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>cases</th>\n",
" <td>4.00000</td>\n",
" <td>26.000000</td>\n",
" <td>25.000000</td>\n",
" <td>24.000000</td>\n",
" <td>12.000000</td>\n",
" <td>8.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>% pop</th>\n",
" <td>22.88413</td>\n",
" <td>24.078184</td>\n",
" <td>19.245484</td>\n",
" <td>18.181123</td>\n",
" <td>11.034422</td>\n",
" <td>3.433887</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" 0 18 35 50 65 80\n",
" 17 34 49 64 79 99\n",
"cases 4.00000 26.000000 25.000000 24.000000 12.000000 8.000000\n",
"% pop 22.88413 24.078184 19.245484 18.181123 11.034422 3.433887"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pandas.DataFrame([cases, age_band_percent])\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f8dd55dd1f0>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 288x216 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"f = pyplot.figure(figsize=(4,3))\n",
"ax = f.add_subplot()\n",
"df.T.plot.bar(ax=ax)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"f.savefig('/run/user/1000/covid_percent_pop.png')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment