From 3360e6506953cb54794490191756a21642c1c906 Mon Sep 17 00:00:00 2001 From: Susan Li Date: Mon, 30 Aug 2021 02:47:11 -0400 Subject: [PATCH] Add notebook --- FSA Matcher.ipynb | 1619 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1619 insertions(+) create mode 100644 FSA Matcher.ipynb diff --git a/FSA Matcher.ipynb b/FSA Matcher.ipynb new file mode 100644 index 0000000..b65ba14 --- /dev/null +++ b/FSA Matcher.ipynb @@ -0,0 +1,1619 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import pandas as pd\n", + "import psycopg2\n", + "import pyodbc\n", + "from dotenv import load_dotenv\n", + "\n", + "load_dotenv()\n", + "\n", + "# Pen Air creds\n", + "server = os.getenv('PENAIR_HOST')\n", + "database = os.getenv('PENAIR_DB')\n", + "username = os.getenv('PENAIR_USER')\n", + "password = os.getenv('PENAIR_PASSWORD')\n", + "\n", + "# Data Lab\n", + "reader_creds = \"user={} password={} host={} port={} dbname={}\".format(\n", + " os.environ[\"PG_USER\"],\n", + " os.environ[\"PG_PASSWORD\"],\n", + " os.environ[\"PG_HOST\"],\n", + " os.environ[\"PG_PORT\"],\n", + " 'utility'\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### FSA Income Data\n", + "This query will fetch the FSA income data which I put in the Data Lab a while back. It will populate a dataframe for you." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [], + "source": [ + "fsa_query = \"\"\"\n", + " SELECT *\n", + " FROM fsa_income_2016\n", + "\"\"\"\n", + "con = psycopg2.connect(reader_creds)\n", + "fsa_df = pd.read_sql(fsa_query, con=con)\n", + "\n", + "con.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
prov_terrfsatotaltotal_incomelt2020_2425_2930_3435_3940_4445_4950_5455_5960_6465_6970_74gt75
010A0A4018016705590001500232023202550273030903360386041504110395027703470
110A0B1786070628900064097088082087010201400167019502150203015201960
210A0C1113037638700032054049055057075095011001230132011708801260
310A0E1971076788700070011009401050115013801710192020202220209014801960
410A0G3122010699820001010147013601400174022102580298031903600347025903630
\n", + "
" + ], + "text/plain": [ + " prov_terr fsa total total_income lt20 20_24 25_29 30_34 35_39 \\\n", + "0 10 A0A 40180 1670559000 1500 2320 2320 2550 2730 \n", + "1 10 A0B 17860 706289000 640 970 880 820 870 \n", + "2 10 A0C 11130 376387000 320 540 490 550 570 \n", + "3 10 A0E 19710 767887000 700 1100 940 1050 1150 \n", + "4 10 A0G 31220 1069982000 1010 1470 1360 1400 1740 \n", + "\n", + " 40_44 45_49 50_54 55_59 60_64 65_69 70_74 gt75 \n", + "0 3090 3360 3860 4150 4110 3950 2770 3470 \n", + "1 1020 1400 1670 1950 2150 2030 1520 1960 \n", + "2 750 950 1100 1230 1320 1170 880 1260 \n", + "3 1380 1710 1920 2020 2220 2090 1480 1960 \n", + "4 2210 2580 2980 3190 3600 3470 2590 3630 " + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fsa_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [], + "source": [ + "address_query = \"\"\"\n", + " SELECT\n", + " FOLDERNO,\n", + " DELIVERYADD\n", + " FROM dbo.FolderMaster\n", + " WHERE\n", + " CUSTOMERNAME = 'PC Travel'\n", + " AND LEN(DELIVERYADD) > 0\n", + "\"\"\"\n", + "conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)\n", + "with conn.cursor() as cur:\n", + " cur.execute(address_query)\n", + " results = cur.fetchall()\n", + "conn.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [], + "source": [ + "my_fsa = []\n", + "for folderno, address in results:\n", + " lower_address = address.lower()\n", + " matches = [\n", + " fsa for fsa in fsa_df['fsa'].values\n", + " if fsa.lower() in lower_address and address[lower_address.find(fsa.lower()) - 1].isspace()\n", + " ]\n", + " if len(matches) == 1:\n", + " my_fsa.append(matches)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "51333" + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(my_fsa)" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": {}, + "outputs": [], + "source": [ + "my_fsa = pd.DataFrame(my_fsa).rename(columns={0: 'fsa'})\n", + "my_fsa = pd.merge(my_fsa, fsa_df, on='fsa', how='left')" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
fsaprov_terrtotaltotal_incomelt2020_2425_2930_3435_3940_4445_4950_5455_5960_6465_6970_74gt75
0P0S358020343170000300500540500490530640790950870750480690
1N0H354002020155360001420232024402520241022002340323040604540427031705100
2T6E48172909950960002901450300026201760118010801170112011308705701060
3M2N357193031978000001690579086508800769068206490590049004050345024805230
4K7M353708017402320001250283030302800251023302580311031402940289024605210
\n", + "
" + ], + "text/plain": [ + " fsa prov_terr total total_income lt20 20_24 25_29 30_34 35_39 \\\n", + "0 P0S 35 8020 343170000 300 500 540 500 490 \n", + "1 N0H 35 40020 2015536000 1420 2320 2440 2520 2410 \n", + "2 T6E 48 17290 995096000 290 1450 3000 2620 1760 \n", + "3 M2N 35 71930 3197800000 1690 5790 8650 8800 7690 \n", + "4 K7M 35 37080 1740232000 1250 2830 3030 2800 2510 \n", + "\n", + " 40_44 45_49 50_54 55_59 60_64 65_69 70_74 gt75 \n", + "0 530 640 790 950 870 750 480 690 \n", + "1 2200 2340 3230 4060 4540 4270 3170 5100 \n", + "2 1180 1080 1170 1120 1130 870 570 1060 \n", + "3 6820 6490 5900 4900 4050 3450 2480 5230 \n", + "4 2330 2580 3110 3140 2940 2890 2460 5210 " + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_fsa.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "metadata": {}, + "outputs": [], + "source": [ + "my_fsa['avg_income_per_filer'] = my_fsa['total_income'] / my_fsa['total']" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
fsaprov_terrtotaltotal_incomelt2020_2425_2930_3435_3940_4445_4950_5455_5960_6465_6970_74gt75avg_income_per_filer
124M5J351117099257000014085020901840115069065065069061054045081088860.340
1031M5J351117099257000014085020901840115069065065069061054045081088860.340
1034M5J351117099257000014085020901840115069065065069061054045081088860.340
1036M5J351117099257000014085020901840115069065065069061054045081088860.340
1038M5J351117099257000014085020901840115069065065069061054045081088860.340
\n", + "
" + ], + "text/plain": [ + " fsa prov_terr total total_income lt20 20_24 25_29 30_34 35_39 \\\n", + "124 M5J 35 11170 992570000 140 850 2090 1840 1150 \n", + "1031 M5J 35 11170 992570000 140 850 2090 1840 1150 \n", + "1034 M5J 35 11170 992570000 140 850 2090 1840 1150 \n", + "1036 M5J 35 11170 992570000 140 850 2090 1840 1150 \n", + "1038 M5J 35 11170 992570000 140 850 2090 1840 1150 \n", + "\n", + " 40_44 45_49 50_54 55_59 60_64 65_69 70_74 gt75 \\\n", + "124 690 650 650 690 610 540 450 810 \n", + "1031 690 650 650 690 610 540 450 810 \n", + "1034 690 650 650 690 610 540 450 810 \n", + "1036 690 650 650 690 610 540 450 810 \n", + "1038 690 650 650 690 610 540 450 810 \n", + "\n", + " avg_income_per_filer \n", + "124 88860.340 \n", + "1031 88860.340 \n", + "1034 88860.340 \n", + "1036 88860.340 \n", + "1038 88860.340 " + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_fsa.loc[my_fsa['fsa'] == 'M5J'].head()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "M5J 0.008635\n", + "L9T 0.006218\n", + "L5N 0.005224\n", + "M2N 0.005127\n", + "T3K 0.005049\n", + "T2Z 0.004990\n", + "L5M 0.004932\n", + "T3H 0.004873\n", + "T6W 0.004815\n", + "M5V 0.004522\n", + "Name: fsa, dtype: float64" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_fsa['fsa'].value_counts()[:20] / my_fsa.shape[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
fsacountavg_income_per_filer
778M5J44388860.340197
713L9T31951366.404525
645L5N26847403.591824
741M2N26344457.111080
1152T3K25949977.098222
1144T2Z25662867.379256
644L5M25345588.038336
1150T3H25089154.161162
1208T6W24763540.403286
786M5V23274425.006686
799M6P22556596.454606
1143T2Y22054971.324319
625L4N21746147.593944
771M4Y21650455.308435
621L4J21457222.593351
772M5A21350511.383648
1106T0L21048379.915533
670L7A19137735.297896
818N0B18759672.585023
1149T3G18460751.899293
\n", + "
" + ], + "text/plain": [ + " fsa count avg_income_per_filer\n", + "778 M5J 443 88860.340197\n", + "713 L9T 319 51366.404525\n", + "645 L5N 268 47403.591824\n", + "741 M2N 263 44457.111080\n", + "1152 T3K 259 49977.098222\n", + "1144 T2Z 256 62867.379256\n", + "644 L5M 253 45588.038336\n", + "1150 T3H 250 89154.161162\n", + "1208 T6W 247 63540.403286\n", + "786 M5V 232 74425.006686\n", + "799 M6P 225 56596.454606\n", + "1143 T2Y 220 54971.324319\n", + "625 L4N 217 46147.593944\n", + "771 M4Y 216 50455.308435\n", + "621 L4J 214 57222.593351\n", + "772 M5A 213 50511.383648\n", + "1106 T0L 210 48379.915533\n", + "670 L7A 191 37735.297896\n", + "818 N0B 187 59672.585023\n", + "1149 T3G 184 60751.899293" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_fsa.groupby('fsa') \\\n", + " .agg({'prov_terr':'size', 'avg_income_per_filer': 'mean'}) \\\n", + " .rename(columns={'prov_terr':'count'}) \\\n", + " .reset_index().sort_values('count', ascending=False).head(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
fsacountavg_income_per_filer
787M5X1285600.000000
779M5K3234220.689655
495K1P2212351.470588
763M4N24186354.545455
769M4W55178655.788591
767M4T29160458.279570
1158T3Z15148801.157407
777M5H10146701.094891
768M4V49137009.567039
774M5C23133594.252874
657L6J23126957.077856
804M8X18126838.418079
782M5P69123189.120521
1138T2S35121733.512064
765M4R36118709.389140
1388V7W10117813.343109
780M5M62116928.190955
757M4G40115270.395177
783M5R67114256.523929
296H3R10111395.086321
\n", + "
" + ], + "text/plain": [ + " fsa count avg_income_per_filer\n", + "787 M5X 1 285600.000000\n", + "779 M5K 3 234220.689655\n", + "495 K1P 2 212351.470588\n", + "763 M4N 24 186354.545455\n", + "769 M4W 55 178655.788591\n", + "767 M4T 29 160458.279570\n", + "1158 T3Z 15 148801.157407\n", + "777 M5H 10 146701.094891\n", + "768 M4V 49 137009.567039\n", + "774 M5C 23 133594.252874\n", + "657 L6J 23 126957.077856\n", + "804 M8X 18 126838.418079\n", + "782 M5P 69 123189.120521\n", + "1138 T2S 35 121733.512064\n", + "765 M4R 36 118709.389140\n", + "1388 V7W 10 117813.343109\n", + "780 M5M 62 116928.190955\n", + "757 M4G 40 115270.395177\n", + "783 M5R 67 114256.523929\n", + "296 H3R 10 111395.086321" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_fsa.groupby('fsa') \\\n", + " .agg({'prov_terr':'size', 'avg_income_per_filer': 'mean'}) \\\n", + " .rename(columns={'prov_terr':'count'}) \\\n", + " .reset_index().sort_values('avg_income_per_filer', ascending=False).head(20)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "new_df = my_fsa.groupby('fsa') \\\n", + " .agg({'prov_terr':'size', 'avg_income_per_filer': 'mean'}) \\\n", + " .rename(columns={'prov_terr':'count'}) \\\n", + " .reset_index().sort_values('count', ascending=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
countmeanstdmin25%50%75%max
count1431.035.85045443.4031031.0000005.00000020.00000053.00000443.0
avg_income_per_filer1431.049498.85990218702.71116912637.24580839275.67238845478.08219254522.63822285600.0
\n", + "
" + ], + "text/plain": [ + " count mean std min \\\n", + "count 1431.0 35.850454 43.403103 1.000000 \n", + "avg_income_per_filer 1431.0 49498.859902 18702.711169 12637.245808 \n", + "\n", + " 25% 50% 75% max \n", + "count 5.000000 20.000000 53.00000 443.0 \n", + "avg_income_per_filer 39275.672388 45478.082192 54522.63822 285600.0 " + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_df.describe().T" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
avg_income_per_filer
count51333.000
mean51619.202
std16024.945
min12637.246
25%41965.333
50%48438.492
75%57814.470
max285600.000
\n", + "
" + ], + "text/plain": [ + " avg_income_per_filer\n", + "count 51333.000\n", + "mean 51619.202\n", + "std 16024.945\n", + "min 12637.246\n", + "25% 41965.333\n", + "50% 48438.492\n", + "75% 57814.470\n", + "max 285600.000" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_fsa[['avg_income_per_filer']].describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "income_range = [12000.00, 42000.00, 60000.00, 80000.00, 100000.00, 285600]\n", + "count_income = []\n", + "for i, income in enumerate(income_range):\n", + " if i == 0: continue\n", + " val = my_fsa[(my_fsa['avg_income_per_filer'] < income) &\n", + " (my_fsa['avg_income_per_filer'] > income_range[i-1])]['avg_income_per_filer'].count()\n", + " count_income.append(val)\n", + " \n", + "plt.rc('font', weight='bold')\n", + "f, ax = plt.subplots(figsize=(11, 6))\n", + "colors = ['yellowgreen', 'gold', 'wheat', 'c', 'violet']\n", + "labels = [ '{}<.<{}'.format(income_range[i-1], s) for i,s in enumerate(income_range) if i != 0]\n", + "sizes = count_income\n", + "explode = [0.0 if sizes[i] < 100 else 0.0 for i in range(len(sizes))]\n", + "ax.pie(sizes, explode = explode, labels=labels, colors = colors,\n", + " autopct = lambda x:'{:1.0f}%'.format(x) if x > 1 else '',\n", + " shadow = False, startangle=0)\n", + "ax.axis('equal')\n", + "f.text(0.5, 1.01, \"Distribution of average income per filer\", ha='center', fontsize = 12);" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
lt2020_2425_2930_3435_3940_4445_4950_5455_5960_6465_6970_74gt75
1241409903080492060706760741080608750936099001035011160
10311409903080492060706760741080608750936099001035011160
10341409903080492060706760741080608750936099001035011160
10361409903080492060706760741080608750936099001035011160
10381409903080492060706760741080608750936099001035011160
..........................................
504461409903080492060706760741080608750936099001035011160
506501409903080492060706760741080608750936099001035011160
507781409903080492060706760741080608750936099001035011160
508271409903080492060706760741080608750936099001035011160
509611409903080492060706760741080608750936099001035011160
\n", + "

443 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " lt20 20_24 25_29 30_34 35_39 40_44 45_49 50_54 55_59 60_64 \\\n", + "124 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "1031 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "1034 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "1036 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "1038 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "... ... ... ... ... ... ... ... ... ... ... \n", + "50446 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "50650 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "50778 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "50827 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "50961 140 990 3080 4920 6070 6760 7410 8060 8750 9360 \n", + "\n", + " 65_69 70_74 gt75 \n", + "124 9900 10350 11160 \n", + "1031 9900 10350 11160 \n", + "1034 9900 10350 11160 \n", + "1036 9900 10350 11160 \n", + "1038 9900 10350 11160 \n", + "... ... ... ... \n", + "50446 9900 10350 11160 \n", + "50650 9900 10350 11160 \n", + "50778 9900 10350 11160 \n", + "50827 9900 10350 11160 \n", + "50961 9900 10350 11160 \n", + "\n", + "[443 rows x 13 columns]" + ] + }, + "execution_count": 89, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_fsa.loc[my_fsa['fsa'] == 'M5J'][['lt20', '20_24', '25_29', '30_34', '35_39', \n", + " '40_44', '45_49', '50_54', '55_59', '60_64', '65_69', '70_74', 'gt75']].cumsum(axis = 1)" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "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" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![image.png](attachment:image.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Notes\n", + "The algorithm sometimes returns 0 matches and sometimes returns more than 1. 0 is not a big deal. Not all data has addresses. The question of what to do when there are multiple matches is tricky. Luckily, there are only a handful. I would just drop them." + ] + }, + { + "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.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}