{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Manipulation Part 2: Working with PUMS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Last time we explored groupby operations in Pandas using Census SF1 data. Today we continue with our Census data exploration, turning to the Public Use Microdata, or PUMS. These are much larger files and at the individual person and household level. They are widely used to do analysis of the demographic and social characteristics of the population, so provide a good opportunity to explore these data using the methods we have been learning: filtering, string manipulation, groupby operations and others." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import pandas as pd\n", "import pylab as P\n", "import numpy as np\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import matplotlib.cm as cm, matplotlib.font_manager as fm\n", "sns.set(style=\"darkgrid\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Working with Census PUMS Microdata\n", "\n", "(with credits to Aksel Olsen, from whom a substantial amount of the material for today's session is adapted)\n", "\n", "Data source: Census ACS 1-year PUMS data, 2012 release\n", "\n", "The 2012 PUMS household and person tables for California were downloaded from:\n", "\n", "Persons: [census ftp](http://www2.census.gov/acs2012_1yr/pums/csv_pca.zip)\n", "\n", "Households: [census ftp](http://www2.census.gov/acs2012_1yr/pums/csv_hca.zip)\n", "\n", "Note - these are large files and take time to download and to load into memory. If you have any trouble downloading from the Census ftp site using the links above, these two files are also in our files directory on bCourses." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "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", "
RTSERIALNODIVISIONPUMAREGIONSTADJHSGADJINCWGTPNP...wgtp71wgtp72wgtp73wgtp74wgtp75wgtp76wgtp77wgtp78wgtp79wgtp80
SERIALNO
11H119850846100000010102071102...17617812099173331293534130
19H199750246100000010102071800...30818428852185337288188190197
22H22981054610000001010207751...7812712511072207313583143
31H31913054610000001010207762...882475761311402029130141
40H40929014610000001010207122...1224202112101213123
\n", "

5 rows × 206 columns

\n", "
" ], "text/plain": [ " RT SERIALNO DIVISION PUMA REGION ST ADJHSG ADJINC WGTP NP \\\n", "SERIALNO \n", "11 H 11 9 8508 4 6 1000000 1010207 110 2 \n", "19 H 19 9 7502 4 6 1000000 1010207 180 0 \n", "22 H 22 9 8105 4 6 1000000 1010207 75 1 \n", "31 H 31 9 1305 4 6 1000000 1010207 76 2 \n", "40 H 40 9 2901 4 6 1000000 1010207 12 2 \n", "\n", " ... wgtp71 wgtp72 wgtp73 wgtp74 wgtp75 wgtp76 wgtp77 \\\n", "SERIALNO ... \n", "11 ... 176 178 120 99 173 33 129 \n", "19 ... 308 184 288 52 185 337 288 \n", "22 ... 78 127 125 110 72 20 73 \n", "31 ... 88 24 75 76 131 140 20 \n", "40 ... 12 24 20 21 12 10 12 \n", "\n", " wgtp78 wgtp79 wgtp80 \n", "SERIALNO \n", "11 35 34 130 \n", "19 188 190 197 \n", "22 135 83 143 \n", "31 29 130 141 \n", "40 13 12 3 \n", "\n", "[5 rows x 206 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pums_h = pd.read_csv('data/csv_hca/ss12hca.csv')\n", "#pums_h=pd.read_csv('data/pums_h_sf_2012.csv')\n", "pums_h.index=pums_h.SERIALNO\n", "pums_h.head()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['RT', 'SERIALNO', 'DIVISION', 'PUMA', 'REGION', 'ST', 'ADJHSG', 'ADJINC', 'WGTP', 'NP', 'TYPE', 'ACR', 'AGS', 'BATH', 'BDSP', 'BLD', 'BUS', 'CONP', 'ELEP', 'FS', 'FULP', 'GASP', 'HFL', 'INSP', 'MHP', 'MRGI', 'MRGP', 'MRGT', 'MRGX', 'REFR', 'RMSP', 'RNTM', 'RNTP', 'RWAT', 'SINK', 'SMP', 'STOV', 'TEL', 'TEN', 'TOIL', 'VACS', 'VALP', 'VEH', 'WATP', 'YBL', 'FES', 'FFINCP', 'FGRNTP', 'FHINCP', 'FINCP', 'FPARC', 'FSMOCP', 'GRNTP', 'GRPIP', 'HHL', 'HHT', 'HINCP', 'HUGCL', 'HUPAC', 'HUPAOC', 'HUPARC', 'KIT', 'LNGI', 'MULTG', 'MV', 'NOC', 'NPF', 'NPP', 'NR', 'NRC', 'OCPIP', 'PARTNER', 'PLM', 'PSF', 'R18', 'R60', 'R65', 'RESMODE', 'SMOCP', 'SMX', 'SRNT', 'SVAL', 'TAXP', 'WIF', 'WKEXREL', 'WORKSTAT', 'FACRP', 'FAGSP', 'FBATHP', 'FBDSP', 'FBLDP', 'FBUSP', 'FCONP', 'FELEP', 'FFSP', 'FFULP', 'FGASP', 'FHFLP', 'FINSP', 'FKITP', 'FMHP', 'FMRGIP', 'FMRGP', 'FMRGTP', 'FMRGXP', 'FMVP', 'FPLMP', 'FREFRP', 'FRMSP', 'FRNTMP', 'FRNTP', 'FRWATP', 'FSINKP', 'FSMP', 'FSMXHP', 'FSMXSP', 'FSTOVP', 'FTAXP', 'FTELP', 'FTENP', 'FTOILP', 'FVACSP', 'FVALP', 'FVEHP', 'FWATP', 'FYBLP', 'wgtp1', 'wgtp2', 'wgtp3', 'wgtp4', 'wgtp5', 'wgtp6', 'wgtp7', 'wgtp8', 'wgtp9', 'wgtp10', 'wgtp11', 'wgtp12', 'wgtp13', 'wgtp14', 'wgtp15', 'wgtp16', 'wgtp17', 'wgtp18', 'wgtp19', 'wgtp20', 'wgtp21', 'wgtp22', 'wgtp23', 'wgtp24', 'wgtp25', 'wgtp26', 'wgtp27', 'wgtp28', 'wgtp29', 'wgtp30', 'wgtp31', 'wgtp32', 'wgtp33', 'wgtp34', 'wgtp35', 'wgtp36', 'wgtp37', 'wgtp38', 'wgtp39', 'wgtp40', 'wgtp41', 'wgtp42', 'wgtp43', 'wgtp44', 'wgtp45', 'wgtp46', 'wgtp47', 'wgtp48', 'wgtp49', 'wgtp50', 'wgtp51', 'wgtp52', 'wgtp53', 'wgtp54', 'wgtp55', 'wgtp56', 'wgtp57', 'wgtp58', 'wgtp59', 'wgtp60', 'wgtp61', 'wgtp62', 'wgtp63', 'wgtp64', 'wgtp65', 'wgtp66', 'wgtp67', 'wgtp68', 'wgtp69', 'wgtp70', 'wgtp71', 'wgtp72', 'wgtp73', 'wgtp74', 'wgtp75', 'wgtp76', 'wgtp77', 'wgtp78', 'wgtp79', 'wgtp80']\n" ] } ], "source": [ "print(list(pums_h.columns))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "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", "
RTSERIALNOSPORDERPUMASTADJINCPWGTPAGEPCITCITWP...pwgtp71pwgtp72pwgtp73pwgtp74pwgtp75pwgtp76pwgtp77pwgtp78pwgtp79pwgtp80
0P111850861010207109631NaN...176178120100173321293534129
1P112850861010207117601NaN...224192124106161361323035137
2P22181056101020775791NaN...7912712511072207213483143
3P31113056101020776491NaN...882475751311391928131141
4P31213056101020798481NaN...1292681931791732541164198
\n", "

5 rows × 286 columns

\n", "
" ], "text/plain": [ " RT SERIALNO SPORDER PUMA ST ADJINC PWGTP AGEP CIT CITWP ... \\\n", "0 P 11 1 8508 6 1010207 109 63 1 NaN ... \n", "1 P 11 2 8508 6 1010207 117 60 1 NaN ... \n", "2 P 22 1 8105 6 1010207 75 79 1 NaN ... \n", "3 P 31 1 1305 6 1010207 76 49 1 NaN ... \n", "4 P 31 2 1305 6 1010207 98 48 1 NaN ... \n", "\n", " pwgtp71 pwgtp72 pwgtp73 pwgtp74 pwgtp75 pwgtp76 pwgtp77 pwgtp78 \\\n", "0 176 178 120 100 173 32 129 35 \n", "1 224 192 124 106 161 36 132 30 \n", "2 79 127 125 110 72 20 72 134 \n", "3 88 24 75 75 131 139 19 28 \n", "4 129 26 81 93 179 173 25 41 \n", "\n", " pwgtp79 pwgtp80 \n", "0 34 129 \n", "1 35 137 \n", "2 83 143 \n", "3 131 141 \n", "4 164 198 \n", "\n", "[5 rows x 286 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#pums_p=pd.read_csv('data/pums_p_sf_2012.csv')\n", "pums_p = pd.read_csv('data/csv_pca/ss12pca.csv')\n", "pums_p.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['RT', 'SERIALNO', 'SPORDER', 'PUMA', 'ST', 'ADJINC', 'PWGTP', 'AGEP', 'CIT', 'CITWP', 'COW', 'DDRS', 'DEAR', 'DEYE', 'DOUT', 'DPHY', 'DRAT', 'DRATX', 'DREM', 'ENG', 'FER', 'GCL', 'GCM', 'GCR', 'HINS1', 'HINS2', 'HINS3', 'HINS4', 'HINS5', 'HINS6', 'HINS7', 'INTP', 'JWMNP', 'JWRIP', 'JWTR', 'LANX', 'MAR', 'MARHD', 'MARHM', 'MARHT', 'MARHW', 'MARHYP', 'MIG', 'MIL', 'MLPA', 'MLPB', 'MLPC', 'MLPD', 'MLPE', 'MLPF', 'MLPG', 'MLPH', 'MLPI', 'MLPJ', 'MLPK', 'NWAB', 'NWAV', 'NWLA', 'NWLK', 'NWRE', 'OIP', 'PAP', 'RELP', 'RETP', 'SCH', 'SCHG', 'SCHL', 'SEMP', 'SEX', 'SSIP', 'SSP', 'WAGP', 'WKHP', 'WKL', 'WKW', 'WRK', 'YOEP', 'ANC', 'ANC1P', 'ANC2P', 'DECADE', 'DIS', 'DRIVESP', 'ESP', 'ESR', 'FOD1P', 'FOD2P', 'HICOV', 'HISP', 'INDP', 'JWAP', 'JWDP', 'LANP', 'MIGPUMA', 'MIGSP', 'MSP', 'NAICSP', 'NATIVITY', 'NOP', 'OC', 'OCCP', 'PAOC', 'PERNP', 'PINCP', 'POBP', 'POVPIP', 'POWPUMA', 'POWSP', 'PRIVCOV', 'PUBCOV', 'QTRBIR', 'RAC1P', 'RAC2P', 'RAC3P', 'RACAIAN', 'RACASN', 'RACBLK', 'RACNH', 'RACNUM', 'RACPI', 'RACSOR', 'RACWHT', 'RC', 'SCIENGP', 'SCIENGRLP', 'SFN', 'SFR', 'SOCP', 'SSPA', 'VPS', 'WAOB', 'FAGEP', 'FANCP', 'FCITP', 'FCITWP', 'FCOWP', 'FDDRSP', 'FDEARP', 'FDEYEP', 'FDISP', 'FDOUTP', 'FDPHYP', 'FDRATP', 'FDRATXP', 'FDREMP', 'FENGP', 'FESRP', 'FFERP', 'FFODP', 'FGCLP', 'FGCMP', 'FGCRP', 'FHINS1P', 'FHINS2P', 'FHINS3C', 'FHINS3P', 'FHINS4C', 'FHINS4P', 'FHINS5C', 'FHINS5P', 'FHINS6P', 'FHINS7P', 'FHISP', 'FINDP', 'FINTP', 'FJWDP', 'FJWMNP', 'FJWRIP', 'FJWTRP', 'FLANP', 'FLANXP', 'FMARHDP', 'FMARHMP', 'FMARHTP', 'FMARHWP', 'FMARHYP', 'FMARP', 'FMIGP', 'FMIGSP', 'FMILPP', 'FMILSP', 'FOCCP', 'FOIP', 'FPAP', 'FPERNP', 'FPINCP', 'FPOBP', 'FPOWSP', 'FPRIVCOVP', 'FPUBCOVP', 'FRACP', 'FRELP', 'FRETP', 'FSCHGP', 'FSCHLP', 'FSCHP', 'FSEMP', 'FSEXP', 'FSSIP', 'FSSP', 'FWAGP', 'FWKHP', 'FWKLP', 'FWKWP', 'FWRKP', 'FYOEP', 'pwgtp1', 'pwgtp2', 'pwgtp3', 'pwgtp4', 'pwgtp5', 'pwgtp6', 'pwgtp7', 'pwgtp8', 'pwgtp9', 'pwgtp10', 'pwgtp11', 'pwgtp12', 'pwgtp13', 'pwgtp14', 'pwgtp15', 'pwgtp16', 'pwgtp17', 'pwgtp18', 'pwgtp19', 'pwgtp20', 'pwgtp21', 'pwgtp22', 'pwgtp23', 'pwgtp24', 'pwgtp25', 'pwgtp26', 'pwgtp27', 'pwgtp28', 'pwgtp29', 'pwgtp30', 'pwgtp31', 'pwgtp32', 'pwgtp33', 'pwgtp34', 'pwgtp35', 'pwgtp36', 'pwgtp37', 'pwgtp38', 'pwgtp39', 'pwgtp40', 'pwgtp41', 'pwgtp42', 'pwgtp43', 'pwgtp44', 'pwgtp45', 'pwgtp46', 'pwgtp47', 'pwgtp48', 'pwgtp49', 'pwgtp50', 'pwgtp51', 'pwgtp52', 'pwgtp53', 'pwgtp54', 'pwgtp55', 'pwgtp56', 'pwgtp57', 'pwgtp58', 'pwgtp59', 'pwgtp60', 'pwgtp61', 'pwgtp62', 'pwgtp63', 'pwgtp64', 'pwgtp65', 'pwgtp66', 'pwgtp67', 'pwgtp68', 'pwgtp69', 'pwgtp70', 'pwgtp71', 'pwgtp72', 'pwgtp73', 'pwgtp74', 'pwgtp75', 'pwgtp76', 'pwgtp77', 'pwgtp78', 'pwgtp79', 'pwgtp80']\n" ] } ], "source": [ "print(list(pums_p.columns))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "there are 153115 observations of 206 variables in the housing table \n", "there are 368047 observations of 286 variables in the population table \n" ] } ], "source": [ "print(\"there are {} observations of {} variables in the housing table \".format(pums_h.shape[0],pums_h.shape[1]))\n", "print(\"there are {} observations of {} variables in the population table \".format(pums_p.shape[0],pums_p.shape[1]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Per the [Census Bureau's quick facts sheet](https://www.census.gov/quickfacts/CA), there were about 38 million people and 13.8 million housing units in California in 2012.\n", "\n", "Thus, we have:\n", "* Sample size for housing: $\\frac{153,000}{13,800,000}=1.1\\%$\n", "* Sample size for population: $\\frac{368,000}{38,300,000}=.94\\%$\n", "\n", "Let's do a few statistics--how many men and women in the Golden State? To answer this, we first need the [code book](https://www2.census.gov/programs-surveys/acs/tech_docs/pums/data_dict/PUMSDataDict12.pdf), which we will need regularly for these types of exercises. Which table do we need?\n", "\n", "We need the population table. As ever, refer to the data dictionary. Search for gender, male, female, or sex and see what appears." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "0 1\n", "1 2\n", "2 2\n", "3 1\n", "4 2\n", "5 2\n", "6 2\n", "7 2\n", "8 1\n", "9 1\n", "10 1\n", "11 1\n", "12 2\n", "13 1\n", "14 1\n", "15 1\n", "16 2\n", "17 2\n", "18 2\n", "19 1\n", "20 1\n", "21 2\n", "22 2\n", "23 2\n", "24 1\n", "25 1\n", "26 2\n", "27 2\n", "28 1\n", "29 1\n", " ..\n", "368017 1\n", "368018 2\n", "368019 2\n", "368020 1\n", "368021 1\n", "368022 1\n", "368023 2\n", "368024 2\n", "368025 1\n", "368026 2\n", "368027 2\n", "368028 2\n", "368029 2\n", "368030 1\n", "368031 1\n", "368032 2\n", "368033 1\n", "368034 1\n", "368035 2\n", "368036 1\n", "368037 2\n", "368038 1\n", "368039 2\n", "368040 1\n", "368041 1\n", "368042 2\n", "368043 1\n", "368044 2\n", "368045 1\n", "368046 2\n", "Name: SEX, Length: 368047, dtype: int64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pums_p.SEX" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "2 NaN\n", "1 NaN\n", "Name: SEX, dtype: object" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pums_p.SEX.value_counts() #.map({'1':\"Male\",'2':\"Female\"})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, there are 181,000 1's and 186,000 2's. Done? \n", "\n", "No, we need to remember that these records have sample weights associated with them, allowing us to make *population estimates*. Think of the weights as roughly inversely proportional to the sampling probability. They should hover around 100, given the sample rate is around 1%. But some groups are much more likely to respond to surveys than others. The Census Bureau employs such information when designing the survey and sample rates for specific sub-groups. \n", "\n", "To get population estimates, we typically need to sum the weights." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "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", "
sum
SEX
118910864
219130566
\n", "
" ], "text/plain": [ " sum\n", "SEX \n", "1 18910864\n", "2 19130566" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pop_by_gender = pums_p.groupby(['SEX'])['PWGTP'].agg(['sum'])\n", "pop_by_gender" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nmTdvXv785z/n9NNPz2233VZuviT59Kc/nZNPPjlTpkzJWWedlTvvvLPM9duZda5duzbvf//78973\nvjdJsscee5S5dnPmzMnTTz/9d493wr5Ltj9fJ+y77c2W1N5zW7WaL6m97yZPnpzklX22aNGinH32\n2aPHxnLvtX3yKVOmZNOmTaPfj4yMjC7otcc2bdqU3t7els/Z3exorSMjI7n88svz5JNPZvny5enq\n6sqMGTOy3377jX695557ZmBgIPvss894jNBSq/mapskpp5wy+ptx1qxZ+eMf/1jm+u3MOtesWZMF\nCxaMfl/p2m1PJ+y7Ham+77an+p7bWdX33fr163PmmWfm5JNPzrHHHjv6+Fjuvba/bX7IIYfkrrvu\nSpI88MADOeCAA0aP7b///vnLX/6SF154IZs3b859992XmTNntnzO7mZHa73ooovy8ssvZ8WKFaNv\n461evTqXXXZZkuTZZ5/N4OBg+vr6du3Cd1Kr+QYHB3PMMcdk06ZNaZom99xzTw4++OAy129n1vnQ\nQw/lkEMOGf2+0rXbnk7YdztSfd9tT/U9t7Mq77vnnnsuCxcuzLnnnpsTTjhhm2Njuffa/kezT3zi\nE7n77rvz+c9/Pk3TZNmyZfnFL36RoaGhnHTSSTn//PNz2mmnpWmaHH/88Zk6derrPmd31Wq+gw8+\nOKtXr86HP/zhnHLKKUmSBQsW5IQTTsgFF1yQ+fPnp6urK8uWLdtt/5S8o+t3zjnnZMGCBZk4cWIO\nPfTQzJo1KyMjIyWu345m++tf/5opU6akq6tr9DmVrt1rddK+ez2dtO9eq1P23PZ00r679tprs2HD\nhqxYsSIrVqxIksybNy8vvvjimO49/6sYABTjQ1oAoBjxBoBixBsAihFvAChGvAHgTXjwwQfT39+/\n3eN33XVX+vv709/fny984Qs56KCD8sQTT7ypc+6eP2sPAAXccMMNWbNmzejnCbyeI444IkcccUSS\n5MYbb8whhxyS/fff/02d1503ALxBr/2c9scee2z0LvsrX/lKNm7cOHrsmWeeya233pqzzjrrTZ9X\nvAHgDZozZ842Hxjz9a9/Pd/4xjeyatWqHHHEEbnxxhtHj33ve9/LqaeemokTJ77p83rbHADGyBNP\nPJGLL744ySv/t/f06dOTvPJ55b/5zW9yzjnnjMl5xBsAxsiMGTPyrW99K+9617ty//33Z2BgIEny\n+OOPZ8aMGdljjz3G5DziDQBjZMmSJTnvvPMyPDycrq6uXHLJJUmSJ598Mu95z3vG7Dw+2xwAivED\nawBQjHgDQDHiDQDFiDcAFCPeAFCMeANAMeINAMWINwAU8/8BN++jRDxyUaoAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pop_by_gender.plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Let's do a little filtering\n", "We want to keep just the Bay Area records for now. So what geographic identifiers do we have in the PUMS files?" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys(['085', '013', '055', '041', '001', '097', '075', '081', '095'])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bayareafips ={'001':'Alameda', '013':'Contra Costa', '041':'Marin', '055':'Napa', '075':'San Francisco', '081':'San Mateo', '085':'Santa Clara', '095':'Sonoma', '097':'Solano'}\n", "bayareafips.keys()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(265,)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pums_p.PUMA.unique().shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Incidentally, since there are 265 PUMA areas in the Bay Area, it means they easily satisfy the 100,000 population per PUMA area required for the Census confidentiality conditions)\n", "\n", "To know which PUMAS are in which counties, we need to get a [correspondence](http://www2.census.gov/geo/tiger/GENZ2013/cb_2013_06_puma10_500k.zip). Or we can cheat--SF PUMAS provided below." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[7501, 7502, 7503, 7504, 7505, 7506, 7507]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sfPUMAS = [k for k in range(7501,7508)]\n", "sfPUMAS" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(7311, 286)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pums_p_sf=pums_p.loc[pums_p.PUMA.isin(sfPUMAS)]\n", "pums_p_sf.shape" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3586, 206)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pums_h_sf=pums_h.loc[pums_h.PUMA.isin(sfPUMAS)]\n", "pums_h_sf.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Down to several thousand records now. How many records in each PUMA?" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "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", "
size
PUMA
75011231
7502896
7503971
7504955
7505969
75061063
75071226
\n", "
" ], "text/plain": [ " size\n", "PUMA \n", "7501 1231\n", "7502 896\n", "7503 971\n", "7504 955\n", "7505 969\n", "7506 1063\n", "7507 1226" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## records per puma\n", "pums_p_sf.groupby(['PUMA'])['PWGTP'].agg(['size'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What is the 2012 population of San Francisco based on these data?" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "824855" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sf_pop = pums_p_sf.PWGTP.sum()\n", "sf_pop" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Processing and recoding stuff\n", "Data comes with numeric codes. Let's assign labels to a few as well as create some dummies." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### make convenience wrapper for assigning labels from dictionary to codes in data files\n", "PUMS variables are not exposed in the census API (yet, at least). Instead, grab variable labels--pasted directly from PDF [data dictionary](https://www2.census.gov/programs-surveys/acs/tech_docs/pums/data_dict/PUMSDataDict12.pdf).\n", "\n", "Wrapper here reads the pasted strings, cleans them a bit and tries to stuff into a dictionary." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def map_value_labels(codes_pasted):\n", " code = []\n", " for item in codes_pasted.strip('\\n').replace(' .',',').split('\\n'):\n", " id = int(item.split(',')[0])\n", " val = item.split(',')[1]\n", " code.append([id,val])\n", " return dict(code)\n", "\n", "def assign_value_labels(df,value_map,var):\n", " target = var+'L'\n", " if target in df.columns:\n", " df[target].replace(df[var].map(value_map))\n", " else:\n", " df[target] = df[var].map(value_map)\n", " print(df[target].value_counts())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Applying the value label wrappers / mappers\n", "Paste the codes, store in a variable as a string." ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": true }, "outputs": [], "source": [ "codessex =\"\"\"\n", "1 .Male\n", "2 .Female\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## we ship the blank category here--Ideally fix, but currently most vars are loaded as integers, so 'bb' won't work here\n", "## RACE\n", "## note that these are not actually verbatim categories from the code book. Instead, this collapses categories.\n", "codesrace =\"\"\"\n", "1 .White\n", "2 .Black\n", "3 .Other\n", "4 .Other\n", "5 .Other\n", "6 .Asian\n", "7 .Other\n", "8 .Other\n", "9 .Two + Races\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## TENURE\n", "codesten=\"\"\"\n", "1 .Owned with mortgage or loan (include home equity loans)\n", "2 .Owned free and clear\n", "3 .Rented\n", "4 .Occupied without payment of rent\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## YEAR BUILT\n", "codeybl=\"\"\"\n", "01 .1939 or earlier\n", "02 .1940 to 1959\n", "03 .1940 to 1959\n", "04 .1960 to 1979\n", "05 .1960 to 1979\n", "06 .1980 to 1999\n", "07 .1980 to 1999\n", "08 .2000 to 2011\n", "09 .2000 to 2011\n", "10 .2000 to 2011\n", "11 .2000 to 2011\n", "12 .2000 to 2011\n", "13 .2000 to 2011\n", "14 .2000 to 2011\n", "15 .2000 to 2011\n", "\"\"\"" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## YEAR MOVED INTO UNIT\n", "codemovein=\"\"\"\n", "1 .12 months or less\n", "2 .13 to 23 months\n", "3 .2 to 4 years\n", "4 .5 to 9 years\n", "5 .10 to 19 years\n", "6 .20 to 29 years\n", "7 .30 years or more\n", "\"\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then, grab those strings, and call the two wrapper functions\n", " 2. `race_value_map` in the example below stores the mapping dictionary\n", " 3. `assign_value_labels` applies those value labels to the passed dataframe in the source variable name, with an `_l` (for label) appended." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Female 186615\n", "Male 181432\n", "Name: SEXL, dtype: int64\n" ] } ], "source": [ "var = 'SEX'\n", "value_map = map_value_labels(codessex)\n", "assign_value_labels(pums_p,value_map,var) " ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "White 233425\n", "Asian 51761\n", "Other 46025\n", "Black 20146\n", "Two + Races 16690\n", "Name: RAC1PL, dtype: int64\n" ] } ], "source": [ "var = 'RAC1P'\n", "value_map = map_value_labels(codesrace)\n", "assign_value_labels(pums_p,value_map,var) " ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5 to 9 years 30248\n", "10 to 19 years 28520\n", "2 to 4 years 23960\n", "12 months or less 16910\n", "13 to 23 months 16562\n", "30 years or more 15107\n", "20 to 29 years 13988\n", "Name: MVL, dtype: int64\n" ] } ], "source": [ "var = 'MV'\n", "value_map = map_value_labels(codemovein)\n", "assign_value_labels(pums_h,value_map,var) " ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Owned with mortgage or loan (include home equity loans) 55072\n", "Rented 49868\n", "Owned free and clear 22270\n", "Occupied without payment of rent 2044\n", "Name: TENL, dtype: int64\n" ] } ], "source": [ "var = 'TEN'\n", "value_map = map_value_labels(codesten)\n", "assign_value_labels(pums_h,value_map,var) " ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1960 to 1979 43970\n", "1980 to 1999 34802\n", "1940 to 1959 29456\n", "2000 to 2011 15354\n", "1939 or earlier 13446\n", "Name: YBLL, dtype: int64\n" ] } ], "source": [ "var = 'YBL'\n", "value_map = map_value_labels(codeybl)\n", "assign_value_labels(pums_h,value_map,var) " ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "3 or more bedrooms 78247\n", "2 bedrooms 36841\n", "1 bedroom 18010\n", "Studio 3976\n", "Name: BDSP_l, dtype: int64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## Bedrooms\n", "def brclassifier(val):\n", " if val < 1: return \"Studio\"\n", " elif val <=1: return \"1 bedroom\"\n", " elif val <=2: return \"2 bedrooms\"\n", " #elif val <=3: return \"3 bedrooms\"\n", " #elif val <=4: return \"4 bedrooms\"\n", " elif val >=3: return \"3 or more bedrooms\"\n", "pums_h['BDSP_l']=pums_h.BDSP.apply(lambda x: brclassifier(x))\n", "pums_h.BDSP_l.value_counts()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'59-78'" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def age_mapping_dyn(x):\n", " ## ordinal var\n", " breaks = [0,18,34,59,79,99]\n", "\n", " ## given the breaks above, what is the interval between each?\n", " diff=[breaks[i+1]-breaks[i] for i in range(len(breaks)-1)]\n", " \n", " ## make tuples of breaks and distance--we need this to generate a list of age ranges\n", " joint = zip(breaks,diff)\n", " l=['%s-%s'%(yr[0],yr[0]+yr[1]-1) for yr in joint]\n", " \n", " # Which bin in breaks does the age fall in?\n", " cnt=0\n", " for k in breaks:\n", " #print k\n", " if x0),['newcomer']]=1\n", "pums_p['newcomer']=pums_p['newcomer'].map({0:'existing resident',1:'new resident'})\n", "pums_p['newcomer'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Now we can study our population with respect to other characteristics\n" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\npNjYWP3+++9Z6vL19dX06dN19uxZhYeH66OPPpK3t7cGDRqkr7/+Wl999ZWaN2+uzp07a8OGDTp/\n/rx92z179mjr1q1atmyZLl26pCeffFKSNGPGDDVo0EDh4eE6duyYhg0bpg8//FA//fSTPvjgA5Us\nWVJhYWHas2ePoqKidOjQoRuGlMvfBv/dXwEAAH9Zy28/yXHdqrefvYWVOCmoHDp0SNu3b7ffU5Ke\nnq4zZ86oZs2a8vHxkYeHh6pVq5Zpm2HDhum9997TggULVKFCBTVt2jTH/VetWlWSVLJkSfv9LSdP\nnlRQUJAkqU6dOvrXv/6VZbvy5ctLkhISEnTmzBl1795dknTx4kUlJCQoKipKM2bMUOfOnVW8ePFM\nl5qOHTumGjVqyM3NTUWKFFHlypXtvW7evFlr1qyRJJ07d06S5O/vr5IlS9rrTE1NvZmPEAAAIyUm\nXsjzfQYG+uS4zin3qFSoUEEtWrRQXFycZs6cqeDgYPn5+Wnt2rUqXLiw3N3dtXbt2kzbLFmyRC+9\n9JIWLFggSfriiy/k5uamjIyMLPu32WxZlpUoUUKHDx+WJO3atSvbutzcrrX7j3/8QyVLltScOXMU\nFxeniIgI1apVSytXrlRISIji4uIUFBSkpUuX2retVKmSdu/erYyMDF26dMl+rAoVKqhLly6Ki4vT\npEmT1KpVqxxrzKkfAACQPaeMqISFhWnEiBGKiIhQcnKywsPD9euvv2ry5MlauHChLMtSeHi47rvv\nPvs2NWvWVI8ePVS4cGEVKlRITZo0UVpamg4dOqR58+bd8JgxMTF69dVXVahQIXl4eKh48eI5vrdo\n0aLq0qWLOnbsqKtXr6p06dJq3ry50tLSNGLECHl7e8vNzU1jxozR1q1bJUnVqlVT48aN1bZtWxUr\nVkwBAQGSpKioKA0fPlxLly5VcnJyrpd1AgICdOXKFU2cOFGDBg1y8NMEAODOZbMsy3J1EXlh4cKF\nat68uYoWLarY2Fh5eHjk2xtWWw7I+dogAACuNGfo43m+z9wu/ThlRMUVAgIC1LVrVxUqVEg+Pj6Z\nvvEDAADyp9smqAQHBys4mG/LAABwO3H5A98AAAByQlABAADGIqgAAABjEVQAAICxCCoAAMBYBBUA\nAGAsggoAADAWQQUAABiLoAIAAIxFUAEAAMYiqAAAAGMRVAAAgLEIKgAAwFgEFQAAYCyCCgAAMBZB\n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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pums_p.loc[:,['newcomer','SEXL','PWGTP']].groupby(['newcomer','SEXL']).sum().unstack().plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's add some age information to movers, picking arbitrary age breaks for categorization. How do recent arrivals compare to current residents on their age profile?" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "scrolled": false }, "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", "
PWGTP
newcomerAGEPL
existing resident0-177882541
18-336709605
34-5811216011
59-785187931
79-981319422
new resident0-171347003
18-332263351
34-581622568
59-78390474
79-98102524
\n", "
" ], "text/plain": [ " PWGTP\n", "newcomer AGEPL \n", "existing resident 0-17 7882541\n", " 18-33 6709605\n", " 34-58 11216011\n", " 59-78 5187931\n", " 79-98 1319422\n", "new resident 0-17 1347003\n", " 18-33 2263351\n", " 34-58 1622568\n", " 59-78 390474\n", " 79-98 102524" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pums_p.loc[:,['newcomer','AGEPL','PWGTP']].groupby(['newcomer','AGEPL']).sum()" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAPJo8eJwtW3b0fr6/ffnyd3dXZIUFjZHn366RY8/3kCHD/+oRx6pocOHD6l+/Ubas+c7DRzYTykp\nKfr9999UqVJlbdy4TkePHtGcOQvk7u6u9PR0TZgwRt9/v1fNmjVXs2bNdfnyJY0b947mzVuUqY7s\nPrdDh4Bsa5458z1Nnfq+fH1La+jQATpz5mdVquSfaZ+LF6M0efJ4Xbnyu3Vb48ZPWm/+jYhYqtq1\n68rP72H5+T2sIUP66+mnn8kxHN0JLv0AAJAHiYkJOnHipyz/yEs3VxwSEuJVuHBh1avXQEeOHJIk\n7dnznVq0aK2EhHjFx8fr+PGjeuyxOjKZTNqwIVKDBg23Bg4XFxdNnPie6tdvmOX8Ofn752YnLu66\nzGazypQpKycnJ9Wv30gHD36fZb/k5Bt6552xeuyxOlne++23y9qx4z/q1q2ndVuDBo20fftnNteZ\nG6yoAACQB8ePH5Of38OZtg0Z0l9OTk4ymUyqVq26mjVrLicnJ124cF4Wi0WHDx9Snz799PjjDbR7\n924dOnTUOtU4Li5O3t7ekqSvv/4/rV27WikpKXr00dqZpjhnJ7vPzU5iYmKmp996eHjo6tXoLPv5\n+1fJ8bPWrFmhgIDX5erqat1WsaK/Pvlkg9q2vfvPhSGoAACQB7GxsSpevHimbX+/BPN3lSpV1t69\nu1W8eAm5ubmpYcPG+uGHfTp69Lj1Eo2Hh4fi4q7Ly6uYnn76GT399DPau3e3duz44ra15PS5/1Sk\nSBElJSVZXyclJcnT01ORkau1a9f/SZImTJiiEiUeyPb4jIwM7d27W8HBAzNtL1HiAcXFXb/t5+cF\nl34AAMgDHx8fxcfbNjKgXr0GiohYqoYNG0uSatV6TD/99JPMZrO8vIpJktq27ajZs2cpNTVV0s1Q\ncPjwIes05rvhz8+6dOm/slgs+v77PapVq7Y6dnxN8+Yt0rx5i3IMKZJ05szPqlChktzc3DJtj4+P\nk7e3z12r8+8IKgAA5EH16jV15szPNu178z6VH9Wo0ROSJFdXV3l6ema6B6RDhwDVrFlLgwf304AB\nfdSrV1clJCSoT59+eaovOvqKJkwYk2X7sGGjNH78aPXq1U3Vq9dU1arVbD5nVNR5lS37YJbtP/10\nTI8/Xj9Pdd4OQwkNisFetmMQWu7Qr9yhX7YriL2aMWOKWrVqq8qVq+b6WHv3Kz09XQsWzLvt/S13\n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\nZs3k7e2t7du3q0iRInJxcdH27dszHfPxxx9rwIABWrFihSTpP//5j5ycnGQ2m7Oc32QyZdlWunRp\nnTlzRpJ0+PDhbOtycrr54/7rX/9SmTJl9OGHHyoiIkKBgYF67LHHtHnzZrVp00YRERHy9/dXZGSk\n9dhKlSrpyJEjMpvNSkpKsn5WhQoV1L17d0VEROiDDz5Qy5Ytc6wxp58HAABkzy4rKgEBARozZowC\nAwOVkJCgzp076/Lly5o9e7ZWrlwpi8Wizp07q2bNmtZjatWqpT59+qhIkSLy8PBQ06ZNlZqaqtOn\nT2vZsmW3/cxx48bpnXfekYeHh1xdXeXr65vjvsWLF1f37t3VpUsXZWRk6MEHH9TLL7+s1NRUjRkz\nRoULF5aTk5MmTpyo/fv3S5KqVaumJk2aqH379ipVqpRKlCghSQoKCtLo0aMVGRmphISEW17WKVGi\nhNLS0jRjxgwNHz7cxm4CAFBw3TeP0F+5cqVefvllFS9eXKGhoXJ1dc2394LwCH0AgFHd60fo22VF\nxRFKlCihHj16yMPDQ56enpm+8QMAAPKn+yaoNGvWTM2aNXN0GQAA4C5y+APfAAAAcnLfrKjcT2Z3\nLuXoEgDcY/Ofne7oEu5YyZKedvnq6v2KftmGFRUAAGBYBBUAAGBYBBUAAGBYBBUAAGBYBBUAAGBY\nBBUAAGBYBBUAAGBYBBUAAGBYBBUAAGBYBBUAAGBYBBUAAGBYBBUAAGBYBBUAAGBYTE82oBvfN3N0\nCQDusR7f73R0Cbn24chnHV0CCgBWVAAAgGERVAAAgGERVAAAgGERVAAAgGERVAAAgGERVAAAgGER\nVAAAgGERVAAAgGERVAAAgGERVAAAgGERVAAAgGERVAAAgGERVAAAgGERVAAAgGG5OLoAZLVlVitF\nR8c7uox8o2RJT/qVC/Qrd+gX4FisqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMi\nqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAA\nAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMi\nqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAAAMMiqAAA\n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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pums_p.loc[:,['newcomer','AGEPL','PWGTP']].groupby(['newcomer','AGEPL']).sum().unstack().plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How do recent arrivals compare to current residents in racial profile?" ] }, { "cell_type": "code", "execution_count": 42, "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", "
PWGTP
newcomerRAC1PL
existing residentAsian4388282
Black1846543
Other4475976
Two + Races1388573
White20216136
new residentAsian738948
Black422679
Other863996
Two + Races303564
White3396733
\n", "
" ], "text/plain": [ " PWGTP\n", "newcomer RAC1PL \n", "existing resident Asian 4388282\n", " Black 1846543\n", " Other 4475976\n", " Two + Races 1388573\n", " White 20216136\n", "new resident Asian 738948\n", " Black 422679\n", " Other 863996\n", " Two + Races 303564\n", " White 3396733" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_by_race = pums_p.loc[:,['newcomer','RAC1PL','PWGTP']].groupby(['newcomer','RAC1PL']).sum()\n", "new_by_race" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAioAAAFVCAYAAADBrMQ6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcjXX/x/H3ObPZzYydjGWsYbJk6y6U0giJEGJobINR\nRibr2InUPYkQilCWkWzdUbhv7kqTZM8SYbJUY50ZZjXX74/5OXeTGQ7mmOscr+df5lo/n3Me16N3\n3+s619diGIYhAAAAE7LmdgEAAADZIagAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTcs/tAnCz\ntLTrunTpWm6XkaN8fPK5VE+u1o/kej25Wj8SPTkDV+tHuj89FStWMNt1jKiYkLu7W26XkONcrSdX\n60dyvZ5crR+JnpyBq/Uj5X5PBBUAAGBaBBUAAGBaBBUAAGBaBBUAAGBaBBUAAGBaBBUAAGBaBBUA\nAGBaBBUAAGBavJkWAOCUzp07q44dn9ewYaPVps0LtuWffrpEJ04c16hR4xx6/g4d2sjDw0NeXnlk\nsUipqany8HBXv36D1KjRY7btLl++rPbtW6lly1YKDx+Z6RjJyclavPgjfffdf2UYUnr6dbVo0VIv\nv9xDFovFtt0vvxzV0KGDtHbtJtuyxx9/VBUr+stqdZPFIqWlpalFi5bq3v0VnTt3VkFBL+nrr//r\n0M/gfiCoAACcltVq1fvvv6tHHqkjP79y9/38Y8dOUrVqD9v+3rXrW02YMD5ToPjii7V64okm2rx5\nk/r1G6hChQpLkgzD0IgRQ+Xn56e5cxfKy8tLV65cVnj4YCUmJqpPn/5KS0vTZ5+t0NKlHyspKfGm\n87/33gfy9vaWJF29mqCePV9WxYqVVLGiv4M7v3+49QMAcFpeXl7q3Lmbxo0bpdTU1EzrEhISNGFC\nhLp376SgoJc0e/YMpaWlSZKeeuoxffjhB+rfP1gdOz6vlSs/te23YcMaBQd30yuvdNVrrw3QqVMn\n7arFMAydPn1aBQsWti1LT0/X2rWr1bJlGz3ySB2tXbvatm7Pnp906tQJDRo0RF5eXpKkwoW9FREx\nQbVr15EkHT16WMePH9OkSdNue/78+QuoWrXqdtfrLBhRAQA4taCgYO3cGa0PPnhfoaGDbcvffXe6\nChUqrMWLVyg1NVXDhw/RsmVL1b17T6WkpMjb21tz5nykw4cPacCAXmrb9kX9/PMBffnlF5o9e4Hy\n5MmjH374XqNGhWvp0qgszz1+/Gh5eeVRXNwVGYahJk2e0LRp/7Stj47eoaSkJD36aANdu3ZNM2f+\nU126dJe7u7sOHz6khx+uKTe3zHPplC3rp7Jl/SRJDz9cUw8/XFPnzp297ecQE3NSe/b8pK5du9/N\nx2haBBUAgFOzWq2KiJio4OCX1bBhI9vy77//TnPmfCiLxSJPT0+1bfuioqKWqXv3npKkxx9vKkmq\nWrWaUlJSlJSUqB07vtHp078pJCTYdpy4uDjFxV2x3bL5qxu3fs6ePaPBgwfI399fZco8ZFv/+eer\n9MwzgXJ3d9fjjzfR9OlTtHXrZrVoESir1SLDSL+n3l99tZ+sVjelp19Xnjx5NXDga6pevYZdwcZZ\nEFQAAE6vZMmSGjp0hCZNGqfAwFaSdFMIMIx0260fSfLyyiNJtodWDUO6fj1dzz77nAYMeFVSxq2b\n8+djVbBgoVuev3TpMoqImKBBg/rJ3/9h1ahRU7//fk7ff/+tjh49rG3btkqSrl+/rqioT9WiRaBq\n1KillSuX6fr165lGVQ4dOqhVq5YrImLibfv+6zMqropnVAAALuGpp55Wo0aPKSpqmSSpQYPGWr06\nSoZhKCUlRevWfa769Rve8hgNGjTS5s2bdP78eUnSmjWf6bXX+tt1/lq1HlG7du30zjtTbc+mBATU\n1po1X2rVqvVatWq9PvxwiY4ePaJ9+/aoZs0AlStXXjNnRio5OVmSdPHiBUVGTlepUmXu4ZNwLYyo\nAABcxuDB4dq3b8///3uoIiOnKyjoJaWmpqlRo8YKCgq+5f4NGzbWyy/3UFjYAFmtVuXLl1+TJ0+X\nxWLR4cM/a+rUSVq06NNs9x8yZIiefTZQn322Uhs2rNWIEWMyrS9b1k9PP91CK1cuU0BAbU2a9Jbm\nzXtfvXp1l5tbxi2cli1bq0uXe3/OJDExUc8880SmZXPnLpS/f6V7Pvb9ZDEMw8jtInCz2Nj43C4h\nRxUrVtClenK1fiTX68nV+pHoyQzCw1/T9Okzsl3vbP3Y4370VKxYwWzXcesHAAA7xMb+qXbtOuZ2\nGQ8cbv0AAGCHYsWKq1ix4rldxgOHERUAAGBaBBUAAGBaBBUAAGBaPKMCALhnwVO35ujxPhr+1G23\nuXLlsj744H298cYodejQRiVKlJTVapVhGCpUqLBGjx6nESOGql+/gXr44ZpKTU1V69ZPq0ePXura\nNUiSFBraV6+99roqV66qzz5boa++2ih394z/NNav31A9e/bWxo1faMOGtUpJSdHJkydUpUpVSRlv\npe3fv1em8xYrVkTh4aOVL1/+bOtOSkpShw6t1b37K3rppZez3S429k8tXbpIYWFv3MlHp2++2a74\n+Di1bNn6jvYzK4IKAMApzZ8/R+3bd7L9/c9/zrJN7jd79nv64ov1evTRhtq7d48efrim9u7drQYN\nGmvHjm/VtWuQkpOT9ccfv6tSpSr6/PNV2r9/n957b668vLyUlpam8eNH64cfvldgYCsFBrbSuXNn\nNXbsSM2aNS9THX8976JFc/XFF+vVsWPnbOv+978369lnn9OGDWvVqVNX25tx/65YseJ3HFIk6fHH\nm2jIkFA1bfrkLQOTs+DWDwDA6Vy9mqBDh35WpUqVb1pnGIYSEuKVN29e1a/fUPv27ZYk7djxrdq0\neUEJCfFKSEjQwYP7Vbt2XVksFq1evVKDB4fbAoe7u7smTHhTDRo0uun42TEMQ/HxGee9lfXr16hV\nq7YqX76ioqN3SMp4I+2gQf0UGtpXffv21PHjx3T69G/q37+XJGnLlq80aFA/9e8frNDQvoqLu6Kd\nO6MVHv6ahg8foqCgl7RkySLbORo2bKyNG/9ld+1mxogKAMDpHDx4QH5+5TItGzIkVFarVRaLRdWr\n11BgYCtZrVadOnVShmFo797d6tdvoB59tKF+/DFax48fU8OGjSVlTDx4Y86cbdv+raioZUpOTtYj\nj9TJNCNzVv563nr16tjmGsrKqVMnlZ6erooV/dWq1fNavTpKjRo9poMH98vX11cjR47Tr78eU2Li\nNVtokqTTp3/T22+/Jy8vL7355gTt3BmtQoUK648/ftfChZ8qOTlJ7du3sk246O9fWWvXrlb79s7/\n3heCCgDA6Vy+fFm+vr6Zlv31FsxfVapURd9//518fYvI09NTjRo9pu+++6+OHfvFdosmX758thmS\nmzZ9Uk2bPqnvv/9OW7Z8ddta/nre273Fdd26z3X1aoKGDBkkw0jXgQP7dfbsGT322BM6c+a0hg8f\nIg8PD/Xo0TvTft7ePpo4cYzy5cunEyd+Vd26j0rKCCRubm7Kly+/PD3/13uRIkUVF3fltrU7A4IK\nAMDp+Pj4KD7evte616/fUEuWLNTTTz8rSQoIqK2FC+fLYrGoUKHCkqT27Ttpxox3NGzYaHl6eur6\n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\n//zT0bUAAABkYteISlJSkgIDA1WlSpVMb6ZdvHixwwoDAACwK6j069fP0XUAAADcxK6g0qBBA0fX\nAQAAcBO7nlEBAADIDQQVAABgWgQVAABgWgQVAABgWgQVAABgWgQVAABgWgQVAABgWgQVAABgWgQV\nAABgWgQVAABgWhbDMIzcLgKZ7foqPLdLAAAgS351xuT4MYsVK5jtOkZUAACAaRFUAACAaRFUAACA\naRFUAACAaRFUAACAaRFUAACAaRFUAACAaRFUAACAaRFUAACAaRFUAACAaRFUAACAaRFUAACAaRFU\nAACAaRFUAACAabnndgG42Rebmtz3c/Yf3syhxy9WrKBiY+Mdeo77ydX6kVyvJ1frR6InZ+Bq/Ui5\n3xMjKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQI\nKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLTcc7sA3Kz5sUX3/ZxHezv2nEcdevScUWXBotwu\nAQDwN4yoAAAA0yKoAAAA0yKoAAAA08r1oBIWFqaUlJQs112+fFnr16+XJM2bN0/79u27n6VJkrZv\n364VK1bctLxTp046ffr0HR0rOTlZUVFROVUaAAAuL9eDSmRkpDw9PbNcd+TIEW3dulWS1LdvXwUE\nBNzP0iRJTZo00UsvvZQjx4qNjSWoAABwBxzyq5/U1FSNHTtWp06dUnp6ugYPHqwaNWqoU6dOioyM\nlJubm8LCwrRs2TI9//zz+vLLL7Vt2zbNnz9f7u7uKl68uCIjIzV37lwdPnxYK1as0O7du/Xcc8/p\n/Pnz2rZtm5KSkhQTE6M+ffqoffv22rdvn8aPH6/8+fOrSJEi8vLy0tSpU201rV69Wp999pnS09P1\n6quv6vLly1q0aJGsVqvq1aunoUOHateuXZo2bZrc3d2VN29ezZgxQ1999ZV+/fVXDR06VJGRkfrv\nf/+rkiVL6tKlS5Kk+Ph4jRo1yvb36NGjVbVqVbVo0UJ169bViRMnVKRIEc2cOVNz587VsWPHNGvW\nLIWGhjriowcAwKU4JKhERUXJx8dHU6ZM0aVLl9StWzd98cUXmjp1qiIiImQYht566y0VKFDAts+G\nDRvUq1cvBQYGas2aNUpISFBISIiWL1+ul156Sbt377Ztm5CQoA8//FAnT55USEiI2rdvr7Fjx+qt\nt95S5cqVFRkZqT/++OOmugoVKqQ5c+bo8uXL6tq1qz777DPlzZtX4eHh+vbbb/XNN9+oZcuW6tGj\nh7Zu3aq4uDjbvvv379fOnTu1atUqXbt2TS1atJAkzZ07V40aNVLXrl118uRJjRgxQsuWLdNvv/2m\njz/+WKVKlVLnzp21f/9+hYSE6OjRo4QUkypWrKBDt3cGrtaTq/Uj0ZMzcLV+pNztySFB5ejRo9q1\na5ftmZK0tDRdvHhRAQEBKliwoDw8PFS9evVM+4wYMUIffPCBli5dqooVK+rpp5/O9vjVqlWTJJUq\nVcr2fMuff/6pypUrS5Lq1aunf/3rXzftV6FCBUlSTEyMLl68qL59+0qSrl69qpiYGIWEhGju3Lnq\n0aOHSpQokelW08mTJ1WzZk1ZrVYVKFBAVapUsfX6/fff68svv5QkXblyRZLk4+OjUqVK2epMTk6+\nk48QuSA2Nt7ubYsVK3hH2zsDV+vJ1fqR6MkZuFo/0v3p6VZByCHPqFSsWFGtWrXSkiVLNH/+fAUG\nBsrb21sbN25U/vz55e7uro0bN2baZ8WKFRo0aJCWLl0qSfr6669ltVqVnp5+0/EtFstNy0qWLKlj\nx45Jkvbu3ZtlXVZrRrsPPfSQSpUqpY8++khLlixRt27dVLt2ba1bt07t2rXTkiVLVLlyZa1cudK2\nb6VKlbRv3z6lp6fr2rVrtnNVrFhRPXv21JIlS/Tuu+/q+eefz7bG7PoBAABZc8iISufOnTV69Gh1\n69ZNCQkJ6tq1q86dO6cZM2bok08+kWEY6tq1q2rVqmXbJyAgQP369VP+/PmVL18+NWvWTCkpKTp6\n9KgWLVp023OOHTtWI0eOVL58+eTh4aESJUpku62vr6969uyp7t276/r16ypTpoxatmyplJQUjR49\nWnnz5pXVatWECRO0c+dOSVL16tXVpEkTdejQQcWLF1eRIkUkSSEhIRo1apRWrlyphISEW97WKVKk\niFJTUzV9+nSFh4fb+WkCAPDgshiGYeR2ETnhk08+UcuWLeXr66vIyEh5eHg47bMg37Z9MbdLeCDd\nySv0Gd41P1frR6InZ+Bq/Ui5f+vHZeb6KVKkiIKDg5UvXz4VLFgw0y9+AACAc3KZoBIYGKjAwMDc\nLgMAAOSgXH/hGwAAQHZcZkTFlczoWjy3S8jW+0+9dVf7ueJ9WwCA4zGiAgAATIugAgAATIugAgAA\nTIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIug\nAgAATIvZk00o8YfA3C4hW8E/bM3tEnLcR8Ofyu0SAADZYEQFAACYFkEFAACYFkEFAACYFkEFAACY\nFkEFAACYFkEFAACYFkEFAACYFkEFAACYFkEFAACYFkEFAACYFkEFAACYFkEFAACYFkEFAACYFkEF\nAACYlntuF4CbrX+nrWJj43O7jBxVrFhBl+sJAOB4jKgAAADTIqgAAADTIqgAAADTIqgAAADTIqgA\nAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADT\nIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgA\nAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADT\nIqgAAADTIqgAAADTIqgAAADTIqgAAADTshiGYeR2EQAAAFlhRAUAAJgWQQUAAJgWQQUAAJgWQQUA\nAJgWQQUAAJgWQQUAAJiWe24X8KBJT0/XuHHjdOTIEXl6emrSpEkqV66cbf3WrVv1/vvvy93dXS++\n+KI6dep0231y0+1q27Bhgz7++GO5ubmpSpUqGjdunKxWq9q1a6cCBQpIkh566CG9+eabudXCTW7X\n06JFixQVFSVfX19J0vjx41W+fHmn/I5iY2M1ZMgQ27aHDh3S66+/ri5dupj6O7ph7969evvtt7Vk\nyZJMy53tOrohu36c8Tq6IbuenO06uiGrfpz1OkpNTdXIkSN15swZpaSkqH///mrevLltvWmuIwP3\n1aZNm4xhw4YZhmEYu3fvNkJCQmzrUlJSjKefftq4fPmykZycbLRv396IjY295T657Va1JSYmGs2b\nNzeuXbtmGIZhhIWFGZs3bzaSkpKMtm3b5kq99rjd5/36668b+/fvv6N9cpO9tf30009G9+7djbS0\nNNN/R4ZhGPPmzTNat25tdOzYMdNyZ7yODCP7fpz1OjKM7HsyDOe7jgzj1v3c4EzX0apVq4xJkyYZ\nhmEYly5dMpo2bWpbZ6briFs/99muXbv0xBNPSJJq166tAwcO2NYdP35cfn5+Kly4sDw9PVWvXj3t\n3LnzlvvktlvV5unpqeXLlytv3rySpLS0NHl5eenw4cNKTExUcHCwgoKCtGfPnlypPTu3+7wPHjyo\nefPmqUuXLvrggw/s2ic32VObYRiaOHGixo0bJzc3N9N/R5Lk5+enmTNn3rTcGa8jKft+nPU6krLv\nSXK+60i6dT+S811HgYGBeu211yRl1O7m5mZbZ6briFs/91lCQoJtGFCS3NzclJaWJnd3dyUkJKhg\nwYK2dfnz51dCQsIt98ltt6rNarWqaNGikqQlS5bo2rVr+sc//qGjR4+qV69e6tixo06ePKk+ffpo\n48aNpuhHunVPktSqVSt17dpVBQoUUGhoqP7973877Xd0w9atW1W5cmVVrFhRkpQnTx5Tf0eS9Oyz\nz+r06dM3LXfG60jKvh9nvY6k7HuSnO86km7dj+R811H+/PklZVwzr776qgYPHmxbZ6bryByf1gOk\nQIECunr1qu3v9PR02xf893VXr15VwYIFb7lPbrtdbenp6Zo+fbpOnDihmTNnymKxqEKFCipXrpzt\n397e3oqNjVWpUqVyo4Wb3KonwzDUo0cP2wXctGlT/fzzz079HUnSunXrFBQUZPvb7N/RrTjjdXQ7\nzngd3YozXkf2cMbr6Ny5cxo4cKC6du2qNm3a2Jab6Tri1s99VrduXW3fvl2StGfPHlWpUsW2zt/f\nX6dOndLly5eVkpKiH3/8UXXq1LnlPrntdrWNGTNGycnJmj17tm3oetWqVZo6daok6Y8//lBCQoKK\nFSt2fwu/hVv1lJCQoNatW+vq1asyDEPR0dGqWbOmU39HknTgwAHVrVvX9rfZv6Nbccbr6Hac8Tq6\nFWe8juzhbNfR+fPnFRwcrPDwcHXo0CHTOjNdR84TVV3EM888o2+//VadO3eWYRiaMmWK1q9fr2vX\nrumll17S8OHD1atXLxmGoRdffFElSpTIch+zuFU/NWvW1KpVq/Too4+qR48ekqSgoCB16NBBI0aM\nUJcuXWSxWDRlyhRT/V/T7b6jsLAwBQUFydPTU40bN1bTpk2Vnp7ulN/RSy+9pIsXL6pAgQKyWCy2\nfcz+HWXFma+jrDj7dZQVZ76OsuLs19HcuXMVFxen2bNna/bs2ZKkjh07KjEx0VTXEbMnAwAA0+LW\nDwAAMC2CCgAAMC2CCgAAMC2CCgAAMC2CCgAAyBF79+5V9+7ds12/fft2de/eXd27d1e3bt1UvXp1\nHT9+/JbHNM/vpAAAgNOaP3++1q1bZ3vXT1aaNGmiJk2aSJIWLFigunXryt/f/5bHZUQFAADcs7/P\nhXTkyBHb6MmgQYMUHx9vW/f7779r7dq1Cg0Nve1xCSoAAOCePfvss5leaBcREaGxY8dqyZIlatKk\niRYsWGBbt3DhQvXs2VOenp63PS63fgAAQI47fvy4xo8fL0lKTU1V+fLlJWXMD/Sf//xHYWFhdh2H\noAIAAHJchQoVNG3aNJUuXVq7du1SbGysJOno0aOqUKGC8uTJY9dxCCoAACDHjRs3TsOGDVNaWpos\nFosmT54sSTpx4oTKli1r93GY6wcAAJgWD9MCAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgA\nAADTIqgAAADTIqgAAADT+j/SEU8Sq14sZgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "new_by_race.unstack().plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bridge housing, person universes\n", "\n", "Now we use `MIGPUMA` on the *person* table to determine a newcomer *household* (filtering on selected pums_p.SERIALNO values). All handshakes make use of this variable. \n", "\n", "Notice the nesting of `pums_p` criteria inside a `pums_h` call." ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "existing resident 125077\n", "new resident 28038\n", "Name: recent, dtype: int64" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pums_h['newcomer'] = 0\n", "pums_h.loc[pums_p.loc[(pums_p.MIGPUMA!=7500)&(pums_p.MIGPUMA>0),'SERIALNO'].tolist(),'newcomer']=1\n", "\n", "pums_h['recent']=pums_h['newcomer'].map({0:'existing resident',1:'new resident'})\n", "pums_h.recent.value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at how recent arrival households compare to existing resident households in terms of the vintage of housing they live in." ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "scrolled": false }, "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", "
WGTP
recentYBLL
existing resident1939 or earlier1125958
1940 to 19592399213
1960 to 19793618134
1980 to 19992951629
2000 to 20111391347
new resident1939 or earlier181456
1940 to 1959371722
1960 to 1979712846
1980 to 1999608062
2000 to 2011342896
\n", "
" ], "text/plain": [ " WGTP\n", "recent YBLL \n", "existing resident 1939 or earlier 1125958\n", " 1940 to 1959 2399213\n", " 1960 to 1979 3618134\n", " 1980 to 1999 2951629\n", " 2000 to 2011 1391347\n", "new resident 1939 or earlier 181456\n", " 1940 to 1959 371722\n", " 1960 to 1979 712846\n", " 1980 to 1999 608062\n", " 2000 to 2011 342896" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nnqnffz+t8eMnS5I8PT1z1GSxWK77/K9bYXoyAAD/w8zTk3/55WeFh4/Q2LGTbGchihUrLkk6ffqU\nDMPQ999/p8DABqpbt7527PhOhmHo9OlTslqtKlas2F2fnjxlSqQMw9CECdNsl4AaNmxo28fevXsU\nEHDPP+qX6ckAAPwPM09Pnjt3jtLT0xUVlX3/XrFixTVx4jQNGjRcEREjlZWVpaCgFqpZs5Yk6d57\n66hnz64yDEMDBgyRpLs6PfnAgX36+OMPFRhYX337Zt/3EhLyktq2baMvvvhaoaHdJEkjRoT/o++g\nUE5PLuw6rOpt7xJuCzfT5k5h6bWw9CnRq70xPfnOMD0ZAIA8xPRk+yvU05MBALgZH58SGjp0lF1r\nyMs/0AVBjRo17/oZrf/FGRUAAGBaBBUAAGBaBBUAAGBaBBUAAGBaBBUAAGBaBBUAAGBaBBUAAGBa\nPEfFhJK/b33Xt7lo2EN3fZsAAOQ1zqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADT\nIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTstq7AFxrw4x2\nOnfuir3LAADA7jijAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAA\nTIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATIug\nAgAATIugAgAATIugAgAATIugAgAATIugAgAATIugAgAATCtXQWXdunXXLFu+fPldLwYAAODvrDd7\nc/HixUpISNDKlSt16tQp2/KMjAxt3LhRL730Up4XCAAACq+bnlGpVKnSdZe7ublp8uTJeVIQAADA\nVTc9o9KqVSu1atVKbdq0UbVq1fKrJgAAAEm3CCpXnT59WkOGDNGlS5dkGIZt+eeff55nhQEAAOQq\nqERGRmrYsGEKCAiQxWLJ65oAAAAk5TKo+Pj4qFWrVnldCwAAQA65CiqNGjXSpEmTdP/998vNzc22\nvEmTJnlWGAAAQK6CSlxcnCTpwIEDtmUWi0VLlizJm6oAAACUy6CydOnSvK4DAADgGrl6Mu2pU6f0\nyiuv6NFHH9W5c+fUuXNnnTx5Mq9rAwAAhVyugsqYMWP06quvyt3dXaVKldKTTz6poUOH5nVtAACg\nkMtVULlw4YKCg4MlZd+b0qFDByUkJORpYQAAALkKKkWKFNHvv/9ue4bKDz/8IFdX1zwtDAAAIFc3\n0w4bNkw7ks5VAAAQxElEQVS9evXSiRMn1K5dO126dEmzZs3K69oAAEAhl6ugEhgYqLVr1+rYsWPK\nzMxUhQoV5Onpmde1AQCAQi5Xl34++ugjtW/fXgEBAXJ3d9cTTzyhzz77LK9rAwAAhVyugkpsbKze\nfvttSZK/v7/ef/99zZkzJ08LAwAAyFVQSU9PV6lSpWyvS5YsmWOKMgAAQF7I9ayfgQMH6qmnnpIk\nbdq0SfXr18/TwgAAAHIVVMLDw7V06VKtWrVKVqtVjRs3VseOHfO6NgAAUMjlKqi4urrqscceU7Vq\n1RQcHKwzZ87wHBUAAJDncv2rn969e2vChAm6dOmSQkJC9MEHH+R1bQAAoJDLVVBZsGCB3n33XXl4\neKhkyZJat26d5s+fn9e1AQCAQi5XQcXJySnHA95Kly4tJ6dcfRQAAOAfy9U9KgEBAVq2bJkyMjJ0\n8OBBrVixQjVr1szr2gAAQCGXq9MiSUlJOnv2rNzc3DRixAh5enoqPDw8r2sDAACFXK7OqJw6dUoT\nJ07UG2+8kdf1AAAA2OQqqDg5Oemhhx5SlSpV5ObmZlu+ZMmSPCsMAAAgV0Fl8ODBeV0HAADANXIV\nVJo2bZrXdQAAAFyD3xgDAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgA\nAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADTIqgAAADT\nIqgAAADTIqgAAADTIqgAAADTstq7AFxr1yeD7V1Cvjlh7wLyUUHt1b/BGHuXAKAQ44wKAAAwLYIK\nAAAwLYIKAAAwLYIKAAAwLYIKAAAwLYIKAAAwLYIKAAAwLYIKAAAwLYIKAAAwLYIKAAAwLYIKAAAw\nLYIKAAAwLYIKAAAwLYIKAAAwLau9C8C1Ptzc0t4lAH/Z/JW9KwDyRO9hD9q7BOQCZ1QAAIBpEVQA\nAIBpEVQAAIBpEVQAAIBpEVQAAIBpEVQAAIBpEVQAAIBpEVQAAIBpEVQAAIBpEVQAAIBpEVQAAIBp\nEVQAAIBpEVQAAIBpEVQAAIBpWQzDMOxdBHL6tt2z9i4BAIDrqvHW4ru+TV9frxu+xxkVAABgWgQV\nAABgWgQVAABgWnYPKgMGDFBaWtp137t48aI2bNggSZo/f77i4uLyszRJ0pYtW7Rq1aprlnfo0EEn\nT568rW2lpqZqzZo1d6s0AAAcnt2DSlRUlFxdXa/73uHDh/XFF19Iknr27KnAwMD8LE2S1LJlS73w\nwgt3ZVvnzp0jqAAAcBusebHR9PR0hYeH6/jx48rKylL//v1Vu3ZtdejQQVFRUXJ2dtaAAQP07rvv\nqm3bttq0aZO+/vprLViwQFarVaVLl1ZUVJTmzp2rQ4cOadWqVdq9e7cef/xxxcfH6+uvv1ZKSopO\nnDihHj16qH379oqLi9PYsWPl4eGhkiVLys3NTZMnT7bV9P777+u9995TVlaW+vbtq4sXL2rx4sVy\ncnJSo0aNNGjQIO3atUtTpkyR1WpV0aJFNWvWLH3yySf69ddfNWjQIEVFRembb75R2bJldeHCBUnS\nlStXNHLkSNvrUaNG6Z577tGjjz6qhg0b6ujRoypZsqTmzJmjuXPn6ueff1Z0dLTCwsLy4qsHAMCh\n5ElQWbNmjXx8fDRx4kRduHBBnTp10ocffqjJkydr9OjRMgxDU6dOlaenp+0zGzdu1KuvvqrWrVtr\n/fr1SkhIUGhoqFauXKkXXnhBu3fvtq2bkJCghQsX6tixYwoNDVX79u0VHh6uqVOnKiAgQFFRUTp7\n9uw1dRUrVkyxsbG6ePGiOnbsqPfee09FixbV4MGD9e2332rr1q1q06aNunTpoi+++EKXL1+2ffbH\nH3/Uzp07tXbtWiUlJenRRx+VJM2dO1dBQUHq2LGjjh07puHDh+vdd9/Vb7/9pnfeeUd+fn4KCQnR\njz/+qNDQUB05coSQAgAosG72U+K8kCdB5ciRI9q1a5ftnpKMjAydP39egYGB8vLykouLi2rVqpXj\nM8OHD9e8efO0bNkyVa1aVQ8//PANt1+zZk1Jkp+fn+3+lj/++EMBAQGSpEaNGumjjz665nNVqlSR\nJJ04cULnz59Xz549JUmJiYk6ceKEQkNDNXfuXHXp0kVlypTJcanp2LFjqlOnjpycnOTp6akaNWrY\net2+fbs2bdokSbp06ZIkycfHR35+frY6U1NTb+crBADAlM6du3LXt5nvz1GpWrWqnnjiCS1dulQL\nFixQ69at5e3trY8//lgeHh6yWq36+OOPc3xm1apVev3117Vs2TJJ0qeffionJydlZWVds32LxXLN\nsrJly+rnn3+WJO3du/e6dTk5ZbdboUIF+fn5adGiRVq6dKk6deqk+vXr6z//+Y+eeeYZLV26VAEB\nAVq9erXts9WrV1dcXJyysrKUlJRk21fVqlXVtWtXLV26VDNnzlTbtm1vWOON+gEAANeXJ2dUQkJC\nNGrUKHXq1EkJCQnq2LGjzpw5o1mzZmn58uUyDEMdO3ZU3bp1bZ8JDAxUr1695OHhIXd3dz344INK\nS0vTkSNHtHjx4lvuMzw8XCNGjJC7u7tcXFxUpkyZG65bokQJde3aVS+//LIyMzNVvnx5tWnTRmlp\naRo1apSKFi0qJycnjRs3Tjt37pQk1apVSy1bttRzzz2n0qVLq2TJkpKk0NBQjRw5UqtXr1ZCQsJN\nL+uULFlS6enpmjZtmgYPHpzLbxMAgMLLYR6hv3z5crVp00YlSpRQVFSUXFxcCuy9IDxCHwBgVvn9\nCP08OaNiDyVLllS3bt3k7u4uLy+vHL/4AQAABZPDBJXWrVurdevW9i4DAADcRXZ/4BsAAMCNOMwZ\nFUcyq2Npe5cAwMG9+dDU21rf19crT36WakaFpdeC0idnVAAAgGkRVAAAgGkRVAAAgGkRVAAAgGkR\nVAAAgGkRVAAAgGkRVAAAgGkRVAAAgGkRVAAAgGkRVAAAgGkRVAAAgGkRVAAAgGkRVAAAgGkxPdmE\nkr9vbe8SYCKLhj1k7xJuS0GZyHo3FKZeAXvhjAoAADAtggoAADAtggoAADAtggoAADAtggoAADAt\nggoAADAtggoAADAtggoAADAtggoAADAtggoAADAtggoAADAtggoAADAtggoAADAtggoAADAtq70L\nwLU2zGhXaEbH+/p60SsA4IY4owIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIA\nAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyL\noAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIA\nAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyLoAIAAEyL\noAIAAEyLoAIAAEzLYhiGYe8iAAAAroczKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQIKgAAwLQIKgAA\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "hsg_by_bltyr = pums_h.loc[:,['recent','YBLL','WGTP']].groupby(['recent','YBLL']).sum()\n", "hsg_by_bltyr.unstack().plot(kind='barh')\n", "hsg_by_bltyr" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Your Turn: Back to Rental Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's get some additional practice with groupby operations, using our rental listings data." ] }, { "cell_type": "code", "execution_count": 119, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import numpy as np\n", "rents = pd.read_csv('data/rent_bay_filtered.csv').dropna()" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Unnamed: 0,\n", "neighborhood,\n", "title,\n", "price,\n", "bedrooms,\n", "pid,\n", "longitude,\n", "subregion,\n", "link,\n", "latitude,\n", "sqft,\n", "month,\n", "day,\n", "year,\n", "blockfips,\n", "countyfips,\n", "county_x,\n", "tractfips,\n", "logrecno,\n", "fipsblock,\n", "state,\n", "county_y,\n", "tract,\n", "blkgrp,\n", "block,\n", "arealand,\n", "P0010001,\n", "H00010001,\n", "outlier,\n", "view,\n", "walk,\n" ] } ], "source": [ "for name in rents.columns:\n", " print(name+',',)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Generate a groupby object called 'grouped' grouping on county_x" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now compute the mean price for each county_x" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot this as a bar chart" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the maximum price per county_x" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot this as a horizontal bar chart" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute a groupby object using county, and within county_x, by number of bedrooms." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the mean price and sqft in each groupby value (county_x and bedroom)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the 'unstack' method to present the results as a two-dimensional table" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot this as a horizontal bar chart (increase figsize to 10,10 to make this legible)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do the same tabulation (no plot), but presenting the 10th percentile values instead of means" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do the same, but use describe to get the full statistical profile " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do the same, presenting the count of how many nonmissing price values there are in each group" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define a function called 'q75_q25' that computes the difference between the 75th percentile and the 25th percentile, and analyze this value in the groupby" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a list of functions to apply, using min, median, max, and q75_q25 for price and sqft by county_x, and bedrooms" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the pivot_table syntax to create a table of max prices by county_x by bedrooms" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [default]", "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.3" } }, "nbformat": 4, "nbformat_minor": 1 }