From b97e60bfbb0065d3528b7f87e18eabf54aed03c7 Mon Sep 17 00:00:00 2001 From: Vim <86254807+vim-usds@users.noreply.github.com> Date: Thu, 1 Dec 2022 18:50:54 -0800 Subject: [PATCH] Backend release branch to main (#1822) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create deploy_be_staging.yml (#1575) * Imputing income using geographic neighbors (#1559) Imputes income field with a light refactor. Needs more refactor and more tests (I spotchecked). Next ticket will check and address but a lot of "narwhal" architecture is here. * Adding HOLC indicator (#1579) Added HOLC indicator (Historic Redlining Score) from NCRC work; included 3.25 cutoff and low income as part of the housing burden category. * Update backend for Puerto Rico (#1686) * Update PR threshold count to 10 We now show 10 indicators for PR. See the discussion on the github issue for more info: https://github.com/usds/justice40-tool/issues/1621 * Do not use linguistic iso for Puerto Rico Closes 1350. Co-authored-by: Shelby Switzer * updating * Do not drop Guam and USVI from ETL (#1681) * Remove code that drops Guam and USVI from ETL * Add back code for dropping rows by FIPS code We may want this functionality, so let's keep it and just make the constant currently be an empty array. Co-authored-by: Shelby Switzer * Emma nechamkin/holc patch (#1742) Removing HOLC calculation from score narwhal. * updating ejscreen data, try two (#1747) * Rescaling linguistic isolation (#1750) Rescales linguistic isolation to drop puerto rico * adds UST indicator (#1786) adds leaky underground storage tanks * Changing LHE in tiles to a boolean (#1767) also includes merging / clean up of the release * added indoor plumbing to chas * added indoor plumbing to score housing burden * added indoor plumbing to score housing burden * first run through * Refactor DOE Energy Burden and COI to use YAML (#1796) * added tribalId for Supplemental dataset (#1804) * Setting zoom levels for tribal map (#1810) * NRI dataset and initial score YAML configuration (#1534) * update be staging gha * NRI dataset and initial score YAML configuration * checkpoint * adding data checks for release branch * passing tests * adding INPUT_EXTRACTED_FILE_NAME to base class * lint * columns to keep and tests * update be staging gha * checkpoint * update be staging gha * NRI dataset and initial score YAML configuration * checkpoint * adding data checks for release branch * passing tests * adding INPUT_EXTRACTED_FILE_NAME to base class * lint * columns to keep and tests * checkpoint * PR Review * renoving source url * tests * stop execution of ETL if there's a YAML schema issue * update be staging gha * adding source url as class var again * clean up * force cache bust * gha cache bust * dynamically set score vars from YAML * docsctrings * removing last updated year - optional reverse percentile * passing tests * sort order * column ordening * PR review * class level vars * Updating DatasetsConfig * fix pylint errors * moving metadata hint back to code Co-authored-by: lucasmbrown-usds * Correct copy typo (#1809) * Add basic test suite for COI (#1518) * Update COI to use new yaml (#1518) * Add tests for DOE energy budren (1518 * Add dataset config for energy budren (1518) * Refactor ETL to use datasets.yml (#1518) * Add fake GEOIDs to COI tests (#1518) * Refactor _setup_etl_instance_and_run_extract to base (#1518) For the three classes we've done so far, a generic _setup_etl_instance_and_run_extract will work fine, for the moment we can reuse the same setup method until we decide future classes need more flexibility --- but they can also always subclass so... * Add output-path tests (#1518) * Update YAML to match constant (#1518) * Don't blindly set float format (#1518) * Add defaults for extract (#1518) * Run YAML load on all subclasses (#1518) * Update description fields (#1518) * Update YAML per final format (#1518) * Update fixture tract IDs (#1518) * Update base class refactor (#1518) Now that NRI is final I needed to make a small number of updates to my refactored code. * Remove old comment (#1518) * Fix type signature and return (#1518) * Update per code review (#1518) Co-authored-by: Jorge Escobar <83969469+esfoobar-usds@users.noreply.github.com> Co-authored-by: lucasmbrown-usds Co-authored-by: Vim <86254807+vim-usds@users.noreply.github.com> * Update etl_score_geo.py Yikes! Fixing merge messup! * Create deploy_be_staging.yml (#1575) * Imputing income using geographic neighbors (#1559) Imputes income field with a light refactor. Needs more refactor and more tests (I spotchecked). Next ticket will check and address but a lot of "narwhal" architecture is here. * Adding HOLC indicator (#1579) Added HOLC indicator (Historic Redlining Score) from NCRC work; included 3.25 cutoff and low income as part of the housing burden category. * Update backend for Puerto Rico (#1686) * Update PR threshold count to 10 We now show 10 indicators for PR. See the discussion on the github issue for more info: https://github.com/usds/justice40-tool/issues/1621 * Do not use linguistic iso for Puerto Rico Closes 1350. Co-authored-by: Shelby Switzer * updating * Do not drop Guam and USVI from ETL (#1681) * Remove code that drops Guam and USVI from ETL * Add back code for dropping rows by FIPS code We may want this functionality, so let's keep it and just make the constant currently be an empty array. Co-authored-by: Shelby Switzer * Emma nechamkin/holc patch (#1742) Removing HOLC calculation from score narwhal. * updating ejscreen data, try two (#1747) * Rescaling linguistic isolation (#1750) Rescales linguistic isolation to drop puerto rico * adds UST indicator (#1786) adds leaky underground storage tanks * Changing LHE in tiles to a boolean (#1767) also includes merging / clean up of the release * added indoor plumbing to chas * added indoor plumbing to score housing burden * added indoor plumbing to score housing burden * first run through * Refactor DOE Energy Burden and COI to use YAML (#1796) * added tribalId for Supplemental dataset (#1804) * Setting zoom levels for tribal map (#1810) * NRI dataset and initial score YAML configuration (#1534) * update be staging gha * NRI dataset and initial score YAML configuration * checkpoint * adding data checks for release branch * passing tests * adding INPUT_EXTRACTED_FILE_NAME to base class * lint * columns to keep and tests * update be staging gha * checkpoint * update be staging gha * NRI dataset and initial score YAML configuration * checkpoint * adding data checks for release branch * passing tests * adding INPUT_EXTRACTED_FILE_NAME to base class * lint * columns to keep and tests * checkpoint * PR Review * renoving source url * tests * stop execution of ETL if there's a YAML schema issue * update be staging gha * adding source url as class var again * clean up * force cache bust * gha cache bust * dynamically set score vars from YAML * docsctrings * removing last updated year - optional reverse percentile * passing tests * sort order * column ordening * PR review * class level vars * Updating DatasetsConfig * fix pylint errors * moving metadata hint back to code Co-authored-by: lucasmbrown-usds * Correct copy typo (#1809) * Add basic test suite for COI (#1518) * Update COI to use new yaml (#1518) * Add tests for DOE energy budren (1518 * Add dataset config for energy budren (1518) * Refactor ETL to use datasets.yml (#1518) * Add fake GEOIDs to COI tests (#1518) * Refactor _setup_etl_instance_and_run_extract to base (#1518) For the three classes we've done so far, a generic _setup_etl_instance_and_run_extract will work fine, for the moment we can reuse the same setup method until we decide future classes need more flexibility --- but they can also always subclass so... * Add output-path tests (#1518) * Update YAML to match constant (#1518) * Don't blindly set float format (#1518) * Add defaults for extract (#1518) * Run YAML load on all subclasses (#1518) * Update description fields (#1518) * Update YAML per final format (#1518) * Update fixture tract IDs (#1518) * Update base class refactor (#1518) Now that NRI is final I needed to make a small number of updates to my refactored code. * Remove old comment (#1518) * Fix type signature and return (#1518) * Update per code review (#1518) Co-authored-by: Jorge Escobar <83969469+esfoobar-usds@users.noreply.github.com> Co-authored-by: lucasmbrown-usds Co-authored-by: Vim <86254807+vim-usds@users.noreply.github.com> * Update etl_score_geo.py Yikes! Fixing merge messup! * updated to fix linting errors (#1818) Cleans and updates base branch * Adding back MapComparison video * Add FUDS ETL (#1817) * Add spatial join method (#1871) Since we'll need to figure out the tracts for a large number of points in future tickets, add a utility to handle grabbing the tract geometries and adding tract data to a point dataset. * Add FUDS, also jupyter lab (#1871) * Add YAML configs for FUDS (#1871) * Allow input geoid to be optional (#1871) * Add FUDS ETL, tests, test-datae noteobook (#1871) This adds the ETL class for Formerly Used Defense Sites (FUDS). This is different from most other ETLs since these FUDS are not provided by tract, but instead by geographic point, so we need to assign FUDS to tracts and then do calculations from there. * Floats -> Ints, as I intended (#1871) * Floats -> Ints, as I intended (#1871) * Formatting fixes (#1871) * Add test false positive GEOIDs (#1871) * Add gdal binaries (#1871) * Refactor pandas code to be more idiomatic (#1871) Per Emma, the more pandas-y way of doing my counts is using np.where to add the values i need, then groupby and size. It is definitely more compact, and also I think more correct! * Update configs per Emma suggestions (#1871) * Type fixed! (#1871) * Remove spurious import from vscode (#1871) * Snapshot update after changing col name (#1871) * Move up GDAL (#1871) * Adjust geojson strategy (#1871) * Try running census separately first (#1871) * Fix import order (#1871) * Cleanup cache strategy (#1871) * Download census data from S3 instead of re-calculating (#1871) * Clarify pandas code per Emma (#1871) * Disable markdown check for link * Adding DOT composite to travel score (#1820) This adds the DOT dataset to the ETL and to the score. Note that currently we take a percentile of an average of percentiles. * Adding first street foundation data (#1823) Adding FSF flood and wildfire risk datasets to the score. * first run -- adding NCLD data to the ETL, but not yet to the score * Add abandoned mine lands data (#1824) * Add notebook to generate test data (#1780) * Add Abandoned Mine Land data (#1780) Using a similar structure but simpler apporach compared to FUDs, add an indicator for whether a tract has an abandonded mine. * Adding some detail to dataset readmes Just a thought! * Apply feedback from revieiw (#1780) * Fixup bad string that broke test (#1780) * Update a string that I should have renamed (#1780) * Reduce number of threads to reduce memory pressure (#1780) * Try not running geo data (#1780) * Run the high-memory sets separately (#1780) * Actually deduplicate (#1780) * Add flag for memory intensive ETLs (#1780) * Document new flag for datasets (#1780) * Add flag for new datasets fro rebase (#1780) Co-authored-by: Emma Nechamkin <97977170+emma-nechamkin@users.noreply.github.com> * Adding NLCD data (#1826) Adding NLCD's natural space indicator end to end to the score. * Add donut hole calculation to score (#1828) Adds adjacency index to the pipeline. Requires thorough QA * Adding eamlis and fuds data to legacy pollution in score (#1832) Update to add EAMLIS and FUDS data to score * Update to use new FSF files (#1838) backend is partially done! * Quick fix to kitchen or plumbing indicator Yikes! I think I messed something up and dropped the pctile field suffix from when the KP score gets calculated. Fixing right quick. * Fast flag update (#1844) Added additional flags for the front end based on our conversation in stand up this morning. * Tiles fix (#1845) Fixes score-geo and adds flags * Update etl_score_geo.py * Issue 1827: Add demographics to tiles and download files (#1833) * Adding demographics for use in sidebar and download files * Updates backend constants to N (#1854) * updated to show T/F/null vs T/F for AML and FUDS (#1866) * fix markdown * just testing that the boolean is preserved on gha * checking drop tracts works * OOPS! Old changes persisted * adding a check to the agvalue calculation for nri * updated with error messages * updated error message * tuple type * Score tests (#1847) * update Python version on README; tuple typing fix * Alaska tribal points fix (#1821) * Bump mistune from 0.8.4 to 2.0.3 in /data/data-pipeline (#1777) Bumps [mistune](https://github.com/lepture/mistune) from 0.8.4 to 2.0.3. - [Release notes](https://github.com/lepture/mistune/releases) - [Changelog](https://github.com/lepture/mistune/blob/master/docs/changes.rst) - [Commits](https://github.com/lepture/mistune/compare/v0.8.4...v2.0.3) --- updated-dependencies: - dependency-name: mistune dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * poetry update * initial pass of score tests * add threshold tests * added ses threshold (not donut, not island) * testing suite -- stopping for the day * added test for lead proxy indicator * Refactor score tests to make them less verbose and more direct (#1865) * Cleanup tests slightly before refactor (#1846) * Refactor score calculations tests * Feedback from review * Refactor output tests like calculatoin tests (#1846) (#1870) * Reorganize files (#1846) * Switch from lru_cache to fixture scorpes (#1846) * Add tests for all factors (#1846) * Mark smoketests and run as part of be deply (#1846) * Update renamed var (#1846) * Switch from named tuple to dataclass (#1846) This is annoying, but pylint in python3.8 was crashing parsing the named tuple. We weren't using any namedtuple-specific features, so I made the type a dataclass just to get pylint to behave. * Add default timout to requests (#1846) * Fix type (#1846) * Fix merge mistake on poetry.lock (#1846) Signed-off-by: dependabot[bot] Co-authored-by: Jorge Escobar Co-authored-by: Jorge Escobar <83969469+esfoobar-usds@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Matt Bowen <83967628+mattbowen-usds@users.noreply.github.com> Co-authored-by: matt bowen * just testing that the boolean is preserved on gha (#1867) * updated with hopefully a fix; coercing aml, fuds, hrs to booleans for the raw value to preserve null character. * Adding tests to ensure proper calculations (#1871) * just testing that the boolean is preserved on gha * checking drop tracts works * adding a check to the agvalue calculation for nri * updated with error messages * tribal tiles fix (#1874) * Alaska tribal points fix (#1821) * tribal tiles fix * disabling child opportunity * lint * removing COI * removing commented out code * Pipeline tile tests (#1864) * temp update * updating with fips check * adding check on pfs * updating with pfs test * Update test_tiles_smoketests.py * Fix lint errors (#1848) * Add column names test (#1848) * Mark tests as smoketests (#1848) * Move to other score-related tests (#1848) * Recast Total threshold criteria exceeded to int (#1848) In writing tests to verify the output of the tiles csv matches the final score CSV, I noticed TC/Total threshold criteria exceeded was getting cast from an int64 to a float64 in the process of PostScoreETL. I tracked it down to the line where we merge the score dataframe with constants.DATA_CENSUS_CSV_FILE_PATH --- there where > 100 tracts in the national census CSV that don't exist in the score, so those ended up with a Total threshhold count of np.nan, which is a float, and thereby cast those columns to float. For the moment I just cast it back. * No need for low memeory (#1848) * Add additional tests of tiles.csv (#1848) * Drop pre-2010 rows before computing score (#1848) Note this is probably NOT the optimal place for this change; it might make more sense for each source to filter its own tracts down to the acceptable tract list. However, that would be a pretty invasive change, where this is central and plenty of other things are happening in score transform that could be moved to sources, so for today, here's where the change will live. * Fix typo (#1848) * Switch from filter to inner join (#1848) * Remove no-op lines from tiles (#1848) * Apply feedback from review, linter (#1848) * Check the values oeverything in the frame (#1848) * Refactor checker class (#1848) * Add test for state names (#1848) * cleanup from reviewing my own code (#1848) * Fix lint error (#1858) * Apply Emma's feedback from review (#1848) * Remove refs to national_df (#1848) * Account for new, fake nullable bools in tiles (#1848) To handle a geojson limitation, Emma converted some nullable boolean colunms to float64 in the tiles export with the values {0.0, 1.0, nan}, giving us the same expressiveness. Sadly, this broke my assumption that all columns between the score and tiles csvs would have the same dtypes, so I need to account for these new, fake bools in my test. * Use equals instead of my worse version (#1848) * Missed a spot where we called _create_score_data (#1848) * Update per safety (#1848) Co-authored-by: matt bowen * Add tests to make sure each source makes it to the score correctly (#1878) * Remove unused persistent poverty from score (#1835) * Test a few datasets for overlap in the final score (#1835) * Add remaining data sources (#1853) * Apply code-review feedback (#1835) * Rearrange a little for readabililty (#1835) * Add tract test (#1835) * Add test for score values (#1835) * Check for unmatched source tracts (#1835) * Cleanup numeric code to plaintext (#1835) * Make import more obvious (#1835) * Updating traffic barriersĀ to include low pop threshold (#1889) Changing the traffic barriers to only be included for places with recorded population * Remove no land tracts from map (#1894) remove from map * Issue 1831: missing life expectancy data from Maine and Wisconsin (#1887) * Fixing missing states and adding tests for states to all classes * Removing low pop tracts from FEMA population loss (#1898) dropping 0 population from FEMA * 1831 Follow up (#1902) This code causes no functional change to the code. It does two things: 1. Uses difference instead of - to improve code style for working with sets. 2. Removes the line EXPECTED_MISSING_STATES = ["02", "15"], which is now redundant because of the line I added (in a previous pull request) of ALASKA_AND_HAWAII_EXPECTED_IN_DATA = False. * Add tests for all non-census sources (#1899) * Refactor CDC life-expectancy (1554) * Update to new tract list (#1554) * Adjust for tests (#1848) * Add tests for cdc_places (#1848) * Add EJScreen tests (#1848) * Add tests for HUD housing (#1848) * Add tests for GeoCorr (#1848) * Add persistent poverty tests (#1848) * Update for sources without zips, for new validation (#1848) * Update tests for new multi-CSV but (#1848) Lucas updated the CDC life expectancy data to handle a bug where two states are missing from the US Overall download. Since virtually none of our other ETL classes download multiple CSVs directly like this, it required a pretty invasive new mocking strategy. * Add basic tests for nature deprived (#1848) * Add wildfire tests (#1848) * Add flood risk tests (#1848) * Add DOT travel tests (#1848) * Add historic redlining tests (#1848) * Add tests for ME and WI (#1848) * Update now that validation exists (#1848) * Adjust for validation (#1848) * Add health insurance back to cdc places (#1848) Ooops * Update tests with new field (#1848) * Test for blank tract removal (#1848) * Add tracts for clipping behavior * Test clipping and zfill behavior (#1848) * Fix bad test assumption (#1848) * Simplify class, add test for tract padding (#1848) * Fix percentage inversion, update tests (#1848) Looking through the transformations, I noticed that we were subtracting a percentage that is usually between 0-100 from 1 instead of 100, and so were endind up with some surprising results. Confirmed with lucasmbrown-usds * Add note about first street data (#1848) * Issue 1900: Tribal overlap with Census tracts (#1903) * working notebook * updating notebook * wip * fixing broken tests * adding tribal overlap files * WIP * WIP * WIP, calculated count and names * working * partial cleanup * partial cleanup * updating field names * fixing bug * removing pyogrio * removing unused imports * updating test fixtures to be more realistic * cleaning up notebook * fixing black * fixing flake8 errors * adding tox instructions * updating etl_score * suppressing warning * Use projected CRSes, ignore geom types (#1900) I looked into this a bit, and in general the geometry type mismatch changes very little about the calculation; we have a mix of multipolygons and polygons. The fastest thing to do is just not keep geom type; I did some runs with it set to both True and False, and they're the same within 9 digits of precision. Logically we just want to overlaps, regardless of how the actual geometries are encoded between the frames, so we can in this case ignore the geom types and feel OKAY. I also moved to projected CRSes, since we are actually trying to do area calculations and so like, we should. Again, the change is small in magnitude but logically more sound. * Readd CDC dataset config (#1900) * adding comments to fips code * delete unnecessary loggers Co-authored-by: matt bowen * Improve score test documentation based on Lucas's feedback (#1835) (#1914) * Better document base on Lucas's feedback (#1835) * Fix typo (#1835) * Add test to verify GEOJSON matches tiles (#1835) * Remove NOOP line (#1835) * Move GEOJSON generation up for new smoketest (#1835) * Fixup code format (#1835) * Update readme for new somketest (#1835) * Cleanup source tests (#1912) * Move test to base for broader coverage (#1848) * Remove duplicate line (#1848) * FUDS needed an extra mock (#1848) * Add tribal count notebook (#1917) (#1919) * Add tribal count notebook (#1917) * test without caching * added comment Co-authored-by: lucasmbrown-usds * Add tribal overlap to downloads (#1907) * Add tribal data to downloads (#1904) * Update test pickle with current cols (#1904) * Remove text of tribe names from GeoJSON (#1904) * Update test data (#1904) * Add tribal overlap to smoketests (#1904) * Issue 1910: Do not impute income for 0 population tracts (#1918) * should be working, has unnecessary loggers * removing loggers and cleaning up * updating ejscreen tests * adding tests and responding to PR feedback * fixing broken smoke test * delete smoketest docs * updating click * updating click * Bump just jupyterlab (#1930) * Fixing link checker (#1929) * Update deps safety says are vulnerable (#1937) (#1938) Co-authored-by: matt bowen * Add demos for island areas (#1932) * Backfill population in island areas (#1882) * Update smoketest to account for backfills (#1882) As I wrote in the commend: We backfill island areas with data from the 2010 census, so if THOSE tracts have data beyond the data source, that's to be expected and is fine to pass. If some other state or territory does though, this should fail This ends up being a nice way of documenting that behavior i guess! * Fixup lint issues (#1882) * Add in race demos to 2010 census pull (#1851) * Add backfill data to score (#1851) * Change column name (#1851) * Fill demos after the score (#1851) * Add income back, adjust test (#1882) * Apply code-review feedback (#1851) * Add test for island area backfill (#1851) * Fix bad rename (#1851) * Reorder download fields, add plumbing back (#1942) * Add back lack of plumbing fields (#1920) * Reorder fields for excel (#1921) * Reorder excel fields (#1921) * Fix formating, lint errors, pickes (#1921) * Add missing plumbing col, fix order again (#1921) * Update that pickle (#1921) * refactoring tribal (#1960) * updated with scoring comparison * updated for narhwal -- leaving commented code in for now * pydantic upgrade * produce a string for the front end to ingest (#1963) * wip * i believe this works -- let's see the pipeline * updated fixtures * Adding ADJLI_ET (#1976) * updated tile data * ensuring adjli_et in * Add back income percentile (#1977) * Add missing field to download (#1964) * Remove pydantic since it's unused (#1964) * Add percentile to CSV (#1964) * Update downloadable pickle (#1964) * Issue 105: Configure and run `black` and other pre-commit hooks (clean branch) (#1962) * Configure and run `black` and other pre-commit hooks Co-authored-by: matt bowen * Removing fixed python version for black (#1985) * Fixup TA_COUNT and TA_PERC (#1991) * Change TA_PERC, change TA_COUNT (#1988, #1989) - Make TA_PERC_STR back into a nullable float following the rules requestsed in #1989 - Move TA_COUNT to be TA_COUNT_AK, also add a null TA_COUNT_C for CONUS that we can fill in later. * Fix typo comment (#1988) * Issue 1992: Do not impute income for null population tracts (#1993) * Hotfix for DOT data source DNS issue (#1999) * Make tribal overlap set score N (#2004) * Add "Is a Tribal DAC" field (#1998) * Add tribal DACs to score N final (#1998) * Add new fields to downloads (#1998) * Make a int a float (#1998) * Update field names, apply feedback (#1998) * Add assertions around codebook (#2014) * Add assertion around codebook (#1505) * Assert csv and excel have same cols (#1505) * Remove suffixes from tribal lands (#1974) (#2008) * Data source location (#2015) * data source location * toml * cdc_places * cdc_svi_index * url updates * child oppy and dot travel * up to hud_recap * completed ticket * cache bust * hud_recap * us_army_fuds * Remove vars the frontend doesn't use (#2020) (#2022) I did a pretty rough and simple analysis of the variables we put in the tiles and grepped the frontend code to see if (1) they're ever accessed and (2) if they're used, even if they're read once. I removed everything I noticed was not accessed. * Disable file size limits on tiles (#2031) * Disable file size limits on tiles * Remove print debugs I know. * Update file name pattern (#2037) (#2038) * Update file name pattern (#2037) * Remove ETL from generation (2037) I looked more carefully, and this ETL step isn't used in the score, so there's no need to run it every time. Per previous steps, I removed it from constants so the code is there it won't run by default. * Round ALL the float fields for the tiles (#2040) * Round ALL the float fields for the tiles (#2033) * Floor in a simpler way (#2033) Emma pointed out that all teh stuff we're doing in floor_series is probably unnecessary for this case, so just use the built-in floor. * Update pickle I missed (#2033) * Clean commit of just aggregate burden notebook (#1819) added a burden notebook * Update the dockerfile (#2045) * Update so the image builds (#2026) * Fix bad dict (2026) * Rename census tract field in downloads (#2068) * Change tract ID field name (2060) * Update lockfile (#2061) * Bump safety, jupyter, wheel (#2061) * DOn't depend directly on wheel (2061) * Bring narwhal reqs in line with main * Update tribal area counts (#2071) * Rename tribal area field (2062) * Add missing file (#2062) * Add checks to create version (#2047) (#2052) * Fix failing safety (#2114) * Ignore vuln that doesn't affect us 2113 https://nvd.nist.gov/vuln/detail/CVE-2022-42969 landed recently and there's no fix in py (which is maintenance mode). From my analysis, that CVE cannot hurt us (famous last words), so we'll ignore the vuln for now. * 2113 Update our gdal ppa * that didn't work (2113) * Don't add the PPA, the package exists (#2113) * Fix type (#2113) * Force an update of wheel 2113 * Also remove PPA line from create-score-versions * Drop 3.8 because of wheel 2113 * Put back 3.8, use newer actions * Try another way of upgrading wheel 2113 * Upgrade wheel in tox too 2113 * Typo fix 2113 Signed-off-by: dependabot[bot] Co-authored-by: Emma Nechamkin <97977170+emma-nechamkin@users.noreply.github.com> Co-authored-by: Shelby Switzer Co-authored-by: Shelby Switzer Co-authored-by: Emma Nechamkin Co-authored-by: Matt Bowen <83967628+mattbowen-usds@users.noreply.github.com> Co-authored-by: Jorge Escobar <83969469+esfoobar-usds@users.noreply.github.com> Co-authored-by: lucasmbrown-usds Co-authored-by: Jorge Escobar Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: matt bowen Co-authored-by: matt bowen --- .github/CODEOWNERS | 1 - .github/ISSUE_TEMPLATE/dataset_request.yaml | 20 +- .../ISSUE_TEMPLATE/pull_request_template.md | 2 +- .github/workflows/create-score-version.yml | 31 +- .github/workflows/data-checks.yml | 7 +- .github/workflows/deploy_be_staging.yml | 38 +- .github/workflows/deploy_fe_staging.yml | 4 +- .github/workflows/e2e.yml | 4 +- .github/workflows/generate-census.yml | 2 +- .github/workflows/main.yml | 4 +- CODE_OF_CONDUCT-es.md | 1 - CODE_OF_CONDUCT.md | 2 +- COMMUNITY_GUIDELINES.md | 2 +- CONTRIBUTING-es.md | 1 - INSTALLATION.md | 4 +- LICENSE-es.md | 1 - README-es.md | 4 +- README.md | 14 +- data/data-pipeline/.pre-commit-config.yaml | 38 + data/data-pipeline/Dockerfile | 11 +- data/data-pipeline/README.md | 120 +- .../data_pipeline/application.py | 50 +- .../data_pipeline/comparison_tool/README.md | 48 +- .../output/cre/cre__2022-03-30.xlsx | Bin 0 -> 11222 bytes .../comparison_tool/run_all_comparisons.sh | 2 +- .../comparison_tool/src/donut_hole_dacs.yaml | 2 +- .../src/run_tract_comparison.py | 8 +- .../src/tract_comparison__template.ipynb | 55 +- .../comparison_tool/src/utils.py | 6 +- data/data-pipeline/data_pipeline/config.py | 6 +- .../data_pipeline/content/config/csv.yml | 650 +++-- .../data_pipeline/content/config/excel.yml | 244 +- .../field_descriptions_for_codebook.yml | 6 +- .../content/config/scratch.ipynb | 800 ++++++ .../content/schemas/download_schemas.py | 6 +- data/data-pipeline/data_pipeline/etl/base.py | 99 +- .../data_pipeline/etl/constants.py | 99 +- .../data-pipeline/data_pipeline/etl/runner.py | 47 +- .../etl/score/config/datasets.yml | 258 +- .../data_pipeline/etl/score/constants.py | 236 +- .../data_pipeline/etl/score/etl_score.py | 426 ++- .../data_pipeline/etl/score/etl_score_geo.py | 56 +- .../data_pipeline/etl/score/etl_score_post.py | 124 +- .../data_pipeline/etl/score/etl_utils.py | 122 +- .../etl/score/schemas/datasets.py | 8 +- .../data_pipeline/etl/score/tests/conftest.py | 3 +- .../tests/sample_data/score_data_initial.csv | 6 +- .../tests/sample_data/state_data_initial.csv | 2 +- .../snapshots/downloadable_data_expected.pkl | Bin 13505 -> 17578 bytes .../tests/snapshots/score_data_expected.pkl | Bin 52819 -> 21655 bytes .../snapshots/score_transformed_expected.pkl | Bin 52466 -> 22390 bytes .../tests/snapshots/tile_data_expected.pkl | Bin 3891 -> 4439 bytes .../etl/score/tests/test_etl_utils.py | 184 +- .../etl/score/tests/test_score_post.py | 9 +- .../etl/sources/calenviroscreen/etl.py | 3 +- .../etl/sources/cdc_life_expectancy/etl.py | 130 +- .../etl/sources/cdc_places/etl.py | 52 +- .../etl/sources/cdc_svi_index/README.md | 4 +- .../etl/sources/cdc_svi_index/etl.py | 14 +- .../data_pipeline/etl/sources/census/etl.py | 21 +- .../etl/sources/census/etl_utils.py | 12 +- .../etl/sources/census_acs/etl.py | 415 ++- .../etl/sources/census_acs/etl_imputations.py | 166 ++ .../etl/sources/census_acs/etl_utils.py | 2 +- .../etl/sources/census_acs_2010/etl.py | 3 +- .../sources/census_acs_median_income/etl.py | 19 +- .../etl/sources/census_decennial/etl.py | 131 +- .../sources/child_opportunity_index/etl.py | 89 +- .../etl/sources/doe_energy_burden/etl.py | 61 +- .../sources/dot_travel_composite/README.md | 16 + .../sources/dot_travel_composite/__init__.py | 0 .../etl/sources/dot_travel_composite/etl.py | 69 + .../etl/sources/eamlis/README.md | 40 + .../etl/sources/eamlis/__init__.py | 0 .../data_pipeline/etl/sources/eamlis/etl.py | 81 + .../data_pipeline/etl/sources/ejscreen/etl.py | 39 +- .../sources/ejscreen_areas_of_concern/etl.py | 2 - .../etl.py | 5 +- .../data_pipeline/etl/sources/epa_rsei/etl.py | 18 +- .../etl/sources/fsf_flood_risk/README.md | 3 + .../etl/sources/fsf_flood_risk/__init__.py | 0 .../etl/sources/fsf_flood_risk/etl.py | 86 + .../etl/sources/fsf_wildfire_risk/README.md | 3 + .../etl/sources/fsf_wildfire_risk/__init__.py | 0 .../etl/sources/fsf_wildfire_risk/etl.py | 83 + .../data_pipeline/etl/sources/geo_utils.py | 92 + .../data_pipeline/etl/sources/geocorr/etl.py | 38 +- .../etl/sources/historic_redlining/README.md | 0 .../sources/historic_redlining/__init__.py | 0 .../etl/sources/historic_redlining/etl.py | 70 + .../sources/housing_and_transportation/etl.py | 8 +- .../etl/sources/hud_housing/etl.py | 184 +- .../etl/sources/hud_recap/etl.py | 23 +- .../etl/sources/mapping_for_ej/etl.py | 8 +- .../data/holc_grades_manually_mapped.csv | 2 +- .../etl/sources/mapping_inequality/etl.py | 114 +- .../etl/sources/maryland_ejscreen/README.md | 4 +- .../etl/sources/maryland_ejscreen/etl.py | 6 +- .../etl/sources/michigan_ejscreen/README.md | 3 +- .../etl/sources/michigan_ejscreen/etl.py | 5 +- .../etl/sources/national_risk_index/etl.py | 45 +- .../sources/nlcd_nature_deprived/README.md | 80 + .../sources/nlcd_nature_deprived/__init__.py | 0 .../etl/sources/nlcd_nature_deprived/etl.py | 77 + .../etl/sources/persistent_poverty/etl.py | 27 +- .../data_pipeline/etl/sources/tribal/etl.py | 99 +- .../etl/sources/tribal/etl_utils.py | 9 +- .../etl/sources/tribal_overlap/README.md | 0 .../etl/sources/tribal_overlap/__init__.py | 0 .../etl/sources/tribal_overlap/etl.py | 274 ++ .../etl/sources/us_army_fuds/__init__.py | 0 .../etl/sources/us_army_fuds/etl.py | 112 + .../data_pipeline/files/readme-version-1.0.md | 0 .../data_pipeline/ipython/TractArea.ipynb | 418 --- .../aggregate_burden_exploration.ipynb | 1238 +++++++++ .../ipython/agricultural_loss_indicator.ipynb | 24 +- .../ipython/check_tribal_count.ipynb | 177 ++ .../compare_tiles_and_geoJson_files.ipynb | 359 +++ ...pare_two_score_files_for_differences.ipynb | 2 +- .../data_pipeline/ipython/county_lookup.ipynb | 2 +- .../experiment_4_weighting/health_scores.py | 3 - .../ipython/explore_adjacency.ipynb | 718 +++++ .../ipython/explore_eamlis.ipynb | 2444 +++++++++++++++++ .../ipython/generate_fuds_test_data.ipynb | 1498 ++++++++++ .../ipython/geojson_compare_tiles.ipynb | 507 ++++ .../ipython/geopandas_speed_test.ipynb | 130 + .../ipython/scoring_comparison.ipynb | 1881 +++++-------- .../ipython/tribal_and_tracts_overlap.ipynb | 1422 ++++++++++ .../score/adding_variables_to_score.md | 28 + .../data_pipeline/score/field_names.py | 267 +- .../data_pipeline/score/score_a.py | 3 +- .../data_pipeline/score/score_b.py | 3 +- .../data_pipeline/score/score_c.py | 4 +- .../data_pipeline/score/score_d.py | 3 +- .../data_pipeline/score/score_f.py | 3 +- .../data_pipeline/score/score_g.py | 3 +- .../data_pipeline/score/score_h.py | 3 +- .../data_pipeline/score/score_i.py | 3 +- .../data_pipeline/score/score_k.py | 3 +- .../data_pipeline/score/score_l.py | 3 +- .../data_pipeline/score/score_m.py | 6 +- .../data_pipeline/score/score_narwhal.py | 1072 ++++++++ .../data_pipeline/score/score_runner.py | 56 +- .../data_pipeline/score/utils.py | 56 + .../data_pipeline/tests/conftest.py | 14 +- .../data_pipeline/tests/score/__init__.py | 0 .../data_pipeline/tests/score/fixtures.py | 230 ++ .../tests/score/test_calculation.py | 292 ++ .../data_pipeline/tests/score/test_output.py | 473 ++++ .../tests/score/test_score_narwhal_methods.py | 85 + .../tests/score/test_tiles_smoketests.py | 276 ++ .../tests/score/test_utils/__init__.py | 0 .../tests/score/test_utils/data/scores.csv | 10 + .../data/test_drop_tracts_from_percentile.csv | 101 + .../tests/score/test_utils/data/us.geojson | 15 + .../tests/score/test_utils/test_adjacency.py | 73 + .../sources/cdc_life_expectancy/__init__.py | 0 .../sources/cdc_life_expectancy/data/ME_A.CSV | 2 + .../sources/cdc_life_expectancy/data/US_A.CSV | 16 + .../sources/cdc_life_expectancy/data/WI_A.CSV | 2 + .../cdc_life_expectancy/data/extract.csv | 16 + .../cdc_life_expectancy/data/output.csv | 18 + .../cdc_life_expectancy/data/transform.csv | 18 + .../sources/cdc_life_expectancy/test_etl.py | 113 + .../tests/sources/cdc_places/__init__.py | 0 .../sources/cdc_places/data/census_tract.csv | 451 +++ .../tests/sources/cdc_places/data/extract.csv | 451 +++ .../tests/sources/cdc_places/data/output.csv | 16 + .../sources/cdc_places/data/transform.csv | 16 + .../tests/sources/cdc_places/test_etl.py | 26 + .../child_opportunity_index/__init__.py | 0 .../child_opportunity_index/data/coi.zip | Bin 0 -> 5858 bytes .../child_opportunity_index/data/extract.csv | 11 + .../child_opportunity_index/data/output.csv | 16 + .../child_opportunity_index/data/raw.csv | 28 + .../data/transform.csv | 16 + .../child_opportunity_index/test_etl.py | 69 + .../tests/sources/data/us.geojson | 10 + .../sources/doe_energy_burden/__init__.py | 0 .../data/DOE_LEAD_AMI_TRACT_2018_ALL.csv.zip | Bin 0 -> 382 bytes .../doe_energy_burden/data/extract.csv | 16 + .../sources/doe_energy_burden/data/output.csv | 16 + .../doe_energy_burden/data/transform.csv | 16 + .../sources/doe_energy_burden/test_etl.py | 59 + .../sources/dot_travel_composite/__init__.py | 0 .../data/Shapefile_and_Metadata.zip | Bin 0 -> 101440 bytes .../dot_travel_composite/data/output.csv | 16 + .../dot_travel_composite/data/transform.csv | 16 + .../sources/dot_travel_composite/test_etl.py | 46 + .../tests/sources/eamlis/__init__.py | 0 .../data/eAMLIS export of all data.tsv.zip | Bin 0 -> 1026 bytes .../tests/sources/eamlis/data/extract.csv | 16 + .../tests/sources/eamlis/data/output.csv | 16 + .../tests/sources/eamlis/data/transform.csv | 16 + .../tests/sources/eamlis/test_etl.py | 157 ++ .../tests/sources/ejscreen/__init__.py | 0 .../data/EJSCREEN_2021_USPR_Tracts.csv.zip | Bin 0 -> 13479 bytes .../tests/sources/ejscreen/data/extract.csv | 16 + .../tests/sources/ejscreen/data/output.csv | 16 + .../tests/sources/ejscreen/data/transform.csv | 16 + .../tests/sources/ejscreen/test_etl.py | 20 + .../tests/sources/example/data/extract.csv | 6 +- .../tests/sources/example/data/input.zip | Bin 390 -> 366 bytes .../tests/sources/example/data/output.csv | 6 +- .../tests/sources/example/data/transform.csv | 6 +- .../tests/sources/example/etl.py | 6 +- .../tests/sources/example/test_etl.py | 141 +- .../tests/sources/fsf_flood_risk/__init__.py | 0 .../sources/fsf_flood_risk/data/extract.csv | 17 + .../sources/fsf_flood_risk/data/fsf_flood.zip | Bin 0 -> 602 bytes .../sources/fsf_flood_risk/data/output.csv | 17 + .../sources/fsf_flood_risk/data/transform.csv | 17 + .../tests/sources/fsf_flood_risk/test_etl.py | 23 + .../sources/fsf_wildfire_risk/__init__.py | 0 .../fsf_wildfire_risk/data/extract.csv | 17 + .../fsf_wildfire_risk/data/fsf_fire.zip | Bin 0 -> 974 bytes .../sources/fsf_wildfire_risk/data/output.csv | 17 + .../fsf_wildfire_risk/data/transform.csv | 17 + .../sources/fsf_wildfire_risk/test_etl.py | 23 + .../tests/sources/geocorr/__init__.py | 0 .../tests/sources/geocorr/data/extract.csv | 16 + .../geocorr/data/geocorr_urban_rural.csv | 16 + .../geocorr/data/geocorr_urban_rural.csv.zip | Bin 0 -> 698 bytes .../tests/sources/geocorr/data/output.csv | 16 + .../tests/sources/geocorr/data/transform.csv | 16 + .../tests/sources/geocorr/test_etl.py | 20 + .../sources/historic_redlining/__init__.py | 0 .../historic_redlining/data/HRS_2010.zip | Bin 0 -> 5446 bytes .../historic_redlining/data/output.csv | 16 + .../historic_redlining/data/transform.csv | 16 + .../sources/historic_redlining/test_etl.py | 67 + .../tests/sources/hud_housing/__init__.py | 0 .../hud_housing/data/2014thru2018-140-csv.zip | Bin 0 -> 7488 bytes .../sources/hud_housing/data/extract.csv | 16 + .../tests/sources/hud_housing/data/output.csv | 16 + .../sources/hud_housing/data/transform.csv | 16 + .../tests/sources/hud_housing/test_etl.py | 20 + .../data/NRI_Table_CensusTracts.zip | Bin 64366 -> 64404 bytes .../national_risk_index/data/extract.csv | 6 +- .../national_risk_index/data/output.csv | 6 +- .../national_risk_index/data/transform.csv | 6 +- .../sources/national_risk_index/test_etl.py | 33 +- .../sources/nlcd_nature_deprived/__init__.py | 0 .../nlcd_nature_deprived/data/extract.csv | 16 + .../nlcd_nature_deprived/data/output.csv | 16 + .../nlcd_nature_deprived/data/transform.csv | 16 + ...usa_conus_nat_dep__compiled_by_TPL.csv.zip | Bin 0 -> 618 bytes .../sources/nlcd_nature_deprived/test_etl.py | 20 + .../sources/persistent_poverty/__init__.py | 0 .../data/LTDB_Std_All_Sample.zip | Bin 0 -> 19730 bytes .../persistent_poverty/data/extract.csv | 16 + .../persistent_poverty/data/output.csv | 16 + .../persistent_poverty/data/transform.csv | 16 + .../sources/persistent_poverty/test_etl.py | 22 + .../tests/sources/test_geo_utils.py | 33 + .../tests/sources/us_army_fuds/__init__.py | 0 .../sources/us_army_fuds/data/extract.csv | 1 + .../sources/us_army_fuds/data/fuds.geojson | 1 + .../sources/us_army_fuds/data/output.csv | 16 + .../sources/us_army_fuds/data/transform.csv | 16 + .../tests/sources/us_army_fuds/test_etl.py | 192 ++ .../data_pipeline/tests/test_etl.py | 3 +- .../data_pipeline/tile/generate.py | 6 +- data/data-pipeline/data_pipeline/utils.py | 28 +- data/data-pipeline/poetry.lock | 835 +++--- data/data-pipeline/pyproject.toml | 6 +- data/data-pipeline/pytest.ini | 2 + data/data-pipeline/settings.toml | 1 + data/data-pipeline/tox.ini | 3 +- docker-compose.yml | 19 +- docs/architecture/architecture-mmd.svg | 2 +- docs/architecture/architecture.mmd | 4 +- .../geodata-pipeline-arch-mmd.svg | 2 +- docs/architecture/geodata-pipeline-arch.mmd | 4 +- .../0002-files/AccessibilityComparison.tsv | 2 +- docs/decisions/0002-files/Highways.csv | 2 +- docs/decisions/0002-files/Maryland.csv | 2 +- docs/decisions/0003-files/adr_process-mmd.svg | 2 +- docs/decisions/0003-files/adr_process.mmd | 4 +- docs/decisions/0004-client-side-framework.md | 4 +- docs/decisions/0005-hosting.md | 11 +- docs/decisions/0006-files/adr_diagram-mmd.svg | 2 +- docs/decisions/0006-files/adr_diagram.mmd | 4 +- docs/glossary.md | 4 +- docs/operations/METHODOLOGY_CHANGE_PROCESS.md | 2 +- 285 files changed, 20476 insertions(+), 3871 deletions(-) create mode 100644 data/data-pipeline/.pre-commit-config.yaml create mode 100644 data/data-pipeline/data_pipeline/comparison_tool/output/cre/cre__2022-03-30.xlsx create mode 100644 data/data-pipeline/data_pipeline/content/config/scratch.ipynb create mode 100644 data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_imputations.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/README.md create mode 100644 data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/__init__.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/etl.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/eamlis/README.md create mode 100644 data/data-pipeline/data_pipeline/etl/sources/eamlis/__init__.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/eamlis/etl.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/README.md create mode 100644 data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/__init__.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/etl.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/README.md create mode 100644 data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/__init__.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/etl.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/geo_utils.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/historic_redlining/README.md create mode 100644 data/data-pipeline/data_pipeline/etl/sources/historic_redlining/__init__.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/historic_redlining/etl.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/README.md create mode 100644 data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/__init__.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/etl.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/README.md create mode 100644 data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/__init__.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/etl.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/us_army_fuds/__init__.py create mode 100644 data/data-pipeline/data_pipeline/etl/sources/us_army_fuds/etl.py create mode 100644 data/data-pipeline/data_pipeline/files/readme-version-1.0.md delete mode 100644 data/data-pipeline/data_pipeline/ipython/TractArea.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/aggregate_burden_exploration.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/check_tribal_count.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/compare_tiles_and_geoJson_files.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/explore_adjacency.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/explore_eamlis.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/generate_fuds_test_data.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/geojson_compare_tiles.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/geopandas_speed_test.ipynb create mode 100644 data/data-pipeline/data_pipeline/ipython/tribal_and_tracts_overlap.ipynb create mode 100644 data/data-pipeline/data_pipeline/score/adding_variables_to_score.md create mode 100644 data/data-pipeline/data_pipeline/score/score_narwhal.py create mode 100644 data/data-pipeline/data_pipeline/score/utils.py create mode 100644 data/data-pipeline/data_pipeline/tests/score/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/score/fixtures.py create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_calculation.py create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_output.py create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_score_narwhal_methods.py create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_tiles_smoketests.py create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_utils/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_utils/data/scores.csv create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_utils/data/test_drop_tracts_from_percentile.csv create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_utils/data/us.geojson create mode 100644 data/data-pipeline/data_pipeline/tests/score/test_utils/test_adjacency.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/ME_A.CSV create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/US_A.CSV create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/WI_A.CSV create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_places/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/census_tract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/cdc_places/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/data/coi.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/data/raw.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/data/us.geojson create mode 100644 data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/data/DOE_LEAD_AMI_TRACT_2018_ALL.csv.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/data/Shapefile_and_Metadata.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/eamlis/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/eamlis/data/eAMLIS export of all data.tsv.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/eamlis/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/eamlis/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/eamlis/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/eamlis/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/ejscreen/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/EJSCREEN_2021_USPR_Tracts.csv.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/ejscreen/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/fsf_flood.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/fsf_fire.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/geocorr/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/geocorr/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/geocorr/data/geocorr_urban_rural.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/geocorr/data/geocorr_urban_rural.csv.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/geocorr/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/geocorr/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/geocorr/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/historic_redlining/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/HRS_2010.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/historic_redlining/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/hud_housing/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/2014thru2018-140-csv.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/hud_housing/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/usa_conus_nat_dep__compiled_by_TPL.csv.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/LTDB_Std_All_Sample.zip create mode 100644 data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/test_etl.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/test_geo_utils.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/__init__.py create mode 100644 data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/extract.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/fuds.geojson create mode 100644 data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/output.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/transform.csv create mode 100644 data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/test_etl.py diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c7b23bb0d..b4ace2f3d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1 @@ * @esfoobar-usds @vim-usds @emma-nechamkin @mattbowen-usds - diff --git a/.github/ISSUE_TEMPLATE/dataset_request.yaml b/.github/ISSUE_TEMPLATE/dataset_request.yaml index 68941d3a1..95e4236bf 100644 --- a/.github/ISSUE_TEMPLATE/dataset_request.yaml +++ b/.github/ISSUE_TEMPLATE/dataset_request.yaml @@ -56,7 +56,7 @@ body: id: other-datasource-type attributes: label: If "other" above, please specify - description: If you have selected "other" above, please give as much detail as you can as to where this data can live + description: If you have selected "other" above, please give as much detail as you can as to where this data can live placeholder: www.example.com and www.example2.com validations: required: false @@ -110,14 +110,14 @@ body: attributes: label: Known data quality issues description: Please describe any data quality issues you know about with this dataset. - placeholder: Limited accuracy in rural areas, etc. + placeholder: Limited accuracy in rural areas, etc. validations: - required: false + required: false - type: input id: geographic-coverage attributes: label: What is the geographic coverage (in percent) of this dataset - description: If known, provide an estimate of the coverage of this dataset vis-a-vis the full United States + description: If known, provide an estimate of the coverage of this dataset vis-a-vis the full United States placeholder: 90% validations: required: false @@ -126,9 +126,9 @@ body: attributes: label: Description of geographic coverage estimate description: (If relevant) Please explain your reasoning behind the above estimate of geographic coverage - placeholder: e.g. Missing information for Puerto Rico, etc. + placeholder: e.g. Missing information for Puerto Rico, etc. validations: - required: false + required: false - type: input id: last-updated-date attributes: @@ -151,10 +151,10 @@ body: id: link-to-documentation attributes: label: Link to more documentation - description: Please provide a link where one can find additional information + description: Please provide a link where one can find additional information placeholder: www.example.com validations: - required: true + required: true - type: dropdown id: can-go-in-cloud attributes: @@ -167,8 +167,8 @@ body: - type: textarea id: additional-information attributes: - label: Additional Information + label: Additional Information description: Please provide any additional information you have about this dataset - placeholder: e.g. Missing information for Puerto Rico, etc. + placeholder: e.g. Missing information for Puerto Rico, etc. validations: required: false diff --git a/.github/ISSUE_TEMPLATE/pull_request_template.md b/.github/ISSUE_TEMPLATE/pull_request_template.md index 55e0e4c5d..2b1251c9d 100644 --- a/.github/ISSUE_TEMPLATE/pull_request_template.md +++ b/.github/ISSUE_TEMPLATE/pull_request_template.md @@ -19,4 +19,4 @@ Fixes # (issue number) - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes -- [ ] Any dependent changes have been merged and published in downstream modules \ No newline at end of file +- [ ] Any dependent changes have been merged and published in downstream modules diff --git a/.github/workflows/create-score-version.yml b/.github/workflows/create-score-version.yml index 49e09e1c4..103da8439 100644 --- a/.github/workflows/create-score-version.yml +++ b/.github/workflows/create-score-version.yml @@ -5,11 +5,12 @@ on: score_version: description: "Which version of the score are you generating?" required: true - default: 'beta' + default: '1.0' type: choice options: - beta - 1.0 + - test env: CENSUS_API_KEY: ${{ secrets.CENSUS_API_KEY }} @@ -54,7 +55,6 @@ jobs: aws-region: us-east-1 - name: Install GDAL/ogr2ogr run: | - sudo add-apt-repository ppa:ubuntugis/ppa sudo apt-get update sudo apt-get -y install gdal-bin ogrinfo --version @@ -64,15 +64,40 @@ jobs: - name: Generate Score Post run: | poetry run python3 data_pipeline/application.py generate-score-post -s aws + - name: Confirm we generated the version of the score we think we did + if: ${{ env.J40_VERSION_LABEL_STRING == '1.0' || env.J40_VERSION_LABEL_STRING == 'test' }} + run: | + grep "Identified as disadvantaged due to tribal overlap" data_pipeline/data/score/downloadable/* > /dev/null + - name: Confirm we generated the version of the score we think we did + if: ${{ env.J40_VERSION_LABEL_STRING == 'beta' }} + run: | + grep -v "Identified as disadvantaged due to tribal overlap" data_pipeline/data/score/downloadable/* > /dev/null - name: Generate Score Geo run: | poetry run python3 data_pipeline/application.py geo-score + - name: Run smoketest for 1.0 + if: ${{ env.J40_VERSION_LABEL_STRING == '1.0' || env.J40_VERSION_LABEL_STRING == 'test' }} + run: | + poetry run pytest data_pipeline/ -m smoketest - name: Deploy Score to Geoplatform AWS run: | poetry run s4cmd put ./data_pipeline/data/score/csv/ s3://justice40-data/data-versions/${{env.J40_VERSION_LABEL_STRING}}/data/score/csv --recursive --force --API-ACL=public-read poetry run s4cmd put ./data_pipeline/files/ s3://justice40-data/data-versions/${{env.J40_VERSION_LABEL_STRING}}/data/score/downloadable --recursive --force --API-ACL=public-read poetry run s4cmd put ./data_pipeline/data/score/downloadable/ s3://justice40-data/data-versions/${{env.J40_VERSION_LABEL_STRING}}/data/score/downloadable --recursive --force --API-ACL=public-read - + - name: Confirm we generated the version of the score we think we did + if: ${{ env.J40_VERSION_LABEL_STRING == '1.0' || env.J40_VERSION_LABEL_STRING == 'test' }} + run: | + curl "https://static-data-screeningtool.geoplatform.gov/data-versions/1.0/data/score/downloadable/1.0-shapefile-codebook.zip" -s -f -I -o /dev/null && \ + curl "https://static-data-screeningtool.geoplatform.gov/data-versions/1.0/data/score/downloadable/1.0-communities.xlsx" -s -f -I -o /dev/null && \ + curl "https://static-data-screeningtool.geoplatform.gov/data-versions/1.0/data/score/downloadable/1.0-communities.csv" -s -f -I -o /dev/null && \ + curl "https://static-data-screeningtool.geoplatform.gov/data-versions/1.0/data/score/downloadable/1.0-shapefile-codebook.zip" -s -f -I -o /dev/null && \ + curl "https://static-data-screeningtool.geoplatform.gov/data-versions/1.0/data/score/downloadable/cejst-technical-support-document.pdf" -s -f -I -o /dev/null && \ + curl "https://static-data-screeningtool.geoplatform.gov/data-versions/1.0/data/score/downloadable/draft-communities-list.pdf" -s -f -I -o /dev/null + - name: Confirm we generated the version of the score we think we did + if: ${{ env.J40_VERSION_LABEL_STRING == 'beta' }} + run: | + curl "https://static-data-screeningtool.geoplatform.gov/data-versions/beta/data/score/downloadable/beta-data-documentation.zip" -s -f -I -o /dev/null && \ + curl "https://static-data-screeningtool.geoplatform.gov/data-versions/beta/data/score/downloadable/beta-shapefile-codebook.zip" -s -f -I -o /dev/null - name: Set timezone for tippecanoe uses: szenius/set-timezone@v1.0 with: diff --git a/.github/workflows/data-checks.yml b/.github/workflows/data-checks.yml index 41438384b..280a6e2a0 100644 --- a/.github/workflows/data-checks.yml +++ b/.github/workflows/data-checks.yml @@ -22,9 +22,11 @@ jobs: # one execution of the tests per version listed above - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} + - name: Upgrade wheel + run: pip install -U wheel - name: Print variables to help debug uses: hmarr/debug-action@v2 - name: Load cached Poetry installation @@ -39,6 +41,7 @@ jobs: run: poetry show -v - name: Install dependencies run: poetry install - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' + # TODO: investigate why caching layer started failing. + # if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' - name: Run tox run: poetry run tox diff --git a/.github/workflows/deploy_be_staging.yml b/.github/workflows/deploy_be_staging.yml index 0abfa2334..f2ed1d977 100644 --- a/.github/workflows/deploy_be_staging.yml +++ b/.github/workflows/deploy_be_staging.yml @@ -25,9 +25,10 @@ jobs: - name: Print variables to help debug uses: hmarr/debug-action@v2 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} + - run: pip install -U wheel - name: Load cached Poetry installation id: cached-poetry-dependencies uses: actions/cache@v2 @@ -35,9 +36,14 @@ jobs: path: ~/.cache/pypoetry/virtualenvs key: env-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}-${{ hashFiles('.github/workflows/deploy_be_staging.yml') }} - name: Install poetry - uses: snok/install-poetry@v1 + uses: snok/install-poetry@v1.3.3 - name: Print Poetry settings run: poetry show -v + - name: Install GDAL/ogr2ogr + run: | + sudo apt-get update + sudo apt-get -y install gdal-bin + ogrinfo --version - name: Install dependencies run: poetry add s4cmd && poetry install if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' @@ -47,12 +53,21 @@ jobs: aws-access-key-id: ${{ secrets.DATA_DEV_AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.DATA_DEV_AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 + - name: Download census geo data for later user + run: | + poetry run python3 data_pipeline/application.py pull-census-data -s aws - name: Generate Score run: | poetry run python3 data_pipeline/application.py score-full-run - name: Generate Score Post run: | - poetry run python3 data_pipeline/application.py generate-score-post -s aws + poetry run python3 data_pipeline/application.py generate-score-post + - name: Generate Score Geo + run: | + poetry run python3 data_pipeline/application.py geo-score + - name: Run Smoketests + run: | + poetry run pytest data_pipeline/ -m smoketest - name: Deploy Score to Geoplatform AWS run: | poetry run s4cmd put ./data_pipeline/data/score/csv/ s3://justice40-data/data-pipeline-staging/${{env.PR_NUMBER}}/${{env.SHA_NUMBER}}/data/score/csv --recursive --force --API-ACL=public-read @@ -63,19 +78,13 @@ jobs: with: # Deploy to S3 for the Staging URL message: | - ** Score Deployed! ** - Find it here: + ** Score Deployed! ** + Find it here: - Score Full usa.csv: https://justice40-data.s3.amazonaws.com/data-pipeline-staging/${{env.PR_NUMBER}}/${{env.SHA_NUMBER}}/data/score/csv/full/usa.csv - Download Zip Packet: https://justice40-data.s3.amazonaws.com/data-pipeline-staging/${{env.PR_NUMBER}}/${{env.SHA_NUMBER}}/data/score/downloadable/Screening_Tool_Data.zip repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token-user-login: "github-actions[bot]" allow-repeats: false - - name: Install GDAL/ogr2ogr - run: | - sudo add-apt-repository ppa:ubuntugis/ppa - sudo apt-get update - sudo apt-get -y install gdal-bin - ogrinfo --version - name: Set timezone for tippecanoe uses: szenius/set-timezone@v1.0 with: @@ -93,9 +102,6 @@ jobs: mkdir -p /usr/local/bin cp tippecanoe /usr/local/bin/tippecanoe tippecanoe -v - - name: Generate Score Geo - run: | - poetry run python3 data_pipeline/application.py geo-score - name: Generate Tiles run: | poetry run python3 data_pipeline/application.py generate-map-tiles @@ -110,8 +116,8 @@ jobs: with: # Deploy to S3 for the staging URL message: | - ** Map Deployed! ** - Map with Staging Backend: https://screeningtool.geoplatform.gov/en/?flags=stage_hash=${{env.PR_NUMBER}}/${{env.SHA_NUMBER}} + ** Map Deployed! ** + Map with Staging Backend: https://screeningtool.geoplatform.gov/en?flags=stage_hash=${{env.PR_NUMBER}}/${{env.SHA_NUMBER}} Find tiles here: https://justice40-data.s3.amazonaws.com/data-pipeline-staging/${{env.PR_NUMBER}}/${{env.SHA_NUMBER}}/data/score/tiles repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token-user-login: "github-actions[bot]" diff --git a/.github/workflows/deploy_fe_staging.yml b/.github/workflows/deploy_fe_staging.yml index 24a78e4dd..9b2164c42 100644 --- a/.github/workflows/deploy_fe_staging.yml +++ b/.github/workflows/deploy_fe_staging.yml @@ -108,9 +108,9 @@ jobs: uses: mshick/add-pr-comment@v1 with: message: | - ** šŸ‘‹ Attention translators!! šŸ‘‹ ** + ** šŸ‘‹ Attention translators!! šŸ‘‹ ** Copy changes have resulted in a new en.json file. Please download en.json file and send to translators: https://github.com/usds/justice40-tool/blob/${{env.COMMIT_HASH}}/client/src/intl/en.json repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token-user-login: "github-actions[bot]" # The user.login for temporary GitHub tokens allow-repeats: true - if: contains(steps.changed-files.outputs.modified_files, 'client/src/intl/en.json') \ No newline at end of file + if: contains(steps.changed-files.outputs.modified_files, 'client/src/intl/en.json') diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index cd5aafea6..cceff8ee1 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -10,7 +10,7 @@ on: schedule: # runs tests every day at 12am ET (4am UTC): - cron: '0 4 * * *' -jobs: +jobs: nightly: runs-on: ubuntu-20.04 env: @@ -25,4 +25,4 @@ jobs: start: npm start wait-on: 'http://localhost:8000' # To run only specific spec/tests: - # spec: cypress/e2e/downloadPacket.spec.js \ No newline at end of file + # spec: cypress/e2e/downloadPacket.spec.js diff --git a/.github/workflows/generate-census.yml b/.github/workflows/generate-census.yml index 4820c3e74..a15240bea 100644 --- a/.github/workflows/generate-census.yml +++ b/.github/workflows/generate-census.yml @@ -1,5 +1,5 @@ name: Generate Census -on: +on: workflow_dispatch: inputs: confirm-action: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c07be4418..05a3146e9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,11 +9,11 @@ on: workflow_dispatch: inputs: logLevel: - description: 'Log level' + description: 'Log level' required: true default: 'warning' tags: - description: 'Ping test' + description: 'Ping test' jobs: sitePingCheck: name: Slack Notification diff --git a/CODE_OF_CONDUCT-es.md b/CODE_OF_CONDUCT-es.md index e2f8da54b..a1585082d 100644 --- a/CODE_OF_CONDUCT-es.md +++ b/CODE_OF_CONDUCT-es.md @@ -13,4 +13,3 @@ Los mantenedores del proyecto tienen el derecho y la obligaciĆ³n de eliminar, ed Los casos de abuso, acoso o de otro comportamiento inaceptable se pueden denunciar abriendo un problema o contactando con uno o mĆ”s de los mantenedores del proyecto en justice40open@usds.gov. Este CĆ³digo de conducta es una adaptaciĆ³n de la versiĆ³n 1.0.0 del Convenio del colaborador ([Contributor Covenant](http://contributor-covenant.org), *en inglĆ©s*) disponible en el sitio http://contributor-covenant.org/version/1/0/0/ *(en inglĆ©s)*. - diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index aeb28c989..31e75075d 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -12,4 +12,4 @@ Project maintainers have the right and responsibility to remove, edit, or reject Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers at justice40open@usds.gov. -This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/) \ No newline at end of file +This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/) diff --git a/COMMUNITY_GUIDELINES.md b/COMMUNITY_GUIDELINES.md index 4b398c817..a4b3cfc5f 100644 --- a/COMMUNITY_GUIDELINES.md +++ b/COMMUNITY_GUIDELINES.md @@ -32,4 +32,4 @@ When participating in Justice40 open source community conversations and spaces, - Take space and give space. We strive to create an equitable environment in which all are welcome and able to participate. We hope individuals feel comfortable voicing their opinions and providing contributions and will do our best to recognize and make space for individuals who may be struggling to find space here. Likewise, we expect individuals to recognize when they are taking up significant space and take a step back to allow room for others. - Be present when joining synchronous conversations such as our community chat. Why be here if you're not going to _be here_? - Be respectful. -- Default to positive. Assume others' contributions are legitimate and valuable and that they are made with good intention. \ No newline at end of file +- Default to positive. Assume others' contributions are legitimate and valuable and that they are made with good intention. diff --git a/CONTRIBUTING-es.md b/CONTRIBUTING-es.md index 989fa384f..f7a4ec59e 100644 --- a/CONTRIBUTING-es.md +++ b/CONTRIBUTING-es.md @@ -43,4 +43,3 @@ Si desea colaborar con alguna parte del cĆ³digo base, bifurque el repositorio si * Al menos un revisor autorizado debe aprobar la confirmaciĆ³n (en [CODEOWNERS](https://github.com/usds/justice40-tool/tree/main/.github/CODEOWNERS), en inglĆ©s, consulte la lista mĆ”s reciente de estos revisores). * Todas las verificaciones de estado obligatorias deben ser aprobadas. Si hay un desacuerdo importante entre los integrantes del equipo, se organizarĆ” una reuniĆ³n con el fin de determinar el plan de acciĆ³n para la solicitud de incorporaciĆ³n de cambios. - diff --git a/INSTALLATION.md b/INSTALLATION.md index 4e1279e58..c1c8a9930 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -36,7 +36,7 @@ Homebrew is an easy way to manage software downloads on MacOS. You don't _have_ You should regularly run `brew update` and `brew doctor` to make sure your packages are up to date and in good condition. -### Install Node using NVM +### Install Node using NVM This will work for both MacOS and Win10. Follow instructions on this [link](https://medium.com/@nodesource/installing-node-js-tutorial-using-nvm-5c6ff5925dd8). Be sure to read through the whole doc to find the sections within each step relevant to you (e.g. if you're using Homebrew, when you get to Step 2 look for the section, "Install NVM with Homebrew"). @@ -54,7 +54,7 @@ You should then be able to switch to that version of node by: To validate you are using node 14, type: -`node -v` +`node -v` This should return *Now using node 14.x.x (npm v6.x.x)* diff --git a/LICENSE-es.md b/LICENSE-es.md index 64a26f3f3..413b3d744 100644 --- a/LICENSE-es.md +++ b/LICENSE-es.md @@ -28,4 +28,3 @@ Por estos u otros propĆ³sitos y motivos, y sin ninguna expectativa de otra consi c. El Afirmante excluye la responsabilidad de los derechos de compensaciĆ³n de otras personas que se puedan aplicar a la Obra o a cualquier uso de esta, incluidos, entre otros, los Derechos de Autor y Derechos Conexos de cualquier persona sobre la Obra. AdemĆ”s, el Afirmante excluye la responsabilidad de obtener los consentimientos o permisos u otros derechos necesarios que se exijan para cualquier uso de la Obra. d. El Afirmante entiende y reconoce que Creative Commons no es una parte en este documento y que no tiene ningĆŗn derecho u obligaciĆ³n con respecto a esta CC0 o al uso de la Obra. - diff --git a/README-es.md b/README-es.md index b35f25ffe..0e845b4a4 100644 --- a/README-es.md +++ b/README-es.md @@ -2,7 +2,7 @@ [![CC0 License](https://img.shields.io/badge/license-CCO--1.0-brightgreen)](https://github.com/usds/justice40-tool/blob/main/LICENSE.md) *[Read this in English!](README.md)* - + Le damos la bienvenida a la comunidad de cĆ³digo abierto de Justice40. Este repositorio contiene el cĆ³digo, los procesos y la documentaciĆ³n que activa los datos y la tecnologĆ­a de la Herramienta Justice40 para la Vigilancia del Clima y la Justicia EconĆ³mica (CEJST, por sus siglas en inglĆ©s). ## Antecedentes @@ -36,7 +36,7 @@ El equipo central usa el grupo para publicar la informaciĆ³n mĆ”s reciente sobre Las colaboraciones son siempre bien recibidas. Nos agradan las aportaciones en forma de conversaciĆ³n sobre los temas de este repositorio y las solicitudes para incorporaciĆ³n de cambios en la documentaciĆ³n y el cĆ³digo. En [CONTRIBUTING-es.md](CONTRIBUTING-es.md), consulte la manera de empezar a participar. -## InstalaciĆ³n +## InstalaciĆ³n La instalaciĆ³n es una instalaciĆ³n tĆ­pica de gatsby y los detalles se pueden encontrar en [INSTALLATION-es.md](INSTALLATION-es.md) diff --git a/README.md b/README.md index bd62dc274..ff62780ad 100644 --- a/README.md +++ b/README.md @@ -11,19 +11,19 @@ The Justice40 initiative and screening tool were announced in an [Executive Orde Please see our [Open Source Community Orientation](docs/Justice40_Open_Source_Community_Orientation.pptx) deck for more information on the Justice40 initiative, our team, this project, and ways to participate. ## Core team -The core Justice40 team building this tool is a small group of designers, developers, and product managers from the US Digital Service in partnership with the Council on Environmental Quality (CEQ). +The core Justice40 team building this tool is a small group of designers, developers, and product managers from the US Digital Service in partnership with the Council on Environmental Quality (CEQ). An up-to-date list of core team members can be found in [MAINTAINERS.md](MAINTAINERS.md). The engineering members of the core team who maintain the code in this repo are listed in [.github/CODEOWNERS](.github/CODEOWNERS). ## Community -The Justice40 team is taking a community-first and open source approach to the product development of this tool. We believe government software should be made in the open and be built and licensed such that anyone can take the code, run it themselves without paying money to third parties or using proprietary software, and use it as they will. +The Justice40 team is taking a community-first and open source approach to the product development of this tool. We believe government software should be made in the open and be built and licensed such that anyone can take the code, run it themselves without paying money to third parties or using proprietary software, and use it as they will. -We know that we can learn from a wide variety of communities, including those who will use or will be impacted by the tool, who are experts in data science or technology, or who have experience in climate, economic,or environmental justice work. We are dedicated to creating forums for continuous conversation and feedback to help shape the design and development of the tool. +We know that we can learn from a wide variety of communities, including those who will use or will be impacted by the tool, who are experts in data science or technology, or who have experience in climate, economic,or environmental justice work. We are dedicated to creating forums for continuous conversation and feedback to help shape the design and development of the tool. We also recognize capacity building as a key part of involving a diverse open source community. We are doing our best to use accessible language, provide technical and process documents in multiple languages, and offer support to our community members of a wide variety of backgrounds and skillsets, directly or in the form of group chats and training. If you have ideas for how we can improve or add to our capacity building efforts and methods for welcoming folks into our community, please let us know in the [Google Group](https://groups.google.com/u/4/g/justice40-open-source) or email us at justice40open@usds.gov. ### Community Guidelines -Principles and guidelines for participating in our open source community are available [here](COMMUNITY_GUIDELINES.md). Please read them before joining or starting a conversation in this repo or one of the channels listed below. +Principles and guidelines for participating in our open source community are available [here](COMMUNITY_GUIDELINES.md). Please read them before joining or starting a conversation in this repo or one of the channels listed below. ### Community Chats We host open source community chats every third Monday of the month at 5-6pm ET. You can find information about the agenda and how to participate in our [Google Group](https://groups.google.com/u/4/g/justice40-open-source). @@ -31,15 +31,15 @@ We host open source community chats every third Monday of the month at 5-6pm ET. Community members are welcome to share updates or propose topics for discussion in community chats. Please do so in the Google Group. ### Google Group -Our [Google Group](https://groups.google.com/u/4/g/justice40-open-source) is open to anyone to join and share their knowledge or experiences, as well as to ask questions of the core Justice40 team or the wider community. +Our [Google Group](https://groups.google.com/u/4/g/justice40-open-source) is open to anyone to join and share their knowledge or experiences, as well as to ask questions of the core Justice40 team or the wider community. The core team uses the group to post updates on the program and tech/data issues, and to share the agenda and call for community participation in the community chat. -Curious about whether to ask a question here as a Github issue or in the Google Group? The general rule of thumb is that issues are for actionable topics related to the tool or data itself (e.g. questions about a specific data set in use, or suggestion for a new tool feature), and the Google Group is for more general topics or questions. If you can't decide, use the google group and we'll discuss it there before moving to Github if appropriate! +Curious about whether to ask a question here as a Github issue or in the Google Group? The general rule of thumb is that issues are for actionable topics related to the tool or data itself (e.g. questions about a specific data set in use, or suggestion for a new tool feature), and the Google Group is for more general topics or questions. If you can't decide, use the google group and we'll discuss it there before moving to Github if appropriate! ## Contributing -Contributions are always welcome! We encourage contributions in the form of discussion on issues in this repo and pull requests of documentation and code. +Contributions are always welcome! We encourage contributions in the form of discussion on issues in this repo and pull requests of documentation and code. See [CONTRIBUTING.md](CONTRIBUTING.md) for ways to get started. diff --git a/data/data-pipeline/.pre-commit-config.yaml b/data/data-pipeline/.pre-commit-config.yaml new file mode 100644 index 000000000..022b1f76b --- /dev/null +++ b/data/data-pipeline/.pre-commit-config.yaml @@ -0,0 +1,38 @@ +exclude: ^client|\.csv +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace + +- repo: https://github.com/lucasmbrown/mirrors-autoflake + rev: v1.3 + hooks: + - id: autoflake + args: + [ + "--in-place", + "--remove-all-unused-imports", + "--remove-unused-variable", + "--ignore-init-module-imports", + ] + +- repo: https://github.com/pycqa/isort + rev: 5.10.1 + hooks: + - id: isort + name: isort (python) + args: + [ + "--force-single-line-imports", + "--profile=black", + "--line-length=80", + "--src-path=.:data/data-pipeline" + ] + +- repo: https://github.com/ambv/black + rev: 22.8.0 + hooks: + - id: black + args: [--config=./data/data-pipeline/pyproject.toml] diff --git a/data/data-pipeline/Dockerfile b/data/data-pipeline/Dockerfile index 6005629dc..04bbca22e 100644 --- a/data/data-pipeline/Dockerfile +++ b/data/data-pipeline/Dockerfile @@ -1,7 +1,9 @@ FROM ubuntu:20.04 +ENV TZ=America/Los_Angeles + # Install packages -RUN apt-get update && apt-get install -y \ +RUN apt-get update && TZ=America/Los_Angeles DEBIAN_FRONTEND=noninteractive apt-get install -y \ build-essential \ make \ gcc \ @@ -9,10 +11,10 @@ RUN apt-get update && apt-get install -y \ unzip \ wget \ python3-dev \ - python3-pip + python3-pip \ + gdal-bin # tippeanoe -ENV TZ=America/Los_Angeles RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN apt-get install -y software-properties-common libsqlite3-dev zlib1g-dev RUN apt-add-repository -y ppa:git-core/ppa @@ -35,7 +37,7 @@ ENV PYTHONFAULTHANDLER=1 \ POETRY_VERSION=1.1.12 WORKDIR /data-pipeline -COPY pyproject.toml /data-pipeline/ +COPY . /data-pipeline RUN pip install "poetry==$POETRY_VERSION" RUN poetry config virtualenvs.create false \ @@ -43,6 +45,5 @@ RUN poetry config virtualenvs.create false \ && poetry install --no-dev --no-interaction --no-ansi # Copy all project files into the container -COPY . /data-pipeline CMD python3 -m data_pipeline.application data-full-run --check -s aws diff --git a/data/data-pipeline/README.md b/data/data-pipeline/README.md index 5b843dbd5..e47a5a641 100644 --- a/data/data-pipeline/README.md +++ b/data/data-pipeline/README.md @@ -12,11 +12,14 @@ - [2. Extract-Transform-Load (ETL) the data](#2-extract-transform-load-etl-the-data) - [3. Combined dataset](#3-combined-dataset) - [4. Tileset](#4-tileset) + - [5. Shapefiles](#5-shapefiles) - [Score generation and comparison workflow](#score-generation-and-comparison-workflow) - [Workflow Diagram](#workflow-diagram) - [Step 0: Set up your environment](#step-0-set-up-your-environment) - [Step 1: Run the script to download census data or download from the Justice40 S3 URL](#step-1-run-the-script-to-download-census-data-or-download-from-the-justice40-s3-url) - [Step 2: Run the ETL script for each data source](#step-2-run-the-etl-script-for-each-data-source) + - [Table of commands](#table-of-commands) + - [ETL steps](#etl-steps) - [Step 3: Calculate the Justice40 score experiments](#step-3-calculate-the-justice40-score-experiments) - [Step 4: Compare the Justice40 score experiments to other indices](#step-4-compare-the-justice40-score-experiments-to-other-indices) - [Data Sources](#data-sources) @@ -26,21 +29,27 @@ - [MacOS](#macos) - [Windows Users](#windows-users) - [Setting up Poetry](#setting-up-poetry) - - [Downloading Census Block Groups GeoJSON and Generating CBG CSVs](#downloading-census-block-groups-geojson-and-generating-cbg-csvs) + - [Running tox](#running-tox) + - [The Application entrypoint](#the-application-entrypoint) + - [Downloading Census Block Groups GeoJSON and Generating CBG CSVs (not normally required)](#downloading-census-block-groups-geojson-and-generating-cbg-csvs-not-normally-required) + - [Run all ETL, score and map generation processes](#run-all-etl-score-and-map-generation-processes) + - [Run both ETL and score generation processes](#run-both-etl-and-score-generation-processes) + - [Run all ETL processes](#run-all-etl-processes) - [Generating Map Tiles](#generating-map-tiles) - [Serve the map locally](#serve-the-map-locally) - [Running Jupyter notebooks](#running-jupyter-notebooks) - [Activating variable-enabled Markdown for Jupyter notebooks](#activating-variable-enabled-markdown-for-jupyter-notebooks) - - [Miscellaneous](#miscellaneous) - [Testing](#testing) - [Background](#background) - - [Configuration / Fixtures](#configuration--fixtures) + - [Score and post-processing tests](#score-and-post-processing-tests) - [Updating Pickles](#updating-pickles) - - [Future Enchancements](#future-enchancements) - - [ETL Unit Tests](#etl-unit-tests) + - [Future Enhancements](#future-enhancements) + - [Fixtures used in ETL "snapshot tests"](#fixtures-used-in-etl-snapshot-tests) + - [Other ETL Unit Tests](#other-etl-unit-tests) - [Extract Tests](#extract-tests) - [Transform Tests](#transform-tests) - [Load Tests](#load-tests) + - [Smoketests](#smoketests) @@ -196,7 +205,7 @@ Here's a list of commands: ## Local development -You can run the Python code locally without Docker to develop, using Poetry. However, to generate the census data you will need the [GDAL library](https://github.com/OSGeo/gdal) installed locally. Also to generate tiles for a local map, you will need [Mapbox tippecanoe](https://github.com/mapbox/tippecanoe). Please refer to the repos for specific instructions for your OS. +You can run the Python code locally without Docker to develop, using Poetry. However, to generate the census data you will need the [GDAL library](https://github.com/OSGeo/gdal) installed locally. For score generation, you will need [libspatialindex](https://libspatialindex.org/en/latest/). And to generate tiles for a local map, you will need [Mapbox tippecanoe](https://github.com/mapbox/tippecanoe). Please refer to the repos for specific instructions for your OS. ### VSCode @@ -218,6 +227,7 @@ To install the above-named executables: - gdal: `brew install gdal` - Tippecanoe: `brew install tippecanoe` +- spatialindex: `brew install spatialindex` Note: For MacOS Monterey or M1 Macs, [you might need to follow these steps](https://stackoverflow.com/a/70880741) to install Scipy. @@ -229,10 +239,71 @@ If you want to run tile generation, please install TippeCanoe [following these i - Start a terminal - Change to this directory (`/data/data-pipeline/`) -- Make sure you have at least Python 3.7 installed: `python -V` or `python3 -V` +- Make sure you have at least Python 3.8 installed: `python -V` or `python3 -V` - We use [Poetry](https://python-poetry.org/) for managing dependencies and building the application. Please follow the instructions on their site to download. - Install Poetry requirements with `poetry install` +### Running tox + +Our full test and check suite is run using tox. This can be run using commands such +as `poetry run tox`. + +Each run can take a while to build the whole environment. If you'd like to save time, +you can use the previously built environment by running `poetry run tox -e lint` +which will drastically speed up the linting process. + +### Configuring pre-commit hooks + + +To promote consistent code style and quality, we use git pre-commit hooks to +automatically lint and reformat our code before every commit we make to the codebase. +Pre-commit hooks are defined in the file [`.pre-commit-config.yaml`](../.pre-commit-config.yaml). + + +1. First, install [`pre-commit`](https://pre-commit.com/) globally: + + $ brew install pre-commit + +2. While in the `data/data-pipeline` directory, run `pre-commit install` to install + the specific git hooks used in this repository. + +Now, any time you commit code to the repository, the hooks will run on all modified files automatically. If you wish, +you can force a re-run on all files with `pre-commit run --all-files`. + +#### Conflicts between backend and frontend git hooks + +In the front-end part of the codebase (the `justice40-tool/client` folder), we use +`Husky` to run pre-commit hooks for the front-end. This is different than the +`pre-commit` framework we use for the backend. The frontend `Husky` hooks are +configured at +[client/.husky](client/.husky). + +It is not possible to run both our `Husky` hooks and `pre-commit` hooks on every +commit; either one or the other will run. + + + +`Husky` is installed every time you run `npm install`. To use the `Husky` front-end +hooks during front-end development, simply run `npm install`. + +However, running `npm install` overwrites the backend hooks setup by `pre-commit`. +To restore the backend hooks after running `npm install`, do the following: + +1. Run `pre-commit install` while in the `data/data-pipeline` directory. +2. The terminal should respond with an error message such as: +``` +[ERROR] Cowardly refusing to install hooks with `core.hooksPath` set. +hint: `git config --unset-all core.hooksPath` +``` + +This error is caused by having previously run `npm install` which used `Husky` to +overwrite the hooks path. + +3. Follow the hint and run `git config --unset-all core.hooksPath`. +4. Run `pre-commit install` again. + +Now `pre-commit` and the backend hooks should take precedence. + ### The Application entrypoint After installing the poetry dependencies, you can see a list of commands with the following steps: @@ -303,7 +374,11 @@ see [python-markdown docs](https://github.com/ipython-contrib/jupyter_contrib_nb ### Background -For this project, we make use of [pytest](https://docs.pytest.org/en/latest/) for testing purposes. To run tests, simply run `poetry run pytest` in this directory (i.e., `justice40-tool/data/data-pipeline`). + +For this project, we make use of [pytest](https://docs.pytest.org/en/latest/) for testing purposes. + + +To run tests, simply run `poetry run pytest` in this directory (i.e., `justice40-tool/data/data-pipeline`). Test data is configured via [fixtures](https://docs.pytest.org/en/latest/explanation/fixtures.html). @@ -350,7 +425,8 @@ We have four pickle files that correspond to expected files: To update the pickles, let's go one by one: -For the `score_transformed_expected.pkl`, put a breakpoint on [this line](https://github.com/usds/justice40-tool/blob/main/data/data-pipeline/data_pipeline/etl/score/tests/test_score_post.py#L58), before the `pdt.assert_frame_equal` and run: +For the `score_transformed_expected.pkl`, put a breakpoint on [this line] +(https://github.com/usds/justice40-tool/blob/main/data/data-pipeline/data_pipeline/etl/score/tests/test_score_post.py#L62), before the `pdt.assert_frame_equal` and run: `pytest data_pipeline/etl/score/tests/test_score_post.py::test_transform_score` Once on the breakpoint, capture the df to a pickle as follows: @@ -378,7 +454,7 @@ score_data_actual.to_pickle(data_path / "data_pipeline" / "etl" / "score" / "tes Then take out the breakpoint and re-run the test: `pytest data_pipeline/etl/score/tests/test_score_post.py::test_create_score_data` -For the `tile_data_expected.pkl`, put a breakpoint on [this line](https://github.com/usds/justice40-tool/blob/main/data/data-pipeline/data_pipeline/etl/score/tests/test_score_post.py#L86), before the `pdt.assert_frame_equal` and run: +For the `tile_data_expected.pkl`, put a breakpoint on [this line](https://github.com/usds/justice40-tool/blob/main/data/data-pipeline/data_pipeline/etl/score/tests/test_score_post.py#L90), before the `pdt.assert_frame_equal` and run: `pytest data_pipeline/etl/score/tests/test_score_post.py::test_create_tile_data` Once on the breakpoint, capture the df to a pickle as follows: @@ -418,7 +494,9 @@ In the future, we could adopt any of the below strategies to work around this: 1. We could use [pytest-snapshot](https://pypi.org/project/pytest-snapshot/) to automatically store the output of each test as data changes. This would make it so that you could avoid having to generate a pickle for each method - instead, you would only need to call `generate` once , and only when the dataframe had changed. + Additionally, you could use a pandas type schema annotation such as [pandera](https://pandera.readthedocs.io/en/stable/schema_models.html?highlight=inputschema#basic-usage) to annotate input/output schemas for given functions, and your unit tests could use these to validate explicitly. This could be of very high value for annotating expectations. + Alternatively, or in conjunction, you could move toward using a more strictly-typed container format for read/writes such as SQL/SQLite, and use something like [SQLModel](https://github.com/tiangolo/sqlmodel) to handle more explicit type guarantees. @@ -440,19 +518,19 @@ In order to update the snapshot fixtures of an ETL class, follow the following s 1. If you need to manually update the fixtures, update the "furthest upstream" source that is called by `_setup_etl_instance_and_run_extract`. For instance, this may - involve creating a new zip file that imitates the source data. (e.g., for the - National Risk Index test, update - `data_pipeline/tests/sources/national_risk_index/data/NRI_Table_CensusTracts.zip` + involve creating a new zip file that imitates the source data. (e.g., for the + National Risk Index test, update + `data_pipeline/tests/sources/national_risk_index/data/NRI_Table_CensusTracts.zip` which is a 64kb imitation of the 405MB source NRI data.) 2. Run `pytest . -rsx --update_snapshots` to update snapshots for all files, or you - can pass a specific file name to pytest to be more precise (e.g., `pytest + can pass a specific file name to pytest to be more precise (e.g., `pytest data_pipeline/tests/sources/national_risk_index/test_etl.py -rsx --update_snapshots`) 3. Re-run pytest without the `update_snapshots` flag (e.g., `pytest . -rsx`) to ensure the tests now pass. 4. Carefully check the `git diff` for the updates to all test fixtures to make sure these are as expected. This part is very important. For instance, if you changed a - column name, you would only expect the column name to change in the output. If - you modified the calculation of some data, spot check the results to see if the + column name, you would only expect the column name to change in the output. If + you modified the calculation of some data, spot check the results to see if the numbers in the updated fixtures are as expected. ### Other ETL Unit Tests @@ -485,3 +563,13 @@ See above [Fixtures](#configuration--fixtures) section for information about whe These make use of [tmp_path_factory](https://docs.pytest.org/en/latest/how-to/tmp_path.html) to create a file-system located under `temp_dir`, and validate whether the correct files are written to the correct locations. Additional future modifications could include the use of Pandera and/or other schema validation tools, and or a more explicit test that the data written to file can be read back in and yield the same dataframe. + +### Smoketests + +To ensure the score and tiles process correctly, there is a suite of "smoke tests" that can be run after the ETL and score data have been run, and outputs like the frontend GEOJSON have been created. +These tests are implemented as pytest test, but are skipped by default. To run them. + +1. Generate a full score with `poetry run python3 data_pipeline/application.py score-full-run` +2. Generate the tile data with `poetry run python3 data_pipeline/application.py generate-score-post` +3. Generate the frontend GEOJSON with `poetry run python3 data_pipeline/application.py geo-score` +4. Select the smoke tests for pytest with `poetry run pytest data_pipeline/tests -k smoketest` diff --git a/data/data-pipeline/data_pipeline/application.py b/data/data-pipeline/data_pipeline/application.py index 630d7ea8d..680f72a18 100644 --- a/data/data-pipeline/data_pipeline/application.py +++ b/data/data-pipeline/data_pipeline/application.py @@ -1,30 +1,27 @@ -from subprocess import call import sys -import click +from subprocess import call +import click from data_pipeline.config import settings -from data_pipeline.etl.runner import ( - etl_runner, - score_generate, - score_geo, - score_post, -) +from data_pipeline.etl.runner import etl_runner +from data_pipeline.etl.runner import score_generate +from data_pipeline.etl.runner import score_geo +from data_pipeline.etl.runner import score_post +from data_pipeline.etl.sources.census.etl_utils import check_census_data_source from data_pipeline.etl.sources.census.etl_utils import ( reset_data_directories as census_reset, - zip_census_data, ) +from data_pipeline.etl.sources.census.etl_utils import zip_census_data from data_pipeline.etl.sources.tribal.etl_utils import ( reset_data_directories as tribal_reset, ) from data_pipeline.tile.generate import generate_tiles -from data_pipeline.utils import ( - data_folder_cleanup, - get_module_logger, - score_folder_cleanup, - downloadable_cleanup, - temp_folder_cleanup, - check_first_run, -) +from data_pipeline.utils import check_first_run +from data_pipeline.utils import data_folder_cleanup +from data_pipeline.utils import downloadable_cleanup +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import score_folder_cleanup +from data_pipeline.utils import temp_folder_cleanup logger = get_module_logger(__name__) @@ -35,8 +32,6 @@ def cli(): """Defines a click group for the commands below""" - pass - @cli.command(help="Clean up all census data folders") def census_cleanup(): @@ -96,6 +91,23 @@ def census_data_download(zip_compress): sys.exit() +@cli.command(help="Retrieve census data from source") +@click.option( + "-s", + "--data-source", + default="local", + required=False, + type=str, + help=dataset_cli_help, +) +def pull_census_data(data_source: str): + logger.info("Pulling census data from %s", data_source) + data_path = settings.APP_ROOT / "data" / "census" + check_census_data_source(data_path, data_source) + logger.info("Finished pulling census data") + sys.exit() + + @cli.command( help="Run all ETL processes or a specific one", ) diff --git a/data/data-pipeline/data_pipeline/comparison_tool/README.md b/data/data-pipeline/data_pipeline/comparison_tool/README.md index 27be1430f..ea0172e48 100644 --- a/data/data-pipeline/data_pipeline/comparison_tool/README.md +++ b/data/data-pipeline/data_pipeline/comparison_tool/README.md @@ -2,13 +2,13 @@ ## Comparison tool -TODO once the comparison tool has been refactored. +TODO once the comparison tool has been refactored. ## Single comparator score comparisons -The goal of this directory is to create interactive 1-to-1 dac list:cejst comparisons. That means that, when this tool is run, you will have comparisons of two true/false classifications. +The goal of this directory is to create interactive 1-to-1 dac list:cejst comparisons. That means that, when this tool is run, you will have comparisons of two true/false classifications. -This uses `papermill` to parameterize a jupyter notebook, and is meant to be a *lightweight* entry into this analysis. The tool as a whole creates a bunch of comparisons against CEJST data -- but after it runs, you'll have the notebook to re-run and add to if you are so inclined. +This uses `papermill` to parameterize a jupyter notebook, and is meant to be a *lightweight* entry into this analysis. The tool as a whole creates a bunch of comparisons against CEJST data -- but after it runs, you'll have the notebook to re-run and add to if you are so inclined. To run: ` $ python src/run_tract_comparison.py --template_notebook=TEMPLATE.ipynb --parameter_yaml=PARAMETERS.yaml` @@ -19,52 +19,52 @@ For example, if I am running this from the `comparison_tool` directory within th __What is the template notebook?__ -This gets filled in by the parameters in the yaml file and then executed. Even after execution, it is run-able and interactive. You do not need to change anything in this (with the caveat -- depending on how you run `jupyter lab`, you might need to add `import sys` and then `sys.path.append("../../../../)` to run the notebook live). +This gets filled in by the parameters in the yaml file and then executed. Even after execution, it is run-able and interactive. You do not need to change anything in this (with the caveat -- depending on how you run `jupyter lab`, you might need to add `import sys` and then `sys.path.append("../../../../)` to run the notebook live). __What is the output?__ When you run this, you'll get back three files: -1. The filled-in parameter notebook that you can run live, with the date appended. This means if you run the script twice in one day, the notebook will get overriden, but if you run the script on two consecutive days, you will get two separate notebooks saved. -2. A graph that shows the relative average of the specified `ADDITIONAL_DEMO_COLUMNS` and `DEMOGRAPHIC_COLUMNS` segmented by CEJST and the comparator you include. This gets overridden with every run. +1. The filled-in parameter notebook that you can run live, with the date appended. This means if you run the script twice in one day, the notebook will get overriden, but if you run the script on two consecutive days, you will get two separate notebooks saved. +2. A graph that shows the relative average of the specified `ADDITIONAL_DEMO_COLUMNS` and `DEMOGRAPHIC_COLUMNS` segmented by CEJST and the comparator you include. This gets overridden with every run. 3. An excel file with many tabs that has summary statistics from the comparison of the two classifications (the cejst and the comparator). In more detail, the excel file contains the following tabs: - `Summary`: out of all tracts (even if you keep missing), how many tracts are classified TRUE/FALSE by the comparator and CEJST, by population and number. -- `Tract level stats`: overall, for all tracts classified as TRUE for CEJST and the comparator, how do the demographics of those tracts compare? Here, we think of "demographics" loosely -- whatever columns you include in the parameter yaml will show up. For example, if my additional demographics column in the yaml included `percent of households in linguistic isolation`, I'd see the average percent of households in linguistic isolation for the comparator-identified tracts (where the comparator is TRUE) and for CEJST-identified tracts. +- `Tract level stats`: overall, for all tracts classified as TRUE for CEJST and the comparator, how do the demographics of those tracts compare? Here, we think of "demographics" loosely -- whatever columns you include in the parameter yaml will show up. For example, if my additional demographics column in the yaml included `percent of households in linguistic isolation`, I'd see the average percent of households in linguistic isolation for the comparator-identified tracts (where the comparator is TRUE) and for CEJST-identified tracts. - `Population level stats`: same demographic variables, looking at population within tract. Since not all tracts have the same number of people, this will be slightly different. This also includes segments of the population -- where you can investigate the disjoint set of tracts identified by a single method (e.g., you could specifically look at tracts identified by CEJST but not by the comparator.) -- `Segmented tract level stats`: segmented version of the tract-level stats. -- (Optional -- requires not disjoint set of tracts) `Comparator and CEJST overlap`: shows the overlap from the vantage point of the comparator ("what share of the tracts that the comparator identifies are also identified in CEJST?"). Also lists the states the comparator has information for. +- `Segmented tract level stats`: segmented version of the tract-level stats. +- (Optional -- requires not disjoint set of tracts) `Comparator and CEJST overlap`: shows the overlap from the vantage point of the comparator ("what share of the tracts that the comparator identifies are also identified in CEJST?"). Also lists the states the comparator has information for. __What parameters go in the yaml file?__ -- ADDITIONAL_DEMO_COLUMNS: list, demographic columns from the score file that you want to run analyses on. All columns here will appear in the excel file and the graph. -- COMPARATOR_COLUMN: the name of the column that has a boolean (*must be TRUE / FALSE*) for whether or not the tract is prioritized. You provide this! -- DEMOGRAPHIC_COLUMNS: list, demographic columns from another file that you'd like to include in the analysis. -- DEMOGRAPHIC_FILE: the file that has the census demographic information. This name suggests, in theory, that you've run our pipeline and are using the ACS output -- but any file with `GEOID10_TRACT` as the field with census tract IDs will work. -- OUTPUT_DATA_PATH: where you want the output to be. Convention: output + folder named of data source. Note that the folder name of the data source gets read as the "data name" for some of the outputs. -- SCORE_COLUMN: CEJST score boolean name column name. -- SCORE_FILE: CEJST full score file. This requires that you've run our pipeline, but in theory, the downloaded file should also work, provided the columns are named appropriately. -- TOTAL_POPULATION_COLUMN: column name for total population. We use `Total Population` currently in our pipeline. -- OTHER_COMPARATOR_COLUMNS: list, other columns from the comparator file you might want to read in for analysis. This is an optional argument. You will keep these columns to perform analysis once you have the notebook -- this will not be included in the excel print out. +- ADDITIONAL_DEMO_COLUMNS: list, demographic columns from the score file that you want to run analyses on. All columns here will appear in the excel file and the graph. +- COMPARATOR_COLUMN: the name of the column that has a boolean (*must be TRUE / FALSE*) for whether or not the tract is prioritized. You provide this! +- DEMOGRAPHIC_COLUMNS: list, demographic columns from another file that you'd like to include in the analysis. +- DEMOGRAPHIC_FILE: the file that has the census demographic information. This name suggests, in theory, that you've run our pipeline and are using the ACS output -- but any file with `GEOID10_TRACT` as the field with census tract IDs will work. +- OUTPUT_DATA_PATH: where you want the output to be. Convention: output + folder named of data source. Note that the folder name of the data source gets read as the "data name" for some of the outputs. +- SCORE_COLUMN: CEJST score boolean name column name. +- SCORE_FILE: CEJST full score file. This requires that you've run our pipeline, but in theory, the downloaded file should also work, provided the columns are named appropriately. +- TOTAL_POPULATION_COLUMN: column name for total population. We use `Total Population` currently in our pipeline. +- OTHER_COMPARATOR_COLUMNS: list, other columns from the comparator file you might want to read in for analysis. This is an optional argument. You will keep these columns to perform analysis once you have the notebook -- this will not be included in the excel print out. - KEEP_MISSING_VALUES_FOR_SEGMENTATION: whether or not to fill NaNs. True keeps missing. __Cleaning data__ -Comparator data should live in a flat csv, just like the CEJST data. Right now, each comparator has a folder in `comparison_tool/data` that contains a notebook to clean the data (this is because the data is often quirky and so live inspection is easier), the `raw` data, and the `clean` data. We can also point the `yaml` to an `ETL` output, for files in which there are multiple important columns, if you want to use one of the data sources the CEJST team has already included in the pipeline (which are already compatible with the tool). +Comparator data should live in a flat csv, just like the CEJST data. Right now, each comparator has a folder in `comparison_tool/data` that contains a notebook to clean the data (this is because the data is often quirky and so live inspection is easier), the `raw` data, and the `clean` data. We can also point the `yaml` to an `ETL` output, for files in which there are multiple important columns, if you want to use one of the data sources the CEJST team has already included in the pipeline (which are already compatible with the tool). -When you make your own output for comparison, make sure to follow the steps below. +When you make your own output for comparison, make sure to follow the steps below. When you clean the data, it's important that you: 1. Ensure the tract level id is named the same as the field name in score M (specified in `field_names`). Right now, this is `GEOID10_TRACT`. 2. Ensure the identification column is a `bool`. -You will provide the path to the comparator data in the parameter yaml file. +You will provide the path to the comparator data in the parameter yaml file. __How to use the shell script__ -We have also included a shell script, `run_all_comparisons.sh`. This script includes all -of the commands that we have run to generate pairwise comparisons. +We have also included a shell script, `run_all_comparisons.sh`. This script includes all +of the commands that we have run to generate pairwise comparisons. To run: `$ bash run_all_comparisons.sh` -To add to it: create a new line and include the command line for each notebook run. \ No newline at end of file +To add to it: create a new line and include the command line for each notebook run. diff --git a/data/data-pipeline/data_pipeline/comparison_tool/output/cre/cre__2022-03-30.xlsx b/data/data-pipeline/data_pipeline/comparison_tool/output/cre/cre__2022-03-30.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..265075dffe2871da7bcac69240b6a60485678059 GIT binary patch literal 11222 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 dict: diff --git a/data/data-pipeline/data_pipeline/comparison_tool/src/tract_comparison__template.ipynb b/data/data-pipeline/data_pipeline/comparison_tool/src/tract_comparison__template.ipynb index 10fc8616e..915b84fa5 100644 --- a/data/data-pipeline/data_pipeline/comparison_tool/src/tract_comparison__template.ipynb +++ b/data/data-pipeline/data_pipeline/comparison_tool/src/tract_comparison__template.ipynb @@ -16,7 +16,7 @@ "import matplotlib.pyplot as plt\n", "\n", "from data_pipeline.score import field_names\n", - "from data_pipeline.comparison_tool.src import utils \n", + "from data_pipeline.comparison_tool.src import utils\n", "\n", "pd.options.display.float_format = \"{:,.3f}\".format\n", "%load_ext lab_black" @@ -128,9 +128,7 @@ "metadata": {}, "outputs": [], "source": [ - "utils.validate_new_data(\n", - " file_path=COMPARATOR_FILE, score_col=COMPARATOR_COLUMN\n", - ")" + "utils.validate_new_data(file_path=COMPARATOR_FILE, score_col=COMPARATOR_COLUMN)" ] }, { @@ -148,20 +146,25 @@ "metadata": {}, "outputs": [], "source": [ - "comparator_cols = [COMPARATOR_COLUMN] + OTHER_COMPARATOR_COLUMNS if OTHER_COMPARATOR_COLUMNS else [COMPARATOR_COLUMN]\n", + "comparator_cols = (\n", + " [COMPARATOR_COLUMN] + OTHER_COMPARATOR_COLUMNS\n", + " if OTHER_COMPARATOR_COLUMNS\n", + " else [COMPARATOR_COLUMN]\n", + ")\n", "\n", - "#papermill_description=Loading_data\n", + "# papermill_description=Loading_data\n", "joined_df = pd.concat(\n", " [\n", " utils.read_file(\n", " file_path=SCORE_FILE,\n", - " columns=[TOTAL_POPULATION_COLUMN, SCORE_COLUMN] + ADDITIONAL_DEMO_COLUMNS,\n", + " columns=[TOTAL_POPULATION_COLUMN, SCORE_COLUMN]\n", + " + ADDITIONAL_DEMO_COLUMNS,\n", " geoid=GEOID_COLUMN,\n", " ),\n", " utils.read_file(\n", " file_path=COMPARATOR_FILE,\n", " columns=comparator_cols,\n", - " geoid=GEOID_COLUMN\n", + " geoid=GEOID_COLUMN,\n", " ),\n", " utils.read_file(\n", " file_path=DEMOGRAPHIC_FILE,\n", @@ -196,13 +199,13 @@ "metadata": {}, "outputs": [], "source": [ - "#papermill_description=Summary_stats\n", + "# papermill_description=Summary_stats\n", "population_df = utils.produce_summary_stats(\n", " joined_df=joined_df,\n", " comparator_column=COMPARATOR_COLUMN,\n", " score_column=SCORE_COLUMN,\n", " population_column=TOTAL_POPULATION_COLUMN,\n", - " geoid_column=GEOID_COLUMN\n", + " geoid_column=GEOID_COLUMN,\n", ")\n", "population_df" ] @@ -224,18 +227,18 @@ "metadata": {}, "outputs": [], "source": [ - "#papermill_description=Tract_stats\n", + "# papermill_description=Tract_stats\n", "tract_level_by_identification_df = pd.concat(\n", " [\n", " utils.get_demo_series(\n", " grouping_column=COMPARATOR_COLUMN,\n", " joined_df=joined_df,\n", - " demo_columns=ADDITIONAL_DEMO_COLUMNS + DEMOGRAPHIC_COLUMNS\n", + " demo_columns=ADDITIONAL_DEMO_COLUMNS + DEMOGRAPHIC_COLUMNS,\n", " ),\n", " utils.get_demo_series(\n", " grouping_column=SCORE_COLUMN,\n", " joined_df=joined_df,\n", - " demo_columns=ADDITIONAL_DEMO_COLUMNS + DEMOGRAPHIC_COLUMNS\n", + " demo_columns=ADDITIONAL_DEMO_COLUMNS + DEMOGRAPHIC_COLUMNS,\n", " ),\n", " ],\n", " axis=1,\n", @@ -256,17 +259,25 @@ " y=\"Variable\",\n", " x=\"Avg in tracts\",\n", " hue=\"Definition\",\n", - " data=tract_level_by_identification_df.sort_values(by=COMPARATOR_COLUMN, ascending=False)\n", + " data=tract_level_by_identification_df.sort_values(\n", + " by=COMPARATOR_COLUMN, ascending=False\n", + " )\n", " .stack()\n", " .reset_index()\n", " .rename(\n", - " columns={\"level_0\": \"Variable\", \"level_1\": \"Definition\", 0: \"Avg in tracts\"}\n", + " columns={\n", + " \"level_0\": \"Variable\",\n", + " \"level_1\": \"Definition\",\n", + " 0: \"Avg in tracts\",\n", + " }\n", " ),\n", " palette=\"Blues\",\n", ")\n", "plt.xlim(0, 1)\n", "plt.title(\"Tract level averages by identification strategy\")\n", - "plt.savefig(os.path.join(OUTPUT_DATA_PATH, \"tract_lvl_avg.jpg\"), bbox_inches='tight')" + "plt.savefig(\n", + " os.path.join(OUTPUT_DATA_PATH, \"tract_lvl_avg.jpg\"), bbox_inches=\"tight\"\n", + ")" ] }, { @@ -276,13 +287,13 @@ "metadata": {}, "outputs": [], "source": [ - "#papermill_description=Tract_stats_grouped\n", + "# papermill_description=Tract_stats_grouped\n", "tract_level_by_grouping_df = utils.get_tract_level_grouping(\n", " joined_df=joined_df,\n", " score_column=SCORE_COLUMN,\n", " comparator_column=COMPARATOR_COLUMN,\n", " demo_columns=ADDITIONAL_DEMO_COLUMNS + DEMOGRAPHIC_COLUMNS,\n", - " keep_missing_values=KEEP_MISSING_VALUES_FOR_SEGMENTATION\n", + " keep_missing_values=KEEP_MISSING_VALUES_FOR_SEGMENTATION,\n", ")\n", "\n", "tract_level_by_grouping_formatted_df = utils.format_multi_index_for_excel(\n", @@ -315,7 +326,7 @@ "metadata": {}, "outputs": [], "source": [ - "#papermill_description=Population_stats\n", + "# papermill_description=Population_stats\n", "population_weighted_stats_df = pd.concat(\n", " [\n", " utils.construct_weighted_statistics(\n", @@ -363,7 +374,7 @@ "comparator_and_cejst_proportion_series, states = utils.get_final_summary_info(\n", " population=population_df,\n", " comparator_file=COMPARATOR_FILE,\n", - " geoid_col=GEOID_COLUMN\n", + " geoid_col=GEOID_COLUMN,\n", ")" ] }, @@ -393,7 +404,7 @@ "metadata": {}, "outputs": [], "source": [ - "#papermill_description=Writing_excel\n", + "# papermill_description=Writing_excel\n", "utils.write_single_comparison_excel(\n", " output_excel=OUTPUT_EXCEL,\n", " population_df=population_df,\n", @@ -401,7 +412,7 @@ " population_weighted_stats_df=population_weighted_stats_df,\n", " tract_level_by_grouping_formatted_df=tract_level_by_grouping_formatted_df,\n", " comparator_and_cejst_proportion_series=comparator_and_cejst_proportion_series,\n", - " states_text=states_text\n", + " states_text=states_text,\n", ")" ] } diff --git a/data/data-pipeline/data_pipeline/comparison_tool/src/utils.py b/data/data-pipeline/data_pipeline/comparison_tool/src/utils.py index 0d67dc1b4..ec20fb838 100644 --- a/data/data-pipeline/data_pipeline/comparison_tool/src/utils.py +++ b/data/data-pipeline/data_pipeline/comparison_tool/src/utils.py @@ -1,9 +1,9 @@ import pathlib + import pandas as pd import xlsxwriter - -from data_pipeline.score import field_names from data_pipeline.etl.sources.census.etl_utils import get_state_information +from data_pipeline.score import field_names # Some excel parameters DEFAULT_COLUMN_WIDTH = 18 @@ -40,7 +40,7 @@ def validate_new_data( assert ( checking_df[score_col].nunique() <= 3 ), f"Error: there are too many values possible in {score_col}" - assert (True in checking_df[score_col].unique()) & ( + assert (True in checking_df[score_col].unique()) | ( False in checking_df[score_col].unique() ), f"Error: {score_col} should be a boolean" diff --git a/data/data-pipeline/data_pipeline/config.py b/data/data-pipeline/data_pipeline/config.py index c32389ca3..ee75e535f 100644 --- a/data/data-pipeline/data_pipeline/config.py +++ b/data/data-pipeline/data_pipeline/config.py @@ -1,8 +1,7 @@ import pathlib -from dynaconf import Dynaconf - import data_pipeline +from dynaconf import Dynaconf settings = Dynaconf( envvar_prefix="DYNACONF", @@ -12,7 +11,8 @@ # set root dir settings.APP_ROOT = pathlib.Path(data_pipeline.__file__).resolve().parent - +settings.DATA_PATH = settings.APP_ROOT / "data" +settings.REQUESTS_DEFAULT_TIMOUT = 3600 # To set an environment use: # Linux/OSX: export ENV_FOR_DYNACONF=staging # Windows: set ENV_FOR_DYNACONF=staging diff --git a/data/data-pipeline/data_pipeline/content/config/csv.yml b/data/data-pipeline/data_pipeline/content/config/csv.yml index 9a9ce9876..c25e8ff34 100644 --- a/data/data-pipeline/data_pipeline/content/config/csv.yml +++ b/data/data-pipeline/data_pipeline/content/config/csv.yml @@ -1,256 +1,406 @@ --- global_config: - sort_by_label: Census tract ID + sort_by_label: Census tract 2010 ID rounding_num: float: 2 loss_rate_percentage: 4 fields: - - score_name: GEOID10_TRACT - label: Census tract ID - format: string - - score_name: County Name - label: County Name - format: string - - score_name: State/Territory - label: State/Territory - format: string - - score_name: Total threshold criteria exceeded - label: Total threshold criteria exceeded - format: int64 - - score_name: Total categories exceeded - label: Total categories exceeded - format: int64 - - score_name: Definition M (communities) - label: Identified as disadvantaged - format: bool - - score_name: Total population - label: Total population - format: float - - score_name: Is low income and has a low percent of higher ed students? - label: Is low income and high percent of residents that are not higher ed students? - format: bool - - score_name: Greater than or equal to the 90th percentile for expected agriculture loss rate, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for expected agriculture loss rate, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Expected agricultural loss rate (Natural Hazards Risk Index) (percentile) - label: Expected agricultural loss rate (Natural Hazards Risk Index) (percentile) - format: percentage - - score_name: Expected agricultural loss rate (Natural Hazards Risk Index) - label: Expected agricultural loss rate (Natural Hazards Risk Index) - format: loss_rate_percentage - - score_name: Greater than or equal to the 90th percentile for expected building loss rate, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for expected building loss rate, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Expected building loss rate (Natural Hazards Risk Index) (percentile) - label: Expected building loss rate (Natural Hazards Risk Index) (percentile) - format: percentage - - score_name: Expected building loss rate (Natural Hazards Risk Index) - label: Expected building loss rate (Natural Hazards Risk Index) - format: loss_rate_percentage - - score_name: Greater than or equal to the 90th percentile for expected population loss rate, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for expected population loss rate, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Expected population loss rate (Natural Hazards Risk Index) (percentile) - label: Expected population loss rate (Natural Hazards Risk Index) (percentile) - format: percentage - - score_name: Expected population loss rate (Natural Hazards Risk Index) - label: Expected population loss rate (Natural Hazards Risk Index) - format: loss_rate_percentage - - score_name: Greater than or equal to the 90th percentile for energy burden, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for energy burden, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Energy burden (percentile) - label: Energy burden (percentile) - format: percentage - - score_name: Energy burden - label: Energy burden - format: percentage - - score_name: Greater than or equal to the 90th percentile for PM2.5 exposure, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for PM2.5 exposure, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: PM2.5 in the air (percentile) - label: PM2.5 in the air (percentile) - format: percentage - - score_name: PM2.5 in the air - label: PM2.5 in the air - format: float - - score_name: Greater than or equal to the 90th percentile for diesel particulate matter, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for diesel particulate matter, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Diesel particulate matter exposure (percentile) - label: Diesel particulate matter exposure (percentile) - format: percentage - - score_name: Diesel particulate matter exposure - label: Diesel particulate matter exposure - format: float - - score_name: Greater than or equal to the 90th percentile for traffic proximity, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for traffic proximity, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Traffic proximity and volume (percentile) - label: Traffic proximity and volume (percentile) - format: percentage - - score_name: Traffic proximity and volume - label: Traffic proximity and volume - format: float - - score_name: Greater than or equal to the 90th percentile for housing burden, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for housing burden, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Housing burden (percent) (percentile) - label: Housing burden (percent) (percentile) - format: percentage - - score_name: Housing burden (percent) - label: Housing burden (percent) - format: percentage - - score_name: Greater than or equal to the 90th percentile for lead paint, the median house value is less than 90th percentile, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for lead paint, the median house value is less than 90th percentile, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Percent pre-1960s housing (lead paint indicator) (percentile) - label: Percent pre-1960s housing (lead paint indicator) (percentile) - format: percentage - - score_name: Percent pre-1960s housing (lead paint indicator) - label: Percent pre-1960s housing (lead paint indicator) - format: percentage - - score_name: Median value ($) of owner-occupied housing units (percentile) - label: Median value ($) of owner-occupied housing units (percentile) - format: percentage - - score_name: Median value ($) of owner-occupied housing units - label: Median value ($) of owner-occupied housing units - format: float - - score_name: Greater than or equal to the 90th percentile for proximity to hazardous waste facilities, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for proximity to hazardous waste facilities, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Proximity to hazardous waste sites (percentile) - label: Proximity to hazardous waste sites (percentile) - format: percentage - - score_name: Proximity to hazardous waste sites - label: Proximity to hazardous waste sites - format: float - - score_name: Greater than or equal to the 90th percentile for proximity to superfund sites, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for proximity to superfund sites, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Proximity to NPL sites (percentile) - label: Proximity to NPL (Superfund) sites (percentile) - format: percentage - - score_name: Proximity to NPL sites - label: Proximity to NPL (Superfund) sites - format: float - - score_name: Greater than or equal to the 90th percentile for proximity to RMP sites, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for proximity to RMP sites, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Proximity to Risk Management Plan (RMP) facilities (percentile) - label: Proximity to Risk Management Plan (RMP) facilities (percentile) - format: percentage - - score_name: Proximity to Risk Management Plan (RMP) facilities - label: Proximity to Risk Management Plan (RMP) facilities - format: float - - score_name: Greater than or equal to the 90th percentile for wastewater discharge, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for wastewater discharge, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Wastewater discharge (percentile) - label: Wastewater discharge (percentile) - format: percentage - - score_name: Wastewater discharge - label: Wastewater discharge - format: float - - score_name: Greater than or equal to the 90th percentile for asthma, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for asthma, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Current asthma among adults aged greater than or equal to 18 years (percentile) - label: Current asthma among adults aged greater than or equal to 18 years (percentile) - format: percentage - - score_name: Current asthma among adults aged greater than or equal to 18 years - label: Current asthma among adults aged greater than or equal to 18 years - format: percentage - - score_name: Greater than or equal to the 90th percentile for diabetes, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for diabetes, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile) - label: Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile) - format: percentage - - score_name: Diagnosed diabetes among adults aged greater than or equal to 18 years - label: Diagnosed diabetes among adults aged greater than or equal to 18 years - format: percentage - - score_name: Greater than or equal to the 90th percentile for heart disease, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for heart disease, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Coronary heart disease among adults aged greater than or equal to 18 years (percentile) - label: Coronary heart disease among adults aged greater than or equal to 18 years (percentile) - format: percentage - - score_name: Coronary heart disease among adults aged greater than or equal to 18 years - label: Coronary heart disease among adults aged greater than or equal to 18 years - format: percentage - - score_name: Greater than or equal to the 90th percentile for low life expectancy, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for low life expectancy, is low income, and high percent of residents that are not higher ed students? - format: bool - - score_name: Low life expectancy (percentile) - label: Low life expectancy (percentile) - format: percentage - - score_name: Life expectancy (years) - label: Life expectancy (years) - format: float - - score_name: Greater than or equal to the 90th percentile for low median household income as a percent of area median income, has low HS attainment, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for low median household income as a percent of area median income, has low HS attainment, and high percent of residents that are not higher ed students? - format: bool - - score_name: Low median household income as a percent of area median income (percentile) - label: Low median household income as a percent of area median income (percentile) - format: percentage - - score_name: Median household income as a percent of area median income - label: Median household income as a percent of area median income - format: percentage - - score_name: Greater than or equal to the 90th percentile for households in linguistic isolation, has low HS attainment, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for households in linguistic isolation, has low HS attainment, and high percent of residents that are not higher ed students? - format: bool - - score_name: Linguistic isolation (percent) (percentile) - label: Linguistic isolation (percent) (percentile) - format: percentage - - score_name: Linguistic isolation (percent) - label: Linguistic isolation (percent) - format: percentage - - score_name: Greater than or equal to the 90th percentile for unemployment, has low HS attainment, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for unemployment, has low HS attainment, and high percent of residents that are not higher ed students? - format: bool - - score_name: Unemployment (percent) (percentile) - label: Unemployment (percent) (percentile) - format: percentage - - score_name: Unemployment (percent) - label: Unemployment (percent) - format: percentage - - score_name: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level, has low HS attainment, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level, has low HS attainment, and high percent of residents that are not higher ed students? - format: bool - - score_name: Percent of individuals below 200% Federal Poverty Line (percentile) - label: Percent of individuals below 200% Federal Poverty Line (percentile) - format: percentage - - score_name: Percent of individuals below 200% Federal Poverty Line - label: Percent of individuals below 200% Federal Poverty Line - format: percentage - - score_name: Percent of individuals < 100% Federal Poverty Line (percentile) - label: Percent of individuals < 100% Federal Poverty Line (percentile) - format: percentage - - score_name: Percent of individuals < 100% Federal Poverty Line - label: Percent of individuals < 100% Federal Poverty Line - format: percentage - - score_name: Percent individuals age 25 or over with less than high school degree (percentile) - label: Percent individuals age 25 or over with less than high school degree (percentile) - format: percentage - - score_name: Percent individuals age 25 or over with less than high school degree - label: Percent individuals age 25 or over with less than high school degree - format: percentage - - score_name: Unemployment (percent) in 2009 (island areas) and 2010 (states and PR) - label: Unemployment (percent) in 2009 (island areas) and 2010 (states and PR) - format: percentage - - score_name: Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR) - label: Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR) - format: percentage - - score_name: Greater than or equal to the 90th percentile for unemployment and has low HS education in 2009 (island areas)? - label: Greater than or equal to the 90th percentile for unemployment and has low HS education in 2009 (island areas)? - format: bool - - score_name: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas)? - label: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas)? - format: bool - - score_name: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)? - label: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)? - format: bool - - score_name: Percent of population not currently enrolled in college or graduate school - label: Percent of residents who are not currently enrolled in higher ed - format: percentage +- score_name: GEOID10_TRACT + label: Census tract 2010 ID + format: string +- score_name: County Name + label: County Name + format: string +- score_name: State/Territory + label: State/Territory + format: string +- score_name: Percent Black or African American + label: Percent Black or African American alone + format: float +- score_name: Percent American Indian / Alaska Native + label: Percent American Indian / Alaska Native + format: float +- score_name: Percent Asian + label: Percent Asian + format: float +- score_name: Percent Native Hawaiian or Pacific + label: Percent Native Hawaiian or Pacific + format: float +- score_name: Percent two or more races + label: Percent two or more races + format: float +- score_name: Percent White + label: Percent White + format: float +- score_name: Percent Hispanic or Latino + label: Percent Hispanic or Latino + format: float +- score_name: Percent other races + label: Percent other races + format: float +- score_name: Percent age under 10 + label: Percent age under 10 + format: float +- score_name: Percent age 10 to 64 + label: Percent age 10 to 64 + format: float +- score_name: Percent age over 64 + label: Percent age over 64 + format: float +- score_name: Total threshold criteria exceeded + label: Total threshold criteria exceeded + format: int64 +- score_name: Total categories exceeded + label: Total categories exceeded + format: int64 +- score_name: Definition N (communities) + label: Identified as disadvantaged without considering neighbors + format: bool +- score_name: Definition N (communities) (based on adjacency index and low income alone) + label: Identified as disadvantaged based on neighbors and relaxed low income threshold only + format: bool +- score_name: Identified as disadvantaged due to tribal overlap + label: Identified as disadvantaged due to tribal overlap + format: bool +- score_name: Definition N community, including adjacency index tracts + label: Identified as disadvantaged + format: bool +- score_name: Percentage of tract that is disadvantaged + label: Percentage of tract that is disadvantaged by area + format: percentage +- score_name: Definition N (communities) (average of neighbors) + label: Share of neighbors that are identified as disadvantaged + format: percentage +- score_name: Total population + label: Total population + format: float +- score_name: Percent of individuals below 200% Federal Poverty Line, imputed and adjusted (percentile) + label: Adjusted percent of individuals below 200% Federal Poverty Line (percentile) + format: float +- score_name: Percent of individuals below 200% Federal Poverty Line, imputed and adjusted + label: Adjusted percent of individuals below 200% Federal Poverty Line + format: float +- score_name: Is low income (imputed and adjusted)? + label: Is low income? + format: bool +- score_name: Income data has been estimated based on neighbor income + label: Income data has been estimated based on geographic neighbor income + format: bool +- score_name: Greater than or equal to the 90th percentile for expected agriculture loss rate and is low income? + label: Greater than or equal to the 90th percentile for expected agriculture loss rate and is low income? + format: bool +- score_name: Expected agricultural loss rate (Natural Hazards Risk Index) (percentile) + label: Expected agricultural loss rate (Natural Hazards Risk Index) (percentile) + format: percentage +- score_name: Expected agricultural loss rate (Natural Hazards Risk Index) + label: Expected agricultural loss rate (Natural Hazards Risk Index) + format: loss_rate_percentage +- score_name: Greater than or equal to the 90th percentile for expected building loss rate and is low income? + label: Greater than or equal to the 90th percentile for expected building loss rate and is low income? + format: bool +- score_name: Expected building loss rate (Natural Hazards Risk Index) (percentile) + label: Expected building loss rate (Natural Hazards Risk Index) (percentile) + format: percentage +- score_name: Expected building loss rate (Natural Hazards Risk Index) + label: Expected building loss rate (Natural Hazards Risk Index) + format: loss_rate_percentage +- score_name: Greater than or equal to the 90th percentile for expected population loss rate and is low income? + label: Greater than or equal to the 90th percentile for expected population loss rate and is low income? + format: bool +- score_name: Expected population loss rate (Natural Hazards Risk Index) (percentile) + label: Expected population loss rate (Natural Hazards Risk Index) (percentile) + format: percentage +- score_name: Expected population loss rate (Natural Hazards Risk Index) + label: Expected population loss rate (Natural Hazards Risk Index) + format: loss_rate_percentage +- score_name: Share of properties at risk of flood in 30 years (percentile) + label: Share of properties at risk of flood in 30 years (percentile) + format: percentage +- score_name: Share of properties at risk of flood in 30 years + label: Share of properties at risk of flood in 30 years + format: percentage +- score_name: Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years + label: Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years + format: bool +- score_name: Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years and is low income? + label: Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years and is low income? + format: bool +- score_name: Share of properties at risk of fire in 30 years (percentile) + label: Share of properties at risk of fire in 30 years (percentile) + format: percentage +- score_name: Share of properties at risk of fire in 30 years + label: Share of properties at risk of fire in 30 years + format: percentage +- score_name: Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years + label: Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years + format: bool +- score_name: Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years and is low income? + label: Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years and is low income? + format: bool +- score_name: Greater than or equal to the 90th percentile for energy burden and is low income? + label: Greater than or equal to the 90th percentile for energy burden and is low income? + format: bool +- score_name: Energy burden (percentile) + label: Energy burden (percentile) + format: percentage +- score_name: Energy burden + label: Energy burden + format: percentage +- score_name: Greater than or equal to the 90th percentile for PM2.5 exposure and is low income? + label: Greater than or equal to the 90th percentile for PM2.5 exposure and is low income? + format: bool +- score_name: PM2.5 in the air (percentile) + label: PM2.5 in the air (percentile) + format: percentage +- score_name: PM2.5 in the air + label: PM2.5 in the air + format: float +- score_name: Greater than or equal to the 90th percentile for diesel particulate matter and is low income? + label: Greater than or equal to the 90th percentile for diesel particulate matter and is low income? + format: bool +- score_name: Diesel particulate matter exposure (percentile) + label: Diesel particulate matter exposure (percentile) + format: percentage +- score_name: Diesel particulate matter exposure + label: Diesel particulate matter exposure + format: float +- score_name: Greater than or equal to the 90th percentile for traffic proximity and is low income? + label: Greater than or equal to the 90th percentile for traffic proximity and is low income? + format: bool +- score_name: Traffic proximity and volume (percentile) + label: Traffic proximity and volume (percentile) + format: percentage +- score_name: Traffic proximity and volume + label: Traffic proximity and volume + format: float +- score_name: Greater than or equal to the 90th percentile for DOT transit barriers and is low income? + label: Greater than or equal to the 90th percentile for DOT transit barriers and is low income? + format: bool +- score_name: DOT Travel Barriers Score (percentile) + label: DOT Travel Barriers Score (percentile) + format: percentage +- score_name: Greater than or equal to the 90th percentile for housing burden and is low income? + label: Greater than or equal to the 90th percentile for housing burden and is low income? + format: bool +- score_name: Housing burden (percent) (percentile) + label: Housing burden (percent) (percentile) + format: percentage +- score_name: Housing burden (percent) + label: Housing burden (percent) + format: percentage +- score_name: Greater than or equal to the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income? + label: Greater than or equal to the 90th percentile for lead paint, the median house value is less than 90th percentile and is low income? + format: bool +- score_name: Percent pre-1960s housing (lead paint indicator) (percentile) + label: Percent pre-1960s housing (lead paint indicator) (percentile) + format: percentage +- score_name: Percent pre-1960s housing (lead paint indicator) + label: Percent pre-1960s housing (lead paint indicator) + format: percentage +- score_name: Median value ($) of owner-occupied housing units (percentile) + label: Median value ($) of owner-occupied housing units (percentile) + format: percentage +- score_name: Median value ($) of owner-occupied housing units + label: Median value ($) of owner-occupied housing units + format: float +- score_name: Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent and is low income? + label: Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent and is low income? + format: bool +- score_name: Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent + label: Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent + format: bool +- score_name: Share of the tract's land area that is covered by impervious surface or cropland as a percent + label: Share of the tract's land area that is covered by impervious surface or cropland as a percent + format: percentage +- score_name: Share of the tract's land area that is covered by impervious surface or cropland as a percent (percentile) + label: Share of the tract's land area that is covered by impervious surface or cropland as a percent (percentile) + format: percentage +- score_name: Does the tract have at least 35 acres in it? + label: Does the tract have at least 35 acres in it? + format: bool +- score_name: Tract-level redlining score meets or exceeds 3.25 and is low income + label: Tract experienced historic underinvestment and remains low income + format: bool +- score_name: Tract-level redlining score meets or exceeds 3.25 + label: Tract experienced historic underinvestment + format: bool +- score_name: Share of homes with no kitchen or indoor plumbing (percent) (percentile) + label: Share of homes with no kitchen or indoor plumbing (percentile) + format: float +- score_name: Share of homes with no kitchen or indoor plumbing (percent) + label: Share of homes with no kitchen or indoor plumbing (percent) + format: float +- score_name: Greater than or equal to the 90th percentile for proximity to hazardous waste facilities and is low income? + label: Greater than or equal to the 90th percentile for proximity to hazardous waste facilities and is low income? + format: bool +- score_name: Proximity to hazardous waste sites (percentile) + label: Proximity to hazardous waste sites (percentile) + format: percentage +- score_name: Proximity to hazardous waste sites + label: Proximity to hazardous waste sites + format: float +- score_name: Greater than or equal to the 90th percentile for proximity to superfund sites and is low income? + label: Greater than or equal to the 90th percentile for proximity to superfund sites and is low income? + format: bool +- score_name: Proximity to NPL sites (percentile) + label: Proximity to NPL (Superfund) sites (percentile) + format: percentage +- score_name: Proximity to NPL sites + label: Proximity to NPL (Superfund) sites + format: float +- score_name: Greater than or equal to the 90th percentile for proximity to RMP sites and is low income? + label: Greater than or equal to the 90th percentile for proximity to RMP sites and is low income? + format: bool +- score_name: Proximity to Risk Management Plan (RMP) facilities (percentile) + label: Proximity to Risk Management Plan (RMP) facilities (percentile) + format: percentage +- score_name: Proximity to Risk Management Plan (RMP) facilities + label: Proximity to Risk Management Plan (RMP) facilities + format: float +- score_name: Is there at least one Formerly Used Defense Site (FUDS) in the tract? + label: Is there at least one Formerly Used Defense Site (FUDS) in the tract? + format: bool +- score_name: Is there at least one abandoned mine in this census tract? + label: Is there at least one abandoned mine in this census tract? + format: bool +- score_name: There is at least one abandoned mine in this census tract and the tract is low income. + label: There is at least one abandoned mine in this census tract and the tract is low income. + format: bool +- score_name: There is at least one Formerly Used Defense Site (FUDS) in the tract and the tract is low income. + label: There is at least one Formerly Used Defense Site (FUDS) in the tract and the tract is low income. + format: bool +- score_name: Is there at least one Formerly Used Defense Site (FUDS) in the tract, where missing data is treated as False? + label: Is there at least one Formerly Used Defense Site (FUDS) in the tract, where missing data is treated as False? + format: bool +- score_name: Is there at least one abandoned mine in this census tract, where missing data is treated as False? + label: Is there at least one abandoned mine in this census tract, where missing data is treated as False? + format: bool +- score_name: Greater than or equal to the 90th percentile for wastewater discharge and is low income? + label: Greater than or equal to the 90th percentile for wastewater discharge and is low income? + format: bool +- score_name: Wastewater discharge (percentile) + label: Wastewater discharge (percentile) + format: percentage +- score_name: Wastewater discharge + label: Wastewater discharge + format: float +- score_name: Greater than or equal to the 90th percentile for leaky underground storage tanks and is low income? + label: Greater than or equal to the 90th percentile for leaky underground storage tanks and is low income? + format: bool +- score_name: Leaky underground storage tanks (percentile) + label: Leaky underground storage tanks (percentile) + format: percentage +- score_name: Leaky underground storage tanks + label: Leaky underground storage tanks + format: float +- score_name: Greater than or equal to the 90th percentile for asthma and is low income? + label: Greater than or equal to the 90th percentile for asthma and is low income? + format: bool +- score_name: Current asthma among adults aged greater than or equal to 18 years (percentile) + label: Current asthma among adults aged greater than or equal to 18 years (percentile) + format: percentage +- score_name: Current asthma among adults aged greater than or equal to 18 years + label: Current asthma among adults aged greater than or equal to 18 years + format: percentage +- score_name: Greater than or equal to the 90th percentile for diabetes and is low income? + label: Greater than or equal to the 90th percentile for diabetes and is low income? + format: bool +- score_name: Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile) + label: Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile) + format: percentage +- score_name: Diagnosed diabetes among adults aged greater than or equal to 18 years + label: Diagnosed diabetes among adults aged greater than or equal to 18 years + format: percentage +- score_name: Greater than or equal to the 90th percentile for heart disease and is low income? + label: Greater than or equal to the 90th percentile for heart disease and is low income? + format: bool +- score_name: Coronary heart disease among adults aged greater than or equal to 18 years (percentile) + label: Coronary heart disease among adults aged greater than or equal to 18 years (percentile) + format: percentage +- score_name: Coronary heart disease among adults aged greater than or equal to 18 years + label: Coronary heart disease among adults aged greater than or equal to 18 years + format: percentage +- score_name: Greater than or equal to the 90th percentile for low life expectancy and is low income? + label: Greater than or equal to the 90th percentile for low life expectancy and is low income? + format: bool +- score_name: Low life expectancy (percentile) + label: Low life expectancy (percentile) + format: percentage +- score_name: Life expectancy (years) + label: Life expectancy (years) + format: float +- score_name: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS attainment? + label: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS attainment? + format: bool +- score_name: Low median household income as a percent of area median income (percentile) + label: Low median household income as a percent of area median income (percentile) + format: percentage +- score_name: Median household income as a percent of area median income + label: Median household income as a percent of area median income + format: percentage +- score_name: Greater than or equal to the 90th percentile for households in linguistic isolation and has low HS attainment? + label: Greater than or equal to the 90th percentile for households in linguistic isolation and has low HS attainment? + format: bool +- score_name: Linguistic isolation (percent) (percentile) + label: Linguistic isolation (percent) (percentile) + format: percentage +- score_name: Linguistic isolation (percent) + label: Linguistic isolation (percent) + format: percentage +- score_name: Greater than or equal to the 90th percentile for unemployment and has low HS attainment? + label: Greater than or equal to the 90th percentile for unemployment and has low HS attainment? + format: bool +- score_name: Unemployment (percent) (percentile) + label: Unemployment (percent) (percentile) + format: percentage +- score_name: Unemployment (percent) + label: Unemployment (percent) + format: percentage +- score_name: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS attainment? + label: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS attainment? + format: bool +- score_name: Percent of individuals below 200% Federal Poverty Line (percentile) + label: Percent of individuals below 200% Federal Poverty Line (percentile) + format: percentage +- score_name: Percent of individuals below 200% Federal Poverty Line + label: Percent of individuals below 200% Federal Poverty Line + format: percentage +- score_name: Percent of individuals < 100% Federal Poverty Line (percentile) + label: Percent of individuals < 100% Federal Poverty Line (percentile) + format: percentage +- score_name: Percent of individuals < 100% Federal Poverty Line + label: Percent of individuals < 100% Federal Poverty Line + format: percentage +- score_name: Percent individuals age 25 or over with less than high school degree (percentile) + label: Percent individuals age 25 or over with less than high school degree (percentile) + format: percentage +- score_name: Percent individuals age 25 or over with less than high school degree + label: Percent individuals age 25 or over with less than high school degree + format: percentage +- score_name: Percent of population not currently enrolled in college or graduate school + label: Percent of residents who are not currently enrolled in higher ed + format: percentage +- score_name: Unemployment (percent) in 2009 (island areas) and 2010 (states and PR) + label: Unemployment (percent) in 2009 (island areas) and 2010 (states and PR) + format: percentage +- score_name: Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR) + label: Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR) + format: percentage +- score_name: Greater than or equal to the 90th percentile for unemployment and has low HS education in 2009 (island areas)? + label: Greater than or equal to the 90th percentile for unemployment and has low HS education in 2009 (island areas)? + format: bool +- score_name: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas)? + label: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas)? + format: bool +- score_name: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)? + label: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)? + format: bool +- score_name: Number of Tribal areas within Census tract for Alaska + label: Number of Tribal areas within Census tract for Alaska + format: int64 +- score_name: Names of Tribal areas within Census tract + label: Names of Tribal areas within Census tract + format: string +- score_name: Percent of the Census tract that is within Tribal areas + label: Percent of the Census tract that is within Tribal areas + format: percentage diff --git a/data/data-pipeline/data_pipeline/content/config/excel.yml b/data/data-pipeline/data_pipeline/content/config/excel.yml index c4634c7bd..757477102 100644 --- a/data/data-pipeline/data_pipeline/content/config/excel.yml +++ b/data/data-pipeline/data_pipeline/content/config/excel.yml @@ -1,6 +1,6 @@ --- global_config: - sort_by_label: Census tract ID + sort_by_label: Census tract 2010 ID rounding_num: float: 2 loss_rate_percentage: 4 @@ -10,7 +10,7 @@ sheets: - label: "Data" fields: - score_name: GEOID10_TRACT - label: Census tract ID + label: Census tract 2010 ID format: string - score_name: County Name label: County Name @@ -18,23 +18,80 @@ sheets: - score_name: State/Territory label: State/Territory format: string + - score_name: Percent Black or African American + label: Percent Black or African American alone + format: float + - score_name: Percent American Indian / Alaska Native + label: Percent American Indian / Alaska Native + format: float + - score_name: Percent Asian + label: Percent Asian + format: float + - score_name: Percent Native Hawaiian or Pacific + label: Percent Native Hawaiian or Pacific + format: float + - score_name: Percent two or more races + label: Percent two or more races + format: float + - score_name: Percent White + label: Percent White + format: float + - score_name: Percent Hispanic or Latino + label: Percent Hispanic or Latino + format: float + - score_name: Percent other races + label: Percent other races + format: float + - score_name: Percent age under 10 + label: Percent age under 10 + format: float + - score_name: Percent age 10 to 64 + label: Percent age 10 to 64 + format: float + - score_name: Percent age over 64 + label: Percent age over 64 + format: float - score_name: Total threshold criteria exceeded label: Total threshold criteria exceeded format: int64 - score_name: Total categories exceeded label: Total categories exceeded format: int64 - - score_name: Definition M (communities) + - score_name: Definition N (communities) + label: Identified as disadvantaged without considering neighbors + format: bool + - score_name: Definition N (communities) (based on adjacency index and low income alone) + label: Identified as disadvantaged based on neighbors and relaxed low income threshold only + format: bool + - score_name: Identified as disadvantaged due to tribal overlap + label: Identified as disadvantaged due to tribal overlap + format: bool + - score_name: Definition N community, including adjacency index tracts label: Identified as disadvantaged format: bool + - score_name: Percentage of tract that is disadvantaged + label: Percentage of tract that is disadvantaged by area + format: percentage + - score_name: Definition N (communities) (average of neighbors) + label: Share of neighbors that are identified as disadvantaged + format: percentage - score_name: Total population label: Total population format: float - - score_name: Is low income and has a low percent of higher ed students? - label: Is low income and high percent of residents that are not higher ed students? + - score_name: Percent of individuals below 200% Federal Poverty Line, imputed and adjusted (percentile) + label: Adjusted percent of individuals below 200% Federal Poverty Line (percentile) + format: float + - score_name: Percent of individuals below 200% Federal Poverty Line, imputed and adjusted + label: Adjusted percent of individuals below 200% Federal Poverty Line + format: float + - score_name: Is low income (imputed and adjusted)? + label: Is low income? + format: bool + - score_name: Income data has been estimated based on neighbor income + label: Income data has been estimated based on geographic neighbor income format: bool - - score_name: Greater than or equal to the 90th percentile for expected agriculture loss rate, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for expected agriculture loss rate, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for expected agriculture loss rate and is low income? + label: Greater than or equal to the 90th percentile for expected agriculture loss rate and is low income? format: bool - score_name: Expected agricultural loss rate (Natural Hazards Risk Index) (percentile) label: Expected agricultural loss rate (Natural Hazards Risk Index) (percentile) @@ -42,8 +99,8 @@ sheets: - score_name: Expected agricultural loss rate (Natural Hazards Risk Index) label: Expected agricultural loss rate (Natural Hazards Risk Index) format: loss_rate_percentage - - score_name: Greater than or equal to the 90th percentile for expected building loss rate, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for expected building loss rate, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for expected building loss rate and is low income? + label: Greater than or equal to the 90th percentile for expected building loss rate and is low income? format: bool - score_name: Expected building loss rate (Natural Hazards Risk Index) (percentile) label: Expected building loss rate (Natural Hazards Risk Index) (percentile) @@ -51,8 +108,8 @@ sheets: - score_name: Expected building loss rate (Natural Hazards Risk Index) label: Expected building loss rate (Natural Hazards Risk Index) format: loss_rate_percentage - - score_name: Greater than or equal to the 90th percentile for expected population loss rate, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for expected population loss rate, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for expected population loss rate and is low income? + label: Greater than or equal to the 90th percentile for expected population loss rate and is low income? format: bool - score_name: Expected population loss rate (Natural Hazards Risk Index) (percentile) label: Expected population loss rate (Natural Hazards Risk Index) (percentile) @@ -60,8 +117,32 @@ sheets: - score_name: Expected population loss rate (Natural Hazards Risk Index) label: Expected population loss rate (Natural Hazards Risk Index) format: loss_rate_percentage - - score_name: Greater than or equal to the 90th percentile for energy burden, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for energy burden, is low income, and high percent of residents that are not higher ed students? + - score_name: Share of properties at risk of flood in 30 years (percentile) + label: Share of properties at risk of flood in 30 years (percentile) + format: percentage + - score_name: Share of properties at risk of flood in 30 years + label: Share of properties at risk of flood in 30 years + format: percentage + - score_name: Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years + label: Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years + format: bool + - score_name: Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years and is low income? + label: Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years and is low income? + format: bool + - score_name: Share of properties at risk of fire in 30 years (percentile) + label: Share of properties at risk of fire in 30 years (percentile) + format: percentage + - score_name: Share of properties at risk of fire in 30 years + label: Share of properties at risk of fire in 30 years + format: percentage + - score_name: Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years + label: Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years + format: bool + - score_name: Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years and is low income? + label: Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years and is low income? + format: bool + - score_name: Greater than or equal to the 90th percentile for energy burden and is low income? + label: Greater than or equal to the 90th percentile for energy burden and is low income? format: bool - score_name: Energy burden (percentile) label: Energy burden (percentile) @@ -69,8 +150,8 @@ sheets: - score_name: Energy burden label: Energy burden format: percentage - - score_name: Greater than or equal to the 90th percentile for PM2.5 exposure, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for PM2.5 exposure, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for PM2.5 exposure and is low income? + label: Greater than or equal to the 90th percentile for PM2.5 exposure and is low income? format: bool - score_name: PM2.5 in the air (percentile) label: PM2.5 in the air (percentile) @@ -78,8 +159,8 @@ sheets: - score_name: PM2.5 in the air label: PM2.5 in the air format: float - - score_name: Greater than or equal to the 90th percentile for diesel particulate matter, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for diesel particulate matter, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for diesel particulate matter and is low income? + label: Greater than or equal to the 90th percentile for diesel particulate matter and is low income? format: bool - score_name: Diesel particulate matter exposure (percentile) label: Diesel particulate matter exposure (percentile) @@ -87,8 +168,8 @@ sheets: - score_name: Diesel particulate matter exposure label: Diesel particulate matter exposure format: float - - score_name: Greater than or equal to the 90th percentile for traffic proximity, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for traffic proximity, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for traffic proximity and is low income? + label: Greater than or equal to the 90th percentile for traffic proximity and is low income? format: bool - score_name: Traffic proximity and volume (percentile) label: Traffic proximity and volume (percentile) @@ -96,8 +177,14 @@ sheets: - score_name: Traffic proximity and volume label: Traffic proximity and volume format: float - - score_name: Greater than or equal to the 90th percentile for housing burden, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for housing burden, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for DOT transit barriers and is low income? + label: Greater than or equal to the 90th percentile for DOT transit barriers and is low income? + format: bool + - score_name: DOT Travel Barriers Score (percentile) + label: DOT Travel Barriers Score (percentile) + format: percentage + - score_name: Greater than or equal to the 90th percentile for housing burden and is low income? + label: Greater than or equal to the 90th percentile for housing burden and is low income? format: bool - score_name: Housing burden (percent) (percentile) label: Housing burden (percent) (percentile) @@ -105,8 +192,8 @@ sheets: - score_name: Housing burden (percent) label: Housing burden (percent) format: percentage - - score_name: Greater than or equal to the 90th percentile for lead paint, the median house value is less than 90th percentile, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for lead paint, the median house value is less than 90th percentile, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income? + label: Greater than or equal to the 90th percentile for lead paint, the median house value is less than 90th percentile and is low income? format: bool - score_name: Percent pre-1960s housing (lead paint indicator) (percentile) label: Percent pre-1960s housing (lead paint indicator) (percentile) @@ -120,8 +207,35 @@ sheets: - score_name: Median value ($) of owner-occupied housing units label: Median value ($) of owner-occupied housing units format: float - - score_name: Greater than or equal to the 90th percentile for proximity to hazardous waste facilities, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for proximity to hazardous waste facilities, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent and is low income? + label: Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent and is low income? + format: bool + - score_name: Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent + label: Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent + format: bool + - score_name: Share of the tract's land area that is covered by impervious surface or cropland as a percent + label: Share of the tract's land area that is covered by impervious surface or cropland as a percent + format: percentage + - score_name: Share of the tract's land area that is covered by impervious surface or cropland as a percent (percentile) + label: Share of the tract's land area that is covered by impervious surface or cropland as a percent (percentile) + format: percentage + - score_name: Does the tract have at least 35 acres in it? + label: Does the tract have at least 35 acres in it? + format: bool + - score_name: Tract-level redlining score meets or exceeds 3.25 and is low income + label: Tract experienced historic underinvestment and remains low income + format: bool + - score_name: Tract-level redlining score meets or exceeds 3.25 + label: Tract experienced historic underinvestment + format: bool + - score_name: Share of homes with no kitchen or indoor plumbing (percent) (percentile) + label: Share of homes with no kitchen or indoor plumbing (percentile) + format: float + - score_name: Share of homes with no kitchen or indoor plumbing (percent) + label: Share of homes with no kitchen or indoor plumbing (percent) + format: float + - score_name: Greater than or equal to the 90th percentile for proximity to hazardous waste facilities and is low income? + label: Greater than or equal to the 90th percentile for proximity to hazardous waste facilities and is low income? format: bool - score_name: Proximity to hazardous waste sites (percentile) label: Proximity to hazardous waste sites (percentile) @@ -129,8 +243,8 @@ sheets: - score_name: Proximity to hazardous waste sites label: Proximity to hazardous waste sites format: float - - score_name: Greater than or equal to the 90th percentile for proximity to superfund sites, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for proximity to superfund sites, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for proximity to superfund sites and is low income? + label: Greater than or equal to the 90th percentile for proximity to superfund sites and is low income? format: bool - score_name: Proximity to NPL sites (percentile) label: Proximity to NPL (Superfund) sites (percentile) @@ -138,8 +252,8 @@ sheets: - score_name: Proximity to NPL sites label: Proximity to NPL (Superfund) sites format: float - - score_name: Greater than or equal to the 90th percentile for proximity to RMP sites, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for proximity to RMP sites, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for proximity to RMP sites and is low income? + label: Greater than or equal to the 90th percentile for proximity to RMP sites and is low income? format: bool - score_name: Proximity to Risk Management Plan (RMP) facilities (percentile) label: Proximity to Risk Management Plan (RMP) facilities (percentile) @@ -147,8 +261,26 @@ sheets: - score_name: Proximity to Risk Management Plan (RMP) facilities label: Proximity to Risk Management Plan (RMP) facilities format: float - - score_name: Greater than or equal to the 90th percentile for wastewater discharge, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for wastewater discharge, is low income, and high percent of residents that are not higher ed students? + - score_name: Is there at least one Formerly Used Defense Site (FUDS) in the tract? + label: Is there at least one Formerly Used Defense Site (FUDS) in the tract? + format: bool + - score_name: Is there at least one abandoned mine in this census tract? + label: Is there at least one abandoned mine in this census tract? + format: bool + - score_name: There is at least one abandoned mine in this census tract and the tract is low income. + label: There is at least one abandoned mine in this census tract and the tract is low income. + format: bool + - score_name: There is at least one Formerly Used Defense Site (FUDS) in the tract and the tract is low income. + label: There is at least one Formerly Used Defense Site (FUDS) in the tract and the tract is low income. + format: bool + - score_name: Is there at least one Formerly Used Defense Site (FUDS) in the tract, where missing data is treated as False? + label: Is there at least one Formerly Used Defense Site (FUDS) in the tract, where missing data is treated as False? + format: bool + - score_name: Is there at least one abandoned mine in this census tract, where missing data is treated as False? + label: Is there at least one abandoned mine in this census tract, where missing data is treated as False? + format: bool + - score_name: Greater than or equal to the 90th percentile for wastewater discharge and is low income? + label: Greater than or equal to the 90th percentile for wastewater discharge and is low income? format: bool - score_name: Wastewater discharge (percentile) label: Wastewater discharge (percentile) @@ -156,8 +288,17 @@ sheets: - score_name: Wastewater discharge label: Wastewater discharge format: float - - score_name: Greater than or equal to the 90th percentile for asthma, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for asthma, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for leaky underground storage tanks and is low income? + label: Greater than or equal to the 90th percentile for leaky underground storage tanks and is low income? + format: bool + - score_name: Leaky underground storage tanks (percentile) + label: Leaky underground storage tanks (percentile) + format: percentage + - score_name: Leaky underground storage tanks + label: Leaky underground storage tanks + format: float + - score_name: Greater than or equal to the 90th percentile for asthma and is low income? + label: Greater than or equal to the 90th percentile for asthma and is low income? format: bool - score_name: Current asthma among adults aged greater than or equal to 18 years (percentile) label: Current asthma among adults aged greater than or equal to 18 years (percentile) @@ -165,8 +306,8 @@ sheets: - score_name: Current asthma among adults aged greater than or equal to 18 years label: Current asthma among adults aged greater than or equal to 18 years format: percentage - - score_name: Greater than or equal to the 90th percentile for diabetes, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for diabetes, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for diabetes and is low income? + label: Greater than or equal to the 90th percentile for diabetes and is low income? format: bool - score_name: Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile) label: Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile) @@ -174,8 +315,8 @@ sheets: - score_name: Diagnosed diabetes among adults aged greater than or equal to 18 years label: Diagnosed diabetes among adults aged greater than or equal to 18 years format: percentage - - score_name: Greater than or equal to the 90th percentile for heart disease, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for heart disease, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for heart disease and is low income? + label: Greater than or equal to the 90th percentile for heart disease and is low income? format: bool - score_name: Coronary heart disease among adults aged greater than or equal to 18 years (percentile) label: Coronary heart disease among adults aged greater than or equal to 18 years (percentile) @@ -183,8 +324,8 @@ sheets: - score_name: Coronary heart disease among adults aged greater than or equal to 18 years label: Coronary heart disease among adults aged greater than or equal to 18 years format: percentage - - score_name: Greater than or equal to the 90th percentile for low life expectancy, is low income, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for low life expectancy, is low income, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for low life expectancy and is low income? + label: Greater than or equal to the 90th percentile for low life expectancy and is low income? format: bool - score_name: Low life expectancy (percentile) label: Low life expectancy (percentile) @@ -192,8 +333,8 @@ sheets: - score_name: Life expectancy (years) label: Life expectancy (years) format: float - - score_name: Greater than or equal to the 90th percentile for low median household income as a percent of area median income, has low HS attainment, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for low median household income as a percent of area median income, has low HS attainment, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS attainment? + label: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS attainment? format: bool - score_name: Low median household income as a percent of area median income (percentile) label: Low median household income as a percent of area median income (percentile) @@ -201,8 +342,8 @@ sheets: - score_name: Median household income as a percent of area median income label: Median household income as a percent of area median income format: percentage - - score_name: Greater than or equal to the 90th percentile for households in linguistic isolation, has low HS attainment, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for households in linguistic isolation, has low HS attainment, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for households in linguistic isolation and has low HS attainment? + label: Greater than or equal to the 90th percentile for households in linguistic isolation and has low HS attainment? format: bool - score_name: Linguistic isolation (percent) (percentile) label: Linguistic isolation (percent) (percentile) @@ -210,8 +351,8 @@ sheets: - score_name: Linguistic isolation (percent) label: Linguistic isolation (percent) format: percentage - - score_name: Greater than or equal to the 90th percentile for unemployment, has low HS attainment, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for unemployment, has low HS attainment, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for unemployment and has low HS attainment? + label: Greater than or equal to the 90th percentile for unemployment and has low HS attainment? format: bool - score_name: Unemployment (percent) (percentile) label: Unemployment (percent) (percentile) @@ -219,8 +360,8 @@ sheets: - score_name: Unemployment (percent) label: Unemployment (percent) format: percentage - - score_name: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level, has low HS attainment, and has a low percent of higher ed students? - label: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level, has low HS attainment, and high percent of residents that are not higher ed students? + - score_name: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS attainment? + label: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS attainment? format: bool - score_name: Percent of individuals below 200% Federal Poverty Line (percentile) label: Percent of individuals below 200% Federal Poverty Line (percentile) @@ -258,3 +399,12 @@ sheets: - score_name: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)? label: Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)? format: bool + - score_name: Number of Tribal areas within Census tract for Alaska + label: Number of Tribal areas within Census tract for Alaska + format: int64 + - score_name: Names of Tribal areas within Census tract + label: Names of Tribal areas within Census tract + format: string + - score_name: Percent of the Census tract that is within Tribal areas + label: Percent of the Census tract that is within Tribal areas + format: percentage diff --git a/data/data-pipeline/data_pipeline/content/config/field_descriptions_for_codebook.yml b/data/data-pipeline/data_pipeline/content/config/field_descriptions_for_codebook.yml index 4214a57a0..14eba6c8b 100644 --- a/data/data-pipeline/data_pipeline/content/config/field_descriptions_for_codebook.yml +++ b/data/data-pipeline/data_pipeline/content/config/field_descriptions_for_codebook.yml @@ -1,7 +1,7 @@ -# This is a temporary file. We should make sure this *type* of information is maintained when we refactor. +# This is a temporary file. We should make sure this *type* of information is maintained when we refactor. fields: - score_name: Total threshold criteria exceeded - notes: Lists out the total number of criteria (where each category has one or more criteria) exceeded. For example, a tract that exceeds the 90th percentile for linguistic isolation (1) and unemployment (2), and meets the training and workforce development socioeconomic criteria (high school attainment rate and low percentage of higher ed students) would have a 2 in this field. + notes: Lists out the total number of criteria (where each category has one or more criteria) exceeded. For example, a tract that exceeds the 90th percentile for linguistic isolation (1) and unemployment (2), and meets the training and workforce development socioeconomic criteria (high school attainment rate and low percentage of higher ed students) would have a 2 in this field. - score_name: Definition M (communities) notes: True / False variable for whether a tract is a Disadvantaged Community (DAC) - score_name: Is low income and has a low percent of higher ed students? @@ -43,7 +43,7 @@ fields: - score_name: Greater than or equal to the 90th percentile for low median household income as a percent of area median income, has low HS attainment, and has a low percent of higher ed students? category: training and workforce development - score_name: Greater than or equal to the 90th percentile for households in linguistic isolation, has low HS attainment, and has a low percent of higher ed students? - category: training and workforce development + category: training and workforce development - score_name: Greater than or equal to the 90th percentile for unemployment, has low HS attainment, and has a low percent of higher ed students? category: training and workforce development - score_name: Greater than or equal to the 90th percentile for households at or below 100% federal poverty level, has low HS attainment, and has a low percent of higher ed students? diff --git a/data/data-pipeline/data_pipeline/content/config/scratch.ipynb b/data/data-pipeline/data_pipeline/content/config/scratch.ipynb new file mode 100644 index 000000000..2ad828b23 --- /dev/null +++ b/data/data-pipeline/data_pipeline/content/config/scratch.ipynb @@ -0,0 +1,800 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "cf8f39b0-7735-4f7c-9178-61bbf2257951", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "%load_ext lab_black" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "66639c20-be5e-4bf6-9b58-98338874f7cc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Median value ($) of owner-occupied housing units (percentile)'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "check = pd.read_csv(\n", + " \"/Users/emmausds/j40/data_pipeline/data/score/downloadable/codebook.csv\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5e525e4e-6764-4d4d-9119-b4d400ba022f", + "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", + "
score_namecsv_field_typecsv_labelexcel_labelcalculation_notesthreshold_categorynotes
0GEOID10_TRACTstringCensus tract IDCensus tract IDNaNNaNNaN
1County NamestringCounty NameCounty NameNaNNaNNaN
2State/TerritorystringState/TerritoryState/TerritoryNaNNaNNaN
3Total threshold criteria exceededint64Total threshold criteria exceededTotal threshold criteria exceededNaNNaNLists out the total number of criteria (where ...
4Definition M (communities)boolIdentified as disadvantagedIdentified as disadvantagedNaNNaNTrue / False variable for whether a tract is a...
........................
77Percentage households below 100% of federal po...percentagePercentage households below 100% of federal po...Percentage households below 100% of federal po...Because not all data is available for the Nati...NaNNaN
78Greater than or equal to the 90th percentile f...boolGreater than or equal to the 90th percentile f...Greater than or equal to the 90th percentile f...Because not all data is available for the Nati...training and workforce developmentNaN
79Greater than or equal to the 90th percentile f...boolGreater than or equal to the 90th percentile f...Greater than or equal to the 90th percentile f...Because not all data is available for the Nati...training and workforce developmentNaN
80Greater than or equal to the 90th percentile f...boolGreater than or equal to the 90th percentile f...Greater than or equal to the 90th percentile f...Because not all data is available for the Nati...training and workforce developmentNaN
81Percent of population not currently enrolled i...percentagePercent of residents who are not currently enr...Percent of residents who are not currently enr...NaNNaNNaN
\n", + "

82 rows Ɨ 7 columns

\n", + "
" + ], + "text/plain": [ + " score_name csv_field_type \\\n", + "0 GEOID10_TRACT string \n", + "1 County Name string \n", + "2 State/Territory string \n", + "3 Total threshold criteria exceeded int64 \n", + "4 Definition M (communities) bool \n", + ".. ... ... \n", + "77 Percentage households below 100% of federal po... percentage \n", + "78 Greater than or equal to the 90th percentile f... bool \n", + "79 Greater than or equal to the 90th percentile f... bool \n", + "80 Greater than or equal to the 90th percentile f... bool \n", + "81 Percent of population not currently enrolled i... percentage \n", + "\n", + " csv_label \\\n", + "0 Census tract ID \n", + "1 County Name \n", + "2 State/Territory \n", + "3 Total threshold criteria exceeded \n", + "4 Identified as disadvantaged \n", + ".. ... \n", + "77 Percentage households below 100% of federal po... \n", + "78 Greater than or equal to the 90th percentile f... \n", + "79 Greater than or equal to the 90th percentile f... \n", + "80 Greater than or equal to the 90th percentile f... \n", + "81 Percent of residents who are not currently enr... \n", + "\n", + " excel_label \\\n", + "0 Census tract ID \n", + "1 County Name \n", + "2 State/Territory \n", + "3 Total threshold criteria exceeded \n", + "4 Identified as disadvantaged \n", + ".. ... \n", + "77 Percentage households below 100% of federal po... \n", + "78 Greater than or equal to the 90th percentile f... \n", + "79 Greater than or equal to the 90th percentile f... \n", + "80 Greater than or equal to the 90th percentile f... \n", + "81 Percent of residents who are not currently enr... \n", + "\n", + " calculation_notes \\\n", + "0 NaN \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + ".. ... \n", + "77 Because not all data is available for the Nati... \n", + "78 Because not all data is available for the Nati... \n", + "79 Because not all data is available for the Nati... \n", + "80 Because not all data is available for the Nati... \n", + "81 NaN \n", + "\n", + " threshold_category \\\n", + "0 NaN \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + ".. ... \n", + "77 NaN \n", + "78 training and workforce development \n", + "79 training and workforce development \n", + "80 training and workforce development \n", + "81 NaN \n", + "\n", + " notes \n", + "0 NaN \n", + "1 NaN \n", + "2 NaN \n", + "3 Lists out the total number of criteria (where ... \n", + "4 True / False variable for whether a tract is a... \n", + ".. ... \n", + "77 NaN \n", + "78 NaN \n", + "79 NaN \n", + "80 NaN \n", + "81 NaN \n", + "\n", + "[82 rows x 7 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "check" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "d86c867a-1a55-4ec0-82a6-040841406236", + "metadata": {}, + "outputs": [], + "source": [ + "codebook = pd.DataFrame(to_frame_dict)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "6215deaf-b004-4da0-a70b-bc54f636601a", + "metadata": {}, + "outputs": [], + "source": [ + "details_to_merge = pd.DataFrame(mapping_dictionary)" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "ac4e65c2-09e6-4978-9440-37b3be057f65", + "metadata": {}, + "outputs": [], + "source": [ + "shapefile_codes = pd.read_csv(\n", + " \"/Users/emmausds/j40/data_pipeline/data/score/shapefile/columns.csv\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "id": "31cfd9ec-5f5f-4642-a51f-6875c2c279a4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Expected agricultural loss rate (Natural Hazards Risk Index) (percentile)',\n", + " 'Expected building loss rate (Natural Hazards Risk Index) (percentile)',\n", + " 'Expected population loss rate (Natural Hazards Risk Index) (percentile)',\n", + " 'Energy burden (percentile)',\n", + " 'PM2.5 in the air (percentile)',\n", + " 'Diesel particulate matter exposure (percentile)',\n", + " 'Traffic proximity and volume (percentile)',\n", + " 'Housing burden (percent) (percentile)',\n", + " 'Percent pre-1960s housing (lead paint indicator) (percentile)',\n", + " 'Median value ($) of owner-occupied housing units (percentile)',\n", + " 'Proximity to hazardous waste sites (percentile)',\n", + " 'Proximity to NPL sites (percentile)',\n", + " 'Proximity to Risk Management Plan (RMP) facilities (percentile)',\n", + " 'Wastewater discharge (percentile)',\n", + " 'Current asthma among adults aged greater than or equal to 18 years (percentile)',\n", + " 'Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile)',\n", + " 'Coronary heart disease among adults aged greater than or equal to 18 years (percentile)',\n", + " 'Low life expectancy (percentile)',\n", + " 'Low median household income as a percent of area median income (percentile)',\n", + " 'Linguistic isolation (percent) (percentile)',\n", + " 'Unemployment (percent) (percentile)',\n", + " 'Percent of individuals below 200% Federal Poverty Line (percentile)',\n", + " 'Percent of individuals < 100% Federal Poverty Line (percentile)',\n", + " 'Percent individuals age 25 or over with less than high school degree (percentile)',\n", + " 'Definition M (percentile)',\n", + " 'Low median household income as a percent of territory median income in 2009 (percentile)',\n", + " 'Percentage households below 100% of federal poverty line in 2009 for island areas (percentile)',\n", + " 'Unemployment (percent) in 2009 for island areas (percentile)']" + ] + }, + "execution_count": 153, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 154, + "id": "66dde4fc-48e6-4bdf-b3a6-16c766e94d8a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " - column_name: Expected agricultural loss rate (Natural Hazards Risk Index) (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Expected building loss rate (Natural Hazards Risk Index) (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Expected population loss rate (Natural Hazards Risk Index) (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Energy burden (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: PM2.5 in the air (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Diesel particulate matter exposure (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Traffic proximity and volume (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Housing burden (percent) (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Percent pre-1960s housing (lead paint indicator) (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Median value ($) of owner-occupied housing units (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Proximity to hazardous waste sites (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Proximity to NPL sites (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Proximity to Risk Management Plan (RMP) facilities (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Wastewater discharge (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Current asthma among adults aged greater than or equal to 18 years (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Coronary heart disease among adults aged greater than or equal to 18 years (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Low life expectancy (percentile)\n", + " notes: (1) this percentile is reversed, meaning the lowest raw numbers become the highest percentiles, and (2) all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Low median household income as a percent of area median income (percentile)\n", + " notes: (1) this percentile is reversed, meaning the lowest raw numbers become the highest percentiles, and (2) all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Linguistic isolation (percent) (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Unemployment (percent) (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Percent of individuals below 200% Federal Poverty Line (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Percent of individuals < 100% Federal Poverty Line (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Percent individuals age 25 or over with less than high school degree (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Definition M (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Low median household income as a percent of territory median income in 2009 (percentile)\n", + " notes: (1) this percentile is reversed, meaning the lowest raw numbers become the highest percentiles, and (2) all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Percentage households below 100% of federal poverty line in 2009 for island areas (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n", + " - column_name: Unemployment (percent) in 2009 for island areas (percentile)\n", + " notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\n" + ] + } + ], + "source": [ + "for col in [\n", + " col for col in download_codebook.index.to_list() if \"(percentile)\" in col\n", + "]:\n", + " print(f\" - column_name: {col}\")\n", + " if \"Low\" not in col:\n", + " print(\n", + " f\" notes: all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\"\n", + " )\n", + " else:\n", + " print(\n", + " f\" notes: (1) this percentile is reversed, meaning the lowest raw numbers become the highest percentiles, and (2) all percentiles are floored (rounded down to the nearest percentile). For example, 89.7th percentile is rounded down to 89 for this field.\"\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "id": "5c08708e-4ebf-4cfe-8efb-7ee6c7930427", + "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", + "
excel_labelformatshapefile_columnnotescategory
score_name
GEOID10_TRACTCensus tract IDstringNaNNaNNaN
County NameCounty NamestringCFNaNNaN
State/TerritoryState/TerritorystringSFNaNNaN
Total threshold criteria exceededTotal threshold criteria exceededint64TCLists out the total number of criteria (where ...NaN
Definition M (communities)Identified as disadvantagedboolSM_CTrue / False variable for whether a tract is a...NaN
..................
Unemployment (percent) in 2009 (island areas) and 2010 (states and PR)Unemployment (percent) in 2009 (island areas) ...percentageNaNNaNNaN
Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR)Percentage households below 100% of federal po...percentageNaNNaNNaN
Greater than or equal to the 90th percentile for unemployment and has low HS education in 2009 (island areas)?Greater than or equal to the 90th percentile f...boolIAULHSEisland area information comes from the dicenni...training and workforce development
Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas)?Greater than or equal to the 90th percentile f...boolIAPLHSEisland area information comes from the dicenni...training and workforce development
Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)?Greater than or equal to the 90th percentile f...boolIALMILHSEisland area information comes from the dicenni...training and workforce development
\n", + "

82 rows Ɨ 5 columns

\n", + "
" + ], + "text/plain": [ + " excel_label \\\n", + "score_name \n", + "GEOID10_TRACT Census tract ID \n", + "County Name County Name \n", + "State/Territory State/Territory \n", + "Total threshold criteria exceeded Total threshold criteria exceeded \n", + "Definition M (communities) Identified as disadvantaged \n", + "... ... \n", + "Unemployment (percent) in 2009 (island areas) a... Unemployment (percent) in 2009 (island areas) ... \n", + "Percentage households below 100% of federal pov... Percentage households below 100% of federal po... \n", + "Greater than or equal to the 90th percentile fo... Greater than or equal to the 90th percentile f... \n", + "Greater than or equal to the 90th percentile fo... Greater than or equal to the 90th percentile f... \n", + "Greater than or equal to the 90th percentile fo... Greater than or equal to the 90th percentile f... \n", + "\n", + " format \\\n", + "score_name \n", + "GEOID10_TRACT string \n", + "County Name string \n", + "State/Territory string \n", + "Total threshold criteria exceeded int64 \n", + "Definition M (communities) bool \n", + "... ... \n", + "Unemployment (percent) in 2009 (island areas) a... percentage \n", + "Percentage households below 100% of federal pov... percentage \n", + "Greater than or equal to the 90th percentile fo... bool \n", + "Greater than or equal to the 90th percentile fo... bool \n", + "Greater than or equal to the 90th percentile fo... bool \n", + "\n", + " shapefile_column \\\n", + "score_name \n", + "GEOID10_TRACT NaN \n", + "County Name CF \n", + "State/Territory SF \n", + "Total threshold criteria exceeded TC \n", + "Definition M (communities) SM_C \n", + "... ... \n", + "Unemployment (percent) in 2009 (island areas) a... NaN \n", + "Percentage households below 100% of federal pov... NaN \n", + "Greater than or equal to the 90th percentile fo... IAULHSE \n", + "Greater than or equal to the 90th percentile fo... IAPLHSE \n", + "Greater than or equal to the 90th percentile fo... IALMILHSE \n", + "\n", + " notes \\\n", + "score_name \n", + "GEOID10_TRACT NaN \n", + "County Name NaN \n", + "State/Territory NaN \n", + "Total threshold criteria exceeded Lists out the total number of criteria (where ... \n", + "Definition M (communities) True / False variable for whether a tract is a... \n", + "... ... \n", + "Unemployment (percent) in 2009 (island areas) a... NaN \n", + "Percentage households below 100% of federal pov... NaN \n", + "Greater than or equal to the 90th percentile fo... island area information comes from the dicenni... \n", + "Greater than or equal to the 90th percentile fo... island area information comes from the dicenni... \n", + "Greater than or equal to the 90th percentile fo... island area information comes from the dicenni... \n", + "\n", + " category \n", + "score_name \n", + "GEOID10_TRACT NaN \n", + "County Name NaN \n", + "State/Territory NaN \n", + "Total threshold criteria exceeded NaN \n", + "Definition M (communities) NaN \n", + "... ... \n", + "Unemployment (percent) in 2009 (island areas) a... NaN \n", + "Percentage households below 100% of federal pov... NaN \n", + "Greater than or equal to the 90th percentile fo... training and workforce development \n", + "Greater than or equal to the 90th percentile fo... training and workforce development \n", + "Greater than or equal to the 90th percentile fo... training and workforce development \n", + "\n", + "[82 rows x 5 columns]" + ] + }, + "execution_count": 143, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "download_codebook.dropna(subset=[\"format\"]).reset_index()[\"score_name\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 137, + "id": "7139ce5d-db5e-49dd-8bb3-122c7b73b395", + "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", + "
excel_labelformatshapefile_columnnotescategory
score_name
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [excel_label, format, shapefile_column, notes, category]\n", + "Index: []" + ] + }, + "execution_count": 137, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "download_codebook.loc[\n", + " sum([download_codebook[col] == \"percentile\" for col in [\"format\"]]) > 0\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "e31ef01c-b225-48f0-bdf5-1efb8d4ed95c", + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Cannot index with multidimensional key", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [134]\u001b[0m, in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdownload_codebook\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloc\u001b[49m\u001b[43m[\u001b[49m\u001b[43mdownload_codebook\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfilter\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlike\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mformat\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpercentile\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.9/site-packages/pandas/core/indexing.py:931\u001b[0m, in \u001b[0;36m_LocationIndexer.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 928\u001b[0m axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maxis \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;241m0\u001b[39m\n\u001b[1;32m 930\u001b[0m maybe_callable \u001b[38;5;241m=\u001b[39m com\u001b[38;5;241m.\u001b[39mapply_if_callable(key, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mobj)\n\u001b[0;32m--> 931\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_axis\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmaybe_callable\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maxis\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43maxis\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.9/site-packages/pandas/core/indexing.py:1151\u001b[0m, in \u001b[0;36m_LocIndexer._getitem_axis\u001b[0;34m(self, key, axis)\u001b[0m\n\u001b[1;32m 1148\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mtuple\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(labels, MultiIndex)):\n\u001b[1;32m 1150\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(key, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mndim\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m key\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m-> 1151\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCannot index with multidimensional key\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1153\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_iterable(key, axis\u001b[38;5;241m=\u001b[39maxis)\n\u001b[1;32m 1155\u001b[0m \u001b[38;5;66;03m# nested tuple slicing\u001b[39;00m\n", + "\u001b[0;31mValueError\u001b[0m: Cannot index with multidimensional key" + ] + } + ], + "source": [ + "download_codebook.loc[download_codebook.filter(like=\"format\") == \"percentile\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "id": "73268de4-3378-4ac7-bf85-f483a78c3966", + "metadata": {}, + "outputs": [], + "source": [ + "download_codebook = pd.concat(\n", + " [\n", + " codebook.set_index(\"score_name\"),\n", + " shapefile_codes.rename(\n", + " columns={\"meaning\": \"shapefile_column\", \"column\": \"score_name\"}\n", + " ).set_index(\"score_name\"),\n", + " details_to_merge.set_index(\"score_name\"),\n", + " ],\n", + " axis=1,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6321ed42-aee6-40fc-8bf8-2a4ce4276eca", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/content/schemas/download_schemas.py b/data/data-pipeline/data_pipeline/content/schemas/download_schemas.py index 9dc109f1b..4c4536698 100644 --- a/data/data-pipeline/data_pipeline/content/schemas/download_schemas.py +++ b/data/data-pipeline/data_pipeline/content/schemas/download_schemas.py @@ -1,6 +1,8 @@ -from dataclasses import dataclass, field +from dataclasses import dataclass +from dataclasses import field from enum import Enum -from typing import List, Optional +from typing import List +from typing import Optional class FieldType(Enum): diff --git a/data/data-pipeline/data_pipeline/etl/base.py b/data/data-pipeline/data_pipeline/etl/base.py index 873aa74c5..c9f647cd1 100644 --- a/data/data-pipeline/data_pipeline/etl/base.py +++ b/data/data-pipeline/data_pipeline/etl/base.py @@ -5,15 +5,15 @@ from typing import Optional import pandas as pd - from data_pipeline.config import settings -from data_pipeline.etl.score.schemas.datasets import DatasetsConfig -from data_pipeline.utils import ( - load_yaml_dict_from_file, - unzip_file_from_url, - remove_all_from_dir, - get_module_logger, +from data_pipeline.etl.score.etl_utils import ( + compare_to_list_of_expected_state_fips_codes, ) +from data_pipeline.etl.score.schemas.datasets import DatasetsConfig +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import load_yaml_dict_from_file +from data_pipeline.utils import remove_all_from_dir +from data_pipeline.utils import unzip_file_from_url logger = get_module_logger(__name__) @@ -43,10 +43,11 @@ class ExtractTransformLoad: APP_ROOT: pathlib.Path = settings.APP_ROOT # Directories - DATA_PATH: pathlib.Path = APP_ROOT / "data" + DATA_PATH: pathlib.Path = settings.DATA_PATH TMP_PATH: pathlib.Path = DATA_PATH / "tmp" CONTENT_CONFIG: pathlib.Path = APP_ROOT / "content" / "config" - DATASET_CONFIG: pathlib.Path = APP_ROOT / "etl" / "score" / "config" + DATASET_CONFIG_PATH: pathlib.Path = APP_ROOT / "etl" / "score" / "config" + DATASET_CONFIG: Optional[dict] = None # Parameters GEOID_FIELD_NAME: str = "GEOID10" @@ -81,6 +82,23 @@ class ExtractTransformLoad: # NULL_REPRESENTATION is how nulls are represented on the input field NULL_REPRESENTATION: str = None + # Whether this ETL contains data for the continental nation (DC & the US states + # except for Alaska and Hawaii) + CONTINENTAL_US_EXPECTED_IN_DATA: bool = True + + # Whether this ETL contains data for Alaska and Hawaii + ALASKA_AND_HAWAII_EXPECTED_IN_DATA: bool = True + + # Whether this ETL contains data for Puerto Rico + PUERTO_RICO_EXPECTED_IN_DATA: bool = True + + # Whether this ETL contains data for the island areas + ISLAND_AREAS_EXPECTED_IN_DATA: bool = False + + # Whether this ETL contains known missing data for any additional + # states/territories + EXPECTED_MISSING_STATES: typing.List[str] = [] + # Thirteen digits in a census block group ID. EXPECTED_CENSUS_BLOCK_GROUPS_CHARACTER_LENGTH: int = 13 # TODO: investigate. Census says there are only 217,740 CBGs in the US. This might @@ -94,17 +112,24 @@ class ExtractTransformLoad: # periods. https://github.com/usds/justice40-tool/issues/964 EXPECTED_MAX_CENSUS_TRACTS: int = 74160 + # Should this dataset load its configuration from + # the YAML files? + LOAD_YAML_CONFIG: bool = False + # We use output_df as the final dataframe to use to write to the CSV # It is used on the "load" base class method output_df: pd.DataFrame = None + def __init_subclass__(cls) -> None: + if cls.LOAD_YAML_CONFIG: + cls.DATASET_CONFIG = cls.yaml_config_load() + @classmethod def yaml_config_load(cls) -> dict: """Generate config dictionary and set instance variables from YAML dataset.""" - # check if the class instance has score YAML definitions datasets_config = load_yaml_dict_from_file( - cls.DATASET_CONFIG / "datasets.yml", + cls.DATASET_CONFIG_PATH / "datasets.yml", DatasetsConfig, ) @@ -123,9 +148,10 @@ def yaml_config_load(cls) -> dict: sys.exit() # set some of the basic fields - cls.INPUT_GEOID_TRACT_FIELD_NAME = dataset_config[ - "input_geoid_tract_field_name" - ] + if "input_geoid_tract_field_name" in dataset_config: + cls.INPUT_GEOID_TRACT_FIELD_NAME = dataset_config[ + "input_geoid_tract_field_name" + ] # get the columns to write on the CSV # and set the constants @@ -134,11 +160,7 @@ def yaml_config_load(cls) -> dict: ] for field in dataset_config["load_fields"]: cls.COLUMNS_TO_KEEP.append(field["long_name"]) - - # set the constants for the class setattr(cls, field["df_field_name"], field["long_name"]) - - # return the config dict return dataset_config # This is a classmethod so it can be used by `get_data_frame` without @@ -176,14 +198,18 @@ def extract( to get the file from a source url, unzips it and stores it on an extract_path.""" - # this can be accessed via super().extract() - if source_url and extract_path: - unzip_file_from_url( - file_url=source_url, - download_path=self.get_tmp_path(), - unzipped_file_path=extract_path, - verify=verify, - ) + if source_url is None: + source_url = self.SOURCE_URL + + if extract_path is None: + extract_path = self.get_tmp_path() + + unzip_file_from_url( + file_url=source_url, + download_path=self.get_tmp_path(), + unzipped_file_path=extract_path, + verify=verify, + ) def transform(self) -> None: """Transform the data extracted into a format that can be consumed by the @@ -280,6 +306,24 @@ def validate(self) -> None: f"`{geo_field}`." ) + # Check whether data contains expected states + states_in_output_df = ( + self.output_df[self.GEOID_TRACT_FIELD_NAME] + .str[0:2] + .unique() + .tolist() + ) + + compare_to_list_of_expected_state_fips_codes( + actual_state_fips_codes=states_in_output_df, + continental_us_expected=self.CONTINENTAL_US_EXPECTED_IN_DATA, + alaska_and_hawaii_expected=self.ALASKA_AND_HAWAII_EXPECTED_IN_DATA, + puerto_rico_expected=self.PUERTO_RICO_EXPECTED_IN_DATA, + island_areas_expected=self.ISLAND_AREAS_EXPECTED_IN_DATA, + additional_fips_codes_not_expected=self.EXPECTED_MISSING_STATES, + dataset_name=self.NAME, + ) + def load(self, float_format=None) -> None: """Saves the transformed data. @@ -318,6 +362,9 @@ def get_data_frame(cls) -> pd.DataFrame: f"No file found at `{output_file_path}`." ) + logger.info( + f"Reading in CSV `{output_file_path}` for ETL of class `{cls}`." + ) output_df = pd.read_csv( output_file_path, dtype={ diff --git a/data/data-pipeline/data_pipeline/etl/constants.py b/data/data-pipeline/data_pipeline/etl/constants.py index 8d9fef2b2..00f3e0eb0 100644 --- a/data/data-pipeline/data_pipeline/etl/constants.py +++ b/data/data-pipeline/data_pipeline/etl/constants.py @@ -3,121 +3,188 @@ "name": "cdc_places", "module_dir": "cdc_places", "class_name": "CDCPlacesETL", + "is_memory_intensive": False, }, { "name": "national_risk_index", "module_dir": "national_risk_index", "class_name": "NationalRiskIndexETL", + "is_memory_intensive": False, + }, + { + "name": "travel_composite", + "module_dir": "dot_travel_composite", + "class_name": "TravelCompositeETL", + "is_memory_intensive": False, }, { "name": "tree_equity_score", "module_dir": "tree_equity_score", "class_name": "TreeEquityScoreETL", - }, - { - "name": "census_acs", - "module_dir": "census_acs", - "class_name": "CensusACSETL", - }, - { - "name": "census_acs_2010", - "module_dir": "census_acs_2010", - "class_name": "CensusACS2010ETL", + "is_memory_intensive": False, }, { "name": "census_decennial", "module_dir": "census_decennial", "class_name": "CensusDecennialETL", + "is_memory_intensive": False, }, { "name": "mapping_for_ej", "module_dir": "mapping_for_ej", "class_name": "MappingForEJETL", + "is_memory_intensive": False, + }, + { + "name": "fsf_flood_risk", + "module_dir": "fsf_flood_risk", + "class_name": "FloodRiskETL", + "is_memory_intensive": False, + }, + { + "name": "fsf_wildfire_risk", + "module_dir": "fsf_wildfire_risk", + "class_name": "WildfireRiskETL", + "is_memory_intensive": False, }, { "name": "ejscreen", "module_dir": "ejscreen", "class_name": "EJSCREENETL", + "is_memory_intensive": False, }, { "name": "hud_housing", "module_dir": "hud_housing", "class_name": "HudHousingETL", + "is_memory_intensive": False, + }, + { + "name": "nlcd_nature_deprived", + "module_dir": "nlcd_nature_deprived", + "class_name": "NatureDeprivedETL", + "is_memory_intensive": False, }, { "name": "census_acs_median_income", "module_dir": "census_acs_median_income", "class_name": "CensusACSMedianIncomeETL", + "is_memory_intensive": False, }, { "name": "cdc_life_expectancy", "module_dir": "cdc_life_expectancy", "class_name": "CDCLifeExpectancy", + "is_memory_intensive": False, }, { "name": "doe_energy_burden", "module_dir": "doe_energy_burden", "class_name": "DOEEnergyBurden", + "is_memory_intensive": False, }, { "name": "geocorr", "module_dir": "geocorr", "class_name": "GeoCorrETL", - }, - { - "name": "child_opportunity_index", - "module_dir": "child_opportunity_index", - "class_name": "ChildOpportunityIndex", + "is_memory_intensive": False, }, { "name": "mapping_inequality", "module_dir": "mapping_inequality", "class_name": "MappingInequalityETL", + "is_memory_intensive": False, }, { "name": "persistent_poverty", "module_dir": "persistent_poverty", "class_name": "PersistentPovertyETL", + "is_memory_intensive": False, }, { "name": "ejscreen_areas_of_concern", "module_dir": "ejscreen_areas_of_concern", "class_name": "EJSCREENAreasOfConcernETL", + "is_memory_intensive": False, }, { "name": "calenviroscreen", "module_dir": "calenviroscreen", "class_name": "CalEnviroScreenETL", + "is_memory_intensive": False, }, { "name": "hud_recap", "module_dir": "hud_recap", "class_name": "HudRecapETL", + "is_memory_intensive": False, }, { "name": "epa_rsei", "module_dir": "epa_rsei", "class_name": "EPARiskScreeningEnvironmentalIndicatorsETL", + "is_memory_intensive": False, }, { "name": "energy_definition_alternative_draft", "module_dir": "energy_definition_alternative_draft", "class_name": "EnergyDefinitionAlternativeDraft", + "is_memory_intensive": False, }, { "name": "michigan_ejscreen", "module_dir": "michigan_ejscreen", "class_name": "MichiganEnviroScreenETL", + "is_memory_intensive": False, }, { "name": "cdc_svi_index", "module_dir": "cdc_svi_index", "class_name": "CDCSVIIndex", + "is_memory_intensive": False, }, { "name": "maryland_ejscreen", "module_dir": "maryland_ejscreen", "class_name": "MarylandEJScreenETL", + "is_memory_intensive": False, + }, + { + "name": "historic_redlining", + "module_dir": "historic_redlining", + "class_name": "HistoricRedliningETL", + "is_memory_intensive": False, + }, + # This has to come after us.json exists + { + "name": "census_acs", + "module_dir": "census_acs", + "class_name": "CensusACSETL", + "is_memory_intensive": False, + }, + { + "name": "census_acs_2010", + "module_dir": "census_acs_2010", + "class_name": "CensusACS2010ETL", + "is_memory_intensive": False, + }, + { + "name": "us_army_fuds", + "module_dir": "us_army_fuds", + "class_name": "USArmyFUDS", + "is_memory_intensive": True, + }, + { + "name": "eamlis", + "module_dir": "eamlis", + "class_name": "AbandonedMineETL", + "is_memory_intensive": True, + }, + { + "name": "tribal_overlap", + "module_dir": "tribal_overlap", + "class_name": "TribalOverlapETL", + "is_memory_intensive": True, }, ] @@ -125,10 +192,12 @@ "name": "census", "module_dir": "census", "class_name": "CensusETL", + "is_memory_intensive": False, } TRIBAL_INFO = { "name": "tribal", "module_dir": "tribal", "class_name": "TribalETL", + "is_memory_intensive": False, } diff --git a/data/data-pipeline/data_pipeline/etl/runner.py b/data/data-pipeline/data_pipeline/etl/runner.py index 5e9230bb3..896638249 100644 --- a/data/data-pipeline/data_pipeline/etl/runner.py +++ b/data/data-pipeline/data_pipeline/etl/runner.py @@ -1,5 +1,5 @@ -import importlib import concurrent.futures +import importlib import typing from data_pipeline.etl.score.etl_score import ScoreETL @@ -77,16 +77,41 @@ def etl_runner(dataset_to_run: str = None) -> None: """ dataset_list = _get_datasets_to_run(dataset_to_run) - with concurrent.futures.ThreadPoolExecutor() as executor: - futures = { - executor.submit(_run_one_dataset, dataset=dataset) - for dataset in dataset_list - } - - for fut in concurrent.futures.as_completed(futures): - # Calling result will raise an exception if one occurred. - # Otherwise, the exceptions are silently ignored. - fut.result() + # Because we are memory constrained on our infrastructure, + # we split datasets into those that are not memory intensive + # (is_memory_intensive == False) and thereby can be safely + # run in parallel, and those that require more RAM and thus + # should be run sequentially. The is_memory_intensive_flag is + # set manually in constants.py based on experience running + # the pipeline + concurrent_datasets = [ + dataset + for dataset in dataset_list + if not dataset["is_memory_intensive"] + ] + high_memory_datasets = [ + dataset for dataset in dataset_list if dataset["is_memory_intensive"] + ] + + if concurrent_datasets: + logger.info("Running concurrent jobs") + with concurrent.futures.ThreadPoolExecutor() as executor: + futures = { + executor.submit(_run_one_dataset, dataset=dataset) + for dataset in concurrent_datasets + } + + for fut in concurrent.futures.as_completed(futures): + # Calling result will raise an exception if one occurred. + # Otherwise, the exceptions are silently ignored. + fut.result() + + # Note: these high-memory datasets also usually require the Census geojson to be + # generated, and one of them requires the Tribal geojson to be generated. + if high_memory_datasets: + logger.info("Running high-memory jobs") + for dataset in high_memory_datasets: + _run_one_dataset(dataset=dataset) def score_generate() -> None: diff --git a/data/data-pipeline/data_pipeline/etl/score/config/datasets.yml b/data/data-pipeline/data_pipeline/etl/score/config/datasets.yml index 8bcf72eaf..dc6eed9bd 100644 --- a/data/data-pipeline/data_pipeline/etl/score/config/datasets.yml +++ b/data/data-pipeline/data_pipeline/etl/score/config/datasets.yml @@ -35,7 +35,6 @@ datasets: include_in_tiles: true include_in_downloadable_files: true create_percentile: true - - short_name: "ex_ag_loss" df_field_name: "EXPECTED_AGRICULTURE_LOSS_RATE_FIELD_NAME" long_name: "Expected agricultural loss rate (Natural Hazards Risk Index)" @@ -54,7 +53,6 @@ datasets: include_in_tiles: true include_in_downloadable_files: true create_percentile: true - - short_name: "ex_bldg_loss" df_field_name: "EXPECTED_BUILDING_LOSS_RATE_FIELD_NAME" long_name: "Expected building loss rate (Natural Hazards Risk Index)" @@ -72,8 +70,262 @@ datasets: include_in_tiles: true include_in_downloadable_files: true create_percentile: true - - short_name: "has_ag_val" df_field_name: "CONTAINS_AGRIVALUE" long_name: "Contains agricultural value" field_type: bool + - long_name: "Child Opportunity Index 2.0 database" + short_name: "coi" + module_name: "child_opportunity_index" + input_geoid_tract_field_name: "geoid" + load_fields: + - short_name: "he_heat" + df_field_name: "EXTREME_HEAT_FIELD" + long_name: "Summer days above 90F" + field_type: float + include_in_downloadable_files: true + include_in_tiles: true + - short_name: "he_food" + long_name: "Percent low access to healthy food" + df_field_name: "HEALTHY_FOOD_FIELD" + field_type: float + include_in_downloadable_files: true + include_in_tiles: true + - short_name: "he_green" + long_name: "Percent impenetrable surface areas" + df_field_name: "IMPENETRABLE_SURFACES_FIELD" + field_type: float + include_in_downloadable_files: true + include_in_tiles: true + - short_name: "ed_reading" + df_field_name: "READING_FIELD" + long_name: "Third grade reading proficiency" + field_type: float + include_in_downloadable_files: true + include_in_tiles: true + - long_name: "Low-Income Energy Affordabililty Data" + short_name: "LEAD" + module_name: "doe_energy_burden" + input_geoid_tract_field_name: "FIP" + load_fields: + - short_name: "EBP_PFS" + df_field_name: "REVISED_ENERGY_BURDEN_FIELD_NAME" + long_name: "Energy burden" + field_type: float + include_in_downloadable_files: true + include_in_tiles: true + - long_name: "Formerly Used Defense Sites" + short_name: "FUDS" + module_name: "us_army_fuds" + load_fields: + - short_name: "fuds_count" + df_field_name: "ELIGIBLE_FUDS_COUNT_FIELD_NAME" + long_name: "Count of eligible Formerly Used Defense Site (FUDS) properties centroids" + description_short: + "The number of FUDS marked as Eligible and Has Project in the tract." + field_type: int64 + include_in_tiles: false + include_in_downloadable_files: false + - short_name: "not_fuds_ct" + df_field_name: "INELIGIBLE_FUDS_COUNT_FIELD_NAME" + long_name: "Count of ineligible Formerly Used Defense Site (FUDS) properties centroids" + description_short: + "The number of FUDS marked as Ineligible or Project in the tract." + field_type: int64 + include_in_tiles: false + include_in_downloadable_files: false + - short_name: "has_fuds" + df_field_name: "ELIGIBLE_FUDS_BINARY_FIELD_NAME" + long_name: "Is there at least one Formerly Used Defense Site (FUDS) in the tract?" + description_short: + "Whether the tract has a FUDS" + field_type: bool + include_in_tiles: false + include_in_downloadable_files: false + - long_name: "Abandoned Mine Land Inventory System" + short_name: "eAMLIS" + module_name: "eamlis" + load_fields: + - short_name: "has_aml" + df_field_name: "AML_BOOLEAN" + long_name: "Is there at least one abandoned mine in this census tract?" + description_short: + "Whether the tract has an abandoned mine" + field_type: bool + include_in_tiles: true + include_in_downloadable_files: true + - long_name: "Example ETL" + short_name: "Example" + module_name: "example_dataset" + input_geoid_tract_field_name: "GEOID10_TRACT" + load_fields: + - short_name: "EXAMPLE_FIELD" + df_field_name: "Input Field 1" + long_name: "Example Field 1" + field_type: float + include_in_tiles: true + include_in_downloadable_files: true + - long_name: "First Street Foundation Flood Risk" + short_name: "FSF Flood Risk" + module_name: fsf_flood_risk + input_geoid_tract_field_name: "GEOID" + load_fields: + - short_name: "flood_eligible_properties" + df_field_name: "COUNT_PROPERTIES" + long_name: "Count of properties eligible for flood risk calculation within tract (floor of 250)" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: false + - short_name: "flood_risk_properties_today" + df_field_name: "PROPERTIES_AT_RISK_FROM_FLOODING_TODAY" + long_name: "Count of properties at risk of flood today" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: false + - short_name: "flood_risk_properties_30yrs" + df_field_name: "PROPERTIES_AT_RISK_FROM_FLOODING_IN_30_YEARS" + long_name: "Count of properties at risk of flood in 30 years" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: false + - short_name: "flood_risk_share_today" + df_field_name: "SHARE_OF_PROPERTIES_AT_RISK_FROM_FLOODING_TODAY" + long_name: "Share of properties at risk of flood today" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: true + - short_name: "flood_risk_share_30yrs" + df_field_name: "SHARE_OF_PROPERTIES_AT_RISK_FROM_FLOODING_IN_30_YEARS" + long_name: "Share of properties at risk of flood in 30 years" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: true + - long_name: "First Street Foundation Wildfire Risk" + short_name: "FSF Wildfire Risk" + module_name: fsf_wildfire_risk + input_geoid_tract_field_name: "GEOID" + load_fields: + - short_name: "fire_eligible_properties" + df_field_name: "COUNT_PROPERTIES" + long_name: "Count of properties eligible for wildfire risk calculation within tract (floor of 250)" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: false + - short_name: "fire_risk_properties_today" + df_field_name: "PROPERTIES_AT_RISK_FROM_FIRE_TODAY" + long_name: "Count of properties at risk of wildfire today" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: false + - short_name: "fire_risk_properties_30yrs" + df_field_name: "PROPERTIES_AT_RISK_FROM_FIRE_IN_30_YEARS" + long_name: "Count of properties at risk of wildfire in 30 years" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: false + - short_name: "fire_risk_share_today" + df_field_name: "SHARE_OF_PROPERTIES_AT_RISK_FROM_FIRE_TODAY" + long_name: "Share of properties at risk of fire today" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: true + - short_name: "fire_risk_share_30yrs" + df_field_name: "SHARE_OF_PROPERTIES_AT_RISK_FROM_FIRE_IN_30_YEARS" + long_name: "Share of properties at risk of fire in 30 years" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: true + - long_name: "DOT Travel Disadvantage Index" + short_name: "DOT" + module_name: "travel_composite" + input_geoid_tract_field_name: "GEOID10_TRACT" + load_fields: + - short_name: "travel_burden" + df_field_name: "TRAVEL_BURDEN_FIELD_NAME" + long_name: "DOT Travel Barriers Score" + field_type: float + include_in_tiles: true + include_in_downloadable_files: true + create_percentile: true + - long_name: "National Land Cover Database (NLCD) Lack of Green Space / Nature-Deprived Communities dataset, as compiled by TPL" + short_name: "nlcd_nature_deprived" + module_name: "nlcd_nature_deprived" + input_geoid_tract_field_name: "GEOID10_TRACT" + load_fields: + - short_name: "ncld_eligible" + df_field_name: "ELIGIBLE_FOR_NATURE_DEPRIVED_FIELD_NAME" + long_name: "Does the tract have at least 35 acres in it?" + field_type: bool + include_in_tiles: true + include_in_downloadable_files: true + create_percentile: false + - short_name: "percent_impervious" + df_field_name: "TRACT_PERCENT_IMPERVIOUS_FIELD_NAME" + long_name: "Share of the tract's land area that is covered by impervious surface as a percent" + field_type: percentage + include_in_tiles: true + include_in_downloadable_files: true + create_percentile: true + - short_name: "percent_nonnatural" + df_field_name: "TRACT_PERCENT_NON_NATURAL_FIELD_NAME" + long_name: "Share of the tract's land area that is covered by impervious surface or cropland as a percent" + field_type: percentage + include_in_tiles: true + include_in_downloadable_files: true + create_percentile: true + - short_name: "percent_cropland" + df_field_name: "TRACT_PERCENT_CROPLAND_FIELD_NAME" + long_name: "Share of the tract's land area that is covered by cropland as a percent" + field_type: percentage + include_in_tiles: true + include_in_downloadable_files: true + create_percentile: true + - long_name: "Overlap between Census tract boundaries and Tribal area boundaries." + short_name: "tribal_overlap" + module_name: "tribal_overlap" + input_geoid_tract_field_name: "GEOID10_TRACT" + load_fields: + - short_name: "tribal_count" + df_field_name: "COUNT_OF_TRIBAL_AREAS_IN_TRACT" + long_name: "Number of Tribal areas within Census tract" + field_type: int64 + include_in_tiles: true + include_in_downloadable_files: true + create_percentile: false + - short_name: "tribal_percent" + df_field_name: "PERCENT_OF_TRIBAL_AREA_IN_TRACT" + long_name: "Percent of the Census tract that is within Tribal areas" + field_type: float + include_in_tiles: true + include_in_downloadable_files: true + create_percentile: false + number_of_decimals_in_output: 6 + - short_name: "tribal_names" + df_field_name: "NAMES_OF_TRIBAL_AREAS_IN_TRACT" + long_name: "Names of Tribal areas within Census tract" + field_type: string + include_in_tiles: true + include_in_downloadable_files: true + - long_name: "CDC Life Expeectancy" + short_name: "cdc_life_expectancy" + module_name: "cdc_life_expectancy" + input_geoid_tract_field_name: "Tract ID" + load_fields: + - short_name: "LLEF" + df_field_name: "LIFE_EXPECTANCY_FIELD_NAME" + long_name: "Life expectancy (years)" + field_type: float + include_in_tiles: false + include_in_downloadable_files: true + create_percentile: false + create_reverse_percentile: true diff --git a/data/data-pipeline/data_pipeline/etl/score/constants.py b/data/data-pipeline/data_pipeline/etl/score/constants.py index 8d5371e89..199285c9c 100644 --- a/data/data-pipeline/data_pipeline/etl/score/constants.py +++ b/data/data-pipeline/data_pipeline/etl/score/constants.py @@ -2,9 +2,11 @@ from pathlib import Path from data_pipeline.config import settings - from data_pipeline.score import field_names +## note: to keep map porting "right" fields, keeping descriptors the same. + + # Base Paths DATA_PATH = Path(settings.APP_ROOT) / "data" TMP_PATH = DATA_PATH / "tmp" @@ -115,7 +117,7 @@ CENSUS_COUNTIES_COLUMNS = ["USPS", "GEOID", "NAME"] # Drop FIPS codes from map -DROP_FIPS_CODES = ["66", "78"] +DROP_FIPS_CODES = [] # Drop FIPS codes from incrementing DROP_FIPS_FROM_NON_WTD_THRESHOLDS = "72" @@ -138,7 +140,7 @@ # Controlling Tile user experience columns THRESHOLD_COUNT_TO_SHOW_FIELD_NAME = "THRHLD" TILES_ISLAND_AREAS_THRESHOLD_COUNT = 3 -TILES_PUERTO_RICO_THRESHOLD_COUNT = 4 +TILES_PUERTO_RICO_THRESHOLD_COUNT = 10 TILES_NATION_THRESHOLD_COUNT = 21 # Note that the FIPS code is a string @@ -146,6 +148,58 @@ # 60: American Samoa, 66: Guam, 69: N. Mariana Islands, 78: US Virgin Islands TILES_ISLAND_AREA_FIPS_CODES = ["60", "66", "69", "78"] TILES_PUERTO_RICO_FIPS_CODE = ["72"] +TILES_ALASKA_AND_HAWAII_FIPS_CODE = ["02", "15"] +TILES_CONTINENTAL_US_FIPS_CODE = [ + "01", + "04", + "05", + "06", + "08", + "09", + "10", + "11", + "12", + "13", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + "32", + "33", + "34", + "35", + "36", + "37", + "38", + "39", + "40", + "41", + "42", + "44", + "45", + "46", + "47", + "48", + "49", + "50", + "51", + "53", + "54", + "55", + "56", +] # Constant to reflect UI Experience version # "Nation" referring to 50 states and DC is from Census @@ -189,16 +243,17 @@ + field_names.PERCENTILE_FIELD_SUFFIX: "LIF_PFS", field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "LMI_PFS", - field_names.MEDIAN_HOUSE_VALUE_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX: "MHVF_PFS", field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "PM25F_PFS", field_names.HIGH_SCHOOL_ED_FIELD: "HSEF", field_names.POVERTY_LESS_THAN_100_FPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "P100_PFS", - field_names.POVERTY_LESS_THAN_200_FPL_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX: "P200_PFS", + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "P200_I_PFS", + field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED_DONUTS: "AJDLI_ET", field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "LPF_PFS", + field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "KP_PFS", field_names.NPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "NPL_PFS", field_names.RMP_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "RMP_PFS", field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "TSDF_PFS", @@ -208,37 +263,24 @@ + field_names.PERCENTILE_FIELD_SUFFIX: "UF_PFS", field_names.WASTEWATER_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "WF_PFS", - field_names.M_WATER: "M_WTR", - field_names.M_WORKFORCE: "M_WKFC", - field_names.M_CLIMATE: "M_CLT", - field_names.M_ENERGY: "M_ENY", - field_names.M_TRANSPORTATION: "M_TRN", - field_names.M_HOUSING: "M_HSG", - field_names.M_POLLUTION: "M_PLN", - field_names.M_HEALTH: "M_HLTH", - field_names.SCORE_M_COMMUNITIES: "SM_C", - field_names.SCORE_M + field_names.PERCENTILE_FIELD_SUFFIX: "SM_PFS", - field_names.EXPECTED_POPULATION_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD: "EPLRLI", - field_names.EXPECTED_AGRICULTURE_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD: "EALRLI", - field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_LOW_HIGHER_ED_FIELD: "EBLRLI", - field_names.PM25_EXPOSURE_LOW_INCOME_LOW_HIGHER_ED_FIELD: "PM25LI", - field_names.ENERGY_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD: "EBLI", - field_names.DIESEL_PARTICULATE_MATTER_LOW_INCOME_LOW_HIGHER_ED_FIELD: "DPMLI", - field_names.TRAFFIC_PROXIMITY_LOW_INCOME_LOW_HIGHER_ED_FIELD: "TPLI", - field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_LOW_HIGHER_ED_FIELD: "LPMHVLI", - field_names.HOUSING_BURDEN_LOW_INCOME_LOW_HIGHER_ED_FIELD: "HBLI", - field_names.RMP_LOW_INCOME_LOW_HIGHER_ED_FIELD: "RMPLI", - field_names.SUPERFUND_LOW_INCOME_LOW_HIGHER_ED_FIELD: "SFLI", - field_names.HAZARDOUS_WASTE_LOW_INCOME_LOW_HIGHER_ED_FIELD: "HWLI", - field_names.WASTEWATER_DISCHARGE_LOW_INCOME_LOW_HIGHER_ED_FIELD: "WDLI", - field_names.DIABETES_LOW_INCOME_LOW_HIGHER_ED_FIELD: "DLI", - field_names.ASTHMA_LOW_INCOME_LOW_HIGHER_ED_FIELD: "ALI", - field_names.HEART_DISEASE_LOW_INCOME_LOW_HIGHER_ED_FIELD: "HDLI", - field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_LOW_HIGHER_ED_FIELD: "LLELI", - field_names.LINGUISTIC_ISOLATION_LOW_HS_LOW_HIGHER_ED_FIELD: "LILHSE", - field_names.POVERTY_LOW_HS_LOW_HIGHER_ED_FIELD: "PLHSE", - field_names.LOW_MEDIAN_INCOME_LOW_HS_LOW_HIGHER_ED_FIELD: "LMILHSE", - field_names.UNEMPLOYMENT_LOW_HS_LOW_HIGHER_ED_FIELD: "ULHSE", + field_names.UST_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "UST_PFS", + field_names.N_WATER: "N_WTR", + field_names.N_WORKFORCE: "N_WKFC", + field_names.N_CLIMATE: "N_CLT", + field_names.N_ENERGY: "N_ENY", + field_names.N_TRANSPORTATION: "N_TRN", + field_names.N_HOUSING: "N_HSG", + field_names.N_POLLUTION: "N_PLN", + field_names.N_HEALTH: "N_HLTH", + # temporarily update this so that it's the Narwhal score that gets visualized on the map + # The NEW final score value INCLUDES the adjacency index. + field_names.FINAL_SCORE_N_BOOLEAN: "SN_C", + field_names.IS_TRIBAL_DAC: "SN_T", + field_names.DIABETES_LOW_INCOME_FIELD: "DLI", + field_names.ASTHMA_LOW_INCOME_FIELD: "ALI", + field_names.POVERTY_LOW_HS_EDUCATION_FIELD: "PLHSE", + field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD: "LMILHSE", + field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD: "ULHSE", # new booleans only for the environmental factors field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD: "EPL_ET", field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD: "EAL_ET", @@ -248,11 +290,14 @@ field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD: "DS_ET", field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD: "TP_ET", field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD: "LPP_ET", + field_names.HISTORIC_REDLINING_SCORE_EXCEEDED: "HRS_ET", + field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD: "KP_ET", field_names.HOUSING_BURDEN_PCTILE_THRESHOLD: "HB_ET", field_names.RMP_PCTILE_THRESHOLD: "RMP_ET", field_names.NPL_PCTILE_THRESHOLD: "NPL_ET", field_names.TSDF_PCTILE_THRESHOLD: "TSDF_ET", field_names.WASTEWATER_PCTILE_THRESHOLD: "WD_ET", + field_names.UST_PCTILE_THRESHOLD: "UST_ET", field_names.DIABETES_PCTILE_THRESHOLD: "DB_ET", field_names.ASTHMA_PCTILE_THRESHOLD: "A_ET", field_names.HEART_DISEASE_PCTILE_THRESHOLD: "HD_ET", @@ -278,79 +323,56 @@ field_names.CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009 + field_names.ISLAND_AREAS_PERCENTILE_ADJUSTMENT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX: "IAULHSE_PFS", - field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD: "LHE", + field_names.LOW_HS_EDUCATION_FIELD: "LHE", field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD: "IALHE", # Percentage of HS Degree completion for Islands field_names.CENSUS_DECENNIAL_HIGH_SCHOOL_ED_FIELD_2009: "IAHSEF", - field_names.COLLEGE_ATTENDANCE_FIELD: "CA", - field_names.COLLEGE_NON_ATTENDANCE_FIELD: "NCA", - # This is logically equivalent to "non-college greater than 80%" - field_names.COLLEGE_ATTENDANCE_LESS_THAN_20_FIELD: "CA_LT20", # Booleans for the front end about the types of thresholds exceeded - field_names.CLIMATE_THRESHOLD_EXCEEDED: "M_CLT_EOMI", - field_names.ENERGY_THRESHOLD_EXCEEDED: "M_ENY_EOMI", - field_names.TRAFFIC_THRESHOLD_EXCEEDED: "M_TRN_EOMI", - field_names.HOUSING_THREHSOLD_EXCEEDED: "M_HSG_EOMI", - field_names.POLLUTION_THRESHOLD_EXCEEDED: "M_PLN_EOMI", - field_names.WATER_THRESHOLD_EXCEEDED: "M_WTR_EOMI", - field_names.HEALTH_THRESHOLD_EXCEEDED: "M_HLTH_EOMI", - field_names.WORKFORCE_THRESHOLD_EXCEEDED: "M_WKFC_EOMI", + field_names.CLIMATE_THRESHOLD_EXCEEDED: "N_CLT_EOMI", + field_names.ENERGY_THRESHOLD_EXCEEDED: "N_ENY_EOMI", + field_names.TRAFFIC_THRESHOLD_EXCEEDED: "N_TRN_EOMI", + field_names.HOUSING_THREHSOLD_EXCEEDED: "N_HSG_EOMI", + field_names.POLLUTION_THRESHOLD_EXCEEDED: "N_PLN_EOMI", + field_names.WATER_THRESHOLD_EXCEEDED: "N_WTR_EOMI", + field_names.HEALTH_THRESHOLD_EXCEEDED: "N_HLTH_EOMI", + field_names.WORKFORCE_THRESHOLD_EXCEEDED: "N_WKFC_EOMI", # These are the booleans for socioeconomic indicators ## this measures low income boolean - field_names.FPL_200_SERIES: "FPL200S", - ## Low high school and low higher ed for t&wd - field_names.WORKFORCE_SOCIO_INDICATORS_EXCEEDED: "M_WKFC_EBSI", - ## FPL 200 and low higher ed for all others - field_names.FPL_200_AND_COLLEGE_ATTENDANCE_SERIES: "M_EBSI", + field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED: "FPL200S", + ## Low high school for t&wd + field_names.WORKFORCE_SOCIO_INDICATORS_EXCEEDED: "N_WKFC_EBSI", + field_names.DOT_BURDEN_PCTILE_THRESHOLD: "TD_ET", + field_names.DOT_TRAVEL_BURDEN_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "TD_PFS", + field_names.FUTURE_FLOOD_RISK_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "FLD_PFS", + field_names.FUTURE_WILDFIRE_RISK_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX: "WFR_PFS", + field_names.HIGH_FUTURE_FLOOD_RISK_FIELD: "FLD_ET", + field_names.HIGH_FUTURE_WILDFIRE_RISK_FIELD: "WFR_ET", + field_names.ADJACENT_TRACT_SCORE_ABOVE_DONUT_THRESHOLD: "ADJ_ET", + field_names.TRACT_PERCENT_NON_NATURAL_FIELD_NAME + + field_names.PERCENTILE_FIELD_SUFFIX: "IS_PFS", + field_names.NON_NATURAL_LOW_INCOME_FIELD_NAME: "IS_ET", + field_names.AML_BOOLEAN_FILLED_IN: "AML_ET", + field_names.ELIGIBLE_FUDS_BINARY_FIELD_NAME: "FUDS_RAW", + field_names.ELIGIBLE_FUDS_FILLED_IN_FIELD_NAME: "FUDS_ET", + field_names.IMPUTED_INCOME_FLAG_FIELD_NAME: "IMP_FLG", + ## FPL 200 and low higher ed for all others should no longer be M_EBSI, but rather + ## FPL_200 (there is no higher ed in narwhal) + field_names.PERCENT_BLACK_FIELD_NAME: "DM_B", + field_names.PERCENT_AMERICAN_INDIAN_FIELD_NAME: "DM_AI", + field_names.PERCENT_ASIAN_FIELD_NAME: "DM_A", + field_names.PERCENT_HAWAIIAN_FIELD_NAME: "DM_HI", + field_names.PERCENT_TWO_OR_MORE_RACES_FIELD_NAME: "DM_T", + field_names.PERCENT_NON_HISPANIC_WHITE_FIELD_NAME: "DM_W", + field_names.PERCENT_HISPANIC_FIELD_NAME: "DM_H", + field_names.PERCENT_OTHER_RACE_FIELD_NAME: "DM_O", + field_names.PERCENT_AGE_UNDER_10: "AGE_10", + field_names.PERCENT_AGE_10_TO_64: "AGE_MIDDLE", + field_names.PERCENT_AGE_OVER_64: "AGE_OLD", + field_names.COUNT_OF_TRIBAL_AREAS_IN_TRACT_AK: "TA_COUNT_AK", + field_names.COUNT_OF_TRIBAL_AREAS_IN_TRACT_CONUS: "TA_COUNT_C", + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT: "TA_PERC", + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT_DISPLAY: "TA_PERC_FE", } - -# columns to round floats to 2 decimals -# TODO refactor to use much smaller subset of fields we DON'T want to round -TILES_SCORE_FLOAT_COLUMNS = [ - field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.HEART_DISEASE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.ENERGY_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.HOUSING_BURDEN_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LOW_LIFE_EXPECTANCY_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LINGUISTIC_ISO_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.MEDIAN_HOUSE_VALUE_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.POVERTY_LESS_THAN_100_FPL_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.POVERTY_LESS_THAN_200_FPL_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.NPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.RMP_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.UNEMPLOYMENT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - # Percentiles for Island areas' workforce columns - # To be clear: the island areas pull from 2009 census. PR does not. - field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 - + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.CENSUS_DECENNIAL_POVERTY_LESS_THAN_100_FPL_FIELD_2009 - + field_names.ISLAND_AREAS_PERCENTILE_ADJUSTMENT_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009 - + field_names.ISLAND_AREAS_PERCENTILE_ADJUSTMENT_FIELD - + field_names.PERCENTILE_FIELD_SUFFIX, - # Island areas HS degree attainment rate - field_names.CENSUS_DECENNIAL_HIGH_SCHOOL_ED_FIELD_2009, - field_names.LOW_HS_EDUCATION_LOW_HIGHER_ED_FIELD, - field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD, - field_names.WASTEWATER_FIELD + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.SCORE_M + field_names.PERCENTILE_FIELD_SUFFIX, - field_names.COLLEGE_NON_ATTENDANCE_FIELD, - field_names.COLLEGE_ATTENDANCE_FIELD, -] diff --git a/data/data-pipeline/data_pipeline/etl/score/etl_score.py b/data/data-pipeline/data_pipeline/etl/score/etl_score.py index 6d952d0d5..b6c8c4079 100644 --- a/data/data-pipeline/data_pipeline/etl/score/etl_score.py +++ b/data/data-pipeline/data_pipeline/etl/score/etl_score.py @@ -1,17 +1,26 @@ import functools -from collections import namedtuple +from dataclasses import dataclass +from typing import List import numpy as np import pandas as pd - from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.score import constants +from data_pipeline.etl.sources.census_acs.etl import CensusACSETL +from data_pipeline.etl.sources.dot_travel_composite.etl import ( + TravelCompositeETL, +) +from data_pipeline.etl.sources.eamlis.etl import AbandonedMineETL +from data_pipeline.etl.sources.fsf_flood_risk.etl import FloodRiskETL +from data_pipeline.etl.sources.fsf_wildfire_risk.etl import WildfireRiskETL from data_pipeline.etl.sources.national_risk_index.etl import ( NationalRiskIndexETL, ) -from data_pipeline.score.score_runner import ScoreRunner +from data_pipeline.etl.sources.nlcd_nature_deprived.etl import NatureDeprivedETL +from data_pipeline.etl.sources.tribal_overlap.etl import TribalOverlapETL +from data_pipeline.etl.sources.us_army_fuds.etl import USArmyFUDS from data_pipeline.score import field_names -from data_pipeline.etl.score import constants - +from data_pipeline.score.score_runner import ScoreRunner from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) @@ -24,7 +33,7 @@ def __init__(self): # dataframes self.df: pd.DataFrame self.ejscreen_df: pd.DataFrame - self.census_df: pd.DataFrame + self.census_acs_df: pd.DataFrame self.hud_housing_df: pd.DataFrame self.cdc_places_df: pd.DataFrame self.census_acs_median_incomes_df: pd.DataFrame @@ -32,18 +41,25 @@ def __init__(self): self.doe_energy_burden_df: pd.DataFrame self.national_risk_index_df: pd.DataFrame self.geocorr_urban_rural_df: pd.DataFrame - self.persistent_poverty_df: pd.DataFrame self.census_decennial_df: pd.DataFrame self.census_2010_df: pd.DataFrame - self.child_opportunity_index_df: pd.DataFrame + self.national_tract_df: pd.DataFrame + self.hrs_df: pd.DataFrame + self.dot_travel_disadvantage_df: pd.DataFrame + self.fsf_flood_df: pd.DataFrame + self.fsf_fire_df: pd.DataFrame + self.nature_deprived_df: pd.DataFrame + self.eamlis_df: pd.DataFrame + self.fuds_df: pd.DataFrame + self.tribal_overlap_df: pd.DataFrame + + self.ISLAND_DEMOGRAPHIC_BACKFILL_FIELDS: List[str] = [] def extract(self) -> None: logger.info("Loading data sets from disk.") # EJSCreen csv Load - ejscreen_csv = ( - constants.DATA_PATH / "dataset" / "ejscreen_2019" / "usa.csv" - ) + ejscreen_csv = constants.DATA_PATH / "dataset" / "ejscreen" / "usa.csv" self.ejscreen_df = pd.read_csv( ejscreen_csv, dtype={self.GEOID_TRACT_FIELD_NAME: "string"}, @@ -51,14 +67,7 @@ def extract(self) -> None: ) # Load census data - census_csv = ( - constants.DATA_PATH / "dataset" / "census_acs_2019" / "usa.csv" - ) - self.census_df = pd.read_csv( - census_csv, - dtype={self.GEOID_TRACT_FIELD_NAME: "string"}, - low_memory=False, - ) + self.census_acs_df = CensusACSETL.get_data_frame() # Load HUD housing data hud_housing_csv = ( @@ -116,6 +125,27 @@ def extract(self) -> None: # Load FEMA national risk index data self.national_risk_index_df = NationalRiskIndexETL.get_data_frame() + # Load DOT Travel Disadvantage + self.dot_travel_disadvantage_df = TravelCompositeETL.get_data_frame() + + # Load fire risk data + self.fsf_fire_df = WildfireRiskETL.get_data_frame() + + # Load flood risk data + self.fsf_flood_df = FloodRiskETL.get_data_frame() + + # Load NLCD Nature-Deprived Communities data + self.nature_deprived_df = NatureDeprivedETL.get_data_frame() + + # Load eAMLIS dataset + self.eamlis_df = AbandonedMineETL.get_data_frame() + + # Load FUDS dataset + self.fuds_df = USArmyFUDS.get_data_frame() + + # Load Tribal overlap dataset + self.tribal_overlap_df = TribalOverlapETL.get_data_frame() + # Load GeoCorr Urban Rural Map geocorr_urban_rural_csv = ( constants.DATA_PATH / "dataset" / "geocorr" / "usa.csv" @@ -126,16 +156,6 @@ def extract(self) -> None: low_memory=False, ) - # Load persistent poverty - persistent_poverty_csv = ( - constants.DATA_PATH / "dataset" / "persistent_poverty" / "usa.csv" - ) - self.persistent_poverty_df = pd.read_csv( - persistent_poverty_csv, - dtype={self.GEOID_TRACT_FIELD_NAME: "string"}, - low_memory=False, - ) - # Load decennial census data census_decennial_csv = ( constants.DATA_PATH @@ -159,19 +179,26 @@ def extract(self) -> None: low_memory=False, ) - # Load COI data - child_opportunity_index_csv = ( - constants.DATA_PATH - / "dataset" - / "child_opportunity_index" - / "usa.csv" + # Load HRS data + hrs_csv = ( + constants.DATA_PATH / "dataset" / "historic_redlining" / "usa.csv" ) - self.child_opportunity_index_df = pd.read_csv( - child_opportunity_index_csv, + + self.hrs_df = pd.read_csv( + hrs_csv, dtype={self.GEOID_TRACT_FIELD_NAME: "string"}, low_memory=False, ) + national_tract_csv = constants.DATA_CENSUS_CSV_FILE_PATH + self.national_tract_df = pd.read_csv( + national_tract_csv, + names=[self.GEOID_TRACT_FIELD_NAME], + dtype={self.GEOID_TRACT_FIELD_NAME: "string"}, + low_memory=False, + header=None, + ) + def _join_tract_dfs(self, census_tract_dfs: list) -> pd.DataFrame: logger.info("Joining Census Tract dataframes") @@ -253,6 +280,7 @@ def _add_percentiles_to_df( df: pd.DataFrame, input_column_name: str, output_column_name_root: str, + drop_tracts: list = None, ascending: bool = True, ) -> pd.DataFrame: """Creates percentiles. @@ -262,98 +290,46 @@ def _add_percentiles_to_df( E.g., "PM2.5 exposure (percentile)". This will be for the entire country. - For an "apples-to-apples" comparison of urban tracts to other urban tracts, - and compare rural tracts to other rural tracts. - - This percentile will be created and returned as - f"{output_column_name_root}{field_names.PERCENTILE_URBAN_RURAL_FIELD_SUFFIX}". - E.g., "PM2.5 exposure (percentile urban/rural)". - This field exists for every tract, but for urban tracts this value will be the - percentile compared to other urban tracts, and for rural tracts this value - will be the percentile compared to other rural tracts. - - Specific methdology: - 1. Decide a methodology for confirming whether a tract counts as urban or - rural. Currently in the codebase, we use Geocorr to identify the % rural of - a tract, and mark the tract as rural if the percentage is >50% and urban - otherwise. This may or may not be the right methodology. - 2. Once tracts are marked as urban or rural, create one percentile rank - that only ranks urban tracts, and one percentile rank that only ranks rural - tracts. - 3. Combine into a single field. - `output_column_name_root` is different from `input_column_name` to enable the reverse percentile use case. In that use case, `input_column_name` may be something like "3rd grade reading proficiency" and `output_column_name_root` may be something like "Low 3rd grade reading proficiency". """ - if ( - output_column_name_root - != field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD - ): + + # We have two potential options for assessing how to calculate percentiles. + # For the vast majority of columns, we will simply calculate percentiles overall. + # However, for Linguistic Isolation and Agricultural Value Loss, there exist conditions + # for which we drop out tracts from consideration in the percentile. More details on those + # are below, for them, we provide a list of tracts to not include. + # Because of the fancy transformations below, I have removed the urban / rural percentiles, + # which are now deprecated. + if not drop_tracts: # Create the "basic" percentile. + ## note: I believe this is less performant than if we made a bunch of these PFS columns + ## and then concatenated the list. For the refactor! df[ f"{output_column_name_root}" f"{field_names.PERCENTILE_FIELD_SUFFIX}" ] = df[input_column_name].rank(pct=True, ascending=ascending) else: - # For agricultural loss, we are using whether there is value at all to determine percentile and then - # filling places where the value is False with 0 + tmp_series = df[input_column_name].where( + ~df[field_names.GEOID_TRACT_FIELD].isin(drop_tracts), + np.nan, + ) + logger.info( + f"Creating special case column for percentiles from {input_column_name}" + ) df[ f"{output_column_name_root}" f"{field_names.PERCENTILE_FIELD_SUFFIX}" - ] = ( - df.where( - df[field_names.AGRICULTURAL_VALUE_BOOL_FIELD].astype(float) - == 1.0 - )[input_column_name] - .rank(ascending=ascending, pct=True) - .fillna( - df[field_names.AGRICULTURAL_VALUE_BOOL_FIELD].astype(float) - ) - ) - - # Create the urban/rural percentiles. - urban_rural_percentile_fields_to_combine = [] - for (urban_or_rural_string, urban_heuristic_bool) in [ - ("urban", True), - ("rural", False), - ]: - # Create a field with only those values - this_category_only_value_field = ( - f"{input_column_name} (value {urban_or_rural_string} only)" - ) - df[this_category_only_value_field] = np.where( - df[field_names.URBAN_HEURISTIC_FIELD] == urban_heuristic_bool, - df[input_column_name], - None, - ) + ] = tmp_series.rank(ascending=ascending, pct=True) - # Calculate the percentile for only this category - this_category_only_percentile_field = ( - f"{output_column_name_root} " - f"(percentile {urban_or_rural_string} only)" - ) - df[this_category_only_percentile_field] = df[ - this_category_only_value_field - ].rank( - pct=True, - # Set ascending to the parameter value. - ascending=ascending, - ) - - # Add the field name to this list. Later, we'll combine this list. - urban_rural_percentile_fields_to_combine.append( - this_category_only_percentile_field - ) - - # Combine both urban and rural into one field: - df[ - f"{output_column_name_root}{field_names.PERCENTILE_URBAN_RURAL_FIELD_SUFFIX}" - ] = df[urban_rural_percentile_fields_to_combine].mean( - axis=1, skipna=True - ) + # Check that "drop tracts" were dropped (quicker than creating a fixture?) + assert df[df[field_names.GEOID_TRACT_FIELD].isin(drop_tracts)][ + f"{output_column_name_root}" + f"{field_names.PERCENTILE_FIELD_SUFFIX}" + ].isna().sum() == len(drop_tracts), "Not all tracts were dropped" return df @@ -363,19 +339,25 @@ def _prepare_initial_df(self) -> pd.DataFrame: # Join all the data sources that use census tracts census_tract_dfs = [ - self.census_df, + self.census_acs_df, self.hud_housing_df, self.cdc_places_df, self.cdc_life_expectancy_df, self.doe_energy_burden_df, self.ejscreen_df, self.geocorr_urban_rural_df, - self.persistent_poverty_df, self.national_risk_index_df, self.census_acs_median_incomes_df, self.census_decennial_df, self.census_2010_df, - self.child_opportunity_index_df, + self.hrs_df, + self.dot_travel_disadvantage_df, + self.fsf_flood_df, + self.fsf_fire_df, + self.nature_deprived_df, + self.eamlis_df, + self.fuds_df, + self.tribal_overlap_df, ] # Sanity check each data frame before merging. @@ -384,8 +366,22 @@ def _prepare_initial_df(self) -> pd.DataFrame: census_tract_df = self._join_tract_dfs(census_tract_dfs) - # If GEOID10s are read as numbers instead of strings, the initial 0 is dropped, - # and then we get too many CBG rows (one for 012345 and one for 12345). + # Drop tracts that don't exist in the 2010 tracts + pre_join_len = census_tract_df[field_names.GEOID_TRACT_FIELD].nunique() + + census_tract_df = census_tract_df.merge( + self.national_tract_df, + on="GEOID10_TRACT", + how="inner", + ) + assert ( + census_tract_df.shape[0] <= pre_join_len + ), "Join against national tract list ADDED rows" + logger.info( + "Dropped %s tracts not in the 2010 tract data", + pre_join_len + - census_tract_df[field_names.GEOID_TRACT_FIELD].nunique(), + ) # Now sanity-check the merged df. self._census_tract_df_sanity_check( @@ -405,8 +401,29 @@ def _prepare_initial_df(self) -> pd.DataFrame: df[field_names.MEDIAN_INCOME_FIELD] / df[field_names.AMI_FIELD] ) + self.ISLAND_DEMOGRAPHIC_BACKFILL_FIELDS = [ + field_names.PERCENT_BLACK_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_AMERICAN_INDIAN_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_ASIAN_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_HAWAIIAN_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_TWO_OR_MORE_RACES_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_NON_HISPANIC_WHITE_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_HISPANIC_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_OTHER_RACE_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + ] + + # Donut columns get added later numeric_columns = [ field_names.HOUSING_BURDEN_FIELD, + field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD, field_names.TOTAL_POP_FIELD, field_names.MEDIAN_INCOME_AS_PERCENT_OF_STATE_FIELD, field_names.ASTHMA_FIELD, @@ -453,27 +470,55 @@ def _prepare_initial_df(self) -> pd.DataFrame: field_names.CENSUS_UNEMPLOYMENT_FIELD_2010, field_names.CENSUS_POVERTY_LESS_THAN_100_FPL_FIELD_2010, field_names.CENSUS_DECENNIAL_TOTAL_POPULATION_FIELD_2009, - field_names.EXTREME_HEAT_FIELD, - field_names.HEALTHY_FOOD_FIELD, - field_names.IMPENETRABLE_SURFACES_FIELD, - # We have to pass this boolean here in order to include it in ag value loss percentiles. - field_names.AGRICULTURAL_VALUE_BOOL_FIELD, - ] + field_names.UST_FIELD, + field_names.DOT_TRAVEL_BURDEN_FIELD, + field_names.FUTURE_FLOOD_RISK_FIELD, + field_names.FUTURE_WILDFIRE_RISK_FIELD, + field_names.TRACT_PERCENT_NON_NATURAL_FIELD_NAME, + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD, + field_names.PERCENT_BLACK_FIELD_NAME, + field_names.PERCENT_AMERICAN_INDIAN_FIELD_NAME, + field_names.PERCENT_ASIAN_FIELD_NAME, + field_names.PERCENT_HAWAIIAN_FIELD_NAME, + field_names.PERCENT_TWO_OR_MORE_RACES_FIELD_NAME, + field_names.PERCENT_NON_HISPANIC_WHITE_FIELD_NAME, + field_names.PERCENT_HISPANIC_FIELD_NAME, + field_names.PERCENT_OTHER_RACE_FIELD_NAME, + field_names.PERCENT_AGE_UNDER_10, + field_names.PERCENT_AGE_10_TO_64, + field_names.PERCENT_AGE_OVER_64, + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT, + field_names.COUNT_OF_TRIBAL_AREAS_IN_TRACT_AK, + field_names.COUNT_OF_TRIBAL_AREAS_IN_TRACT_CONUS, + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT_DISPLAY, + ] + self.ISLAND_DEMOGRAPHIC_BACKFILL_FIELDS non_numeric_columns = [ self.GEOID_TRACT_FIELD_NAME, - field_names.PERSISTENT_POVERTY_FIELD, + field_names.TRACT_ELIGIBLE_FOR_NONNATURAL_THRESHOLD, + field_names.AGRICULTURAL_VALUE_BOOL_FIELD, + field_names.NAMES_OF_TRIBAL_AREAS_IN_TRACT, + ] + + boolean_columns = [ + field_names.AML_BOOLEAN, + field_names.IMPUTED_INCOME_FLAG_FIELD_NAME, + field_names.ELIGIBLE_FUDS_BINARY_FIELD_NAME, + field_names.HISTORIC_REDLINING_SCORE_EXCEEDED, + field_names.IS_TRIBAL_DAC, ] # For some columns, high values are "good", so we want to reverse the percentile # so that high values are "bad" and any scoring logic can still check if it's # >= some threshold. + # Note that we must use dataclass here instead of namedtuples on account of pylint # TODO: Add more fields here. # https://github.com/usds/justice40-tool/issues/970 - ReversePercentile = namedtuple( - typename="ReversePercentile", - field_names=["field_name", "low_field_name"], - ) + @dataclass + class ReversePercentile: + field_name: str + low_field_name: str + reverse_percentiles = [ # This dictionary follows the format: # : @@ -481,10 +526,6 @@ def _prepare_initial_df(self) -> pd.DataFrame: # This low field will not exist yet, it is only calculated for the # percentile. # TODO: This will come from the YAML dataset config - ReversePercentile( - field_name=field_names.READING_FIELD, - low_field_name=field_names.LOW_READING_FIELD, - ), ReversePercentile( field_name=field_names.MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD, low_field_name=field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD, @@ -503,40 +544,90 @@ def _prepare_initial_df(self) -> pd.DataFrame: non_numeric_columns + numeric_columns + [rp.field_name for rp in reverse_percentiles] + + boolean_columns ) df_copy = df[columns_to_keep].copy() + assert len(numeric_columns) == len( + set(numeric_columns) + ), "You have a double-entered column in the numeric columns list" + df_copy[numeric_columns] = df_copy[numeric_columns].apply(pd.to_numeric) + # coerce all booleans to bools preserving nan character + # since this is a boolean, need to use `None` + for col in boolean_columns: + tmp = df_copy[col].copy() + df_copy[col] = np.where(tmp.notna(), tmp.astype(bool), None) + logger.info(f"{col} contains {df_copy[col].isna().sum()} nulls.") + # Convert all columns to numeric and do math + # Note that we have a few special conditions here and we handle them explicitly. + # For *Linguistic Isolation*, we do NOT want to include Puerto Rico in the percentile + # calculation. This is because linguistic isolation as a category doesn't make much sense + # in Puerto Rico, where Spanish is a recognized language. Thus, we construct a list + # of tracts to drop from the percentile calculation. + # + # For *Expected Agricultural Loss*, we only want to include in the percentile tracts + # in which there is some agricultural value. This helps us adjust the data such that we have + # the ability to discern which tracts truly are at the 90th percentile, since many tracts have 0 value. + # + # For *Non-Natural Space*, we may only want to include tracts that have at least 35 acreas, I think. This will + # get rid of tracts that we think are aberrations statistically. Right now, we have left this out + # pending ground-truthing. + # + # For *Traffic Barriers*, we want to exclude low population tracts, which may have high burden because they are + # low population alone. We set this low population constant in the if statement. + for numeric_column in numeric_columns: + drop_tracts = [] + if ( + numeric_column + == field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD + ): + drop_tracts = df_copy[ + ~df_copy[field_names.AGRICULTURAL_VALUE_BOOL_FIELD] + .astype(bool) + .fillna(False) + ][field_names.GEOID_TRACT_FIELD].to_list() + logger.info( + f"Dropping {len(drop_tracts)} tracts from Agricultural Value Loss" + ) + elif numeric_column == field_names.LINGUISTIC_ISO_FIELD: + drop_tracts = df_copy[ + # 72 is the FIPS code for Puerto Rico + df_copy[field_names.GEOID_TRACT_FIELD].str.startswith("72") + ][field_names.GEOID_TRACT_FIELD].to_list() + logger.info( + f"Dropping {len(drop_tracts)} tracts from Linguistic Isolation" + ) + + elif numeric_column in [ + field_names.DOT_TRAVEL_BURDEN_FIELD, + field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD, + ]: + # Not having any people appears to be correlated with transit burden, but also doesn't represent + # on the ground need. For now, we remove these tracts from the percentile calculation.Ɵ + # Similarly, we want to exclude low population tracts from FEMA's index + low_population = 20 + drop_tracts = df_copy[ + df_copy[field_names.TOTAL_POP_FIELD].fillna(0) + <= low_population + ][field_names.GEOID_TRACT_FIELD].to_list() + logger.info( + f"Dropping {len(drop_tracts)} tracts from DOT traffic burden" + ) + df_copy = self._add_percentiles_to_df( df=df_copy, input_column_name=numeric_column, # For this use case, the input name and output name root are the same. output_column_name_root=numeric_column, ascending=True, + drop_tracts=drop_tracts, ) - # Min-max normalization: - # ( - # Observed value - # - minimum of all values - # ) - # divided by - # ( - # Maximum of all values - # - minimum of all values - # ) - min_value = df_copy[numeric_column].min(skipna=True) - - max_value = df_copy[numeric_column].max(skipna=True) - - df_copy[f"{numeric_column}{field_names.MIN_MAX_FIELD_SUFFIX}"] = ( - df_copy[numeric_column] - min_value - ) / (max_value - min_value) - # Create reversed percentiles for these fields for reverse_percentile in reverse_percentiles: # Calculate reverse percentiles @@ -566,6 +657,32 @@ def _prepare_initial_df(self) -> pd.DataFrame: return df_copy + @staticmethod + def _get_island_areas(df: pd.DataFrame) -> pd.Series: + return ( + df[field_names.GEOID_TRACT_FIELD] + .str[:2] + .isin(constants.TILES_ISLAND_AREA_FIPS_CODES) + ) + + def _backfill_island_demographics(self, df: pd.DataFrame) -> pd.DataFrame: + logger.info("Backfilling island demographic data") + island_index = self._get_island_areas(df) + for backfill_field_name in self.ISLAND_DEMOGRAPHIC_BACKFILL_FIELDS: + actual_field_name = backfill_field_name.replace( + field_names.ISLAND_AREA_BACKFILL_SUFFIX, "" + ) + df.loc[island_index, actual_field_name] = df.loc[ + island_index, backfill_field_name + ] + df = df.drop(columns=self.ISLAND_DEMOGRAPHIC_BACKFILL_FIELDS) + + df.loc[island_index, field_names.TOTAL_POP_FIELD] = df.loc[ + island_index, field_names.COMBINED_CENSUS_TOTAL_POPULATION_2010 + ] + + return df + def transform(self) -> None: logger.info("Transforming Score Data") @@ -575,8 +692,13 @@ def transform(self) -> None: # calculate scores self.df = ScoreRunner(df=self.df).calculate_scores() + # We add island demographic data since it doesn't matter to the score anyway + self.df = self._backfill_island_demographics(self.df) + def load(self) -> None: - logger.info("Saving Score CSV") + logger.info( + f"Saving Score CSV to {constants.DATA_SCORE_CSV_FULL_FILE_PATH}." + ) constants.DATA_SCORE_CSV_FULL_DIR.mkdir(parents=True, exist_ok=True) self.df.to_csv(constants.DATA_SCORE_CSV_FULL_FILE_PATH, index=False) diff --git a/data/data-pipeline/data_pipeline/etl/score/etl_score_geo.py b/data/data-pipeline/data_pipeline/etl/score/etl_score_geo.py index d7aa53b29..047ae80d6 100644 --- a/data/data-pipeline/data_pipeline/etl/score/etl_score_geo.py +++ b/data/data-pipeline/data_pipeline/etl/score/etl_score_geo.py @@ -1,24 +1,20 @@ import concurrent.futures import math import os + +import geopandas as gpd import numpy as np import pandas as pd -import geopandas as gpd - +from data_pipeline.content.schemas.download_schemas import CSVConfig from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.etl.score import constants -from data_pipeline.etl.sources.census.etl_utils import ( - check_census_data_source, -) from data_pipeline.etl.score.etl_utils import check_score_data_source +from data_pipeline.etl.sources.census.etl_utils import check_census_data_source from data_pipeline.score import field_names -from data_pipeline.content.schemas.download_schemas import CSVConfig -from data_pipeline.utils import ( - get_module_logger, - zip_files, - load_yaml_dict_from_file, - load_dict_from_yaml_object_fields, -) +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import load_dict_from_yaml_object_fields +from data_pipeline.utils import load_yaml_dict_from_file +from data_pipeline.utils import zip_files logger = get_module_logger(__name__) @@ -41,23 +37,25 @@ def __init__(self, data_source: str = None): self.SCORE_CSV_PATH = self.DATA_PATH / "score" / "csv" self.TILE_SCORE_CSV = self.SCORE_CSV_PATH / "tiles" / "usa.csv" - self.DATA_SOURCE = data_source self.CENSUS_USA_GEOJSON = ( self.DATA_PATH / "census" / "geojson" / "us.json" ) - # Import the shortened name for Score M percentile ("SM_PFS") that's used on the - # tiles. + # Import the shortened name for Score N to be used on tiles. + # We should no longer be using PFS + + ## TODO: We really should not have this any longer changing self.TARGET_SCORE_SHORT_FIELD = constants.TILES_SCORE_COLUMNS[ - field_names.SCORE_M + field_names.PERCENTILE_FIELD_SUFFIX + field_names.FINAL_SCORE_N_BOOLEAN ] - self.TARGET_SCORE_RENAME_TO = "M_SCORE" + self.TARGET_SCORE_RENAME_TO = "SCORE" # Import the shortened name for tract ("GTF") that's used on the tiles. self.TRACT_SHORT_FIELD = constants.TILES_SCORE_COLUMNS[ field_names.GEOID_TRACT_FIELD ] self.GEOMETRY_FIELD_NAME = "geometry" + self.LAND_FIELD_NAME = "ALAND10" # We will adjust this upwards while there is some fractional value # in the score. This is a starting value. @@ -84,17 +82,28 @@ def extract(self) -> None: ) logger.info("Reading US GeoJSON (~6 minutes)") - self.geojson_usa_df = gpd.read_file( + full_geojson_usa_df = gpd.read_file( self.CENSUS_USA_GEOJSON, dtype={self.GEOID_FIELD_NAME: "string"}, - usecols=[self.GEOID_FIELD_NAME, self.GEOMETRY_FIELD_NAME], + usecols=[ + self.GEOID_FIELD_NAME, + self.GEOMETRY_FIELD_NAME, + self.LAND_FIELD_NAME, + ], low_memory=False, ) + # We only want to keep tracts to visualize that have non-0 land + self.geojson_usa_df = full_geojson_usa_df[ + full_geojson_usa_df[self.LAND_FIELD_NAME] > 0 + ] + logger.info("Reading score CSV") self.score_usa_df = pd.read_csv( self.TILE_SCORE_CSV, - dtype={self.TRACT_SHORT_FIELD: "string"}, + dtype={ + self.TRACT_SHORT_FIELD: str, + }, low_memory=False, ) @@ -134,7 +143,7 @@ def transform(self) -> None: columns={self.TARGET_SCORE_SHORT_FIELD: self.TARGET_SCORE_RENAME_TO} ) - logger.info("Converting to geojson into tracts") + logger.info("Converting geojson into geodf with tracts") usa_tracts = gpd.GeoDataFrame( usa_tracts, columns=[ @@ -270,8 +279,10 @@ def load(self) -> None: # Create separate threads to run each write to disk. def write_high_to_file(): logger.info("Writing usa-high (~9 minutes)") + self.geojson_score_usa_high.to_file( - filename=self.SCORE_HIGH_GEOJSON, driver="GeoJSON" + filename=self.SCORE_HIGH_GEOJSON, + driver="GeoJSON", ) logger.info("Completed writing usa-high") @@ -294,7 +305,6 @@ def create_esri_codebook(codebook): pd.Series(codebook) .reset_index() .rename( - # kept as strings because no downstream impacts columns={ 0: internal_column_name_field, "index": shapefile_column_field, diff --git a/data/data-pipeline/data_pipeline/etl/score/etl_score_post.py b/data/data-pipeline/data_pipeline/etl/score/etl_score_post.py index c88ae8a86..87fbecda2 100644 --- a/data/data-pipeline/data_pipeline/etl/score/etl_score_post.py +++ b/data/data-pipeline/data_pipeline/etl/score/etl_score_post.py @@ -1,35 +1,29 @@ -from pathlib import Path import json -from numpy import float64 +from pathlib import Path + import numpy as np import pandas as pd -from data_pipeline.content.schemas.download_schemas import ( - CSVConfig, - CodebookConfig, - ExcelConfig, -) - +from data_pipeline.content.schemas.download_schemas import CodebookConfig +from data_pipeline.content.schemas.download_schemas import CSVConfig +from data_pipeline.content.schemas.download_schemas import ExcelConfig from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.etl.score.etl_utils import floor_series, create_codebook -from data_pipeline.utils import ( - get_module_logger, - zip_files, - load_yaml_dict_from_file, - column_list_from_yaml_object_fields, - load_dict_from_yaml_object_fields, -) +from data_pipeline.etl.score.etl_utils import create_codebook +from data_pipeline.etl.score.etl_utils import floor_series +from data_pipeline.etl.sources.census.etl_utils import check_census_data_source from data_pipeline.score import field_names +from data_pipeline.utils import column_list_from_yaml_object_fields +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import load_dict_from_yaml_object_fields +from data_pipeline.utils import load_yaml_dict_from_file +from data_pipeline.utils import zip_files +from numpy import float64 - -from data_pipeline.etl.sources.census.etl_utils import ( - check_census_data_source, -) from . import constants logger = get_module_logger(__name__) # Define the DAC variable -DISADVANTAGED_COMMUNITIES_FIELD = field_names.SCORE_M_COMMUNITIES +DISADVANTAGED_COMMUNITIES_FIELD = field_names.SCORE_N_COMMUNITIES class PostScoreETL(ExtractTransformLoad): @@ -45,7 +39,6 @@ def __init__(self, data_source: str = None): self.input_counties_df: pd.DataFrame self.input_states_df: pd.DataFrame self.input_score_df: pd.DataFrame - self.input_national_tract_df: pd.DataFrame self.output_score_county_state_merged_df: pd.DataFrame self.output_score_tiles_df: pd.DataFrame @@ -92,7 +85,9 @@ def _extract_states(self, state_path: Path) -> pd.DataFrame: def _extract_score(self, score_path: Path) -> pd.DataFrame: logger.info("Reading Score CSV") df = pd.read_csv( - score_path, dtype={self.GEOID_TRACT_FIELD_NAME: "string"} + score_path, + dtype={self.GEOID_TRACT_FIELD_NAME: "string"}, + low_memory=False, ) # Convert total population to an int @@ -102,18 +97,6 @@ def _extract_score(self, score_path: Path) -> pd.DataFrame: return df - def _extract_national_tract( - self, national_tract_path: Path - ) -> pd.DataFrame: - logger.info("Reading national tract file") - return pd.read_csv( - national_tract_path, - names=[self.GEOID_TRACT_FIELD_NAME], - dtype={self.GEOID_TRACT_FIELD_NAME: "string"}, - low_memory=False, - header=None, - ) - def extract(self) -> None: logger.info("Starting Extraction") @@ -136,9 +119,6 @@ def extract(self) -> None: self.input_score_df = self._extract_score( constants.DATA_SCORE_CSV_FULL_FILE_PATH ) - self.input_national_tract_df = self._extract_national_tract( - constants.DATA_CENSUS_CSV_FILE_PATH - ) def _transform_counties( self, initial_counties_df: pd.DataFrame @@ -185,7 +165,6 @@ def _transform_score(self, initial_score_df: pd.DataFrame) -> pd.DataFrame: def _create_score_data( self, - national_tract_df: pd.DataFrame, counties_df: pd.DataFrame, states_df: pd.DataFrame, score_df: pd.DataFrame, @@ -217,28 +196,11 @@ def _create_score_data( right_on=self.STATE_CODE_COLUMN, how="left", ) - - # check if there are census tracts without score - logger.info("Removing tract rows without score") - - # merge census tracts with score - merged_df = national_tract_df.merge( - score_county_state_merged, - on=self.GEOID_TRACT_FIELD_NAME, - how="left", - ) - - # recast population to integer - score_county_state_merged["Total population"] = ( - merged_df["Total population"].fillna(0).astype(int) - ) - - de_duplicated_df = merged_df.dropna( - subset=[DISADVANTAGED_COMMUNITIES_FIELD] - ) - + assert score_county_merged[ + self.GEOID_TRACT_FIELD_NAME + ].is_unique, "Merging state/county data introduced duplicate rows" # set the score to the new df - return de_duplicated_df + return score_county_state_merged def _create_tile_data( self, @@ -254,8 +216,8 @@ def _create_tile_data( tiles_score_column_titles ].copy() - # Currently, we do not want USVI or Guam on the map, so this will drop all - # rows with the FIPS codes (first two digits of the census tract) + # We may not want some states/territories on the map, so this will drop all + # rows with those FIPS codes (first two digits of the census tract) logger.info( f"Dropping specified FIPS codes from tile data: {constants.DROP_FIPS_CODES}" ) @@ -269,16 +231,15 @@ def _create_tile_data( score_tiles = score_tiles[ ~score_tiles[field_names.GEOID_TRACT_FIELD].isin(tracts_to_drop) ] - - score_tiles[constants.TILES_SCORE_FLOAT_COLUMNS] = score_tiles[ - constants.TILES_SCORE_FLOAT_COLUMNS - ].apply( - func=lambda series: floor_series( - series=series, - number_of_decimals=constants.TILES_ROUND_NUM_DECIMALS, - ), - axis=0, - ) + float_cols = [ + col + for col, col_dtype in score_tiles.dtypes.items() + if col_dtype == np.dtype("float64") + ] + scale_factor = 10**constants.TILES_ROUND_NUM_DECIMALS + score_tiles[float_cols] = ( + score_tiles[float_cols] * scale_factor + ).apply(np.floor) / scale_factor logger.info("Adding fields for island areas and Puerto Rico") # The below operation constructs variables for the front end. @@ -427,7 +388,6 @@ def transform(self) -> None: transformed_score = self._transform_score(self.input_score_df) output_score_county_state_merged_df = self._create_score_data( - self.input_national_tract_df, transformed_counties, transformed_states, transformed_score, @@ -521,8 +481,6 @@ def _load_tile_csv( score_tiles_df.to_csv(tile_score_path, index=False, encoding="utf-8") def _load_downloadable_zip(self, downloadable_info_path: Path) -> None: - logger.info("Saving Downloadable CSV") - downloadable_info_path.mkdir(parents=True, exist_ok=True) csv_path = constants.SCORE_DOWNLOADABLE_CSV_FILE_PATH excel_path = constants.SCORE_DOWNLOADABLE_EXCEL_FILE_PATH @@ -583,6 +541,22 @@ def _load_downloadable_zip(self, downloadable_info_path: Path) -> None: "fields" ], ) + assert codebook_df["csv_label"].equals(codebook_df["excel_label"]), ( + "CSV and Excel differ. If that's intentional, " + "remove this assertion. Otherwise, fix it." + ) + # Check the codebook to make sure it matches the download files + assert not set(codebook_df["csv_label"].dropna()).difference( + downloadable_df.columns + ), "Codebook is missing columns from downloadable files" + assert ( + len( + downloadable_df.columns.difference( + set(codebook_df["csv_label"]) + ) + ) + == 0 + ), "Codebook has columns the downloadable files do not" # load codebook to disk codebook_df.to_csv(codebook_path, index=False) diff --git a/data/data-pipeline/data_pipeline/etl/score/etl_utils.py b/data/data-pipeline/data_pipeline/etl/score/etl_utils.py index f52226204..66ee71316 100644 --- a/data/data-pipeline/data_pipeline/etl/score/etl_utils.py +++ b/data/data-pipeline/data_pipeline/etl/score/etl_utils.py @@ -1,16 +1,21 @@ import os import sys -from pathlib import Path +import typing from collections import namedtuple +from pathlib import Path + import numpy as np import pandas as pd - from data_pipeline.config import settings -from data_pipeline.utils import ( - download_file_from_url, - get_module_logger, -) +from data_pipeline.etl.score.constants import TILES_ALASKA_AND_HAWAII_FIPS_CODE +from data_pipeline.etl.score.constants import TILES_CONTINENTAL_US_FIPS_CODE +from data_pipeline.etl.score.constants import TILES_ISLAND_AREA_FIPS_CODES +from data_pipeline.etl.score.constants import TILES_PUERTO_RICO_FIPS_CODE +from data_pipeline.etl.sources.census.etl_utils import get_state_fips_codes from data_pipeline.score import field_names +from data_pipeline.utils import download_file_from_url +from data_pipeline.utils import get_module_logger + from . import constants logger = get_module_logger(__name__) @@ -91,7 +96,7 @@ def floor_series(series: pd.Series, number_of_decimals: int) -> pd.Series: if series.isin(unacceptable_values).any(): series.replace(mapping, regex=False, inplace=True) - multiplication_factor = 10 ** number_of_decimals + multiplication_factor = 10**number_of_decimals # In order to safely cast NaNs # First coerce series to float type: series.astype(float) @@ -305,3 +310,106 @@ def create_codebook( return merged_codebook_df[constants.CODEBOOK_COLUMNS].rename( columns={constants.CEJST_SCORE_COLUMN_NAME: "Description"} ) + + +# pylint: disable=too-many-arguments +def compare_to_list_of_expected_state_fips_codes( + actual_state_fips_codes: typing.List[str], + continental_us_expected: bool = True, + alaska_and_hawaii_expected: bool = True, + puerto_rico_expected: bool = True, + island_areas_expected: bool = True, + additional_fips_codes_not_expected: typing.List[str] = None, + dataset_name: str = None, +) -> None: + """Check whether a list of state/territory FIPS codes match expectations. + + Args: + actual_state_fips_codes (List of str): Actual state codes observed in data + continental_us_expected (bool, optional): Do you expect the continental nation + (DC & states except for Alaska and Hawaii) to be represented in data? + alaska_and_hawaii_expected (bool, optional): Do you expect Alaska and Hawaii + to be represented in the data? Note: if only *1* of Alaska and Hawaii are + not expected to be included, do not use this argument -- instead, + use `additional_fips_codes_not_expected` for the 1 state you expected to + be missing. + puerto_rico_expected (bool, optional): Do you expect PR to be represented in data? + island_areas_expected (bool, optional): Do you expect Island Areas to be represented in + data? + additional_fips_codes_not_expected (List of str, optional): Additional state codes + not expected in the data. For example, the data may be known to be missing + data from Maine and Wisconsin. + dataset_name (str, optional): The name of the data set, used only in printing an + error message. (This is helpful for debugging during parallel etl runs.) + + Returns: + None: Does not return any values. + + Raises: + ValueError: if lists do not match expectations. + """ + # Setting default argument of [] here to avoid mutability problems. + if additional_fips_codes_not_expected is None: + additional_fips_codes_not_expected = [] + + # Cast input to a set. + actual_state_fips_codes_set = set(actual_state_fips_codes) + + # Start with the list of all FIPS codes for all states and territories. + expected_states_set = set(get_state_fips_codes(settings.DATA_PATH)) + + # If continental US is not expected to be included, remove it from the + # expected states set. + if not continental_us_expected: + expected_states_set = expected_states_set.difference( + TILES_CONTINENTAL_US_FIPS_CODE + ) + + # If both Alaska and Hawaii are not expected to be included, remove them from the + # expected states set. + # Note: if only *1* of Alaska and Hawaii are not expected to be included, + # do not use this argument -- instead, use `additional_fips_codes_not_expected` + # for the 1 state you expected to be missing. + if not alaska_and_hawaii_expected: + expected_states_set = expected_states_set.difference( + TILES_ALASKA_AND_HAWAII_FIPS_CODE + ) + + # If Puerto Rico is not expected to be included, remove it from the expected + # states set. + if not puerto_rico_expected: + expected_states_set = expected_states_set.difference( + TILES_PUERTO_RICO_FIPS_CODE + ) + + # If island areas are not expected to be included, remove them from the expected + # states set. + if not island_areas_expected: + expected_states_set = expected_states_set.difference( + TILES_ISLAND_AREA_FIPS_CODES + ) + + # If additional FIPS codes are not expected to be included, remove them from the + # expected states set. + expected_states_set = expected_states_set.difference( + additional_fips_codes_not_expected + ) + + dataset_name_phrase = ( + f" for dataset `{dataset_name}`" if dataset_name is not None else "" + ) + + if expected_states_set != actual_state_fips_codes_set: + raise ValueError( + f"The states and territories in the data{dataset_name_phrase} are not " + f"as expected.\n" + "FIPS state codes expected that are not present in the data:\n" + f"{sorted(list(expected_states_set - actual_state_fips_codes_set))}\n" + "FIPS state codes in the data that were not expected:\n" + f"{sorted(list(actual_state_fips_codes_set - expected_states_set))}\n" + ) + else: + logger.info( + "Data matches expected state and territory representation" + f"{dataset_name_phrase}." + ) diff --git a/data/data-pipeline/data_pipeline/etl/score/schemas/datasets.py b/data/data-pipeline/data_pipeline/etl/score/schemas/datasets.py index 0e80bc5b1..d485c2140 100644 --- a/data/data-pipeline/data_pipeline/etl/score/schemas/datasets.py +++ b/data/data-pipeline/data_pipeline/etl/score/schemas/datasets.py @@ -1,6 +1,8 @@ -from dataclasses import dataclass, field +from dataclasses import dataclass +from dataclasses import field from enum import Enum -from typing import List, Optional +from typing import List +from typing import Optional class FieldType(Enum): @@ -77,7 +79,7 @@ class LoadField: long_name: str short_name: str module_name: str - input_geoid_tract_field_name: str load_fields: List[LoadField] + input_geoid_tract_field_name: Optional[str] = None datasets: List[Dataset] diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/conftest.py b/data/data-pipeline/data_pipeline/etl/score/tests/conftest.py index 8baa56fb4..8353869d2 100644 --- a/data/data-pipeline/data_pipeline/etl/score/tests/conftest.py +++ b/data/data-pipeline/data_pipeline/etl/score/tests/conftest.py @@ -5,7 +5,8 @@ import pandas as pd import pytest from data_pipeline import config -from data_pipeline.etl.score import etl_score_post, tests +from data_pipeline.etl.score import etl_score_post +from data_pipeline.etl.score import tests from data_pipeline.etl.score.etl_score_post import PostScoreETL diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv index 039230944..e8b6c06a2 100644 --- a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv +++ b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/score_data_initial.csv @@ -1,3 +1,3 @@ -GEOID10_TRACT,Persistent Poverty Census Tract,Housing burden (percent),Total population,Median household income (% of state median household income),Current asthma among adults aged greater than or equal to 18 years,Coronary heart disease among adults aged greater than or equal to 18 years,Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years,Current lack of health insurance among adults aged 18-64 years,Diagnosed diabetes among adults aged greater than or equal to 18 years,Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years,Percent of individuals < 100% Federal Poverty Line,Percent of individuals < 150% Federal Poverty Line,Percent of individuals below 200% Federal Poverty Line,Area Median Income (State or metropolitan),Median household income in the past 12 months,Energy burden,FEMA Risk Index Expected Annual Loss Score,Urban Heuristic Flag,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter exposure,PM2.5 in the air,Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to hazardous waste sites,Proximity to NPL sites,Wastewater discharge,Percent pre-1960s housing (lead paint indicator),Individuals under 5 years old,Individuals over 64 years old,Linguistic isolation (percent),Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Percent individuals age 25 or over with less than high school degree,Unemployment (percent),Median value ($) of owner-occupied housing units,Percent enrollment in college or graduate school,Percent of population not currently enrolled in college or graduate school,Expected building loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected population loss rate (Natural Hazards Risk Index),Percent individuals age 25 or over with less than high school degree in 2009,Percentage households below 100% of federal poverty line in 2009,Unemployment (percent) in 2009,Unemployment (percent) in 2010,Percent of individuals less than 100% Federal Poverty Line in 2010,Total population in 2009,Summer days above 90F,Percent low access to healthy food,Percent impenetrable surface areas,Contains agricultural value,Third grade reading proficiency,Median household income as a percent of area median income,Life expectancy (years),Median household income as a percent of territory median income in 2009,Housing burden (percent) (percentile),Housing burden (percent) (value urban only),Housing burden (percent) (percentile urban only),Housing burden (percent) (value rural only),Housing burden (percent) (percentile rural only),Housing burden (percent) (percentile urban/rural),Housing burden (percent) (min-max normalized),Total population (percentile),Total population (value urban only),Total population (percentile urban only),Total population (value rural only),Total population (percentile rural only),Total population (percentile urban/rural),Total population (min-max normalized),Median household income (% of state median household income) (percentile),Median household income (% of state median household income) (value urban only),Median household income (% of state median household income) (percentile urban only),Median household income (% of state median household income) (value rural only),Median household income (% of state median household income) (percentile rural only),Median household income (% of state median household income) (percentile urban/rural),Median household income (% of state median household income) (min-max normalized),Current asthma among adults aged greater than or equal to 18 years (percentile),Current asthma among adults aged greater than or equal to 18 years (value urban only),Current asthma among adults aged greater than or equal to 18 years (percentile urban only),Current asthma among adults aged greater than or equal to 18 years (value rural only),Current asthma among adults aged greater than or equal to 18 years (percentile rural only),Current asthma among adults aged greater than or equal to 18 years (percentile urban/rural),Current asthma among adults aged greater than or equal to 18 years (min-max normalized),Coronary heart disease among adults aged greater than or equal to 18 years (percentile),Coronary heart disease among adults aged greater than or equal to 18 years (value urban only),Coronary heart disease among adults aged greater than or equal to 18 years (percentile urban only),Coronary heart disease among adults aged greater than or equal to 18 years (value rural only),Coronary heart disease among adults aged greater than or equal to 18 years (percentile rural only),Coronary heart disease among adults aged greater than or equal to 18 years (percentile urban/rural),Coronary heart disease among adults aged greater than or equal to 18 years (min-max normalized),Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years (percentile),Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years (value urban only),Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years (percentile urban only),Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years (value rural only),Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years (percentile rural only),Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years (percentile urban/rural),Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years (min-max normalized),Current lack of health insurance among adults aged 18-64 years (percentile),Current lack of health insurance among adults aged 18-64 years (value urban only),Current lack of health insurance among adults aged 18-64 years (percentile urban only),Current lack of health insurance among adults aged 18-64 years (value rural only),Current lack of health insurance among adults aged 18-64 years (percentile rural only),Current lack of health insurance among adults aged 18-64 years (percentile urban/rural),Current lack of health insurance among adults aged 18-64 years (min-max normalized),Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile),Diagnosed diabetes among adults aged greater than or equal to 18 years (value urban only),Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile urban only),Diagnosed diabetes among adults aged greater than or equal to 18 years (value rural only),Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile rural only),Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile urban/rural),Diagnosed diabetes among adults aged greater than or equal to 18 years (min-max normalized),Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years (percentile),Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years (value urban only),Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years (percentile urban only),Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years (value rural only),Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years (percentile rural only),Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years (percentile urban/rural),Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years (min-max normalized),Percent of individuals < 100% Federal Poverty Line (percentile),Percent of individuals < 100% Federal Poverty Line (value urban only),Percent of individuals < 100% Federal Poverty Line (percentile urban only),Percent of individuals < 100% Federal Poverty Line (value rural only),Percent of individuals < 100% Federal Poverty Line (percentile rural only),Percent of individuals < 100% Federal Poverty Line (percentile urban/rural),Percent of individuals < 100% Federal Poverty Line (min-max normalized),Percent of individuals < 150% Federal Poverty Line (percentile),Percent of individuals < 150% Federal Poverty Line (value urban only),Percent of individuals < 150% Federal Poverty Line (percentile urban only),Percent of individuals < 150% Federal Poverty Line (value rural only),Percent of individuals < 150% Federal Poverty Line (percentile rural only),Percent of individuals < 150% Federal Poverty Line (percentile urban/rural),Percent of individuals < 150% Federal Poverty Line (min-max normalized),Percent of individuals below 200% Federal Poverty Line (percentile),Percent of individuals below 200% Federal Poverty Line (value urban only),Percent of individuals below 200% Federal Poverty Line (percentile urban only),Percent of individuals below 200% Federal Poverty Line (value rural only),Percent of individuals below 200% Federal Poverty Line (percentile rural only),Percent of individuals below 200% Federal Poverty Line (percentile urban/rural),Percent of individuals below 200% Federal Poverty Line (min-max normalized),Area Median Income (State or metropolitan) (percentile),Area Median Income (State or metropolitan) (value urban only),Area Median Income (State or metropolitan) (percentile urban only),Area Median Income (State or metropolitan) (value rural only),Area Median Income (State or metropolitan) (percentile rural only),Area Median Income (State or metropolitan) (percentile urban/rural),Area Median Income (State or metropolitan) (min-max normalized),Median household income in the past 12 months (percentile),Median household income in the past 12 months (value urban only),Median household income in the past 12 months (percentile urban only),Median household income in the past 12 months (value rural only),Median household income in the past 12 months (percentile rural only),Median household income in the past 12 months (percentile urban/rural),Median household income in the past 12 months (min-max normalized),Energy burden (percentile),Energy burden (value urban only),Energy burden (percentile urban only),Energy burden (value rural only),Energy burden (percentile rural only),Energy burden (percentile urban/rural),Energy burden (min-max normalized),FEMA Risk Index Expected Annual Loss Score (percentile),FEMA Risk Index Expected Annual Loss Score (value urban only),FEMA Risk Index Expected Annual Loss Score (percentile urban only),FEMA Risk Index Expected Annual Loss Score (value rural only),FEMA Risk Index Expected Annual Loss Score (percentile rural only),FEMA Risk Index Expected Annual Loss Score (percentile urban/rural),FEMA Risk Index Expected Annual Loss Score (min-max normalized),Urban Heuristic Flag (percentile),Urban Heuristic Flag (value urban only),Urban Heuristic Flag (percentile urban only),Urban Heuristic Flag (value rural only),Urban Heuristic Flag (percentile rural only),Urban Heuristic Flag (percentile urban/rural),Urban Heuristic Flag (min-max normalized),Air toxics cancer risk (percentile),Air toxics cancer risk (value urban only),Air toxics cancer risk (percentile urban only),Air toxics cancer risk (value rural only),Air toxics cancer risk (percentile rural only),Air toxics cancer risk (percentile urban/rural),Air toxics cancer risk (min-max normalized),Respiratory hazard index (percentile),Respiratory hazard index (value urban only),Respiratory hazard index (percentile urban only),Respiratory hazard index (value rural only),Respiratory hazard index (percentile rural only),Respiratory hazard index (percentile urban/rural),Respiratory hazard index (min-max normalized),Diesel particulate matter exposure (percentile),Diesel particulate matter exposure (value urban only),Diesel particulate matter exposure (percentile urban only),Diesel particulate matter exposure (value rural only),Diesel particulate matter exposure (percentile rural only),Diesel particulate matter exposure (percentile urban/rural),Diesel particulate matter exposure (min-max normalized),PM2.5 in the air (percentile),PM2.5 in the air (value urban only),PM2.5 in the air (percentile urban only),PM2.5 in the air (value rural only),PM2.5 in the air (percentile rural only),PM2.5 in the air (percentile urban/rural),PM2.5 in the air (min-max normalized),Ozone (percentile),Ozone (value urban only),Ozone (percentile urban only),Ozone (value rural only),Ozone (percentile rural only),Ozone (percentile urban/rural),Ozone (min-max normalized),Traffic proximity and volume (percentile),Traffic proximity and volume (value urban only),Traffic proximity and volume (percentile urban only),Traffic proximity and volume (value rural only),Traffic proximity and volume (percentile rural only),Traffic proximity and volume (percentile urban/rural),Traffic proximity and volume (min-max normalized),Proximity to Risk Management Plan (RMP) facilities (percentile),Proximity to Risk Management Plan (RMP) facilities (value urban only),Proximity to Risk Management Plan (RMP) facilities (percentile urban only),Proximity to Risk Management Plan (RMP) facilities (value rural only),Proximity to Risk Management Plan (RMP) facilities (percentile rural only),Proximity to Risk Management Plan (RMP) facilities (percentile urban/rural),Proximity to Risk Management Plan (RMP) facilities (min-max normalized),Proximity to hazardous waste sites (percentile),Proximity to hazardous waste sites (value urban only),Proximity to hazardous waste sites (percentile urban only),Proximity to hazardous waste sites (value rural only),Proximity to hazardous waste sites (percentile rural only),Proximity to hazardous waste sites (percentile urban/rural),Proximity to hazardous waste sites (min-max normalized),Proximity to NPL sites (percentile),Proximity to NPL sites (value urban only),Proximity to NPL sites (percentile urban only),Proximity to NPL sites (value rural only),Proximity to NPL sites (percentile rural only),Proximity to NPL sites (percentile urban/rural),Proximity to NPL sites (min-max normalized),Wastewater discharge (percentile),Wastewater discharge (value urban only),Wastewater discharge (percentile urban only),Wastewater discharge (value rural only),Wastewater discharge (percentile rural only),Wastewater discharge (percentile urban/rural),Wastewater discharge (min-max normalized),Percent pre-1960s housing (lead paint indicator) (percentile),Percent pre-1960s housing (lead paint indicator) (value urban only),Percent pre-1960s housing (lead paint indicator) (percentile urban only),Percent pre-1960s housing (lead paint indicator) (value rural only),Percent pre-1960s housing (lead paint indicator) (percentile rural only),Percent pre-1960s housing (lead paint indicator) (percentile urban/rural),Percent pre-1960s housing (lead paint indicator) (min-max normalized),Individuals under 5 years old (percentile),Individuals under 5 years old (value urban only),Individuals under 5 years old (percentile urban only),Individuals under 5 years old (value rural only),Individuals under 5 years old (percentile rural only),Individuals under 5 years old (percentile urban/rural),Individuals under 5 years old (min-max normalized),Individuals over 64 years old (percentile),Individuals over 64 years old (value urban only),Individuals over 64 years old (percentile urban only),Individuals over 64 years old (value rural only),Individuals over 64 years old (percentile rural only),Individuals over 64 years old (percentile urban/rural),Individuals over 64 years old (min-max normalized),Linguistic isolation (percent) (percentile),Linguistic isolation (percent) (value urban only),Linguistic isolation (percent) (percentile urban only),Linguistic isolation (percent) (value rural only),Linguistic isolation (percent) (percentile rural only),Linguistic isolation (percent) (percentile urban/rural),Linguistic isolation (percent) (min-max normalized),Percent of households in linguistic isolation (percentile),Percent of households in linguistic isolation (value urban only),Percent of households in linguistic isolation (percentile urban only),Percent of households in linguistic isolation (value rural only),Percent of households in linguistic isolation (percentile rural only),Percent of households in linguistic isolation (percentile urban/rural),Percent of households in linguistic isolation (min-max normalized),Poverty (Less than 200% of federal poverty line) (percentile),Poverty (Less than 200% of federal poverty line) (value urban only),Poverty (Less than 200% of federal poverty line) (percentile urban only),Poverty (Less than 200% of federal poverty line) (value rural only),Poverty (Less than 200% of federal poverty line) (percentile rural only),Poverty (Less than 200% of federal poverty line) (percentile urban/rural),Poverty (Less than 200% of federal poverty line) (min-max normalized),Percent individuals age 25 or over with less than high school degree (percentile),Percent individuals age 25 or over with less than high school degree (value urban only),Percent individuals age 25 or over with less than high school degree (percentile urban only),Percent individuals age 25 or over with less than high school degree (value rural only),Percent individuals age 25 or over with less than high school degree (percentile rural only),Percent individuals age 25 or over with less than high school degree (percentile urban/rural),Percent individuals age 25 or over with less than high school degree (min-max normalized),Unemployment (percent) (percentile),Unemployment (percent) (value urban only),Unemployment (percent) (percentile urban only),Unemployment (percent) (value rural only),Unemployment (percent) (percentile rural only),Unemployment (percent) (percentile urban/rural),Unemployment (percent) (min-max normalized),Median value ($) of owner-occupied housing units (percentile),Median value ($) of owner-occupied housing units (value urban only),Median value ($) of owner-occupied housing units (percentile urban only),Median value ($) of owner-occupied housing units (value rural only),Median value ($) of owner-occupied housing units (percentile rural only),Median value ($) of owner-occupied housing units (percentile urban/rural),Median value ($) of owner-occupied housing units (min-max normalized),Percent enrollment in college or graduate school (percentile),Percent enrollment in college or graduate school (value urban only),Percent enrollment in college or graduate school (percentile urban only),Percent enrollment in college or graduate school (value rural only),Percent enrollment in college or graduate school (percentile rural only),Percent enrollment in college or graduate school (percentile urban/rural),Percent enrollment in college or graduate school (min-max normalized),Percent of population not currently enrolled in college or graduate school (percentile),Percent of population not currently enrolled in college or graduate school (value urban only),Percent of population not currently enrolled in college or graduate school (percentile urban only),Percent of population not currently enrolled in college or graduate school (value rural only),Percent of population not currently enrolled in college or graduate school (percentile rural only),Percent of population not currently enrolled in college or graduate school (percentile urban/rural),Percent of population not currently enrolled in college or graduate school (min-max normalized),Expected building loss rate (Natural Hazards Risk Index) (percentile),Expected building loss rate (Natural Hazards Risk Index) (value urban only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban only),Expected building loss rate (Natural Hazards Risk Index) (value rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile rural only),Expected building loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected building loss rate (Natural Hazards Risk Index) (min-max normalized),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile),Expected agricultural loss rate (Natural Hazards Risk Index) (value urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban only),Expected agricultural loss rate (Natural Hazards Risk Index) (value rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile rural only),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected agricultural loss rate (Natural Hazards Risk Index) (min-max normalized),Expected population loss rate (Natural Hazards Risk Index) (percentile),Expected population loss rate (Natural Hazards Risk Index) (value urban only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban only),Expected population loss rate (Natural Hazards Risk Index) (value rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile rural only),Expected population loss rate (Natural Hazards Risk Index) (percentile urban/rural),Expected population loss rate (Natural Hazards Risk Index) (min-max normalized),Percent individuals age 25 or over with less than high school degree in 2009 (percentile),Percent individuals age 25 or over with less than high school degree in 2009 (value urban only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban only),Percent individuals age 25 or over with less than high school degree in 2009 (value rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile rural only),Percent individuals age 25 or over with less than high school degree in 2009 (percentile urban/rural),Percent individuals age 25 or over with less than high school degree in 2009 (min-max normalized),Percentage households below 100% of federal poverty line in 2009 (percentile),Percentage households below 100% of federal poverty line in 2009 (value urban only),Percentage households below 100% of federal poverty line in 2009 (percentile urban only),Percentage households below 100% of federal poverty line in 2009 (value rural only),Percentage households below 100% of federal poverty line in 2009 (percentile rural only),Percentage households below 100% of federal poverty line in 2009 (percentile urban/rural),Percentage households below 100% of federal poverty line in 2009 (min-max normalized),Unemployment (percent) in 2009 (percentile),Unemployment (percent) in 2009 (value urban only),Unemployment (percent) in 2009 (percentile urban only),Unemployment (percent) in 2009 (value rural only),Unemployment (percent) in 2009 (percentile rural only),Unemployment (percent) in 2009 (percentile urban/rural),Unemployment (percent) in 2009 (min-max normalized),Unemployment (percent) in 2010 (percentile),Unemployment (percent) in 2010 (value urban only),Unemployment (percent) in 2010 (percentile urban only),Unemployment (percent) in 2010 (value rural only),Unemployment (percent) in 2010 (percentile rural only),Unemployment (percent) in 2010 (percentile urban/rural),Unemployment (percent) in 2010 (min-max normalized),Percent of individuals less than 100% Federal Poverty Line in 2010 (percentile),Percent of individuals less than 100% Federal Poverty Line in 2010 (value urban only),Percent of individuals less than 100% Federal Poverty Line in 2010 (percentile urban only),Percent of individuals less than 100% Federal Poverty Line in 2010 (value rural only),Percent of individuals less than 100% Federal Poverty Line in 2010 (percentile rural only),Percent of individuals less than 100% Federal Poverty Line in 2010 (percentile urban/rural),Percent of individuals less than 100% Federal Poverty Line in 2010 (min-max normalized),Total population in 2009 (percentile),Total population in 2009 (value urban only),Total population in 2009 (percentile urban only),Total population in 2009 (value rural only),Total population in 2009 (percentile rural only),Total population in 2009 (percentile urban/rural),Total population in 2009 (min-max normalized),Summer days above 90F (percentile),Summer days above 90F (value urban only),Summer days above 90F (percentile urban only),Summer days above 90F (value rural only),Summer days above 90F (percentile rural only),Summer days above 90F (percentile urban/rural),Summer days above 90F (min-max normalized),Percent low access to healthy food (percentile),Percent low access to healthy food (value urban only),Percent low access to healthy food (percentile urban only),Percent low access to healthy food (value rural only),Percent low access to healthy food (percentile rural only),Percent low access to healthy food (percentile urban/rural),Percent low access to healthy food (min-max normalized),Percent impenetrable surface areas (percentile),Percent impenetrable surface areas (value urban only),Percent impenetrable surface areas (percentile urban only),Percent impenetrable surface areas (value rural only),Percent impenetrable surface areas (percentile rural only),Percent impenetrable surface areas (percentile urban/rural),Percent impenetrable surface areas (min-max normalized),Contains agricultural value (percentile),Contains agricultural value (value urban only),Contains agricultural value (percentile urban only),Contains agricultural value (value rural only),Contains agricultural value (percentile rural only),Contains agricultural value (percentile urban/rural),Contains agricultural value (min-max normalized),Low third grade reading proficiency (percentile),Third grade reading proficiency (value urban only),Low third grade reading proficiency (percentile urban only),Third grade reading proficiency (value rural only),Low third grade reading proficiency (percentile rural only),Low third grade reading proficiency (percentile urban/rural),Low median household income as a percent of area median income (percentile),Median household income as a percent of area median income (value urban only),Low median household income as a percent of area median income (percentile urban only),Median household income as a percent of area median income (value rural only),Low median household income as a percent of area median income (percentile rural only),Low median household income as a percent of area median income (percentile urban/rural),Low life expectancy (percentile),Life expectancy (years) (value urban only),Low life expectancy (percentile urban only),Life expectancy (years) (value rural only),Low life expectancy (percentile rural only),Low life expectancy (percentile urban/rural),Low median household income as a percent of territory median income in 2009 (percentile),Median household income as a percent of territory median income in 2009 (value urban only),Low median household income as a percent of territory median income in 2009 (percentile urban only),Median household income as a percent of territory median income in 2009 (value rural only),Low median household income as a percent of territory median income in 2009 (percentile rural only),Low median household income as a percent of territory median income in 2009 (percentile urban/rural),Total population in 2009 (island areas) and 2019 (states and PR),Score A,Score B,Socioeconomic Factors,Sensitive populations,Environmental effects,Exposures,Pollution Burden,Population Characteristics,Score C,Score D,Score E,"Low AMI, Low HS graduation",Meets socioeconomic criteria,Meets burden criteria,Score F (communities),Score G (communities),Score G,Score G (percentile),Score H (communities),Score H,Score I (communities),Score I,Score I (percentile),NMTC (communities),Score K (communities),Total threshold criteria exceeded,Is low income?,Greater than or equal to the 90th percentile for expected population loss rate and is low income?,Greater than or equal to the 90th percentile for expected agriculture loss rate and is low income?,Greater than or equal to the 90th percentile for expected building loss rate and is low income?,Climate Factor (Definition L),Greater than or equal to the 90th percentile for PM2.5 exposure and is low income?,Greater than or equal to the 90th percentile for energy burden and is low income?,Energy Factor (Definition L),Greater than or equal to the 90th percentile for diesel particulate matter and is low income?,Greater than or equal to the 90th percentile for traffic proximity and is low income?,Transportation Factor (Definition L),Greater than or equal to the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income?,Greater than or equal to the 90th percentile for housing burden and is low income?,Housing Factor (Definition L),Greater than or equal to the 90th percentile for proximity to RMP sites and is low income?,Greater than or equal to the 90th percentile for proximity to superfund sites and is low income?,Greater than or equal to the 90th percentile for proximity to hazardous waste facilities and is low income?,Pollution Factor (Definition L),Greater than or equal to the 90th percentile for wastewater discharge and is low income?,Water Factor (Definition L),Greater than or equal to the 90th percentile for diabetes and is low income?,Greater than or equal to the 90th percentile for asthma and is low income?,Greater than or equal to the 90th percentile for heart disease and is low income?,Greater than or equal to the 90th percentile for low life expectancy and is low income?,Health Factor (Definition L),Low high school education,Greater than or equal to the 90th percentile for households in linguistic isolation and has low HS education?,Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS education?,Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education?,Greater than or equal to the 90th percentile for unemployment and has low HS education?,Unemployment (percent) in 2009 (island areas) and 2010 (states and PR),Unemployment (percent) in 2009 exceeds 90th percentile,Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR),Percentage households below 100% of federal poverty line in 2009 exceeds 90th percentile,Low median household income as a percent of territory median income in 2009 exceeds 90th percentile,Low high school education in 2009 (island areas),Greater than or equal to the 90th percentile for unemployment and has low HS education in 2009 (island areas)?,Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas)?,Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)?,Workforce Factor (Definition L),Definition L (communities),Any Non-Workforce Factor (Definition L),Definition L (percentile),Exceeds FPL200 threshold,Percent higher ed enrollment rate is less than 20%,Is low income and has a low percent of higher ed students?,Greater than or equal to the 90th percentile for expected population loss,Greater than or equal to the 90th percentile for expected agricultural loss,Greater than or equal to the 90th percentile for expected building loss,At least one climate threshold exceeded,"Greater than or equal to the 90th percentile for expected population loss rate, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for expected agriculture loss rate, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for expected building loss rate, is low income, and has a low percent of higher ed students?",Climate Factor (Definition M),Greater than or equal to the 90th percentile for energy burden,Greater than or equal to the 90th percentile for pm2.5 exposure,At least one energy threshold exceeded,"Greater than or equal to the 90th percentile for PM2.5 exposure, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for energy burden, is low income, and has a low percent of higher ed students?",Energy Factor (Definition M),Greater than or equal to the 90th percentile for diesel particulate matter,Greater than or equal to the 90th percentile for traffic proximity,At least one traffic threshold exceeded,"Greater than or equal to the 90th percentile for diesel particulate matter, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for traffic proximity, is low income, and has a low percent of higher ed students?",Transportation Factor (Definition M),Greater than or equal to the 90th percentile for lead paint and the median house value is less than 90th percentile,Greater than or equal to the 90th percentile for housing burden,At least one housing threshold exceeded,"Greater than or equal to the 90th percentile for lead paint, the median house value is less than 90th percentile, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for housing burden, is low income, and has a low percent of higher ed students?",Housing Factor (Definition M),Greater than or equal to the 90th percentile for RMP proximity,Greater than or equal to the 90th percentile for NPL (superfund sites) proximity,Greater than or equal to the 90th percentile for proximity to hazardous waste sites,At least one pollution threshold exceeded,"Greater than or equal to the 90th percentile for proximity to RMP sites, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for proximity to superfund sites, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for proximity to hazardous waste facilities, is low income, and has a low percent of higher ed students?",Pollution Factor (Definition M),Greater than or equal to the 90th percentile for wastewater discharge,At least one water threshold exceeded,"Greater than or equal to the 90th percentile for wastewater discharge, is low income, and has a low percent of higher ed students?",Water Factor (Definition M),Greater than or equal to the 90th percentile for diabetes,Greater than or equal to the 90th percentile for asthma,Greater than or equal to the 90th percentile for heart disease,Greater than or equal to the 90th percentile for low life expectancy,At least one health threshold exceeded,"Greater than or equal to the 90th percentile for diabetes, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for asthma, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for heart disease, is low income, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for low life expectancy, is low income, and has a low percent of higher ed students?",Health Factor (Definition M),Low high school education and low percent of higher ed students,Greater than or equal to the 90th percentile for unemployment,Greater than or equal to the 90th percentile for low median household income as a percent of area median income,Greater than or equal to the 90th percentile for households in linguistic isolation,Greater than or equal to the 90th percentile for households at or below 100% federal poverty level,"Greater than or equal to the 90th percentile for households in linguistic isolation, has low HS attainment, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for households at or below 100% federal poverty level, has low HS attainment, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for low median household income as a percent of area median income, has low HS attainment, and has a low percent of higher ed students?","Greater than or equal to the 90th percentile for unemployment, has low HS attainment, and has a low percent of higher ed students?",Unemployment (percent) in 2009 for island areas (percentile),Percentage households below 100% of federal poverty line in 2009 for island areas (percentile),At least one workforce threshold exceeded,Both workforce socioeconomic indicators exceeded,Workforce Factor (Definition M),Total categories exceeded,Definition M (communities),Any Non-Workforce Factor (Definition M),Definition M (percentile),Score A (percentile),Score A (top 25th percentile),Score A (top 30th percentile),Score A (top 35th percentile),Score A (top 40th percentile),Score B (percentile),Score B (top 25th percentile),Score B (top 30th percentile),Score B (top 35th percentile),Score B (top 40th percentile),Score C (percentile),Score C (top 25th percentile),Score C (top 30th percentile),Score C (top 35th percentile),Score C (top 40th percentile),Score D (percentile),Score D (top 25th percentile),Score D (top 30th percentile),Score D (top 35th percentile),Score D (top 40th percentile),Score E (percentile),Score E (top 25th percentile),Score E (top 30th percentile),Score E (top 35th percentile),Score E (top 40th percentile) -01073001100,True,0.2752043596730245,4897.0,0.7327449738800064,11.2,7.2,6.7,16.6,19.3,15.1,0.150375939849624,0.318796992481203,0.3744360902255639,57447.0,37030.0,0.049,18.7674524286,1.0,51.1530304943,0.735568574566,0.63998588,10.3951975342,39.404630719,253.995131498,2.03499777769,0.708723792992,0.134193041308,1.0556674669,0.205868653936,0.0308352052277,0.185011231366,0.0,0.0,0.407205697528,0.0821917808219178,0.0092071611253196,85500.0,0.0890751899397432,0.9109248100602568,0.0004047858,5.6328e-05,2.8039e-06,,,,0.1536983669548511,0.3189099613330878,,62.666668,0.068036923,0.171,1.0,58.143433,0.6445941476491375,70.3,,0.6466760729305078,0.2752043596730245,0.5700318443928049,,,0.5700318443928049,0.2752043596730245,0.6512411994432508,4897.0,0.6248587667340021,,,0.6248587667340021,0.0696873532467162,0.2601978513507951,0.7327449738800064,0.2827993864924948,,,0.2827993864924948,0.1434712737274766,0.8509696039125366,11.2,0.835724928163468,,,0.835724928163468,0.3795180722891565,0.7264920810941454,7.2,0.7844637979353648,,,0.7844637979353648,0.1875,0.4789587420739856,6.7,0.5678012699989358,,,0.5678012699989358,0.303921568627451,0.6191105803406409,16.6,0.6018127638440527,,,0.6018127638440527,0.2094488188976378,0.965388552418323,19.3,0.9599666536592288,,,0.9599666536592288,0.4275862068965517,0.697012994398476,15.1,0.7279967363155841,,,0.7279967363155841,0.3440233236151603,0.62043226838371,0.150375939849624,0.6145691950863328,,,0.6145691950863328,0.150375939849624,0.7319580582099551,0.318796992481203,0.7209861695730607,,,0.7209861695730607,0.318796992481203,0.6304939233619051,0.3744360902255639,0.6277982991151962,,,0.6277982991151962,0.3744360902255639,0.3145069836211475,57447.0,0.2657396925099514,,,0.2657396925099514,0.362059663131873,0.1524419513666973,37030.0,0.1569958812277043,,,0.1569958812277043,0.1395180645004889,0.864954517474865,0.049,0.9005173954895489,,,0.9005173954895489,0.0037065052950075,0.6038301323911519,18.7674524286,0.6383816255626487,,,0.6383816255626487,0.1876745242859999,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9847958474680182,51.1530304943,0.9819551446670092,,,0.9819551446670092,0.0300384933188293,0.968365553602812,0.735568574566,0.962352336928608,,,0.962352336928608,0.1696726613313424,0.7632321085543794,0.63998588,0.70386920047937,,,0.70386920047937,0.1053235274194042,0.928945948563286,10.3951975342,0.914819538763832,,,0.914819538763832,0.5130755332417333,0.2507228532296667,39.404630719,0.2360646695853011,,,0.2360646695853011,0.2834163202031902,0.4608804184722397,253.995131498,0.3487028727629068,,,0.3487028727629068,0.0081194347824311,0.9022445642626452,2.03499777769,0.8805423357414318,,,0.8805423357414318,0.1192079731904979,0.4244672369292306,0.708723792992,0.2870715924264731,,,0.2870715924264731,0.0016327034632494,0.753733057661383,0.134193041308,0.7050707022289178,,,0.7050707022289178,0.0172289593763426,0.9223869977156124,1.0556674669,0.9078447963253958,,,0.9078447963253958,9.412822248180045e-06,0.4454669531492817,0.205868653936,0.4334577327353032,,,0.4334577327353032,0.205868653936,0.1202416183565086,0.0308352052277,0.108484267470127,,,0.108484267470127,0.0793595720750642,0.695774381427278,0.185011231366,0.7452494265073442,,,0.7452494265073442,0.185011231366,0.1272208772721677,0.0,0.0997988895955446,,,0.0997988895955446,0.0,0.1284712368751773,0.0,0.0986150580340329,,,0.0986150580340329,0.0,0.668247726382076,0.407205697528,0.6576848015886603,,,0.6576848015886603,0.407205697528,0.4189274017467249,0.0821917808219178,0.4443872826422471,,,0.4443872826422471,0.0821917808219178,0.0297871177547618,0.0092071611253196,0.0285699569046924,,,0.0285699569046924,0.0092071611253196,0.1130659551404986,85500.0,0.1076951366876236,,,0.1076951366876236,0.0379401628742081,0.7459685121012851,0.0890751899397432,0.6989610478672336,,,0.6989610478672336,0.0890751899397432,0.2540451308357663,0.9109248100602568,0.3010560965573995,,,0.3010560965573995,0.9109248100602568,0.7846412062513758,0.0004047858,0.82138883658833,,,0.82138883658833,0.01597287904858,0.2153147384849333,5.6328e-05,0.5639836382618221,,,0.5639836382618221,0.0001189507553306,0.6143028498159407,2.8039e-06,0.6689315237296548,,,0.6689315237296548,0.0013204531501148,,,,,,,,,,,,,,,,,,,,,,0.9349594607528132,0.1536983669548511,0.9315960352498582,,,0.9315960352498582,0.1536983669548511,0.8950599559730369,0.3189099613330878,0.8870754376621368,,,0.8870754376621368,0.3189099613330878,,,,,,,,0.7537922665342821,62.666668,0.7585193484443679,,,0.7585193484443679,0.4423529401799308,0.8019598155467721,0.068036923,0.7905320987865615,,,0.7905320987865615,0.068036923,0.4126953421856217,0.171,0.2701910981682835,,,0.2701910981682835,0.1775700879261655,0.6564635202573585,1.0,0.6917369799243527,,,0.6917369799243527,1.0,0.990724418702258,58.143433,0.9890918535191758,,,0.9890918535191758,0.8218135517196475,0.6445941476491375,0.7952314423324387,,,0.7952314423324387,0.97046998263836,70.3,0.9652438793658,,,0.9652438793658,,,,,,,4897.0,0.5435875640644005,0.2799472837363994,0.3784219111378495,0.3144122923519848,0.6896597619436307,0.7261571216484003,0.7139913350801438,0.3464171017449171,0.2473388089694474,0.1547617998296523,0.3781718392172476,False,True,True,True,True,1,1,True,1,True,1,1,True,True,0,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,0.1536983669548511,False,0.3189099613330878,False,False,False,False,False,False,False,False,False,0,False,True,False,False,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,True,False,False,True,False,False,False,False,True,True,False,False,True,False,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,False,,,False,False,False,0,False,False,0,0.5532898204078324,False,False,False,False,0.5490856986899564,False,False,False,False,0.5480683083104825,False,False,False,False,0.5438440021080796,False,False,False,False,0.3320495668977446,False,False,False,False -01073001400,True,0.1823529411764705,1906.0,0.7136694633528574,11.1,9.1,7.3,21.4,22.4,17.4,0.2816032887975334,0.3679342240493319,0.4835560123329907,57447.0,36066.0,0.07,17.3011023381,1.0,54.6950518653,0.76056054321,0.9098084377,10.498270137,39.3676601307,3015.87969265,1.81382525188,3.24085850684,0.214095348703,0.365101735929,0.628839590444,0.0582371458552,0.178908709339,0.0245098039215686,0.0165289256198,0.425498426023,0.1742543171114599,0.1150121065375302,67800.0,0.0771549125979505,0.9228450874020494,0.0008951111,5.1282e-06,2.3791e-06,,,,0.0804953560371517,0.2950894905920146,,61.666668,0.087159691,0.34900002,1.0,93.77919,0.6278134628440127,71.0,,0.3421186011150532,0.1823529411764705,0.2730613650055943,,,0.2730613650055943,0.1823529411764705,0.0867961243766976,1906.0,0.0702656897319135,,,0.0702656897319135,0.0271235644860611,0.240302951305517,0.7136694633528574,0.2631705929998104,,,0.2631705929998104,0.1395725756430245,0.8385794307486707,11.1,0.8242488204618823,,,0.8242488204618823,0.3734939759036144,0.9217563763541756,9.1,0.934238532761006,,,0.934238532761006,0.2391304347826086,0.6048579715089994,7.3,0.6840345524850119,,,0.6840345524850119,0.3333333333333333,0.7894025988796952,21.4,0.765821774451027,,,0.765821774451027,0.2850393700787401,0.9878088657624612,22.4,0.9854641881585016,,,0.9854641881585016,0.4988505747126436,0.8447283118655634,17.4,0.8547216999538827,,,0.8547216999538827,0.411078717201166,0.8689250707460116,0.2816032887975334,0.8593419809294734,,,0.8593419809294734,0.2816032887975334,0.8013233263612626,0.3679342240493319,0.7879907224465252,,,0.7879907224465252,0.3679342240493319,0.7892247330790578,0.4835560123329907,0.7755862898376428,,,0.7755862898376428,0.4835560123329907,0.3145069836211475,57447.0,0.2657396925099514,,,0.2657396925099514,0.362059663131873,0.1404413479077805,36066.0,0.1452254984748479,,,0.1452254984748479,0.1356231464796244,0.970802270706518,0.07,0.9745685506050604,,,0.9745685506050604,0.0052950075642965,0.5282998116553705,17.3011023381,0.565061869961834,,,0.565061869961834,0.173011023381,0.5972204988211937,1.0,0.5000085573944445,,,0.5000085573944445,1.0,0.9895233034972276,54.6950518653,0.98758774182503,,,0.98758774182503,0.0324014302096176,0.9765534529502324,0.76056054321,0.9720766991953432,,,0.9720766991953432,0.1759137053158734,0.9016362174902248,0.9098084377,0.8766135935627462,,,0.8766135935627462,0.1497290027189099,0.9329441224077584,10.498270137,0.9196283911889414,,,0.9196283911889414,0.5213510451938572,0.2492010569566841,39.3676601307,0.2346340790789065,,,0.2346340790789065,0.2826912370192468,0.941127799514774,3015.87969265,0.9280004126050854,,,0.9280004126050854,0.0964083008791804,0.8815556546533155,1.81382525188,0.8555140890882322,,,0.8555140890882322,0.1062519253676046,0.7527465845056148,3.24085850684,0.6879172801040846,,,0.6879172801040846,0.0074660410167418,0.8655558708666099,0.214095348703,0.8377272571643783,,,0.8377272571643783,0.027487565893985,0.8882148073250197,0.365101735929,0.8688263024295902,,,0.8688263024295902,3.255416928678718e-06,0.8313806570181485,0.628839590444,0.7904954291779368,,,0.7904954291779368,0.628839590444,0.5164051837137336,0.0582371458552,0.4798079227582429,,,0.4798079227582429,0.1498830619032175,0.6618964608586371,0.178908709339,0.715890026363543,,,0.715890026363543,0.178908709339,0.5796575164471435,0.0245098039215686,0.5161060212798873,,,0.5161060212798873,0.0245098039215686,0.5008648531776597,0.0165289256198,0.424872462081008,,,0.424872462081008,0.0165289256198,0.6964500479723247,0.425498426023,0.6838429143698428,,,0.6838429143698428,0.425498426023,0.751664847161572,0.1742543171114599,0.7508831498439483,,,0.7508831498439483,0.1742543171114599,0.9067171316918536,0.1150121065375302,0.9060831344539256,,,0.9060831344539256,0.1150121065375302,0.0522874454542927,67800.0,0.0556119857795835,,,0.0556119857795835,0.0290456994515583,0.6434691260334525,0.0771549125979505,0.5807502400219449,,,0.5807502400219449,0.0771549125979505,0.356544516903599,0.9228450874020494,0.4192669044026882,,,0.4192669044026882,0.9228450874020494,0.9166162227602904,0.0008951111,0.9302158396521918,,,0.9302158396521918,0.0353246959378835,0.0865380767537716,5.1282e-06,0.4567081415050745,,,0.4567081415050745,1.0829485575316856e-05,0.558933421571466,2.3791e-06,0.6145407246401615,,,0.6145407246401615,0.0011202645354936,,,,,,,,,,,,,,,,,,,,,,0.6917513228236646,0.0804953560371517,0.6841770738494838,,,0.6841770738494838,0.0804953560371517,0.8737301229199994,0.2950894905920146,0.8632982287353754,,,0.8632982287353754,0.2950894905920146,,,,,,,,0.7501654807214959,61.666668,0.7551581487546324,,,0.7551581487546324,0.435294116816609,0.8647617479139218,0.087159691,0.8519741908983552,,,0.8519741908983552,0.087159691,0.6268497920495212,0.34900002,0.5359536815260283,,,0.5359536815260283,0.3624091475885,0.6564635202573585,1.0,0.6917369799243527,,,0.6917369799243527,1.0,0.9537899773356836,93.77919,0.9454938966323262,,,0.9454938966323262,0.8364273002184828,0.6278134628440127,0.81067318651421,,,0.81067318651421,0.959938777375042,71.0,0.9533526317781056,,,0.9533526317781056,,,,,,,1906.0,0.7240574475669483,0.523497018864787,0.6395630962236926,0.5859863870065047,0.8438907148737418,0.8318309921361502,0.8358508997153473,0.6127747416150986,0.5121883191018196,0.1843255189540058,0.6553216288775894,False,True,True,True,True,1,1,True,1,True,1,1,True,True,9,True,False,False,True,True,True,True,True,True,True,True,False,False,False,False,False,False,False,False,False,True,False,True,True,True,True,False,False,False,True,0.0804953560371517,False,0.2950894905920146,False,False,False,False,False,False,True,True,True,1,True,True,True,False,False,True,True,False,False,True,True,True,True,True,True,True,True,True,True,True,True,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,True,False,True,True,True,True,False,True,True,True,True,True,False,False,False,False,False,False,True,,,True,True,True,5,True,True,1,0.7460439723787516,False,True,True,True,0.7500818777292576,True,True,True,True,0.9394564656693726,True,True,True,True,0.6605181011067418,False,False,True,True,0.7347062877528682,False,True,True,True +GEOID10_TRACT,Does the tract have at least 35 acres in it?,Contains agricultural value,Names of Tribal areas within Census tract,Housing burden (percent),Share of homes with no kitchen or indoor plumbing (percent),Total population,Median household income (% of state median household income),Current asthma among adults aged greater than or equal to 18 years,Coronary heart disease among adults aged greater than or equal to 18 years,Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years,Current lack of health insurance among adults aged 18-64 years,Diagnosed diabetes among adults aged greater than or equal to 18 years,Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years,Percent of individuals < 100% Federal Poverty Line,Percent of individuals < 150% Federal Poverty Line,Percent of individuals below 200% Federal Poverty Line,Area Median Income (State or metropolitan),Median household income in the past 12 months,Energy burden,FEMA Risk Index Expected Annual Loss Score,Urban Heuristic Flag,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter exposure,PM2.5 in the air,Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to hazardous waste sites,Proximity to NPL sites,Wastewater discharge,Percent pre-1960s housing (lead paint indicator),Individuals under 5 years old,Individuals over 64 years old,Linguistic isolation (percent),Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Percent individuals age 25 or over with less than high school degree,Unemployment (percent),Median value ($) of owner-occupied housing units,Percent enrollment in college or graduate school,Percent of population not currently enrolled in college or graduate school,Expected building loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected population loss rate (Natural Hazards Risk Index),Percent individuals age 25 or over with less than high school degree in 2009,Percentage households below 100% of federal poverty line in 2009,Unemployment (percent) in 2009,Unemployment (percent) in 2010,Percent of individuals less than 100% Federal Poverty Line in 2010,Total population in 2009,Leaky underground storage tanks,DOT Travel Barriers Score,Share of properties at risk of flood in 30 years,Share of properties at risk of fire in 30 years,Share of the tract's land area that is covered by impervious surface or cropland as a percent,"Percent of individuals below 200% Federal Poverty Line, imputed and adjusted",Percent Black or African American,Percent American Indian / Alaska Native,Percent Asian,Percent Native Hawaiian or Pacific,Percent two or more races,Percent White,Percent Hispanic or Latino,Percent other races,Percent age under 10,Percent age 10 to 64,Percent age over 64,Percent of the Census tract that is within Tribal areas,Number of Tribal areas within Census tract for Alaska,Number of Tribal areas within Census tract,"Percent of the Census tract that is within Tribal areas, for display",Median household income as a percent of area median income,Life expectancy (years),Median household income as a percent of territory median income in 2009,Is there at least one abandoned mine in this census tract?,Income data has been estimated based on neighbor income,Is there at least one Formerly Used Defense Site (FUDS) in the tract?,Tract-level redlining score meets or exceeds 3.25,Identified as disadvantaged due to tribal overlap,Housing burden (percent) (percentile),Share of homes with no kitchen or indoor plumbing (percent) (percentile),Total population (percentile),Median household income (% of state median household income) (percentile),Current asthma among adults aged greater than or equal to 18 years (percentile),Coronary heart disease among adults aged greater than or equal to 18 years (percentile),Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years (percentile),Current lack of health insurance among adults aged 18-64 years (percentile),Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile),Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years (percentile),Percent of individuals < 100% Federal Poverty Line (percentile),Percent of individuals < 150% Federal Poverty Line (percentile),Percent of individuals below 200% Federal Poverty Line (percentile),Area Median Income (State or metropolitan) (percentile),Median household income in the past 12 months (percentile),Energy burden (percentile),FEMA Risk Index Expected Annual Loss Score (percentile),Urban Heuristic Flag (percentile),Air toxics cancer risk (percentile),Respiratory hazard index (percentile),Diesel particulate matter exposure (percentile),PM2.5 in the air (percentile),Ozone (percentile),Traffic proximity and volume (percentile),Proximity to Risk Management Plan (RMP) facilities (percentile),Proximity to hazardous waste sites (percentile),Proximity to NPL sites (percentile),Wastewater discharge (percentile),Percent pre-1960s housing (lead paint indicator) (percentile),Individuals under 5 years old (percentile),Individuals over 64 years old (percentile),Linguistic isolation (percent) (percentile),Percent of households in linguistic isolation (percentile),Poverty (Less than 200% of federal poverty line) (percentile),Percent individuals age 25 or over with less than high school degree (percentile),Unemployment (percent) (percentile),Median value ($) of owner-occupied housing units (percentile),Percent enrollment in college or graduate school (percentile),Percent of population not currently enrolled in college or graduate school (percentile),Expected building loss rate (Natural Hazards Risk Index) (percentile),Expected agricultural loss rate (Natural Hazards Risk Index) (percentile),Expected population loss rate (Natural Hazards Risk Index) (percentile),Percent individuals age 25 or over with less than high school degree in 2009 (percentile),Percentage households below 100% of federal poverty line in 2009 (percentile),Unemployment (percent) in 2009 (percentile),Unemployment (percent) in 2010 (percentile),Percent of individuals less than 100% Federal Poverty Line in 2010 (percentile),Total population in 2009 (percentile),Leaky underground storage tanks (percentile),DOT Travel Barriers Score (percentile),Share of properties at risk of flood in 30 years (percentile),Share of properties at risk of fire in 30 years (percentile),Share of the tract's land area that is covered by impervious surface or cropland as a percent (percentile),"Percent of individuals below 200% Federal Poverty Line, imputed and adjusted (percentile)",Percent Black or African American (percentile),Percent American Indian / Alaska Native (percentile),Percent Asian (percentile),Percent Native Hawaiian or Pacific (percentile),Percent two or more races (percentile),Percent White (percentile),Percent Hispanic or Latino (percentile),Percent other races (percentile),Percent age under 10 (percentile),Percent age 10 to 64 (percentile),Percent age over 64 (percentile),Percent of the Census tract that is within Tribal areas (percentile),Number of Tribal areas within Census tract for Alaska (percentile),Number of Tribal areas within Census tract (percentile),"Percent of the Census tract that is within Tribal areas, for display (percentile)",Percent Black or African American in 2009 (percentile),Percent American Indian / Alaska Native in 2009 (percentile),Percent Asian in 2009 (percentile),Percent Native Hawaiian or Pacific in 2009 (percentile),Percent two or more races in 2009 (percentile),Percent White in 2009 (percentile),Percent Hispanic or Latino in 2009 (percentile),Percent other races in 2009 (percentile),Low median household income as a percent of area median income (percentile),Low life expectancy (percentile),Low median household income as a percent of territory median income in 2009 (percentile),Total population in 2009 (island areas) and 2019 (states and PR),Total threshold criteria exceeded,Is low income (imputed and adjusted)?,Greater than or equal to the 90th percentile for expected population loss,Greater than or equal to the 90th percentile for expected agricultural loss,Greater than or equal to the 90th percentile for expected building loss,Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years,Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years,At least one climate threshold exceeded,Greater than or equal to the 90th percentile for expected population loss rate and is low income?,Greater than or equal to the 90th percentile for expected agriculture loss rate and is low income?,Greater than or equal to the 90th percentile for expected building loss rate and is low income?,Greater than or equal to the 90th percentile for share of properties at risk of flood in 30 years and is low income?,Greater than or equal to the 90th percentile for share of properties at risk of fire in 30 years and is low income?,Climate Factor (Definition N),Greater than or equal to the 90th percentile for energy burden,Greater than or equal to the 90th percentile for pm2.5 exposure,At least one energy threshold exceeded,Greater than or equal to the 90th percentile for PM2.5 exposure and is low income?,Greater than or equal to the 90th percentile for energy burden and is low income?,Energy Factor (Definition N),Greater than or equal to the 90th percentile for diesel particulate matter,Greater than or equal to the 90th percentile for DOT travel barriers,Greater than or equal to the 90th percentile for traffic proximity,At least one traffic threshold exceeded,Greater than or equal to the 90th percentile for diesel particulate matter and is low income?,Greater than or equal to the 90th percentile for traffic proximity and is low income?,Greater than or equal to the 90th percentile for DOT transit barriers and is low income?,Transportation Factor (Definition N),Tract-level redlining score meets or exceeds 3.25 and is low income,Greater than or equal to the 90th percentile for share of homes without indoor plumbing or a kitchen,Greater than or equal to the 90th percentile for share of homes with no kitchen or indoor plumbing and is low income?,Greater than or equal to the 90th percentile for lead paint and the median house value is less than 90th percentile,Greater than or equal to the 90th percentile for lead paint and the median house value is less than 90th percentile and is low income?,Greater than or equal to the 90th percentile for housing burden,Greater than or equal to the 90th percentile for housing burden and is low income?,Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent,Greater than or equal to the 90th percentile for share of the tract's land area that is covered by impervious surface or cropland as a percent and is low income?,At least one housing threshold exceeded,Housing Factor (Definition N),Greater than or equal to the 90th percentile for RMP proximity,Greater than or equal to the 90th percentile for NPL (superfund sites) proximity,Greater than or equal to the 90th percentile for proximity to hazardous waste sites,"Is there at least one Formerly Used Defense Site (FUDS) in the tract, where missing data is treated as False?","Is there at least one abandoned mine in this census tract, where missing data is treated as False?",At least one pollution threshold exceeded,Greater than or equal to the 90th percentile for proximity to RMP sites and is low income?,Greater than or equal to the 90th percentile for proximity to superfund sites and is low income?,Greater than or equal to the 90th percentile for proximity to hazardous waste facilities and is low income?,There is at least one abandoned mine in this census tract and the tract is low income.,There is at least one Formerly Used Defense Site (FUDS) in the tract and the tract is low income.,Pollution Factor (Definition N),Greater than or equal to the 90th percentile for wastewater discharge,Greater than or equal to the 90th percentile for leaky underwater storage tanks,Greater than or equal to the 90th percentile for wastewater discharge and is low income?,Greater than or equal to the 90th percentile for leaky underground storage tanks and is low income?,At least one water threshold exceeded,Water Factor (Definition N),Greater than or equal to the 90th percentile for diabetes,Greater than or equal to the 90th percentile for asthma,Greater than or equal to the 90th percentile for heart disease,Greater than or equal to the 90th percentile for low life expectancy,At least one health threshold exceeded,Greater than or equal to the 90th percentile for diabetes and is low income?,Greater than or equal to the 90th percentile for asthma and is low income?,Greater than or equal to the 90th percentile for heart disease and is low income?,Greater than or equal to the 90th percentile for low life expectancy and is low income?,Health Factor (Definition N),Low high school education,Greater than or equal to the 90th percentile for unemployment,Greater than or equal to the 90th percentile for low median household income as a percent of area median income,Greater than or equal to the 90th percentile for households in linguistic isolation,Greater than or equal to the 90th percentile for households at or below 100% federal poverty level,Greater than or equal to the 90th percentile for households in linguistic isolation and has low HS attainment?,Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS attainment?,Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS attainment?,Greater than or equal to the 90th percentile for unemployment and has low HS attainment?,At least one workforce threshold exceeded,Unemployment (percent) in 2009 (island areas) and 2010 (states and PR),Unemployment (percent) in 2009 for island areas (percentile),Unemployment (percent) in 2009 exceeds 90th percentile,Percentage households below 100% of federal poverty line in 2009 (island areas) and 2010 (states and PR),Percentage households below 100% of federal poverty line in 2009 for island areas (percentile),Percentage households below 100% of federal poverty line in 2009 exceeds 90th percentile,Low median household income as a percent of territory median income in 2009 exceeds 90th percentile,Low high school education in 2009 (island areas),Greater than or equal to the 90th percentile for unemployment and has low HS education in 2009 (island areas)?,Greater than or equal to the 90th percentile for households at or below 100% federal poverty level and has low HS education in 2009 (island areas)?,Greater than or equal to the 90th percentile for low median household income as a percent of area median income and has low HS education in 2009 (island areas)?,Both workforce socioeconomic indicators exceeded,Workforce Factor (Definition N),Total categories exceeded,Definition N (communities),Definition N (communities) (percentile),Meets the less stringent low income criterion for the adjacency index?,Definition N (communities) (average of neighbors),Is the tract surrounded by disadvantaged communities?,Definition N (communities) (based on adjacency index and low income alone),"Definition N community, including adjacency index tracts",Percentage of tract that is disadvantaged +01073001100,True,True,,0.2752043596730245,0.0,4781.0,0.7327449738800064,11.2,7.2,6.7,16.6,19.3,15.1,0.150375939849624,0.318796992481203,0.3744360902255639,57447.0,37030.0,0.049,18.7674524286,1.0,40.0,0.5,0.467489734286576,9.8735797260274,43.056760130719,181.621925132718,2.0427358988323,0.702342755246247,0.134193041307899,4.45238981883771,0.168806466951973,0.035557414766785,0.203932231750679,0.0,0.0,0.374436090225563,0.0821917808219178,0.0092071611253196,85500.0,0.0890751899397432,0.9109248100602568,0.0004047858,5.6328e-05,2.8039e-06,,,,0.1536983669548511,0.3189099613330878,,1.96440511031451,47.695227725,0.0754274220583305,0.6620851491786792,21.2475,0.2853609002858206,0.9682074879732272,0.0121313532733737,0.0,0.0,0.0,0.0161054172767203,0.0035557414766785,0.0,0.1344906923237816,0.6615770759255386,0.2039322317506798,,,,,0.6445941476491375,70.3,,,False,,True,,0.646637250602938,0.2159888182416136,0.6290959230020547,0.2601978513507951,0.8509877263095018,0.726480167252144,0.4790223713964701,0.6190889309231579,0.9653762462133604,0.6970048212990485,0.6204255784694491,0.7319894972922707,0.6305043487774192,0.3145069836211475,0.1524256393370651,0.8649904214559387,0.6038246858588359,0.5972204988211937,0.907050889025138,0.8818107500510934,0.8407248450166905,0.8256687748238973,0.5755269239817877,0.3919915848527349,0.9007380772142316,0.4819400886774089,0.7531091164702065,0.9619657803125694,0.3979128365956526,0.1737455390937601,0.7659646371796258,0.1287706711725437,0.1316846004109441,0.6347599221369092,0.4189065592792301,0.029797296373751,0.1130218397675614,0.7459773722926589,0.2540362752992234,0.7846382434272978,0.2153147384849333,0.6144741572412268,,,,0.9349594607528132,0.8950599559730369,,0.5210203309181356,0.4533200613827713,0.4974774332542475,0.8411474612766549,0.2685589820648203,0.6076863237481747,0.9950049813710372,0.8553628212301939,0.0982626615533689,0.4219630696163662,0.0261283146588784,0.0311301570837825,0.0475755053020894,0.0977645244496608,0.6708610265718614,0.1578889904876284,0.763719241739795,,,,,,,,,,,,,0.8218135517196475,0.970728837791148,,4781.0,0,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,True,False,False,False,False,True,False,False,False,False,False,False,True,False,False,False,False,False,True,False,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,0.1536983669548511,,False,0.3189099613330878,,False,False,False,False,False,False,False,False,0.0,False,0,True,0.8571428571428571,False,False,False,0.0 +01073001400,True,True,,0.1823529411764705,0.0047058823529411,1946.0,0.7136694633528574,11.1,9.1,7.3,21.4,22.4,17.4,0.2816032887975334,0.3679342240493319,0.4835560123329907,57447.0,36066.0,0.07,17.3011023381,1.0,40.0,0.6,0.655319095139786,9.945103013698628,43.1266823529412,3260.33374354854,1.81915896353987,3.34035680534013,0.214095348702766,0.103297800913177,0.647212543554006,0.054984583761562,0.189105858170606,0.0245098039215686,0.024509803921569,0.48355601233299,0.1742543171114599,0.1150121065375302,67800.0,0.0771549125979505,0.9228450874020494,0.0008951111,5.1282e-06,2.3791e-06,,,,0.0804953560371517,0.2950894905920146,,3.16184976454882,44.7571359825,0.2384615384615384,0.0,42.1254,0.4064010997350401,0.9167523124357656,0.0,0.0,0.0,0.0035971223021582,0.0,0.0683453237410072,0.0775950668036999,0.0853031860226104,0.7255909558067831,0.1891058581706063,,,,,0.6278134628440127,71.0,,,False,,True,,0.3420576627932471,0.5051386757290068,0.0916310695360657,0.240302951305517,0.8385931477820602,0.9217996672023666,0.6049521425625418,0.7893561645783852,0.9878045311677784,0.8447513262127914,0.8689486351950112,0.8013648049887862,0.7892483999781194,0.3145069836211475,0.1404620788058391,0.9708470169677066,0.5282933267343067,0.5972204988211937,0.907050889025138,0.9704748279855576,0.9380475509230874,0.8390650299616657,0.5827647767060159,0.9563253856942496,0.8799475505569374,0.800191954147291,0.8653347031469666,0.8431412487963854,0.8462609494971342,0.4711122526224721,0.6930355791067373,0.5867081244286861,0.5846423164269493,0.7916756785984643,0.7516347007030237,0.9067399297439892,0.0522639122516786,0.6434566620719774,0.356556985519905,0.9166150755981124,0.0865380767537716,0.5590415088078317,,,,0.6917513228236646,0.8737301229199994,,0.6417351573483292,0.3727897363582321,0.885039133873299,0.3366465235813016,0.5569693544162451,0.7880665456580186,0.9840732602732248,0.2486523003016117,0.0982626615533689,0.4219630696163662,0.0924351398195788,0.0038486209108402,0.4634108061632525,0.8246557394947661,0.1930997775442523,0.5561393692083032,0.6900904835341803,,,,,,,,,,,,,0.8364273002184828,0.9602892118901531,,1946.0,9,True,False,False,True,False,False,True,False,False,True,False,False,True,True,False,True,False,True,True,True,False,True,True,True,True,False,True,True,False,False,False,False,False,False,False,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,True,False,True,True,True,True,False,True,True,True,True,True,False,False,False,False,False,False,True,True,0.0804953560371517,,False,0.2950894905920146,,False,False,False,False,False,False,True,True,6.0,True,1,True,1.0,True,True,True,1.0 diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/state_data_initial.csv b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/state_data_initial.csv index 36913abd5..41cf47372 100644 --- a/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/state_data_initial.csv +++ b/data/data-pipeline/data_pipeline/etl/score/tests/sample_data/state_data_initial.csv @@ -1,4 +1,4 @@ fips,state_name,state_abbreviation,region,division 01,Alabama,AL,South,East South Central 02,Alaska,AK,West,Pacific -04,Arizona,AZ,West,Mountain \ No newline at end of file +04,Arizona,AZ,West,Mountain diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/downloadable_data_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/downloadable_data_expected.pkl index 56450cef6002ec4c32fec40137ff217e588675fa..4b50fff9842399e28b95a5e4ffcb7333ec966a9a 100644 GIT binary patch literal 17578 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 literal 52819 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 diff --git a/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_transformed_expected.pkl b/data/data-pipeline/data_pipeline/etl/score/tests/snapshots/score_transformed_expected.pkl index f0696bdf55117ffc1d8de6ae22d3eadad59ba71c..5d0cfb9476b37f0e9b67c9588959454c4ef1f646 100644 GIT binary patch literal 22390 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 s^%H))v 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 delta 1540 zcmZXTO-vI(6vua$meLkt`A{ID1rb?@CKWWE$k5hyTDq-E+el0#d?;AI_!1B5p~M6t zqzNXo#^}X}2lXI{Q493bUNW6hK#NizR|$t*$UCzq9t)zm}x%%?1y5jhu0D_bh4m+hG8 zL{^#HaBPCx-YJbmsv=2MEQ=&uWF?mzyJ{@sEULPK?*#!urH>kfL5j*V0=#vOryhhh`j6RFQZ|K>zr%;(lxZ2MaMvq0& zA6a27P;1smi>l{YKMfe&6{)l3e-o)cK|9dXy7E7ZsBEq8g(o|YC3D{EqOxOHQPZ?X zxb>~*K70CunBFR#%4``%hUhgLpDl5P-^yRDgwYSvjIo9P^9zqh5|$K;t(*OQ_J&s0 z&7R*y+)lN!mi@JS74Z3*U$7*>X9$bjD;Tkt@Y_m>YOj|oiEb~K>&T2{AGvLJ$)`xS z(<_gW8RrgpfIN2+Ye6)0Fh~v-Zr@O#H+ei=dN5&RY?>Y5YTc?K;Jn5&F2J6ASYmcTsX~{ w None: - logger.info("Starting data download.") - - download_file_name = ( - self.get_tmp_path() / "cdc_life_expectancy" / "usa.csv" - ) + def _download_and_prep_data( + self, file_url: str, download_file_name: pathlib.Path + ) -> pd.DataFrame: download_file_from_url( - file_url=self.FILE_URL, + file_url=file_url, download_file_name=download_file_name, verify=True, ) - self.raw_df = pd.read_csv( + df = pd.read_csv( filepath_or_buffer=download_file_name, dtype={ # The following need to remain as strings for all of their digits, not get converted to numbers. self.TRACT_INPUT_COLUMN_NAME: "string", + self.STATE_INPUT_COLUMN_NAME: "string", }, low_memory=False, ) + return df + + def extract(self) -> None: + logger.info("Starting data download.") + + all_usa_raw_df = self._download_and_prep_data( + file_url=self.USA_FILE_URL, + download_file_name=self.get_tmp_path() / "US_A.CSV", + ) + + # Check which states are missing + states_in_life_expectancy_usa_file = list( + all_usa_raw_df[self.STATE_INPUT_COLUMN_NAME].unique() + ) + + # Expect that PR, Island Areas, and Maine/Wisconsin are missing + compare_to_list_of_expected_state_fips_codes( + actual_state_fips_codes=states_in_life_expectancy_usa_file, + continental_us_expected=self.CONTINENTAL_US_EXPECTED_IN_DATA, + puerto_rico_expected=self.PUERTO_RICO_EXPECTED_IN_DATA, + island_areas_expected=self.ISLAND_AREAS_EXPECTED_IN_DATA, + additional_fips_codes_not_expected=self.STATES_MISSING_FROM_USA_FILE, + ) + + logger.info("Downloading data for Maine") + maine_raw_df = self._download_and_prep_data( + file_url=self.MAINE_FILE_URL, + download_file_name=self.get_tmp_path() / "maine.csv", + ) + + logger.info("Downloading data for Wisconsin") + wisconsin_raw_df = self._download_and_prep_data( + file_url=self.WISCONSIN_FILE_URL, + download_file_name=self.get_tmp_path() / "wisconsin.csv", + ) + + combined_df = pd.concat( + objs=[all_usa_raw_df, maine_raw_df, wisconsin_raw_df], + ignore_index=True, + verify_integrity=True, + axis=0, + ) + + states_in_combined_df = list( + combined_df[self.STATE_INPUT_COLUMN_NAME].unique() + ) + + # Expect that PR and Island Areas are the only things now missing + compare_to_list_of_expected_state_fips_codes( + actual_state_fips_codes=states_in_combined_df, + continental_us_expected=self.CONTINENTAL_US_EXPECTED_IN_DATA, + puerto_rico_expected=self.PUERTO_RICO_EXPECTED_IN_DATA, + island_areas_expected=self.ISLAND_AREAS_EXPECTED_IN_DATA, + additional_fips_codes_not_expected=[], + ) + + # Save the updated version + self.raw_df = combined_df + def transform(self) -> None: - logger.info("Starting DOE energy burden transform.") + logger.info("Starting CDC life expectancy transform.") self.output_df = self.raw_df.rename( columns={ - "e(0)": self.LIFE_EXPECTANCY_FIELD_NAME, + "e(0)": field_names.LIFE_EXPECTANCY_FIELD, self.TRACT_INPUT_COLUMN_NAME: self.GEOID_TRACT_FIELD_NAME, } ) diff --git a/data/data-pipeline/data_pipeline/etl/sources/cdc_places/etl.py b/data/data-pipeline/data_pipeline/etl/sources/cdc_places/etl.py index bc53758dc..fc5589ce2 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/cdc_places/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/cdc_places/etl.py @@ -1,20 +1,45 @@ -import pandas as pd +import typing +import pandas as pd from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger, download_file_from_url +from data_pipeline.etl.base import ValidGeoLevel from data_pipeline.score import field_names +from data_pipeline.utils import download_file_from_url +from data_pipeline.utils import get_module_logger +from data_pipeline.config import settings logger = get_module_logger(__name__) class CDCPlacesETL(ExtractTransformLoad): + NAME = "cdc_places" + GEO_LEVEL: ValidGeoLevel = ValidGeoLevel.CENSUS_TRACT + PUERTO_RICO_EXPECTED_IN_DATA = False + + CDC_GEOID_FIELD_NAME = "LocationID" + CDC_VALUE_FIELD_NAME = "Data_Value" + CDC_MEASURE_FIELD_NAME = "Measure" + def __init__(self): self.OUTPUT_PATH = self.DATA_PATH / "dataset" / "cdc_places" - self.CDC_PLACES_URL = "https://chronicdata.cdc.gov/api/views/cwsq-ngmh/rows.csv?accessType=DOWNLOAD" - self.CDC_GEOID_FIELD_NAME = "LocationID" - self.CDC_VALUE_FIELD_NAME = "Data_Value" - self.CDC_MEASURE_FIELD_NAME = "Measure" + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + self.CDC_PLACES_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "cdc_places/PLACES__Local_Data_for_Better_Health__Census_Tract_Data_2021_release.csv" + ) + else: + self.CDC_PLACES_URL = "https://chronicdata.cdc.gov/api/views/cwsq-ngmh/rows.csv?accessType=DOWNLOAD" + + self.COLUMNS_TO_KEEP: typing.List[str] = [ + self.GEOID_TRACT_FIELD_NAME, + field_names.DIABETES_FIELD, + field_names.ASTHMA_FIELD, + field_names.HEART_DISEASE_FIELD, + field_names.CANCER_FIELD, + field_names.HEALTH_INSURANCE_FIELD, + field_names.PHYS_HEALTH_NOT_GOOD_FIELD, + ] self.df: pd.DataFrame @@ -22,9 +47,7 @@ def extract(self) -> None: logger.info("Starting to download 520MB CDC Places file.") file_path = download_file_from_url( file_url=self.CDC_PLACES_URL, - download_file_name=self.get_tmp_path() - / "cdc_places" - / "census_tract.csv", + download_file_name=self.get_tmp_path() / "census_tract.csv", ) self.df = pd.read_csv( @@ -42,7 +65,6 @@ def transform(self) -> None: inplace=True, errors="raise", ) - # Note: Puerto Rico not included. self.df = self.df.pivot( index=self.GEOID_TRACT_FIELD_NAME, @@ -65,12 +87,4 @@ def transform(self) -> None: ) # Make the index (the census tract ID) a column, not the index. - self.df.reset_index(inplace=True) - - def load(self) -> None: - logger.info("Saving CDC Places Data") - - # mkdir census - self.OUTPUT_PATH.mkdir(parents=True, exist_ok=True) - - self.df.to_csv(path_or_buf=self.OUTPUT_PATH / "usa.csv", index=False) + self.output_df = self.df.reset_index() diff --git a/data/data-pipeline/data_pipeline/etl/sources/cdc_svi_index/README.md b/data/data-pipeline/data_pipeline/etl/sources/cdc_svi_index/README.md index 7eaf0b77c..7901af087 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/cdc_svi_index/README.md +++ b/data/data-pipeline/data_pipeline/etl/sources/cdc_svi_index/README.md @@ -53,7 +53,7 @@ For SVI 2018, the authors also included two adjunct variables, 1) 2014-2018 ACS **Important Notes** -1. Tracts with zero estimates for the total population (N = 645 for the U.S.) were removed during the ranking process. These tracts were added back to the SVI databases after ranking. +1. Tracts with zero estimates for the total population (N = 645 for the U.S.) were removed during the ranking process. These tracts were added back to the SVI databases after ranking. 2. The TOTPOP field value is 0, but the percentile ranking fields (RPL_THEME1, RPL_THEME2, RPL_THEME3, RPL_THEME4, and RPL_THEMES) were set to -999. @@ -66,4 +66,4 @@ here: https://www.census.gov/programs-surveys/acs/data/variance-tables.html. For selected ACS 5-year Detailed Tables, ā€œUsers can calculate margins of error for aggregated data by using the variance replicates. Unlike available approximation formulas, this method results in an exact margin of error by using the covariance term.ā€ -MOEs are _not_ included nor considered during this data processing nor for the scoring comparison tool. \ No newline at end of file +MOEs are _not_ included nor considered during this data processing nor for the scoring comparison tool. diff --git a/data/data-pipeline/data_pipeline/etl/sources/cdc_svi_index/etl.py b/data/data-pipeline/data_pipeline/etl/sources/cdc_svi_index/etl.py index 47a3720c1..c4f9853e5 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/cdc_svi_index/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/cdc_svi_index/etl.py @@ -1,9 +1,9 @@ -import pandas as pd import numpy as np - +import pandas as pd from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger from data_pipeline.score import field_names +from data_pipeline.utils import get_module_logger +from data_pipeline.config import settings logger = get_module_logger(__name__) @@ -17,7 +17,13 @@ class CDCSVIIndex(ExtractTransformLoad): def __init__(self): self.OUTPUT_PATH = self.DATA_PATH / "dataset" / "cdc_svi_index" - self.CDC_SVI_INDEX_URL = "https://svi.cdc.gov/Documents/Data/2018_SVI_Data/CSV/SVI2018_US.csv" + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + self.CDC_SVI_INDEX_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "cdc_svi_index/SVI2018_US.csv" + ) + else: + self.CDC_SVI_INDEX_URL = "https://svi.cdc.gov/Documents/Data/2018_SVI_Data/CSV/SVI2018_US.csv" self.CDC_RPL_THEMES_THRESHOLD = 0.90 diff --git a/data/data-pipeline/data_pipeline/etl/sources/census/etl.py b/data/data-pipeline/data_pipeline/etl/sources/census/etl.py index 8b340d0bb..103453d14 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census/etl.py @@ -3,12 +3,12 @@ import subprocess from enum import Enum from pathlib import Path -import geopandas as gpd +import geopandas as gpd from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger, unzip_file_from_url - from data_pipeline.etl.sources.census.etl_utils import get_state_fips_codes +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import unzip_file_from_url logger = get_module_logger(__name__) @@ -20,19 +20,20 @@ class GeoFileType(Enum): class CensusETL(ExtractTransformLoad): + SHP_BASE_PATH = ExtractTransformLoad.DATA_PATH / "census" / "shp" + GEOJSON_BASE_PATH = ExtractTransformLoad.DATA_PATH / "census" / "geojson" + CSV_BASE_PATH = ExtractTransformLoad.DATA_PATH / "census" / "csv" + GEOJSON_PATH = ExtractTransformLoad.DATA_PATH / "census" / "geojson" + NATIONAL_TRACT_CSV_PATH = CSV_BASE_PATH / "us.csv" + NATIONAL_TRACT_JSON_PATH = GEOJSON_BASE_PATH / "us.json" + GEOID_TRACT_FIELD_NAME: str = "GEOID10_TRACT" + def __init__(self): - self.SHP_BASE_PATH = self.DATA_PATH / "census" / "shp" - self.GEOJSON_BASE_PATH = self.DATA_PATH / "census" / "geojson" - self.CSV_BASE_PATH = self.DATA_PATH / "census" / "csv" # the fips_states_2010.csv is generated from data here # https://www.census.gov/geographies/reference-files/time-series/geo/tallies.html self.STATE_FIPS_CODES = get_state_fips_codes(self.DATA_PATH) - self.GEOJSON_PATH = self.DATA_PATH / "census" / "geojson" self.TRACT_PER_STATE: dict = {} # in-memory dict per state self.TRACT_NATIONAL: list = [] # in-memory global list - self.NATIONAL_TRACT_CSV_PATH = self.CSV_BASE_PATH / "us.csv" - self.NATIONAL_TRACT_JSON_PATH = self.GEOJSON_BASE_PATH / "us.json" - self.GEOID_TRACT_FIELD_NAME: str = "GEOID10_TRACT" def _path_for_fips_file( self, fips_code: str, file_type: GeoFileType diff --git a/data/data-pipeline/data_pipeline/etl/sources/census/etl_utils.py b/data/data-pipeline/data_pipeline/etl/sources/census/etl_utils.py index 2f61a14a6..d172fafb6 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census/etl_utils.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census/etl_utils.py @@ -5,13 +5,11 @@ import pandas as pd from data_pipeline.config import settings -from data_pipeline.utils import ( - get_module_logger, - remove_all_dirs_from_dir, - remove_files_from_dir, - unzip_file_from_url, - zip_directory, -) +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import remove_all_dirs_from_dir +from data_pipeline.utils import remove_files_from_dir +from data_pipeline.utils import unzip_file_from_url +from data_pipeline.utils import zip_directory logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl.py b/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl.py index 42e2d6c9c..b36139767 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl.py @@ -1,22 +1,33 @@ -import pandas as pd +import os +from collections import namedtuple +import geopandas as gpd +import pandas as pd +from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.sources.census_acs.etl_imputations import ( + calculate_income_measures, +) from data_pipeline.etl.sources.census_acs.etl_utils import ( retrieve_census_acs_data, ) -from data_pipeline.utils import get_module_logger from data_pipeline.score import field_names +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import unzip_file_from_url logger = get_module_logger(__name__) +# because now there is a requirement for the us.json, this will port from +# AWS when a local copy does not exist. +CENSUS_DATA_S3_URL = settings.AWS_JUSTICE40_DATASOURCES_URL + "/census.zip" + class CensusACSETL(ExtractTransformLoad): - def __init__(self): - self.ACS_YEAR = 2019 - self.OUTPUT_PATH = ( - self.DATA_PATH / "dataset" / f"census_acs_{self.ACS_YEAR}" - ) + NAME = "census_acs" + ACS_YEAR = 2019 + MINIMUM_POPULATION_REQUIRED_FOR_IMPUTATION = 1 + def __init__(self): self.TOTAL_UNEMPLOYED_FIELD = "B23025_005E" self.TOTAL_IN_LABOR_FORCE = "B23025_003E" self.EMPLOYMENT_FIELDS = [ @@ -59,6 +70,23 @@ def __init__(self): self.POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME = ( "Percent of individuals < 200% Federal Poverty Line" ) + self.IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME = ( + "Percent of individuals < 200% Federal Poverty Line, imputed" + ) + + self.ADJUSTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME = ( + "Adjusted percent of individuals < 200% Federal Poverty Line" + ) + + self.ADJUSTED_AND_IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME_PRELIMINARY = ( + "Preliminary adjusted percent of individuals < 200% Federal Poverty Line," + + " imputed" + ) + + self.ADJUSTED_AND_IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME = ( + "Adjusted percent of individuals < 200% Federal Poverty Line," + + " imputed" + ) self.MEDIAN_HOUSE_VALUE_FIELD = "B25077_001E" self.MEDIAN_HOUSE_VALUE_FIELD_NAME = ( @@ -136,6 +164,10 @@ def __init__(self): "Percent enrollment in college or graduate school" ) + self.IMPUTED_COLLEGE_ATTENDANCE_FIELD = ( + "Percent enrollment in college or graduate school, imputed" + ) + self.COLLEGE_NON_ATTENDANCE_FIELD = "Percent of population not currently enrolled in college or graduate school" self.RE_FIELDS = [ @@ -153,19 +185,25 @@ def __init__(self): "B03002_003E", "B03003_001E", "B03003_003E", + "B02001_007E", # "Some other race alone" ] - # Name output demographics fields. - self.BLACK_FIELD_NAME = "Black or African American alone" - self.AMERICAN_INDIAN_FIELD_NAME = ( - "American Indian and Alaska Native alone" - ) - self.ASIAN_FIELD_NAME = "Asian alone" - self.HAWAIIAN_FIELD_NAME = "Native Hawaiian and Other Pacific alone" - self.TWO_OR_MORE_RACES_FIELD_NAME = "Two or more races" - self.NON_HISPANIC_WHITE_FIELD_NAME = "Non-Hispanic White" + self.BLACK_FIELD_NAME = "Black or African American" + self.AMERICAN_INDIAN_FIELD_NAME = "American Indian / Alaska Native" + self.ASIAN_FIELD_NAME = "Asian" + self.HAWAIIAN_FIELD_NAME = "Native Hawaiian or Pacific" + self.TWO_OR_MORE_RACES_FIELD_NAME = "two or more races" + self.NON_HISPANIC_WHITE_FIELD_NAME = "White" self.HISPANIC_FIELD_NAME = "Hispanic or Latino" + # Note that `other` is lowercase because the whole field will show up in the download + # file as "Percent other races" + self.OTHER_RACE_FIELD_NAME = "other races" + + self.TOTAL_RACE_POPULATION_FIELD_NAME = ( + "Total population surveyed on racial data" + ) + # Name output demographics fields. self.RE_OUTPUT_FIELDS = [ self.BLACK_FIELD_NAME, self.AMERICAN_INDIAN_FIELD_NAME, @@ -174,32 +212,133 @@ def __init__(self): self.TWO_OR_MORE_RACES_FIELD_NAME, self.NON_HISPANIC_WHITE_FIELD_NAME, self.HISPANIC_FIELD_NAME, + self.OTHER_RACE_FIELD_NAME, ] - self.PERCENT_PREFIX = "Percent " + # Note: this field does double-duty here. It's used as the total population + # within the age questions. + # It's also what EJScreen used as their variable for total population in the + # census tract, so we use it similarly. + # See p. 83 of https://www.epa.gov/sites/default/files/2021-04/documents/ejscreen_technical_document.pdf + self.TOTAL_POPULATION_FROM_AGE_TABLE = "B01001_001E" # Estimate!!Total: + + self.AGE_INPUT_FIELDS = [ + self.TOTAL_POPULATION_FROM_AGE_TABLE, + "B01001_003E", # Estimate!!Total:!!Male:!!Under 5 years + "B01001_004E", # Estimate!!Total:!!Male:!!5 to 9 years + "B01001_005E", # Estimate!!Total:!!Male:!!10 to 14 years + "B01001_006E", # Estimate!!Total:!!Male:!!15 to 17 years + "B01001_007E", # Estimate!!Total:!!Male:!!18 and 19 years + "B01001_008E", # Estimate!!Total:!!Male:!!20 years + "B01001_009E", # Estimate!!Total:!!Male:!!21 years + "B01001_010E", # Estimate!!Total:!!Male:!!22 to 24 years + "B01001_011E", # Estimate!!Total:!!Male:!!25 to 29 years + "B01001_012E", # Estimate!!Total:!!Male:!!30 to 34 years + "B01001_013E", # Estimate!!Total:!!Male:!!35 to 39 years + "B01001_014E", # Estimate!!Total:!!Male:!!40 to 44 years + "B01001_015E", # Estimate!!Total:!!Male:!!45 to 49 years + "B01001_016E", # Estimate!!Total:!!Male:!!50 to 54 years + "B01001_017E", # Estimate!!Total:!!Male:!!55 to 59 years + "B01001_018E", # Estimate!!Total:!!Male:!!60 and 61 years + "B01001_019E", # Estimate!!Total:!!Male:!!62 to 64 years + "B01001_020E", # Estimate!!Total:!!Male:!!65 and 66 years + "B01001_021E", # Estimate!!Total:!!Male:!!67 to 69 years + "B01001_022E", # Estimate!!Total:!!Male:!!70 to 74 years + "B01001_023E", # Estimate!!Total:!!Male:!!75 to 79 years + "B01001_024E", # Estimate!!Total:!!Male:!!80 to 84 years + "B01001_025E", # Estimate!!Total:!!Male:!!85 years and over + "B01001_027E", # Estimate!!Total:!!Female:!!Under 5 years + "B01001_028E", # Estimate!!Total:!!Female:!!5 to 9 years + "B01001_029E", # Estimate!!Total:!!Female:!!10 to 14 years + "B01001_030E", # Estimate!!Total:!!Female:!!15 to 17 years + "B01001_031E", # Estimate!!Total:!!Female:!!18 and 19 years + "B01001_032E", # Estimate!!Total:!!Female:!!20 years + "B01001_033E", # Estimate!!Total:!!Female:!!21 years + "B01001_034E", # Estimate!!Total:!!Female:!!22 to 24 years + "B01001_035E", # Estimate!!Total:!!Female:!!25 to 29 years + "B01001_036E", # Estimate!!Total:!!Female:!!30 to 34 years + "B01001_037E", # Estimate!!Total:!!Female:!!35 to 39 years + "B01001_038E", # Estimate!!Total:!!Female:!!40 to 44 years + "B01001_039E", # Estimate!!Total:!!Female:!!45 to 49 years + "B01001_040E", # Estimate!!Total:!!Female:!!50 to 54 years + "B01001_041E", # Estimate!!Total:!!Female:!!55 to 59 years + "B01001_042E", # Estimate!!Total:!!Female:!!60 and 61 years + "B01001_043E", # Estimate!!Total:!!Female:!!62 to 64 years + "B01001_044E", # Estimate!!Total:!!Female:!!65 and 66 years + "B01001_045E", # Estimate!!Total:!!Female:!!67 to 69 years + "B01001_046E", # Estimate!!Total:!!Female:!!70 to 74 years + "B01001_047E", # Estimate!!Total:!!Female:!!75 to 79 years + "B01001_048E", # Estimate!!Total:!!Female:!!80 to 84 years + "B01001_049E", # Estimate!!Total:!!Female:!!85 years and over + ] + + self.AGE_OUTPUT_FIELDS = [ + field_names.PERCENT_AGE_UNDER_10, + field_names.PERCENT_AGE_10_TO_64, + field_names.PERCENT_AGE_OVER_64, + ] self.STATE_GEOID_FIELD_NAME = "GEOID2" self.COLUMNS_TO_KEEP = ( [ self.GEOID_TRACT_FIELD_NAME, + field_names.TOTAL_POP_FIELD, self.UNEMPLOYED_FIELD_NAME, self.LINGUISTIC_ISOLATION_FIELD_NAME, self.MEDIAN_INCOME_FIELD_NAME, self.POVERTY_LESS_THAN_100_PERCENT_FPL_FIELD_NAME, self.POVERTY_LESS_THAN_150_PERCENT_FPL_FIELD_NAME, - self.POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME, + self.IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME, self.MEDIAN_HOUSE_VALUE_FIELD_NAME, self.HIGH_SCHOOL_ED_FIELD, self.COLLEGE_ATTENDANCE_FIELD, self.COLLEGE_NON_ATTENDANCE_FIELD, + self.IMPUTED_COLLEGE_ATTENDANCE_FIELD, + field_names.IMPUTED_INCOME_FLAG_FIELD_NAME, ] + self.RE_OUTPUT_FIELDS - + [self.PERCENT_PREFIX + field for field in self.RE_OUTPUT_FIELDS] + + [ + field_names.PERCENT_PREFIX + field + for field in self.RE_OUTPUT_FIELDS + ] + + self.AGE_OUTPUT_FIELDS + + [ + field_names.POVERTY_LESS_THAN_200_FPL_FIELD, + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD, + ] ) self.df: pd.DataFrame + # pylint: disable=too-many-arguments + def _merge_geojson( + self, + df: pd.DataFrame, + usa_geo_df: gpd.GeoDataFrame, + geoid_field: str = "GEOID10", + geometry_field: str = "geometry", + state_code_field: str = "STATEFP10", + county_code_field: str = "COUNTYFP10", + ) -> gpd.GeoDataFrame: + usa_geo_df[geoid_field] = ( + usa_geo_df[geoid_field].astype(str).str.zfill(11) + ) + return gpd.GeoDataFrame( + df.merge( + usa_geo_df[ + [ + geoid_field, + geometry_field, + state_code_field, + county_code_field, + ] + ], + left_on=[self.GEOID_TRACT_FIELD_NAME], + right_on=[geoid_field], + ) + ) + def extract(self) -> None: # Define the variables to retrieve variables = ( @@ -213,6 +352,7 @@ def extract(self) -> None: + self.EDUCATIONAL_FIELDS + self.RE_FIELDS + self.COLLEGE_ATTENDANCE_FIELDS + + self.AGE_INPUT_FIELDS ) self.df = retrieve_census_acs_data( @@ -227,12 +367,37 @@ def transform(self) -> None: df = self.df - # Rename two fields. + # Here we join the geometry of the US to the dataframe so that we can impute + # The income of neighbors. first this looks locally; if there's no local + # geojson file for all of the US, this will read it off of S3 + logger.info("Reading in geojson for the country") + if not os.path.exists( + self.DATA_PATH / "census" / "geojson" / "us.json" + ): + logger.info("Fetching Census data from AWS S3") + unzip_file_from_url( + CENSUS_DATA_S3_URL, + self.DATA_PATH / "tmp", + self.DATA_PATH, + ) + + geo_df = gpd.read_file( + self.DATA_PATH / "census" / "geojson" / "us.json", + ) + + df = self._merge_geojson( + df=df, + usa_geo_df=geo_df, + ) + + # Rename some fields. df = df.rename( columns={ self.MEDIAN_HOUSE_VALUE_FIELD: self.MEDIAN_HOUSE_VALUE_FIELD_NAME, self.MEDIAN_INCOME_FIELD: self.MEDIAN_INCOME_FIELD_NAME, - } + self.TOTAL_POPULATION_FROM_AGE_TABLE: field_names.TOTAL_POP_FIELD, + }, + errors="raise", ) # Handle null values for various fields, which are `-666666666`. @@ -318,38 +483,101 @@ def transform(self) -> None: ) # Calculate some demographic information. - df[self.BLACK_FIELD_NAME] = df["B02001_003E"] - df[self.AMERICAN_INDIAN_FIELD_NAME] = df["B02001_004E"] - df[self.ASIAN_FIELD_NAME] = df["B02001_005E"] - df[self.HAWAIIAN_FIELD_NAME] = df["B02001_006E"] - df[self.TWO_OR_MORE_RACES_FIELD_NAME] = df["B02001_008E"] - df[self.NON_HISPANIC_WHITE_FIELD_NAME] = df["B03002_003E"] - df[self.HISPANIC_FIELD_NAME] = df["B03003_003E"] - - # Calculate demographics as percent - df[self.PERCENT_PREFIX + self.BLACK_FIELD_NAME] = ( - df["B02001_003E"] / df["B02001_001E"] - ) - df[self.PERCENT_PREFIX + self.AMERICAN_INDIAN_FIELD_NAME] = ( - df["B02001_004E"] / df["B02001_001E"] - ) - df[self.PERCENT_PREFIX + self.ASIAN_FIELD_NAME] = ( - df["B02001_005E"] / df["B02001_001E"] - ) - df[self.PERCENT_PREFIX + self.HAWAIIAN_FIELD_NAME] = ( - df["B02001_006E"] / df["B02001_001E"] - ) - df[self.PERCENT_PREFIX + self.TWO_OR_MORE_RACES_FIELD_NAME] = ( - df["B02001_008E"] / df["B02001_001E"] - ) - df[self.PERCENT_PREFIX + self.NON_HISPANIC_WHITE_FIELD_NAME] = ( - df["B03002_003E"] / df["B03002_001E"] - ) - df[self.PERCENT_PREFIX + self.HISPANIC_FIELD_NAME] = ( - df["B03003_003E"] / df["B03003_001E"] + df = df.rename( + columns={ + "B02001_003E": self.BLACK_FIELD_NAME, + "B02001_004E": self.AMERICAN_INDIAN_FIELD_NAME, + "B02001_005E": self.ASIAN_FIELD_NAME, + "B02001_006E": self.HAWAIIAN_FIELD_NAME, + "B02001_008E": self.TWO_OR_MORE_RACES_FIELD_NAME, + "B03002_003E": self.NON_HISPANIC_WHITE_FIELD_NAME, + "B03003_003E": self.HISPANIC_FIELD_NAME, + "B02001_007E": self.OTHER_RACE_FIELD_NAME, + "B02001_001E": self.TOTAL_RACE_POPULATION_FIELD_NAME, + }, + errors="raise", ) - # Calculate college attendance: + for race_field_name in self.RE_OUTPUT_FIELDS: + df[field_names.PERCENT_PREFIX + race_field_name] = ( + df[race_field_name] / df[self.TOTAL_RACE_POPULATION_FIELD_NAME] + ) + + # First value is the `age bucket`, and the second value is a list of all fields + # that will be summed in the calculations of the total population in that age + # bucket. + age_bucket_and_its_sum_columns = [ + ( + field_names.PERCENT_AGE_UNDER_10, + [ + "B01001_003E", # Estimate!!Total:!!Male:!!Under 5 years + "B01001_004E", # Estimate!!Total:!!Male:!!5 to 9 years + "B01001_027E", # Estimate!!Total:!!Female:!!Under 5 years + "B01001_028E", # Estimate!!Total:!!Female:!!5 to 9 years + ], + ), + ( + field_names.PERCENT_AGE_10_TO_64, + [ + "B01001_005E", # Estimate!!Total:!!Male:!!10 to 14 years + "B01001_006E", # Estimate!!Total:!!Male:!!15 to 17 years + "B01001_007E", # Estimate!!Total:!!Male:!!18 and 19 years + "B01001_008E", # Estimate!!Total:!!Male:!!20 years + "B01001_009E", # Estimate!!Total:!!Male:!!21 years + "B01001_010E", # Estimate!!Total:!!Male:!!22 to 24 years + "B01001_011E", # Estimate!!Total:!!Male:!!25 to 29 years + "B01001_012E", # Estimate!!Total:!!Male:!!30 to 34 years + "B01001_013E", # Estimate!!Total:!!Male:!!35 to 39 years + "B01001_014E", # Estimate!!Total:!!Male:!!40 to 44 years + "B01001_015E", # Estimate!!Total:!!Male:!!45 to 49 years + "B01001_016E", # Estimate!!Total:!!Male:!!50 to 54 years + "B01001_017E", # Estimate!!Total:!!Male:!!55 to 59 years + "B01001_018E", # Estimate!!Total:!!Male:!!60 and 61 years + "B01001_019E", # Estimate!!Total:!!Male:!!62 to 64 years + "B01001_029E", # Estimate!!Total:!!Female:!!10 to 14 years + "B01001_030E", # Estimate!!Total:!!Female:!!15 to 17 years + "B01001_031E", # Estimate!!Total:!!Female:!!18 and 19 years + "B01001_032E", # Estimate!!Total:!!Female:!!20 years + "B01001_033E", # Estimate!!Total:!!Female:!!21 years + "B01001_034E", # Estimate!!Total:!!Female:!!22 to 24 years + "B01001_035E", # Estimate!!Total:!!Female:!!25 to 29 years + "B01001_036E", # Estimate!!Total:!!Female:!!30 to 34 years + "B01001_037E", # Estimate!!Total:!!Female:!!35 to 39 years + "B01001_038E", # Estimate!!Total:!!Female:!!40 to 44 years + "B01001_039E", # Estimate!!Total:!!Female:!!45 to 49 years + "B01001_040E", # Estimate!!Total:!!Female:!!50 to 54 years + "B01001_041E", # Estimate!!Total:!!Female:!!55 to 59 years + "B01001_042E", # Estimate!!Total:!!Female:!!60 and 61 years + "B01001_043E", # Estimate!!Total:!!Female:!!62 to 64 years + ], + ), + ( + field_names.PERCENT_AGE_OVER_64, + [ + "B01001_020E", # Estimate!!Total:!!Male:!!65 and 66 years + "B01001_021E", # Estimate!!Total:!!Male:!!67 to 69 years + "B01001_022E", # Estimate!!Total:!!Male:!!70 to 74 years + "B01001_023E", # Estimate!!Total:!!Male:!!75 to 79 years + "B01001_024E", # Estimate!!Total:!!Male:!!80 to 84 years + "B01001_025E", # Estimate!!Total:!!Male:!!85 years and over + "B01001_044E", # Estimate!!Total:!!Female:!!65 and 66 years + "B01001_045E", # Estimate!!Total:!!Female:!!67 to 69 years + "B01001_046E", # Estimate!!Total:!!Female:!!70 to 74 years + "B01001_047E", # Estimate!!Total:!!Female:!!75 to 79 years + "B01001_048E", # Estimate!!Total:!!Female:!!80 to 84 years + "B01001_049E", # Estimate!!Total:!!Female:!!85 years and over + ], + ), + ] + + # For each age bucket, sum the relevant columns and calculate the total + # percentage. + for age_bucket, sum_columns in age_bucket_and_its_sum_columns: + df[age_bucket] = ( + df[sum_columns].sum(axis=1) / df[field_names.TOTAL_POP_FIELD] + ) + + # Calculate college attendance and adjust low income df[self.COLLEGE_ATTENDANCE_FIELD] = ( df[self.COLLEGE_ATTENDANCE_MALE_ENROLLED_PUBLIC] + df[self.COLLEGE_ATTENDANCE_MALE_ENROLLED_PRIVATE] @@ -361,26 +589,75 @@ def transform(self) -> None: 1 - df[self.COLLEGE_ATTENDANCE_FIELD] ) - # strip columns - df = df[self.COLUMNS_TO_KEEP] + # we impute income for both income measures + ## TODO: Convert to pydantic for clarity + logger.info("Imputing income information") + ImputeVariables = namedtuple( + "ImputeVariables", ["raw_field_name", "imputed_field_name"] + ) - # Save results to self. - self.df = df - - # rename columns to be used in score - rename_fields = { - "Percent of individuals < 200% Federal Poverty Line": field_names.POVERTY_LESS_THAN_200_FPL_FIELD, - } - self.df.rename( - columns=rename_fields, - inplace=True, - errors="raise", + df = calculate_income_measures( + impute_var_named_tup_list=[ + ImputeVariables( + raw_field_name=self.POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME, + imputed_field_name=self.IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME, + ), + ImputeVariables( + raw_field_name=self.COLLEGE_ATTENDANCE_FIELD, + imputed_field_name=self.IMPUTED_COLLEGE_ATTENDANCE_FIELD, + ), + ], + geo_df=df, + geoid_field=self.GEOID_TRACT_FIELD_NAME, + minimum_population_required_for_imputation=self.MINIMUM_POPULATION_REQUIRED_FOR_IMPUTATION, ) - def load(self) -> None: - logger.info("Saving Census ACS Data") + logger.info("Calculating with imputed values") - # mkdir census - self.OUTPUT_PATH.mkdir(parents=True, exist_ok=True) + df[ + self.ADJUSTED_AND_IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME + ] = ( + df[self.POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME].fillna( + df[self.IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME] + ) + - df[self.COLLEGE_ATTENDANCE_FIELD].fillna( + df[self.IMPUTED_COLLEGE_ATTENDANCE_FIELD] + ) + # Use clip to ensure that the values are not negative if college attendance + # is very high + ).clip( + lower=0 + ) + + # All values should have a value at this point + assert ( + # For tracts with >0 population + df[ + df[field_names.TOTAL_POP_FIELD] + >= self.MINIMUM_POPULATION_REQUIRED_FOR_IMPUTATION + ][ + # Then the imputed field should have no nulls + self.ADJUSTED_AND_IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME + ] + .isna() + .sum() + == 0 + ), "Error: not all values were filled..." - self.df.to_csv(path_or_buf=self.OUTPUT_PATH / "usa.csv", index=False) + logger.info("Renaming columns...") + df = df.rename( + columns={ + self.ADJUSTED_AND_IMPUTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME: field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD, + self.POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME: field_names.POVERTY_LESS_THAN_200_FPL_FIELD, + } + ) + + # We generate a boolean that is TRUE when there is an imputed income but not a baseline income, and FALSE otherwise. + # This allows us to see which tracts have an imputed income. + df[field_names.IMPUTED_INCOME_FLAG_FIELD_NAME] = ( + df[field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD].notna() + & df[field_names.POVERTY_LESS_THAN_200_FPL_FIELD].isna() + ) + + # Save results to self. + self.output_df = df diff --git a/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_imputations.py b/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_imputations.py new file mode 100644 index 000000000..e3d52988b --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_imputations.py @@ -0,0 +1,166 @@ +from typing import Any +from typing import List +from typing import NamedTuple +from typing import Tuple + +import geopandas as gpd +import pandas as pd +from data_pipeline.score import field_names +from data_pipeline.utils import get_module_logger + +# pylint: disable=unsubscriptable-object + +logger = get_module_logger(__name__) + + +def _get_fips_mask( + geo_df: gpd.GeoDataFrame, + row: gpd.GeoSeries, + fips_digits: int, + geoid_field: str = "GEOID10_TRACT", +) -> pd.Series: + return ( + geo_df[geoid_field].str[:fips_digits] == row[geoid_field][:fips_digits] + ) + + +def _get_neighbor_mask( + geo_df: gpd.GeoDataFrame, row: gpd.GeoSeries +) -> pd.Series: + """Returns neighboring tracts.""" + return geo_df["geometry"].touches(row["geometry"]) + + +def _choose_best_mask( + geo_df: gpd.GeoDataFrame, + masks_in_priority_order: List[pd.Series], + column_to_impute: str, +) -> pd.Series: + for mask in masks_in_priority_order: + if any(geo_df[mask][column_to_impute].notna()): + return mask + raise Exception("No mask found") + + +def _prepare_dataframe_for_imputation( + impute_var_named_tup_list: List[NamedTuple], + geo_df: gpd.GeoDataFrame, + population_field: str, + minimum_population_required_for_imputation: int = 1, + geoid_field: str = "GEOID10_TRACT", +) -> Tuple[Any, gpd.GeoDataFrame]: + """Helper for imputation. + + Given the inputs of `ImputeVariables`, returns list of tracts that need to be + imputed, along with a GeoDataFrame that has a column with the imputed field + "primed", meaning it is a copy of the raw field. + + Will drop any rows with population less than + `minimum_population_required_for_imputation`. + """ + imputing_cols = [ + impute_var_pair.raw_field_name + for impute_var_pair in impute_var_named_tup_list + ] + + # Prime column to exist + for impute_var_pair in impute_var_named_tup_list: + geo_df[impute_var_pair.imputed_field_name] = geo_df[ + impute_var_pair.raw_field_name + ].copy() + + # Generate a list of tracts for which at least one of the imputation + # columns is null that also meets population criteria. + tract_list = geo_df[ + ( + # First, check whether any of the columns we want to impute contain null + # values + geo_df[imputing_cols].isna().any(axis=1) + # Second, ensure population is not null and >= the minimum population + & ( + geo_df[population_field].notnull() + & ( + geo_df[population_field] + >= minimum_population_required_for_imputation + ) + ) + ) + ][geoid_field].unique() + + # Check that imputation is a valid choice for this set of fields + logger.info(f"Imputing values for {len(tract_list)} unique tracts.") + assert len(tract_list) > 0, "Error: No missing values to impute" + + return tract_list, geo_df + + +def calculate_income_measures( + impute_var_named_tup_list: list, + geo_df: gpd.GeoDataFrame, + geoid_field: str, + population_field: str = field_names.TOTAL_POP_FIELD, + minimum_population_required_for_imputation: int = 1, +) -> pd.DataFrame: + """Impute values based on geographic neighbors + + We only want to check neighbors a single time, so all variables + that we impute get imputed here. + + Takes in: + required: + impute_var_named_tup_list: list of named tuples (imputed field, raw field) + geo_df: geo dataframe that already has the census shapefiles merged + geoid field: tract level ID + + Returns: non-geometry pd.DataFrame + """ + # Determine where to impute variables and fill a column with nulls + tract_list, geo_df = _prepare_dataframe_for_imputation( + impute_var_named_tup_list=impute_var_named_tup_list, + geo_df=geo_df, + geoid_field=geoid_field, + population_field=population_field, + minimum_population_required_for_imputation=minimum_population_required_for_imputation, + ) + + # Iterate through the dataframe to impute in place + ## TODO: We should probably convert this to a spatial join now that we are doing >1 imputation and it's taking a lot + ## of time, but thinking through how to do this while maintaining the masking will take some time. I think the best + ## way would be to (1) spatial join to all neighbors, and then (2) iterate to take the "smallest" set of neighbors... + ## but haven't implemented it yet. + for index, row in geo_df.iterrows(): + if row[geoid_field] in tract_list: + neighbor_mask = _get_neighbor_mask(geo_df, row) + county_mask = _get_fips_mask( + geo_df=geo_df, row=row, fips_digits=5, geoid_field=geoid_field + ) + ## TODO: Did CEQ decide to cut this? + state_mask = _get_fips_mask( + geo_df=geo_df, row=row, fips_digits=2, geoid_field=geoid_field + ) + + # Impute fields for every row missing at least one value using the best possible set of neighbors + # Note that later, we will pull raw.fillna(imputed), so the mechanics of this step aren't critical + for impute_var_pair in impute_var_named_tup_list: + mask_to_use = _choose_best_mask( + geo_df=geo_df, + masks_in_priority_order=[ + neighbor_mask, + county_mask, + state_mask, + ], + column_to_impute=impute_var_pair.raw_field_name, + ) + + geo_df.loc[index, impute_var_pair.imputed_field_name] = geo_df[ + mask_to_use + ][impute_var_pair.raw_field_name].mean() + + logger.info("Casting geodataframe as a typical dataframe") + # get rid of the geometry column and cast as a typical df + df = pd.DataFrame( + geo_df[[col for col in geo_df.columns if col != "geometry"]] + ) + + # finally, return the df + return df diff --git a/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_utils.py b/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_utils.py index e4f3726ae..633576c79 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_utils.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census_acs/etl_utils.py @@ -1,9 +1,9 @@ import os from pathlib import Path from typing import List + import censusdata import pandas as pd - from data_pipeline.etl.sources.census.etl_utils import get_state_fips_codes from data_pipeline.utils import get_module_logger diff --git a/data/data-pipeline/data_pipeline/etl/sources/census_acs_2010/etl.py b/data/data-pipeline/data_pipeline/etl/sources/census_acs_2010/etl.py index 97b0f16fb..49648eae4 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census_acs_2010/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census_acs_2010/etl.py @@ -1,11 +1,10 @@ import pandas as pd - from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.etl.sources.census_acs.etl_utils import ( retrieve_census_acs_data, ) -from data_pipeline.utils import get_module_logger from data_pipeline.score import field_names +from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/etl/sources/census_acs_median_income/etl.py b/data/data-pipeline/data_pipeline/etl/sources/census_acs_median_income/etl.py index 32325842f..e0322e4fc 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census_acs_median_income/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census_acs_median_income/etl.py @@ -1,13 +1,14 @@ import json from pathlib import Path + import numpy as np import pandas as pd import requests - +from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.utils import download_file_from_url from data_pipeline.utils import get_module_logger -from data_pipeline.config import settings -from data_pipeline.utils import unzip_file_from_url, download_file_from_url +from data_pipeline.utils import unzip_file_from_url logger = get_module_logger(__name__) @@ -282,12 +283,20 @@ def extract(self) -> None: # Download MSA median incomes logger.info("Starting download of MSA median incomes.") - download = requests.get(self.MSA_MEDIAN_INCOME_URL, verify=None) + download = requests.get( + self.MSA_MEDIAN_INCOME_URL, + verify=None, + timeout=settings.REQUESTS_DEFAULT_TIMOUT, + ) self.msa_median_incomes = json.loads(download.content) # Download state median incomes logger.info("Starting download of state median incomes.") - download_state = requests.get(self.STATE_MEDIAN_INCOME_URL, verify=None) + download_state = requests.get( + self.STATE_MEDIAN_INCOME_URL, + verify=None, + timeout=settings.REQUESTS_DEFAULT_TIMOUT, + ) self.state_median_incomes = json.loads(download_state.content) ## NOTE we already have PR's MI here diff --git a/data/data-pipeline/data_pipeline/etl/sources/census_decennial/etl.py b/data/data-pipeline/data_pipeline/etl/sources/census_decennial/etl.py index 56aa4745d..e230fa33f 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/census_decennial/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/census_decennial/etl.py @@ -1,12 +1,13 @@ import json -import requests +from typing import List import numpy as np import pandas as pd - +import requests +from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger from data_pipeline.score import field_names +from data_pipeline.utils import get_module_logger pd.options.mode.chained_assignment = "raise" @@ -146,6 +147,63 @@ def __init__(self): field_names.CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009 ) + # Race/Ethnicity fields + self.TOTAL_RACE_POPULATION_FIELD = "PCT086001" # Total + self.ASIAN_FIELD = "PCT086002" # Total!!Asian + self.BLACK_FIELD = "PCT086003" # Total!!Black or African American + self.HAWAIIAN_FIELD = ( + "PCT086004" # Total!!Native Hawaiian and Other Pacific Islander + ) + # Note that the 2010 census for island araeas does not break out + # hispanic and non-hispanic white, so this is slightly different from + # our other demographic data + self.NON_HISPANIC_WHITE_FIELD = "PCT086005" # Total!!White + self.HISPANIC_FIELD = "PCT086006" # Total!!Hispanic or Latino + self.OTHER_RACE_FIELD = "PCT086007" # Total!!Other Ethnic Origin or Ra + + self.TOTAL_RACE_POPULATION_VI_FIELD = "P003001" # Total + self.BLACK_VI_FIELD = ( + "P003003" # Total!!One race!!Black or African American alone + ) + self.AMERICAN_INDIAN_VI_FIELD = "P003005" # Total!!One race!!American Indian and Alaska Native alone + self.ASIAN_VI_FIELD = "P003006" # Total!!One race!!Asian alone + self.HAWAIIAN_VI_FIELD = "P003007" # Total!!One race!!Native Hawaiian and Other Pacific Islander alone + self.TWO_OR_MORE_RACES_VI_FIELD = "P003009" # Total!!Two or More Races + self.NON_HISPANIC_WHITE_VI_FIELD = ( + "P005006" # Total!!Not Hispanic or Latino!!One race!!White alone + ) + self.HISPANIC_VI_FIELD = "P005002" # Total!!Hispanic or Latino + self.OTHER_RACE_VI_FIELD = ( + "P003008" # Total!!One race!!Some Other Race alone + ) + self.TOTAL_RACE_POPULATION_VI_FIELD = "P003001" # Total + + self.TOTAL_RACE_POPULATION_FIELD_NAME = ( + "Total population surveyed on racial data" + ) + self.BLACK_FIELD_NAME = "Black or African American" + self.AMERICAN_INDIAN_FIELD_NAME = "American Indian / Alaska Native" + self.ASIAN_FIELD_NAME = "Asian" + self.HAWAIIAN_FIELD_NAME = "Native Hawaiian or Pacific" + self.TWO_OR_MORE_RACES_FIELD_NAME = "two or more races" + self.NON_HISPANIC_WHITE_FIELD_NAME = "White" + self.HISPANIC_FIELD_NAME = "Hispanic or Latino" + # Note that `other` is lowercase because the whole field will show up in the download + # file as "Percent other races" + self.OTHER_RACE_FIELD_NAME = "other races" + + # Name output demographics fields. + self.RE_OUTPUT_FIELDS = [ + self.BLACK_FIELD_NAME, + self.AMERICAN_INDIAN_FIELD_NAME, + self.ASIAN_FIELD_NAME, + self.HAWAIIAN_FIELD_NAME, + self.TWO_OR_MORE_RACES_FIELD_NAME, + self.NON_HISPANIC_WHITE_FIELD_NAME, + self.HISPANIC_FIELD_NAME, + self.OTHER_RACE_FIELD_NAME, + ] + var_list = [ self.MEDIAN_INCOME_FIELD, self.TOTAL_HOUSEHOLD_RATIO_INCOME_TO_POVERTY_LEVEL_FIELD, @@ -161,6 +219,13 @@ def __init__(self): self.EMPLOYMENT_FEMALE_IN_LABOR_FORCE_FIELD, self.EMPLOYMENT_FEMALE_UNEMPLOYED_FIELD, self.TOTAL_POP_FIELD, + self.TOTAL_RACE_POPULATION_FIELD, + self.ASIAN_FIELD, + self.BLACK_FIELD, + self.HAWAIIAN_FIELD, + self.NON_HISPANIC_WHITE_FIELD, + self.HISPANIC_FIELD, + self.OTHER_RACE_FIELD, ] var_list = ",".join(var_list) @@ -179,6 +244,15 @@ def __init__(self): self.EMPLOYMENT_FEMALE_IN_LABOR_FORCE_VI_FIELD, self.EMPLOYMENT_FEMALE_UNEMPLOYED_VI_FIELD, self.TOTAL_POP_VI_FIELD, + self.BLACK_VI_FIELD, + self.AMERICAN_INDIAN_VI_FIELD, + self.ASIAN_VI_FIELD, + self.HAWAIIAN_VI_FIELD, + self.TWO_OR_MORE_RACES_VI_FIELD, + self.NON_HISPANIC_WHITE_VI_FIELD, + self.HISPANIC_VI_FIELD, + self.OTHER_RACE_VI_FIELD, + self.TOTAL_RACE_POPULATION_VI_FIELD, ] var_list_vi = ",".join(var_list_vi) @@ -209,6 +283,23 @@ def __init__(self): self.EMPLOYMENT_MALE_UNEMPLOYED_FIELD: self.EMPLOYMENT_MALE_UNEMPLOYED_FIELD, self.EMPLOYMENT_FEMALE_IN_LABOR_FORCE_FIELD: self.EMPLOYMENT_FEMALE_IN_LABOR_FORCE_FIELD, self.EMPLOYMENT_FEMALE_UNEMPLOYED_FIELD: self.EMPLOYMENT_FEMALE_UNEMPLOYED_FIELD, + self.TOTAL_RACE_POPULATION_FIELD: self.TOTAL_RACE_POPULATION_FIELD_NAME, + self.TOTAL_RACE_POPULATION_VI_FIELD: self.TOTAL_RACE_POPULATION_FIELD_NAME, + # Note there is no American Indian data for AS/GU/MI + self.AMERICAN_INDIAN_VI_FIELD: self.AMERICAN_INDIAN_FIELD_NAME, + self.ASIAN_FIELD: self.ASIAN_FIELD_NAME, + self.ASIAN_VI_FIELD: self.ASIAN_FIELD_NAME, + self.BLACK_FIELD: self.BLACK_FIELD_NAME, + self.BLACK_VI_FIELD: self.BLACK_FIELD_NAME, + self.HAWAIIAN_FIELD: self.HAWAIIAN_FIELD_NAME, + self.HAWAIIAN_VI_FIELD: self.HAWAIIAN_FIELD_NAME, + self.TWO_OR_MORE_RACES_VI_FIELD: self.TWO_OR_MORE_RACES_FIELD_NAME, + self.NON_HISPANIC_WHITE_FIELD: self.NON_HISPANIC_WHITE_FIELD_NAME, + self.NON_HISPANIC_WHITE_VI_FIELD: self.NON_HISPANIC_WHITE_FIELD_NAME, + self.HISPANIC_FIELD: self.HISPANIC_FIELD_NAME, + self.HISPANIC_VI_FIELD: self.HISPANIC_FIELD_NAME, + self.OTHER_RACE_FIELD: self.OTHER_RACE_FIELD_NAME, + self.OTHER_RACE_VI_FIELD: self.OTHER_RACE_FIELD_NAME, } # To do: Ask Census Slack Group about whether you need to hardcode the county fips @@ -251,6 +342,8 @@ def __init__(self): + "&for=tract:*&in=state:{}%20county:{}" ) + self.final_race_fields: List[str] = [] + self.df: pd.DataFrame self.df_vi: pd.DataFrame self.df_all: pd.DataFrame @@ -263,14 +356,17 @@ def extract(self) -> None: f"Downloading data for state/territory {island['state_abbreviation']}" ) for county in island["county_fips"]: + api_url = self.API_URL.format( + self.DECENNIAL_YEAR, + island["state_abbreviation"], + island["var_list"], + island["fips"], + county, + ) + logger.debug(f"CENSUS: Requesting {api_url}") download = requests.get( - self.API_URL.format( - self.DECENNIAL_YEAR, - island["state_abbreviation"], - island["var_list"], - island["fips"], - county, - ) + api_url, + timeout=settings.REQUESTS_DEFAULT_TIMOUT, ) df = json.loads(download.content) @@ -377,6 +473,19 @@ def transform(self) -> None: self.df_all["state"] + self.df_all["county"] + self.df_all["tract"] ) + # Calculate stats by race + for race_field_name in self.RE_OUTPUT_FIELDS: + output_field_name = ( + field_names.PERCENT_PREFIX + + race_field_name + + field_names.ISLAND_AREA_BACKFILL_SUFFIX + ) + self.final_race_fields.append(output_field_name) + self.df_all[output_field_name] = ( + self.df_all[race_field_name] + / self.df_all[self.TOTAL_RACE_POPULATION_FIELD_NAME] + ) + # Reporting Missing Values for col in self.df_all.columns: missing_value_count = self.df_all[col].isnull().sum() @@ -400,7 +509,7 @@ def load(self) -> None: self.PERCENTAGE_HOUSEHOLDS_BELOW_200_PERC_POVERTY_LEVEL_FIELD_NAME, self.PERCENTAGE_HIGH_SCHOOL_ED_FIELD_NAME, self.UNEMPLOYMENT_FIELD_NAME, - ] + ] + self.final_race_fields self.df_all[columns_to_include].to_csv( path_or_buf=self.OUTPUT_PATH / "usa.csv", index=False diff --git a/data/data-pipeline/data_pipeline/etl/sources/child_opportunity_index/etl.py b/data/data-pipeline/data_pipeline/etl/sources/child_opportunity_index/etl.py index eb9de9db0..c3ecb5fbe 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/child_opportunity_index/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/child_opportunity_index/etl.py @@ -1,9 +1,10 @@ from pathlib import Path -import pandas as pd +import pandas as pd from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.score import field_names -from data_pipeline.utils import get_module_logger, unzip_file_from_url +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger +from data_pipeline.config import settings logger = get_module_logger(__name__) @@ -21,14 +22,35 @@ class ChildOpportunityIndex(ExtractTransformLoad): Full technical documents: https://www.diversitydatakids.org/sites/default/files/2020-02/ddk_coi2.0_technical_documentation_20200212.pdf. Github repo: https://github.com/diversitydatakids/COI/ - """ + # Metadata for the baseclass + NAME = "child_opportunity_index" + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + LOAD_YAML_CONFIG: bool = True + + # Define these for easy code completion + EXTREME_HEAT_FIELD: str + HEALTHY_FOOD_FIELD: str + IMPENETRABLE_SURFACES_FIELD: str + READING_FIELD: str + + PUERTO_RICO_EXPECTED_IN_DATA = False + def __init__(self): - self.COI_FILE_URL = ( - "https://data.diversitydatakids.org/datastore/zip/f16fff12-b1e5-4f60-85d3-" - "3a0ededa30a0?format=csv" - ) + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + self.SOURCE_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "child_opportunity_index/raw.zip" + ) + else: + self.SOURCE_URL = ( + "https://data.diversitydatakids.org/datastore/zip/f16fff12-b1e5-4f60-85d3-" + "3a0ededa30a0?format=csv" + ) + + # TODO: Decide about nixing this + self.TRACT_INPUT_COLUMN_NAME = self.INPUT_GEOID_TRACT_FIELD_NAME self.OUTPUT_PATH: Path = ( self.DATA_PATH / "dataset" / "child_opportunity_index" @@ -40,31 +62,19 @@ def __init__(self): self.IMPENETRABLE_SURFACES_INPUT_FIELD = "HE_GREEN" self.READING_INPUT_FIELD = "ED_READING" - # Constants for output - self.COLUMNS_TO_KEEP = [ - self.GEOID_TRACT_FIELD_NAME, - field_names.EXTREME_HEAT_FIELD, - field_names.HEALTHY_FOOD_FIELD, - field_names.IMPENETRABLE_SURFACES_FIELD, - field_names.READING_FIELD, - ] - - self.raw_df: pd.DataFrame self.output_df: pd.DataFrame def extract(self) -> None: logger.info("Starting 51MB data download.") - - unzip_file_from_url( - file_url=self.COI_FILE_URL, - download_path=self.get_tmp_path(), - unzipped_file_path=self.get_tmp_path() / "child_opportunity_index", + super().extract( + source_url=self.SOURCE_URL, + extract_path=self.get_tmp_path(), ) - self.raw_df = pd.read_csv( - filepath_or_buffer=self.get_tmp_path() - / "child_opportunity_index" - / "raw.csv", + def transform(self) -> None: + logger.info("Starting transforms.") + raw_df = pd.read_csv( + filepath_or_buffer=self.get_tmp_path() / "raw.csv", # The following need to remain as strings for all of their digits, not get # converted to numbers. dtype={ @@ -73,16 +83,13 @@ def extract(self) -> None: low_memory=False, ) - def transform(self) -> None: - logger.info("Starting transforms.") - - output_df = self.raw_df.rename( + output_df = raw_df.rename( columns={ self.TRACT_INPUT_COLUMN_NAME: self.GEOID_TRACT_FIELD_NAME, - self.EXTREME_HEAT_INPUT_FIELD: field_names.EXTREME_HEAT_FIELD, - self.HEALTHY_FOOD_INPUT_FIELD: field_names.HEALTHY_FOOD_FIELD, - self.IMPENETRABLE_SURFACES_INPUT_FIELD: field_names.IMPENETRABLE_SURFACES_FIELD, - self.READING_INPUT_FIELD: field_names.READING_FIELD, + self.EXTREME_HEAT_INPUT_FIELD: self.EXTREME_HEAT_FIELD, + self.HEALTHY_FOOD_INPUT_FIELD: self.HEALTHY_FOOD_FIELD, + self.IMPENETRABLE_SURFACES_INPUT_FIELD: self.IMPENETRABLE_SURFACES_FIELD, + self.READING_INPUT_FIELD: self.READING_FIELD, } ) @@ -95,8 +102,8 @@ def transform(self) -> None: # Convert percents from 0-100 to 0-1 to standardize with our other fields. percent_fields_to_convert = [ - field_names.HEALTHY_FOOD_FIELD, - field_names.IMPENETRABLE_SURFACES_FIELD, + self.HEALTHY_FOOD_FIELD, + self.IMPENETRABLE_SURFACES_FIELD, ] for percent_field_to_convert in percent_fields_to_convert: @@ -105,11 +112,3 @@ def transform(self) -> None: ) self.output_df = output_df - - def load(self) -> None: - logger.info("Saving CSV") - - self.OUTPUT_PATH.mkdir(parents=True, exist_ok=True) - self.output_df[self.COLUMNS_TO_KEEP].to_csv( - path_or_buf=self.OUTPUT_PATH / "usa.csv", index=False - ) diff --git a/data/data-pipeline/data_pipeline/etl/sources/doe_energy_burden/etl.py b/data/data-pipeline/data_pipeline/etl/sources/doe_energy_burden/etl.py index 80407d390..3ce2e5a6d 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/doe_energy_burden/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/doe_energy_burden/etl.py @@ -1,64 +1,51 @@ from pathlib import Path -import pandas as pd +import pandas as pd from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger, unzip_file_from_url +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) class DOEEnergyBurden(ExtractTransformLoad): - def __init__(self): - self.DOE_FILE_URL = ( - settings.AWS_JUSTICE40_DATASOURCES_URL - + "/DOE_LEAD_AMI_TRACT_2018_ALL.csv.zip" - ) + NAME = "doe_energy_burden" + SOURCE_URL: str = ( + settings.AWS_JUSTICE40_DATASOURCES_URL + + "/DOE_LEAD_AMI_TRACT_2018_ALL.csv.zip" + ) + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + LOAD_YAML_CONFIG: bool = True + + REVISED_ENERGY_BURDEN_FIELD_NAME: str + def __init__(self): self.OUTPUT_PATH: Path = ( self.DATA_PATH / "dataset" / "doe_energy_burden" ) - - self.TRACT_INPUT_COLUMN_NAME = "FIP" self.INPUT_ENERGY_BURDEN_FIELD_NAME = "BURDEN" - self.REVISED_ENERGY_BURDEN_FIELD_NAME = "Energy burden" - - # Constants for output - self.COLUMNS_TO_KEEP = [ - self.GEOID_TRACT_FIELD_NAME, - self.REVISED_ENERGY_BURDEN_FIELD_NAME, - ] self.raw_df: pd.DataFrame self.output_df: pd.DataFrame - def extract(self) -> None: - logger.info("Starting data download.") - - unzip_file_from_url( - file_url=self.DOE_FILE_URL, - download_path=self.get_tmp_path(), - unzipped_file_path=self.get_tmp_path() / "doe_energy_burden", - ) - - self.raw_df = pd.read_csv( + def transform(self) -> None: + logger.info("Starting DOE Energy Burden transforms.") + raw_df: pd.DataFrame = pd.read_csv( filepath_or_buffer=self.get_tmp_path() - / "doe_energy_burden" / "DOE_LEAD_AMI_TRACT_2018_ALL.csv", # The following need to remain as strings for all of their digits, not get converted to numbers. dtype={ - self.TRACT_INPUT_COLUMN_NAME: "string", + self.INPUT_GEOID_TRACT_FIELD_NAME: "string", }, low_memory=False, ) - def transform(self) -> None: - logger.info("Starting transforms.") - - output_df = self.raw_df.rename( + logger.info("Renaming columns and ensuring output format is correct") + output_df = raw_df.rename( columns={ self.INPUT_ENERGY_BURDEN_FIELD_NAME: self.REVISED_ENERGY_BURDEN_FIELD_NAME, - self.TRACT_INPUT_COLUMN_NAME: self.GEOID_TRACT_FIELD_NAME, + self.INPUT_GEOID_TRACT_FIELD_NAME: self.GEOID_TRACT_FIELD_NAME, } ) @@ -71,11 +58,3 @@ def transform(self) -> None: ) self.output_df = output_df - - def load(self) -> None: - logger.info("Saving DOE Energy Burden CSV") - - self.OUTPUT_PATH.mkdir(parents=True, exist_ok=True) - self.output_df[self.COLUMNS_TO_KEEP].to_csv( - path_or_buf=self.OUTPUT_PATH / "usa.csv", index=False - ) diff --git a/data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/README.md b/data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/README.md new file mode 100644 index 000000000..f369ed4db --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/README.md @@ -0,0 +1,16 @@ +# DOT travel barriers + +The below description is taken from DOT directly: + +Consistent with OMBā€™s Interim Guidance for the Justice40 Initiative, DOTā€™s interim definition of DACs includes (a) certain qualifying census tracts, (b) any Tribal land, or (c) any territory or possession of the United States. DOT has provided a mapping tool to assist applicants in identifying whether a project is located in a Disadvantaged Community, available at Transportation Disadvantaged Census Tracts (arcgis.com). A shapefile of the geospatial data is available Transportation Disadvantaged Census Tracts shapefile (version 2 .0, posted 5/10/22). + +The DOT interim definition for DACs was developed by an internal and external collaborative research process (see recordings from November 2021 public meetings). It includes data for 22 indicators collected at the census tract level and grouped into six (6) categories of transportation disadvantage. The numbers in parenthesis show how many indicators fall in that category: + +- Transportation access disadvantage identifies communities and places that spend more, and take longer, to get where they need to go. (4) +- Health disadvantage identifies communities based on variables associated with adverse health outcomes, disability, as well as environmental exposures. (3) +- Environmental disadvantage identifies communities with disproportionately high levels of certain air pollutants and high potential presence of lead-based paint in housing units. (6) +- Economic disadvantage identifies areas and populations with high poverty, low wealth, lack of local jobs, low homeownership, low educational attainment, and high inequality. (7) +Resilience disadvantage identifies communities vulnerable to hazards caused by climate change. (1) +- Equity disadvantage identifies communities with a with a high percentile of persons (age 5+) who speak English "less than well." (1) + +The CEJST uses only Transportation Access Disadvantage. diff --git a/data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/__init__.py b/data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/etl.py b/data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/etl.py new file mode 100644 index 000000000..f68c2d78e --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/dot_travel_composite/etl.py @@ -0,0 +1,69 @@ +# pylint: disable=unsubscriptable-object +# pylint: disable=unsupported-assignment-operation +import geopandas as gpd +import pandas as pd +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger +from data_pipeline.config import settings + +logger = get_module_logger(__name__) + + +class TravelCompositeETL(ExtractTransformLoad): + """ETL class for the DOT Travel Disadvantage Dataset""" + + NAME = "travel_composite" + + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + SOURCE_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "dot_travel_composite/Shapefile_and_Metadata.zip" + ) + else: + SOURCE_URL = "https://www.transportation.gov/sites/dot.gov/files/Shapefile_and_Metadata.zip" + + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + PUERTO_RICO_EXPECTED_IN_DATA = False + LOAD_YAML_CONFIG: bool = True + + # Output score variables (values set on datasets.yml) for linting purposes + TRAVEL_BURDEN_FIELD_NAME: str + + def __init__(self): + # define the full path for the input CSV file + self.INPUT_SHP = ( + self.get_tmp_path() / "DOT_Disadvantage_Layer_Final_April2022.shp" + ) + + # this is the main dataframe + self.df: pd.DataFrame + + # Start dataset-specific vars here + ## Average of Transportation Indicator Percentiles (calculated) + ## Calculated: Average of (EPL_TCB+EPL_NWKI+EPL_NOVEH+EPL_COMMUTE) excluding NULLS + ## See metadata for more information + self.INPUT_TRAVEL_DISADVANTAGE_FIELD_NAME = "Transp_TH" + self.INPUT_GEOID_TRACT_FIELD_NAME = "FIPS" + + def transform(self) -> None: + """Reads the unzipped data file into memory and applies the following + transformations to prepare it for the load() method: + + - Renames the Census Tract column to match the other datasets + - Converts to CSV + """ + logger.info("Transforming DOT Travel Disadvantage Data") + + # read in the unzipped shapefile from data source + # reformat it to be standard df, remove unassigned rows, and + # then rename the Census Tract column for merging + df_dot: pd.DataFrame = gpd.read_file(self.INPUT_SHP) + df_dot = df_dot.rename( + columns={ + self.INPUT_GEOID_TRACT_FIELD_NAME: self.GEOID_TRACT_FIELD_NAME, + self.INPUT_TRAVEL_DISADVANTAGE_FIELD_NAME: self.TRAVEL_BURDEN_FIELD_NAME, + } + ).dropna(subset=[self.GEOID_TRACT_FIELD_NAME]) + # Assign the final df to the class' output_df for the load method + self.output_df = df_dot diff --git a/data/data-pipeline/data_pipeline/etl/sources/eamlis/README.md b/data/data-pipeline/data_pipeline/etl/sources/eamlis/README.md new file mode 100644 index 000000000..54ce9c72c --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/eamlis/README.md @@ -0,0 +1,40 @@ +The following is the description from eAMLIS as of August 16, 2022. +--- + +e-AMLIS is not a comprehensive database of all AML features or all AML grant activities. e-AMLIS is a national inventory that provides information about known abandoned mine land (AML) features including polluted waters. The majority of the data in e-AMLIS provides information about known coal AML features for the 25 states and 3 tribal SMCRA-approved AML Programs. e-AMLIS also provides limited information on non-coal AML features, and, non-coal reclamation projects as well as AML features for states and tribes that do not have an approved AML Program. Additionally, e-AMLIS only accounts for the direct construction cost to reclaim each AML feature that has been identified by states and Tribes. Other project costs such as planning, design, permitting, and construction oversight are not tracked in e-AMLIS. + +The figures in e-AMLIS are further broken down into 3 cost categories: + +Unfunded Cost represents pre-construction estimates to reclaim the AML feature; +Funded Cost indicates that construction has been approved by OSM and these figures may change during construction; +Completed Cost is the actual cost to complete construction and reclamation of the AML feature. +DOI/OSMREā€™s Financial Business & Management System is the system of record to obtain comprehensive information about all AML grant expenditures. + +An inventory of land and water impacted by past mining (primarily coal mining) is maintained by OSMRE to provide information needed to implement the Surface Mining Control and Reclamation Act of 1977 (SMCRA). The inventory contains information on the location, type, and extent of AML impacts, as well as, information on the cost associated with the reclamation of those problems. The inventory is based upon field surveys by State, Tribal, and OSMRE program officials. It is dynamic to the extent that it is modified as new problems are identified and existing problems are reclaimed. + +The Abandoned Mine Land Reclamation Act (AMRA) of 1990, amended SMCRA. The amended law expanded the scope of data OSMRE must collect regarding AML reclamation programs and progress. On December 20, 2006, SMCRA was amended under the Tax Relief and Health Care Act of 2006 to add sources of program funding, emphasize high priority coal reclamation, and expand OSMREā€™s responsibilities towards implementation and management of the AML Inventory. + +WHO MAINTAINS THE INFORMATION IN THE AML INVENTORY? +The information is developed and/or updated by the States and Indian Tribes managing their own AML programs under SMCRA or by the OSMRE office responsible for States and Indian Tribes not managing their own AML problems. + +TYPES OF PROBLEMS +"High Priority" +The most serious AML problems are those posing a threat to health, safety and general welfare of people (Priority 1 and Priority 2, or "high priority"). These are the only problems which the law requires to be inventoried. There are 17 Priority 1 and 2 problem types. + +Emergencies +Under the 2006 amendments to SMCRA, AML grants to states and tribes increased from $145 million in FY 2007 to $395 million in FY 2011. The increase in funding allowed states to take responsibility for their AML emergencies as part of their regular AML programs. + +Until FY 2011, OSMRE provided Abandoned Mine Land (AML) State Emergency grants to the 15 states that manage their own emergency programs under the Abandoned Mine Land Reclamation Program. Thirteen other states and tribes that had approved AML programs did not receive emergency grants. OSMRE managed emergencies in those 13 states and tribes as well as in Federal Program States without AML programs. + +OSMRE officially notified the state and tribal officials and Congressional delegations that, starting on October 1, 2010, they would fully assume responsibility for funding their emergency programs. OSMRE then worked with states and tribes to ensure a smooth transition to the statesā€™ assumption of responsibility for administering state emergency programs. New funding and carryover balances were used during the transition to address immediate needs. + +Overall, OSMRE successfully transitioned the financial responsibility to the states in FY 2011, and continues to provide technical and program assistance when needed. States with AML programs are now in a position to effectively handle emergency programs. + +Environmental +AML problems impacting the environment are known as Priority 3 problems. While SMCRA does not require OSMRE to inventory every unreclaimed priority 3 problem, some program States and Indian tribes have chosen to submit such information. Information for priority 3 problem types is required when reclamation activities are funded and information on completed reclamation of priority 3 problems is kept in the inventory. + +Other Coal Mine Related Problems +Information is also kept on lower priority coal related AML problems such as lower priority coal-related projects involving public facilities, and the development of publicly-owned land. The lower priority problems are also categorized-- Priority 4 and 5 problem types. + +Non-coal Mine Related AML Problems +The non-coal problems are primarily problems reclaimed by States/Indian tribes that had "Certified" having addressed all known eligible coal related problems. States and Indian tribes managing their own AML programs reclaimed non-coal problems prior to addressing all their coal related problems under SMCRA SEC. 409-- FILLING VOIDS AND SEALING TUNNELS at the request of the Governor of the state or the governing body of the Indian tribe if the Secretary of the Department of the Interior determines such problems meet the criteria for a priority 1, extreme hazard, problems. This Program Area contains historical reclamation accomplishments for Certified Programs reclaiming Priority 1, 2, and 3 non-coal Problem Type features with pre-AML Reauthorization SMCRA funds distributed prior to October 1, 2007. diff --git a/data/data-pipeline/data_pipeline/etl/sources/eamlis/__init__.py b/data/data-pipeline/data_pipeline/etl/sources/eamlis/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/eamlis/etl.py b/data/data-pipeline/data_pipeline/etl/sources/eamlis/etl.py new file mode 100644 index 000000000..100c3d6a6 --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/eamlis/etl.py @@ -0,0 +1,81 @@ +from pathlib import Path + +import geopandas as gpd +import pandas as pd +from data_pipeline.config import settings +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.etl.sources.geo_utils import add_tracts_for_geometries +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +class AbandonedMineETL(ExtractTransformLoad): + """Data from Office Of Surface Mining Reclamation and Enforcement's + eAMLIS. These are the locations of abandoned mines. + """ + + # Metadata for the baseclass + NAME = "eamlis" + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + AML_BOOLEAN: str + LOAD_YAML_CONFIG: bool = True + + PUERTO_RICO_EXPECTED_IN_DATA = False + EXPECTED_MISSING_STATES = [ + "10", + "11", + "12", + "15", + "23", + "27", + "31", + "33", + "34", + "36", + "45", + "50", + "55", + ] + + # Define these for easy code completion + def __init__(self): + self.SOURCE_URL = ( + settings.AWS_JUSTICE40_DATASOURCES_URL + + "/eAMLIS export of all data.tsv.zip" + ) + + self.TRACT_INPUT_COLUMN_NAME = self.INPUT_GEOID_TRACT_FIELD_NAME + + self.OUTPUT_PATH: Path = ( + self.DATA_PATH / "dataset" / "abandoned_mine_land_inventory_system" + ) + + self.COLUMNS_TO_KEEP = [ + self.GEOID_TRACT_FIELD_NAME, + self.AML_BOOLEAN, + ] + + self.output_df: pd.DataFrame + + def transform(self) -> None: + logger.info("Starting eAMLIS transforms.") + df = pd.read_csv( + self.get_tmp_path() / "eAMLIS export of all data.tsv", + sep="\t", + low_memory=False, + ) + gdf = gpd.GeoDataFrame( + df, + geometry=gpd.points_from_xy( + x=df["Longitude"], + y=df["Latitude"], + ), + crs="epsg:4326", + ) + gdf = gdf.drop_duplicates(subset=["geometry"], keep="last") + gdf_tracts = add_tracts_for_geometries(gdf) + gdf_tracts = gdf_tracts.drop_duplicates(self.GEOID_TRACT_FIELD_NAME) + gdf_tracts[self.AML_BOOLEAN] = True + self.output_df = gdf_tracts[self.COLUMNS_TO_KEEP] diff --git a/data/data-pipeline/data_pipeline/etl/sources/ejscreen/etl.py b/data/data-pipeline/data_pipeline/etl/sources/ejscreen/etl.py index 683dbcd26..cba408cc7 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/ejscreen/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/ejscreen/etl.py @@ -1,6 +1,6 @@ import pandas as pd - from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel from data_pipeline.score import field_names from data_pipeline.utils import get_module_logger @@ -8,21 +8,22 @@ class EJSCREENETL(ExtractTransformLoad): - """Load EJSCREEN data. + """Load updated EJSCREEN data.""" - Data dictionary: - https://gaftp.epa.gov/EJSCREEN/2019/2019_EJSCREEN_columns_explained.csv - """ + NAME = "ejscreen" + GEO_LEVEL: ValidGeoLevel = ValidGeoLevel.CENSUS_TRACT + INPUT_GEOID_TRACT_FIELD_NAME: str = "ID" def __init__(self): - self.EJSCREEN_FTP_URL = "https://edap-arcgiscloud-data-commons.s3.amazonaws.com/EJSCREEN2020/EJSCREEN_Tract_2020_USPR.csv.zip" - self.EJSCREEN_CSV = self.get_tmp_path() / "EJSCREEN_Tract_2020_USPR.csv" - self.CSV_PATH = self.DATA_PATH / "dataset" / "ejscreen_2019" + self.EJSCREEN_FTP_URL = "https://gaftp.epa.gov/EJSCREEN/2021/EJSCREEN_2021_USPR_Tracts.csv.zip" + self.EJSCREEN_CSV = ( + self.get_tmp_path() / "EJSCREEN_2021_USPR_Tracts.csv" + ) + self.CSV_PATH = self.DATA_PATH / "dataset" / "ejscreen" self.df: pd.DataFrame self.COLUMNS_TO_KEEP = [ self.GEOID_TRACT_FIELD_NAME, - field_names.TOTAL_POP_FIELD, # pylint: disable=duplicate-code field_names.AIR_TOXICS_CANCER_RISK_FIELD, field_names.RESPIRATORY_HAZARD_FIELD, @@ -39,6 +40,7 @@ def __init__(self): field_names.OVER_64_FIELD, field_names.UNDER_5_FIELD, field_names.LEAD_PAINT_FIELD, + field_names.UST_FIELD, ] def extract(self) -> None: @@ -53,19 +55,16 @@ def transform(self) -> None: logger.info("Transforming EJScreen Data") self.df = pd.read_csv( self.EJSCREEN_CSV, - dtype={"ID": "string"}, + dtype={self.INPUT_GEOID_TRACT_FIELD_NAME: str}, # EJSCREEN writes the word "None" for NA data. na_values=["None"], low_memory=False, ) # rename ID to Tract ID - self.df.rename( + self.output_df = self.df.rename( columns={ - "ID": self.GEOID_TRACT_FIELD_NAME, - # Note: it is currently unorthodox to use `field_names` in an ETL class, - # but I think that's the direction we'd like to move all ETL classes. - LMB - "ACSTOTPOP": field_names.TOTAL_POP_FIELD, + self.INPUT_GEOID_TRACT_FIELD_NAME: self.GEOID_TRACT_FIELD_NAME, "CANCER": field_names.AIR_TOXICS_CANCER_RISK_FIELD, "RESP": field_names.RESPIRATORY_HAZARD_FIELD, "DSLPM": field_names.DIESEL_FIELD, @@ -81,14 +80,6 @@ def transform(self) -> None: "OVER64PCT": field_names.OVER_64_FIELD, "UNDER5PCT": field_names.UNDER_5_FIELD, "PRE1960PCT": field_names.LEAD_PAINT_FIELD, + "UST": field_names.UST_FIELD, # added for 2021 update }, - inplace=True, - ) - - def load(self) -> None: - logger.info("Saving EJScreen CSV") - # write nationwide csv - self.CSV_PATH.mkdir(parents=True, exist_ok=True) - self.df[self.COLUMNS_TO_KEEP].to_csv( - self.CSV_PATH / "usa.csv", index=False ) diff --git a/data/data-pipeline/data_pipeline/etl/sources/ejscreen_areas_of_concern/etl.py b/data/data-pipeline/data_pipeline/etl/sources/ejscreen_areas_of_concern/etl.py index 57749cc23..366e37388 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/ejscreen_areas_of_concern/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/ejscreen_areas_of_concern/etl.py @@ -1,5 +1,4 @@ import pandas as pd - from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.utils import get_module_logger @@ -58,7 +57,6 @@ def transform(self) -> None: # TO DO: As a one off we did all the processing in a separate Notebook # Can add here later for a future PR - pass def load(self) -> None: if self.ejscreen_areas_of_concern_data_exists(): diff --git a/data/data-pipeline/data_pipeline/etl/sources/energy_definition_alternative_draft/etl.py b/data/data-pipeline/data_pipeline/etl/sources/energy_definition_alternative_draft/etl.py index 7007fa522..d83287fa3 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/energy_definition_alternative_draft/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/energy_definition_alternative_draft/etl.py @@ -1,10 +1,11 @@ from pathlib import Path -import pandas as pd +import pandas as pd from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.score import field_names -from data_pipeline.utils import get_module_logger, unzip_file_from_url +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import unzip_file_from_url logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/etl/sources/epa_rsei/etl.py b/data/data-pipeline/data_pipeline/etl/sources/epa_rsei/etl.py index abc2165f5..1788b835e 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/epa_rsei/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/epa_rsei/etl.py @@ -1,9 +1,11 @@ from pathlib import Path -import pandas as pd +import pandas as pd from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.score import field_names -from data_pipeline.utils import get_module_logger, unzip_file_from_url +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import unzip_file_from_url +from data_pipeline.config import settings logger = get_module_logger(__name__) @@ -20,7 +22,17 @@ class EPARiskScreeningEnvironmentalIndicatorsETL(ExtractTransformLoad): """ def __init__(self): - self.AGGREGATED_RSEI_SCORE_FILE_URL = "http://abt-rsei.s3.amazonaws.com/microdata2019/census_agg/CensusMicroTracts2019_2019_aggregated.zip" + + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + self.AGGREGATED_RSEI_SCORE_FILE_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "epa_rsei/CensusMicroTracts2019_2019_aggregated.zip" + ) + else: + self.AGGREGATED_RSEI_SCORE_FILE_URL = ( + "http://abt-rsei.s3.amazonaws.com/microdata2019/" + "census_agg/CensusMicroTracts2019_2019_aggregated.zip" + ) self.OUTPUT_PATH: Path = self.DATA_PATH / "dataset" / "epa_rsei" self.EPA_RSEI_SCORE_THRESHOLD_CUTOFF = 0.75 diff --git a/data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/README.md b/data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/README.md new file mode 100644 index 000000000..c703cdedb --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/README.md @@ -0,0 +1,3 @@ +# FSF flood risk data + +Flood risk computed as 1 in 100 year flood zone diff --git a/data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/__init__.py b/data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/etl.py b/data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/etl.py new file mode 100644 index 000000000..1e829f3d3 --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/fsf_flood_risk/etl.py @@ -0,0 +1,86 @@ +# pylint: disable=unsubscriptable-object +# pylint: disable=unsupported-assignment-operation +import pandas as pd +from data_pipeline.config import settings +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +class FloodRiskETL(ExtractTransformLoad): + """ETL class for the First Street Foundation flood risk dataset""" + + NAME = "fsf_flood_risk" + # These data were emailed to the J40 team while first street got + # their official data sharing channels setup. + SOURCE_URL = settings.AWS_JUSTICE40_DATASOURCES_URL + "/fsf_flood.zip" + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + LOAD_YAML_CONFIG: bool = True + + # Output score variables (values set on datasets.yml) for linting purposes + COUNT_PROPERTIES: str + PROPERTIES_AT_RISK_FROM_FLOODING_TODAY: str + PROPERTIES_AT_RISK_FROM_FLOODING_IN_30_YEARS: str + SHARE_OF_PROPERTIES_AT_RISK_FROM_FLOODING_TODAY: str + SHARE_OF_PROPERTIES_AT_RISK_FROM_FLOODING_IN_30_YEARS: str + + def __init__(self): + # define the full path for the input CSV file + self.INPUT_CSV = ( + self.get_tmp_path() / "fsf_flood" / "flood-tract2010.csv" + ) + + # this is the main dataframe + self.df: pd.DataFrame + + # Start dataset-specific vars here + self.COUNT_PROPERTIES_NATIVE_FIELD_NAME = "count_properties" + self.COUNT_PROPERTIES_AT_RISK_TODAY = "mid_depth_100_year00" + self.COUNT_PROPERTIES_AT_RISK_30_YEARS = "mid_depth_100_year30" + self.CLIP_PROPERTIES_COUNT = 250 + + def transform(self) -> None: + """Reads the unzipped data file into memory and applies the following + transformations to prepare it for the load() method: + + - Renames the Census Tract column to match the other datasets + - Calculates share of properties at risk, left-clipping number of properties at 250 + """ + logger.info("Transforming National Risk Index Data") + + # read in the unzipped csv data source then rename the + # Census Tract column for merging + df_fsf_flood: pd.DataFrame = pd.read_csv( + self.INPUT_CSV, + dtype={self.INPUT_GEOID_TRACT_FIELD_NAME: str}, + low_memory=False, + ) + + df_fsf_flood[self.GEOID_TRACT_FIELD_NAME] = df_fsf_flood[ + self.INPUT_GEOID_TRACT_FIELD_NAME + ].str.zfill(11) + + df_fsf_flood[self.COUNT_PROPERTIES] = df_fsf_flood[ + self.COUNT_PROPERTIES_NATIVE_FIELD_NAME + ].clip(lower=self.CLIP_PROPERTIES_COUNT) + + df_fsf_flood[self.SHARE_OF_PROPERTIES_AT_RISK_FROM_FLOODING_TODAY] = ( + df_fsf_flood[self.COUNT_PROPERTIES_AT_RISK_TODAY] + / df_fsf_flood[self.COUNT_PROPERTIES] + ) + df_fsf_flood[ + self.SHARE_OF_PROPERTIES_AT_RISK_FROM_FLOODING_IN_30_YEARS + ] = ( + df_fsf_flood[self.COUNT_PROPERTIES_AT_RISK_30_YEARS] + / df_fsf_flood[self.COUNT_PROPERTIES] + ) + + # Assign the final df to the class' output_df for the load method with rename + self.output_df = df_fsf_flood.rename( + columns={ + self.COUNT_PROPERTIES_AT_RISK_TODAY: self.PROPERTIES_AT_RISK_FROM_FLOODING_TODAY, + self.COUNT_PROPERTIES_AT_RISK_30_YEARS: self.PROPERTIES_AT_RISK_FROM_FLOODING_IN_30_YEARS, + } + ) diff --git a/data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/README.md b/data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/README.md new file mode 100644 index 000000000..9d2e67068 --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/README.md @@ -0,0 +1,3 @@ +# FSF wildfire risk data + +Fire risk computed as >= 0.003 burn risk probability diff --git a/data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/__init__.py b/data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/etl.py b/data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/etl.py new file mode 100644 index 000000000..38a77f005 --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/fsf_wildfire_risk/etl.py @@ -0,0 +1,83 @@ +# pylint: disable=unsubscriptable-object +# pylint: disable=unsupported-assignment-operation +import pandas as pd +from data_pipeline.config import settings +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +class WildfireRiskETL(ExtractTransformLoad): + """ETL class for the First Street Foundation wildfire risk dataset""" + + NAME = "fsf_wildfire_risk" + # These data were emailed to the J40 team while first street got + # their official data sharing channels setup. + SOURCE_URL = settings.AWS_JUSTICE40_DATASOURCES_URL + "/fsf_fire.zip" + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + PUERTO_RICO_EXPECTED_IN_DATA = False + LOAD_YAML_CONFIG: bool = True + ALASKA_AND_HAWAII_EXPECTED_IN_DATA = False + + # Output score variables (values set on datasets.yml) for linting purposes + COUNT_PROPERTIES: str + PROPERTIES_AT_RISK_FROM_FIRE_TODAY: str + PROPERTIES_AT_RISK_FROM_FIRE_IN_30_YEARS: str + SHARE_OF_PROPERTIES_AT_RISK_FROM_FIRE_TODAY: str + SHARE_OF_PROPERTIES_AT_RISK_FROM_FIRE_IN_30_YEARS: str + + def __init__(self): + # define the full path for the input CSV file + self.INPUT_CSV = self.get_tmp_path() / "fsf_fire" / "fire-tract2010.csv" + + # this is the main dataframe + self.df: pd.DataFrame + + # Start dataset-specific vars here + self.COUNT_PROPERTIES_NATIVE_FIELD_NAME = "count_properties" + self.COUNT_PROPERTIES_AT_RISK_TODAY = "burnprob_year00_flag" + self.COUNT_PROPERTIES_AT_RISK_30_YEARS = "burnprob_year30_flag" + self.CLIP_PROPERTIES_COUNT = 250 + + def transform(self) -> None: + """Reads the unzipped data file into memory and applies the following + transformations to prepare it for the load() method: + + - Renames the Census Tract column to match the other datasets + - Calculates share of properties at risk, left-clipping number of properties at 250 + """ + logger.info("Transforming National Risk Index Data") + # read in the unzipped csv data source then rename the + # Census Tract column for merging + df_fsf_fire: pd.DataFrame = pd.read_csv( + self.INPUT_CSV, + dtype={self.INPUT_GEOID_TRACT_FIELD_NAME: str}, + low_memory=False, + ) + + df_fsf_fire[self.GEOID_TRACT_FIELD_NAME] = df_fsf_fire[ + self.INPUT_GEOID_TRACT_FIELD_NAME + ].str.zfill(11) + + df_fsf_fire[self.COUNT_PROPERTIES] = df_fsf_fire[ + self.COUNT_PROPERTIES_NATIVE_FIELD_NAME + ].clip(lower=self.CLIP_PROPERTIES_COUNT) + + df_fsf_fire[self.SHARE_OF_PROPERTIES_AT_RISK_FROM_FIRE_TODAY] = ( + df_fsf_fire[self.COUNT_PROPERTIES_AT_RISK_TODAY] + / df_fsf_fire[self.COUNT_PROPERTIES] + ) + df_fsf_fire[self.SHARE_OF_PROPERTIES_AT_RISK_FROM_FIRE_IN_30_YEARS] = ( + df_fsf_fire[self.COUNT_PROPERTIES_AT_RISK_30_YEARS] + / df_fsf_fire[self.COUNT_PROPERTIES] + ) + + # Assign the final df to the class' output_df for the load method with rename + self.output_df = df_fsf_fire.rename( + columns={ + self.COUNT_PROPERTIES_AT_RISK_TODAY: self.PROPERTIES_AT_RISK_FROM_FIRE_TODAY, + self.COUNT_PROPERTIES_AT_RISK_30_YEARS: self.PROPERTIES_AT_RISK_FROM_FIRE_IN_30_YEARS, + } + ) diff --git a/data/data-pipeline/data_pipeline/etl/sources/geo_utils.py b/data/data-pipeline/data_pipeline/etl/sources/geo_utils.py new file mode 100644 index 000000000..ec0f1b51e --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/geo_utils.py @@ -0,0 +1,92 @@ +"""Utililities for turning geographies into tracts, using census data""" +from functools import lru_cache +from pathlib import Path +from typing import Optional + +import geopandas as gpd +from data_pipeline.etl.sources.tribal.etl import TribalETL +from data_pipeline.utils import get_module_logger + +from .census.etl import CensusETL + +logger = get_module_logger(__name__) + + +@lru_cache() +def get_tract_geojson( + _tract_data_path: Optional[Path] = None, +) -> gpd.GeoDataFrame: + logger.info("Loading tract geometry data from census ETL") + GEOJSON_PATH = _tract_data_path + if GEOJSON_PATH is None: + GEOJSON_PATH = CensusETL.NATIONAL_TRACT_JSON_PATH + if not GEOJSON_PATH.exists(): + logger.debug("Census data has not been computed, running") + census_etl = CensusETL() + census_etl.extract() + census_etl.transform() + census_etl.load() + tract_data = gpd.read_file( + GEOJSON_PATH, + include_fields=["GEOID10"], + ) + tract_data = tract_data.rename( + columns={"GEOID10": "GEOID10_TRACT"}, errors="raise" + ) + return tract_data + + +@lru_cache() +def get_tribal_geojson( + _tribal_data_path: Optional[Path] = None, +) -> gpd.GeoDataFrame: + logger.info("Loading Tribal geometry data from Tribal ETL") + GEOJSON_PATH = _tribal_data_path + if GEOJSON_PATH is None: + GEOJSON_PATH = TribalETL().NATIONAL_TRIBAL_GEOJSON_PATH + if not GEOJSON_PATH.exists(): + logger.debug("Tribal data has not been computed, running") + tribal_etl = TribalETL() + tribal_etl.extract() + tribal_etl.transform() + tribal_etl.load() + tribal_data = gpd.read_file( + GEOJSON_PATH, + ) + return tribal_data + + +def add_tracts_for_geometries( + df: gpd.GeoDataFrame, tract_data: Optional[gpd.GeoDataFrame] = None +) -> gpd.GeoDataFrame: + """Adds tract-geoids to dataframe df that contains spatial geometries + + Depends on CensusETL for the geodata to do its conversion + + Args: + df (GeoDataFrame): a geopandas GeoDataFrame with a point geometry column + tract_data (GeoDataFrame): optional override to directly pass a + geodataframe of the tract boundaries. Also helps simplify testing. + + Returns: + GeoDataFrame: the above dataframe, with an additional GEOID10_TRACT column that + maps the points in DF to census tracts and a geometry column for later + spatial analysis + """ + logger.debug("Appending tract data to dataframe") + + if tract_data is None: + tract_data = get_tract_geojson() + else: + logger.debug("Using existing tract data.") + + assert ( + tract_data.crs == df.crs + ), f"Dataframe must be projected to {tract_data.crs}" + df = gpd.sjoin( + df, + tract_data[["GEOID10_TRACT", "geometry"]], + how="inner", + op="intersects", + ) + return df diff --git a/data/data-pipeline/data_pipeline/etl/sources/geocorr/etl.py b/data/data-pipeline/data_pipeline/etl/sources/geocorr/etl.py index ed088cae2..a75845be1 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/geocorr/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/geocorr/etl.py @@ -1,16 +1,18 @@ import pandas as pd - from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import ( - get_module_logger, - unzip_file_from_url, -) +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import unzip_file_from_url logger = get_module_logger(__name__) class GeoCorrETL(ExtractTransformLoad): + NAME = "geocorr" + GEO_LEVEL: ValidGeoLevel = ValidGeoLevel.CENSUS_TRACT + PUERTO_RICO_EXPECTED_IN_DATA = False + def __init__(self): self.OUTPUT_PATH = self.DATA_PATH / "dataset" / "geocorr" @@ -24,6 +26,10 @@ def __init__(self): self.GEOCORR_PLACES_URL = "https://justice40-data.s3.amazonaws.com/data-sources/geocorr_urban_rural.csv.zip" self.GEOCORR_GEOID_FIELD_NAME = "GEOID10_TRACT" self.URBAN_HEURISTIC_FIELD_NAME = "Urban Heuristic Flag" + self.COLUMNS_TO_KEEP = [ + self.GEOID_TRACT_FIELD_NAME, + self.URBAN_HEURISTIC_FIELD_NAME, + ] self.df: pd.DataFrame @@ -35,13 +41,11 @@ def extract(self) -> None: file_url=settings.AWS_JUSTICE40_DATASOURCES_URL + "/geocorr_urban_rural.csv.zip", download_path=self.get_tmp_path(), - unzipped_file_path=self.get_tmp_path() / "geocorr", + unzipped_file_path=self.get_tmp_path(), ) self.df = pd.read_csv( - filepath_or_buffer=self.get_tmp_path() - / "geocorr" - / "geocorr_urban_rural.csv", + filepath_or_buffer=self.get_tmp_path() / "geocorr_urban_rural.csv", dtype={ self.GEOCORR_GEOID_FIELD_NAME: "string", }, @@ -50,22 +54,10 @@ def extract(self) -> None: def transform(self) -> None: logger.info("Starting GeoCorr Urban Rural Map transform") + # Put in logic from Jupyter Notebook transform when we switch in the hyperlink to Geocorr - self.df.rename( + self.output_df = self.df.rename( columns={ "urban_heuristic_flag": self.URBAN_HEURISTIC_FIELD_NAME, }, - inplace=True, ) - - pass - - # Put in logic from Jupyter Notebook transform when we switch in the hyperlink to Geocorr - - def load(self) -> None: - logger.info("Saving GeoCorr Urban Rural Map Data") - - # mkdir census - self.OUTPUT_PATH.mkdir(parents=True, exist_ok=True) - - self.df.to_csv(path_or_buf=self.OUTPUT_PATH / "usa.csv", index=False) diff --git a/data/data-pipeline/data_pipeline/etl/sources/historic_redlining/README.md b/data/data-pipeline/data_pipeline/etl/sources/historic_redlining/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/historic_redlining/__init__.py b/data/data-pipeline/data_pipeline/etl/sources/historic_redlining/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/historic_redlining/etl.py b/data/data-pipeline/data_pipeline/etl/sources/historic_redlining/etl.py new file mode 100644 index 000000000..4a8de3153 --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/historic_redlining/etl.py @@ -0,0 +1,70 @@ +import pandas as pd +from data_pipeline.config import settings +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +class HistoricRedliningETL(ExtractTransformLoad): + NAME = "historic_redlining" + GEO_LEVEL: ValidGeoLevel = ValidGeoLevel.CENSUS_TRACT + EXPECTED_MISSING_STATES = [ + "10", + "11", + "16", + "23", + "30", + "32", + "35", + "38", + "46", + "50", + "56", + ] + PUERTO_RICO_EXPECTED_IN_DATA = False + ALASKA_AND_HAWAII_EXPECTED_IN_DATA: bool = False + SOURCE_URL = settings.AWS_JUSTICE40_DATASOURCES_URL + "/HRS_2010.zip" + + def __init__(self): + self.CSV_PATH = self.DATA_PATH / "dataset" / "historic_redlining" + + self.HISTORIC_REDLINING_FILE_PATH = ( + self.get_tmp_path() / "HRS_2010.xlsx" + ) + + self.REDLINING_SCALAR = "Tract-level redlining score" + + self.COLUMNS_TO_KEEP = [ + self.GEOID_TRACT_FIELD_NAME, + self.REDLINING_SCALAR, + ] + self.df: pd.DataFrame + + def transform(self) -> None: + logger.info("Transforming Historic Redlining Data") + # this is obviously temporary + historic_redlining_data = pd.read_excel( + self.HISTORIC_REDLINING_FILE_PATH + ) + historic_redlining_data[self.GEOID_TRACT_FIELD_NAME] = ( + historic_redlining_data["GEOID10"].astype(str).str.zfill(11) + ) + historic_redlining_data = historic_redlining_data.rename( + columns={"HRS2010": self.REDLINING_SCALAR} + ) + + logger.info(f"{historic_redlining_data.columns}") + + # Calculate lots of different score thresholds for convenience + for threshold in [3.25, 3.5, 3.75]: + historic_redlining_data[ + f"{self.REDLINING_SCALAR} meets or exceeds {round(threshold, 2)}" + ] = (historic_redlining_data[self.REDLINING_SCALAR] >= threshold) + ## NOTE We add to columns to keep here + self.COLUMNS_TO_KEEP.append( + f"{self.REDLINING_SCALAR} meets or exceeds {round(threshold, 2)}" + ) + + self.output_df = historic_redlining_data diff --git a/data/data-pipeline/data_pipeline/etl/sources/housing_and_transportation/etl.py b/data/data-pipeline/data_pipeline/etl/sources/housing_and_transportation/etl.py index 5a560e260..681d2cb91 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/housing_and_transportation/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/housing_and_transportation/etl.py @@ -1,9 +1,9 @@ import pandas as pd -from pandas.errors import EmptyDataError - from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.etl.sources.census.etl_utils import get_state_fips_codes -from data_pipeline.utils import get_module_logger, unzip_file_from_url +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import unzip_file_from_url +from pandas.errors import EmptyDataError logger = get_module_logger(__name__) @@ -35,7 +35,7 @@ def extract(self) -> None: # New file name: tmp_csv_file_path = ( - zip_file_dir / f"htaindex_data_tracts_{fips}.csv" + zip_file_dir / f"htaindex2019_data_tracts_{fips}.csv" ) try: diff --git a/data/data-pipeline/data_pipeline/etl/sources/hud_housing/etl.py b/data/data-pipeline/data_pipeline/etl/sources/hud_housing/etl.py index 6cc5b2c21..0e08d2259 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/hud_housing/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/hud_housing/etl.py @@ -1,16 +1,28 @@ import pandas as pd from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel from data_pipeline.utils import get_module_logger +from data_pipeline.config import settings logger = get_module_logger(__name__) class HudHousingETL(ExtractTransformLoad): + NAME = "hud_housing" + GEO_LEVEL: ValidGeoLevel = ValidGeoLevel.CENSUS_TRACT + def __init__(self): - self.OUTPUT_PATH = self.DATA_PATH / "dataset" / "hud_housing" self.GEOID_TRACT_FIELD_NAME = "GEOID10_TRACT" - self.HOUSING_FTP_URL = "https://www.huduser.gov/portal/datasets/cp/2014thru2018-140-csv.zip" - self.HOUSING_ZIP_FILE_DIR = self.get_tmp_path() / "hud_housing" + + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + self.HOUSING_FTP_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "hud_housing/2014thru2018-140-csv.zip" + ) + else: + self.HOUSING_FTP_URL = "https://www.huduser.gov/portal/datasets/cp/2014thru2018-140-csv.zip" + + self.HOUSING_ZIP_FILE_DIR = self.get_tmp_path() # We measure households earning less than 80% of HUD Area Median Family Income by county # and paying greater than 30% of their income to housing costs. @@ -19,6 +31,17 @@ def __init__(self): self.HOUSING_BURDEN_DENOMINATOR_FIELD_NAME = ( "HOUSING_BURDEN_DENOMINATOR" ) + self.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD_NAME = ( + "Share of homes with no kitchen or indoor plumbing (percent)" + ) + self.COLUMNS_TO_KEEP = [ + self.GEOID_TRACT_FIELD_NAME, + self.HOUSING_BURDEN_NUMERATOR_FIELD_NAME, + self.HOUSING_BURDEN_DENOMINATOR_FIELD_NAME, + self.HOUSING_BURDEN_FIELD_NAME, + self.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD_NAME, + "DENOM INCL NOT COMPUTED", + ] # Note: some variable definitions. # HUD-adjusted median family income (HAMFI). @@ -27,7 +50,8 @@ def __init__(self): # - incomplete plumbing facilities, # - more than 1 person per room, # - cost burden greater than 30%. - # Table 8 is the desired table. + # Table 8 is the desired table for housing burden + # Table 3 is the desired table for no kitchen or indoor plumbing self.df: pd.DataFrame @@ -38,124 +62,74 @@ def extract(self) -> None: self.HOUSING_ZIP_FILE_DIR, ) - def transform(self) -> None: - logger.info("Transforming HUD Housing Data") - + def _read_chas_table(self, file_name): # New file name: - tmp_csv_file_path = self.HOUSING_ZIP_FILE_DIR / "140" / "Table8.csv" - self.df = pd.read_csv( + tmp_csv_file_path = self.HOUSING_ZIP_FILE_DIR / "140" / file_name + tmp_df = pd.read_csv( filepath_or_buffer=tmp_csv_file_path, encoding="latin-1", ) - # Rename and reformat block group ID - self.df.rename( - columns={"geoid": self.GEOID_TRACT_FIELD_NAME}, inplace=True - ) - # The CHAS data has census tract ids such as `14000US01001020100` # Whereas the rest of our data uses, for the same tract, `01001020100`. - # the characters before `US`: - self.df[self.GEOID_TRACT_FIELD_NAME] = self.df[ - self.GEOID_TRACT_FIELD_NAME - ].str.replace(r"^.*?US", "", regex=True) + # This reformats and renames this field. + tmp_df[self.GEOID_TRACT_FIELD_NAME] = tmp_df["geoid"].str.replace( + r"^.*?US", "", regex=True + ) + + return tmp_df + + def transform(self) -> None: + logger.info("Transforming HUD Housing Data") + + table_8 = self._read_chas_table("Table8.csv") + table_3 = self._read_chas_table("Table3.csv") + + self.df = table_8.merge( + table_3, how="outer", on=self.GEOID_TRACT_FIELD_NAME + ) + + # Calculate share that lacks indoor plumbing or kitchen + # This is computed as + # ( + # owner occupied without plumbing + renter occupied without plumbing + # ) / ( + # total of owner and renter occupied + # ) + self.df[self.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD_NAME] = ( + # T3_est3: owner-occupied lacking complete plumbing or kitchen facilities for all levels of income + # T3_est46: subtotal: renter-occupied lacking complete plumbing or kitchen facilities for all levels of income + # T3_est2: subtotal: owner-occupied for all levels of income + # T3_est45: subtotal: renter-occupied for all levels of income + self.df["T3_est3"] + + self.df["T3_est46"] + ) / (self.df["T3_est2"] + self.df["T3_est45"]) # Calculate housing burden - # This is quite a number of steps. It does not appear to be accessible nationally in a simpler format, though. # See "CHAS data dictionary 12-16.xlsx" # Owner occupied numerator fields OWNER_OCCUPIED_NUMERATOR_FIELDS = [ - # Column Name - # Line_Type - # Tenure - # Household income - # Cost burden - # Facilities - "T8_est7", - # Subtotal - # Owner occupied - # less than or equal to 30% of HAMFI - # greater than 30% but less than or equal to 50% - # All - "T8_est10", - # Subtotal - # Owner occupied - # less than or equal to 30% of HAMFI - # greater than 50% - # All - "T8_est20", - # Subtotal - # Owner occupied - # greater than 30% but less than or equal to 50% of HAMFI - # greater than 30% but less than or equal to 50% - # All - "T8_est23", - # Subtotal - # Owner occupied - # greater than 30% but less than or equal to 50% of HAMFI - # greater than 50% - # All - "T8_est33", - # Subtotal - # Owner occupied - # greater than 50% but less than or equal to 80% of HAMFI - # greater than 30% but less than or equal to 50% - # All - "T8_est36", - # Subtotal - # Owner occupied - # greater than 50% but less than or equal to 80% of HAMFI - # greater than 50% - # All + "T8_est7", # Owner, less than or equal to 30% of HAMFI, greater than 30% but less than or equal to 50% + "T8_est10", # Owner, less than or equal to 30% of HAMFI, greater than 50% + "T8_est20", # Owner, greater than 30% but less than or equal to 50% of HAMFI, greater than 30% but less than or equal to 50% + "T8_est23", # Owner, greater than 30% but less than or equal to 50% of HAMFI, greater than 50% + "T8_est33", # Owner, greater than 50% but less than or equal to 80% of HAMFI, greater than 30% but less than or equal to 50% + "T8_est36", # Owner, greater than 50% but less than or equal to 80% of HAMFI, greater than 50% ] # These rows have the values where HAMFI was not computed, b/c of no or negative income. + # They are in the same order as the rows above OWNER_OCCUPIED_NOT_COMPUTED_FIELDS = [ - # Column Name - # Line_Type - # Tenure - # Household income - # Cost burden - # Facilities "T8_est13", - # Subtotal - # Owner occupied - # less than or equal to 30% of HAMFI - # not computed (no/negative income) - # All "T8_est26", - # Subtotal - # Owner occupied - # greater than 30% but less than or equal to 50% of HAMFI - # not computed (no/negative income) - # All "T8_est39", - # Subtotal - # Owner occupied - # greater than 50% but less than or equal to 80% of HAMFI - # not computed (no/negative income) - # All "T8_est52", - # Subtotal - # Owner occupied - # greater than 80% but less than or equal to 100% of HAMFI - # not computed (no/negative income) - # All "T8_est65", - # Subtotal - # Owner occupied - # greater than 100% of HAMFI - # not computed (no/negative income) - # All ] + # This represents all owner-occupied housing units OWNER_OCCUPIED_POPULATION_FIELD = "T8_est2" - # Subtotal - # Owner occupied - # All - # All - # All # Renter occupied numerator fields RENTER_OCCUPIED_NUMERATOR_FIELDS = [ @@ -280,18 +254,4 @@ def transform(self) -> None: float ) - def load(self) -> None: - logger.info("Saving HUD Housing Data") - - self.OUTPUT_PATH.mkdir(parents=True, exist_ok=True) - - # Drop unnecessary fields - self.df[ - [ - self.GEOID_TRACT_FIELD_NAME, - self.HOUSING_BURDEN_NUMERATOR_FIELD_NAME, - self.HOUSING_BURDEN_DENOMINATOR_FIELD_NAME, - self.HOUSING_BURDEN_FIELD_NAME, - "DENOM INCL NOT COMPUTED", - ] - ].to_csv(path_or_buf=self.OUTPUT_PATH / "usa.csv", index=False) + self.output_df = self.df diff --git a/data/data-pipeline/data_pipeline/etl/sources/hud_recap/etl.py b/data/data-pipeline/data_pipeline/etl/sources/hud_recap/etl.py index c5f6ce63c..447202f31 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/hud_recap/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/hud_recap/etl.py @@ -1,16 +1,27 @@ import pandas as pd import requests - +from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.utils import get_module_logger + logger = get_module_logger(__name__) class HudRecapETL(ExtractTransformLoad): def __init__(self): - # pylint: disable=line-too-long - self.HUD_RECAP_CSV_URL = "https://opendata.arcgis.com/api/v3/datasets/56de4edea8264fe5a344da9811ef5d6e_0/downloads/data?format=csv&spatialRefId=4326" # noqa: E501 + + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + self.HUD_RECAP_CSV_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "hud_recap/Racially_or_Ethnically_Concentrated_Areas_of_Poverty__R_ECAPs_.csv" + ) + else: + self.HUD_RECAP_CSV_URL = ( + "https://opendata.arcgis.com/api/v3/datasets/" + "56de4edea8264fe5a344da9811ef5d6e_0/downloads/data?format=csv&spatialRefId=4326" + ) + self.HUD_RECAP_CSV = ( self.get_tmp_path() / "Racially_or_Ethnically_Concentrated_Areas_of_Poverty__R_ECAPs_.csv" @@ -26,7 +37,11 @@ def __init__(self): def extract(self) -> None: logger.info("Downloading HUD Recap Data") - download = requests.get(self.HUD_RECAP_CSV_URL, verify=None) + download = requests.get( + self.HUD_RECAP_CSV_URL, + verify=None, + timeout=settings.REQUESTS_DEFAULT_TIMOUT, + ) file_contents = download.content csv_file = open(self.HUD_RECAP_CSV, "wb") csv_file.write(file_contents) diff --git a/data/data-pipeline/data_pipeline/etl/sources/mapping_for_ej/etl.py b/data/data-pipeline/data_pipeline/etl/sources/mapping_for_ej/etl.py index 5b0f2a391..4299dc04d 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/mapping_for_ej/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/mapping_for_ej/etl.py @@ -1,10 +1,9 @@ -import pandas as pd import geopandas as gpd - +import pandas as pd +from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger from data_pipeline.score import field_names -from data_pipeline.config import settings +from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) @@ -96,4 +95,3 @@ def load(self) -> None: def validate(self) -> None: logger.info("Validating Mapping For EJ Data") - pass diff --git a/data/data-pipeline/data_pipeline/etl/sources/mapping_inequality/data/holc_grades_manually_mapped.csv b/data/data-pipeline/data_pipeline/etl/sources/mapping_inequality/data/holc_grades_manually_mapped.csv index b4bbe7d08..bcc24910a 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/mapping_inequality/data/holc_grades_manually_mapped.csv +++ b/data/data-pipeline/data_pipeline/etl/sources/mapping_inequality/data/holc_grades_manually_mapped.csv @@ -37,4 +37,4 @@ Oklahoma City,90R,D Milwaukee Co.,S-D1,D Milwaukee Co.,S-D2,D Milwaukee Co.,S-D3,D -Milwaukee Co.,S-D4,D \ No newline at end of file +Milwaukee Co.,S-D4,D diff --git a/data/data-pipeline/data_pipeline/etl/sources/mapping_inequality/etl.py b/data/data-pipeline/data_pipeline/etl/sources/mapping_inequality/etl.py index ea2f81523..d9caac8df 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/mapping_inequality/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/mapping_inequality/etl.py @@ -1,10 +1,12 @@ import pathlib + import numpy as np import pandas as pd - from data_pipeline.etl.base import ExtractTransformLoad from data_pipeline.score import field_names -from data_pipeline.utils import download_file_from_url, get_module_logger +from data_pipeline.utils import download_file_from_url +from data_pipeline.utils import get_module_logger +from data_pipeline.config import settings logger = get_module_logger(__name__) @@ -21,10 +23,16 @@ class MappingInequalityETL(ExtractTransformLoad): """ def __init__(self): - self.MAPPING_INEQUALITY_CSV_URL = ( - "https://raw.githubusercontent.com/americanpanorama/Census_HOLC_Research/" - "main/2010_Census_Tracts/holc_tract_lookup.csv" - ) + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + self.MAPPING_INEQUALITY_CSV_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "mapping_inequality/holc_tract_lookup.csv" + ) + else: + self.MAPPING_INEQUALITY_CSV_URL = ( + "https://raw.githubusercontent.com/americanpanorama/Census_HOLC_Research/" + "main/2010_Census_Tracts/holc_tract_lookup.csv" + ) self.MAPPING_INEQUALITY_CSV = ( self.get_tmp_path() / "holc_tract_lookup.csv" ) @@ -47,16 +55,21 @@ def __init__(self): self.HOLC_GRADE_AND_ID_FIELD: str = "holc_id" self.CITY_INPUT_FIELD: str = "city" - self.HOLC_GRADE_D_FIELD: str = "HOLC Grade D" + self.HOLC_GRADE_D_FIELD: str = "HOLC Grade D (hazardous)" + self.HOLC_GRADE_C_FIELD: str = "HOLC Grade C (declining)" self.HOLC_GRADE_MANUAL_FIELD: str = "HOLC Grade (manually mapped)" self.HOLC_GRADE_DERIVED_FIELD: str = "HOLC Grade (derived)" self.COLUMNS_TO_KEEP = [ self.GEOID_TRACT_FIELD_NAME, + field_names.HOLC_GRADE_C_TRACT_PERCENT_FIELD, + field_names.HOLC_GRADE_C_OR_D_TRACT_PERCENT_FIELD, + field_names.HOLC_GRADE_C_OR_D_TRACT_50_PERCENT_FIELD, field_names.HOLC_GRADE_D_TRACT_PERCENT_FIELD, field_names.HOLC_GRADE_D_TRACT_20_PERCENT_FIELD, field_names.HOLC_GRADE_D_TRACT_50_PERCENT_FIELD, field_names.HOLC_GRADE_D_TRACT_75_PERCENT_FIELD, + field_names.REDLINED_SHARE, ] self.df: pd.DataFrame @@ -113,34 +126,58 @@ def transform(self) -> None: how="left", ) - # Create a single field that combines the 'derived' grade D field with the - # manually mapped grade D field into a single grade D field. - merged_df[self.HOLC_GRADE_D_FIELD] = np.where( - (merged_df[self.HOLC_GRADE_DERIVED_FIELD] == "D") - | (merged_df[self.HOLC_GRADE_MANUAL_FIELD] == "D"), - True, - None, - ) + # Create a single field that combines the 'derived' grade C and D fields with the + # manually mapped grade C and D field into a single grade C and D field. + ## Note: there are no manually derived C tracts at the moment + + for grade, field_name in [ + ("C", self.HOLC_GRADE_C_FIELD), + ("D", self.HOLC_GRADE_D_FIELD), + ]: + merged_df[field_name] = np.where( + (merged_df[self.HOLC_GRADE_DERIVED_FIELD] == grade) + | (merged_df[self.HOLC_GRADE_MANUAL_FIELD] == grade), + True, + None, + ) + + redlined_dataframes_list = [ + merged_df[merged_df[field].fillna(False)] + .groupby(self.GEOID_TRACT_FIELD_NAME)[self.TRACT_PROPORTION_FIELD] + .sum() + .rename(new_name) + for field, new_name in [ + ( + self.HOLC_GRADE_D_FIELD, + field_names.HOLC_GRADE_D_TRACT_PERCENT_FIELD, + ), + ( + self.HOLC_GRADE_C_FIELD, + field_names.HOLC_GRADE_C_TRACT_PERCENT_FIELD, + ), + ] + ] - # Start grouping by, to sum all of the grade D parts of each tract. + # Group by tract ID to get tract proportions of just C or just D + # This produces a single row per tract grouped_df = ( - merged_df.groupby( - by=[ - self.GEOID_TRACT_FIELD_NAME, - self.HOLC_GRADE_D_FIELD, - ], - # Keep the nulls, so we know the non-D proportion. - dropna=False, - )[self.TRACT_PROPORTION_FIELD] - .sum() + pd.concat( + redlined_dataframes_list, + axis=1, + ) + .fillna(0) .reset_index() ) - # Create a field that is only the percent that is grade D. - grouped_df[field_names.HOLC_GRADE_D_TRACT_PERCENT_FIELD] = np.where( - grouped_df[self.HOLC_GRADE_D_FIELD], - grouped_df[self.TRACT_PROPORTION_FIELD], - 0, + grouped_df[ + field_names.HOLC_GRADE_C_OR_D_TRACT_PERCENT_FIELD + ] = grouped_df[ + [ + field_names.HOLC_GRADE_C_TRACT_PERCENT_FIELD, + field_names.HOLC_GRADE_D_TRACT_PERCENT_FIELD, + ] + ].sum( + axis=1 ) # Calculate some specific threshold cutoffs, for convenience. @@ -154,15 +191,14 @@ def transform(self) -> None: grouped_df[field_names.HOLC_GRADE_D_TRACT_PERCENT_FIELD] > 0.75 ) - # Drop the non-True values of `self.HOLC_GRADE_D_FIELD` -- we only - # want one row per tract for future joins. - # Note this means not all tracts will be in this data. - # Note: this singleton comparison warning may be a pylint bug: - # https://stackoverflow.com/questions/51657715/pylint-pandas-comparison-to-true-should-be-just-expr-or-expr-is-true-sin#comment90876517_51657715 - # pylint: disable=singleton-comparison - grouped_df = grouped_df[ - grouped_df[self.HOLC_GRADE_D_FIELD] == True # noqa: E712 - ] + grouped_df[field_names.HOLC_GRADE_C_OR_D_TRACT_50_PERCENT_FIELD] = ( + grouped_df[field_names.HOLC_GRADE_C_OR_D_TRACT_PERCENT_FIELD] > 0.5 + ) + + # Create the indicator we will use + grouped_df[field_names.REDLINED_SHARE] = ( + grouped_df[field_names.HOLC_GRADE_C_OR_D_TRACT_PERCENT_FIELD] > 0.5 + ) & (grouped_df[field_names.HOLC_GRADE_D_TRACT_PERCENT_FIELD] > 0) # Sort for convenience. grouped_df.sort_values(by=self.GEOID_TRACT_FIELD_NAME, inplace=True) diff --git a/data/data-pipeline/data_pipeline/etl/sources/maryland_ejscreen/README.md b/data/data-pipeline/data_pipeline/etl/sources/maryland_ejscreen/README.md index e76fc47f6..f2949cc3d 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/maryland_ejscreen/README.md +++ b/data/data-pipeline/data_pipeline/etl/sources/maryland_ejscreen/README.md @@ -8,7 +8,7 @@ According to the documentation: There exist two data categories: Population Burden and Population Characteristics. -There are two indicators within Population Burden: Exposure, and Socioeconomic. Within Population Characteristics, there exist two indicators: Sensitive, Environmental Effects. Each respective indicator contains several relevant covariates, and an averaged score. +There are two indicators within Population Burden: Exposure, and Socioeconomic. Within Population Characteristics, there exist two indicators: Sensitive, Environmental Effects. Each respective indicator contains several relevant covariates, and an averaged score. The two "Pollution Burden" average scores are then averaged together and the result is multiplied by the average of the "Population Characteristics" categories to get the total EJ Score for each tract. @@ -20,4 +20,4 @@ Furthermore, it was determined that Bladensburg residents are at a higher risk o Source: -Driver, A.; Mehdizadeh, C.; Bara-Garcia, S.; Bodenreider, C.; Lewis, J.; Wilson, S. Utilization of the Maryland Environmental Justice Screening Tool: A Bladensburg, Maryland Case Study. Int. J. Environ. Res. Public Health 2019, 16, 348. \ No newline at end of file +Driver, A.; Mehdizadeh, C.; Bara-Garcia, S.; Bodenreider, C.; Lewis, J.; Wilson, S. Utilization of the Maryland Environmental Justice Screening Tool: A Bladensburg, Maryland Case Study. Int. J. Environ. Res. Public Health 2019, 16, 348. diff --git a/data/data-pipeline/data_pipeline/etl/sources/maryland_ejscreen/etl.py b/data/data-pipeline/data_pipeline/etl/sources/maryland_ejscreen/etl.py index 5f7cff177..fb1679cec 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/maryland_ejscreen/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/maryland_ejscreen/etl.py @@ -1,11 +1,11 @@ from glob import glob + import geopandas as gpd import pandas as pd - +from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger from data_pipeline.score import field_names -from data_pipeline.config import settings +from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/etl/sources/michigan_ejscreen/README.md b/data/data-pipeline/data_pipeline/etl/sources/michigan_ejscreen/README.md index 03ada026e..1bab79272 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/michigan_ejscreen/README.md +++ b/data/data-pipeline/data_pipeline/etl/sources/michigan_ejscreen/README.md @@ -1,5 +1,4 @@ # Michigan EJSCREEN - The Michigan EJSCREEN description and publication can be found [here](https://deepblue.lib.umich.edu/bitstream/handle/2027.42/149105/AssessingtheStateofEnvironmentalJusticeinMichigan_344.pdf). @@ -30,4 +29,4 @@ Sources: * Minnesota Pollution Control Agency. (2015, December 15). Environmental Justice Framework Report. Retrieved from https://www.pca.state.mn.us/sites/default/files/p-gen5-05.pdf. -* Faust, J., L. August, K. Bangia, V. Galaviz, J. Leichty, S. Prasadā€¦ and L. Zeise. (2017, January). Update to the California Communities Environmental Health Screening Tool CalEnviroScreen 3.0. Retrieved from OEHHA website: https://oehha.ca.gov/media/downloads/calenviroscreen/report/ces3report.pdf \ No newline at end of file +* Faust, J., L. August, K. Bangia, V. Galaviz, J. Leichty, S. Prasadā€¦ and L. Zeise. (2017, January). Update to the California Communities Environmental Health Screening Tool CalEnviroScreen 3.0. Retrieved from OEHHA website: https://oehha.ca.gov/media/downloads/calenviroscreen/report/ces3report.pdf diff --git a/data/data-pipeline/data_pipeline/etl/sources/michigan_ejscreen/etl.py b/data/data-pipeline/data_pipeline/etl/sources/michigan_ejscreen/etl.py index f73fb89a1..cfbad0d33 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/michigan_ejscreen/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/michigan_ejscreen/etl.py @@ -1,9 +1,8 @@ import pandas as pd - +from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger from data_pipeline.score import field_names -from data_pipeline.config import settings +from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/etl/sources/national_risk_index/etl.py b/data/data-pipeline/data_pipeline/etl/sources/national_risk_index/etl.py index 5b14d79b8..ae31dab19 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/national_risk_index/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/national_risk_index/etl.py @@ -2,11 +2,11 @@ # but it may be a known bug. https://github.com/PyCQA/pylint/issues/1498 # pylint: disable=unsubscriptable-object # pylint: disable=unsupported-assignment-operation - import pandas as pd - -from data_pipeline.etl.base import ExtractTransformLoad, ValidGeoLevel +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel from data_pipeline.utils import get_module_logger +from data_pipeline.config import settings logger = get_module_logger(__name__) @@ -15,8 +15,21 @@ class NationalRiskIndexETL(ExtractTransformLoad): """ETL class for the FEMA National Risk Index dataset""" NAME = "national_risk_index" - SOURCE_URL = "https://hazards.fema.gov/nri/Content/StaticDocuments/DataDownload//NRI_Table_CensusTracts/NRI_Table_CensusTracts.zip" + + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + SOURCE_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "national_risk_index/NRI_Table_CensusTracts.zip" + ) + else: + SOURCE_URL = ( + "https://hazards.fema.gov/nri/Content/StaticDocuments/DataDownload/" + "NRI_Table_CensusTracts/NRI_Table_CensusTracts.zip" + ) + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + PUERTO_RICO_EXPECTED_IN_DATA = False + LOAD_YAML_CONFIG: bool = True # Output score variables (values set on datasets.yml) for linting purposes RISK_INDEX_EXPECTED_ANNUAL_LOSS_SCORE_FIELD_NAME: str @@ -33,9 +46,6 @@ class NationalRiskIndexETL(ExtractTransformLoad): AGRIVALUE_LOWER_BOUND = 408000 def __init__(self): - # load YAML config - self.DATASET_CONFIG = super().yaml_config_load() - # define the full path for the input CSV file self.INPUT_CSV = self.get_tmp_path() / "NRI_Table_CensusTracts.csv" @@ -156,6 +166,27 @@ def transform(self) -> None: lower=self.AGRIVALUE_LOWER_BOUND ) + ## Check that this clip worked -- that the only place the value has changed is when the clip took effect + base_expectation = ( + disaster_agriculture_sum_series + / df_nri[self.AGRICULTURAL_VALUE_INPUT_FIELD_NAME] + ) + assert ( + df_nri[ + df_nri[self.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD_NAME] + != base_expectation + ][self.AGRICULTURAL_VALUE_INPUT_FIELD_NAME].max() + <= self.AGRIVALUE_LOWER_BOUND + ), ( + "Clipping the agrivalue did not work. There are places where the value doesn't " + + "match an unclipped ratio, even where the agrivalue is above the lower bound!" + ) + + assert ( + df_nri[self.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD_NAME] + != base_expectation + ).sum() > 0, "Clipping the agrivalue did nothing!" + # This produces a boolean that is True in the case of non-zero agricultural value df_nri[self.CONTAINS_AGRIVALUE] = ( df_nri[self.AGRICULTURAL_VALUE_INPUT_FIELD_NAME] > 0 diff --git a/data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/README.md b/data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/README.md new file mode 100644 index 000000000..cf1d50144 --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/README.md @@ -0,0 +1,80 @@ +# Nature deprived communities data + +The following dataset was compiled by TPL (Trust for Public Lands) using NCLD data. We define as: AREA - [CROPLAND] - [IMPERVIOUS SURFACES]. + +## Codebook +- GEOID10 ā€“ Census tract ID +- SF ā€“ State Name +- CF ā€“ County Name +- P200_PFS ā€“ Percent of individuals below 200% Federal Poverty Line (from CEJST source data). +- CA_LT20 ā€“ Percent higher ed enrollment rate is less than 20% (from CEJST source data). +- TractAcres ā€“ Acres of tract calculated from ALAND10 field (area land/meters) in 2010 census tracts. + - CAVEAT: Some census tracts in the CEJST source file extend into open water. ALAND10 area was used to constrain percent calculations (e.g. cropland area) to land only. +- AcresCrops ā€“ Acres crops calculated by summing all cells in the NLCD Cropland Data Layer crop classes. +- PctCrops ā€“ Formula: AcresCrops/TractAcres*100. +- PctImperv ā€“ Mean imperviousness for each census tract. + - CAVEAT: Where tracts extend into open water, mean imperviousness may be underestimated. +- __TO USE__ PctNatural ā€“ Formula: 100 ā€“ PctCrops ā€“ PctImperv. +- PctNat90 ā€“ Tract in or below 10th percentile for PctNatural. 1 = True, 0 = False. + - PctNatural 10th percentile = 28.6439% +- ImpOrCrop ā€“ If tract >= 90th percentile for PctImperv OR PctCrops. 1 = True, 0 = False. + - PctImperv 90th percentile = 67.4146 % + - PctCrops 90th percentile = 27.8116 % +- LowInAndEd ā€“ If tract >= 65th percentile for P200_PFS AND CA_LT20. + - P200_PFS 65th percentile = 64.0% +- NatureDep ā€“ ImpOrCrp = 1 AND LowInAndEd = 1. + +We added `GEOID10_TRACT` before converting shapefile to csv. + +## Instructions to recreate + +### Creating Impervious plus Cropland Attributes for Census Tracts + +The Cropland Data Layer and NLCD Impervious layer were too big to put on our OneDrive, but you can download them here: + CDL: https://www.nass.usda.gov/Research_and_Science/Cropland/Release/datasets/2021_30m_cdls.zip + Impervious: https://s3-us-west-2.amazonaws.com/mrlc/nlcd_2019_impervious_l48_20210604.zip + + +#### Crops + +Add an attribute called TractAcres (or similar) to the census tracts to hold a value representing acres covered by the census tract. +Calculate the TractAcres field for each census tract by using the Calculate Geometry tool (set the Property to Area (geodesic), and the Units to Acres). +From the Cropland Data Layer (CDL), extract only the pixels representing crops, using the Extract by Attributes tool in ArcGIS Spatial Analyst toolbox. +a. The attribute table tells you the names of each type of land cover. Since the CDL also contains NLCD classes and empty classes, the actual crop classes must be extracted. +From the crops-only raster extracted from the CDL, run the Reclassify tool to create a binary layer where all crops = 1, and everything else is Null. +Run the Tabulate Area tool: +a. Zone data = census tracts +b. Input raster data = the binary crops layer +c. This will produce a table with the square meters of crops in each census tract contained in an attribute called VALUE_1 +Run the Join Field tool to join the table to the census tracts, with the VALUE_1 field as the Transfer Field, to transfer the VALUE_1 field (square meters of crops) to the census tracts. +Add a field to the census tracts called AcresCrops (or similar) to hold the acreage of crops in each census tract. +Calculate the AcresCrops field by multiplying the VALUE_1 field by 0.000247105 to produce acres of crops in each census tracts. +a. You can delete the VALUE_1 field. +Add a field called PctCrops (or similar) to hold the percent of each census tract occupied by crops. +Calculate the PctCrops field by dividing the AcresCrops field by the TractAcres field, and multiply by 100 to get the percent. +Impervious + +Run the Zonal Statistics as Table tool: +a. Zone data = census tracts +b. Input raster data = impervious data raster layer +c. Statistics type = Mean +d. This will produce a table with the percent of each census tract occupied by impervious surfaces, contained in an attribute called MEAN + +Run the Join Field tool to join the table to the census tracts, with the MEAN field as the Transfer Field, to transfer the MEAN field (percent impervious) to the census tracts. + +Add a field called PctImperv (or similar) to hold the percent impervious value. + +Calculate the PctImperv field by setting it equal to the MEAN field. +a. You can delete the MEAN field. +Combine the Crops and Impervious Data + +Open the census tracts attribute table and add a field called PctNatural (or similar). Calculate this field using this equation: 100 ā€“ PctCrops ā€“ PctImperv . This produces a value that tells you the percent of each census tract covered in natural land cover. + +Define the census tracts that fall in the 90th percentile of non-natural land cover: +a. Add a field called PctNat90 (or similar) +b. Right-click on the PctNatural field, and click Sort Ascending (lowest PctNatural values on top) +c. Select the top 10 percent of rows after the sort +d. Click on Show Selected Records in the attribute table +e. Calculate the PctNat90 field for the selected records = 1 +f. Clear the selection +g. The rows that now have a value of 1 for PctNat90 are the most lacking for natural land cover, and can be symbolized accordingly in a map diff --git a/data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/__init__.py b/data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/etl.py b/data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/etl.py new file mode 100644 index 000000000..ff1fab777 --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/nlcd_nature_deprived/etl.py @@ -0,0 +1,77 @@ +# pylint: disable=unsubscriptable-object +# pylint: disable=unsupported-assignment-operation +import pandas as pd +from data_pipeline.config import settings +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +class NatureDeprivedETL(ExtractTransformLoad): + """ETL class for the Nature Deprived Communities dataset""" + + NAME = "nlcd_nature_deprived" + SOURCE_URL = ( + settings.AWS_JUSTICE40_DATASOURCES_URL + + "/usa_conus_nat_dep__compiled_by_TPL.csv.zip" + ) + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + PUERTO_RICO_EXPECTED_IN_DATA = False + LOAD_YAML_CONFIG: bool = True + ALASKA_AND_HAWAII_EXPECTED_IN_DATA = False + + # Output score variables (values set on datasets.yml) for linting purposes + ELIGIBLE_FOR_NATURE_DEPRIVED_FIELD_NAME: str + TRACT_PERCENT_IMPERVIOUS_FIELD_NAME: str + TRACT_PERCENT_NON_NATURAL_FIELD_NAME: str + TRACT_PERCENT_CROPLAND_FIELD_NAME: str + + def __init__(self): + # define the full path for the input CSV file + self.INPUT_CSV = ( + self.get_tmp_path() / "usa_conus_nat_dep__compiled_by_TPL.csv" + ) + + # this is the main dataframe + self.df: pd.DataFrame + + # Start dataset-specific vars here + self.PERCENT_NATURAL_FIELD_NAME = "PctNatural" + self.PERCENT_IMPERVIOUS_FIELD_NAME = "PctImperv" + self.PERCENT_CROPLAND_FIELD_NAME = "PctCrops" + self.TRACT_ACRES_FIELD_NAME = "TractAcres" + # In order to ensure that tracts with very small Acreage, we want to create an eligibility criterion + # similar to agrivalue. Here, we are ensuring that a tract has at least 35 acres, or is above the 1st percentile + # for area. This does indeed remove tracts from the 90th+ percentile later on + self.TRACT_ACRES_LOWER_BOUND = 35 + + def transform(self) -> None: + """Reads the unzipped data file into memory and applies the following + transformations to prepare it for the load() method: + + - Renames columns as needed + """ + logger.info("Transforming NLCD Data") + + df_ncld: pd.DataFrame = pd.read_csv( + self.INPUT_CSV, + dtype={self.INPUT_GEOID_TRACT_FIELD_NAME: str}, + low_memory=False, + ) + + df_ncld[self.ELIGIBLE_FOR_NATURE_DEPRIVED_FIELD_NAME] = ( + df_ncld[self.TRACT_ACRES_FIELD_NAME] >= self.TRACT_ACRES_LOWER_BOUND + ) + df_ncld[self.TRACT_PERCENT_NON_NATURAL_FIELD_NAME] = ( + 100 - df_ncld[self.PERCENT_NATURAL_FIELD_NAME] + ) + + # Assign the final df to the class' output_df for the load method with rename + self.output_df = df_ncld.rename( + columns={ + self.PERCENT_IMPERVIOUS_FIELD_NAME: self.TRACT_PERCENT_IMPERVIOUS_FIELD_NAME, + self.PERCENT_CROPLAND_FIELD_NAME: self.TRACT_PERCENT_CROPLAND_FIELD_NAME, + } + ) diff --git a/data/data-pipeline/data_pipeline/etl/sources/persistent_poverty/etl.py b/data/data-pipeline/data_pipeline/etl/sources/persistent_poverty/etl.py index 44d35b4e6..82daf8610 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/persistent_poverty/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/persistent_poverty/etl.py @@ -1,12 +1,11 @@ import functools -import pandas as pd +import pandas as pd from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import ( - get_module_logger, - unzip_file_from_url, -) +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import unzip_file_from_url logger = get_module_logger(__name__) @@ -19,6 +18,10 @@ class PersistentPovertyETL(ExtractTransformLoad): Codebook: `https://s4.ad.brown.edu/Projects/Diversity/Researcher/LTBDDload/Dfiles/codebooks.pdf`. """ + NAME = "persistent_poverty" + GEO_LEVEL: ValidGeoLevel = ValidGeoLevel.CENSUS_TRACT + PUERTO_RICO_EXPECTED_IN_DATA = False + def __init__(self): self.OUTPUT_PATH = self.DATA_PATH / "dataset" / "persistent_poverty" @@ -75,7 +78,7 @@ def _join_input_dfs(self, dfs: list) -> pd.DataFrame: def extract(self) -> None: logger.info("Starting to download 86MB persistent poverty file.") - unzipped_file_path = self.get_tmp_path() / "persistent_poverty" + unzipped_file_path = self.get_tmp_path() unzip_file_from_url( file_url=settings.AWS_JUSTICE40_DATASOURCES_URL @@ -155,14 +158,4 @@ def transform(self) -> None: ) ) - self.df = transformed_df - - def load(self) -> None: - logger.info("Saving persistent poverty data.") - - # mkdir census - self.OUTPUT_PATH.mkdir(parents=True, exist_ok=True) - - self.df[self.COLUMNS_TO_KEEP].to_csv( - path_or_buf=self.OUTPUT_PATH / "usa.csv", index=False - ) + self.output_df = transformed_df diff --git a/data/data-pipeline/data_pipeline/etl/sources/tribal/etl.py b/data/data-pipeline/data_pipeline/etl/sources/tribal/etl.py index 852a956d0..0fdb852c8 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/tribal/etl.py +++ b/data/data-pipeline/data_pipeline/etl/sources/tribal/etl.py @@ -1,18 +1,25 @@ from pathlib import Path + import geopandas as gpd import pandas as pd - +from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad -from data_pipeline.utils import get_module_logger, unzip_file_from_url +from data_pipeline.score import field_names +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import unzip_file_from_url logger = get_module_logger(__name__) class TribalETL(ExtractTransformLoad): def __init__(self): - self.GEOJSON_BASE_PATH = self.DATA_PATH / "tribal" / "geojson" + self.GEOGRAPHIC_BASE_PATH = ( + self.DATA_PATH / "tribal" / "geographic_data" + ) self.CSV_BASE_PATH = self.DATA_PATH / "tribal" / "csv" - self.NATIONAL_TRIBAL_GEOJSON_PATH = self.GEOJSON_BASE_PATH / "usa.json" + self.NATIONAL_TRIBAL_GEOJSON_PATH = ( + self.GEOGRAPHIC_BASE_PATH / "usa.json" + ) self.USA_TRIBAL_DF_LIST = [] def extract(self) -> None: @@ -23,43 +30,66 @@ def extract(self) -> None: """ logger.info("Downloading Tribal Data") - bia_geojson_url = "https://justice40-data.s3.amazonaws.com/data-sources/BIA_National_LAR_json.zip" - alaska_geojson_url = "https://justice40-data.s3.amazonaws.com/data-sources/Alaska_Native_Villages_json.zip" + bia_shapefile_zip_url = ( + settings.AWS_JUSTICE40_DATASOURCES_URL + + "/BIA_National_LAR_updated_20220929.zip" + ) + + tsa_and_aian_geojson_zip_url = ( + settings.AWS_JUSTICE40_DATASOURCES_URL + + "/BIA_TSA_and_AIAN_json.zip" + ) + + alaska_geojson_url = ( + settings.AWS_JUSTICE40_DATASOURCES_URL + + "/Alaska_Native_Villages_json.zip" + ) unzip_file_from_url( - bia_geojson_url, + bia_shapefile_zip_url, self.TMP_PATH, - self.DATA_PATH / "tribal" / "geojson" / "bia_national_lar", + self.GEOGRAPHIC_BASE_PATH / "bia_national_lar", + ) + + unzip_file_from_url( + tsa_and_aian_geojson_zip_url, + self.TMP_PATH, + self.GEOGRAPHIC_BASE_PATH / "tsa_and_aian", ) unzip_file_from_url( alaska_geojson_url, self.TMP_PATH, - self.DATA_PATH / "tribal" / "geojson" / "alaska_native_villages", + self.GEOGRAPHIC_BASE_PATH / "alaska_native_villages", ) - pass - def _transform_bia_national_lar(self, tribal_geojson_path: Path) -> None: + def _transform_bia_national_lar(self, path: Path) -> None: """Transform the Tribal BIA National Lar Geodataframe and appends it to the national Tribal Dataframe List Args: - tribal_geojson_path (Path): the Path to the Tribal Geojson + path (Path): the Path to the BIA National Lar Returns: None """ - bia_national_lar_df = gpd.read_file(tribal_geojson_path) + bia_national_lar_df = gpd.read_file(path) + + # DELETE + logger.info(f"Columns: {bia_national_lar_df.columns}\n") bia_national_lar_df.drop( - ["OBJECTID", "GISAcres", "Shape_Length", "Shape_Area"], + ["GISAcres"], axis=1, inplace=True, ) bia_national_lar_df.rename( - columns={"TSAID": "tribalId", "LARName": "landAreaName"}, + columns={ + "LARID": field_names.TRIBAL_ID, + "LARName": field_names.TRIBAL_LAND_AREA_NAME, + }, inplace=True, ) @@ -87,7 +117,10 @@ def _transform_bia_aian_supplemental( ) bia_aian_supplemental_df.rename( - columns={"OBJECTID": "tribalId", "Land_Area_": "landAreaName"}, + columns={ + "OBJECTID": field_names.TRIBAL_ID, + "Land_Area_": field_names.TRIBAL_LAND_AREA_NAME, + }, inplace=True, ) @@ -113,7 +146,10 @@ def _transform_bia_tsa(self, tribal_geojson_path: Path) -> None: ) bia_tsa_df.rename( - columns={"TSAID": "tribalId", "LARName": "landAreaName"}, + columns={ + "TSAID": field_names.TRIBAL_ID, + "LARName": field_names.TRIBAL_LAND_AREA_NAME, + }, inplace=True, ) @@ -136,8 +172,8 @@ def _transform_alaska_native_villages( alaska_native_villages_df.rename( columns={ - "GlobalID": "tribalId", - "TRIBALOFFICENAME": "landAreaName", + "GlobalID": field_names.TRIBAL_ID, + "TRIBALOFFICENAME": field_names.TRIBAL_LAND_AREA_NAME, }, inplace=True, ) @@ -152,27 +188,30 @@ def transform(self) -> None: """ logger.info("Transforming Tribal Data") - # load the geojsons - bia_national_lar_geojson = ( - self.GEOJSON_BASE_PATH / "bia_national_lar" / "BIA_TSA.json" + # Set the filepaths: + bia_national_lar_shapefile = ( + self.GEOGRAPHIC_BASE_PATH / "bia_national_lar" ) + bia_aian_supplemental_geojson = ( - self.GEOJSON_BASE_PATH - / "bia_national_lar" + self.GEOGRAPHIC_BASE_PATH + / "tsa_and_aian" / "BIA_AIAN_Supplemental.json" ) - bia_tsa_geojson_geojson = ( - self.GEOJSON_BASE_PATH / "bia_national_lar" / "BIA_TSA.json" + + bia_tsa_geojson = ( + self.GEOGRAPHIC_BASE_PATH / "tsa_and_aian" / "BIA_TSA.json" ) + alaska_native_villages_geojson = ( - self.GEOJSON_BASE_PATH + self.GEOGRAPHIC_BASE_PATH / "alaska_native_villages" / "AlaskaNativeVillages.gdb.geojson" ) - self._transform_bia_national_lar(bia_national_lar_geojson) + self._transform_bia_national_lar(bia_national_lar_shapefile) self._transform_bia_aian_supplemental(bia_aian_supplemental_geojson) - self._transform_bia_tsa(bia_tsa_geojson_geojson) + self._transform_bia_tsa(bia_tsa_geojson) self._transform_alaska_native_villages(alaska_native_villages_geojson) def load(self) -> None: @@ -182,13 +221,13 @@ def load(self) -> None: None """ logger.info("Saving Tribal GeoJson and CSV") - usa_tribal_df = gpd.GeoDataFrame( pd.concat(self.USA_TRIBAL_DF_LIST, ignore_index=True) ) usa_tribal_df = usa_tribal_df.to_crs( "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" ) + logger.info("Writing national geojson file") usa_tribal_df.to_file( self.NATIONAL_TRIBAL_GEOJSON_PATH, driver="GeoJSON" diff --git a/data/data-pipeline/data_pipeline/etl/sources/tribal/etl_utils.py b/data/data-pipeline/data_pipeline/etl/sources/tribal/etl_utils.py index 4e1220181..ea97db1cb 100644 --- a/data/data-pipeline/data_pipeline/etl/sources/tribal/etl_utils.py +++ b/data/data-pipeline/data_pipeline/etl/sources/tribal/etl_utils.py @@ -1,11 +1,8 @@ from pathlib import Path -from data_pipeline.utils import ( - get_module_logger, - remove_all_from_dir, - remove_files_from_dir, -) - +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import remove_all_from_dir +from data_pipeline.utils import remove_files_from_dir logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/README.md b/data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/__init__.py b/data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/etl.py b/data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/etl.py new file mode 100644 index 000000000..35945228f --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/tribal_overlap/etl.py @@ -0,0 +1,274 @@ +from typing import Optional + +import geopandas as gpd +import numpy as np +import pandas as pd +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.etl.sources.geo_utils import add_tracts_for_geometries +from data_pipeline.etl.sources.geo_utils import get_tract_geojson +from data_pipeline.etl.sources.geo_utils import get_tribal_geojson +from data_pipeline.score import field_names +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +class TribalOverlapETL(ExtractTransformLoad): + """Calculates the overlap between Census tracts and Tribal boundaries.""" + + # Metadata for the baseclass + NAME = "tribal_overlap" + GEO_LEVEL = ValidGeoLevel.CENSUS_TRACT + + PUERTO_RICO_EXPECTED_IN_DATA = False + ALASKA_AND_HAWAII_EXPECTED_IN_DATA = True + EXPECTED_MISSING_STATES = [ + # 15 is Hawaii, which has Hawaiian Home Lands, but they are not included in + # this dataset. + "15", + # The following states do not have any federally recognized Tribes in this + # dataset. + "10", + "11", + "13", + "17", + "18", + "21", + "24", + "33", + "34", + "39", + "50", + "51", + "54", + ] + + # A Tribal area that requires some special processing. + ANNETTE_ISLAND_TRIBAL_NAME = "Annette Island" + + CRS_INTEGER = 3857 + TRIBAL_OVERLAP_CUTOFF = 0.995 # Percentage of overlap that rounds to 100% + + # Define these for easy code completion + def __init__(self): + self.COLUMNS_TO_KEEP = [ + self.GEOID_TRACT_FIELD_NAME, + field_names.COUNT_OF_TRIBAL_AREAS_IN_TRACT_AK, + field_names.COUNT_OF_TRIBAL_AREAS_IN_TRACT_CONUS, + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT, + field_names.NAMES_OF_TRIBAL_AREAS_IN_TRACT, + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT_DISPLAY, + field_names.IS_TRIBAL_DAC, + ] + + self.OVERALL_TRIBAL_COUNT = "OVERALL_TRIBAL_COUNT" + self.output_df: pd.DataFrame + self.census_tract_gdf: gpd.GeoDataFrame + self.tribal_gdf: gpd.GeoDataFrame + + @staticmethod + def _create_string_from_list(series: pd.Series) -> str: + """Helper method that creates a sorted string list (for tribal names).""" + str_list = series.tolist() + str_list = sorted(str_list) + return ", ".join(str_list) + + @classmethod + def _adjust_percentage_for_frontend( + cls, + percentage_float: float, + ) -> Optional[float]: + """Round numbers very close to 0 to 0 and very close to 1 to 1 for display""" + if percentage_float is None: + return None + if percentage_float < 0.01: + return 0.0 + if percentage_float > cls.TRIBAL_OVERLAP_CUTOFF: + return 1.0 + + return percentage_float + + def extract(self) -> None: + self.census_tract_gdf = get_tract_geojson() + self.tribal_gdf = get_tribal_geojson() + + def transform(self) -> None: + logger.info("Starting tribal overlap transforms.") + + # First, calculate whether tracts include any areas from the Tribal areas, + # for both the points in AK and the polygons in the continental US (CONUS). + tribal_overlap_with_tracts = add_tracts_for_geometries( + df=self.tribal_gdf, tract_data=self.census_tract_gdf + ) + + # Cleanup the suffixes in the tribal names + tribal_overlap_with_tracts[field_names.TRIBAL_LAND_AREA_NAME] = ( + tribal_overlap_with_tracts[field_names.TRIBAL_LAND_AREA_NAME] + .str.replace(" LAR", "") + .str.replace(" TSA", "") + .str.replace(" IRA", "") + .str.replace(" AK", "") + ) + + tribal_overlap_with_tracts = tribal_overlap_with_tracts.groupby( + [self.GEOID_TRACT_FIELD_NAME] + ).agg( + { + field_names.TRIBAL_ID: "count", + field_names.TRIBAL_LAND_AREA_NAME: self._create_string_from_list, + } + ) + + tribal_overlap_with_tracts = tribal_overlap_with_tracts.reset_index() + + tribal_overlap_with_tracts = tribal_overlap_with_tracts.rename( + columns={ + field_names.TRIBAL_ID: self.OVERALL_TRIBAL_COUNT, + field_names.TRIBAL_LAND_AREA_NAME: field_names.NAMES_OF_TRIBAL_AREAS_IN_TRACT, + } + ) + + # Second, calculate percentage overlap. + # Drop the points from the Tribal data (because these cannot be joined to a + # (Multi)Polygon tract data frame) + tribal_gdf_without_points = self.tribal_gdf[ + self.tribal_gdf.geom_type.isin(["Polygon", "MultiPolygon"]) + ] + + # Switch from geographic to projected CRSes + # because logically that's right + self.census_tract_gdf = self.census_tract_gdf.to_crs( + crs=self.CRS_INTEGER + ) + tribal_gdf_without_points = tribal_gdf_without_points.to_crs( + crs=self.CRS_INTEGER + ) + + # Create a measure for the entire census tract area + self.census_tract_gdf["area_tract"] = self.census_tract_gdf.area + + # Performing overlay funcion + # We have a mix of polygons and multipolygons, and we just want the overlaps + # without caring a ton about the specific types, so we ignore geom type. + # Realistically, this changes almost nothing in the calculation; True and False + # are the same within 9 digits of precision + gdf_joined = gpd.overlay( + self.census_tract_gdf, + tribal_gdf_without_points, + how="intersection", + keep_geom_type=False, + ) + + # Calculating the areas of the newly-created overlapping geometries + gdf_joined["area_joined"] = gdf_joined.area + + # Calculating the areas of the newly-created geometries in relation + # to the original tract geometries + gdf_joined[field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT] = ( + gdf_joined["area_joined"] / gdf_joined["area_tract"] + ) + + # Aggregate the results + percentage_results = gdf_joined.groupby( + [self.GEOID_TRACT_FIELD_NAME] + ).agg({field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT: "sum"}) + + percentage_results = percentage_results.reset_index() + + # Merge the two results. + merged_output_df = tribal_overlap_with_tracts.merge( + right=percentage_results, + how="outer", + on=self.GEOID_TRACT_FIELD_NAME, + ) + + # Finally, fix one unique error. + # There is one unique Tribal area (self.ANNETTE_ISLAND_TRIBAL_NAME) that is a polygon in + # Alaska. All other Tribal areas in Alaska are points. + # For tracts that *only* contain that Tribal area, leave percentage as is. + # For tracts that include that Tribal area AND Alaska Native villages, + # null the percentage, because we cannot calculate the percent of the tract + # this is within Tribal areas. + + # Create state FIPS codes. + merged_output_df_state_fips_code = merged_output_df[ + self.GEOID_TRACT_FIELD_NAME + ].str[0:2] + + # Start by testing for Annette Island exception, to make sure data is as + # expected + alaskan_non_annette_matches = ( + # Data from Alaska + (merged_output_df_state_fips_code == "02") + # Where the Tribal areas do *not* include Annette + & ( + ~merged_output_df[ + field_names.NAMES_OF_TRIBAL_AREAS_IN_TRACT + ].str.contains(self.ANNETTE_ISLAND_TRIBAL_NAME) + ) + # But somehow percentage is greater than zero. + & ( + merged_output_df[field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT] + > 0 + ) + ) + + # There should be none of these matches. + if sum(alaskan_non_annette_matches) > 0: + raise ValueError( + "Data has changed. More than one Alaskan Tribal Area has polygon " + "boundaries. You'll need to refactor this ETL. \n" + f"Data:\n{merged_output_df[alaskan_non_annette_matches]}" + ) + + # Now, fix the exception that is already known. + merged_output_df[ + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT + ] = np.where( + # For tracts inside Alaska + (merged_output_df_state_fips_code == "02") + # That are not only represented by Annette Island + & ( + merged_output_df[field_names.NAMES_OF_TRIBAL_AREAS_IN_TRACT] + != self.ANNETTE_ISLAND_TRIBAL_NAME + ), + # Set the value to `None` for tracts with more than just Annette. + None, + # Otherwise, set the value to what it was. + merged_output_df[field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT], + ) + + # Counting tribes in the lower 48 is different from counting in AK, + # so per request by the design and frontend team, we remove all the + # counts outside AK + merged_output_df[ + field_names.COUNT_OF_TRIBAL_AREAS_IN_TRACT_AK + ] = np.where( + # In Alaska + (merged_output_df_state_fips_code == "02"), + # Keep the counts + merged_output_df[self.OVERALL_TRIBAL_COUNT], + # Otherwise, null them + None, + ) + + # TODO: Count tribal areas in the lower 48 correctly + merged_output_df[ + field_names.COUNT_OF_TRIBAL_AREAS_IN_TRACT_CONUS + ] = None + + merged_output_df[field_names.IS_TRIBAL_DAC] = ( + merged_output_df[field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT] + > self.TRIBAL_OVERLAP_CUTOFF + ) + + # The very final thing we want to do is produce a string for the front end to show + # We do this here so that all of the logic is included + merged_output_df[ + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT_DISPLAY + ] = merged_output_df[field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT].apply( + self._adjust_percentage_for_frontend + ) + + self.output_df = merged_output_df diff --git a/data/data-pipeline/data_pipeline/etl/sources/us_army_fuds/__init__.py b/data/data-pipeline/data_pipeline/etl/sources/us_army_fuds/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/etl/sources/us_army_fuds/etl.py b/data/data-pipeline/data_pipeline/etl/sources/us_army_fuds/etl.py new file mode 100644 index 000000000..e915d7d9a --- /dev/null +++ b/data/data-pipeline/data_pipeline/etl/sources/us_army_fuds/etl.py @@ -0,0 +1,112 @@ +from pathlib import Path + +import geopandas as gpd +import numpy as np +import pandas as pd +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.etl.sources.geo_utils import add_tracts_for_geometries +from data_pipeline.utils import download_file_from_url +from data_pipeline.utils import get_module_logger +from data_pipeline.config import settings + +logger = get_module_logger(__name__) + + +class USArmyFUDS(ExtractTransformLoad): + """The Formerly Used Defense Sites (FUDS)""" + + NAME: str = "us_army_fuds" + + ELIGIBLE_FUDS_COUNT_FIELD_NAME: str + INELIGIBLE_FUDS_COUNT_FIELD_NAME: str + ELIGIBLE_FUDS_BINARY_FIELD_NAME: str + GEO_LEVEL: ValidGeoLevel = ValidGeoLevel.CENSUS_TRACT + LOAD_YAML_CONFIG: bool = True + + ISLAND_AREAS_EXPECTED_IN_DATA = True + + def __init__(self): + + if settings.DATASOURCE_RETRIEVAL_FROM_AWS: + self.FILE_URL = ( + f"{settings.AWS_JUSTICE40_DATASOURCES_URL}/raw-data-sources/" + "us_army_fuds/Formerly_Used_Defense_Sites_(FUDS)_" + "all_data_reported_to_Congress_in_FY2020.geojson" + ) + else: + self.FILE_URL: str = ( + "https://opendata.arcgis.com/api/v3/datasets/" + "3f8354667d5b4b1b8ad7a6e00c3cf3b1_1/downloads/" + "data?format=geojson&spatialRefId=4326&where=1%3D1" + ) + + self.OUTPUT_PATH: Path = self.DATA_PATH / "dataset" / "us_army_fuds" + + # Constants for output + self.COLUMNS_TO_KEEP = [ + self.GEOID_TRACT_FIELD_NAME, + self.ELIGIBLE_FUDS_COUNT_FIELD_NAME, + self.INELIGIBLE_FUDS_COUNT_FIELD_NAME, + self.ELIGIBLE_FUDS_BINARY_FIELD_NAME, + ] + self.DOWNLOAD_FILE_NAME = self.get_tmp_path() / "fuds.geojson" + + self.raw_df: gpd.GeoDataFrame + self.output_df: pd.DataFrame + + def extract(self) -> None: + logger.info("Starting FUDS data download.") + + download_file_from_url( + file_url=self.FILE_URL, + download_file_name=self.DOWNLOAD_FILE_NAME, + verify=True, + ) + + def transform(self) -> None: + logger.info("Starting FUDS transform.") + # before we try to do any transformation, get the tract data + # so it's loaded and the census ETL is out of scope + + logger.info("Loading FUDS data as GeoDataFrame for transform") + raw_df = gpd.read_file( + filename=self.DOWNLOAD_FILE_NAME, + low_memory=False, + ) + + # Note that the length of raw_df will not be exactly the same + # because same bases lack coordinated or have coordinates in + # Mexico or in the ocean. See the following dataframe: + # raw_df[~raw_df.OBJECTID.isin(df_with_tracts.OBJECTID)][ + # ['OBJECTID', 'CLOSESTCITY', 'COUNTY', 'ELIGIBILITY', + # 'STATE', 'LATITUDE', "LONGITUDE"]] + logger.debug("Adding tracts to FUDS data") + df_with_tracts = add_tracts_for_geometries(raw_df) + self.output_df = pd.DataFrame() + + # this will create a boolean series which you can do actually sans np.where + df_with_tracts["tmp_fuds"] = ( + df_with_tracts.ELIGIBILITY == "Eligible" + ) & (df_with_tracts.HASPROJECTS == "Yes") + + self.output_df[ + self.ELIGIBLE_FUDS_COUNT_FIELD_NAME + ] = df_with_tracts.groupby(self.GEOID_TRACT_FIELD_NAME)[ + "tmp_fuds" + ].sum() + + self.output_df[self.INELIGIBLE_FUDS_COUNT_FIELD_NAME] = ( + df_with_tracts[~df_with_tracts.tmp_fuds] + .groupby(self.GEOID_TRACT_FIELD_NAME) + .size() + ) + self.output_df = ( + self.output_df.fillna(0).astype(np.int64).sort_index().reset_index() + ) + + self.output_df[self.ELIGIBLE_FUDS_BINARY_FIELD_NAME] = np.where( + self.output_df[self.ELIGIBLE_FUDS_COUNT_FIELD_NAME] > 0.0, + True, + False, + ) diff --git a/data/data-pipeline/data_pipeline/files/readme-version-1.0.md b/data/data-pipeline/data_pipeline/files/readme-version-1.0.md new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/ipython/TractArea.ipynb b/data/data-pipeline/data_pipeline/ipython/TractArea.ipynb deleted file mode 100644 index d4b678c1b..000000000 --- a/data/data-pipeline/data_pipeline/ipython/TractArea.ipynb +++ /dev/null @@ -1,418 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 54, - "id": "df048f08", - "metadata": {}, - "outputs": [], - "source": [ - "import geopandas as gpd\n", - "import pathlib" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "62366f7d", - "metadata": {}, - "outputs": [], - "source": [ - "lowJson = pathlib.Path() / 'usa-low.json'\n", - "assert lowJson.exists()\n", - "highJson = pathlib.Path() / 'usa-high.json'\n", - "assert highJson.exists()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "4077ed78", - "metadata": {}, - "outputs": [], - "source": [ - "gdf = gpd.read_file(highJson)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "id": "d4abfc64", - "metadata": {}, - "outputs": [], - "source": [ - "gdf['area'] = gdf.apply(lambda row : gpd.GeoSeries(row['geometry']).area, axis = 1)" - ] - }, - { - "cell_type": "markdown", - "id": "5077d9ef", - "metadata": {}, - "source": [ - "Add `zlfc` = *zoom level full containment*, This field will indicate the maximum zoom level the user can go up to while still keeping the entire tract in view. Below, we sample a few tracts to get an idea of the relationship between zoom level and area" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "a1234574", - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
GEOID10SFCFareazlfc
984602185000200AlaskaNorth Slope Borough53.3237024.45
993702290000100AlaskaYukon-Koyukuk Census Area21.6531545.50
985702188000100AlaskaNorthwest Arctic Borough21.1881595.50
993502290000200AlaskaYukon-Koyukuk Census Area20.7447705.38
993402290000300AlaskaYukon-Koyukuk Census Area17.1408260.00
993602290000400AlaskaYukon-Koyukuk Census Area14.6874485.77
989302180000100AlaskaNome Census Area13.3778170.00
984702164000100AlaskaLake and Peninsula Borough13.0616445.33
991802261000100AlaskaValdez-Cordova Census Area11.1188350.00
994502050000100AlaskaBethel Census Area10.9518880.00
984102270000100AlaskaWade Hampton Census Area8.7718060.00
983902240000100AlaskaSoutheast Fairbanks Census Area8.6136900.00
984302070000100AlaskaDillingham Census Area8.5753070.00
994702050000300AlaskaBethel Census Area8.4080400.00
989902170000101AlaskaMatanuska-Susitna Borough6.4804440.00
994402068000100AlaskaDenali Borough5.9972360.00
983602013000100AlaskaAleutians East Borough5.4877260.00
992102122000100AlaskaKenai Peninsula Borough4.8318316.10
985102150000100AlaskaKodiak Island Borough4.6640090.00
985002105000300AlaskaHoonah-Angoon Census Area4.3057160.00
983802016000100AlaskaAleutians West Census Area4.0535200.00
991702282000100AlaskaYakutat City and Borough3.9261820.00
992002261000300AlaskaValdez-Cordova Census Area3.2854820.00
984002240000400AlaskaSoutheast Fairbanks Census Area3.2339610.00
991902261000200AlaskaValdez-Cordova Census Area3.1563170.00
1035441045970900OregonMalheur County2.7317190.00
988802198000100AlaskaPrince of Wales-Hyder Census Area2.6062860.00
1021241025960200OregonHarney County2.5689437.08
984402185000300AlaskaNorth Slope Borough2.4631650.00
985802130000100AlaskaKetchikan Gateway Borough2.4400510.00
\n", - "
" - ], - "text/plain": [ - " GEOID10 SF CF area zlfc\n", - "9846 02185000200 Alaska North Slope Borough 53.323702 4.45\n", - "9937 02290000100 Alaska Yukon-Koyukuk Census Area 21.653154 5.50\n", - "9857 02188000100 Alaska Northwest Arctic Borough 21.188159 5.50\n", - "9935 02290000200 Alaska Yukon-Koyukuk Census Area 20.744770 5.38\n", - "9934 02290000300 Alaska Yukon-Koyukuk Census Area 17.140826 0.00\n", - "9936 02290000400 Alaska Yukon-Koyukuk Census Area 14.687448 5.77\n", - "9893 02180000100 Alaska Nome Census Area 13.377817 0.00\n", - "9847 02164000100 Alaska Lake and Peninsula Borough 13.061644 5.33\n", - "9918 02261000100 Alaska Valdez-Cordova Census Area 11.118835 0.00\n", - "9945 02050000100 Alaska Bethel Census Area 10.951888 0.00\n", - "9841 02270000100 Alaska Wade Hampton Census Area 8.771806 0.00\n", - "9839 02240000100 Alaska Southeast Fairbanks Census Area 8.613690 0.00\n", - "9843 02070000100 Alaska Dillingham Census Area 8.575307 0.00\n", - "9947 02050000300 Alaska Bethel Census Area 8.408040 0.00\n", - "9899 02170000101 Alaska Matanuska-Susitna Borough 6.480444 0.00\n", - "9944 02068000100 Alaska Denali Borough 5.997236 0.00\n", - "9836 02013000100 Alaska Aleutians East Borough 5.487726 0.00\n", - "9921 02122000100 Alaska Kenai Peninsula Borough 4.831831 6.10\n", - "9851 02150000100 Alaska Kodiak Island Borough 4.664009 0.00\n", - "9850 02105000300 Alaska Hoonah-Angoon Census Area 4.305716 0.00\n", - "9838 02016000100 Alaska Aleutians West Census Area 4.053520 0.00\n", - "9917 02282000100 Alaska Yakutat City and Borough 3.926182 0.00\n", - "9920 02261000300 Alaska Valdez-Cordova Census Area 3.285482 0.00\n", - "9840 02240000400 Alaska Southeast Fairbanks Census Area 3.233961 0.00\n", - "9919 02261000200 Alaska Valdez-Cordova Census Area 3.156317 0.00\n", - "10354 41045970900 Oregon Malheur County 2.731719 0.00\n", - "9888 02198000100 Alaska Prince of Wales-Hyder Census Area 2.606286 0.00\n", - "10212 41025960200 Oregon Harney County 2.568943 7.08\n", - "9844 02185000300 Alaska North Slope Borough 2.463165 0.00\n", - "9858 02130000100 Alaska Ketchikan Gateway Borough 2.440051 0.00" - ] - }, - "execution_count": 89, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "gdf['zlfc'] = 0\n", - "gdf.at[9846, 'zlfc'] = 4.45\n", - "gdf.at[10212, 'zlfc'] = 7.08\n", - "gdf.at[9937, 'zlfc'] = 5.5\n", - "gdf.at[9857, 'zlfc'] = 5.5\n", - "gdf.at[9935, 'zlfc'] = 5.38\n", - "gdf.at[9936, 'zlfc'] = 5.77\n", - "gdf.at[9921, 'zlfc'] = 6.1\n", - "gdf.at[9847, 'zlfc'] = 5.33\n", - "gdf_short = gdf[[\"GEOID10\", \"SF\", \"CF\", \"area\", \"zlfc\"]]\n", - "gdf_short_sorted = gdf_short.sort_values(by='area', ascending=False);\n", - "gdf_short_sorted.head(30)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5930de0e", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "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.9.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/data/data-pipeline/data_pipeline/ipython/aggregate_burden_exploration.ipynb b/data/data-pipeline/data_pipeline/ipython/aggregate_burden_exploration.ipynb new file mode 100644 index 000000000..e4870bfde --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/aggregate_burden_exploration.ipynb @@ -0,0 +1,1238 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "029b2e96-5a58-4816-81cc-4f60da27e518", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import pathlib\n", + "\n", + "%load_ext lab_black" + ] + }, + { + "cell_type": "markdown", + "id": "c20b1785-f802-474d-8aec-423ec574bd05", + "metadata": {}, + "source": [ + "# Creating an aggregate burden index\n", + "\n", + "Although we will not be using a aggregate burden index for v1.0 of the CEJST, the USDS team wanted to demonstrate how even duplicating CalEnviroScreen's cumulative index (or a loose interpretation of it) would impact the communities highlighted. Here, the scoring procedure that we use is lifted as closely as possible from CalEnviroScreen, including the categorization of burdens and the weighting between cumulative score. \n", + "\n", + "The data team believes that a threshold methodology has significant limitations that an aggregate or cumulative burden index could remediate, and presents the following as an example of such an index. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3dac5f2a-385d-4d23-9564-cfbe2d0706d1", + "metadata": {}, + "outputs": [], + "source": [ + "SCORE_DIR = pathlib.Path.cwd().parent / \"data\" / \"score\" / \"csv\" / \"full\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9fb12b5e-1f53-4eaf-a306-42ea9c1422fd", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/Cellar/jupyterlab/3.2.8/libexec/lib/python3.9/site-packages/IPython/core/interactiveshell.py:3251: DtypeWarning: Columns (1,2,3,4,75,76,78) have mixed types.Specify dtype option on import or set low_memory=False.\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n" + ] + } + ], + "source": [ + "usa = pd.read_csv(\n", + " SCORE_DIR / \"usa.csv\",\n", + " dtype={\"GEOID10_TRACT\": str},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f80bdf5f-11e3-4967-a0b3-a7504374c803", + "metadata": {}, + "outputs": [], + "source": [ + "## environment\n", + "toxins_category = [\n", + " \"Percent pre-1960s housing (lead paint indicator) (percentile)\",\n", + " \"Proximity to Risk Management Plan (RMP) facilities (percentile)\",\n", + " \"Proximity to NPL sites (percentile)\",\n", + " \"Proximity to hazardous waste sites (percentile)\",\n", + " \"Wastewater discharge (percentile)\",\n", + "]\n", + "\n", + "## sensitive populations\n", + "health_category = [\n", + " \"Diagnosed diabetes among adults aged greater than or equal to 18 years (percentile)\",\n", + " \"Current asthma among adults aged greater than or equal to 18 years (percentile)\",\n", + " \"Coronary heart disease among adults aged greater than or equal to 18 years (percentile)\",\n", + " \"Low life expectancy (percentile)\",\n", + "]\n", + "\n", + "## exposure\n", + "built_environment_category = [\n", + " \"Expected building loss rate (Natural Hazards Risk Index) (percentile)\",\n", + " \"Expected agricultural loss rate (Natural Hazards Risk Index) (percentile)\",\n", + " \"Expected population loss rate (Natural Hazards Risk Index) (percentile)\",\n", + " \"Energy burden (percentile)\",\n", + " \"Diesel particulate matter exposure (percentile)\",\n", + " \"Traffic proximity and volume (percentile)\",\n", + " \"PM2.5 in the air (percentile)\",\n", + "]\n", + "\n", + "## socioeconomic\n", + "socioeconomic_category = [\n", + " \"Unemployment (percent) (percentile)\",\n", + " \"Housing burden (percent) (percentile)\",\n", + " \"Low median household income as a percent of area median income (percentile)\",\n", + " \"Percent of households in linguistic isolation (percentile)\",\n", + " \"Percent of individuals below 200% Federal Poverty Line, imputed and adjusted (percentile)\",\n", + " \"Percent individuals age 25 or over with less than high school degree (percentile)\",\n", + " \"Percent of individuals < 100% Federal Poverty Line (percentile)\",\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a5057a21-318c-438e-84da-8f2e765c02d5", + "metadata": {}, + "outputs": [], + "source": [ + "usa[\"toxins_cat\"] = usa[toxins_category].mean(axis=1)\n", + "usa[\"built_env_cat\"] = usa[built_environment_category].mean(axis=1)\n", + "usa[\"health_cat\"] = usa[health_category].mean(axis=1)\n", + "usa[\"ses_cat\"] = usa[socioeconomic_category].mean(axis=1)\n", + "\n", + "\n", + "usa[\"pollution_burden\"] = 0.5 * usa[\"toxins_cat\"] + usa[\"built_env_cat\"]\n", + "usa[\"population_characteristics\"] = usa[\"health_cat\"] + usa[\"ses_cat\"]\n", + "poll_max = usa[\"pollution_burden\"].max()\n", + "pop_max = usa[\"population_characteristics\"].max()\n", + "\n", + "usa[\"scaled_pollution_burden\"] = usa[\"pollution_burden\"] / poll_max\n", + "usa[\"scaled_population_characteristics\"] = usa[\"population_characteristics\"] / pop_max\n", + "\n", + "usa[\"cal_score\"] = (\n", + " usa[\"scaled_pollution_burden\"] * usa[\"scaled_population_characteristics\"]\n", + ")\n", + "usa[\"pct_cal_score\"] = usa[\"cal_score\"].rank(pct=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3217e0ce-d9ec-46b8-9584-4cf9f6b35686", + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.65
False420396823
True542319849
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.65 \n", + "False 42039 6823\n", + "True 5423 19849" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.65
False0.5670680.092036
True0.0731510.267745
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.65 \n", + "False 0.567068 0.092036\n", + "True 0.073151 0.267745" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.8
False4615213540
True131013132
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.8 \n", + "False 46152 13540\n", + "True 1310 13132" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.8
False0.6225480.182642
True0.0176710.177139
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.8 \n", + "False 0.622548 0.182642\n", + "True 0.017671 0.177139" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.825
False4657514923
True88711749
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.825 \n", + "False 46575 14923\n", + "True 887 11749" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.825
False0.6282540.201298
True0.0119650.158483
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.825 \n", + "False 0.628254 0.201298\n", + "True 0.011965 0.158483" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.85
False4689816405
True56410267
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.85 \n", + "False 46898 16405\n", + "True 564 10267" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.85
False0.6326110.221288
True0.0076080.138492
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.85 \n", + "False 0.632611 0.221288\n", + "True 0.007608 0.138492" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.9
False4728819625
True1747047
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.9 \n", + "False 47288 19625\n", + "True 174 7047" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
Definition N (communities)FalseTrue
pct_cal_score_0.9
False0.6378720.264723
True0.0023470.095058
\n", + "
" + ], + "text/plain": [ + "Definition N (communities) False True\n", + "pct_cal_score_0.9 \n", + "False 0.637872 0.264723\n", + "True 0.002347 0.095058" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# this shows the number of communities identified by Score N (base)\n", + "# that are also identified by our cumulative burden metric (at some threshold)\n", + "\n", + "for cutoff in [0.65, 0.8, 0.825, 0.85, 0.9]:\n", + "\n", + " usa[\"pct_cal_score_\" + str(cutoff)] = usa[\"pct_cal_score\"] >= cutoff\n", + " display(\n", + " pd.crosstab(\n", + " usa[\"pct_cal_score_\" + str(cutoff)],\n", + " usa[\"Definition N (communities)\"],\n", + " )\n", + " )\n", + " display(\n", + " pd.crosstab(\n", + " usa[\"pct_cal_score_\" + str(cutoff)],\n", + " usa[\"Definition N (communities)\"],\n", + " normalize=True,\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "fa47f4f8-16bd-47ec-b2a5-e20fe2d83c83", + "metadata": {}, + "source": [ + "## Does it square with calenvironscreen? \n", + "\n", + "Here we compare OUR work with the data from CalEnviroScreen, limiting to California. We see reasonable agreement -- the vast majority (>90%) of tracts at or above 90th percentile match." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5498bbd7-b40f-4e17-9dd4-c102f071b250", + "metadata": {}, + "outputs": [], + "source": [ + "DATA_DIR = pathlib.Path.cwd().parent / \"data\" / \"dataset\"\n", + "\n", + "true_ces = pd.read_csv(\n", + " DATA_DIR / \"calenviroscreen4/data06.csv\",\n", + " dtype={\"GEOID10_TRACT\": str},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "edf211f6-84ee-4a9f-b0a6-31ffc2622adb", + "metadata": {}, + "outputs": [], + "source": [ + "ces_merged = usa.merge(true_ces, on=\"GEOID10_TRACT\", how=\"right\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "cd54de47-2025-460e-beda-7807adf334df", + "metadata": {}, + "outputs": [], + "source": [ + "ces_merged[\"new_cal_score\"] = ces_merged[\"pct_cal_score\"].rank(pct=True)\n", + "ces_merged[\"new_cal_flag\"] = ces_merged[\"new_cal_score\"] >= 0.9" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "ea5aabe0-d3e3-47b2-98df-335538cbf8e4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False 0.900311\n", + "True 0.099689\n", + "Name: new_cal_flag, dtype: float64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ces_merged[\"new_cal_flag\"].value_counts(normalize=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d63f6db6-aae3-43e2-9ea8-5766d630fe8a", + "metadata": {}, + "outputs": [], + "source": [ + "ces_merged[\"any_flag\"] = (\n", + " ces_merged[\"pct_cal_score_0.9\"] | ces_merged[\"Definition N (communities)\"]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "23360b80-a3d3-4d35-b56c-cc7f6423646c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "pct_cal_score_0.9 DRAFT CES 4.0\\nPercentile Range\n", + "False 10-15% 0.052527\n", + " 20-25% 0.052527\n", + " 40-45% 0.052527\n", + " 1-5% (lowest scores) 0.052395\n", + " 15-20% 0.052395\n", + " 25-30% 0.052395\n", + " 30-35% 0.052395\n", + " 35-40% 0.052395\n", + " 5-10% 0.052395\n", + " 45-50% 0.052263\n", + " 50-55% 0.052263\n", + " 60-65% 0.052130\n", + " 55-60% 0.051998\n", + " 65-70% 0.051336\n", + " 70-75% 0.050410\n", + " 75-80% 0.048690\n", + " 80-85% 0.047499\n", + " 85-90% 0.041413\n", + " 90-95% 0.037841\n", + " 95-100% (highest scores) 0.028844\n", + " NaN 0.013363\n", + "True 95-100% (highest scores) 0.375262\n", + " 90-95% 0.232704\n", + " 85-90% 0.174004\n", + " 80-85% 0.079665\n", + " 75-80% 0.058700\n", + " 70-75% 0.033543\n", + " 65-70% 0.016771\n", + " NaN 0.008386\n", + " 55-60% 0.006289\n", + " 60-65% 0.006289\n", + " 50-55% 0.004193\n", + " 30-35% 0.002096\n", + " 45-50% 0.002096\n", + "Name: DRAFT CES 4.0\\nPercentile Range, dtype: float64" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Each row of the following outputs answers the question:\n", + "# what share of communities at or above the 90th percentile for our version of aggregate burden fall into\n", + "# each percentile range for the true calenviroscreen? For example, 38% of tracts that are above 90th percentile\n", + "# for our metric are in the highest score bucket on CES.\n", + "\n", + "ces_merged.groupby(\"pct_cal_score_0.9\")[\"DRAFT CES 4.0\\nPercentile Range\"].value_counts(\n", + " dropna=False, normalize=True\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "72bcce80-ed57-4f1c-ad01-c88b0b9046a8", + "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", + "
DRAFT CES 4.0\n", + "Percentile Range1-5% (lowest scores)10-15%15-20%20-25%25-30%30-35%35-40%40-45%45-50%5-10%50-55%55-60%60-65%65-70%70-75%75-80%80-85%85-90%90-95%95-100% (highest scores)
pct_cal_score_0.9
False0.0523950.0525270.0523950.0525270.0523950.0523950.0523950.0525270.0522630.0523950.0522630.0519980.0521300.0513360.0504100.048690.0474990.0414130.0378410.028844
TrueNaNNaNNaNNaNNaN0.002096NaNNaN0.002096NaN0.0041930.0062890.0062890.0167710.0335430.058700.0796650.1740040.2327040.375262
\n", + "
" + ], + "text/plain": [ + "DRAFT CES 4.0\n", + "Percentile Range 1-5% (lowest scores) 10-15% 15-20% \\\n", + "pct_cal_score_0.9 \n", + "False 0.052395 0.052527 0.052395 \n", + "True NaN NaN NaN \n", + "\n", + "DRAFT CES 4.0\n", + "Percentile Range 20-25% 25-30% 30-35% 35-40% \\\n", + "pct_cal_score_0.9 \n", + "False 0.052527 0.052395 0.052395 0.052395 \n", + "True NaN NaN 0.002096 NaN \n", + "\n", + "DRAFT CES 4.0\n", + "Percentile Range 40-45% 45-50% 5-10% 50-55% \\\n", + "pct_cal_score_0.9 \n", + "False 0.052527 0.052263 0.052395 0.052263 \n", + "True NaN 0.002096 NaN 0.004193 \n", + "\n", + "DRAFT CES 4.0\n", + "Percentile Range 55-60% 60-65% 65-70% 70-75% \\\n", + "pct_cal_score_0.9 \n", + "False 0.051998 0.052130 0.051336 0.050410 \n", + "True 0.006289 0.006289 0.016771 0.033543 \n", + "\n", + "DRAFT CES 4.0\n", + "Percentile Range 75-80% 80-85% 85-90% 90-95% \\\n", + "pct_cal_score_0.9 \n", + "False 0.04869 0.047499 0.041413 0.037841 \n", + "True 0.05870 0.079665 0.174004 0.232704 \n", + "\n", + "DRAFT CES 4.0\n", + "Percentile Range 95-100% (highest scores) \n", + "pct_cal_score_0.9 \n", + "False 0.028844 \n", + "True 0.375262 " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Easier to read!\n", + "ces_merged.groupby(\"pct_cal_score_0.9\")[\"DRAFT CES 4.0\\nPercentile Range\"].value_counts(\n", + " dropna=False, normalize=True\n", + ").rename(\"share\").reset_index().pivot_table(\n", + " index=\"pct_cal_score_0.9\", columns=\"DRAFT CES 4.0\\nPercentile Range\", values=\"share\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "86c66114-b090-4f96-877d-60dad7e18252", + "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", + "
any_flagFalseTrue
DRAFT CES 4.0\n", + "Percentile Range
1-5% (lowest scores)0.079518NaN
10-15%0.0771080.004255
15-20%0.0759040.005892
20-25%0.0726910.011457
25-30%0.0712850.013421
30-35%0.0688760.017676
35-40%0.0664660.021277
40-45%0.0618470.029133
45-50%0.0562250.037971
5-10%0.0787150.001309
50-55%0.0500000.048445
55-60%0.0467870.053355
60-65%0.0461850.054664
65-70%0.0399600.064484
70-75%0.0269080.086088
75-80%0.0236950.090998
80-85%0.0182730.100164
85-90%0.0132530.108020
90-95%0.0078310.117185
95-100% (highest scores)0.0032130.124714
\n", + "
" + ], + "text/plain": [ + "any_flag False True\n", + "DRAFT CES 4.0\\nPercentile Range \n", + "1-5% (lowest scores) 0.079518 NaN\n", + "10-15% 0.077108 0.004255\n", + "15-20% 0.075904 0.005892\n", + "20-25% 0.072691 0.011457\n", + "25-30% 0.071285 0.013421\n", + "30-35% 0.068876 0.017676\n", + "35-40% 0.066466 0.021277\n", + "40-45% 0.061847 0.029133\n", + "45-50% 0.056225 0.037971\n", + "5-10% 0.078715 0.001309\n", + "50-55% 0.050000 0.048445\n", + "55-60% 0.046787 0.053355\n", + "60-65% 0.046185 0.054664\n", + "65-70% 0.039960 0.064484\n", + "70-75% 0.026908 0.086088\n", + "75-80% 0.023695 0.090998\n", + "80-85% 0.018273 0.100164\n", + "85-90% 0.013253 0.108020\n", + "90-95% 0.007831 0.117185\n", + "95-100% (highest scores) 0.003213 0.124714" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Any flag here is score N or our version of cumulative burden. This table can be read the same way as above\n", + "\n", + "ces_merged.groupby(\"any_flag\")[\"DRAFT CES 4.0\\nPercentile Range\"].value_counts(\n", + " dropna=False, normalize=True\n", + ").rename(\"share\").reset_index().pivot_table(\n", + " index=\"any_flag\", columns=\"DRAFT CES 4.0\\nPercentile Range\", values=\"share\"\n", + ").T" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/ipython/agricultural_loss_indicator.ipynb b/data/data-pipeline/data_pipeline/ipython/agricultural_loss_indicator.ipynb index b7a0efb1f..0463d27a3 100644 --- a/data/data-pipeline/data_pipeline/ipython/agricultural_loss_indicator.ipynb +++ b/data/data-pipeline/data_pipeline/ipython/agricultural_loss_indicator.ipynb @@ -211,7 +211,9 @@ } ], "source": [ - "tmp = sns.FacetGrid(data=score_m, col=\"Urban Heuristic Flag\", col_wrap=2, height=7)\n", + "tmp = sns.FacetGrid(\n", + " data=score_m, col=\"Urban Heuristic Flag\", col_wrap=2, height=7\n", + ")\n", "tmp.map(\n", " sns.distplot,\n", " \"Expected agricultural loss rate (Natural Hazards Risk Index) (percentile)\",\n", @@ -250,7 +252,9 @@ ")\n", "\n", "nri_with_flag[\"total_ag_loss\"] = nri_with_flag.filter(like=\"EALA\").sum(axis=1)\n", - "nri_with_flag[\"total_ag_loss_pctile\"] = nri_with_flag[\"total_ag_loss\"].rank(pct=True)\n", + "nri_with_flag[\"total_ag_loss_pctile\"] = nri_with_flag[\"total_ag_loss\"].rank(\n", + " pct=True\n", + ")\n", "\n", "nri_with_flag.groupby(\"Urban Heuristic Flag\")[\"total_ag_loss_pctile\"].mean()" ] @@ -779,9 +783,9 @@ " \"Greater than or equal to the 90th percentile for expected agriculture loss rate, is low income, and has a low percent of higher ed students?\"\n", "].astype(int)\n", "\n", - "score_m_adjusted_tracts = set(score_m[score_m[\"adjusted\"] > 0][\"GEOID10_TRACT\"]).union(\n", - " all_ag_loss_tracts\n", - ")\n", + "score_m_adjusted_tracts = set(\n", + " score_m[score_m[\"adjusted\"] > 0][\"GEOID10_TRACT\"]\n", + ").union(all_ag_loss_tracts)\n", "display(len(set(all_scorem_tracts).difference(score_m_adjusted_tracts)))" ] }, @@ -832,7 +836,11 @@ " left_clip = nri_with_flag[nri_with_flag[\"Urban Heuristic Flag\"] == 0][\n", " \"AGRIVALUE\"\n", " ].quantile(threshold)\n", - " print(\"At threshold {:.2f}, minimum value is ${:,.0f}\".format(threshold, left_clip))\n", + " print(\n", + " \"At threshold {:.2f}, minimum value is ${:,.0f}\".format(\n", + " threshold, left_clip\n", + " )\n", + " )\n", " tmp_value = nri_with_flag[\"AGRIVALUE\"].clip(lower=left_clip)\n", " nri_with_flag[\"total_ag_loss_pctile_{:.2f}\".format(threshold)] = (\n", " nri_with_flag[\"total_ag_loss\"] / tmp_value\n", @@ -889,7 +897,9 @@ " .set_index(\"Left clip value\")[[\"Rural\", \"Urban\"]]\n", " .stack()\n", " .reset_index()\n", - " .rename(columns={\"level_1\": \"Tract classification\", 0: \"Average percentile\"})\n", + " .rename(\n", + " columns={\"level_1\": \"Tract classification\", 0: \"Average percentile\"}\n", + " )\n", ")" ] }, diff --git a/data/data-pipeline/data_pipeline/ipython/check_tribal_count.ipynb b/data/data-pipeline/data_pipeline/ipython/check_tribal_count.ipynb new file mode 100644 index 000000000..7ea4814b8 --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/check_tribal_count.ipynb @@ -0,0 +1,177 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8f03fec9-e4a0-4621-b94c-ff6459a42032", + "metadata": {}, + "source": [ + "This code is to do the one time check described in [ticket 1917]( Run a one-time check on count of federal Indian reservations)\n", + "\n", + "> We should do a one-time check on the BIA data we import, such that after import that have (for now in our staging environment) 326 federal Indian reservations on our map. The number 326 from https://www.bia.gov/faqs/what-federal-indian-reservation.\n", + ">\n", + "> If that one-time check to make sure we have all reservations fails, there's a list of federal Indian reservation names that we can use to track down which reservations are not shown on our map and troubleshoot." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "76c8eeac-21e0-4ff1-886d-b9cdd6199411", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "\n", + "module_path = os.path.abspath(os.path.join(\"../..\"))\n", + "if module_path not in sys.path:\n", + " sys.path.append(module_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "aaf46946-4fa7-4744-8cd6-723ce86a0213", + "metadata": {}, + "outputs": [], + "source": [ + "from data_pipeline.etl.sources.tribal.etl import TribalETL\n", + "from data_pipeline.etl.sources.geo_utils import get_tribal_geojson\n", + "import geopandas as gpd" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "039d244f-6c97-4b1b-af04-6f879cd2cd86", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext lab_black" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0f0b3597-844e-4328-b6c9-ac760301383e", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-09-23 11:56:25,551 [data_pipeline.etl.sources.tribal.etl] INFO Downloading Tribal Data\n", + "2022-09-23 11:56:25,552 [data_pipeline.utils] INFO Downloading https://justice40-data.s3.amazonaws.com/data-sources/BIA_National_LAR_json.zip\n", + "2022-09-23 11:56:26,068 [data_pipeline.utils] INFO Extracting /home/matt/active/justice40-tool/data/data-pipeline/data_pipeline/data/tmp/downloaded-47ce415c-cc72-4e6f-9cbc-7ad833e08813.zip\n", + "2022-09-23 11:56:26,190 [data_pipeline.utils] INFO Downloading https://justice40-data.s3.amazonaws.com/data-sources/Alaska_Native_Villages_json.zip\n", + "2022-09-23 11:56:26,290 [data_pipeline.utils] INFO Extracting /home/matt/active/justice40-tool/data/data-pipeline/data_pipeline/data/tmp/downloaded-7c700e59-83cd-4752-889c-159e58c71154.zip\n" + ] + } + ], + "source": [ + "etl = TribalETL()\n", + "etl.extract()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "51a5a5c7-c02b-4a6f-9f3d-19868e45d7b1", + "metadata": {}, + "outputs": [], + "source": [ + "GEOJSON_BASE_PATH = etl.GEOJSON_BASE_PATH" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "c4224aeb-6aa5-47fa-9c6f-e2cd9354720d", + "metadata": {}, + "outputs": [], + "source": [ + "bia_national_lar_geojson = (\n", + " GEOJSON_BASE_PATH / \"bia_national_lar\" / \"BIA_National_LAR.json\"\n", + ")\n", + "bia_aian_supplemental_geojson = (\n", + " GEOJSON_BASE_PATH / \"bia_national_lar\" / \"BIA_AIAN_Supplemental.json\"\n", + ")\n", + "bia_tsa_geojson_geojson = (\n", + " GEOJSON_BASE_PATH / \"bia_national_lar\" / \"BIA_TSA.json\"\n", + ")\n", + "alaska_native_villages_geojson = (\n", + " GEOJSON_BASE_PATH\n", + " / \"alaska_native_villages\"\n", + " / \"AlaskaNativeVillages.gdb.geojson\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "7dd74d24-4f55-45db-bdd9-f4ac945d6a78", + "metadata": {}, + "outputs": [], + "source": [ + "bia_national_lar_df = gpd.read_file(bia_national_lar_geojson)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "ae8dafb7-f997-4977-87da-53f0b4f98a98", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "326" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(\n", + " sorted(\n", + " list(\n", + " bia_national_lar_df.LARName.str.replace(\n", + " r\"\\(.*\\) \", \"\", regex=True\n", + " ).unique()\n", + " )\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "40849cc4-345b-4658-94ac-498154107e9f", + "metadata": {}, + "source": [ + "Looking at the main BIA LAR data file, and removing paranthecials (so that `'Acoma (Red Lake) LAR','Acoma LAR'` are counted as a single tribal entry), **we have 326 tribal areas**, which is the number we expected." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/ipython/compare_tiles_and_geoJson_files.ipynb b/data/data-pipeline/data_pipeline/ipython/compare_tiles_and_geoJson_files.ipynb new file mode 100644 index 000000000..0eabedc0e --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/compare_tiles_and_geoJson_files.ipynb @@ -0,0 +1,359 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "c9fab286", + "metadata": {}, + "outputs": [], + "source": [ + "# %load_ext lab_black\n", + "import json\n", + "import pandas as pd\n", + "import geopandas as gpd" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "dbd84e10", + "metadata": {}, + "outputs": [ + { + "ename": "DriverError", + "evalue": "/mnt/e/opt/justice40-tool/data/data-pipeline/data_pipeline/data/score/csv/tiles/usa.csv: No such file or directory", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mCPLE_OpenFailedError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32mfiona/_shim.pyx\u001b[0m in \u001b[0;36mfiona._shim.gdal_open_vector\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32mfiona/_err.pyx\u001b[0m in \u001b[0;36mfiona._err.exc_wrap_pointer\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mCPLE_OpenFailedError\u001b[0m: /mnt/e/opt/justice40-tool/data/data-pipeline/data_pipeline/data/score/csv/tiles/usa.csv: No such file or directory", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mDriverError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_10603/1449522338.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Read in the score geojson file\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mdata_pipeline\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0metl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconstants\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mDATA_SCORE_CSV_TILES_FILE_PATH\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mnation\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_file\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDATA_SCORE_CSV_TILES_FILE_PATH\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/.cache/pypoetry/virtualenvs/data-pipeline-WziHKidv-py3.8/lib/python3.8/site-packages/geopandas/io/file.py\u001b[0m in \u001b[0;36m_read_file\u001b[0;34m(filename, bbox, mask, rows, **kwargs)\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mfiona_env\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 160\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mreader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath_or_bytes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mfeatures\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 161\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 162\u001b[0m \u001b[0;31m# In a future Fiona release the crs attribute of features will\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.cache/pypoetry/virtualenvs/data-pipeline-WziHKidv-py3.8/lib/python3.8/site-packages/fiona/env.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 406\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 407\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mlocal\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_env\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 408\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 409\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.cache/pypoetry/virtualenvs/data-pipeline-WziHKidv-py3.8/lib/python3.8/site-packages/fiona/__init__.py\u001b[0m in \u001b[0;36mopen\u001b[0;34m(fp, mode, driver, schema, crs, encoding, layer, vfs, enabled_drivers, crs_wkt, **kwargs)\u001b[0m\n\u001b[1;32m 262\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 263\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'a'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'r'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 264\u001b[0;31m c = Collection(path, mode, driver=driver, encoding=encoding,\n\u001b[0m\u001b[1;32m 265\u001b[0m layer=layer, enabled_drivers=enabled_drivers, **kwargs)\n\u001b[1;32m 266\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'w'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.cache/pypoetry/virtualenvs/data-pipeline-WziHKidv-py3.8/lib/python3.8/site-packages/fiona/collection.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, ignore_fields, ignore_geometry, **kwargs)\u001b[0m\n\u001b[1;32m 160\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'r'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msession\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 162\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 163\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'a'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'w'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 164\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msession\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mWritingSession\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32mfiona/ogrext.pyx\u001b[0m in \u001b[0;36mfiona.ogrext.Session.start\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32mfiona/_shim.pyx\u001b[0m in \u001b[0;36mfiona._shim.gdal_open_vector\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mDriverError\u001b[0m: /mnt/e/opt/justice40-tool/data/data-pipeline/data_pipeline/data/score/csv/tiles/usa.csv: No such file or directory" + ] + } + ], + "source": [ + "# Read in the score geojson file\n", + "from data_pipeline.etl.score.constants import DATA_SCORE_CSV_TILES_FILE_PATH\n", + "\n", + "nation = gpd.read_file(DATA_SCORE_CSV_TILES_FILE_PATH)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f850529", + "metadata": {}, + "outputs": [], + "source": [ + "nation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5f342d36", + "metadata": {}, + "outputs": [], + "source": [ + "# get the columns of the df and sort the list:\n", + "sorted_nation = sorted(nation.columns.to_list())" + ] + }, + { + "cell_type": "markdown", + "id": "97aac08f", + "metadata": {}, + "source": [ + "CLI to covert a pbf into a json file (requires tippecannoe and jq to be installed)\n", + "\n", + "```bash\n", + "curl https://justice40-data.s3.amazonaws.com/data-pipeline-staging/1822/e6385c172f1d2adf588050375b7c0985035cfb24/data/score/tiles/high/8/67/101.pbf -o uh-1822-e638-8-67-101.pbf | tippecanoe-decode uh-1822-e638-8-67-101.pbf 8 67 101 | jq > cat uh-1822-e638-8-67-101.json\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cbe37ccb", + "metadata": {}, + "outputs": [], + "source": [ + "# load a random high-tile json (after decoding a pbf) file using json.loads()\n", + "with open(\"/Users/vims/Downloads/uh-1822-e638-8-67-101.json\", \"r\") as f:\n", + " random_tile_features = json.loads(f.read())\n", + "\n", + "# Flatten data around the features key:\n", + "flatten_features = pd.json_normalize(\n", + " random_tile_features, record_path=[\"features\"]\n", + ")\n", + "\n", + "# index into the feature properties, get keys and turn into a sorted list\n", + "random_tile = sorted(\n", + " list(flatten_features[\"features\"][0][0][\"properties\"].keys())\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a33f5126", + "metadata": {}, + "outputs": [], + "source": [ + "set_dif = set(sorted_nation).symmetric_difference(set(random_tile))\n", + "list(set_dif)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d228360b", + "metadata": {}, + "outputs": [], + "source": [ + "nation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b6925138", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f2d7ba0", + "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", + "
GEOID10SFCFHRS_ETAML_ETFUDS_ET
7127061480300MinnesotaItasca CountyNoneNone0
7527061940000MinnesotaItasca CountyNoneNone0
11527077460400MinnesotaLake of the Woods CountyNoneNone0
12727123042001MinnesotaRamsey CountyNoneNone0
16027123033400MinnesotaRamsey County0None0
.....................
7404716055000200IdahoKootenai CountyNoneNone0
7406816011950500IdahoBingham CountyNoneNone0
7407616001010503IdahoAda CountyNoneNone0
7410716001001000IdahoAda CountyNoneNone0
7412316001002100IdahoAda CountyNoneNone0
\n", + "

3170 rows Ɨ 6 columns

\n", + "
" + ], + "text/plain": [ + " GEOID10 SF CF HRS_ET AML_ET FUDS_ET\n", + "71 27061480300 Minnesota Itasca County None None 0\n", + "75 27061940000 Minnesota Itasca County None None 0\n", + "115 27077460400 Minnesota Lake of the Woods County None None 0\n", + "127 27123042001 Minnesota Ramsey County None None 0\n", + "160 27123033400 Minnesota Ramsey County 0 None 0\n", + "... ... ... ... ... ... ...\n", + "74047 16055000200 Idaho Kootenai County None None 0\n", + "74068 16011950500 Idaho Bingham County None None 0\n", + "74076 16001010503 Idaho Ada County None None 0\n", + "74107 16001001000 Idaho Ada County None None 0\n", + "74123 16001002100 Idaho Ada County None None 0\n", + "\n", + "[3170 rows x 6 columns]" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_HRS_GEO = nation[[\"GEOID10\", \"SF\", \"CF\", \"HRS_ET\", \"AML_ET\", \"FUDS_ET\"]]\n", + "nation_HRS_GEO.loc[nation_HRS_GEO[\"FUDS_ET\"] == \"0\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "02eef4b5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "678bea72", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([None, '0', '1'], dtype=object)" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation[\"HRS_ET\"].unique()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.8.10 ('data-pipeline-WziHKidv-py3.8')", + "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.10" + }, + "vscode": { + "interpreter": { + "hash": "c28609757c27a373a12dad8bc3a2aec46aa91130799a09665fba7d386f9c3756" + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/ipython/compare_two_score_files_for_differences.ipynb b/data/data-pipeline/data_pipeline/ipython/compare_two_score_files_for_differences.ipynb index f3619af63..6c4649724 100644 --- a/data/data-pipeline/data_pipeline/ipython/compare_two_score_files_for_differences.ipynb +++ b/data/data-pipeline/data_pipeline/ipython/compare_two_score_files_for_differences.ipynb @@ -150,7 +150,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.6" + "version": "3.9.10" } }, "nbformat": 4, diff --git a/data/data-pipeline/data_pipeline/ipython/county_lookup.ipynb b/data/data-pipeline/data_pipeline/ipython/county_lookup.ipynb index 6140f3183..7d733b1ff 100644 --- a/data/data-pipeline/data_pipeline/ipython/county_lookup.ipynb +++ b/data/data-pipeline/data_pipeline/ipython/county_lookup.ipynb @@ -163,4 +163,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/data/data-pipeline/data_pipeline/ipython/experiment_4_weighting/health_scores.py b/data/data-pipeline/data_pipeline/ipython/experiment_4_weighting/health_scores.py index de6c2a8fe..a0a9fd0a3 100644 --- a/data/data-pipeline/data_pipeline/ipython/experiment_4_weighting/health_scores.py +++ b/data/data-pipeline/data_pipeline/ipython/experiment_4_weighting/health_scores.py @@ -1,9 +1,6 @@ #!/usr/bin/env python # coding: utf-8 - # In[ ]: - - import numpy as np import pandas as pd from sklearn.preprocessing import MinMaxScaler diff --git a/data/data-pipeline/data_pipeline/ipython/explore_adjacency.ipynb b/data/data-pipeline/data_pipeline/ipython/explore_adjacency.ipynb new file mode 100644 index 000000000..af099cbc3 --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/explore_adjacency.ipynb @@ -0,0 +1,718 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "8d2dd0fc-5bd6-4d28-9ef3-f7cf7403f0be", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import pandas as pd\n", + "import numpy as np\n", + "import os\n", + "import sys\n", + "\n", + "module_path = os.path.abspath(os.path.join(\"../..\"))\n", + "if module_path not in sys.path:\n", + " sys.path.append(module_path)\n", + "\n", + "from data_pipeline.config import settings\n", + "from data_pipeline.etl.sources.geo_utils import (\n", + " add_tracts_for_geometries,\n", + " get_tract_geojson,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f36fe7ef-2717-48be-ae94-a3f0aa33acc1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "%load_ext lab_black" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "207209d1-f95a-4b84-bc34-d37235a6dab4", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-08-17 11:45:46,587 [data_pipeline.etl.sources.geo_utils] INFO Loading tract geometry data from census ETL\n", + "2022-08-17 11:45:46,588 [data_pipeline.etl.sources.geo_utils] DEBUG Loading existing tract geojson\n" + ] + } + ], + "source": [ + "df = get_tract_geojson()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a6cd76db-9dff-4e18-aa26-bab9a841ce1f", + "metadata": {}, + "outputs": [], + "source": [ + "center = \"6030.04\"\n", + "center_GEOID10_TRACT = \"24027603004\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ce9487d8-5e27-4d07-8f9e-467ac7cdf7e0", + "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", + "
STATEFP10COUNTYFP10TRACTCE10GEOID10_TRACTNAME10NAMELSAD10MTFCC10FUNCSTAT10ALAND10AWATER10INTPTLAT10INTPTLON10geometry
5341524027602100240276021006021Census Tract 6021G5020S137699343674+39.3076905-076.8349752POLYGON ((-76.86305 39.31484, -76.86308 39.315...
5341624027602303240276023036023.03Census Tract 6023.03G5020S1174075626901+39.2600506-076.8754102POLYGON ((-76.86750 39.25170, -76.86754 39.251...
5342424027605503240276055036055.03Census Tract 6055.03G5020S31586458444+39.2274469-076.8803625POLYGON ((-76.88405 39.23543, -76.88398 39.235...
5342924027605502240276055026055.02Census Tract 6055.02G5020S526098416405+39.2257617-076.9054701POLYGON ((-76.90881 39.21739, -76.90882 39.217...
5345224027603004240276030046030.04Census Tract 6030.04G5020S4442509799882+39.2817022-076.9188315POLYGON ((-76.98539 39.26610, -76.98557 39.266...
5345324027605104240276051046051.04Census Tract 6051.04G5020S399695261553493+39.2369323-076.9735549POLYGON ((-76.97979 39.23322, -76.98018 39.233...
5345424027603003240276030036030.03Census Tract 6030.03G5020S45161338174904+39.3192333-076.9680454POLYGON ((-76.93350 39.35760, -76.93341 39.357...
5345524027603001240276030016030.01Census Tract 6030.01G5020S2472630357708+39.3279761-076.8942412POLYGON ((-76.86308 39.31501, -76.86305 39.314...
5346424027602201240276022016022.01Census Tract 6022.01G5020S46115496125+39.2900228-076.8721238POLYGON ((-76.87750 39.30290, -76.87747 39.302...
\n", + "
" + ], + "text/plain": [ + " STATEFP10 COUNTYFP10 TRACTCE10 GEOID10_TRACT NAME10 \\\n", + "53415 24 027 602100 24027602100 6021 \n", + "53416 24 027 602303 24027602303 6023.03 \n", + "53424 24 027 605503 24027605503 6055.03 \n", + "53429 24 027 605502 24027605502 6055.02 \n", + "53452 24 027 603004 24027603004 6030.04 \n", + "53453 24 027 605104 24027605104 6051.04 \n", + "53454 24 027 603003 24027603003 6030.03 \n", + "53455 24 027 603001 24027603001 6030.01 \n", + "53464 24 027 602201 24027602201 6022.01 \n", + "\n", + " NAMELSAD10 MTFCC10 FUNCSTAT10 ALAND10 AWATER10 \\\n", + "53415 Census Tract 6021 G5020 S 13769934 3674 \n", + "53416 Census Tract 6023.03 G5020 S 11740756 26901 \n", + "53424 Census Tract 6055.03 G5020 S 3158645 8444 \n", + "53429 Census Tract 6055.02 G5020 S 5260984 16405 \n", + "53452 Census Tract 6030.04 G5020 S 44425097 99882 \n", + "53453 Census Tract 6051.04 G5020 S 39969526 1553493 \n", + "53454 Census Tract 6030.03 G5020 S 45161338 174904 \n", + "53455 Census Tract 6030.01 G5020 S 24726303 57708 \n", + "53464 Census Tract 6022.01 G5020 S 4611549 6125 \n", + "\n", + " INTPTLAT10 INTPTLON10 \\\n", + "53415 +39.3076905 -076.8349752 \n", + "53416 +39.2600506 -076.8754102 \n", + "53424 +39.2274469 -076.8803625 \n", + "53429 +39.2257617 -076.9054701 \n", + "53452 +39.2817022 -076.9188315 \n", + "53453 +39.2369323 -076.9735549 \n", + "53454 +39.3192333 -076.9680454 \n", + "53455 +39.3279761 -076.8942412 \n", + "53464 +39.2900228 -076.8721238 \n", + "\n", + " geometry \n", + "53415 POLYGON ((-76.86305 39.31484, -76.86308 39.315... \n", + "53416 POLYGON ((-76.86750 39.25170, -76.86754 39.251... \n", + "53424 POLYGON ((-76.88405 39.23543, -76.88398 39.235... \n", + "53429 POLYGON ((-76.90881 39.21739, -76.90882 39.217... \n", + "53452 POLYGON ((-76.98539 39.26610, -76.98557 39.266... \n", + "53453 POLYGON ((-76.97979 39.23322, -76.98018 39.233... \n", + "53454 POLYGON ((-76.93350 39.35760, -76.93341 39.357... \n", + "53455 POLYGON ((-76.86308 39.31501, -76.86305 39.314... \n", + "53464 POLYGON ((-76.87750 39.30290, -76.87747 39.302... " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_subset = df.query(\n", + " 'STATEFP10==\"24\" and COUNTYFP10==\"027\" and NAME10 in [\"6030.03\", \"6051.04\", \"6055.02\", \"6055.03\", \"6023.03\", \"6022.01\", \"6030.01\", \"6022.01\", \"6021\", \"6030.04\"]'\n", + ")\n", + "df_subset" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "64e8c34d-df3a-4011-afad-c8a04af71d39", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "df_subset.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "44c0c3d9-fa1e-405c-9887-29a0a69801ba", + "metadata": {}, + "outputs": [], + "source": [ + "tract_subset = df_subset.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "1d7645f9-22b2-4fec-9514-d777dae32b29", + "metadata": {}, + "outputs": [], + "source": [ + "df_subset = df_subset[[\"GEOID10_TRACT\", \"geometry\"]].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "cfff1e45-3b3f-453b-a33b-8cf20f0152b9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([False, False, True, True, False, False, False, True, True])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.choice([True, False], len(df_subset))" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "4f01f4fa-69cf-4c9a-8acc-fddf3d8ab39d", + "metadata": {}, + "outputs": [], + "source": [ + "df_subset_scores = df_subset.copy()\n", + "# df_subset_scores[\"included\"] = np.random.choice([True, False], len(df_subset))\n", + "df_subset_scores[\"included\"] = True\n", + "df_subset_scores.loc[df.GEOID10_TRACT == \"24027603004\", \"included\"] = False" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8cdda9e3-9c73-405e-8c35-e40e8ff2d29b", + "metadata": {}, + "outputs": [], + "source": [ + "tract_data = df_subset.rename(columns={\"GEOID10_TRACT\": \"ORIGINAL_TRACT\"})" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f43ffa4a-3503-4497-a247-8cc02b264f7d", + "metadata": {}, + "outputs": [], + "source": [ + "df = df_subset_scores" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "8e1797ed-4838-4139-943c-809e4df0ab70", + "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", + "
GEOID10_TRACTgeometryincluded
5341524027602100POLYGON ((-76.86305 39.31484, -76.86308 39.315...True
5341624027602303POLYGON ((-76.86750 39.25170, -76.86754 39.251...True
5342424027605503POLYGON ((-76.88405 39.23543, -76.88398 39.235...True
5342924027605502POLYGON ((-76.90881 39.21739, -76.90882 39.217...True
5345224027603004POLYGON ((-76.98539 39.26610, -76.98557 39.266...False
5345324027605104POLYGON ((-76.97979 39.23322, -76.98018 39.233...True
5345424027603003POLYGON ((-76.93350 39.35760, -76.93341 39.357...True
5345524027603001POLYGON ((-76.86308 39.31501, -76.86305 39.314...True
5346424027602201POLYGON ((-76.87750 39.30290, -76.87747 39.302...True
\n", + "
" + ], + "text/plain": [ + " GEOID10_TRACT geometry \\\n", + "53415 24027602100 POLYGON ((-76.86305 39.31484, -76.86308 39.315... \n", + "53416 24027602303 POLYGON ((-76.86750 39.25170, -76.86754 39.251... \n", + "53424 24027605503 POLYGON ((-76.88405 39.23543, -76.88398 39.235... \n", + "53429 24027605502 POLYGON ((-76.90881 39.21739, -76.90882 39.217... \n", + "53452 24027603004 POLYGON ((-76.98539 39.26610, -76.98557 39.266... \n", + "53453 24027605104 POLYGON ((-76.97979 39.23322, -76.98018 39.233... \n", + "53454 24027603003 POLYGON ((-76.93350 39.35760, -76.93341 39.357... \n", + "53455 24027603001 POLYGON ((-76.86308 39.31501, -76.86305 39.314... \n", + "53464 24027602201 POLYGON ((-76.87750 39.30290, -76.87747 39.302... \n", + "\n", + " included \n", + "53415 True \n", + "53416 True \n", + "53424 True \n", + "53429 True \n", + "53452 False \n", + "53453 True \n", + "53454 True \n", + "53455 True \n", + "53464 True " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "799b883e-1f45-4f79-9b3f-65361aec881c", + "metadata": {}, + "outputs": [], + "source": [ + "adjacent_tracts: gpd.GeoDataFrame = df.sjoin(\n", + " tract_data, how=\"left\", predicate=\"touches\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "21672763-02e0-4608-82b2-3e256591c567", + "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", + "
GEOID10_TRACTincluded
0240276021000.666667
1240276022010.666667
2240276023030.666667
3240276030010.666667
4240276030030.666667
5240276030041.000000
6240276051040.666667
7240276055020.666667
8240276055030.666667
\n", + "
" + ], + "text/plain": [ + " GEOID10_TRACT included\n", + "0 24027602100 0.666667\n", + "1 24027602201 0.666667\n", + "2 24027602303 0.666667\n", + "3 24027603001 0.666667\n", + "4 24027603003 0.666667\n", + "5 24027603004 1.000000\n", + "6 24027605104 0.666667\n", + "7 24027605502 0.666667\n", + "8 24027605503 0.666667" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "adjacent_tracts.groupby(\"ORIGINAL_TRACT\")[\n", + " [\"included\"]\n", + "].mean().reset_index().rename(columns={\"ORIGINAL_TRACT\": \"GEOID10_TRACT\"})" + ] + }, + { + "cell_type": "markdown", + "id": "e6f4289b-944c-489e-955a-a7a177ec6dd5", + "metadata": {}, + "source": [ + "# Make test data" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "78772a00-3185-4d28-9755-7ba72c170282", + "metadata": {}, + "outputs": [], + "source": [ + "tract_subset.to_file(\"../tests/score/test_utils/data/us.geojson\", index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "425a5cd3-5929-4560-89e7-2dd9233bf303", + "metadata": {}, + "outputs": [], + "source": [ + "df[[\"GEOID10_TRACT\", \"included\"]].to_csv(\n", + " \"../tests/score/test_utils/data/scores.csv\", index=False\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/ipython/explore_eamlis.ipynb b/data/data-pipeline/data_pipeline/ipython/explore_eamlis.ipynb new file mode 100644 index 000000000..71612a7d5 --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/explore_eamlis.ipynb @@ -0,0 +1,2444 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "24085186-3472-43d3-8b87-b5191c4f6ca6", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import pandas as pd\n", + "import numpy as np\n", + "import os\n", + "import sys\n", + "\n", + "module_path = os.path.abspath(os.path.join(\"../..\"))\n", + "if module_path not in sys.path:\n", + " sys.path.append(module_path)\n", + "\n", + "from data_pipeline.config import settings\n", + "from data_pipeline.etl.base import ExtractTransformLoad\n", + "from data_pipeline.etl.sources.census.etl import CensusETL\n", + "from data_pipeline.etl.sources.geo_utils import add_tracts_for_geometries\n", + "from data_pipeline.utils import unzip_file_from_url" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f36fe7ef-2717-48be-ae94-a3f0aa33acc1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "%load_ext lab_black" + ] + }, + { + "cell_type": "markdown", + "id": "dbecd665-1c8a-40fe-a7fc-684ecf73f991", + "metadata": {}, + "source": [ + "# Grab the data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f451ea70-917c-45f9-adf9-9306436b955d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-08-16 11:50:57,573 [data_pipeline.utils] INFO Downloading https://justice40-data.s3.amazonaws.com/data-sources/eAMLIS export of all data.tsv.zip\n", + "2022-08-16 11:50:57,857 [data_pipeline.utils] INFO Extracting /home/matt/active/justice40-tool/data/data-pipeline/data_pipeline/data/tmp/abandoned_mine_lands/downloaded-af59fffe-aec2-48b4-a57f-716b8dc7e0a3.zip\n" + ] + } + ], + "source": [ + "tmp_path = ExtractTransformLoad.DATA_PATH / \"tmp\" / \"abandoned_mine_lands\"\n", + "# Create directory if it doesn't exist\n", + "tmp_path.mkdir(parents=True, exist_ok=True)\n", + "\n", + "eamlis_path_in_s3 = (\n", + " settings.AWS_JUSTICE40_DATASOURCES_URL\n", + " + \"/eAMLIS export of all data.tsv.zip\"\n", + ")\n", + "\n", + "unzip_file_from_url(\n", + " file_url=eamlis_path_in_s3,\n", + " download_path=tmp_path,\n", + " unzipped_file_path=tmp_path,\n", + ")\n", + "\n", + "eamlis_path = tmp_path / \"eAMLIS export of all data.tsv\"" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5cee0a59-4f69-4678-a7ab-877e57d06f1b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'/home/matt/active/justice40-tool/data/data-pipeline/data_pipeline/data/tmp/abandoned_mine_lands/eAMLIS export of all data.tsv'" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "str(eamlis_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5b8119d8-315b-4e87-b286-3767158d63ab", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv(eamlis_path, sep=\"\\t\", low_memory=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4fbac263-5868-4fbc-bcb7-168ef479af53", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(57149, 42)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf = gpd.GeoDataFrame(\n", + " df,\n", + " geometry=gpd.points_from_xy(\n", + " x=df[\"Longitude\"],\n", + " y=df[\"Latitude\"],\n", + " ),\n", + " crs=\"epsg:4326\",\n", + ")\n", + "gdf.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3b176f62-2d13-4bd2-9211-0ac7c2807146", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3977, 42)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf.drop_duplicates(subset=[\"geometry\"], inplace=True, keep=\"last\")\n", + "gdf.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a0116c52-58f5-48a6-aa9e-c49873ebafa7", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-08-16 11:51:28,795 [data_pipeline.etl.sources.geo_utils] DEBUG Appending tract data to dataframe\n", + "2022-08-16 11:51:28,796 [data_pipeline.etl.sources.geo_utils] INFO Loading tract geometry data from census ETL\n", + "2022-08-16 11:51:28,796 [data_pipeline.etl.sources.geo_utils] DEBUG Loading existing tract geojson\n", + "/home/matt/.cache/pypoetry/virtualenvs/justice40-data-pipeline-IwBjhw-4-py3.10/lib/python3.10/site-packages/IPython/core/interactiveshell.py:3553: FutureWarning: The `op` parameter is deprecated and will be removed in a future release. Please use the `predicate` parameter instead.\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n" + ] + } + ], + "source": [ + "gdf_tracts = add_tracts_for_geometries(gdf)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2a18ba4d-274b-4640-a83c-02ae1d02837c", + "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", + "
AMLIS KeyState/TribeCountyCongressional DistrictQuadrangle NameWatershedHUC CodeFIPS CodeLatitudeLongitude...Funded GPRA AcresFunded Metric UnitsCompleted Standard UnitsCompleted CostsCompleted GPRA AcresCompleted Metric UnitsUnnamed: 40geometryindex_rightGEOID10_TRACT
\n", + "

0 rows Ɨ 44 columns

\n", + "
" + ], + "text/plain": [ + "Empty GeoDataFrame\n", + "Columns: [AMLIS Key, State/Tribe, County, Congressional District, Quadrangle Name, Watershed, HUC Code, FIPS Code, Latitude, Longitude, Funding Source / Program, Problem Area Name, Problem Area Number, Planning Unit Name, Planning Unit Number, Problem Priority, Problem Type, Mining Type, Ore Types, Date Prepared, Date Revised, Private Owner %, State Owner %, Other Federal Owner %, Park Service Owner %, Forest Service Owner %, Indian Owner %, BLM Owner %, Unfunded Standard Units, Unfunded Costs, Unfunded GPRA Acres, Unfunded Metric Units, Funded Standard Units, Funded Costs, Funded GPRA Acres, Funded Metric Units, Completed Standard Units, Completed Costs, Completed GPRA Acres, Completed Metric Units, Unnamed: 40, geometry, index_right, GEOID10_TRACT]\n", + "Index: []\n", + "\n", + "[0 rows x 44 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf_tracts[gdf_tracts.GEOID10_TRACT.isna()]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "e9aaa563-4c11-46b0-a64d-6ce053412e9c", + "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", + "
AMLIS KeyState/TribeCountyCongressional DistrictQuadrangle NameWatershedHUC CodeFIPS CodeLatitudeLongitude...Funded GPRA AcresFunded Metric UnitsCompleted Standard UnitsCompleted CostsCompleted GPRA AcresCompleted Metric UnitsUnnamed: 40geometryindex_rightGEOID10_TRACT
2AK000001AKMATANUSKA-SUSITNA1.0ANCHORAGE C-8NaNNaN0217061.6-149.8...0.00.0900.0033200.012.86274.30NaNPOINT (-149.80000 61.60000)990002170000401
6AK000003AKVALDEZ-CORDOVA1.0Valdez C-119050003NaN02-2661.6-144.0...0.00.00.349200.00.030.34NaNPOINT (-144.00000 61.60000)991802261000100
100AK000080AKVALDEZ-CORDOVA CENSU1.0MCCARTHY C-5NaNNaN0226161.5-142.8...0.00.04.009924.00.404.00NaNPOINT (-142.80000 61.50000)991802261000100
113AK000096AKVALDEZ-CORDOVA1.0MCCARTHY C-6NaNNaNAlaska61.6-142.8...0.00.02.0029729.00.202.00NaNPOINT (-142.80000 61.60000)991802261000100
12AK000006AKMATANUSKA-SUSITNA1.0ANCHORAGE C-6NaNNaNAlaska61.7-149.0...0.00.03.009225.00.303.00NaNPOINT (-149.00000 61.70000)993802170000200
\n", + "

5 rows Ɨ 44 columns

\n", + "
" + ], + "text/plain": [ + " AMLIS Key State/Tribe County Congressional District \\\n", + "2 AK000001 AK MATANUSKA-SUSITNA 1.0 \n", + "6 AK000003 AK VALDEZ-CORDOVA 1.0 \n", + "100 AK000080 AK VALDEZ-CORDOVA CENSU 1.0 \n", + "113 AK000096 AK VALDEZ-CORDOVA 1.0 \n", + "12 AK000006 AK MATANUSKA-SUSITNA 1.0 \n", + "\n", + " Quadrangle Name Watershed HUC Code FIPS Code Latitude Longitude ... \\\n", + "2 ANCHORAGE C-8 NaN NaN 02170 61.6 -149.8 ... \n", + "6 Valdez C-1 19050003 NaN 02-26 61.6 -144.0 ... \n", + "100 MCCARTHY C-5 NaN NaN 02261 61.5 -142.8 ... \n", + "113 MCCARTHY C-6 NaN NaN Alaska 61.6 -142.8 ... \n", + "12 ANCHORAGE C-6 NaN NaN Alaska 61.7 -149.0 ... \n", + "\n", + " Funded GPRA Acres Funded Metric Units Completed Standard Units \\\n", + "2 0.0 0.0 900.00 \n", + "6 0.0 0.0 0.34 \n", + "100 0.0 0.0 4.00 \n", + "113 0.0 0.0 2.00 \n", + "12 0.0 0.0 3.00 \n", + "\n", + " Completed Costs Completed GPRA Acres Completed Metric Units Unnamed: 40 \\\n", + "2 33200.0 12.86 274.30 NaN \n", + "6 9200.0 0.03 0.34 NaN \n", + "100 9924.0 0.40 4.00 NaN \n", + "113 29729.0 0.20 2.00 NaN \n", + "12 9225.0 0.30 3.00 NaN \n", + "\n", + " geometry index_right GEOID10_TRACT \n", + "2 POINT (-149.80000 61.60000) 9900 02170000401 \n", + "6 POINT (-144.00000 61.60000) 9918 02261000100 \n", + "100 POINT (-142.80000 61.50000) 9918 02261000100 \n", + "113 POINT (-142.80000 61.60000) 9918 02261000100 \n", + "12 POINT (-149.00000 61.70000) 9938 02170000200 \n", + "\n", + "[5 rows x 44 columns]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf_tracts.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "901f8c2f-b27a-4223-ad73-71daf51f6bd6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2034, 44)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf_tracts.drop_duplicates(\"GEOID10_TRACT\").shape" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "65bfb3e7-d562-4d59-a2ef-f59d385a7c23", + "metadata": {}, + "outputs": [], + "source": [ + "census_tracts = gpd.read_file(CensusETL.NATIONAL_TRACT_JSON_PATH)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "6b7011aa-49e8-4cf8-877f-b3b36805c18e", + "metadata": {}, + "outputs": [], + "source": [ + "census_tracts.set_index(\"GEOID10\", drop=False, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "4334eb8e-c8eb-486a-a4e0-a455f18c038c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(3976, 44)" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf_tracts.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "cbc84001-bb43-46dc-bc6a-306f0e169a20", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AMLIS KeyState/TribeCountyCongressional DistrictQuadrangle NameWatershedHUC CodeFIPS CodeLatitudeLongitude...Funded GPRA AcresFunded Metric UnitsCompleted Standard UnitsCompleted CostsCompleted GPRA AcresCompleted Metric UnitsUnnamed: 40geometryindex_rightGEOID10_TRACT
100AK000080AKVALDEZ-CORDOVA CENSU1.0MCCARTHY C-5NaNNaN0226161.5-142.8...0.00.04.09924.00.44.0NaNPOINT (-142.80000 61.50000)991802261000100
113AK000096AKVALDEZ-CORDOVA1.0MCCARTHY C-6NaNNaNAlaska61.6-142.8...0.00.02.029729.00.22.0NaNPOINT (-142.80000 61.60000)991802261000100
30AK000015AKMATANUSKA-SUSITNA1.0ANCHORAGE D-4NaNNaN0217061.7-148.2...0.00.07.04100.00.77.0NaNPOINT (-148.20000 61.70000)993802170000200
45AK000040AKMATANUSKA-SUSITNA1.0ANCHORAGE C-6NaNNaN0217061.7-148.8...0.00.01.020284.00.11.0NaNPOINT (-148.80000 61.70000)993802170000200
117AK000099AKMATANUSKA-SUSITNA1.0NaNNaNNaN0217061.7-148.4...0.00.00.00.00.00.0NaNPOINT (-148.40000 61.70000)993802170000200
..................................................................
57095WY176742WYCampbell County1.0Little Thunder ReservoirUPPER CHEYENNE10120103.05600543.7-105.4...3.03.08.61407322.08.68.6NaNPOINT (-105.40000 43.70000)2839456005000100
56861WY082926WYPLATTE1.0Guernsey ReservoirGLENDO RESERVOIR10180008.05603142.3-104.7...0.00.01.0293122.01.00.4NaNPOINT (-104.70000 42.30000)2840256031959100
56864WY086744WYPLATTE1.0HELL GAPGLENDO RESERVOIR10180008.05603142.4-104.7...0.00.01.018848.00.11.0NaNPOINT (-104.70000 42.40000)2840256031959100
56930WY102624WYFREMONT1.0Lookout ButteLOWER WIND10080005.05601343.3-108.7...0.00.00.00.00.00.0NaNPOINT (-108.70000 43.30000)2844256013940201
57021WY132533WYFREMONT1.0Eagle PointLOWER WIND10080005.05601343.4-108.7...0.00.00.00.00.00.0NaNPOINT (-108.70000 43.40000)2844256013940201
\n", + "

1942 rows Ɨ 44 columns

\n", + "
" + ], + "text/plain": [ + " AMLIS Key State/Tribe County Congressional District \\\n", + "100 AK000080 AK VALDEZ-CORDOVA CENSU 1.0 \n", + "113 AK000096 AK VALDEZ-CORDOVA 1.0 \n", + "30 AK000015 AK MATANUSKA-SUSITNA 1.0 \n", + "45 AK000040 AK MATANUSKA-SUSITNA 1.0 \n", + "117 AK000099 AK MATANUSKA-SUSITNA 1.0 \n", + "... ... ... ... ... \n", + "57095 WY176742 WY Campbell County 1.0 \n", + "56861 WY082926 WY PLATTE 1.0 \n", + "56864 WY086744 WY PLATTE 1.0 \n", + "56930 WY102624 WY FREMONT 1.0 \n", + "57021 WY132533 WY FREMONT 1.0 \n", + "\n", + " Quadrangle Name Watershed HUC Code FIPS Code \\\n", + "100 MCCARTHY C-5 NaN NaN 02261 \n", + "113 MCCARTHY C-6 NaN NaN Alaska \n", + "30 ANCHORAGE D-4 NaN NaN 02170 \n", + "45 ANCHORAGE C-6 NaN NaN 02170 \n", + "117 NaN NaN NaN 02170 \n", + "... ... ... ... ... \n", + "57095 Little Thunder Reservoir UPPER CHEYENNE 10120103.0 56005 \n", + "56861 Guernsey Reservoir GLENDO RESERVOIR 10180008.0 56031 \n", + "56864 HELL GAP GLENDO RESERVOIR 10180008.0 56031 \n", + "56930 Lookout Butte LOWER WIND 10080005.0 56013 \n", + "57021 Eagle Point LOWER WIND 10080005.0 56013 \n", + "\n", + " Latitude Longitude ... Funded GPRA Acres Funded Metric Units \\\n", + "100 61.5 -142.8 ... 0.0 0.0 \n", + "113 61.6 -142.8 ... 0.0 0.0 \n", + "30 61.7 -148.2 ... 0.0 0.0 \n", + "45 61.7 -148.8 ... 0.0 0.0 \n", + "117 61.7 -148.4 ... 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "57095 43.7 -105.4 ... 3.0 3.0 \n", + "56861 42.3 -104.7 ... 0.0 0.0 \n", + "56864 42.4 -104.7 ... 0.0 0.0 \n", + "56930 43.3 -108.7 ... 0.0 0.0 \n", + "57021 43.4 -108.7 ... 0.0 0.0 \n", + "\n", + " Completed Standard Units Completed Costs Completed GPRA Acres \\\n", + "100 4.0 9924.0 0.4 \n", + "113 2.0 29729.0 0.2 \n", + "30 7.0 4100.0 0.7 \n", + "45 1.0 20284.0 0.1 \n", + "117 0.0 0.0 0.0 \n", + "... ... ... ... \n", + "57095 8.6 1407322.0 8.6 \n", + "56861 1.0 293122.0 1.0 \n", + "56864 1.0 18848.0 0.1 \n", + "56930 0.0 0.0 0.0 \n", + "57021 0.0 0.0 0.0 \n", + "\n", + " Completed Metric Units Unnamed: 40 geometry \\\n", + "100 4.0 NaN POINT (-142.80000 61.50000) \n", + "113 2.0 NaN POINT (-142.80000 61.60000) \n", + "30 7.0 NaN POINT (-148.20000 61.70000) \n", + "45 1.0 NaN POINT (-148.80000 61.70000) \n", + "117 0.0 NaN POINT (-148.40000 61.70000) \n", + "... ... ... ... \n", + "57095 8.6 NaN POINT (-105.40000 43.70000) \n", + "56861 0.4 NaN POINT (-104.70000 42.30000) \n", + "56864 1.0 NaN POINT (-104.70000 42.40000) \n", + "56930 0.0 NaN POINT (-108.70000 43.30000) \n", + "57021 0.0 NaN POINT (-108.70000 43.40000) \n", + "\n", + " index_right GEOID10_TRACT \n", + "100 9918 02261000100 \n", + "113 9918 02261000100 \n", + "30 9938 02170000200 \n", + "45 9938 02170000200 \n", + "117 9938 02170000200 \n", + "... ... ... \n", + "57095 28394 56005000100 \n", + "56861 28402 56031959100 \n", + "56864 28402 56031959100 \n", + "56930 28442 56013940201 \n", + "57021 28442 56013940201 \n", + "\n", + "[1942 rows x 44 columns]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gdf_tracts[gdf_tracts.GEOID10_TRACT.duplicated()]" + ] + }, + { + "cell_type": "markdown", + "id": "bdf572df-8a20-4711-812c-376887de8d30", + "metadata": {}, + "source": [ + "# Assemble test data" + ] + }, + { + "cell_type": "markdown", + "id": "c6820da8-d61d-4da7-870a-d1e648152ae2", + "metadata": {}, + "source": [ + "## Get some test tracts" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "78cf15fc-a9a6-41bc-ab90-9c94a32e0fcd", + "metadata": {}, + "outputs": [], + "source": [ + "example_geoids = pd.read_csv(\n", + " \"../tests/sources/example/data/extract.csv\", dtype=\"object\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c0129782-bc75-4cb5-b53f-4a99d4473aa6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(15, 2)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "example_geoids.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "2647d12f-3eab-4cbc-a656-a514a2c06084", + "metadata": {}, + "outputs": [], + "source": [ + "tract_df = gdf_tracts" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "7ac85550-c8b9-4978-869b-1a233f89a1b2", + "metadata": {}, + "outputs": [], + "source": [ + "merged_exaple_data = pd.merge(\n", + " example_geoids[\"GEOID10_TRACT\"],\n", + " tract_df,\n", + " on=\"GEOID10_TRACT\",\n", + " how=\"left\",\n", + " indicator=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "e3e36b6f-8edc-4459-9703-83b790778ce6", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GEOID10_TRACTAMLIS KeyState/TribeCountyCongressional DistrictQuadrangle NameWatershedHUC CodeFIPS CodeLatitude...Funded GPRA AcresFunded Metric UnitsCompleted Standard UnitsCompleted CostsCompleted GPRA AcresCompleted Metric UnitsUnnamed: 40geometryindex_right_merge
006027000800NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
106069000802NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
206061021322NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
315001021010NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
415001021101NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
515007040603NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
615007040700NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
715009030100NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
815009030201NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
915001021402NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
1015001021800NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
1115009030402NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
1215009030800NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
1315003010201NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
1415007040604NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
\n", + "

15 rows Ɨ 45 columns

\n", + "
" + ], + "text/plain": [ + " GEOID10_TRACT AMLIS Key State/Tribe County Congressional District \\\n", + "0 06027000800 NaN NaN NaN NaN \n", + "1 06069000802 NaN NaN NaN NaN \n", + "2 06061021322 NaN NaN NaN NaN \n", + "3 15001021010 NaN NaN NaN NaN \n", + "4 15001021101 NaN NaN NaN NaN \n", + "5 15007040603 NaN NaN NaN NaN \n", + "6 15007040700 NaN NaN NaN NaN \n", + "7 15009030100 NaN NaN NaN NaN \n", + "8 15009030201 NaN NaN NaN NaN \n", + "9 15001021402 NaN NaN NaN NaN \n", + "10 15001021800 NaN NaN NaN NaN \n", + "11 15009030402 NaN NaN NaN NaN \n", + "12 15009030800 NaN NaN NaN NaN \n", + "13 15003010201 NaN NaN NaN NaN \n", + "14 15007040604 NaN NaN NaN NaN \n", + "\n", + " Quadrangle Name Watershed HUC Code FIPS Code Latitude ... \\\n", + "0 NaN NaN NaN NaN NaN ... \n", + "1 NaN NaN NaN NaN NaN ... \n", + "2 NaN NaN NaN NaN NaN ... \n", + "3 NaN NaN NaN NaN NaN ... \n", + "4 NaN NaN NaN NaN NaN ... \n", + "5 NaN NaN NaN NaN NaN ... \n", + "6 NaN NaN NaN NaN NaN ... \n", + "7 NaN NaN NaN NaN NaN ... \n", + "8 NaN NaN NaN NaN NaN ... \n", + "9 NaN NaN NaN NaN NaN ... \n", + "10 NaN NaN NaN NaN NaN ... \n", + "11 NaN NaN NaN NaN NaN ... \n", + "12 NaN NaN NaN NaN NaN ... \n", + "13 NaN NaN NaN NaN NaN ... \n", + "14 NaN NaN NaN NaN NaN ... \n", + "\n", + " Funded GPRA Acres Funded Metric Units Completed Standard Units \\\n", + "0 NaN NaN NaN \n", + "1 NaN NaN NaN \n", + "2 NaN NaN NaN \n", + "3 NaN NaN NaN \n", + "4 NaN NaN NaN \n", + "5 NaN NaN NaN \n", + "6 NaN NaN NaN \n", + "7 NaN NaN NaN \n", + "8 NaN NaN NaN \n", + "9 NaN NaN NaN \n", + "10 NaN NaN NaN \n", + "11 NaN NaN NaN \n", + "12 NaN NaN NaN \n", + "13 NaN NaN NaN \n", + "14 NaN NaN NaN \n", + "\n", + " Completed Costs Completed GPRA Acres Completed Metric Units Unnamed: 40 \\\n", + "0 NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN \n", + "5 NaN NaN NaN NaN \n", + "6 NaN NaN NaN NaN \n", + "7 NaN NaN NaN NaN \n", + "8 NaN NaN NaN NaN \n", + "9 NaN NaN NaN NaN \n", + "10 NaN NaN NaN NaN \n", + "11 NaN NaN NaN NaN \n", + "12 NaN NaN NaN NaN \n", + "13 NaN NaN NaN NaN \n", + "14 NaN NaN NaN NaN \n", + "\n", + " geometry index_right _merge \n", + "0 None NaN left_only \n", + "1 None NaN left_only \n", + "2 None NaN left_only \n", + "3 None NaN left_only \n", + "4 None NaN left_only \n", + "5 None NaN left_only \n", + "6 None NaN left_only \n", + "7 None NaN left_only \n", + "8 None NaN left_only \n", + "9 None NaN left_only \n", + "10 None NaN left_only \n", + "11 None NaN left_only \n", + "12 None NaN left_only \n", + "13 None NaN left_only \n", + "14 None NaN left_only \n", + "\n", + "[15 rows x 45 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged_exaple_data[merged_exaple_data[\"_merge\"] == \"left_only\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "76f66b32-ce2e-4ad1-93f2-eb566be2e04f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'AMLIS Key': 'AK000001',\n", + " 'State/Tribe': 'AK',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 61.6,\n", + " 'Longitude': -149.8,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan,\n", + " 'geometry': }" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dict(df.iloc[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "3caf8290-8248-44e5-8f3b-c67c54e834de", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['AMLIS Key', 'BLM Owner %', 'Completed Costs', 'Completed GPRA Acres',\n", + " 'Completed Metric Units', 'Completed Standard Units',\n", + " 'Congressional District', 'County', 'Date Prepared', 'Date Revised',\n", + " 'FIPS Code', 'Forest Service Owner %', 'Funded Costs',\n", + " 'Funded GPRA Acres', 'Funded Metric Units', 'Funded Standard Units',\n", + " 'Funding Source / Program', 'HUC Code', 'Indian Owner %', 'Latitude',\n", + " 'Longitude', 'Mining Type', 'Ore Types', 'Other Federal Owner %',\n", + " 'Park Service Owner %', 'Planning Unit Name', 'Planning Unit Number',\n", + " 'Private Owner %', 'Problem Area Name', 'Problem Area Number',\n", + " 'Problem Priority', 'Problem Type', 'Quadrangle Name', 'State Owner %',\n", + " 'State/Tribe', 'Unfunded Costs', 'Unfunded GPRA Acres',\n", + " 'Unfunded Metric Units', 'Unfunded Standard Units', 'Unnamed: 40',\n", + " 'Watershed', '_merge', 'geometry', 'index_right'],\n", + " dtype='object')" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged_exaple_data.columns.difference([\"GEOID10_TRACT\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "2f0cd691-069e-4367-8f42-e77efd649e77", + "metadata": {}, + "outputs": [], + "source": [ + "def generate_fake_eamlis_row(tract: str, state: str) -> dict:\n", + " generate_fake_eamlis_row._row_id += 1\n", + " centroid = census_tracts.loc[tract].geometry.centroid\n", + " return {\n", + " \"AMLIS Key\": f\"{state}{str(generate_fake_eamlis_row._row_id).zfill(6)}\",\n", + " \"State/Tribe\": state,\n", + " \"County\": \"MATANUSKA-SUSITNA\",\n", + " \"Congressional District\": 1.0,\n", + " \"Quadrangle Name\": \"ANCHORAGE C-8\",\n", + " \"Watershed\": np.nan,\n", + " \"HUC Code\": np.nan,\n", + " \"FIPS Code\": \"02170\",\n", + " \"Latitude\": centroid.y,\n", + " \"Longitude\": centroid.x,\n", + " \"Funding Source / Program\": \"FRA\",\n", + " \"Problem Area Name\": \"EAST HOUSTON MINE\",\n", + " \"Problem Area Number\": 1,\n", + " \"Planning Unit Name\": \"HOUSTON\",\n", + " \"Planning Unit Number\": \"1\",\n", + " \"Problem Priority\": \"1\",\n", + " \"Problem Type\": \"VO\",\n", + " \"Mining Type\": \"S\",\n", + " \"Ore Types\": np.nan,\n", + " \"Date Prepared\": \"12/3/1986 12:00:00 AM\",\n", + " \"Date Revised\": \"4/23/2014 6:40:28 PM\",\n", + " \"Private Owner %\": 0.0,\n", + " \"State Owner %\": 0.0,\n", + " \"Other Federal Owner %\": 0.0,\n", + " \"Park Service Owner %\": 0.0,\n", + " \"Forest Service Owner %\": 0.0,\n", + " \"Indian Owner %\": 0.0,\n", + " \"BLM Owner %\": 0.0,\n", + " \"Unfunded Standard Units\": 0.0,\n", + " \"Unfunded Costs\": 0.0,\n", + " \"Unfunded GPRA Acres\": 0.0,\n", + " \"Unfunded Metric Units\": 0.0,\n", + " \"Funded Standard Units\": 0.0,\n", + " \"Funded Costs\": 0.0,\n", + " \"Funded GPRA Acres\": 0.0,\n", + " \"Funded Metric Units\": 0.0,\n", + " \"Completed Standard Units\": 2.0,\n", + " \"Completed Costs\": 10000.0,\n", + " \"Completed GPRA Acres\": 0.2,\n", + " \"Completed Metric Units\": 2.0,\n", + " \"Unnamed: 40\": np.nan,\n", + " }\n", + "\n", + "\n", + "generate_fake_eamlis_row._row_id = 0" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "6ab61dda-8642-4706-9b67-b03ed27713fd", + "metadata": {}, + "outputs": [], + "source": [ + "rows = []\n", + "for tract in merged_exaple_data[\n", + " merged_exaple_data[\"_merge\"] == \"left_only\"\n", + "].GEOID10_TRACT:\n", + " state = \"HI\"\n", + " if tract.startswith(\"06\"):\n", + " state = \"CA\"\n", + " rows.append(generate_fake_eamlis_row(tract, state))" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "93714c4d-3e1d-49c1-9bac-4e553e0bae08", + "metadata": {}, + "outputs": [], + "source": [ + "pd.DataFrame(rows).to_csv(\n", + " \"/home/matt/active/justice40-tool/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/eAMLIS export of all data.tsv.zip\",\n", + " index=False,\n", + " sep=\"\\t\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "776d4dab-4067-4d36-9ce3-d7c7094ea8c6", + "metadata": {}, + "source": [ + "## Get the points for the geolocation mock" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "a630a0f8-e922-4eb3-9937-6c4b590fd527", + "metadata": {}, + "outputs": [], + "source": [ + "lookup_table = {}\n", + "for tract in merged_exaple_data[\n", + " merged_exaple_data[\"_merge\"] == \"left_only\"\n", + "].GEOID10_TRACT:\n", + " centroid = census_tracts.loc[tract].geometry.centroid\n", + " lookup_table[(centroid.x, centroid.y)] = tract" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "d828b2e0-424e-4040-b167-da46734bcf4d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'AMLIS Key': 'CA000001',\n", + " 'State/Tribe': 'CA',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 36.25161281807095,\n", + " 'Longitude': -117.11772856883819,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'CA000002',\n", + " 'State/Tribe': 'CA',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 36.5498780497345,\n", + " 'Longitude': -121.0070599015156,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'CA000003',\n", + " 'State/Tribe': 'CA',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 38.84602113669345,\n", + " 'Longitude': -121.40564726784282,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000004',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 19.49784370888389,\n", + " 'Longitude': -155.10321769858746,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000005',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 19.446650238354696,\n", + " 'Longitude': -154.89548634140738,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000006',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 21.904412260968197,\n", + " 'Longitude': -159.43665201302525,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000007',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 21.94208315793464,\n", + " 'Longitude': -159.52362041178708,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000008',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 20.72796381691298,\n", + " 'Longitude': -156.14177664396527,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000009',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 20.86486713282688,\n", + " 'Longitude': -156.2497797752935,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000010',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 19.516629328900667,\n", + " 'Longitude': -155.91378867633992,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000011',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 20.164406070883054,\n", + " 'Longitude': -155.81110884967674,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000012',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 20.825369670478306,\n", + " 'Longitude': -156.33064622489087,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000013',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 20.9170439162332,\n", + " 'Longitude': -156.54289869319305,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000014',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 21.556464980367483,\n", + " 'Longitude': -157.89225964427064,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan},\n", + " {'AMLIS Key': 'HI000015',\n", + " 'State/Tribe': 'HI',\n", + " 'County': 'MATANUSKA-SUSITNA',\n", + " 'Congressional District': 1.0,\n", + " 'Quadrangle Name': 'ANCHORAGE C-8',\n", + " 'Watershed': nan,\n", + " 'HUC Code': nan,\n", + " 'FIPS Code': '02170',\n", + " 'Latitude': 21.90754283544759,\n", + " 'Longitude': -159.48416846823164,\n", + " 'Funding Source / Program': 'FRA',\n", + " 'Problem Area Name': 'EAST HOUSTON MINE',\n", + " 'Problem Area Number': 1,\n", + " 'Planning Unit Name': 'HOUSTON',\n", + " 'Planning Unit Number': '1',\n", + " 'Problem Priority': '1',\n", + " 'Problem Type': 'VO',\n", + " 'Mining Type': 'S',\n", + " 'Ore Types': nan,\n", + " 'Date Prepared': '12/3/1986 12:00:00 AM',\n", + " 'Date Revised': '4/23/2014 6:40:28 PM',\n", + " 'Private Owner %': 0.0,\n", + " 'State Owner %': 0.0,\n", + " 'Other Federal Owner %': 0.0,\n", + " 'Park Service Owner %': 0.0,\n", + " 'Forest Service Owner %': 0.0,\n", + " 'Indian Owner %': 0.0,\n", + " 'BLM Owner %': 0.0,\n", + " 'Unfunded Standard Units': 0.0,\n", + " 'Unfunded Costs': 0.0,\n", + " 'Unfunded GPRA Acres': 0.0,\n", + " 'Unfunded Metric Units': 0.0,\n", + " 'Funded Standard Units': 0.0,\n", + " 'Funded Costs': 0.0,\n", + " 'Funded GPRA Acres': 0.0,\n", + " 'Funded Metric Units': 0.0,\n", + " 'Completed Standard Units': 2.0,\n", + " 'Completed Costs': 10000.0,\n", + " 'Completed GPRA Acres': 0.2,\n", + " 'Completed Metric Units': 2.0,\n", + " 'Unnamed: 40': nan}]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rows" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "d6b1d835-deb2-4bbd-b33e-460ba94cf192", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{(-117.11772856883819, 36.25161281807095): '06027000800',\n", + " (-121.0070599015156, 36.5498780497345): '06069000802',\n", + " (-121.40564726784282, 38.84602113669345): '06061021322',\n", + " (-155.10321769858746, 19.49784370888389): '15001021010',\n", + " (-154.89548634140738, 19.446650238354696): '15001021101',\n", + " (-159.43665201302525, 21.904412260968197): '15007040603',\n", + " (-159.52362041178708, 21.94208315793464): '15007040700',\n", + " (-156.14177664396527, 20.72796381691298): '15009030100',\n", + " (-156.2497797752935, 20.86486713282688): '15009030201',\n", + " (-155.91378867633992, 19.516629328900667): '15001021402',\n", + " (-155.81110884967674, 20.164406070883054): '15001021800',\n", + " (-156.33064622489087, 20.825369670478306): '15009030402',\n", + " (-156.54289869319305, 20.9170439162332): '15009030800',\n", + " (-157.89225964427064, 21.556464980367483): '15003010201',\n", + " (-159.48416846823164, 21.90754283544759): '15007040604'}" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lookup_table" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/ipython/generate_fuds_test_data.ipynb b/data/data-pipeline/data_pipeline/ipython/generate_fuds_test_data.ipynb new file mode 100644 index 000000000..4e1109c35 --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/generate_fuds_test_data.ipynb @@ -0,0 +1,1498 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8c11c900-b1e9-48c2-967d-7fd2eb85cac1", + "metadata": {}, + "source": [ + "# Generate FUDS test data\n", + "\n", + "Creating the fixture data for the Formerly Used Defense Sites (FUDS) is pretty involved. The below walks through creating the data and then eyeballing it so you can check your test results. So, if the FUDS updates and you want to generate new sample data for your tests, run this notebook." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "f8ab7cf7-3124-41f3-9c62-0633d7815686", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import sys\n", + "from data_pipeline.etl.sources.geo_utils import add_tracts_for_geometries\n", + "import json\n", + "\n", + "# Add this project to the path\n", + "module_path = os.path.abspath(os.path.join(\"../..\"))\n", + "if module_path not in sys.path:\n", + " sys.path.append(module_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f59dc003-7df1-48c2-9278-86e1f8c65355", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import pandas as pd\n", + "from data_pipeline.etl.sources.census.etl import CensusETL\n", + "from data_pipeline.etl.sources.us_army_fuds.etl import USArmyFUDS" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "598dfe82-04b9-4e9c-a74b-a18c9db6688c", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext lab_black" + ] + }, + { + "cell_type": "markdown", + "id": "53b68b92-e575-4404-b79d-7dceb302f588", + "metadata": {}, + "source": [ + "# Load the source data and census tract data" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2c4e0d6b-1dab-4e0a-952b-6cf9b11700da", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-08-10 17:57:23,542 [data_pipeline.etl.sources.us_army_fuds.etl] INFO Starting data download.\n", + "2022-08-10 17:57:23,542 [data_pipeline.utils] INFO Downloading https://opendata.arcgis.com/api/v3/datasets/3f8354667d5b4b1b8ad7a6e00c3cf3b1_1/downloads/data?format=geojson&spatialRefId=4326&where=1%3D1\n" + ] + } + ], + "source": [ + "# get the data\n", + "etl = USArmyFUDS()\n", + "etl.extract()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c5752c7e-174d-451c-b123-d41b805f11ff", + "metadata": {}, + "outputs": [], + "source": [ + "df = gpd.read_file(etl.DOWNLOAD_FILE_NAME, lowmemory=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8b372cc7-e44b-4a3a-a482-50870138401f", + "metadata": {}, + "outputs": [], + "source": [ + "census_tracts = gpd.read_file(CensusETL.NATIONAL_TRACT_JSON_PATH)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e211b168-faf9-4b2e-a654-126d11ce9367", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 74134 entries, 0 to 74133\n", + "Data columns (total 13 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 STATEFP10 74134 non-null object \n", + " 1 COUNTYFP10 74134 non-null object \n", + " 2 TRACTCE10 74134 non-null object \n", + " 3 GEOID10 74134 non-null object \n", + " 4 NAME10 74134 non-null object \n", + " 5 NAMELSAD10 74134 non-null object \n", + " 6 MTFCC10 74134 non-null object \n", + " 7 FUNCSTAT10 74134 non-null object \n", + " 8 ALAND10 74134 non-null int64 \n", + " 9 AWATER10 74134 non-null int64 \n", + " 10 INTPTLAT10 74134 non-null object \n", + " 11 INTPTLON10 74134 non-null object \n", + " 12 geometry 74134 non-null geometry\n", + "dtypes: geometry(1), int64(2), object(10)\n", + "memory usage: 7.4+ MB\n" + ] + } + ], + "source": [ + "census_tracts.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "b8edbb53-b8d8-4a85-acc1-da880435f945", + "metadata": {}, + "outputs": [], + "source": [ + "census_tracts.set_index(\"GEOID10\", inplace=True)" + ] + }, + { + "cell_type": "markdown", + "id": "d5f5a152-dbaa-4c5b-93a9-813d92f9f504", + "metadata": { + "tags": [] + }, + "source": [ + "# Generate the test data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5890aa7e-bce2-484e-ad52-a4b4742ea81d", + "metadata": {}, + "outputs": [], + "source": [ + "with open(etl.DOWNLOAD_FILE_NAME) as geojson:\n", + " raw_fuds_geojson = json.load(geojson)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8977d7b4-6cdf-49e6-84b6-016576663a58", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/matt/.cache/pypoetry/virtualenvs/justice40-data-pipeline-IwBjhw-4-py3.10/lib/python3.10/site-packages/IPython/core/interactiveshell.py:3524: FutureWarning: The `op` parameter is deprecated and will be removed in a future release. Please use the `predicate` parameter instead.\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n" + ] + } + ], + "source": [ + "tract_df = add_tracts_for_geometries(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "2fdc8327-fea6-4e46-aceb-6e000e709716", + "metadata": {}, + "outputs": [], + "source": [ + "example_geoids = pd.read_csv(\n", + " \"../tests/sources/example/data/extract.csv\", dtype=\"object\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "4c642f03-aeac-450a-9ac1-51038d2002e0", + "metadata": {}, + "outputs": [], + "source": [ + "merged_exaple_data = pd.merge(\n", + " example_geoids[\"GEOID10_TRACT\"],\n", + " tract_df,\n", + " on=\"GEOID10_TRACT\",\n", + " how=\"left\",\n", + " indicator=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "1b3e5fff-41cd-4c6d-8f37-3ce2c0fe66bf", + "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", + "
GEOID10_TRACTOBJECTIDCENTROIDLATCENTROIDLONGCLOSESTCITYCONGRESSIONALDISTRICTCOUNTYCURRENTOWNERDODFUDSPROPERTYIDPKELIGIBILITY...STATESTATUSSTATUSCODEUSACEDISTRICTFISCALYEARPROPERTY_HISTORYUSACEDIVISIONgeometryindex_right_merge
2115001021010NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
3215001021402NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
3615009030402NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
3715009030800NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
4115007040604NaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNoneNaNleft_only
\n", + "

5 rows Ɨ 35 columns

\n", + "
" + ], + "text/plain": [ + " GEOID10_TRACT OBJECTID CENTROIDLAT CENTROIDLONG CLOSESTCITY \\\n", + "21 15001021010 NaN NaN NaN NaN \n", + "32 15001021402 NaN NaN NaN NaN \n", + "36 15009030402 NaN NaN NaN NaN \n", + "37 15009030800 NaN NaN NaN NaN \n", + "41 15007040604 NaN NaN NaN NaN \n", + "\n", + " CONGRESSIONALDISTRICT COUNTY CURRENTOWNER DODFUDSPROPERTYIDPK ELIGIBILITY \\\n", + "21 NaN NaN NaN NaN NaN \n", + "32 NaN NaN NaN NaN NaN \n", + "36 NaN NaN NaN NaN NaN \n", + "37 NaN NaN NaN NaN NaN \n", + "41 NaN NaN NaN NaN NaN \n", + "\n", + " ... STATE STATUS STATUSCODE USACEDISTRICT FISCALYEAR PROPERTY_HISTORY \\\n", + "21 ... NaN NaN NaN NaN NaN NaN \n", + "32 ... NaN NaN NaN NaN NaN NaN \n", + "36 ... NaN NaN NaN NaN NaN NaN \n", + "37 ... NaN NaN NaN NaN NaN NaN \n", + "41 ... NaN NaN NaN NaN NaN NaN \n", + "\n", + " USACEDIVISION geometry index_right _merge \n", + "21 NaN None NaN left_only \n", + "32 NaN None NaN left_only \n", + "36 NaN None NaN left_only \n", + "37 NaN None NaN left_only \n", + "41 NaN None NaN left_only \n", + "\n", + "[5 rows x 35 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "merged_exaple_data[merged_exaple_data[\"_merge\"] == \"left_only\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "b97e3aa3-88d0-4748-b7bb-77365078ea38", + "metadata": {}, + "outputs": [], + "source": [ + "original_crs = census_tracts.crs\n", + "points = (\n", + " census_tracts.to_crs(epsg=3395)\n", + " .loc[\n", + " merged_exaple_data[(merged_exaple_data[\"_merge\"] == \"left_only\")]\n", + " .query('not GEOID10_TRACT.str.startswith(\"06\")')\n", + " .GEOID10_TRACT\n", + " ]\n", + " .centroid.to_crs(original_crs)\n", + " .to_dict()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "a2ebcfec-ec7c-454e-ac0f-cee14a93989f", + "metadata": {}, + "outputs": [], + "source": [ + "object_ids_to_keep = set(\n", + " merged_exaple_data[merged_exaple_data[\"_merge\"] == \"both\"].OBJECTID.astype(\n", + " \"int\"\n", + " )\n", + ")\n", + "features = []\n", + "for feature in raw_fuds_geojson[\"features\"]:\n", + " if feature[\"properties\"][\"OBJECTID\"] in object_ids_to_keep:\n", + " features.append(feature)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "703bf1cd-e150-461d-8eed-ce35a593c28a", + "metadata": {}, + "outputs": [], + "source": [ + "def make_fake_feature(\n", + " state: str,\n", + " has_projects: bool,\n", + " is_eligible: bool,\n", + " latitude: float,\n", + " longitude: float,\n", + "):\n", + " \"\"\"For tracts where we don't have a FUDS, fake one.\"\"\"\n", + " make_fake_feature._object_id += 1\n", + " return {\n", + " \"type\": \"Feature\",\n", + " \"properties\": {\n", + " \"OBJECTID\": make_fake_feature._object_id,\n", + " \"CENTROIDLAT\": None,\n", + " \"CENTROIDLONG\": None,\n", + " \"CLOSESTCITY\": None,\n", + " \"CONGRESSIONALDISTRICT\": \"15\",\n", + " \"COUNTY\": None,\n", + " \"CURRENTOWNER\": None,\n", + " \"DODFUDSPROPERTYIDPK\": \" \",\n", + " \"ELIGIBILITY\": \"Eligible\" if is_eligible else \"Ineligible\",\n", + " \"EMSMGMTACTIONPLANLINK\": \"https://fudsportal.usace.army.mil/ems/inventory/map?id=54113\",\n", + " \"EPAREGION\": \"06\",\n", + " \"FEATUREDESCRIPTION\": None,\n", + " \"FEATURENAME\": \"NEIL, ET AL, PROPERTIES\",\n", + " \"FUDSINSTALLATIONID\": None,\n", + " \"FUDSUNIQUEPROPERTYNUMBER\": \"K06TX1120\",\n", + " \"HASPROJECTS\": \"Yes\" if has_projects else \"No\",\n", + " \"LATITUDE\": latitude,\n", + " \"LONGITUDE\": longitude,\n", + " \"MEDIAID\": None,\n", + " \"METADATAID\": None,\n", + " \"NOFURTHERACTION\": None,\n", + " \"PROJECTREQUIRED\": \"No\",\n", + " \"SDSID\": None,\n", + " \"SITEELIGIBILITY\": None,\n", + " \"STATE\": state,\n", + " \"STATUS\": \"Properties with projects\"\n", + " if has_projects\n", + " else \"Properties without projects\",\n", + " \"STATUSCODE\": \"Not on the NPL\",\n", + " \"USACEDISTRICT\": \"swf\",\n", + " \"FISCALYEAR\": \"2019\",\n", + " \"PROPERTY_HISTORY\": None,\n", + " \"USACEDIVISION\": \"swd\",\n", + " },\n", + " \"geometry\": {\n", + " \"type\": \"Point\",\n", + " \"coordinates\": [longitude, latitude],\n", + " },\n", + " }\n", + "\n", + "\n", + "make_fake_feature._object_id = 50" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "5e020301-a22f-4b42-9aea-127c0d2fe718", + "metadata": {}, + "outputs": [], + "source": [ + "# Create FUDS in CA for each tract that doesn't have a FUDS\n", + "for tract_id, point in points.items():\n", + " for bools in [(True, True), (True, False), (False, False)]:\n", + " features.append(\n", + " make_fake_feature(\"CA\", bools[0], bools[1], point.y, point.x)\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "eb278e9b-e86d-459b-8961-89696e8173ea", + "metadata": {}, + "outputs": [], + "source": [ + "test_fuds_geojson = raw_fuds_geojson.copy()\n", + "test_fuds_geojson[\"features\"] = features" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "01e7fea9-cd9e-4f62-b498-f1cb8cb30f04", + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"../tests/sources/us_army_fuds/data/fuds.geojson\", \"w\") as outfile:\n", + " json.dump(test_fuds_geojson, outfile)" + ] + }, + { + "cell_type": "markdown", + "id": "5300ea7d-ecc7-4502-bda8-abe9bb183e13", + "metadata": {}, + "source": [ + "# Eyeball the data to check the results of the tests" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "3b912164-8b07-417b-93ff-4180823fe485", + "metadata": {}, + "outputs": [], + "source": [ + "test_frame = gpd.read_file(\"../tests/sources/us_army_fuds/data/fuds.geojson\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "82603b6b-bf87-4b5c-9e17-0898ccbb43b3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/matt/.cache/pypoetry/virtualenvs/justice40-data-pipeline-IwBjhw-4-py3.10/lib/python3.10/site-packages/IPython/core/interactiveshell.py:3524: FutureWarning: The `op` parameter is deprecated and will be removed in a future release. Please use the `predicate` parameter instead.\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n" + ] + } + ], + "source": [ + "test_frame_with_tracts_full = (\n", + " test_frame_with_tracts\n", + ") = add_tracts_for_geometries(test_frame)" + ] + }, + { + "cell_type": "markdown", + "id": "6829ace4-0289-4d25-915e-4f95d00777ac", + "metadata": {}, + "source": [ + "## Pre-compute the long, lat: tract relationship for use in a mock in the tests" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "c085d3a6-dcb4-4f64-b654-68516e6268d1", + "metadata": {}, + "outputs": [], + "source": [ + "test_frame_with_tracts = test_frame_with_tracts.set_index(\n", + " [\"GEOID10_TRACT\", \"OBJECTID\"]\n", + ")[[\"ELIGIBILITY\", \"HASPROJECTS\"]]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "41f6649a-f31c-4fac-a72d-a38f79de499a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{(-121.39361572299998, 38.87463378900003): '06061021322',\n", + " (-121.40020751999998, 38.897583008000026): '06061021322',\n", + " (-121.40020751999998, 38.75158691400003): '06061021322',\n", + " (-157.84301757799997, 21.53619384800004): '15003010201',\n", + " (-157.85168456999997, 21.553405762000068): '15003010201',\n", + " (-157.90679931599996, 21.554199219000054): '15003010201',\n", + " (-159.52191162099996, 21.976623535000044): '15007040700',\n", + " (-159.52996826199998, 21.93762207000003): '15007040700',\n", + " (-159.52111816399997, 21.922607422000056): '15007040700',\n", + " (-156.14270019499997, 20.840393066000047): '15009030100',\n", + " (-155.85968017599998, 20.26519775400004): '15001021800',\n", + " (-155.73327636699997, 20.166809082000043): '15001021800',\n", + " (-155.89270019499997, 20.23522949200003): '15001021800',\n", + " (-156.26019287099996, 20.899414062000062): '15009030201',\n", + " (-156.22076415999996, 20.91241455100004): '15009030201',\n", + " (-156.20739746099997, 20.890991211000028): '15009030201',\n", + " (-159.46496581999997, 21.90460205100004): '15007040603',\n", + " (-159.46441650399998, 21.905212402000075): '15007040603',\n", + " (-154.82519531299997, 19.49182128900003): '15001021101',\n", + " (-121.06768798799999, 36.61480712900004): '06069000802',\n", + " (-117.391601563, 36.33343505900007): '06027000800',\n", + " (-117.85546874999994, 36.46960449200003): '06027000800',\n", + " (-117.23529052699996, 36.387634277000075): '06027000800',\n", + " (-118.15270996099997, 36.725219727000024): '06027000800',\n", + " (-118.13891601599994, 36.56683349600007): '06027000800',\n", + " (-117.311096191, 36.783386230000076): '06027000800',\n", + " (-118.00030517599998, 36.283813477000024): '06027000800',\n", + " (-116.86248779299996, 36.46124267600004): '06027000800',\n", + " (-117.16418456999997, 36.60681152300003): '06027000800',\n", + " (-117.06939697299998, 36.158386230000076): '06027000800',\n", + " (-117.873596191, 36.487609863000046): '06027000800',\n", + " (-116.82971191399997, 36.283386230000076): '06027000800',\n", + " (-117.21667480499997, 35.95843505900007): '06027000800',\n", + " (-118.04998779299996, 36.59478759800004): '06027000800',\n", + " (-117.03576660199997, 36.27801513700007): '06027000800',\n", + " (-116.10028076199995, 35.83380127000004): '06027000800',\n", + " (-117.86499023399995, 36.14422607400007): '06027000800',\n", + " (-155.10320912843935, 19.497857096442765): '15001021010',\n", + " (-155.91378674587037, 19.516632121497878): '15001021402',\n", + " (-156.3306524489697, 20.825377142028497): '15009030402',\n", + " (-156.5429023670438, 20.917074254751412): '15009030800',\n", + " (-159.48416820625405, 21.907546119100093): '15007040604'}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tracts = test_frame_with_tracts_full[\n", + " [\"GEOID10_TRACT\", \"geometry\"]\n", + "].drop_duplicates()\n", + "tracts[\"lat_long\"] = test_frame_with_tracts_full.geometry.apply(\n", + " lambda point: (point.x, point.y)\n", + ")\n", + "tracts.set_index(\"lat_long\")[\"GEOID10_TRACT\"].to_dict()" + ] + }, + { + "cell_type": "markdown", + "id": "22d109ae-9bc4-499f-9d58-1b7db2842a37", + "metadata": {}, + "source": [ + "## Look at the sample data itself" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "399b009a-8d52-4872-87ac-1aa1e82a7d67", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ELIGIBILITYHASPROJECTS
GEOID10_TRACTOBJECTID
06061021322684EligibleNo
1719EligibleYes
7428EligibleNo
150030102011538EligibleYes
1629EligibleNo
6062EligibleYes
150070407002093EligibleYes
2123EligibleNo
6015EligibleNo
150090301002217EligibleNo
150010218004551EligibleNo
4735EligibleNo
5310EligibleYes
150090302014622EligibleYes
5292EligibleNo
5832EligibleNo
150070406034669EligibleNo
6013EligibleNo
150010211014694EligibleNo
060690008026974EligibleYes
060270008007018EligibleNo
7046IneligibleNo
7565IneligibleNo
7689EligibleYes
7691EligibleYes
7831IneligibleNo
7866EligibleNo
7977EligibleNo
8235IneligibleNo
8237IneligibleNo
8499IneligibleNo
8500IneligibleNo
8557EligibleNo
8624IneligibleNo
8742IneligibleNo
9012IneligibleNo
9035EligibleYes
1500102101051EligibleYes
52IneligibleYes
53IneligibleNo
1500102140254EligibleYes
55IneligibleYes
56IneligibleNo
1500903040257EligibleYes
58IneligibleYes
59IneligibleNo
1500903080060EligibleYes
61IneligibleYes
62IneligibleNo
1500704060463EligibleYes
64IneligibleYes
65IneligibleNo
\n", + "
" + ], + "text/plain": [ + " ELIGIBILITY HASPROJECTS\n", + "GEOID10_TRACT OBJECTID \n", + "06061021322 684 Eligible No\n", + " 1719 Eligible Yes\n", + " 7428 Eligible No\n", + "15003010201 1538 Eligible Yes\n", + " 1629 Eligible No\n", + " 6062 Eligible Yes\n", + "15007040700 2093 Eligible Yes\n", + " 2123 Eligible No\n", + " 6015 Eligible No\n", + "15009030100 2217 Eligible No\n", + "15001021800 4551 Eligible No\n", + " 4735 Eligible No\n", + " 5310 Eligible Yes\n", + "15009030201 4622 Eligible Yes\n", + " 5292 Eligible No\n", + " 5832 Eligible No\n", + "15007040603 4669 Eligible No\n", + " 6013 Eligible No\n", + "15001021101 4694 Eligible No\n", + "06069000802 6974 Eligible Yes\n", + "06027000800 7018 Eligible No\n", + " 7046 Ineligible No\n", + " 7565 Ineligible No\n", + " 7689 Eligible Yes\n", + " 7691 Eligible Yes\n", + " 7831 Ineligible No\n", + " 7866 Eligible No\n", + " 7977 Eligible No\n", + " 8235 Ineligible No\n", + " 8237 Ineligible No\n", + " 8499 Ineligible No\n", + " 8500 Ineligible No\n", + " 8557 Eligible No\n", + " 8624 Ineligible No\n", + " 8742 Ineligible No\n", + " 9012 Ineligible No\n", + " 9035 Eligible Yes\n", + "15001021010 51 Eligible Yes\n", + " 52 Ineligible Yes\n", + " 53 Ineligible No\n", + "15001021402 54 Eligible Yes\n", + " 55 Ineligible Yes\n", + " 56 Ineligible No\n", + "15009030402 57 Eligible Yes\n", + " 58 Ineligible Yes\n", + " 59 Ineligible No\n", + "15009030800 60 Eligible Yes\n", + " 61 Ineligible Yes\n", + " 62 Ineligible No\n", + "15007040604 63 Eligible Yes\n", + " 64 Ineligible Yes\n", + " 65 Ineligible No" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_frame_with_tracts" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "2a48b84d-418e-4690-925e-ba397ab3b239", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ELIGIBILITYHASPROJECTS
GEOID10_TRACTOBJECTID
060270008007018EligibleNo
7046IneligibleNo
7565IneligibleNo
7689EligibleYes
7691EligibleYes
7831IneligibleNo
7866EligibleNo
7977EligibleNo
8235IneligibleNo
8237IneligibleNo
8499IneligibleNo
8500IneligibleNo
8557EligibleNo
8624IneligibleNo
8742IneligibleNo
9012IneligibleNo
9035EligibleYes
06061021322684EligibleNo
1719EligibleYes
7428EligibleNo
060690008026974EligibleYes
1500102101051EligibleYes
52IneligibleYes
53IneligibleNo
150010211014694EligibleNo
1500102140254EligibleYes
55IneligibleYes
56IneligibleNo
150010218004551EligibleNo
4735EligibleNo
5310EligibleYes
150030102011538EligibleYes
1629EligibleNo
6062EligibleYes
150070406034669EligibleNo
6013EligibleNo
1500704060463EligibleYes
64IneligibleYes
65IneligibleNo
150070407002093EligibleYes
2123EligibleNo
6015EligibleNo
150090301002217EligibleNo
150090302014622EligibleYes
5292EligibleNo
5832EligibleNo
1500903040257EligibleYes
58IneligibleYes
59IneligibleNo
1500903080060EligibleYes
61IneligibleYes
62IneligibleNo
\n", + "
" + ], + "text/plain": [ + " ELIGIBILITY HASPROJECTS\n", + "GEOID10_TRACT OBJECTID \n", + "06027000800 7018 Eligible No\n", + " 7046 Ineligible No\n", + " 7565 Ineligible No\n", + " 7689 Eligible Yes\n", + " 7691 Eligible Yes\n", + " 7831 Ineligible No\n", + " 7866 Eligible No\n", + " 7977 Eligible No\n", + " 8235 Ineligible No\n", + " 8237 Ineligible No\n", + " 8499 Ineligible No\n", + " 8500 Ineligible No\n", + " 8557 Eligible No\n", + " 8624 Ineligible No\n", + " 8742 Ineligible No\n", + " 9012 Ineligible No\n", + " 9035 Eligible Yes\n", + "06061021322 684 Eligible No\n", + " 1719 Eligible Yes\n", + " 7428 Eligible No\n", + "06069000802 6974 Eligible Yes\n", + "15001021010 51 Eligible Yes\n", + " 52 Ineligible Yes\n", + " 53 Ineligible No\n", + "15001021101 4694 Eligible No\n", + "15001021402 54 Eligible Yes\n", + " 55 Ineligible Yes\n", + " 56 Ineligible No\n", + "15001021800 4551 Eligible No\n", + " 4735 Eligible No\n", + " 5310 Eligible Yes\n", + "15003010201 1538 Eligible Yes\n", + " 1629 Eligible No\n", + " 6062 Eligible Yes\n", + "15007040603 4669 Eligible No\n", + " 6013 Eligible No\n", + "15007040604 63 Eligible Yes\n", + " 64 Ineligible Yes\n", + " 65 Ineligible No\n", + "15007040700 2093 Eligible Yes\n", + " 2123 Eligible No\n", + " 6015 Eligible No\n", + "15009030100 2217 Eligible No\n", + "15009030201 4622 Eligible Yes\n", + " 5292 Eligible No\n", + " 5832 Eligible No\n", + "15009030402 57 Eligible Yes\n", + " 58 Ineligible Yes\n", + " 59 Ineligible No\n", + "15009030800 60 Eligible Yes\n", + " 61 Ineligible Yes\n", + " 62 Ineligible No" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_frame_with_tracts.sort_index()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/ipython/geojson_compare_tiles.ipynb b/data/data-pipeline/data_pipeline/ipython/geojson_compare_tiles.ipynb new file mode 100644 index 000000000..79fa3336c --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/geojson_compare_tiles.ipynb @@ -0,0 +1,507 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "27da604f", + "metadata": {}, + "outputs": [], + "source": [ + "# %load_ext lab_black\n", + "import json\n", + "import pandas as pd\n", + "import geopandas as gpd\n", + "\n", + "# Read in the above json file\n", + "nation = gpd.read_file(\"/Users/vims/Downloads/usa-high-1822-637b.json\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "7b7083fd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 None\n", + "1 None\n", + "2 None\n", + "3 None\n", + "4 None\n", + " ... \n", + "74129 None\n", + "74130 None\n", + "74131 None\n", + "74132 None\n", + "74133 None\n", + "Name: FUDS_RAW, Length: 74134, dtype: object" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation[\"FUDS_RAW\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "117477e6", + "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", + "
GEOID10SFCFHRS_ETAML_ETAML_RAWFUDS_ETFUDS_RAW
027139080202MinnesotaScott CountyNoneFalseNoneFalseNone
127139080204MinnesotaScott CountyNoneFalseNoneFalseNone
227139080100MinnesotaScott CountyNoneFalseNoneFalseNone
327139080302MinnesotaScott CountyNoneFalseNoneFalseNone
427139080400MinnesotaScott CountyNoneFalseNoneFalseNone
...........................
7412916005001601IdahoBannock CountyNoneFalseNoneFalseNone
7413016005001300IdahoBannock CountyNoneFalseNoneFalseNone
7413116005001000IdahoBannock CountyNoneFalseNoneFalseNone
7413216005000900IdahoBannock CountyNoneFalseNoneFalseNone
7413316005000800IdahoBannock CountyNoneFalseNoneFalseNone
\n", + "

74134 rows Ɨ 8 columns

\n", + "
" + ], + "text/plain": [ + " GEOID10 SF CF HRS_ET AML_ET AML_RAW FUDS_ET \\\n", + "0 27139080202 Minnesota Scott County None False None False \n", + "1 27139080204 Minnesota Scott County None False None False \n", + "2 27139080100 Minnesota Scott County None False None False \n", + "3 27139080302 Minnesota Scott County None False None False \n", + "4 27139080400 Minnesota Scott County None False None False \n", + "... ... ... ... ... ... ... ... \n", + "74129 16005001601 Idaho Bannock County None False None False \n", + "74130 16005001300 Idaho Bannock County None False None False \n", + "74131 16005001000 Idaho Bannock County None False None False \n", + "74132 16005000900 Idaho Bannock County None False None False \n", + "74133 16005000800 Idaho Bannock County None False None False \n", + "\n", + " FUDS_RAW \n", + "0 None \n", + "1 None \n", + "2 None \n", + "3 None \n", + "4 None \n", + "... ... \n", + "74129 None \n", + "74130 None \n", + "74131 None \n", + "74132 None \n", + "74133 None \n", + "\n", + "[74134 rows x 8 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind = nation[\n", + " [\n", + " \"GEOID10\",\n", + " \"SF\",\n", + " \"CF\",\n", + " \"HRS_ET\",\n", + " \"AML_ET\",\n", + " \"AML_RAW\",\n", + " \"FUDS_ET\",\n", + " \"FUDS_RAW\",\n", + " ]\n", + "]\n", + "nation_new_ind" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "0f37acf4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([None, '0', '1'], dtype=object)" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"HRS_ET\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "4ae865ae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 8843\n", + "1 4045\n", + "Name: HRS_ET, dtype: int64" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"HRS_ET\"].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "2f0d29db", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([False, True])" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"AML_ET\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "646b3754", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False 72100\n", + "True 2034\n", + "Name: AML_ET, dtype: int64" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"AML_ET\"].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "0571df6d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([None, '1'], dtype=object)" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"AML_RAW\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "171fa3c9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 2034\n", + "Name: AML_RAW, dtype: int64" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"AML_RAW\"].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "370b0769", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([False, True])" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"FUDS_ET\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "f8afb668", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False 72056\n", + "True 2078\n", + "Name: FUDS_ET, dtype: int64" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"FUDS_ET\"].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "f2e3b78a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([None, '0', '1'], dtype=object)" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"FUDS_RAW\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "b722e802", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 3170\n", + "1 2078\n", + "Name: FUDS_RAW, dtype: int64" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nation_new_ind[\"FUDS_RAW\"].value_counts()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/ipython/geopandas_speed_test.ipynb b/data/data-pipeline/data_pipeline/ipython/geopandas_speed_test.ipynb new file mode 100644 index 000000000..01e121ef4 --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/geopandas_speed_test.ipynb @@ -0,0 +1,130 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "e0b801f9", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import pyogrio\n", + "from data_pipeline.etl.sources.census.etl import CensusETL\n", + "\n", + "import time" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c4cbab25", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time taken to execute the function using pyogrio is 63.07696199417114\n" + ] + } + ], + "source": [ + "begin = time.time()\n", + "census_tract_gdf = gpd.read_file(\n", + " CensusETL.NATIONAL_TRACT_JSON_PATH,\n", + " # Use `pyogrio` because it's vectorized and faster.\n", + " engine=\"pyogrio\",\n", + ")\n", + "end = time.time()\n", + "\n", + "print(\"Time taken to execute the function using pyogrio is\", end - begin)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "372ab939", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time taken to execute the function using include fields is 67.33577013015747\n" + ] + } + ], + "source": [ + "begin2 = time.time()\n", + "census_tract_gdf = gpd.read_file(\n", + " CensusETL.NATIONAL_TRACT_JSON_PATH,\n", + " engine=\"fiona\",\n", + " include_fields=[\"GEOID10\"],\n", + ")\n", + "end2 = time.time()\n", + "\n", + "print(\n", + " \"Time taken to execute the function using include fields is\", end2 - begin2\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "32fb7d4b", + "metadata": {}, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/lx/xmq8p65j71v9xq2bhsd2j5w40000gp/T/ipykernel_21074/2531126572.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mbegin2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m census_tract_gdf = gpd.read_file(\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mCensusETL\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mNATIONAL_TRACT_JSON_PATH\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mengine\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"fiona\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0minclude_fields\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"GEOID10\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.virtualenvs/scoring2/lib/python3.9/site-packages/geopandas/io/file.py\u001b[0m in \u001b[0;36m_read_file\u001b[0;34m(filename, bbox, mask, rows, engine, **kwargs)\u001b[0m\n\u001b[1;32m 251\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 252\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mengine\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"fiona\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 253\u001b[0;31m return _read_file_fiona(\n\u001b[0m\u001b[1;32m 254\u001b[0m \u001b[0mpath_or_bytes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfrom_bytes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbbox\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmask\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmask\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrows\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrows\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 255\u001b[0m )\n", + "\u001b[0;32m~/.virtualenvs/scoring2/lib/python3.9/site-packages/geopandas/io/file.py\u001b[0m in \u001b[0;36m_read_file_fiona\u001b[0;34m(path_or_bytes, from_bytes, bbox, mask, rows, **kwargs)\u001b[0m\n\u001b[1;32m 338\u001b[0m )\n\u001b[1;32m 339\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 340\u001b[0;31m df = GeoDataFrame.from_features(\n\u001b[0m\u001b[1;32m 341\u001b[0m \u001b[0mf_filt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcrs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcrs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumns\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcolumns\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m\"geometry\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 342\u001b[0m )\n", + "\u001b[0;32m~/.virtualenvs/scoring2/lib/python3.9/site-packages/geopandas/geodataframe.py\u001b[0m in \u001b[0;36mfrom_features\u001b[0;34m(cls, features, crs, columns)\u001b[0m\n\u001b[1;32m 641\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 642\u001b[0m \u001b[0mrows\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 643\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mfeature\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfeatures_lst\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 644\u001b[0m \u001b[0;31m# load geometry\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 645\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfeature\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"__geo_interface__\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32mfiona/ogrext.pyx\u001b[0m in \u001b[0;36mfiona.ogrext.Iterator.__next__\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32mfiona/ogrext.pyx\u001b[0m in \u001b[0;36mfiona.ogrext.Iterator._next\u001b[0;34m()\u001b[0m\n", + "\u001b[0;32m~/.pyenv/versions/3.9.6/lib/python3.9/logging/__init__.py\u001b[0m in \u001b[0;36mdebug\u001b[0;34m(self, msg, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1422\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmanager\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_clear_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1423\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1424\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0mdebug\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmsg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1425\u001b[0m \"\"\"\n\u001b[1;32m 1426\u001b[0m \u001b[0mLog\u001b[0m \u001b[0;34m'msg % args'\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mseverity\u001b[0m \u001b[0;34m'DEBUG'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "begin2 = time.time()\n", + "census_tract_gdf = gpd.read_file(\n", + " CensusETL.NATIONAL_TRACT_JSON_PATH,\n", + " engine=\"fiona\",\n", + " include_fields=[\"GEOID10\"],\n", + " rows=slice(0, 76322, 100),\n", + ")\n", + "end2 = time.time()\n", + "\n", + "print(\"Time taken to execute the function using slice is\", end2 - begin2)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/ipython/scoring_comparison.ipynb b/data/data-pipeline/data_pipeline/ipython/scoring_comparison.ipynb index bb66c5c7c..753653042 100644 --- a/data/data-pipeline/data_pipeline/ipython/scoring_comparison.ipynb +++ b/data/data-pipeline/data_pipeline/ipython/scoring_comparison.ipynb @@ -95,7 +95,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/usr/local/Cellar/jupyterlab/3.2.8/libexec/lib/python3.9/site-packages/IPython/core/interactiveshell.py:3251: DtypeWarning: Columns (1) have mixed types.Specify dtype option on import or set low_memory=False.\n", + "/usr/local/Cellar/jupyterlab/3.2.8/libexec/lib/python3.9/site-packages/IPython/core/interactiveshell.py:3251: DtypeWarning: Columns (1,74,75,77) have mixed types.Specify dtype option on import or set low_memory=False.\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n" ] }, @@ -121,25 +121,25 @@ " \n", " \n", " GEOID10_TRACT\n", - " Persistent Poverty Census Tract\n", + " Does the tract have at least 35 acres in it?\n", + " Contains agricultural value\n", + " Names of Tribal areas within Census tract\n", " Housing burden (percent)\n", + " Share of homes with no kitchen or indoor plumbing (percent)\n", " Total population\n", " Median household income (% of state median household income)\n", " Current asthma among adults aged greater than or equal to 18 years\n", " Coronary heart disease among adults aged greater than or equal to 18 years\n", - " Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years\n", - " Current lack of health insurance among adults aged 18-64 years\n", - " Diagnosed diabetes among adults aged greater than or equal to 18 years\n", " ...\n", - " Score D (top 25th percentile)\n", - " Score D (top 30th percentile)\n", - " Score D (top 35th percentile)\n", - " Score D (top 40th percentile)\n", - " Score E (percentile)\n", - " Score E (top 25th percentile)\n", - " Score E (top 30th percentile)\n", - " Score E (top 35th percentile)\n", - " Score E (top 40th percentile)\n", + " Workforce Factor (Definition N)\n", + " Total categories exceeded\n", + " Definition N (communities)\n", + " Definition N (communities) (percentile)\n", + " Meets the less stringent low income criterion for the adjacency index?\n", + " Definition N (communities) (average of neighbors)\n", + " Is the tract surrounded by disadvantaged communities?\n", + " Definition N (communities) (based on adjacency index and low income alone)\n", + " Definition N community, including adjacency index tracts\n", " GEOID10_STATE\n", " \n", " \n", @@ -148,21 +148,21 @@ " 0\n", " 01073001100\n", " True\n", + " True\n", + " NaN\n", " 0.28\n", - " 4897.00\n", + " 0.00\n", + " 4781.00\n", " 0.73\n", " 11.20\n", " 7.20\n", - " 6.70\n", - " 16.60\n", - " 19.30\n", " ...\n", " False\n", + " 0.00\n", " False\n", - " False\n", - " False\n", - " 0.33\n", - " False\n", + " 0\n", + " True\n", + " 0.86\n", " False\n", " False\n", " False\n", @@ -172,21 +172,21 @@ " 1\n", " 01073001400\n", " True\n", + " True\n", + " NaN\n", " 0.18\n", - " 1906.00\n", + " 0.00\n", + " 1946.00\n", " 0.71\n", " 11.10\n", " 9.10\n", - " 7.30\n", - " 21.40\n", - " 22.40\n", " ...\n", - " False\n", - " False\n", " True\n", + " 6.00\n", " True\n", - " 0.73\n", - " False\n", + " 1\n", + " True\n", + " 1.00\n", " True\n", " True\n", " True\n", @@ -195,22 +195,22 @@ " \n", " 2\n", " 01073002000\n", - " False\n", + " True\n", + " True\n", + " NaN\n", " 0.44\n", - " 4215.00\n", + " 0.01\n", + " 4080.00\n", " 0.54\n", " 13.50\n", " 9.50\n", - " 6.10\n", - " 25.40\n", - " 22.80\n", " ...\n", " True\n", + " 3.00\n", " True\n", + " 1\n", " True\n", - " True\n", - " 0.93\n", - " True\n", + " 1.00\n", " True\n", " True\n", " True\n", @@ -219,22 +219,22 @@ " \n", " 3\n", " 01073003802\n", - " False\n", + " True\n", + " True\n", + " NaN\n", " 0.41\n", - " 5149.00\n", + " 0.04\n", + " 5291.00\n", " 0.77\n", " 12.00\n", " 6.60\n", - " 5.60\n", - " 20.90\n", - " 18.60\n", " ...\n", + " False\n", + " 4.00\n", " True\n", + " 1\n", " True\n", - " True\n", - " True\n", - " 0.76\n", - " True\n", + " 1.00\n", " True\n", " True\n", " True\n", @@ -244,21 +244,21 @@ " 4\n", " 01073004000\n", " True\n", + " False\n", + " NaN\n", " 0.47\n", - " 2621.00\n", + " 0.01\n", + " 2533.00\n", " 0.37\n", " 13.10\n", " 10.00\n", - " 6.30\n", - " 24.50\n", - " 25.00\n", " ...\n", " True\n", + " 5.00\n", " True\n", + " 1\n", " True\n", - " True\n", - " 0.95\n", - " True\n", + " 1.00\n", " True\n", " True\n", " True\n", @@ -266,23 +266,44 @@ " \n", " \n", "\n", - "

5 rows Ɨ 554 columns

\n", + "

5 rows Ɨ 256 columns

\n", "" ], "text/plain": [ - " GEOID10_TRACT Persistent Poverty Census Tract Housing burden (percent) \\\n", - "0 01073001100 True 0.28 \n", - "1 01073001400 True 0.18 \n", - "2 01073002000 False 0.44 \n", - "3 01073003802 False 0.41 \n", - "4 01073004000 True 0.47 \n", + " GEOID10_TRACT Does the tract have at least 35 acres in it? \\\n", + "0 01073001100 True \n", + "1 01073001400 True \n", + "2 01073002000 True \n", + "3 01073003802 True \n", + "4 01073004000 True \n", + "\n", + " Contains agricultural value Names of Tribal areas within Census tract \\\n", + "0 True NaN \n", + "1 True NaN \n", + "2 True NaN \n", + "3 True NaN \n", + "4 False NaN \n", + "\n", + " Housing burden (percent) \\\n", + "0 0.28 \n", + "1 0.18 \n", + "2 0.44 \n", + "3 0.41 \n", + "4 0.47 \n", + "\n", + " Share of homes with no kitchen or indoor plumbing (percent) \\\n", + "0 0.00 \n", + "1 0.00 \n", + "2 0.01 \n", + "3 0.04 \n", + "4 0.01 \n", "\n", " Total population \\\n", - "0 4897.00 \n", - "1 1906.00 \n", - "2 4215.00 \n", - "3 5149.00 \n", - "4 2621.00 \n", + "0 4781.00 \n", + "1 1946.00 \n", + "2 4080.00 \n", + "3 5291.00 \n", + "4 2533.00 \n", "\n", " Median household income (% of state median household income) \\\n", "0 0.73 \n", @@ -305,63 +326,56 @@ "3 6.60 \n", "4 10.00 \n", "\n", - " Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years \\\n", - "0 6.70 \n", - "1 7.30 \n", - "2 6.10 \n", - "3 5.60 \n", - "4 6.30 \n", + " ... Workforce Factor (Definition N) Total categories exceeded \\\n", + "0 ... False 0.00 \n", + "1 ... True 6.00 \n", + "2 ... True 3.00 \n", + "3 ... False 4.00 \n", + "4 ... True 5.00 \n", "\n", - " Current lack of health insurance among adults aged 18-64 years \\\n", - "0 16.60 \n", - "1 21.40 \n", - "2 25.40 \n", - "3 20.90 \n", - "4 24.50 \n", + " Definition N (communities) Definition N (communities) (percentile) \\\n", + "0 False 0 \n", + "1 True 1 \n", + "2 True 1 \n", + "3 True 1 \n", + "4 True 1 \n", "\n", - " Diagnosed diabetes among adults aged greater than or equal to 18 years \\\n", - "0 19.30 \n", - "1 22.40 \n", - "2 22.80 \n", - "3 18.60 \n", - "4 25.00 \n", + " Meets the less stringent low income criterion for the adjacency index? \\\n", + "0 True \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True \n", "\n", - " ... Score D (top 25th percentile) Score D (top 30th percentile) \\\n", - "0 ... False False \n", - "1 ... False False \n", - "2 ... True True \n", - "3 ... True True \n", - "4 ... True True \n", + " Definition N (communities) (average of neighbors) \\\n", + "0 0.86 \n", + "1 1.00 \n", + "2 1.00 \n", + "3 1.00 \n", + "4 1.00 \n", "\n", - " Score D (top 35th percentile) Score D (top 40th percentile) \\\n", - "0 False False \n", - "1 True True \n", - "2 True True \n", - "3 True True \n", - "4 True True \n", + " Is the tract surrounded by disadvantaged communities? \\\n", + "0 False \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True \n", "\n", - " Score E (percentile) Score E (top 25th percentile) \\\n", - "0 0.33 False \n", - "1 0.73 False \n", - "2 0.93 True \n", - "3 0.76 True \n", - "4 0.95 True \n", + " Definition N (communities) (based on adjacency index and low income alone) \\\n", + "0 False \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True \n", "\n", - " Score E (top 30th percentile) Score E (top 35th percentile) \\\n", - "0 False False \n", - "1 True True \n", - "2 True True \n", - "3 True True \n", - "4 True True \n", + " Definition N community, including adjacency index tracts GEOID10_STATE \n", + "0 False 01 \n", + "1 True 01 \n", + "2 True 01 \n", + "3 True 01 \n", + "4 True 01 \n", "\n", - " Score E (top 40th percentile) GEOID10_STATE \n", - "0 False 01 \n", - "1 True 01 \n", - "2 True 01 \n", - "3 True 01 \n", - "4 True 01 \n", - "\n", - "[5 rows x 554 columns]" + "[5 rows x 256 columns]" ] }, "execution_count": 3, @@ -456,25 +470,25 @@ " \n", " \n", " GEOID10_TRACT\n", - " Persistent Poverty Census Tract\n", + " Does the tract have at least 35 acres in it?\n", + " Contains agricultural value\n", + " Names of Tribal areas within Census tract\n", " Housing burden (percent)\n", + " Share of homes with no kitchen or indoor plumbing (percent)\n", " Total population\n", " Median household income (% of state median household income)\n", " Current asthma among adults aged greater than or equal to 18 years\n", " Coronary heart disease among adults aged greater than or equal to 18 years\n", - " Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years\n", - " Current lack of health insurance among adults aged 18-64 years\n", - " Diagnosed diabetes among adults aged greater than or equal to 18 years\n", " ...\n", - " Score D (top 25th percentile)\n", - " Score D (top 30th percentile)\n", - " Score D (top 35th percentile)\n", - " Score D (top 40th percentile)\n", - " Score E (percentile)\n", - " Score E (top 25th percentile)\n", - " Score E (top 30th percentile)\n", - " Score E (top 35th percentile)\n", - " Score E (top 40th percentile)\n", + " Workforce Factor (Definition N)\n", + " Total categories exceeded\n", + " Definition N (communities)\n", + " Definition N (communities) (percentile)\n", + " Meets the less stringent low income criterion for the adjacency index?\n", + " Definition N (communities) (average of neighbors)\n", + " Is the tract surrounded by disadvantaged communities?\n", + " Definition N (communities) (based on adjacency index and low income alone)\n", + " Definition N community, including adjacency index tracts\n", " GEOID10_STATE\n", " \n", " \n", @@ -483,21 +497,21 @@ " 0\n", " 01073001100\n", " True\n", + " True\n", + " NaN\n", " 0.28\n", - " 4897.00\n", + " 0.00\n", + " 4781.00\n", " 0.73\n", " 11.20\n", " 7.20\n", - " 6.70\n", - " 16.60\n", - " 19.30\n", " ...\n", " False\n", + " 0.00\n", " False\n", - " False\n", - " False\n", - " 0.33\n", - " False\n", + " 0\n", + " True\n", + " 0.86\n", " False\n", " False\n", " False\n", @@ -507,21 +521,21 @@ " 1\n", " 01073001400\n", " True\n", + " True\n", + " NaN\n", " 0.18\n", - " 1906.00\n", + " 0.00\n", + " 1946.00\n", " 0.71\n", " 11.10\n", " 9.10\n", - " 7.30\n", - " 21.40\n", - " 22.40\n", " ...\n", - " False\n", - " False\n", " True\n", + " 6.00\n", " True\n", - " 0.73\n", - " False\n", + " 1\n", + " True\n", + " 1.00\n", " True\n", " True\n", " True\n", @@ -530,22 +544,22 @@ " \n", " 2\n", " 01073002000\n", - " False\n", + " True\n", + " True\n", + " NaN\n", " 0.44\n", - " 4215.00\n", + " 0.01\n", + " 4080.00\n", " 0.54\n", " 13.50\n", " 9.50\n", - " 6.10\n", - " 25.40\n", - " 22.80\n", " ...\n", " True\n", + " 3.00\n", " True\n", + " 1\n", " True\n", - " True\n", - " 0.93\n", - " True\n", + " 1.00\n", " True\n", " True\n", " True\n", @@ -554,22 +568,22 @@ " \n", " 3\n", " 01073003802\n", - " False\n", + " True\n", + " True\n", + " NaN\n", " 0.41\n", - " 5149.00\n", + " 0.04\n", + " 5291.00\n", " 0.77\n", " 12.00\n", " 6.60\n", - " 5.60\n", - " 20.90\n", - " 18.60\n", " ...\n", + " False\n", + " 4.00\n", " True\n", + " 1\n", " True\n", - " True\n", - " True\n", - " 0.76\n", - " True\n", + " 1.00\n", " True\n", " True\n", " True\n", @@ -579,21 +593,21 @@ " 4\n", " 01073004000\n", " True\n", + " False\n", + " NaN\n", " 0.47\n", - " 2621.00\n", + " 0.01\n", + " 2533.00\n", " 0.37\n", " 13.10\n", " 10.00\n", - " 6.30\n", - " 24.50\n", - " 25.00\n", " ...\n", " True\n", + " 5.00\n", " True\n", + " 1\n", " True\n", - " True\n", - " 0.95\n", - " True\n", + " 1.00\n", " True\n", " True\n", " True\n", @@ -601,23 +615,44 @@ " \n", " \n", "\n", - "

5 rows Ɨ 554 columns

\n", + "

5 rows Ɨ 256 columns

\n", "" ], "text/plain": [ - " GEOID10_TRACT Persistent Poverty Census Tract Housing burden (percent) \\\n", - "0 01073001100 True 0.28 \n", - "1 01073001400 True 0.18 \n", - "2 01073002000 False 0.44 \n", - "3 01073003802 False 0.41 \n", - "4 01073004000 True 0.47 \n", + " GEOID10_TRACT Does the tract have at least 35 acres in it? \\\n", + "0 01073001100 True \n", + "1 01073001400 True \n", + "2 01073002000 True \n", + "3 01073003802 True \n", + "4 01073004000 True \n", + "\n", + " Contains agricultural value Names of Tribal areas within Census tract \\\n", + "0 True NaN \n", + "1 True NaN \n", + "2 True NaN \n", + "3 True NaN \n", + "4 False NaN \n", + "\n", + " Housing burden (percent) \\\n", + "0 0.28 \n", + "1 0.18 \n", + "2 0.44 \n", + "3 0.41 \n", + "4 0.47 \n", + "\n", + " Share of homes with no kitchen or indoor plumbing (percent) \\\n", + "0 0.00 \n", + "1 0.00 \n", + "2 0.01 \n", + "3 0.04 \n", + "4 0.01 \n", "\n", " Total population \\\n", - "0 4897.00 \n", - "1 1906.00 \n", - "2 4215.00 \n", - "3 5149.00 \n", - "4 2621.00 \n", + "0 4781.00 \n", + "1 1946.00 \n", + "2 4080.00 \n", + "3 5291.00 \n", + "4 2533.00 \n", "\n", " Median household income (% of state median household income) \\\n", "0 0.73 \n", @@ -640,63 +675,56 @@ "3 6.60 \n", "4 10.00 \n", "\n", - " Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years \\\n", - "0 6.70 \n", - "1 7.30 \n", - "2 6.10 \n", - "3 5.60 \n", - "4 6.30 \n", - "\n", - " Current lack of health insurance among adults aged 18-64 years \\\n", - "0 16.60 \n", - "1 21.40 \n", - "2 25.40 \n", - "3 20.90 \n", - "4 24.50 \n", + " ... Workforce Factor (Definition N) Total categories exceeded \\\n", + "0 ... False 0.00 \n", + "1 ... True 6.00 \n", + "2 ... True 3.00 \n", + "3 ... False 4.00 \n", + "4 ... True 5.00 \n", "\n", - " Diagnosed diabetes among adults aged greater than or equal to 18 years \\\n", - "0 19.30 \n", - "1 22.40 \n", - "2 22.80 \n", - "3 18.60 \n", - "4 25.00 \n", + " Definition N (communities) Definition N (communities) (percentile) \\\n", + "0 False 0 \n", + "1 True 1 \n", + "2 True 1 \n", + "3 True 1 \n", + "4 True 1 \n", "\n", - " ... Score D (top 25th percentile) Score D (top 30th percentile) \\\n", - "0 ... False False \n", - "1 ... False False \n", - "2 ... True True \n", - "3 ... True True \n", - "4 ... True True \n", + " Meets the less stringent low income criterion for the adjacency index? \\\n", + "0 True \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True \n", "\n", - " Score D (top 35th percentile) Score D (top 40th percentile) \\\n", - "0 False False \n", - "1 True True \n", - "2 True True \n", - "3 True True \n", - "4 True True \n", + " Definition N (communities) (average of neighbors) \\\n", + "0 0.86 \n", + "1 1.00 \n", + "2 1.00 \n", + "3 1.00 \n", + "4 1.00 \n", "\n", - " Score E (percentile) Score E (top 25th percentile) \\\n", - "0 0.33 False \n", - "1 0.73 False \n", - "2 0.93 True \n", - "3 0.76 True \n", - "4 0.95 True \n", + " Is the tract surrounded by disadvantaged communities? \\\n", + "0 False \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True \n", "\n", - " Score E (top 30th percentile) Score E (top 35th percentile) \\\n", - "0 False False \n", - "1 True True \n", - "2 True True \n", - "3 True True \n", - "4 True True \n", + " Definition N (communities) (based on adjacency index and low income alone) \\\n", + "0 False \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True \n", "\n", - " Score E (top 40th percentile) GEOID10_STATE \n", - "0 False 01 \n", - "1 True 01 \n", - "2 True 01 \n", - "3 True 01 \n", - "4 True 01 \n", + " Definition N community, including adjacency index tracts GEOID10_STATE \n", + "0 False 01 \n", + "1 True 01 \n", + "2 True 01 \n", + "3 True 01 \n", + "4 True 01 \n", "\n", - "[5 rows x 554 columns]" + "[5 rows x 256 columns]" ] }, "execution_count": 5, @@ -733,7 +761,7 @@ "text": [ "\n", "~~~~Analysis for field `Percent enrollment in college or graduate school`~~~~\n", - "count 73298.00\n", + "count 73273.00\n", "mean 0.08\n", "std 0.09\n", "min 0.00\n", @@ -745,11 +773,11 @@ "\n", "There are 1.16% of values missing.\n", "\n", - "Quantile at 0.9 is 0.12186292304275304\n", + "Quantile at 0.9 is 0.1218759147363821\n", "AxesSubplot(0.125,0.125;0.775x0.755)\n", "\n", "~~~~Analysis for field `Percent individuals age 25 or over with less than high school degree`~~~~\n", - "count 73280.00\n", + "count 73255.00\n", "mean 0.13\n", "std 0.10\n", "min 0.00\n", @@ -761,27 +789,27 @@ "\n", "There are 1.19% of values missing.\n", "\n", - "Quantile at 0.9 is 0.2693215167829206\n", + "Quantile at 0.9 is 0.26932488524084897\n", "AxesSubplot(0.125,0.125;0.775x0.755)\n", "\n", "~~~~Analysis for field `Median household income as a percent of area median income`~~~~\n", - "count 68232.00\n", + "count 69113.00\n", "mean 1.01\n", "std 0.43\n", "min 0.04\n", "25% 0.72\n", "50% 0.94\n", "75% 1.21\n", - "max 4.46\n", + "max 4.92\n", "Name: Median household income as a percent of area median income, dtype: float64\n", "\n", - "There are 7.99% of values missing.\n", + "There are 6.77% of values missing.\n", "\n", - "Quantile at 0.9 is 1.5445838485220498\n", + "Quantile at 0.9 is 1.546334409849502\n", "AxesSubplot(0.125,0.125;0.775x0.755)\n", "\n", "~~~~Analysis for field `Percent of individuals below 200% Federal Poverty Line`~~~~\n", - "count 73149.00\n", + "count 73124.00\n", "mean 0.33\n", "std 0.19\n", "min 0.00\n", @@ -793,13 +821,13 @@ "\n", "There are 1.36% of values missing.\n", "\n", - "Quantile at 0.9 is 0.6000566482486579\n", + "Quantile at 0.9 is 0.6\n", "AxesSubplot(0.125,0.125;0.775x0.755)\n" ] }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYMAAAD4CAYAAAAO9oqkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAUf0lEQVR4nO3df6zddZ3n8efL8jNUBIbuDbZkSmKDIkTFG+jEyeSuZEpBMyUZJRBXuoa1ScWGyZrMwmaTLipZ5w9HfsQh20jXdoYFGx1D46KdBjmZmGyBokiFynIXIW0DdsfyY65GTd33/nE+3Tm2t+3p7e05vZznIzm53+/7+/l+vp9Pf9zX/f4456aqkCSNtrcNewCSpOEzDCRJhoEkyTCQJGEYSJKAU4Y9gJk6//zza/HixTPa95e//CVnnXXW7A5oDhjFeY/inMF5j5p+5/3UU0/9U1UtmG7bnA2DxYsXs3379hnt2+l0mJiYmN0BzQGjOO9RnDM471HT77yTvHy4bV4mkiQZBpIkw0CShGEgScIwkCTRZxgkOSfJN5P8NMnOJH+U5LwkW5O80L6e29omyT1JJpM8k+Tynn5WtvYvJFnZU/9gkh1tn3uSZPanKkk6nH7PDO4GvldV7wbeB+wEbgMeraolwKNtHeAaYEl7rQLuA0hyHrAWuBK4Alh7IEBam0/37Lf8+KYlSToWRw2DJO8A/gS4H6CqfltVrwMrgA2t2Qbgura8AthYXduAc5JcAFwNbK2qfVX1GrAVWN62nV1V26r7edobe/qSJA1AP286uwj4P8B/S/I+4CngVmCsql5pbV4FxtryQmBXz/67W+1I9d3T1A+RZBXdsw3GxsbodDp9DP9QU1NTM953LhvFeY/inMF5j5rZmHc/YXAKcDmwpqoeT3I3/3JJCICqqiQn/LfkVNU6YB3A+Ph4zfSdhvc+8DBf/sEvD6m/9KWPHM/wTnqj+O7MUZwzOO9RMxvz7ueewW5gd1U93ta/STccft4u8dC+7m3b9wAX9uy/qNWOVF80TV2SNCBHDYOqehXYleTiVroKeA7YDBx4Imgl8HBb3gzc1J4qWgq80S4nbQGWJTm33TheBmxp295MsrQ9RXRTT1+SpAHo94Pq1gAPJDkNeBH4FN0g2ZTkZuBl4PrW9hHgWmAS+FVrS1XtS/IF4MnW7vNVta8tfwb4OnAm8N32kiQNSF9hUFVPA+PTbLpqmrYF3HKYftYD66epbwcu7WcskqTZ5zuQJUmGgSTJMJAkYRhIkjAMJEkYBpIkDANJEoaBJAnDQJKEYSBJwjCQJGEYSJIwDCRJGAaSJAwDSRKGgSQJw0CShGEgScIwkCRhGEiSMAwkSRgGkiQMA0kShoEkCcNAkoRhIEmizzBI8lKSHUmeTrK91c5LsjXJC+3rua2eJPckmUzyTJLLe/pZ2dq/kGRlT/2Drf/Jtm9me6KSpMM7ljODf11V76+q8bZ+G/BoVS0BHm3rANcAS9prFXAfdMMDWAtcCVwBrD0QIK3Np3v2Wz7jGUmSjtnxXCZaAWxoyxuA63rqG6trG3BOkguAq4GtVbWvql4DtgLL27azq2pbVRWwsacvSdIAnNJnuwL+IUkB/7Wq1gFjVfVK2/4qMNaWFwK7evbd3WpHqu+epn6IJKvonm0wNjZGp9Ppc/i/b+xM+Nxl+w+pz7S/uWJqauotP8eDjeKcwXmPmtmYd79h8MdVtSfJvwK2Jvlp78aqqhYUJ1QLoXUA4+PjNTExMaN+7n3gYb6849Cpv/SJmfU3V3Q6HWb6ZzZXjeKcwXmPmtmYd1+XiapqT/u6F/g23Wv+P2+XeGhf97bme4ALe3Zf1GpHqi+api5JGpCjhkGSs5K8/cAysAz4CbAZOPBE0Erg4ba8GbipPVW0FHijXU7aAixLcm67cbwM2NK2vZlkaXuK6KaeviRJA9DPZaIx4Nvtac9TgP9eVd9L8iSwKcnNwMvA9a39I8C1wCTwK+BTAFW1L8kXgCdbu89X1b62/Bng68CZwHfbS5I0IEcNg6p6EXjfNPVfAFdNUy/glsP0tR5YP019O3BpH+OVJJ0AvgNZkmQYSJIMA0kShoEkCcNAkoRhIEnCMJAkYRhIkjAMJEkYBpIkDANJEoaBJAnDQJKEYSBJwjCQJGEYSJIwDCRJGAaSJAwDSRKGgSQJw0CShGEgScIwkCRhGEiSMAwkSRxDGCSZl+RHSb7T1i9K8niSySTfSHJaq5/e1ifb9sU9fdze6s8nubqnvrzVJpPcNovzkyT14VjODG4Fdvas/xXwlap6F/AacHOr3wy81upfae1IcglwA/BeYDnwNy1g5gFfBa4BLgFubG0lSQPSVxgkWQR8BPhaWw/wYeCbrckG4Lq2vKKt07Zf1dqvAB6qqt9U1c+ASeCK9pqsqher6rfAQ62tJGlATumz3V3AXwJvb+t/ALxeVfvb+m5gYVteCOwCqKr9Sd5o7RcC23r67N1n10H1K6cbRJJVwCqAsbExOp1On8P/fWNnwucu239Ifab9zRVTU1Nv+TkebBTnDM571MzGvI8aBkk+CuytqqeSTBzX0Y5TVa0D1gGMj4/XxMTMhnPvAw/z5R2HTv2lT8ysv7mi0+kw0z+zuWoU5wzOe9TMxrz7OTP4EPBnSa4FzgDOBu4GzklySjs7WATsae33ABcCu5OcArwD+EVP/YDefQ5XlyQNwFHvGVTV7VW1qKoW070B/P2q+gTwGPCx1mwl8HBb3tzWadu/X1XV6je0p40uApYATwBPAkva00mntWNsnpXZSZL60u89g+n8B+ChJF8EfgTc3+r3A3+bZBLYR/ebO1X1bJJNwHPAfuCWqvodQJLPAluAecD6qnr2OMYlSTpGxxQGVdUBOm35RbpPAh3c5tfAxw+z/53AndPUHwEeOZaxSJJmj+9AliQZBpIkw0CShGEgScIwkCRxfI+WzlmXve1nvHTG2mm2vDHwsUjSycAzA0mSYSBJMgwkSRgGkiQMA0kShoEkCcNAkoRhIEnCMJAkMaLvQD4ZXLbhsoEfc/X81UwwMfDjSjr5eWYgSTIMJEmGgSQJw0CShGEgScIwkCRhGEiSMAwkSRgGkiQMA0kSfYRBkjOSPJHkx0meTXJHq1+U5PEkk0m+keS0Vj+9rU+27Yt7+rq91Z9PcnVPfXmrTSa57QTMU5J0BP2cGfwG+HBVvQ94P7A8yVLgr4CvVNW7gNeAm1v7m4HXWv0rrR1JLgFuAN4LLAf+Jsm8JPOArwLXAJcAN7a2kqQBOWoYVNdUWz21vQr4MPDNVt8AXNeWV7R12varkqTVH6qq31TVz4BJ4Ir2mqyqF6vqt8BDra0kaUD6+tTS9tP7U8C76P4U/7+B16tqf2uyG1jYlhcCuwCqan+SN4A/aPVtPd327rProPqVhxnHKmAVwNjYGJ1Op5/hH2Lq9HfSufiOQzfMsL+ZWD1/9cCOdcCCeQtm/Gc2V01NTY3cnMF5j5rZmHdfYVBVvwPen+Qc4NvAu4/rqDNUVeuAdQDj4+M1MTExo346D97FxPNrD91w4xvHMbpjs2bDmoEd64DV81fz8YmPD/y4w9TpdJjpv5O5zHmPltmY9zE9TVRVrwOPAX8EnJPkQJgsAva05T3AhQBt+zuAX/TWD9rncHVJ0oD08zTRgnZGQJIzgT8FdtINhY+1ZiuBh9vy5rZO2/79qqpWv6E9bXQRsAR4AngSWNKeTjqN7k3mzbMwN0lSn/q5THQBsKHdN3gbsKmqvpPkOeChJF8EfgTc39rfD/xtkklgH91v7lTVs0k2Ac8B+4Fb2uUnknwW2ALMA9ZX1bOzNkNJ0lEdNQyq6hngA9PUX6T7JNDB9V8D016Yrqo7gTunqT8CPNLHeCVJJ4DvQJYkGQaSJMNAkoRhIEnCMJAkYRhIkjAMJEkYBpIkDANJEoaBJAnDQJKEYSBJwjCQJGEYSJIwDCRJGAaSJAwDSRKGgSQJw0CShGEgScIwkCRhGEiSgFOGPYCTyn9+x2Hqbwx2HJI0YJ4ZSJIMA0lSH5eJklwIbATGgALWVdXdSc4DvgEsBl4Crq+q15IEuBu4FvgV8G+r6oetr5XAf2pdf7GqNrT6B4GvA2cCjwC3VlXN0hzV47INlw3luDtW7hjKcSX1p58zg/3A56rqEmApcEuSS4DbgEeragnwaFsHuAZY0l6rgPsAWnisBa4ErgDWJjm37XMf8Ome/ZYf/9QkSf06ahhU1SsHfrKvqn8GdgILgRXAhtZsA3BdW14BbKyubcA5SS4Arga2VtW+qnoN2Aosb9vOrqpt7WxgY09fkqQBOKZ7BkkWAx8AHgfGquqVtulVupeRoBsUu3p2291qR6rvnqYuSRqQvh8tTTIf+BbwF1X1ZvfWQFdVVZITfo0/ySq6l54YGxuj0+nMqJ+p099J5+I7+t9hhsc5ktXzV896n0ezYN6CoRwXmPHf1fGampoa2rGHyXmPltmYd19hkORUukHwQFX9fSv/PMkFVfVKu9Szt9X3ABf27L6o1fYAEwfVO62+aJr2h6iqdcA6gPHx8ZqYmJiu2VF1HryLiefX9r/DjbP/PoM1G9bMep9Hs3r+au6bum/gxwXY8efDuYHc6XSY6b+Tucx5j5bZmPdRLxO1p4PuB3ZW1V/3bNoMrGzLK4GHe+o3pWsp8Ea7nLQFWJbk3HbjeBmwpW17M8nSdqybevqSJA1AP2cGHwI+CexI8nSr/UfgS8CmJDcDLwPXt22P0H2sdJLuo6WfAqiqfUm+ADzZ2n2+qva15c/wL4+Wfre9JEkDctQwqKofADnM5qumaV/ALYfpaz2wfpr6duDSo41FknRi+A5kSZJhIEkyDCRJGAaSJAwDSRKGgSQJw0CShGEgScIwkCRhGEiSMAwkSRzD7zMYZTvf/Z5p6+/56c4Bj0SSTgzPDCRJhoEkyctEv2fnQ+8c9hAkaSg8M5AkGQaSJMNAkoT3DI7L4R45BR87lTS3eGYgSTIMJEmGgSQJw0CShGEgScIwkCRhGEiS6CMMkqxPsjfJT3pq5yXZmuSF9vXcVk+Se5JMJnkmyeU9+6xs7V9IsrKn/sEkO9o+9yTJbE9SknRk/ZwZfB1YflDtNuDRqloCPNrWAa4BlrTXKuA+6IYHsBa4ErgCWHsgQFqbT/fsd/CxJEkn2FHDoKr+Edh3UHkFsKEtbwCu66lvrK5twDlJLgCuBrZW1b6qeg3YCixv286uqm1VVcDGnr4kSQMy04+jGKuqV9ryq8BYW14I7Oppt7vVjlTfPU19WklW0T3jYGxsjE6nM6PBT53+TjoX33FI/ddrTp1Rf9N5+atfnbZ+xnvfC8Dq+atn7Vj9WjBvwVCOC8z47+p4TU1NDe3Yw+S8R8tszPu4P5uoqipJHW8/fR5rHbAOYHx8vCYmJmbUT+fBu5h4fu0h9UH8PoMDn1m0ZsOaE36sg62ev5r7pu4b+HEBdvz5jqEct9PpMNN/J3OZ8x4tszHvmT5N9PN2iYf2dW+r7wEu7Gm3qNWOVF80TV2SNEAzDYPNwIEnglYCD/fUb2pPFS0F3miXk7YAy5Kc224cLwO2tG1vJlnaniK6qacvSdKAHPUyUZIHgQng/CS76T4V9CVgU5KbgZeB61vzR4BrgUngV8CnAKpqX5IvAE+2dp+vqgM3pT9D94mlM4HvtpckaYCOGgZVdeNhNl01TdsCbjlMP+uB9dPUtwOXHm0ckqQTx3cgS5IMA0mSYSBJwjCQJGEYSJIwDCRJzMLHUejY7Hz3ewDYdFD9+tv9q5A0PCP5HejX+04dyOcQSdJc4WUiSdJonhlo8C7bcNlQjnvvH947lONKc41nBpIkw0CSZBhIkjAMJEl4A/mksem/7J+27vsPJA2CZwaSJMNAkmQYSJIwDCRJGAaSJAwDSRKGgSQJ32dw0vP9B5IGwTMDSZJnBnpre+4Xz7Fmw5qBH3fHyh0DP6Z0PDwzkCSdPGcGSZYDdwPzgK9V1ZeGPKSTmvcSJM2mk+I7R5J5wFeBPwV2A08m2VxVzw13ZNLMDOs3u3l5SjN1UoQBcAUwWVUvAiR5CFgBGAbH6HBnDACP3TnAgWgoDoTQ6vmrB36vxCCa21JVwx4DST4GLK+qf9fWPwlcWVWfPajdKmBVW70YeH6Ghzwf+KcZ7juXjeK8R3HO4LxHTb/z/sOqWjDdhpPlzKAvVbUOWHe8/STZXlXjszCkOWUU5z2KcwbnPexxDNpszPtkeZpoD3Bhz/qiVpMkDcDJEgZPAkuSXJTkNOAGYPOQxyRJI+OkuExUVfuTfBbYQvfR0vVV9ewJPORxX2qao0Zx3qM4Z3Deo+b4L5+fDDeQJUnDdbJcJpIkDZFhIEkarTBIsjzJ80kmk9w27PEMSpL1SfYm+cmwxzIoSS5M8liS55I8m+TWYY9pEJKckeSJJD9u875j2GMalCTzkvwoyXeGPZZBSvJSkh1Jnk6yfcb9jMo9g/aRF/+Lno+8AG4chY+8SPInwBSwsaouHfZ4BiHJBcAFVfXDJG8HngKue6v/fScJcFZVTSU5FfgBcGtVbRvy0E64JP8eGAfOrqqPDns8g5LkJWC8qo7rzXajdGbw/z/yoqp+Cxz4yIu3vKr6R2DfsMcxSFX1SlX9sC3/M7ATWDjcUZ141TXVVk9tr7f8T3xJFgEfAb427LHMVaMUBguBXT3ruxmBbw6CJIuBDwCPD3koA9EulzwN7AW2VtUozPsu4C+B/zvkcQxDAf+Q5Kn2kT0zMkphoBGUZD7wLeAvqurNYY9nEKrqd1X1frrv5L8iyVv60mCSjwJ7q+qpYY9lSP64qi4HrgFuaZeFj9kohYEfeTFi2jXzbwEPVNXfD3s8g1ZVrwOPAcuHPJQT7UPAn7Vr5w8BH07yd8Md0uBU1Z72dS/wbbqXxI/ZKIWBH3kxQtqN1PuBnVX118Mez6AkWZDknLZ8Jt0HJn461EGdYFV1e1UtqqrFdP9ff7+q/s2QhzUQSc5qD0iQ5CxgGTCjpwZHJgyqaj9w4CMvdgKbTvBHXpw0kjwI/E/g4iS7k9w87DENwIeAT9L9KfHp9rp22IMagAuAx5I8Q/cHoK1VNVKPWo6YMeAHSX4MPAH8j6r63kw6GplHSyVJhzcyZwaSpMMzDCRJhoEkyTCQJGEYSJIwDCRJGAaSJOD/AVAg0kAXNGFFAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] @@ -1437,52 +1465,76 @@ " \n", " \n", " GEOID10_TRACT\n", + " Percent of tract that is HOLC Grade C\n", + " Percent of tract that is HOLC Grade C or HOLC Grade D\n", + " Tract is more than 50% Grade C or D\n", " Percent of tract that is HOLC Grade D\n", " Tract is >20% HOLC Grade D\n", " Tract is >50% HOLC Grade D\n", " Tract is >75% HOLC Grade D\n", + " Redlined share: tract had redlining and was more than 50% Grade C or D\n", " \n", " \n", " \n", " \n", " 0\n", " 01073000100\n", + " 0.26\n", + " 0.68\n", + " True\n", " 0.42\n", " True\n", " False\n", " False\n", + " True\n", " \n", " \n", " 1\n", " 01073000300\n", + " 0.01\n", + " 0.94\n", + " True\n", " 0.93\n", " True\n", " True\n", " True\n", + " True\n", " \n", " \n", " 2\n", " 01073000400\n", + " 0.10\n", + " 0.47\n", + " False\n", " 0.36\n", " True\n", " False\n", " False\n", + " False\n", " \n", " \n", " 3\n", " 01073000500\n", + " 0.00\n", + " 0.65\n", + " True\n", " 0.65\n", " True\n", " True\n", " False\n", + " True\n", " \n", " \n", " 4\n", " 01073000700\n", + " 0.00\n", + " 0.41\n", + " False\n", " 0.41\n", " True\n", " False\n", " False\n", + " False\n", " \n", " \n", " ...\n", @@ -1491,93 +1543,156 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 7273\n", + " 13515\n", " 55139001100\n", + " 0.00\n", + " 0.29\n", + " False\n", " 0.29\n", " True\n", " False\n", " False\n", + " False\n", " \n", " \n", - " 7274\n", + " 13516\n", " 55139001200\n", + " 0.00\n", + " 0.42\n", + " False\n", " 0.42\n", " True\n", " False\n", " False\n", + " False\n", " \n", " \n", - " 7275\n", + " 13517\n", " 55139001300\n", + " 0.12\n", + " 0.27\n", + " False\n", " 0.16\n", " False\n", " False\n", " False\n", + " False\n", " \n", " \n", - " 7276\n", + " 13518\n", " 55139001400\n", + " 0.19\n", + " 0.23\n", + " False\n", " 0.04\n", " False\n", " False\n", " False\n", + " False\n", " \n", " \n", - " 7277\n", + " 13519\n", " 55139001500\n", + " 0.12\n", + " 0.22\n", + " False\n", " 0.10\n", " False\n", " False\n", " False\n", + " False\n", " \n", " \n", "\n", - "

7278 rows Ɨ 5 columns

\n", + "

13520 rows Ɨ 9 columns

\n", "" ], "text/plain": [ - " GEOID10_TRACT Percent of tract that is HOLC Grade D \\\n", - "0 01073000100 0.42 \n", - "1 01073000300 0.93 \n", - "2 01073000400 0.36 \n", - "3 01073000500 0.65 \n", - "4 01073000700 0.41 \n", - "... ... ... \n", - "7273 55139001100 0.29 \n", - "7274 55139001200 0.42 \n", - "7275 55139001300 0.16 \n", - "7276 55139001400 0.04 \n", - "7277 55139001500 0.10 \n", + " GEOID10_TRACT Percent of tract that is HOLC Grade C \\\n", + "0 01073000100 0.26 \n", + "1 01073000300 0.01 \n", + "2 01073000400 0.10 \n", + "3 01073000500 0.00 \n", + "4 01073000700 0.00 \n", + "... ... ... \n", + "13515 55139001100 0.00 \n", + "13516 55139001200 0.00 \n", + "13517 55139001300 0.12 \n", + "13518 55139001400 0.19 \n", + "13519 55139001500 0.12 \n", + "\n", + " Percent of tract that is HOLC Grade C or HOLC Grade D \\\n", + "0 0.68 \n", + "1 0.94 \n", + "2 0.47 \n", + "3 0.65 \n", + "4 0.41 \n", + "... ... \n", + "13515 0.29 \n", + "13516 0.42 \n", + "13517 0.27 \n", + "13518 0.23 \n", + "13519 0.22 \n", + "\n", + " Tract is more than 50% Grade C or D \\\n", + "0 True \n", + "1 True \n", + "2 False \n", + "3 True \n", + "4 False \n", + "... ... \n", + "13515 False \n", + "13516 False \n", + "13517 False \n", + "13518 False \n", + "13519 False \n", "\n", - " Tract is >20% HOLC Grade D Tract is >50% HOLC Grade D \\\n", - "0 True False \n", - "1 True True \n", - "2 True False \n", - "3 True True \n", - "4 True False \n", - "... ... ... \n", - "7273 True False \n", - "7274 True False \n", - "7275 False False \n", - "7276 False False \n", - "7277 False False \n", + " Percent of tract that is HOLC Grade D Tract is >20% HOLC Grade D \\\n", + "0 0.42 True \n", + "1 0.93 True \n", + "2 0.36 True \n", + "3 0.65 True \n", + "4 0.41 True \n", + "... ... ... \n", + "13515 0.29 True \n", + "13516 0.42 True \n", + "13517 0.16 False \n", + "13518 0.04 False \n", + "13519 0.10 False \n", "\n", - " Tract is >75% HOLC Grade D \n", - "0 False \n", - "1 True \n", - "2 False \n", - "3 False \n", - "4 False \n", - "... ... \n", - "7273 False \n", - "7274 False \n", - "7275 False \n", - "7276 False \n", - "7277 False \n", + " Tract is >50% HOLC Grade D Tract is >75% HOLC Grade D \\\n", + "0 False False \n", + "1 True True \n", + "2 False False \n", + "3 True False \n", + "4 False False \n", + "... ... ... \n", + "13515 False False \n", + "13516 False False \n", + "13517 False False \n", + "13518 False False \n", + "13519 False False \n", "\n", - "[7278 rows x 5 columns]" + " Redlined share: tract had redlining and was more than 50% Grade C or D \n", + "0 True \n", + "1 True \n", + "2 False \n", + "3 True \n", + "4 False \n", + "... ... \n", + "13515 False \n", + "13516 False \n", + "13517 False \n", + "13518 False \n", + "13519 False \n", + "\n", + "[13520 rows x 9 columns]" ] }, "execution_count": 10, @@ -1629,7 +1744,7 @@ " \n", " \n", " GEOID10_TRACT\n", - " SVI - Socioeconomic Index (percentile)\n", + " SVI - Social Vulnerability Index (percentile)\n", " SVI - Household Composition Index (percentile)\n", " SVI- Minority Status/Language Index (percentile)\n", " SVI- Housing Type/Transportation Index (percentile)\n", @@ -1693,12 +1808,12 @@ "" ], "text/plain": [ - " GEOID10_TRACT SVI - Socioeconomic Index (percentile) \\\n", - "0 01015981901 NaN \n", - "1 01015981902 NaN \n", - "2 01015981903 NaN \n", - "3 01097003605 NaN \n", - "4 01097990000 NaN \n", + " GEOID10_TRACT SVI - Social Vulnerability Index (percentile) \\\n", + "0 01015981901 NaN \n", + "1 01015981902 NaN \n", + "2 01015981903 NaN \n", + "3 01097003605 NaN \n", + "4 01097990000 NaN \n", "\n", " SVI - Household Composition Index (percentile) \\\n", "0 NaN \n", @@ -2568,18 +2683,18 @@ " \n", " \n", " GEOID10_TRACT\n", - " Persistent Poverty Census Tract\n", + " Does the tract have at least 35 acres in it?\n", + " Contains agricultural value\n", + " Names of Tribal areas within Census tract\n", " Housing burden (percent)\n", + " Share of homes with no kitchen or indoor plumbing (percent)\n", " Total population\n", " Median household income (% of state median household income)\n", " Current asthma among adults aged greater than or equal to 18 years\n", " Coronary heart disease among adults aged greater than or equal to 18 years\n", - " Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years\n", - " Current lack of health insurance among adults aged 18-64 years\n", - " Diagnosed diabetes among adults aged greater than or equal to 18 years\n", " ...\n", " Michigan EJSCREEN Priority Community\n", - " SVI - Socioeconomic Index (percentile)\n", + " SVI - Social Vulnerability Index (percentile)\n", " SVI - Household Composition Index (percentile)\n", " SVI- Minority Status/Language Index (percentile)\n", " SVI- Housing Type/Transportation Index (percentile)\n", @@ -2595,14 +2710,14 @@ " 0\n", " 01073001100\n", " True\n", + " True\n", + " NaN\n", " 0.28\n", - " 4897.00\n", + " 0.00\n", + " 4781.00\n", " 0.73\n", " 11.20\n", " 7.20\n", - " 6.70\n", - " 16.60\n", - " 19.30\n", " ...\n", " NaN\n", " 0.62\n", @@ -2619,14 +2734,14 @@ " 1\n", " 01073001400\n", " True\n", + " True\n", + " NaN\n", " 0.18\n", - " 1906.00\n", + " 0.00\n", + " 1946.00\n", " 0.71\n", " 11.10\n", " 9.10\n", - " 7.30\n", - " 21.40\n", - " 22.40\n", " ...\n", " NaN\n", " 0.80\n", @@ -2642,15 +2757,15 @@ " \n", " 2\n", " 01073002000\n", - " False\n", + " True\n", + " True\n", + " NaN\n", " 0.44\n", - " 4215.00\n", + " 0.01\n", + " 4080.00\n", " 0.54\n", " 13.50\n", " 9.50\n", - " 6.10\n", - " 25.40\n", - " 22.80\n", " ...\n", " NaN\n", " 0.95\n", @@ -2666,15 +2781,15 @@ " \n", " 3\n", " 01073003802\n", - " False\n", + " True\n", + " True\n", + " NaN\n", " 0.41\n", - " 5149.00\n", + " 0.04\n", + " 5291.00\n", " 0.77\n", " 12.00\n", " 6.60\n", - " 5.60\n", - " 20.90\n", - " 18.60\n", " ...\n", " NaN\n", " 0.85\n", @@ -2691,14 +2806,14 @@ " 4\n", " 01073004000\n", " True\n", + " False\n", + " NaN\n", " 0.47\n", - " 2621.00\n", + " 0.01\n", + " 2533.00\n", " 0.37\n", " 13.10\n", " 10.00\n", - " 6.30\n", - " 24.50\n", - " 25.00\n", " ...\n", " NaN\n", " 0.96\n", @@ -2713,23 +2828,44 @@ " \n", " \n", "\n", - "

5 rows Ɨ 661 columns

\n", + "

5 rows Ɨ 367 columns

\n", "" ], "text/plain": [ - " GEOID10_TRACT Persistent Poverty Census Tract Housing burden (percent) \\\n", - "0 01073001100 True 0.28 \n", - "1 01073001400 True 0.18 \n", - "2 01073002000 False 0.44 \n", - "3 01073003802 False 0.41 \n", - "4 01073004000 True 0.47 \n", + " GEOID10_TRACT Does the tract have at least 35 acres in it? \\\n", + "0 01073001100 True \n", + "1 01073001400 True \n", + "2 01073002000 True \n", + "3 01073003802 True \n", + "4 01073004000 True \n", + "\n", + " Contains agricultural value Names of Tribal areas within Census tract \\\n", + "0 True NaN \n", + "1 True NaN \n", + "2 True NaN \n", + "3 True NaN \n", + "4 False NaN \n", + "\n", + " Housing burden (percent) \\\n", + "0 0.28 \n", + "1 0.18 \n", + "2 0.44 \n", + "3 0.41 \n", + "4 0.47 \n", + "\n", + " Share of homes with no kitchen or indoor plumbing (percent) \\\n", + "0 0.00 \n", + "1 0.00 \n", + "2 0.01 \n", + "3 0.04 \n", + "4 0.01 \n", "\n", " Total population \\\n", - "0 4897.00 \n", - "1 1906.00 \n", - "2 4215.00 \n", - "3 5149.00 \n", - "4 2621.00 \n", + "0 4781.00 \n", + "1 1946.00 \n", + "2 4080.00 \n", + "3 5291.00 \n", + "4 2533.00 \n", "\n", " Median household income (% of state median household income) \\\n", "0 0.73 \n", @@ -2752,27 +2888,6 @@ "3 6.60 \n", "4 10.00 \n", "\n", - " Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years \\\n", - "0 6.70 \n", - "1 7.30 \n", - "2 6.10 \n", - "3 5.60 \n", - "4 6.30 \n", - "\n", - " Current lack of health insurance among adults aged 18-64 years \\\n", - "0 16.60 \n", - "1 21.40 \n", - "2 25.40 \n", - "3 20.90 \n", - "4 24.50 \n", - "\n", - " Diagnosed diabetes among adults aged greater than or equal to 18 years \\\n", - "0 19.30 \n", - "1 22.40 \n", - "2 22.80 \n", - "3 18.60 \n", - "4 25.00 \n", - "\n", " ... Michigan EJSCREEN Priority Community \\\n", "0 ... NaN \n", "1 ... NaN \n", @@ -2780,12 +2895,12 @@ "3 ... NaN \n", "4 ... NaN \n", "\n", - " SVI - Socioeconomic Index (percentile) \\\n", - "0 0.62 \n", - "1 0.80 \n", - "2 0.95 \n", - "3 0.85 \n", - "4 0.96 \n", + " SVI - Social Vulnerability Index (percentile) \\\n", + "0 0.62 \n", + "1 0.80 \n", + "2 0.95 \n", + "3 0.85 \n", + "4 0.96 \n", "\n", " SVI - Household Composition Index (percentile) \\\n", "0 0.98 \n", @@ -2843,7 +2958,7 @@ "3 NaN \n", "4 NaN \n", "\n", - "[5 rows x 661 columns]" + "[5 rows x 367 columns]" ] }, "execution_count": 16, @@ -2987,7 +3102,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 22, "id": "980c0f66", "metadata": { "scrolled": true @@ -3003,56 +3118,26 @@ " ],\n", ")\n", "\n", - "# Define the indices used for CEJST scoring (`census_block_group_indices`) as well as comparison\n", + "# Define the indices used for CEJST scoring as well as comparison\n", "# (`census_tract_indices`).\n", - "definition_l_factors = [\n", - " field_names.L_CLIMATE,\n", - " field_names.L_ENERGY,\n", - " field_names.L_TRANSPORTATION,\n", - " field_names.L_HOUSING,\n", - " field_names.L_POLLUTION,\n", - " field_names.L_WATER,\n", - " field_names.L_HEALTH,\n", - " field_names.L_WORKFORCE,\n", - " # Also include a combined factor for all the non-workforce elements.\n", - " field_names.L_NON_WORKFORCE,\n", - "]\n", - "\n", - "definition_m_factors = [\n", - " field_names.M_CLIMATE,\n", - " field_names.M_ENERGY,\n", - " field_names.M_TRANSPORTATION,\n", - " field_names.M_HOUSING,\n", - " field_names.M_POLLUTION,\n", - " field_names.M_WATER,\n", - " field_names.M_HEALTH,\n", - " field_names.M_WORKFORCE,\n", - " # Also include a combined factor for all the non-workforce elements.\n", - " field_names.M_NON_WORKFORCE,\n", + "definition_factors = [\n", + " field_names.N_CLIMATE,\n", + " field_names.N_ENERGY,\n", + " field_names.N_TRANSPORTATION,\n", + " field_names.N_HOUSING,\n", + " field_names.N_POLLUTION,\n", + " field_names.N_WATER,\n", + " field_names.N_HEALTH,\n", + " field_names.N_WORKFORCE,\n", "]\n", "\n", "census_tract_indices = (\n", " [\n", " Index(\n", - " method_name=\"Definition M\",\n", - " priority_communities_field=field_names.SCORE_M_COMMUNITIES,\n", + " method_name=\"Definition N\",\n", + " priority_communities_field=field_names.SCORE_N_COMMUNITIES,\n", " ),\n", " ]\n", - " + [\n", - " Index(\n", - " method_name=\"Definition L\",\n", - " priority_communities_field=field_names.SCORE_L_COMMUNITIES,\n", - " ),\n", - " ]\n", - " # Insert indices for each of the factors from Definition M.\n", - " # Note: since these involve no renaming, we write them using list comprehension.\n", - " + [\n", - " Index(\n", - " method_name=factor,\n", - " priority_communities_field=factor,\n", - " )\n", - " for factor in definition_m_factors\n", - " ]\n", " # Insert indices for each of the factors from Definition L.\n", " # Note: since these involve no renaming, we write them using list comprehension.\n", " + [\n", @@ -3060,105 +3145,105 @@ " method_name=factor,\n", " priority_communities_field=factor,\n", " )\n", - " for factor in definition_l_factors\n", - " ]\n", - " + [\n", - " Index(\n", - " # Note: we're renaming Score G as NMTC Modified for clarity, since that's what Score G is under the hood.\n", - " method_name=\"NMTC Modified\",\n", - " priority_communities_field=field_names.SCORE_G_COMMUNITIES,\n", - " ),\n", - " Index(\n", - " method_name=\"NMTC\",\n", - " priority_communities_field=\"NMTC (communities)\",\n", - " ),\n", - " Index(\n", - " method_name=\"Score C\",\n", - " priority_communities_field=\"Score C (top 25th percentile)\",\n", - " ),\n", - " Index(\n", - " method_name=\"Score D (30th percentile)\",\n", - " priority_communities_field=\"Score D (top 30th percentile)\",\n", - " ),\n", - " Index(\n", - " method_name=\"Score D (25th percentile)\",\n", - " priority_communities_field=\"Score D (top 25th percentile)\",\n", - " ),\n", - " Index(\n", - " method_name=\"Score F\",\n", - " priority_communities_field=field_names.SCORE_F_COMMUNITIES,\n", - " ),\n", - " Index(\n", - " method_name=\"CalEnviroScreen 4.0\",\n", - " priority_communities_field=\"calenviroscreen_priority_community\",\n", - " ),\n", - " Index(\n", - " method_name=\"Mapping for EJ\",\n", - " priority_communities_field=field_names.MAPPING_FOR_EJ_PRIORITY_COMMUNITY_FIELD,\n", - " ),\n", - " Index(\n", - " method_name=\"EPA RSEI Aggregate Microdata\",\n", - " priority_communities_field=field_names.EPA_RSEI_SCORE_THRESHOLD_FIELD,\n", - " ),\n", - " Index(\n", - " method_name=\"Persistent Poverty\",\n", - " priority_communities_field=PERSISTENT_POVERTY_TRACT_LEVEL_FIELD,\n", - " ),\n", - " Index(\n", - " method_name=\"Maryland EJSCREEN\",\n", - " priority_communities_field=field_names.MARYLAND_EJSCREEN_BURDENED_THRESHOLD_FIELD,\n", - " ),\n", - " Index(\n", - " method_name=field_names.ENERGY_RELATED_COMMUNITIES_DEFINITION_ALTERNATIVE,\n", - " priority_communities_field=field_names.ENERGY_RELATED_COMMUNITIES_DEFINITION_ALTERNATIVE,\n", - " ),\n", - " Index(\n", - " method_name=\"CDC SVI Index\",\n", - " priority_communities_field=field_names.CDC_SVI_INDEX_THEMES_PRIORITY_COMMUNITY,\n", - " ),\n", - " Index(\n", - " method_name=\"Michigan EJSCREEN\",\n", - " priority_communities_field=field_names.MICHIGAN_EJSCREEN_PRIORITY_COMMUNITY_FIELD,\n", - " ),\n", + " for factor in definition_factors\n", " ]\n", + " # + [\n", + " # Index(\n", + " # # Note: we're renaming Score G as NMTC Modified for clarity, since that's what Score G is under the hood.\n", + " # method_name=\"NMTC Modified\",\n", + " # priority_communities_field=field_names.SCORE_G_COMMUNITIES,\n", + " # ),\n", + " # Index(\n", + " # method_name=\"NMTC\",\n", + " # priority_communities_field=\"NMTC (communities)\",\n", + " # ),\n", + " # Index(\n", + " # method_name=\"Score C\",\n", + " # priority_communities_field=\"Score C (top 25th percentile)\",\n", + " # ),\n", + " # Index(\n", + " # method_name=\"Score D (30th percentile)\",\n", + " # priority_communities_field=\"Score D (top 30th percentile)\",\n", + " # ),\n", + " # Index(\n", + " # method_name=\"Score D (25th percentile)\",\n", + " # priority_communities_field=\"Score D (top 25th percentile)\",\n", + " # ),\n", + " # Index(\n", + " # method_name=\"Score F\",\n", + " # priority_communities_field=field_names.SCORE_F_COMMUNITIES,\n", + " # ),\n", + " # Index(\n", + " # method_name=\"CalEnviroScreen 4.0\",\n", + " # priority_communities_field=\"calenviroscreen_priority_community\",\n", + " # ),\n", + " # Index(\n", + " # method_name=\"Mapping for EJ\",\n", + " # priority_communities_field=field_names.MAPPING_FOR_EJ_PRIORITY_COMMUNITY_FIELD,\n", + " # ),\n", + " # Index(\n", + " # method_name=\"EPA RSEI Aggregate Microdata\",\n", + " # priority_communities_field=field_names.EPA_RSEI_SCORE_THRESHOLD_FIELD,\n", + " # ),\n", + " # Index(\n", + " # method_name=\"Persistent Poverty\",\n", + " # priority_communities_field=PERSISTENT_POVERTY_TRACT_LEVEL_FIELD,\n", + " # ),\n", + " # Index(\n", + " # method_name=\"Maryland EJSCREEN\",\n", + " # priority_communities_field=field_names.MARYLAND_EJSCREEN_BURDENED_THRESHOLD_FIELD,\n", + " # ),\n", + " # Index(\n", + " # method_name=field_names.ENERGY_RELATED_COMMUNITIES_DEFINITION_ALTERNATIVE,\n", + " # priority_communities_field=field_names.ENERGY_RELATED_COMMUNITIES_DEFINITION_ALTERNATIVE,\n", + " # ),\n", + " # Index(\n", + " # method_name=\"CDC SVI Index\",\n", + " # priority_communities_field=field_names.CDC_SVI_INDEX_THEMES_PRIORITY_COMMUNITY,\n", + " # ),\n", + " # Index(\n", + " # method_name=\"Michigan EJSCREEN\",\n", + " # priority_communities_field=field_names.MICHIGAN_EJSCREEN_PRIORITY_COMMUNITY_FIELD,\n", + " # ),\n", + " # ]\n", " # Insert indices for each of the HOLC factors.\n", " # Note: since these involve no renaming, we write them using list comprehension.\n", - " + [\n", - " Index(\n", - " method_name=factor,\n", - " priority_communities_field=factor,\n", - " )\n", - " for factor in HOLC_FACTORS\n", - " ]\n", + " # + [\n", + " # Index(\n", + " # method_name=factor,\n", + " # priority_communities_field=factor,\n", + " # )\n", + " # for factor in HOLC_FACTORS\n", + " # ]\n", ")\n", "\n", "\n", - "ejscreen_areas_of_concern_census_block_group_indices = [\n", - " Index(\n", - " method_name=\"EJSCREEN Areas of Concern, National, 80th percentile\",\n", - " priority_communities_field=field_names.EJSCREEN_AREAS_OF_CONCERN_NATIONAL_80TH_PERCENTILE_COMMUNITIES_FIELD,\n", - " ),\n", - " Index(\n", - " method_name=\"EJSCREEN Areas of Concern, National, 90th percentile\",\n", - " priority_communities_field=field_names.EJSCREEN_AREAS_OF_CONCERN_NATIONAL_90TH_PERCENTILE_COMMUNITIES_FIELD,\n", - " ),\n", - " Index(\n", - " method_name=\"EJSCREEN Areas of Concern, National, 95th percentile\",\n", - " priority_communities_field=field_names.EJSCREEN_AREAS_OF_CONCERN_NATIONAL_95TH_PERCENTILE_COMMUNITIES_FIELD,\n", - " ),\n", - "]\n", - "\n", - "# Before including EJSCREEN AoC indicators are included, check whether or not the EJSCREEN AoC data is available locally.\n", - "if EJSCREENAreasOfConcernETL.ejscreen_areas_of_concern_data_exists():\n", - " # Add EJSCREEN AoCs to all of the CBG indices.\n", - " # TODO: When we get AoC data at the tract level, fix this.\n", - " # Right now commenting this out to avoid merging CBG-level areas of concern on a tract-level CEJST definition.\n", - " # census_block_group_indices.extend(\n", - " # ejscreen_areas_of_concern_census_block_group_indices\n", - " # )\n", - " pass\n", - "else:\n", - " pass\n", + "# ejscreen_areas_of_concern_census_block_group_indices = [\n", + "# Index(\n", + "# method_name=\"EJSCREEN Areas of Concern, National, 80th percentile\",\n", + "# priority_communities_field=field_names.EJSCREEN_AREAS_OF_CONCERN_NATIONAL_80TH_PERCENTILE_COMMUNITIES_FIELD,\n", + "# ),\n", + "# Index(\n", + "# method_name=\"EJSCREEN Areas of Concern, National, 90th percentile\",\n", + "# priority_communities_field=field_names.EJSCREEN_AREAS_OF_CONCERN_NATIONAL_90TH_PERCENTILE_COMMUNITIES_FIELD,\n", + "# ),\n", + "# Index(\n", + "# method_name=\"EJSCREEN Areas of Concern, National, 95th percentile\",\n", + "# priority_communities_field=field_names.EJSCREEN_AREAS_OF_CONCERN_NATIONAL_95TH_PERCENTILE_COMMUNITIES_FIELD,\n", + "# ),\n", + "# ]\n", + "\n", + "# # Before including EJSCREEN AoC indicators are included, check whether or not the EJSCREEN AoC data is available locally.\n", + "# if EJSCREENAreasOfConcernETL.ejscreen_areas_of_concern_data_exists():\n", + "# # Add EJSCREEN AoCs to all of the CBG indices.\n", + "# # TODO: When we get AoC data at the tract level, fix this.\n", + "# # Right now commenting this out to avoid merging CBG-level areas of concern on a tract-level CEJST definition.\n", + "# # census_block_group_indices.extend(\n", + "# # ejscreen_areas_of_concern_census_block_group_indices\n", + "# # )\n", + "# pass\n", + "# else:\n", + "# pass\n", "\n", "# These fields will be used for statistical comparisons.\n", "comparison_fields = [\n", @@ -3175,13 +3260,12 @@ " field_names.HEALTH_INSURANCE_FIELD,\n", " field_names.PHYS_HEALTH_NOT_GOOD_FIELD,\n", " field_names.DIABETES_FIELD,\n", - " field_names.LOW_READING_FIELD + field_names.PERCENTILE_FIELD_SUFFIX,\n", "]" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 23, "id": "4b510cb1", "metadata": { "scrolled": true @@ -3191,20 +3275,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "Converting calenviroscreen_priority_community to boolean.\n", - "Converting Mapping for Environmental Justice Priority Community to boolean.\n", - "Converting At or above 75 for overall percentile for the RSEI score to boolean.\n", - "Converting Persistent Poverty, Tract Level to boolean.\n", - "Converting Maryland EJSCREEN Priority Community to boolean.\n", - "Converting Energy-related alternative definition of communities to boolean.\n", - "Converting At or above 90 for overall percentile ranking according to Social Vulnerability Indices to boolean.\n", - "Converting Michigan EJSCREEN Priority Community to boolean.\n" + "Converting Definition N (communities) to boolean.\n", + "Converting Climate Factor (Definition N) to boolean.\n", + "Converting Energy Factor (Definition N) to boolean.\n", + "Converting Transportation Factor (Definition N) to boolean.\n", + "Converting Housing Factor (Definition N) to boolean.\n", + "Converting Pollution Factor (Definition N) to boolean.\n", + "Converting Water Factor (Definition N) to boolean.\n", + "Converting Health Factor (Definition N) to boolean.\n", + "Converting Workforce Factor (Definition N) to boolean.\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "98501c61ec76447fa7b2e30d230c5886", + "model_id": "8577639f0ebe469b8df1c3d9848f4a32", "version_major": 2, "version_minor": 0 }, @@ -3218,7 +3303,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b6c45a7c99a3499a9806a5395f6bfe8c", + "model_id": "f03770010bf44057a715d9dc17b41f0c", "version_major": 2, "version_minor": 0 }, @@ -3232,7 +3317,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "cb93489fbec44e30af9013f63a650c02", + "model_id": "e64f4b0edc3a41b29eae785f4d5255f9", "version_major": 2, "version_minor": 0 }, @@ -3246,7 +3331,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "54640ab6c9974bddaf5f7d3a06e5624c", + "model_id": "9d6e0ea85ea44410a745f578c3966ff1", "version_major": 2, "version_minor": 0 }, @@ -3260,7 +3345,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "2e85423d07404cf98daf2ef0c024b5c1", + "model_id": "8e6a363d9cd84bbbb7416af94b6cab52", "version_major": 2, "version_minor": 0 }, @@ -3539,7 +3624,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 24, "id": "2bcbcabf", "metadata": {}, "outputs": [ @@ -3547,43 +3632,15 @@ "name": "stdout", "output_type": "stream", "text": [ - "Basic stats for Definition M\n", - "Basic stats for Definition L\n", - "Basic stats for Climate Factor (Definition M)\n", - "Basic stats for Energy Factor (Definition M)\n", - "Basic stats for Transportation Factor (Definition M)\n", - "Basic stats for Housing Factor (Definition M)\n", - "Basic stats for Pollution Factor (Definition M)\n", - "Basic stats for Water Factor (Definition M)\n", - "Basic stats for Health Factor (Definition M)\n", - "Basic stats for Workforce Factor (Definition M)\n", - "Basic stats for Any Non-Workforce Factor (Definition M)\n", - "Basic stats for Climate Factor (Definition L)\n", - "Basic stats for Energy Factor (Definition L)\n", - "Basic stats for Transportation Factor (Definition L)\n", - "Basic stats for Housing Factor (Definition L)\n", - "Basic stats for Pollution Factor (Definition L)\n", - "Basic stats for Water Factor (Definition L)\n", - "Basic stats for Health Factor (Definition L)\n", - "Basic stats for Workforce Factor (Definition L)\n", - "Basic stats for Any Non-Workforce Factor (Definition L)\n", - "Basic stats for NMTC Modified\n", - "Basic stats for NMTC\n", - "Basic stats for Score C\n", - "Basic stats for Score D (30th percentile)\n", - "Basic stats for Score D (25th percentile)\n", - "Basic stats for Score F\n", - "Basic stats for CalEnviroScreen 4.0\n", - "Basic stats for Mapping for EJ\n", - "Basic stats for EPA RSEI Aggregate Microdata\n", - "Basic stats for Persistent Poverty\n", - "Basic stats for Maryland EJSCREEN\n", - "Basic stats for Energy-related alternative definition of communities\n", - "Basic stats for CDC SVI Index\n", - "Basic stats for Michigan EJSCREEN\n", - "Basic stats for Tract is >20% HOLC Grade D\n", - "Basic stats for Tract is >50% HOLC Grade D\n", - "Basic stats for Tract is >75% HOLC Grade D\n" + "Basic stats for Definition N\n", + "Basic stats for Climate Factor (Definition N)\n", + "Basic stats for Energy Factor (Definition N)\n", + "Basic stats for Transportation Factor (Definition N)\n", + "Basic stats for Housing Factor (Definition N)\n", + "Basic stats for Pollution Factor (Definition N)\n", + "Basic stats for Water Factor (Definition N)\n", + "Basic stats for Health Factor (Definition N)\n", + "Basic stats for Workforce Factor (Definition N)\n" ] } ], @@ -3675,7 +3732,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 25, "id": "d1eec560", "metadata": { "scrolled": true @@ -3685,672 +3742,42 @@ "name": "stdout", "output_type": "stream", "text": [ - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Definition L', priority_communities_field='Definition L (communities)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Definition M', priority_communities_field='Definition M (communities)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Definition L', priority_communities_field='Definition L (communities)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Climate Factor (Definition M)', priority_communities_field='Climate Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Energy Factor (Definition M)', priority_communities_field='Energy Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Transportation Factor (Definition M)', priority_communities_field='Transportation Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Housing Factor (Definition M)', priority_communities_field='Housing Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Pollution Factor (Definition M)', priority_communities_field='Pollution Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Water Factor (Definition M)', priority_communities_field='Water Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Health Factor (Definition M)', priority_communities_field='Health Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Workforce Factor (Definition M)', priority_communities_field='Workforce Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition M)', priority_communities_field='Any Non-Workforce Factor (Definition M)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Climate Factor (Definition L)', priority_communities_field='Climate Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Energy Factor (Definition L)', priority_communities_field='Energy Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Transportation Factor (Definition L)', priority_communities_field='Transportation Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Housing Factor (Definition L)', priority_communities_field='Housing Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Pollution Factor (Definition L)', priority_communities_field='Pollution Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Water Factor (Definition L)', priority_communities_field='Water Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Health Factor (Definition L)', priority_communities_field='Health Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Workforce Factor (Definition L)', priority_communities_field='Workforce Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Any Non-Workforce Factor (Definition L)', priority_communities_field='Any Non-Workforce Factor (Definition L)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='NMTC', priority_communities_field='NMTC (communities)').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='NMTC Modified', priority_communities_field='Score G (communities)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='NMTC', priority_communities_field='NMTC (communities)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Score C', priority_communities_field='Score C (top 25th percentile)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Score D (30th percentile)', priority_communities_field='Score D (top 30th percentile)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Score F', priority_communities_field='Score F (communities)').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Score D (25th percentile)', priority_communities_field='Score D (top 25th percentile)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Score F', priority_communities_field='Score F (communities)') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='CalEnviroScreen 4.0', priority_communities_field='calenviroscreen_priority_community') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Mapping for EJ', priority_communities_field='Mapping for Environmental Justice Priority Community') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score') and Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level').\n", - "Comparing Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='EPA RSEI Aggregate Microdata', priority_communities_field='At or above 75 for overall percentile for the RSEI score') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level') and Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Persistent Poverty', priority_communities_field='Persistent Poverty, Tract Level') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community') and Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities').\n", - "Comparing Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Maryland EJSCREEN', priority_communities_field='Maryland EJSCREEN Priority Community') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities') and Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices').\n", - "Comparing Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Energy-related alternative definition of communities', priority_communities_field='Energy-related alternative definition of communities') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices') and Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community').\n", - "Comparing Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='CDC SVI Index', priority_communities_field='At or above 90 for overall percentile ranking according to Social Vulnerability Indices') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community') and Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D').\n", - "Comparing Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Michigan EJSCREEN', priority_communities_field='Michigan EJSCREEN Priority Community') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D') and Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D').\n", - "Comparing Index(method_name='Tract is >20% HOLC Grade D', priority_communities_field='Tract is >20% HOLC Grade D') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n", - "Comparing Index(method_name='Tract is >50% HOLC Grade D', priority_communities_field='Tract is >50% HOLC Grade D') and Index(method_name='Tract is >75% HOLC Grade D', priority_communities_field='Tract is >75% HOLC Grade D').\n" + "Comparing Index(method_name='Definition N', priority_communities_field='Definition N (communities)') and Index(method_name='Climate Factor (Definition N)', priority_communities_field='Climate Factor (Definition N)').\n", + "Comparing Index(method_name='Definition N', priority_communities_field='Definition N (communities)') and Index(method_name='Energy Factor (Definition N)', priority_communities_field='Energy Factor (Definition N)').\n", + "Comparing Index(method_name='Definition N', priority_communities_field='Definition N (communities)') and Index(method_name='Transportation Factor (Definition N)', priority_communities_field='Transportation Factor (Definition N)').\n", + "Comparing Index(method_name='Definition N', priority_communities_field='Definition N (communities)') and Index(method_name='Housing Factor (Definition N)', priority_communities_field='Housing Factor (Definition N)').\n", + "Comparing Index(method_name='Definition N', priority_communities_field='Definition N (communities)') and Index(method_name='Pollution Factor (Definition N)', priority_communities_field='Pollution Factor (Definition N)').\n", + "Comparing Index(method_name='Definition N', priority_communities_field='Definition N (communities)') and Index(method_name='Water Factor (Definition N)', priority_communities_field='Water Factor (Definition N)').\n", + "Comparing Index(method_name='Definition N', priority_communities_field='Definition N (communities)') and Index(method_name='Health Factor (Definition N)', priority_communities_field='Health Factor (Definition N)').\n", + "Comparing Index(method_name='Definition N', priority_communities_field='Definition N (communities)') and Index(method_name='Workforce Factor (Definition N)', priority_communities_field='Workforce Factor (Definition N)').\n", + "Comparing Index(method_name='Climate Factor (Definition N)', priority_communities_field='Climate Factor (Definition N)') and Index(method_name='Energy Factor (Definition N)', priority_communities_field='Energy Factor (Definition N)').\n", + "Comparing Index(method_name='Climate Factor (Definition N)', priority_communities_field='Climate Factor (Definition N)') and Index(method_name='Transportation Factor (Definition N)', priority_communities_field='Transportation Factor (Definition N)').\n", + "Comparing Index(method_name='Climate Factor (Definition N)', priority_communities_field='Climate Factor (Definition N)') and Index(method_name='Housing Factor (Definition N)', priority_communities_field='Housing Factor (Definition N)').\n", + "Comparing Index(method_name='Climate Factor (Definition N)', priority_communities_field='Climate Factor (Definition N)') and Index(method_name='Pollution Factor (Definition N)', priority_communities_field='Pollution Factor (Definition N)').\n", + "Comparing Index(method_name='Climate Factor (Definition N)', priority_communities_field='Climate Factor (Definition N)') and Index(method_name='Water Factor (Definition N)', priority_communities_field='Water Factor (Definition N)').\n", + "Comparing Index(method_name='Climate Factor (Definition N)', priority_communities_field='Climate Factor (Definition N)') and Index(method_name='Health Factor (Definition N)', priority_communities_field='Health Factor (Definition N)').\n", + "Comparing Index(method_name='Climate Factor (Definition N)', priority_communities_field='Climate Factor (Definition N)') and Index(method_name='Workforce Factor (Definition N)', priority_communities_field='Workforce Factor (Definition N)').\n", + "Comparing Index(method_name='Energy Factor (Definition N)', priority_communities_field='Energy Factor (Definition N)') and Index(method_name='Transportation Factor (Definition N)', priority_communities_field='Transportation Factor (Definition N)').\n", + "Comparing Index(method_name='Energy Factor (Definition N)', priority_communities_field='Energy Factor (Definition N)') and Index(method_name='Housing Factor (Definition N)', priority_communities_field='Housing Factor (Definition N)').\n", + "Comparing Index(method_name='Energy Factor (Definition N)', priority_communities_field='Energy Factor (Definition N)') and Index(method_name='Pollution Factor (Definition N)', priority_communities_field='Pollution Factor (Definition N)').\n", + "Comparing Index(method_name='Energy Factor (Definition N)', priority_communities_field='Energy Factor (Definition N)') and Index(method_name='Water Factor (Definition N)', priority_communities_field='Water Factor (Definition N)').\n", + "Comparing Index(method_name='Energy Factor (Definition N)', priority_communities_field='Energy Factor (Definition N)') and Index(method_name='Health Factor (Definition N)', priority_communities_field='Health Factor (Definition N)').\n", + "Comparing Index(method_name='Energy Factor (Definition N)', priority_communities_field='Energy Factor (Definition N)') and Index(method_name='Workforce Factor (Definition N)', priority_communities_field='Workforce Factor (Definition N)').\n", + "Comparing Index(method_name='Transportation Factor (Definition N)', priority_communities_field='Transportation Factor (Definition N)') and Index(method_name='Housing Factor (Definition N)', priority_communities_field='Housing Factor (Definition N)').\n", + "Comparing Index(method_name='Transportation Factor (Definition N)', priority_communities_field='Transportation Factor (Definition N)') and Index(method_name='Pollution Factor (Definition N)', priority_communities_field='Pollution Factor (Definition N)').\n", + "Comparing Index(method_name='Transportation Factor (Definition N)', priority_communities_field='Transportation Factor (Definition N)') and Index(method_name='Water Factor (Definition N)', priority_communities_field='Water Factor (Definition N)').\n", + "Comparing Index(method_name='Transportation Factor (Definition N)', priority_communities_field='Transportation Factor (Definition N)') and Index(method_name='Health Factor (Definition N)', priority_communities_field='Health Factor (Definition N)').\n", + "Comparing Index(method_name='Transportation Factor (Definition N)', priority_communities_field='Transportation Factor (Definition N)') and Index(method_name='Workforce Factor (Definition N)', priority_communities_field='Workforce Factor (Definition N)').\n", + "Comparing Index(method_name='Housing Factor (Definition N)', priority_communities_field='Housing Factor (Definition N)') and Index(method_name='Pollution Factor (Definition N)', priority_communities_field='Pollution Factor (Definition N)').\n", + "Comparing Index(method_name='Housing Factor (Definition N)', priority_communities_field='Housing Factor (Definition N)') and Index(method_name='Water Factor (Definition N)', priority_communities_field='Water Factor (Definition N)').\n", + "Comparing Index(method_name='Housing Factor (Definition N)', priority_communities_field='Housing Factor (Definition N)') and Index(method_name='Health Factor (Definition N)', priority_communities_field='Health Factor (Definition N)').\n", + "Comparing Index(method_name='Housing Factor (Definition N)', priority_communities_field='Housing Factor (Definition N)') and Index(method_name='Workforce Factor (Definition N)', priority_communities_field='Workforce Factor (Definition N)').\n", + "Comparing Index(method_name='Pollution Factor (Definition N)', priority_communities_field='Pollution Factor (Definition N)') and Index(method_name='Water Factor (Definition N)', priority_communities_field='Water Factor (Definition N)').\n", + "Comparing Index(method_name='Pollution Factor (Definition N)', priority_communities_field='Pollution Factor (Definition N)') and Index(method_name='Health Factor (Definition N)', priority_communities_field='Health Factor (Definition N)').\n", + "Comparing Index(method_name='Pollution Factor (Definition N)', priority_communities_field='Pollution Factor (Definition N)') and Index(method_name='Workforce Factor (Definition N)', priority_communities_field='Workforce Factor (Definition N)').\n", + "Comparing Index(method_name='Water Factor (Definition N)', priority_communities_field='Water Factor (Definition N)') and Index(method_name='Health Factor (Definition N)', priority_communities_field='Health Factor (Definition N)').\n", + "Comparing Index(method_name='Water Factor (Definition N)', priority_communities_field='Water Factor (Definition N)') and Index(method_name='Workforce Factor (Definition N)', priority_communities_field='Workforce Factor (Definition N)').\n", + "Comparing Index(method_name='Health Factor (Definition N)', priority_communities_field='Health Factor (Definition N)') and Index(method_name='Workforce Factor (Definition N)', priority_communities_field='Workforce Factor (Definition N)').\n" ] } ], @@ -4540,33 +3967,19 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 26, "id": "48005fad", "metadata": { "scrolled": true }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/z6/9czv8cpx2hvcycd6slvfp4ph0000gq/T/ipykernel_35872/2594933895.py:125: RuntimeWarning: invalid value encountered in long_scalars\n", - " f\"{true_true_census_tracts} ({true_true_census_tracts / total_census_tracts:.0%}) \"\n", - "/var/folders/z6/9czv8cpx2hvcycd6slvfp4ph0000gq/T/ipykernel_35872/2594933895.py:128: RuntimeWarning: invalid value encountered in long_scalars\n", - " f\"{true_false_census_tracts} ({true_false_census_tracts / total_census_tracts:.0%}) \"\n", - "/var/folders/z6/9czv8cpx2hvcycd6slvfp4ph0000gq/T/ipykernel_35872/2594933895.py:131: RuntimeWarning: invalid value encountered in long_scalars\n", - " f\"{false_true_census_tracts} ({false_true_census_tracts / total_census_tracts:.0%}) \"\n", - "/var/folders/z6/9czv8cpx2hvcycd6slvfp4ph0000gq/T/ipykernel_35872/2594933895.py:134: RuntimeWarning: invalid value encountered in long_scalars\n", - " f\"{false_false_census_tracts} ({false_false_census_tracts / total_census_tracts:.0%}) \"\n" - ] - }, { "data": { "text/plain": [ - "PosixPath('/Users/emmausds/Desktop/justice40-tool/data/data-pipeline/data_pipeline/data/comparison_outputs/20220217-115053/Comparison report - All census tract indices.docx')" + "PosixPath('/Users/emmausds/Desktop/justice40-tool/data/data-pipeline/data_pipeline/data/comparison_outputs/20221003-131149/Comparison report - All census tract indices.docx')" ] }, - "execution_count": 22, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -4742,7 +4155,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 27, "id": "7d095ebd", "metadata": {}, "outputs": [ @@ -4752,7 +4165,7 @@ "0" ] }, - "execution_count": 23, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } diff --git a/data/data-pipeline/data_pipeline/ipython/tribal_and_tracts_overlap.ipynb b/data/data-pipeline/data_pipeline/ipython/tribal_and_tracts_overlap.ipynb new file mode 100644 index 000000000..0560b5456 --- /dev/null +++ b/data/data-pipeline/data_pipeline/ipython/tribal_and_tracts_overlap.ipynb @@ -0,0 +1,1422 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "f0b6f7e2", + "metadata": {}, + "outputs": [], + "source": [ + "import geopandas as gpd\n", + "import pyogrio\n", + "from data_pipeline.etl.sources.census.etl import CensusETL\n", + "from data_pipeline.etl.sources.tribal.etl import TribalETL\n", + "\n", + "import time\n", + "\n", + "begin = time.time()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "1e3e65af", + "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", + "
tribalIdlandAreaNameClassificationgeometry
0LAR0001Cheyenne River LAR1MULTIPOLYGON (((-100.49935 45.47125, -100.4993...
1LAR0002Crow Creek LAR1POLYGON ((-99.42137 44.27733, -99.42138 44.273...
2LAR0003Flandreau LAR1MULTIPOLYGON (((-96.56655 44.08786, -96.57165 ...
3LAR0004Fort Berthold LAR1POLYGON ((-102.78362 47.99900, -102.78192 47.9...
4LAR0005Lake Traverse (Sisseton) LAR1MULTIPOLYGON (((-97.28946 45.76084, -97.28955 ...
...............
592{0886416F-643E-497E-89D3-E9CC0240158D}ChilkatNonePOINT (-135.88440 59.40390)
593{2029C35B-86D7-4751-A946-EA0772C81A80}ChilkootNonePOINT (-135.44500 59.23580)
594{24DF6536-95CB-4964-94DF-16E440ABCA92}CraigNonePOINT (-133.14830 55.47640)
595{ACDE097A-9BDA-4FCA-9DB7-297DA6B73F88}DouglasNonePOINT (-134.41970 58.30190)
596{5E1D1895-FF41-4B11-9EDB-0C1254A360C4}AgdaaguxNonePOINT (-162.31030 55.06170)
\n", + "

597 rows Ɨ 4 columns

\n", + "
" + ], + "text/plain": [ + " tribalId landAreaName \\\n", + "0 LAR0001 Cheyenne River LAR \n", + "1 LAR0002 Crow Creek LAR \n", + "2 LAR0003 Flandreau LAR \n", + "3 LAR0004 Fort Berthold LAR \n", + "4 LAR0005 Lake Traverse (Sisseton) LAR \n", + ".. ... ... \n", + "592 {0886416F-643E-497E-89D3-E9CC0240158D} Chilkat \n", + "593 {2029C35B-86D7-4751-A946-EA0772C81A80} Chilkoot \n", + "594 {24DF6536-95CB-4964-94DF-16E440ABCA92} Craig \n", + "595 {ACDE097A-9BDA-4FCA-9DB7-297DA6B73F88} Douglas \n", + "596 {5E1D1895-FF41-4B11-9EDB-0C1254A360C4} Agdaagux \n", + "\n", + " Classification geometry \n", + "0 1 MULTIPOLYGON (((-100.49935 45.47125, -100.4993... \n", + "1 1 POLYGON ((-99.42137 44.27733, -99.42138 44.273... \n", + "2 1 MULTIPOLYGON (((-96.56655 44.08786, -96.57165 ... \n", + "3 1 POLYGON ((-102.78362 47.99900, -102.78192 47.9... \n", + "4 1 MULTIPOLYGON (((-97.28946 45.76084, -97.28955 ... \n", + ".. ... ... \n", + "592 None POINT (-135.88440 59.40390) \n", + "593 None POINT (-135.44500 59.23580) \n", + "594 None POINT (-133.14830 55.47640) \n", + "595 None POINT (-134.41970 58.30190) \n", + "596 None POINT (-162.31030 55.06170) \n", + "\n", + "[597 rows x 4 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load Tribal geojson\n", + "tribal_gdf = gpd.read_file(\n", + " TribalETL().NATIONAL_TRIBAL_GEOJSON_PATH,\n", + " # Use `pyogrio` because it's vectorized and faster.\n", + " engine=\"pyogrio\",\n", + ")\n", + "\n", + "tribal_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "89fedd44", + "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", + "
tribalIdlandAreaNameClassificationgeometry
0LAR0001Cheyenne River LAR1MULTIPOLYGON (((-100.49935 45.47125, -100.4993...
1LAR0002Crow Creek LAR1POLYGON ((-99.42137 44.27733, -99.42138 44.273...
2LAR0003Flandreau LAR1MULTIPOLYGON (((-96.56655 44.08786, -96.57165 ...
3LAR0004Fort Berthold LAR1POLYGON ((-102.78362 47.99900, -102.78192 47.9...
4LAR0005Lake Traverse (Sisseton) LAR1MULTIPOLYGON (((-97.28946 45.76084, -97.28955 ...
...............
365TSA0354Seminole TSANonePOLYGON ((-96.49048 34.90423, -96.49146 34.903...
366TSA0355Seneca Cayuga TSANonePOLYGON ((-94.61803 36.62531, -94.62083 36.625...
367TSA0356Tonkawa TSANonePOLYGON ((-97.24698 36.68082, -97.24697 36.677...
368TSA0357Wichita Caddo and Delaware TSANonePOLYGON ((-97.99931 35.36425, -97.99948 35.360...
369TSA0358Wyandotte TSANonePOLYGON ((-94.61820 36.82030, -94.61821 36.816...
\n", + "

370 rows Ɨ 4 columns

\n", + "
" + ], + "text/plain": [ + " tribalId landAreaName Classification \\\n", + "0 LAR0001 Cheyenne River LAR 1 \n", + "1 LAR0002 Crow Creek LAR 1 \n", + "2 LAR0003 Flandreau LAR 1 \n", + "3 LAR0004 Fort Berthold LAR 1 \n", + "4 LAR0005 Lake Traverse (Sisseton) LAR 1 \n", + ".. ... ... ... \n", + "365 TSA0354 Seminole TSA None \n", + "366 TSA0355 Seneca Cayuga TSA None \n", + "367 TSA0356 Tonkawa TSA None \n", + "368 TSA0357 Wichita Caddo and Delaware TSA None \n", + "369 TSA0358 Wyandotte TSA None \n", + "\n", + " geometry \n", + "0 MULTIPOLYGON (((-100.49935 45.47125, -100.4993... \n", + "1 POLYGON ((-99.42137 44.27733, -99.42138 44.273... \n", + "2 MULTIPOLYGON (((-96.56655 44.08786, -96.57165 ... \n", + "3 POLYGON ((-102.78362 47.99900, -102.78192 47.9... \n", + "4 MULTIPOLYGON (((-97.28946 45.76084, -97.28955 ... \n", + ".. ... \n", + "365 POLYGON ((-96.49048 34.90423, -96.49146 34.903... \n", + "366 POLYGON ((-94.61803 36.62531, -94.62083 36.625... \n", + "367 POLYGON ((-97.24698 36.68082, -97.24697 36.677... \n", + "368 POLYGON ((-97.99931 35.36425, -97.99948 35.360... \n", + "369 POLYGON ((-94.61820 36.82030, -94.61821 36.816... \n", + "\n", + "[370 rows x 4 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Drop the points from the Tribal data (because these cannot be joined to a (Multi)Polygon tract data frame)\n", + "tribal_gdf = tribal_gdf[tribal_gdf.geom_type != \"Point\"]\n", + "tribal_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "5940556f", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
STATEFP10COUNTYFP10TRACTCE10GEOID10NAME10NAMELSAD10MTFCC10FUNCSTAT10ALAND10AWATER10INTPTLAT10INTPTLON10geometry
020071958100200719581009581Census Tract 9581G5020S20161768140+38.4804076-101.8059837POLYGON ((-101.79971 38.69806, -101.79097 38.6...
120175965600201759656009656Census Tract 9656G5020S16035757012204351+37.1805849-100.8547406POLYGON ((-101.06766 37.20440, -101.06768 37.2...
220175965700201759657009657Census Tract 9657G5020S9466451358282+37.0625361-100.9131437POLYGON ((-100.94250 37.06497, -100.94251 37.0...
32004302030020043020300203Census Tract 203G5020S2115932067045771+39.7881238-094.9734666POLYGON ((-94.95518 39.90129, -94.95475 39.901...
42004302020020043020200202Census Tract 202G5020S3526870262968059+39.7540484-095.1060098POLYGON ((-95.02575 39.88295, -95.02585 39.883...
..........................................
7412935049000600350490006006Census Tract 6G5020S16294710+35.6758519-105.9446097POLYGON ((-105.95207 35.67367, -105.95215 35.6...
7413035049000700350490007007Census Tract 7G5020S12855970+35.6802004-105.9558818POLYGON ((-105.96221 35.67223, -105.96245 35.6...
7413135049000800350490008008Census Tract 8G5020S19167970+35.6805095-105.9703558POLYGON ((-105.98159 35.67739, -105.98143 35.6...
7413235049000900350490009009Census Tract 9G5020S25455630+35.6692966-105.9755351POLYGON ((-105.96362 35.67616, -105.96365 35.6...
74133350490010013504900100110.01Census Tract 10.01G5020S26172810+35.6647341-105.9468629POLYGON ((-105.94510 35.65705, -105.94563 35.6...
\n", + "

74134 rows Ɨ 13 columns

\n", + "
" + ], + "text/plain": [ + " STATEFP10 COUNTYFP10 TRACTCE10 GEOID10 NAME10 NAMELSAD10 \\\n", + "0 20 071 958100 20071958100 9581 Census Tract 9581 \n", + "1 20 175 965600 20175965600 9656 Census Tract 9656 \n", + "2 20 175 965700 20175965700 9657 Census Tract 9657 \n", + "3 20 043 020300 20043020300 203 Census Tract 203 \n", + "4 20 043 020200 20043020200 202 Census Tract 202 \n", + "... ... ... ... ... ... ... \n", + "74129 35 049 000600 35049000600 6 Census Tract 6 \n", + "74130 35 049 000700 35049000700 7 Census Tract 7 \n", + "74131 35 049 000800 35049000800 8 Census Tract 8 \n", + "74132 35 049 000900 35049000900 9 Census Tract 9 \n", + "74133 35 049 001001 35049001001 10.01 Census Tract 10.01 \n", + "\n", + " MTFCC10 FUNCSTAT10 ALAND10 AWATER10 INTPTLAT10 INTPTLON10 \\\n", + "0 G5020 S 2016176814 0 +38.4804076 -101.8059837 \n", + "1 G5020 S 1603575701 2204351 +37.1805849 -100.8547406 \n", + "2 G5020 S 9466451 358282 +37.0625361 -100.9131437 \n", + "3 G5020 S 211593206 7045771 +39.7881238 -094.9734666 \n", + "4 G5020 S 352687026 2968059 +39.7540484 -095.1060098 \n", + "... ... ... ... ... ... ... \n", + "74129 G5020 S 1629471 0 +35.6758519 -105.9446097 \n", + "74130 G5020 S 1285597 0 +35.6802004 -105.9558818 \n", + "74131 G5020 S 1916797 0 +35.6805095 -105.9703558 \n", + "74132 G5020 S 2545563 0 +35.6692966 -105.9755351 \n", + "74133 G5020 S 2617281 0 +35.6647341 -105.9468629 \n", + "\n", + " geometry \n", + "0 POLYGON ((-101.79971 38.69806, -101.79097 38.6... \n", + "1 POLYGON ((-101.06766 37.20440, -101.06768 37.2... \n", + "2 POLYGON ((-100.94250 37.06497, -100.94251 37.0... \n", + "3 POLYGON ((-94.95518 39.90129, -94.95475 39.901... \n", + "4 POLYGON ((-95.02575 39.88295, -95.02585 39.883... \n", + "... ... \n", + "74129 POLYGON ((-105.95207 35.67367, -105.95215 35.6... \n", + "74130 POLYGON ((-105.96221 35.67223, -105.96245 35.6... \n", + "74131 POLYGON ((-105.98159 35.67739, -105.98143 35.6... \n", + "74132 POLYGON ((-105.96362 35.67616, -105.96365 35.6... \n", + "74133 POLYGON ((-105.94510 35.65705, -105.94563 35.6... \n", + "\n", + "[74134 rows x 13 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load Census tracts geojson\n", + "census_tract_gdf = gpd.read_file(\n", + " CensusETL.NATIONAL_TRACT_JSON_PATH,\n", + " # Use `pyogrio` because it's vectorized and faster.\n", + " engine=\"pyogrio\",\n", + ")\n", + "\n", + "census_tract_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "595b2a2a", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/lx/xmq8p65j71v9xq2bhsd2j5w40000gp/T/ipykernel_768/2956500515.py:2: UserWarning: Geometry is in a geographic CRS. Results from 'area' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", + "\n", + " census_tract_gdf[\"area_tract\"] = census_tract_gdf.area\n" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
STATEFP10COUNTYFP10TRACTCE10GEOID10NAME10NAMELSAD10MTFCC10FUNCSTAT10ALAND10AWATER10INTPTLAT10INTPTLON10geometryarea_tract
020071958100200719581009581Census Tract 9581G5020S20161768140+38.4804076-101.8059837POLYGON ((-101.79971 38.69806, -101.79097 38.6...0.208156
120175965600201759656009656Census Tract 9656G5020S16035757012204351+37.1805849-100.8547406POLYGON ((-101.06766 37.20440, -101.06768 37.2...0.162976
220175965700201759657009657Census Tract 9657G5020S9466451358282+37.0625361-100.9131437POLYGON ((-100.94250 37.06497, -100.94251 37.0...0.000995
32004302030020043020300203Census Tract 203G5020S2115932067045771+39.7881238-094.9734666POLYGON ((-94.95518 39.90129, -94.95475 39.901...0.022990
42004302020020043020200202Census Tract 202G5020S3526870262968059+39.7540484-095.1060098POLYGON ((-95.02575 39.88295, -95.02585 39.883...0.037373
.............................................
7412935049000600350490006006Census Tract 6G5020S16294710+35.6758519-105.9446097POLYGON ((-105.95207 35.67367, -105.95215 35.6...0.000162
7413035049000700350490007007Census Tract 7G5020S12855970+35.6802004-105.9558818POLYGON ((-105.96221 35.67223, -105.96245 35.6...0.000128
7413135049000800350490008008Census Tract 8G5020S19167970+35.6805095-105.9703558POLYGON ((-105.98159 35.67739, -105.98143 35.6...0.000191
7413235049000900350490009009Census Tract 9G5020S25455630+35.6692966-105.9755351POLYGON ((-105.96362 35.67616, -105.96365 35.6...0.000253
74133350490010013504900100110.01Census Tract 10.01G5020S26172810+35.6647341-105.9468629POLYGON ((-105.94510 35.65705, -105.94563 35.6...0.000261
\n", + "

74134 rows Ɨ 14 columns

\n", + "
" + ], + "text/plain": [ + " STATEFP10 COUNTYFP10 TRACTCE10 GEOID10 NAME10 NAMELSAD10 \\\n", + "0 20 071 958100 20071958100 9581 Census Tract 9581 \n", + "1 20 175 965600 20175965600 9656 Census Tract 9656 \n", + "2 20 175 965700 20175965700 9657 Census Tract 9657 \n", + "3 20 043 020300 20043020300 203 Census Tract 203 \n", + "4 20 043 020200 20043020200 202 Census Tract 202 \n", + "... ... ... ... ... ... ... \n", + "74129 35 049 000600 35049000600 6 Census Tract 6 \n", + "74130 35 049 000700 35049000700 7 Census Tract 7 \n", + "74131 35 049 000800 35049000800 8 Census Tract 8 \n", + "74132 35 049 000900 35049000900 9 Census Tract 9 \n", + "74133 35 049 001001 35049001001 10.01 Census Tract 10.01 \n", + "\n", + " MTFCC10 FUNCSTAT10 ALAND10 AWATER10 INTPTLAT10 INTPTLON10 \\\n", + "0 G5020 S 2016176814 0 +38.4804076 -101.8059837 \n", + "1 G5020 S 1603575701 2204351 +37.1805849 -100.8547406 \n", + "2 G5020 S 9466451 358282 +37.0625361 -100.9131437 \n", + "3 G5020 S 211593206 7045771 +39.7881238 -094.9734666 \n", + "4 G5020 S 352687026 2968059 +39.7540484 -095.1060098 \n", + "... ... ... ... ... ... ... \n", + "74129 G5020 S 1629471 0 +35.6758519 -105.9446097 \n", + "74130 G5020 S 1285597 0 +35.6802004 -105.9558818 \n", + "74131 G5020 S 1916797 0 +35.6805095 -105.9703558 \n", + "74132 G5020 S 2545563 0 +35.6692966 -105.9755351 \n", + "74133 G5020 S 2617281 0 +35.6647341 -105.9468629 \n", + "\n", + " geometry area_tract \n", + "0 POLYGON ((-101.79971 38.69806, -101.79097 38.6... 0.208156 \n", + "1 POLYGON ((-101.06766 37.20440, -101.06768 37.2... 0.162976 \n", + "2 POLYGON ((-100.94250 37.06497, -100.94251 37.0... 0.000995 \n", + "3 POLYGON ((-94.95518 39.90129, -94.95475 39.901... 0.022990 \n", + "4 POLYGON ((-95.02575 39.88295, -95.02585 39.883... 0.037373 \n", + "... ... ... \n", + "74129 POLYGON ((-105.95207 35.67367, -105.95215 35.6... 0.000162 \n", + "74130 POLYGON ((-105.96221 35.67223, -105.96245 35.6... 0.000128 \n", + "74131 POLYGON ((-105.98159 35.67739, -105.98143 35.6... 0.000191 \n", + "74132 POLYGON ((-105.96362 35.67616, -105.96365 35.6... 0.000253 \n", + "74133 POLYGON ((-105.94510 35.65705, -105.94563 35.6... 0.000261 \n", + "\n", + "[74134 rows x 14 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a measure for the entire census tract area\n", + "census_tract_gdf[\"area_tract\"] = census_tract_gdf.area\n", + "census_tract_gdf" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0ea396ed", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/lx/xmq8p65j71v9xq2bhsd2j5w40000gp/T/ipykernel_768/1353983773.py:2: UserWarning: `keep_geom_type=True` in overlay resulted in 1123 dropped geometries of different geometry types than df1 has. Set `keep_geom_type=False` to retain all geometries\n", + " gdf_joined = gpd.overlay(census_tract_gdf, tribal_gdf, how=\"union\")\n" + ] + } + ], + "source": [ + "# Performing overlay funcion\n", + "gdf_joined = gpd.overlay(census_tract_gdf, tribal_gdf, how=\"union\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "7fb3ef69", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/lx/xmq8p65j71v9xq2bhsd2j5w40000gp/T/ipykernel_768/2727120487.py:3: UserWarning: Geometry is in a geographic CRS. Results from 'area' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", + "\n", + " gdf_joined['area_joined'] = gdf_joined.area\n" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
STATEFP10COUNTYFP10TRACTCE10GEOID10NAME10NAMELSAD10MTFCC10FUNCSTAT10ALAND10AWATER10INTPTLAT10INTPTLON10area_tracttribalIdlandAreaNameClassificationgeometryarea_joinedtribal_area_as_a_share_of_tract_area
02004302010020043020100201Census Tract 201G5020S454634616.02601186.0+39.8206800-095.25672790.048098LAR0210Iowa LAR1POLYGON ((-95.33994 39.97506, -95.33994 39.975...4.998139e-040.010391
120013480600200134806004806Census Tract 4806G5020S882293538.01376818.0+39.8596443-095.62551870.093019LAR0210Iowa LAR1POLYGON ((-95.45656 40.00025, -95.45528 40.000...3.209294e-030.034502
231147964500311479645009645Census Tract 9645G5020S677848509.06076731.0+40.1522236-095.58588700.072289LAR0210Iowa LAR1MULTIPOLYGON (((-95.38162 40.02744, -95.38119 ...1.476624e-030.020427
329087960300290879603009603Census Tract 9603G5020S412869716.06745159.0+39.9730230-095.14797010.044239LAR0210Iowa LAR1POLYGON ((-95.38119 40.02755, -95.38162 40.027...1.965514e-070.000004
42008508260020085082600826Census Tract 826G5020S690868809.0947758.0+39.4553966-095.67314040.072404LAR0211Kickapoo (Kansas) LAR1POLYGON ((-95.71031 39.65308, -95.69902 39.653...5.285627e-060.000073
............................................................
76317NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNTSA0353Sac and Fox TSANoneMULTIPOLYGON (((-96.62002 35.75143, -96.62001 ...6.560647e-17NaN
76318NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNTSA0354Seminole TSANoneMULTIPOLYGON (((-96.77536 35.03300, -96.77536 ...7.207055e-18NaN
76319NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNTSA0355Seneca Cayuga TSANonePOLYGON ((-94.61836 36.74340, -94.61836 36.743...7.016721e-18NaN
76320NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNTSA0356Tonkawa TSANoneMULTIPOLYGON (((-97.24698 36.69942, -97.24692 ...2.612218e-17NaN
76321NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNTSA0358Wyandotte TSANonePOLYGON ((-94.61828 36.78970, -94.61834 36.795...1.555259e-18NaN
\n", + "

76322 rows Ɨ 19 columns

\n", + "
" + ], + "text/plain": [ + " STATEFP10 COUNTYFP10 TRACTCE10 GEOID10 NAME10 NAMELSAD10 \\\n", + "0 20 043 020100 20043020100 201 Census Tract 201 \n", + "1 20 013 480600 20013480600 4806 Census Tract 4806 \n", + "2 31 147 964500 31147964500 9645 Census Tract 9645 \n", + "3 29 087 960300 29087960300 9603 Census Tract 9603 \n", + "4 20 085 082600 20085082600 826 Census Tract 826 \n", + "... ... ... ... ... ... ... \n", + "76317 NaN NaN NaN NaN NaN NaN \n", + "76318 NaN NaN NaN NaN NaN NaN \n", + "76319 NaN NaN NaN NaN NaN NaN \n", + "76320 NaN NaN NaN NaN NaN NaN \n", + "76321 NaN NaN NaN NaN NaN NaN \n", + "\n", + " MTFCC10 FUNCSTAT10 ALAND10 AWATER10 INTPTLAT10 INTPTLON10 \\\n", + "0 G5020 S 454634616.0 2601186.0 +39.8206800 -095.2567279 \n", + "1 G5020 S 882293538.0 1376818.0 +39.8596443 -095.6255187 \n", + "2 G5020 S 677848509.0 6076731.0 +40.1522236 -095.5858870 \n", + "3 G5020 S 412869716.0 6745159.0 +39.9730230 -095.1479701 \n", + "4 G5020 S 690868809.0 947758.0 +39.4553966 -095.6731404 \n", + "... ... ... ... ... ... ... \n", + "76317 NaN NaN NaN NaN NaN NaN \n", + "76318 NaN NaN NaN NaN NaN NaN \n", + "76319 NaN NaN NaN NaN NaN NaN \n", + "76320 NaN NaN NaN NaN NaN NaN \n", + "76321 NaN NaN NaN NaN NaN NaN \n", + "\n", + " area_tract tribalId landAreaName Classification \\\n", + "0 0.048098 LAR0210 Iowa LAR 1 \n", + "1 0.093019 LAR0210 Iowa LAR 1 \n", + "2 0.072289 LAR0210 Iowa LAR 1 \n", + "3 0.044239 LAR0210 Iowa LAR 1 \n", + "4 0.072404 LAR0211 Kickapoo (Kansas) LAR 1 \n", + "... ... ... ... ... \n", + "76317 NaN TSA0353 Sac and Fox TSA None \n", + "76318 NaN TSA0354 Seminole TSA None \n", + "76319 NaN TSA0355 Seneca Cayuga TSA None \n", + "76320 NaN TSA0356 Tonkawa TSA None \n", + "76321 NaN TSA0358 Wyandotte TSA None \n", + "\n", + " geometry area_joined \\\n", + "0 POLYGON ((-95.33994 39.97506, -95.33994 39.975... 4.998139e-04 \n", + "1 POLYGON ((-95.45656 40.00025, -95.45528 40.000... 3.209294e-03 \n", + "2 MULTIPOLYGON (((-95.38162 40.02744, -95.38119 ... 1.476624e-03 \n", + "3 POLYGON ((-95.38119 40.02755, -95.38162 40.027... 1.965514e-07 \n", + "4 POLYGON ((-95.71031 39.65308, -95.69902 39.653... 5.285627e-06 \n", + "... ... ... \n", + "76317 MULTIPOLYGON (((-96.62002 35.75143, -96.62001 ... 6.560647e-17 \n", + "76318 MULTIPOLYGON (((-96.77536 35.03300, -96.77536 ... 7.207055e-18 \n", + "76319 POLYGON ((-94.61836 36.74340, -94.61836 36.743... 7.016721e-18 \n", + "76320 MULTIPOLYGON (((-97.24698 36.69942, -97.24692 ... 2.612218e-17 \n", + "76321 POLYGON ((-94.61828 36.78970, -94.61834 36.795... 1.555259e-18 \n", + "\n", + " tribal_area_as_a_share_of_tract_area \n", + "0 0.010391 \n", + "1 0.034502 \n", + "2 0.020427 \n", + "3 0.000004 \n", + "4 0.000073 \n", + "... ... \n", + "76317 NaN \n", + "76318 NaN \n", + "76319 NaN \n", + "76320 NaN \n", + "76321 NaN \n", + "\n", + "[76322 rows x 19 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Calculate overlap\n", + "# Calculating the areas of the newly-created geometries\n", + "gdf_joined[\"area_joined\"] = gdf_joined.area\n", + "\n", + "# Calculating the areas of the newly-created geometries in relation\n", + "# to the original grid cells\n", + "gdf_joined[\"tribal_area_as_a_share_of_tract_area\"] = (\n", + " gdf_joined[\"area_joined\"] / gdf_joined[\"area_tract\"]\n", + ")\n", + "gdf_joined" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "042da05e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " GEOID10 landAreaName tribal_area_as_a_share_of_tract_area\n", + "0 01051030800 Poarch Creek LAR 0.002467\n", + "1 01053970400 Poarch Creek LAR 0.002367\n", + "2 01053970500 Poarch Creek LAR 0.000682\n", + "3 01101005408 Poarch Creek LAR 0.001391\n", + "4 02130000100 Annette Island LAR 0.000038\n", + "... ... ... ...\n", + "2585 56013940300 Wind River LAR 0.204039\n", + "2586 56013940400 Wind River LAR 0.053289\n", + "2587 56017967900 Wind River LAR 0.191189\n", + "2588 56033000600 Crow LAR 0.000565\n", + "2589 56035000102 Wind River LAR 0.000140\n", + "\n", + "[2590 rows x 3 columns]\n" + ] + } + ], + "source": [ + "# Aggregating the results\n", + "results = gdf_joined.groupby([\"GEOID10\", \"landAreaName\"]).agg(\n", + " {\"tribal_area_as_a_share_of_tract_area\": \"sum\"}\n", + ")\n", + "\n", + "results = results.reset_index()\n", + "\n", + "results.to_csv(\n", + " \"~/Downloads/tribal_area_as_a_share_of_tract_area.csv\", index=False\n", + ")\n", + "\n", + "# Printing results\n", + "print(results)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "34524a94", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Time taken to execute the function is 140.10310292243958\n" + ] + } + ], + "source": [ + "end = time.time()\n", + "\n", + "print(\"Time taken to execute the ETL is\", end - begin)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/data/data-pipeline/data_pipeline/score/adding_variables_to_score.md b/data/data-pipeline/data_pipeline/score/adding_variables_to_score.md new file mode 100644 index 000000000..581cac8e3 --- /dev/null +++ b/data/data-pipeline/data_pipeline/score/adding_variables_to_score.md @@ -0,0 +1,28 @@ +# How to add variables to a score + +So, there's a variable you want to add to the score! Once you have the data source created in `etl/sources`, what should you do? There are 6 steps across a minimum of 7 files. + +__Updating `field_names.py`__ +Per indicator, you need to make (usually) three variables to get used in other files. +- raw variable: this is the name of the variable's raw data, not scaled into a percentile +- variable with threshold exceeded: this is a boolean for whether the tract meets the threshold for the indicator alone +- variable with threshold exceeded and socioeconomic criterion exceeded: this is whether the tract will be a DAC based on the socioeconomic criterion and the indicator + +__Updating `etl_score.py`__ +- add the dataframe from the source to the ScoreETL constructor and add a line to read the dataframe into memory +- then, add the dataframe into the list of `census_tract_dfs` +- finally, add columns you want to include as percentiles to the `numeric_columns` list + +__Updating `score_narwhal.py`__ (or whatever the score file is) +- per factor, add the columns that show the threshold and socioeconomic criterion is exceeded to the `eligibility_columns` list +- construct all columns specified in `field_names`, using the factor method as a guide + +__Updating `constants.py`__ +- add the columns' shortnames to the tiles dictionary (using Vim's UI sheet to guide short names) +- add the floats to the list of floats + +__Updating `csv.yml` and `excel.yml`__ +- make sure each column you want to be in the downloadable files is listed here + +__Update the fixtures__ +Follow the instructions on the repo to modify tiles so that `test_etl_post.py` doesn't fail. Then, confirm results. diff --git a/data/data-pipeline/data_pipeline/score/field_names.py b/data/data-pipeline/data_pipeline/score/field_names.py index cd0a9e252..aed44c483 100644 --- a/data/data-pipeline/data_pipeline/score/field_names.py +++ b/data/data-pipeline/data_pipeline/score/field_names.py @@ -1,60 +1,29 @@ # Suffixes PERCENTILE_FIELD_SUFFIX = " (percentile)" -PERCENTILE_URBAN_RURAL_FIELD_SUFFIX = " (percentile urban/rural)" -MIN_MAX_FIELD_SUFFIX = " (min-max normalized)" -TOP_25_PERCENTILE_SUFFIX = " (top 25th percentile)" ISLAND_AREAS_PERCENTILE_ADJUSTMENT_FIELD = " for island areas" +ADJACENT_MEAN_SUFFIX = " (based on adjacency index and low income alone)" +ADJACENCY_INDEX_SUFFIX = " (average of neighbors)" +ISLAND_AREA_BACKFILL_SUFFIX = " in 2009" # Geographic field names GEOID_TRACT_FIELD = "GEOID10_TRACT" STATE_FIELD = "State/Territory" COUNTY_FIELD = "County Name" -# Score file field names -SCORE_A = "Score A" -SCORE_B = "Score B" -SCORE_C = "Score C" -C_SOCIOECONOMIC = "Socioeconomic Factors" -C_SENSITIVE = "Sensitive populations" -C_ENVIRONMENTAL = "Environmental effects" -C_EXPOSURES = "Exposures" -SCORE_D = "Score D" -SCORE_E = "Score E" -SCORE_F_COMMUNITIES = "Score F (communities)" -SCORE_G = "Score G" -SCORE_G_COMMUNITIES = "Score G (communities)" -SCORE_H = "Score H" -SCORE_H_COMMUNITIES = "Score H (communities)" -SCORE_I = "Score I" -SCORE_I_COMMUNITIES = "Score I (communities)" -SCORE_K = "NMTC (communities)" -SCORE_K_COMMUNITIES = "Score K (communities)" - -# Definition L fields -SCORE_L = "Definition L" -SCORE_L_COMMUNITIES = "Definition L (communities)" -L_CLIMATE = "Climate Factor (Definition L)" -L_ENERGY = "Energy Factor (Definition L)" -L_TRANSPORTATION = "Transportation Factor (Definition L)" -L_HOUSING = "Housing Factor (Definition L)" -L_POLLUTION = "Pollution Factor (Definition L)" -L_WATER = "Water Factor (Definition L)" -L_HEALTH = "Health Factor (Definition L)" -L_WORKFORCE = "Workforce Factor (Definition L)" -L_NON_WORKFORCE = "Any Non-Workforce Factor (Definition L)" - -# Definition M fields -SCORE_M = "Definition M" -SCORE_M_COMMUNITIES = "Definition M (communities)" -M_CLIMATE = "Climate Factor (Definition M)" -M_ENERGY = "Energy Factor (Definition M)" -M_TRANSPORTATION = "Transportation Factor (Definition M)" -M_HOUSING = "Housing Factor (Definition M)" -M_POLLUTION = "Pollution Factor (Definition M)" -M_WATER = "Water Factor (Definition M)" -M_HEALTH = "Health Factor (Definition M)" -M_WORKFORCE = "Workforce Factor (Definition M)" -M_NON_WORKFORCE = "Any Non-Workforce Factor (Definition M)" +# Definition Narwhal fields +SCORE_N_COMMUNITIES = "Definition N (communities)" +N_CLIMATE = "Climate Factor (Definition N)" +N_ENERGY = "Energy Factor (Definition N)" +N_TRANSPORTATION = "Transportation Factor (Definition N)" +N_HOUSING = "Housing Factor (Definition N)" +N_POLLUTION = "Pollution Factor (Definition N)" +N_WATER = "Water Factor (Definition N)" +N_HEALTH = "Health Factor (Definition N)" +N_WORKFORCE = "Workforce Factor (Definition N)" +N_NON_WORKFORCE = "Any Non-Workforce Factor (Definition N)" +FINAL_SCORE_N_BOOLEAN = ( + "Definition N community, including adjacency index tracts" +) PERCENTILE = 90 MEDIAN_HOUSE_VALUE_PERCENTILE = 90 @@ -72,30 +41,24 @@ "Both workforce socioeconomic indicators exceeded" ) -# For now, these are not used. Will delete after following up with Vim. -POLLUTION_SOCIO_INDICATORS_EXCEEDED = ( - "Both pollution socioeconomic indicators exceeded" -) -CLIMATE_SOCIO_INDICATORS_EXCEEDED = ( - "Both climate socioeconomic indicators exceeded" -) -ENERGY_SOCIO_INDICATORS_EXCEEDED = ( - "Both energy socioeconomic indicators exceeded" -) -HOUSING_SOCIO_INDICATORS_EXCEEDED = ( - "Both housing socioeconomic indicators exceeded" -) -WATER_SOCIO_INDICATORS_EXCEEDED = "Both water socioeconomic indicators exceeded" - -HEALTH_SOCIO_INDICATORS_EXCEEDED = ( - "Both health socioeconomic indicators exceeded" -) - # Poverty / Income POVERTY_FIELD = "Poverty (Less than 200% of federal poverty line)" + +# this is the raw, unadjusted variable POVERTY_LESS_THAN_200_FPL_FIELD = ( "Percent of individuals below 200% Federal Poverty Line" ) + +# this is for use in the donuts +ADJUSTED_POVERTY_LESS_THAN_200_PERCENT_FPL_FIELD_NAME = ( + "Adjusted percent of individuals < 200% Federal Poverty Line" +) + +# this is what gets used in the score +POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD = "Percent of individuals below 200% Federal Poverty Line, imputed and adjusted" +IMPUTED_INCOME_FLAG_FIELD_NAME = ( + "Income data has been estimated based on neighbor income" +) POVERTY_LESS_THAN_150_FPL_FIELD = ( "Percent of individuals < 150% Federal Poverty Line" ) @@ -122,6 +85,27 @@ "Low median household income as a percent of area median income" ) +# Additional ACS demographic fields. +PERCENT_PREFIX = "Percent " + +PERCENT_BLACK_FIELD_NAME = PERCENT_PREFIX + "Black or African American" +PERCENT_AMERICAN_INDIAN_FIELD_NAME = ( + PERCENT_PREFIX + "American Indian / Alaska Native" +) +PERCENT_ASIAN_FIELD_NAME = PERCENT_PREFIX + "Asian" +PERCENT_HAWAIIAN_FIELD_NAME = PERCENT_PREFIX + "Native Hawaiian or Pacific" +PERCENT_TWO_OR_MORE_RACES_FIELD_NAME = PERCENT_PREFIX + "two or more races" +PERCENT_NON_HISPANIC_WHITE_FIELD_NAME = PERCENT_PREFIX + "White" +PERCENT_HISPANIC_FIELD_NAME = PERCENT_PREFIX + "Hispanic or Latino" +# Note that `other` is lowercase because the whole field will show up in the download +# file as "Percent other races" +PERCENT_OTHER_RACE_FIELD_NAME = PERCENT_PREFIX + "other races" + +# Age +PERCENT_AGE_UNDER_10 = "Percent age under 10" +PERCENT_AGE_10_TO_64 = "Percent age 10 to 64" +PERCENT_AGE_OVER_64 = "Percent age over 64" + # Climate FEMA_RISK_FIELD = "FEMA Risk Index Expected Annual Loss Score" EXPECTED_BUILDING_LOSS_RATE_FIELD = ( @@ -133,6 +117,8 @@ EXPECTED_POPULATION_LOSS_RATE_FIELD = ( "Expected population loss rate (Natural Hazards Risk Index)" ) +FUTURE_FLOOD_RISK_FIELD = "Share of properties at risk of flood in 30 years" +FUTURE_WILDFIRE_RISK_FIELD = "Share of properties at risk of fire in 30 years" # Environment DIESEL_FIELD = "Diesel particulate matter exposure" @@ -147,11 +133,16 @@ NPL_FIELD = "Proximity to NPL sites" AIR_TOXICS_CANCER_RISK_FIELD = "Air toxics cancer risk" RESPIRATORY_HAZARD_FIELD = "Respiratory hazard index" +UST_FIELD = "Leaky underground storage tanks" LOW_INCOME_THRESHOLD = "Exceeds FPL200 threshold" # Housing HOUSING_BURDEN_FIELD = "Housing burden (percent)" +NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD = ( + "Share of homes with no kitchen or indoor plumbing (percent)" +) + HT_INDEX_FIELD = ( "Housing + Transportation Costs % Income for the Regional Typical Household" ) @@ -280,7 +271,17 @@ "EJSCREEN Areas of Concern, State, 95th percentile (communities)" ) # Mapping inequality data. +REDLINED_SHARE: str = ( + "Redlined share: tract had redlining and was more than 50% Grade C or D" +) HOLC_GRADE_D_TRACT_PERCENT_FIELD: str = "Percent of tract that is HOLC Grade D" +HOLC_GRADE_C_TRACT_PERCENT_FIELD: str = "Percent of tract that is HOLC Grade C" +HOLC_GRADE_C_OR_D_TRACT_PERCENT_FIELD: str = ( + "Percent of tract that is HOLC Grade C or HOLC Grade D" +) +HOLC_GRADE_C_OR_D_TRACT_50_PERCENT_FIELD: str = ( + "Tract is more than 50% Grade C or D" +) HOLC_GRADE_D_TRACT_20_PERCENT_FIELD: str = "Tract is >20% HOLC Grade D" HOLC_GRADE_D_TRACT_50_PERCENT_FIELD: str = "Tract is >50% HOLC Grade D" HOLC_GRADE_D_TRACT_75_PERCENT_FIELD: str = "Tract is >75% HOLC Grade D" @@ -293,7 +294,7 @@ ) # CDC SVI INDEX percentile fields -CDC_SVI_INDEX_SE_THEME_FIELD: str = "SVI - Socioeconomic Index" +CDC_SVI_INDEX_SE_THEME_FIELD: str = "SVI - Social Vulnerability Index" CDC_SVI_INDEX_HOUSEHOLD_THEME_COMPOSITION_FIELD: str = ( "SVI - Household Composition Index" ) @@ -306,27 +307,15 @@ ) CDC_SVI_INDEX_THEMES_PRIORITY_COMMUNITY: str = "At or above 90 for overall percentile ranking according to Social Vulnerability Indices" +# DOT Travel Burden Data +DOT_TRAVEL_BURDEN_FIELD: str = "DOT Travel Barriers Score" + # Maryland EJSCREEN Data. MARYLAND_EJSCREEN_SCORE_FIELD: str = "Maryland Environmental Justice Score" MARYLAND_EJSCREEN_BURDENED_THRESHOLD_FIELD: str = ( "Maryland EJSCREEN Priority Community" ) -# Child Opportunity Index data -# Summer days with maximum temperature above 90F. -EXTREME_HEAT_FIELD = "Summer days above 90F" - -# Percentage households without a car located further than a half-mile from the -# nearest supermarket. -HEALTHY_FOOD_FIELD = "Percent low access to healthy food" - -# Percentage impenetrable surface areas such as rooftops, roads or parking lots. -IMPENETRABLE_SURFACES_FIELD = "Percent impenetrable surface areas" - -# Percentage third graders scoring proficient on standardized reading tests, -# converted to NAEP scale score points. -READING_FIELD = "Third grade reading proficiency" -LOW_READING_FIELD = "Low third grade reading proficiency" # Alternative energy-related definition of DACs ENERGY_RELATED_COMMUNITIES_DEFINITION_ALTERNATIVE = ( @@ -349,6 +338,36 @@ SINGLE_PARENT = "Single Parent" TRANSPORTATION_COSTS = "Transportation Costs" +# eAMLIS and FUDS variables +AML_BOOLEAN = "Is there at least one abandoned mine in this census tract?" +AML_BOOLEAN_FILLED_IN = "Is there at least one abandoned mine in this census tract, where missing data is treated as False?" + +ELIGIBLE_FUDS_BINARY_FIELD_NAME = ( + "Is there at least one Formerly Used Defense Site (FUDS) in the tract?" +) +ELIGIBLE_FUDS_FILLED_IN_FIELD_NAME = "Is there at least one Formerly Used Defense Site (FUDS) in the tract, where missing data is treated as False?" + +# Tribal variables +TRIBAL_ID = "tribalId" +TRIBAL_LAND_AREA_NAME = "landAreaName" + +# Tribal overlap variables +COUNT_OF_TRIBAL_AREAS_IN_TRACT_CONUS = ( + "Number of Tribal areas within Census tract" +) +COUNT_OF_TRIBAL_AREAS_IN_TRACT_AK = ( + "Number of Tribal areas within Census tract for Alaska" +) +NAMES_OF_TRIBAL_AREAS_IN_TRACT = "Names of Tribal areas within Census tract" +PERCENT_OF_TRIBAL_AREA_IN_TRACT = ( + "Percent of the Census tract that is within Tribal areas" +) +PERCENT_OF_TRIBAL_AREA_IN_TRACT_DISPLAY = ( + "Percent of the Census tract that is within Tribal areas, for display" +) +IS_TRIBAL_DAC = "Identified as disadvantaged due to tribal overlap" +PERCENT_OF_TRACT_IS_DAC = "Percentage of tract that is disadvantaged" + ##### # Names for individual factors being exceeded @@ -367,6 +386,15 @@ ) AGRICULTURAL_VALUE_BOOL_FIELD = "Contains agricultural value" +HIGH_FUTURE_FLOOD_RISK_LOW_INCOME_FIELD = ( + f"Greater than or equal to the {PERCENTILE}th percentile for share of " + "properties at risk of flood in 30 years and is low income?" +) +HIGH_FUTURE_WILDFIRE_RISK_LOW_INCOME_FIELD = ( + f"Greater than or equal to the {PERCENTILE}th percentile for " + "share of properties at risk of fire in 30 years and is low income?" +) + # Clean energy and efficiency PM25_EXPOSURE_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for PM2.5 exposure and is low income?" ENERGY_BURDEN_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for energy burden and is low income?" @@ -378,6 +406,7 @@ ) TRAFFIC_PROXIMITY_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for traffic proximity and is low income?" + # Affordable and Sustainable Housing LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD = ( f"Greater than or equal to the {PERCENTILE}th percentile for lead paint and" @@ -385,6 +414,10 @@ f"percentile and is low income?" ) HOUSING_BURDEN_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for housing burden and is low income?" +NO_KITCHEN_OR_INDOOR_PLUMBING_LOW_INCOME_FIELD = ( + f"Greater than or equal to the {PERCENTILE}th percentile for " + + "share of homes with no kitchen or indoor plumbing and is low income?" +) # Remediation and Reduction of Legacy Pollution RMP_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for proximity to RMP sites and is low income?" @@ -394,8 +427,13 @@ f" for proximity to hazardous waste facilities and is low income?" ) +AML_LOW_INCOME_FIELD = "There is at least one abandoned mine in this census tract and the tract is low income." +ELIGIBLE_FUDS_LOW_INCOME_FIELD = "There is at least one Formerly Used Defense Site (FUDS) in the tract and the tract is low income." + + # Critical Clean Water and Waste Infrastructure WASTEWATER_DISCHARGE_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for wastewater discharge and is low income?" +UST_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for leaky underground storage tanks and is low income?" # Health Burdens DIABETES_LOW_INCOME_FIELD = f"Greater than or equal to the {PERCENTILE}th percentile for diabetes and is low income?" @@ -412,6 +450,7 @@ ", is low income, and has a low percent of higher ed students" ) + COLLEGE_ATTENDANCE_LESS_THAN_20_FIELD = ( "Percent higher ed enrollment rate is less than 20%" ) @@ -450,6 +489,10 @@ f"traffic proximity{SCORE_M_LOW_INCOME_SUFFIX}?" ) +DOT_TRAVEL_BURDEN_LOW_INCOME_FIELD = ( + f"Greater than or equal to the {PERCENTILE}th percentile " + f"for DOT transit barriers and is low income?" +) # Affordable and Sustainable Housing LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_LOW_HIGHER_ED_FIELD = ( f"Greater than or equal to the {PERCENTILE}th percentile for lead paint," @@ -497,22 +540,22 @@ # Workforce UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD = ( f"Greater than or equal to the {PERCENTILE}th percentile for unemployment" - " and has low HS education?" + " and has low HS attainment?" ) LINGUISTIC_ISOLATION_LOW_HS_EDUCATION_FIELD = ( f"Greater than or equal to the {PERCENTILE}th percentile for households in linguistic isolation" - " and has low HS education?" + " and has low HS attainment?" ) POVERTY_LOW_HS_EDUCATION_FIELD = ( f"Greater than or equal to the {PERCENTILE}th percentile for households at or below 100% federal poverty level" - " and has low HS education?" + " and has low HS attainment?" ) LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD = ( f"Greater than or equal to the {PERCENTILE}th percentile for low median household income as a " - f"percent of area median income and has low HS education?" + f"percent of area median income and has low HS attainment?" ) # Score M Workforce Variables @@ -580,6 +623,7 @@ ) DIESEL_EXCEEDS_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for diesel particulate matter" TRAFFIC_PROXIMITY_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for traffic proximity" +DOT_BURDEN_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for DOT travel barriers" LEAD_PAINT_PROXY_PCTILE_THRESHOLD = ( f"Greater than or equal to the {PERCENTILE}th percentile for lead paint and" f" the median house value is less than {MEDIAN_HOUSE_VALUE_PERCENTILE}th " @@ -588,12 +632,19 @@ HOUSING_BURDEN_PCTILE_THRESHOLD = ( f"Greater than or equal to the {PERCENTILE}th percentile for housing burden" ) +NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD = ( + f"Greater than or equal to the {PERCENTILE}th percentile for share " + "of homes without indoor plumbing or a kitchen" +) + RMP_PCTILE_THRESHOLD = ( f"Greater than or equal to the {PERCENTILE}th percentile for RMP proximity" ) NPL_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for NPL (superfund sites) proximity" TSDF_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for proximity to hazardous waste sites" WASTEWATER_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for wastewater discharge" +UST_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for leaky underwater storage tanks" + DIABETES_PCTILE_THRESHOLD = ( f"Greater than or equal to the {PERCENTILE}th percentile for diabetes" ) @@ -610,6 +661,29 @@ UNEMPLOYMENT_PCTILE_THRESHOLD = ( f"Greater than or equal to the {PERCENTILE}th percentile for unemployment" ) +HIGH_FUTURE_FLOOD_RISK_FIELD = ( + f"Greater than or equal to the {PERCENTILE}th percentile for share of properties " + "at risk of flood in 30 years" +) +HIGH_FUTURE_WILDFIRE_RISK_FIELD = ( + f"Greater than or equal to the {PERCENTILE}th percentile for share of properties " + "at risk of fire in 30 years" +) + +# NCLD Nature Deprived +TRACT_PERCENT_NON_NATURAL_FIELD_NAME = "Share of the tract's land area that is covered by impervious surface or cropland as a percent" +NON_NATURAL_PCTILE_THRESHOLD = ( + f"Greater than or equal to the {PERCENTILE}th percentile for share of the tract's land area that is covered " + "by impervious surface or cropland as a percent" +) +NON_NATURAL_LOW_INCOME_FIELD_NAME = ( + f"Greater than or equal to the {PERCENTILE}th percentile for share of the tract's land area that is covered " + "by impervious surface or cropland as a percent and is low income?" +) +TRACT_ELIGIBLE_FOR_NONNATURAL_THRESHOLD = ( + "Does the tract have at least 35 acres in it?" +) + LINGUISTIC_ISOLATION_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for households in linguistic isolation" POVERTY_PCTILE_THRESHOLD = f"Greater than or equal to the {PERCENTILE}th percentile for households at or below 100% federal poverty level" LOW_MEDIAN_INCOME_PCTILE_THRESHOLD = ( @@ -623,7 +697,6 @@ ISLAND_UNEMPLOYMENT_PCTILE_THRESHOLD = f"{CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009} exceeds {PERCENTILE}th percentile" ISLAND_POVERTY_PCTILE_THRESHOLD = f"{CENSUS_DECENNIAL_POVERTY_LESS_THAN_100_FPL_FIELD_2009} exceeds {PERCENTILE}th percentile" - # Not currently used in a factor EXTREME_HEAT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD = ( f"Greater than or equal to the {PERCENTILE}th percentile for summer days above 90F and " @@ -651,6 +724,10 @@ CATEGORY_COUNT = "Total categories exceeded" FPL_200_SERIES = "Is low income?" +FPL_200_SERIES_IMPUTED_AND_ADJUSTED = "Is low income (imputed and adjusted)?" +FPL_200_SERIES_IMPUTED_AND_ADJUSTED_DONUTS = ( + "Meets the less stringent low income criterion for the adjacency index?" +) FPL_200_AND_COLLEGE_ATTENDANCE_SERIES = ( "Is low income and has a low percent of higher ed students?" ) @@ -666,5 +743,19 @@ "Mapping for Environmental Justice Priority Community" ) +# Historic Redlining Score +HISTORIC_REDLINING_SCORE_EXCEEDED = ( + "Tract-level redlining score meets or exceeds 3.25" +) + +HISTORIC_REDLINING_SCORE_EXCEEDED_LOW_INCOME_FIELD = ( + "Tract-level redlining score meets or exceeds 3.25 and is low income" +) + + +ADJACENT_TRACT_SCORE_ABOVE_DONUT_THRESHOLD = ( + "Is the tract surrounded by disadvantaged communities?" +) + # End of names for individual factors being exceeded #### diff --git a/data/data-pipeline/data_pipeline/score/score_a.py b/data/data-pipeline/data_pipeline/score/score_a.py index 8f0bdde45..c1a212984 100644 --- a/data/data-pipeline/data_pipeline/score/score_a.py +++ b/data/data-pipeline/data_pipeline/score/score_a.py @@ -1,7 +1,6 @@ +import data_pipeline.score.field_names as field_names import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_b.py b/data/data-pipeline/data_pipeline/score/score_b.py index 449ccade6..12f7048ec 100644 --- a/data/data-pipeline/data_pipeline/score/score_b.py +++ b/data/data-pipeline/data_pipeline/score/score_b.py @@ -1,7 +1,6 @@ +import data_pipeline.score.field_names as field_names import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_c.py b/data/data-pipeline/data_pipeline/score/score_c.py index 57194b45c..ef10d86d7 100644 --- a/data/data-pipeline/data_pipeline/score/score_c.py +++ b/data/data-pipeline/data_pipeline/score/score_c.py @@ -1,8 +1,8 @@ from collections import namedtuple -import pandas as pd -from data_pipeline.score.score import Score import data_pipeline.score.field_names as field_names +import pandas as pd +from data_pipeline.score.score import Score from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_d.py b/data/data-pipeline/data_pipeline/score/score_d.py index 22d7b4aa3..55b430a44 100644 --- a/data/data-pipeline/data_pipeline/score/score_d.py +++ b/data/data-pipeline/data_pipeline/score/score_d.py @@ -1,7 +1,6 @@ +import data_pipeline.score.field_names as field_names import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_f.py b/data/data-pipeline/data_pipeline/score/score_f.py index fb2547767..523f2cf1e 100644 --- a/data/data-pipeline/data_pipeline/score/score_f.py +++ b/data/data-pipeline/data_pipeline/score/score_f.py @@ -1,7 +1,6 @@ +import data_pipeline.score.field_names as field_names import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_g.py b/data/data-pipeline/data_pipeline/score/score_g.py index f83b8fd4c..7cd342dee 100644 --- a/data/data-pipeline/data_pipeline/score/score_g.py +++ b/data/data-pipeline/data_pipeline/score/score_g.py @@ -1,7 +1,6 @@ +import data_pipeline.score.field_names as field_names import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_h.py b/data/data-pipeline/data_pipeline/score/score_h.py index 67c58d229..efc24ee16 100644 --- a/data/data-pipeline/data_pipeline/score/score_h.py +++ b/data/data-pipeline/data_pipeline/score/score_h.py @@ -1,7 +1,6 @@ +import data_pipeline.score.field_names as field_names import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_i.py b/data/data-pipeline/data_pipeline/score/score_i.py index 948669d8f..02528ebc8 100644 --- a/data/data-pipeline/data_pipeline/score/score_i.py +++ b/data/data-pipeline/data_pipeline/score/score_i.py @@ -1,7 +1,6 @@ +import data_pipeline.score.field_names as field_names import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_k.py b/data/data-pipeline/data_pipeline/score/score_k.py index 44452f175..bc6b8057d 100644 --- a/data/data-pipeline/data_pipeline/score/score_k.py +++ b/data/data-pipeline/data_pipeline/score/score_k.py @@ -1,7 +1,6 @@ +import data_pipeline.score.field_names as field_names import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_l.py b/data/data-pipeline/data_pipeline/score/score_l.py index ca22aef95..ab935b720 100644 --- a/data/data-pipeline/data_pipeline/score/score_l.py +++ b/data/data-pipeline/data_pipeline/score/score_l.py @@ -1,8 +1,7 @@ +import data_pipeline.score.field_names as field_names import numpy as np import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_m.py b/data/data-pipeline/data_pipeline/score/score_m.py index ddaa57f58..89eef6fa3 100644 --- a/data/data-pipeline/data_pipeline/score/score_m.py +++ b/data/data-pipeline/data_pipeline/score/score_m.py @@ -1,11 +1,11 @@ from typing import Tuple + +import data_pipeline.etl.score.constants as constants +import data_pipeline.score.field_names as field_names import numpy as np import pandas as pd - from data_pipeline.score.score import Score -import data_pipeline.score.field_names as field_names from data_pipeline.utils import get_module_logger -import data_pipeline.etl.score.constants as constants logger = get_module_logger(__name__) diff --git a/data/data-pipeline/data_pipeline/score/score_narwhal.py b/data/data-pipeline/data_pipeline/score/score_narwhal.py new file mode 100644 index 000000000..07e2ab619 --- /dev/null +++ b/data/data-pipeline/data_pipeline/score/score_narwhal.py @@ -0,0 +1,1072 @@ +from typing import Tuple + +import data_pipeline.etl.score.constants as constants +import data_pipeline.score.field_names as field_names +import numpy as np +import pandas as pd +from data_pipeline.score.score import Score +from data_pipeline.score.utils import calculate_tract_adjacency_scores +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +class ScoreNarwhal(Score): + """Score N, aka Narwhal.""" + + LOW_INCOME_THRESHOLD: float = 0.65 + MAX_COLLEGE_ATTENDANCE_THRESHOLD: float = 0.20 + ENVIRONMENTAL_BURDEN_THRESHOLD: float = 0.90 + MEDIAN_HOUSE_VALUE_THRESHOLD: float = 0.90 + LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD: float = 0.10 + + # We define a donut hole DAC as a tract that is entirely surrounded by + # DACs (score threshold = 1) and above median for low income, as a starting + # point. As we ground-truth, these thresholds might change. + LOW_INCOME_THRESHOLD_DONUT: float = 0.50 + SCORE_THRESHOLD_DONUT: float = 1.00 + + def _combine_island_areas_with_states_and_set_thresholds( + self, + df: pd.DataFrame, + column_from_island_areas: str, + column_from_decennial_census: str, + combined_column_name: str, + threshold_cutoff_for_island_areas: float, + ) -> Tuple[pd.DataFrame, str]: + """Steps to set thresholds for island areas. + + This function is fairly logically complicated. It takes the following steps: + + 1. Combine the two different fields into a single field. + 2. Calculate the 90th percentile for the combined field. + 3. Create a boolean series that is true for any census tract in the island + areas (and only the island areas) that exceeds this percentile. + + For step one, it combines data that is either the island area's Decennial Census + value in 2009 or the state's value in 5-year ACS ending in 2010. + + This will be used to generate the percentile cutoff for the 90th percentile. + + The stateside decennial census stopped asking economic comparisons, + so this is as close to apples-to-apples as we get. We use 5-year ACS for data + robustness over 1-year ACS. + """ + # Create the combined field. + # TODO: move this combined field percentile calculation to `etl_score`, + # since most other percentile logic is there. + # There should only be one entry in either 2009 or 2019 fields, not one in both. + # But just to be safe, we take the mean and ignore null values so if there + # *were* entries in both, this result would make sense. + df[combined_column_name] = df[ + [column_from_island_areas, column_from_decennial_census] + ].mean(axis=1, skipna=True) + + # Create a percentile field for use in the Islands / PR visualization + # TODO: move this code + # In the code below, percentiles are constructed based on the combined column + # of census and island data, but only reported for the island areas (where there + # is no other comprehensive percentile information) + return_series_name = ( + column_from_island_areas + + field_names.ISLAND_AREAS_PERCENTILE_ADJUSTMENT_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ) + df[return_series_name] = np.where( + df[column_from_decennial_census].isna(), + df[combined_column_name].rank(pct=True), + np.nan, + ) + + threshold_column_name = ( + f"{column_from_island_areas} exceeds " + f"{threshold_cutoff_for_island_areas*100:.0f}th percentile" + ) + + df[threshold_column_name] = ( + df[return_series_name] >= threshold_cutoff_for_island_areas + ) + + return df, threshold_column_name + + def _increment_total_eligibility_exceeded( + self, columns_for_subset: list, skip_fips: tuple = () + ) -> None: + """ + Increments the total eligible factors for a given tract + + The new skip_fips argument specifies which (if any) fips codes to + skip over for incrementing. + This allows us to essentially skip data we think is of limited veracity, + without overriding any values in the data. + THIS IS A TEMPORARY FIX. + """ + if skip_fips: + self.df[field_names.THRESHOLD_COUNT] += np.where( + self.df[field_names.GEOID_TRACT_FIELD].str.startswith( + skip_fips + ), + 0, + self.df[columns_for_subset].sum(axis=1, skipna=True), + ) + else: + self.df[field_names.THRESHOLD_COUNT] += self.df[ + columns_for_subset + ].sum(axis=1, skipna=True) + + def _climate_factor(self) -> bool: + # In Xth percentile or above for FEMAā€™s Risk Index (Source: FEMA + # AND + # Low income: In Nth percentile or above for percent of block group population + # of households where household income is less than or equal to twice the federal + # poverty level and there is low higher ed attendance + # Source: Census's American Community Survey + + climate_eligibility_columns = [ + field_names.EXPECTED_POPULATION_LOSS_RATE_LOW_INCOME_FIELD, + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_LOW_INCOME_FIELD, + field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_FIELD, + field_names.HIGH_FUTURE_FLOOD_RISK_LOW_INCOME_FIELD, + field_names.HIGH_FUTURE_WILDFIRE_RISK_LOW_INCOME_FIELD, + ] + + # TODO: When we refactor this... it's the same code over and over and over again + # We should make a function, _get_all_columns(), that returns all three of these columns + + self.df[ + field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD + ] = ( + self.df[ + field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[ + field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD + ] = ( + self.df[ + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD] = ( + self.df[ + field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.HIGH_FUTURE_FLOOD_RISK_FIELD] = ( + self.df[ + field_names.FUTURE_FLOOD_RISK_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.HIGH_FUTURE_WILDFIRE_RISK_FIELD] = ( + self.df[ + field_names.FUTURE_WILDFIRE_RISK_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.CLIMATE_THRESHOLD_EXCEEDED] = ( + self.df[ + field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD + ] + | self.df[ + field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD + ] + | self.df[ + field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD + ] + | self.df[field_names.HIGH_FUTURE_WILDFIRE_RISK_FIELD] + | self.df[field_names.HIGH_FUTURE_FLOOD_RISK_FIELD] + ) + + self.df[field_names.EXPECTED_POPULATION_LOSS_RATE_LOW_INCOME_FIELD] = ( + self.df[ + field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD + ] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.EXPECTED_AGRICULTURE_LOSS_RATE_LOW_INCOME_FIELD] = ( + self.df[ + field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD + ] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.EXPECTED_BUILDING_LOSS_RATE_LOW_INCOME_FIELD] = ( + self.df[field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.HIGH_FUTURE_FLOOD_RISK_LOW_INCOME_FIELD] = ( + self.df[field_names.HIGH_FUTURE_FLOOD_RISK_FIELD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.HIGH_FUTURE_WILDFIRE_RISK_LOW_INCOME_FIELD] = ( + self.df[field_names.HIGH_FUTURE_WILDFIRE_RISK_FIELD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self._increment_total_eligibility_exceeded( + climate_eligibility_columns, + skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS, + ) + + return self.df[climate_eligibility_columns].any(axis="columns") + + def _energy_factor(self) -> bool: + # In Xth percentile or above for DOEā€™s energy cost burden score (Source: LEAD Score) + # AND + # Low income: In Nth percentile or above for percent of block group population + # of households where household income is less than or equal to twice the federal + # poverty level and has low higher ed attendance. + # Source: Census's American Community Survey + + energy_eligibility_columns = [ + field_names.PM25_EXPOSURE_LOW_INCOME_FIELD, + field_names.ENERGY_BURDEN_LOW_INCOME_FIELD, + ] + + self.df[field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD] = ( + self.df[ + field_names.ENERGY_BURDEN_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.PM25_EXCEEDS_PCTILE_THRESHOLD] = ( + self.df[ + field_names.PM25_FIELD + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.ENERGY_THRESHOLD_EXCEEDED] = ( + self.df[field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD] + | self.df[field_names.PM25_EXCEEDS_PCTILE_THRESHOLD] + ) + + self.df[field_names.PM25_EXPOSURE_LOW_INCOME_FIELD] = ( + self.df[field_names.PM25_EXCEEDS_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.ENERGY_BURDEN_LOW_INCOME_FIELD] = ( + self.df[field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self._increment_total_eligibility_exceeded( + energy_eligibility_columns, + skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS, + ) + + return self.df[energy_eligibility_columns].any(axis="columns") + + def _transportation_factor(self) -> bool: + # In Xth percentile or above for diesel particulate matter (Source: EPA National Air Toxics Assessment (NATA) + # or + # In Xth percentile or above for PM 2.5 (Source: EPA, Office of Air and Radiation (OAR) fusion of model and monitor data)] + # or + # In Xth percentile or above traffic proximity and volume (Source: 2017 U.S. Department of Transportation (DOT) traffic data + # or + # In Xth percentile or above for DOT Travel Disadvantage + # AND + # Low income: In Nth percentile or above for percent of block group population + # of households where household income is less than or equal to twice the federal + # poverty level and has a low percent of higher ed students. + # Source: Census's American Community Survey + + transportion_eligibility_columns = [ + field_names.DIESEL_PARTICULATE_MATTER_LOW_INCOME_FIELD, + field_names.TRAFFIC_PROXIMITY_LOW_INCOME_FIELD, + field_names.DOT_TRAVEL_BURDEN_LOW_INCOME_FIELD, + ] + + self.df[field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD] = ( + self.df[ + field_names.DIESEL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.DOT_BURDEN_PCTILE_THRESHOLD] = ( + self.df[ + field_names.DOT_TRAVEL_BURDEN_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD] = ( + self.df[ + field_names.TRAFFIC_FIELD + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.TRAFFIC_THRESHOLD_EXCEEDED] = ( + self.df[field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD] + | self.df[field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD] + | self.df[field_names.DOT_BURDEN_PCTILE_THRESHOLD] + ) + + self.df[field_names.DIESEL_PARTICULATE_MATTER_LOW_INCOME_FIELD] = ( + self.df[field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.TRAFFIC_PROXIMITY_LOW_INCOME_FIELD] = ( + self.df[field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.DOT_TRAVEL_BURDEN_LOW_INCOME_FIELD] = ( + self.df[field_names.DOT_BURDEN_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self._increment_total_eligibility_exceeded( + transportion_eligibility_columns, + skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS, + ) + + return self.df[transportion_eligibility_columns].any(axis="columns") + + def _housing_factor(self) -> bool: + # ( + # In Xth percentile or above for lead paint (Source: Census's American Community Surveyā€™s + # percent of housing units built pre-1960, used as an indicator of potential lead paint exposure in homes) + # AND + # In Yth percentile or below for Median House Value (Source: Census's American Community Survey) + # ) + # or + # In Xth percentile or above for housing cost burden (Source: HUD's Comprehensive Housing Affordability Strategy dataset + # AND + # Low income: In Nth percentile or above for percent of block group population + # of households where household income is less than or equal to twice the federal + # poverty level and has a low percent of higher ed students. + # Source: Census's American Community Survey + + ## Additionally, we look to see if HISTORIC_REDLINING_SCORE_EXCEEDED is True and the tract is also low income + + housing_eligibility_columns = [ + field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD, + field_names.HOUSING_BURDEN_LOW_INCOME_FIELD, + field_names.HISTORIC_REDLINING_SCORE_EXCEEDED_LOW_INCOME_FIELD, + field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_LOW_INCOME_FIELD, + field_names.NON_NATURAL_LOW_INCOME_FIELD_NAME, + ] + + # Historic disinvestment + self.df[ + field_names.HISTORIC_REDLINING_SCORE_EXCEEDED_LOW_INCOME_FIELD + ] = ( + self.df[field_names.HISTORIC_REDLINING_SCORE_EXCEEDED] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + # Kitchen / plumbing + self.df[field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD] = ( + self.df[ + field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_LOW_INCOME_FIELD] = ( + self.df[field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + # Lead paint + self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD] = ( + self.df[ + field_names.LEAD_PAINT_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) & ( + self.df[ + field_names.MEDIAN_HOUSE_VALUE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + <= self.MEDIAN_HOUSE_VALUE_THRESHOLD + ) + + self.df[field_names.LEAD_PAINT_MEDIAN_HOUSE_VALUE_LOW_INCOME_FIELD] = ( + self.df[field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + # Housing burden + self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD] = ( + self.df[ + field_names.HOUSING_BURDEN_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + self.df[field_names.HOUSING_BURDEN_LOW_INCOME_FIELD] = ( + self.df[field_names.HOUSING_BURDEN_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + # High non-natural space + self.df[field_names.NON_NATURAL_PCTILE_THRESHOLD] = ( + self.df[ + field_names.TRACT_PERCENT_NON_NATURAL_FIELD_NAME + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + self.df[field_names.NON_NATURAL_LOW_INCOME_FIELD_NAME] = ( + self.df[field_names.NON_NATURAL_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + # any of the burdens + self.df[field_names.HOUSING_THREHSOLD_EXCEEDED] = self.df[ + housing_eligibility_columns + ].any(axis="columns") + + self._increment_total_eligibility_exceeded( + housing_eligibility_columns, + skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS, + ) + + return self.df[field_names.HOUSING_THREHSOLD_EXCEEDED] + + def _pollution_factor(self) -> bool: + # Proximity to Risk Management Plan sites is > X + # AND + # Low income: In Nth percentile or above for percent of block group population + # of households where household income is less than or equal to twice the federal + # poverty level and has a low percent of higher ed students. + # Source: Census's American Community Survey + + pollution_eligibility_columns = [ + field_names.RMP_LOW_INCOME_FIELD, + field_names.SUPERFUND_LOW_INCOME_FIELD, + field_names.HAZARDOUS_WASTE_LOW_INCOME_FIELD, + field_names.AML_LOW_INCOME_FIELD, + field_names.ELIGIBLE_FUDS_LOW_INCOME_FIELD, + ] + + self.df[field_names.RMP_PCTILE_THRESHOLD] = ( + self.df[field_names.RMP_FIELD + field_names.PERCENTILE_FIELD_SUFFIX] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.NPL_PCTILE_THRESHOLD] = ( + self.df[field_names.NPL_FIELD + field_names.PERCENTILE_FIELD_SUFFIX] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.TSDF_PCTILE_THRESHOLD] = ( + self.df[ + field_names.TSDF_FIELD + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.ELIGIBLE_FUDS_FILLED_IN_FIELD_NAME] = self.df[ + field_names.ELIGIBLE_FUDS_BINARY_FIELD_NAME + ].fillna(False) + + self.df[field_names.AML_BOOLEAN_FILLED_IN] = self.df[ + field_names.AML_BOOLEAN + ].fillna(False) + + self.df[field_names.POLLUTION_THRESHOLD_EXCEEDED] = self.df[ + [ + field_names.RMP_PCTILE_THRESHOLD, + field_names.NPL_PCTILE_THRESHOLD, + field_names.TSDF_PCTILE_THRESHOLD, + field_names.AML_BOOLEAN_FILLED_IN, + field_names.ELIGIBLE_FUDS_FILLED_IN_FIELD_NAME, + ] + ].any(axis="columns") + + # individual series-by-series + self.df[field_names.RMP_LOW_INCOME_FIELD] = ( + self.df[field_names.RMP_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + self.df[field_names.SUPERFUND_LOW_INCOME_FIELD] = ( + self.df[field_names.NPL_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + self.df[field_names.HAZARDOUS_WASTE_LOW_INCOME_FIELD] = ( + self.df[field_names.TSDF_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.AML_LOW_INCOME_FIELD] = ( + self.df[field_names.AML_BOOLEAN_FILLED_IN] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.ELIGIBLE_FUDS_LOW_INCOME_FIELD] = ( + self.df[field_names.ELIGIBLE_FUDS_BINARY_FIELD_NAME] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self._increment_total_eligibility_exceeded( + pollution_eligibility_columns, + skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS, + ) + + return self.df[pollution_eligibility_columns].any(axis="columns") + + def _water_factor(self) -> bool: + # In Xth percentile or above for wastewater discharge (Source: EPA Risk-Screening Environmental Indicators (RSEI) Model) + # AND + # Low income: In Nth percentile or above for percent of block group population + # of households where household income is less than or equal to twice the federal + # poverty level and has a low percent of higher ed students + # Source: Census's American Community Survey + + eligibility_columns = [ + field_names.WASTEWATER_DISCHARGE_LOW_INCOME_FIELD, + field_names.UST_LOW_INCOME_FIELD, + ] + + self.df[field_names.WASTEWATER_PCTILE_THRESHOLD] = ( + self.df[ + field_names.WASTEWATER_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + self.df[field_names.UST_PCTILE_THRESHOLD] = ( + self.df[field_names.UST_FIELD + field_names.PERCENTILE_FIELD_SUFFIX] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.WASTEWATER_DISCHARGE_LOW_INCOME_FIELD] = ( + self.df[field_names.WASTEWATER_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self.df[field_names.UST_LOW_INCOME_FIELD] = ( + self.df[field_names.UST_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self._increment_total_eligibility_exceeded( + eligibility_columns, + skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS, + ) + + self.df[field_names.WATER_THRESHOLD_EXCEEDED] = self.df[ + eligibility_columns + ].any(axis=1) + + return self.df[field_names.WATER_THRESHOLD_EXCEEDED] + + def _health_factor(self) -> bool: + # In Xth percentile or above for diabetes (Source: CDC Places) + # or + # In Xth percentile or above for asthma (Source: CDC Places) + # or + # In Xth percentile or above for heart disease + # or + # In Xth percentile or above for low life expectancy (Source: CDC Places) + # AND + # Low income: In Nth percentile or above for percent of block group population + # of households where household income is less than or equal to twice the federal + # poverty level and has a low percent of higher ed students + # Source: Census's American Community Survey + + health_eligibility_columns = [ + field_names.DIABETES_LOW_INCOME_FIELD, + field_names.ASTHMA_LOW_INCOME_FIELD, + field_names.HEART_DISEASE_LOW_INCOME_FIELD, + field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_FIELD, + ] + + self.df[field_names.DIABETES_PCTILE_THRESHOLD] = ( + self.df[ + field_names.DIABETES_FIELD + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.ASTHMA_PCTILE_THRESHOLD] = ( + self.df[ + field_names.ASTHMA_FIELD + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.HEART_DISEASE_PCTILE_THRESHOLD] = ( + self.df[ + field_names.HEART_DISEASE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD] = ( + self.df[ + field_names.LOW_LIFE_EXPECTANCY_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.HEALTH_THRESHOLD_EXCEEDED] = ( + ( + self.df[field_names.DIABETES_PCTILE_THRESHOLD] + | self.df[field_names.ASTHMA_PCTILE_THRESHOLD] + ) + | self.df[field_names.HEART_DISEASE_PCTILE_THRESHOLD] + ) | self.df[field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD] + + self.df[field_names.DIABETES_LOW_INCOME_FIELD] = ( + self.df[field_names.DIABETES_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + self.df[field_names.ASTHMA_LOW_INCOME_FIELD] = ( + self.df[field_names.ASTHMA_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + self.df[field_names.HEART_DISEASE_LOW_INCOME_FIELD] = ( + self.df[field_names.HEART_DISEASE_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + self.df[field_names.LOW_LIFE_EXPECTANCY_LOW_INCOME_FIELD] = ( + self.df[field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD] + & self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] + ) + + self._increment_total_eligibility_exceeded( + health_eligibility_columns, + skip_fips=constants.DROP_FIPS_FROM_NON_WTD_THRESHOLDS, + ) + + return self.df[health_eligibility_columns].any(axis="columns") + + def _workforce_factor(self) -> bool: + # Where unemployment is above Xth percentile + # or + # Where median income as a percent of area median income is above Xth percentile + # or + # Where the percent of households at or below 100% of the federal poverty level + # is above Xth percentile + # or + # Where linguistic isolation is above Xth percentile (except PR) + # AND + # Where the high school degree achievement rates for adults 25 years and older + # is less than Y% + # AND the higher ed attendance rates are under Z% + # (necessary to screen out university tracts) + + # Workforce criteria for states fields. + workforce_eligibility_columns = [ + field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, + field_names.POVERTY_LOW_HS_EDUCATION_FIELD, + field_names.LINGUISTIC_ISOLATION_LOW_HS_EDUCATION_FIELD, + field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, + ] + + pr_workforce_eligibility_columns = [ + field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, + field_names.POVERTY_LOW_HS_EDUCATION_FIELD, + field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, + ] + + self.df[field_names.LOW_HS_EDUCATION_FIELD] = ( + self.df[field_names.HIGH_SCHOOL_ED_FIELD] + >= self.LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD + ) + self.df[field_names.UNEMPLOYMENT_PCTILE_THRESHOLD] = ( + self.df[ + field_names.UNEMPLOYMENT_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] = ( + self.df[ + field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD] = ( + self.df[ + field_names.LINGUISTIC_ISO_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.POVERTY_PCTILE_THRESHOLD] = ( + self.df[ + field_names.POVERTY_LESS_THAN_100_FPL_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.LINGUISTIC_ISOLATION_LOW_HS_EDUCATION_FIELD] = ( + self.df[field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD] + & self.df[field_names.LOW_HS_EDUCATION_FIELD] + ) + + self.df[field_names.POVERTY_LOW_HS_EDUCATION_FIELD] = ( + self.df[field_names.POVERTY_PCTILE_THRESHOLD] + & self.df[field_names.LOW_HS_EDUCATION_FIELD] + ) + + self.df[field_names.LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD] = ( + self.df[field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] + & self.df[field_names.LOW_HS_EDUCATION_FIELD] + ) + + self.df[field_names.UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD] = ( + self.df[field_names.UNEMPLOYMENT_PCTILE_THRESHOLD] + & self.df[field_names.LOW_HS_EDUCATION_FIELD] + ) + + self.df[field_names.WORKFORCE_THRESHOLD_EXCEEDED] = ( + ## First we calculate for the non-island areas + ( + ( + self.df[field_names.POVERTY_PCTILE_THRESHOLD] + | self.df[field_names.UNEMPLOYMENT_PCTILE_THRESHOLD] + ) + | self.df[field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] + ) + | ( + self.df[field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD] + & ( + self.df[field_names.GEOID_TRACT_FIELD].str[:2] + != constants.TILES_PUERTO_RICO_FIPS_CODE[0] + ) + ) + ) + + # Use only PR combined criteria for rows with PR FIPS code; + # otherwise use all criteria. + workforce_combined_criteria_for_states = ( + ( + self.df[field_names.GEOID_TRACT_FIELD].str[:2] + == constants.TILES_PUERTO_RICO_FIPS_CODE[0] + ) + & self.df[pr_workforce_eligibility_columns].any(axis="columns") + ) | ( + ( + self.df[field_names.GEOID_TRACT_FIELD].str[:2] + != constants.TILES_PUERTO_RICO_FIPS_CODE[0] + ) + & self.df[workforce_eligibility_columns].any(axis="columns") + ) + + self._increment_total_eligibility_exceeded( + workforce_eligibility_columns + ) + + # Now, calculate workforce criteria for island territories. + island_areas_workforce_eligibility_columns = [ + field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD, + field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD, + field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD, + ] + + # First, combine unemployment. + # This will include an adjusted percentile column for the island areas + # to be used by the front end. + ( + self.df, + island_areas_unemployment_criteria_field_name, + ) = self._combine_island_areas_with_states_and_set_thresholds( + df=self.df, + column_from_island_areas=field_names.CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009, + column_from_decennial_census=field_names.CENSUS_UNEMPLOYMENT_FIELD_2010, + combined_column_name=field_names.COMBINED_UNEMPLOYMENT_2010, + threshold_cutoff_for_island_areas=self.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + + # TODO: Remove this, it's for checking only + assert ( + island_areas_unemployment_criteria_field_name + == field_names.ISLAND_UNEMPLOYMENT_PCTILE_THRESHOLD + ), "Error combining island columns" + + # Next, combine poverty. + # This will include an adjusted percentile column for the island areas + # to be used by the front end. + ( + self.df, + island_areas_poverty_criteria_field_name, + ) = self._combine_island_areas_with_states_and_set_thresholds( + df=self.df, + column_from_island_areas=field_names.CENSUS_DECENNIAL_POVERTY_LESS_THAN_100_FPL_FIELD_2009, + column_from_decennial_census=field_names.CENSUS_POVERTY_LESS_THAN_100_FPL_FIELD_2010, + combined_column_name=field_names.COMBINED_POVERTY_LESS_THAN_100_FPL_FIELD_2010, + threshold_cutoff_for_island_areas=self.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + + # TODO: Remove this, it's for checking only + assert ( + island_areas_poverty_criteria_field_name + == field_names.ISLAND_POVERTY_PCTILE_THRESHOLD + ), "Error combining island columns" + + # Also check whether low area median income is 90th percentile or higher + # within the islands. + + # Note that because the field for low median does not have to be combined, + # unlike the other fields, we do not need to create a new percentile + # column. This code should probably be refactored when (TODO) we do the big + # refactor. + self.df[field_names.ISLAND_LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] = ( + self.df[ + field_names.LOW_CENSUS_DECENNIAL_AREA_MEDIAN_INCOME_PERCENT_FIELD_2009 + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + + self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] = ( + self.df[field_names.CENSUS_DECENNIAL_HIGH_SCHOOL_ED_FIELD_2009] + >= self.LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD + ) + + self.df[ + field_names.ISLAND_AREAS_UNEMPLOYMENT_LOW_HS_EDUCATION_FIELD + ] = ( + self.df[island_areas_unemployment_criteria_field_name] + & self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] + ) + + self.df[field_names.ISLAND_AREAS_POVERTY_LOW_HS_EDUCATION_FIELD] = ( + self.df[island_areas_poverty_criteria_field_name] + & self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] + ) + + self.df[ + field_names.ISLAND_AREAS_LOW_MEDIAN_INCOME_LOW_HS_EDUCATION_FIELD + ] = ( + self.df[field_names.ISLAND_LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] + & self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] + ) + + workforce_combined_criteria_for_island_areas = self.df[ + island_areas_workforce_eligibility_columns + ].any(axis="columns") + + self._increment_total_eligibility_exceeded( + island_areas_workforce_eligibility_columns + ) + + percent_of_island_tracts_highlighted = ( + 100 + * workforce_combined_criteria_for_island_areas.sum() + # Choosing a random column from island areas to calculate the denominator. + / self.df[field_names.CENSUS_DECENNIAL_UNEMPLOYMENT_FIELD_2009] + .notnull() + .sum() + ) + + logger.info( + f"For workforce criteria in island areas, " + f"{workforce_combined_criteria_for_island_areas.sum()} (" + f"{percent_of_island_tracts_highlighted:.2f}% of tracts that have non-null data " + f"in the column) have a value of TRUE." + ) + + # Because these criteria are calculated differently for the islands, we also calculate the + # thresholds to pass to the FE slightly differently + # If it's PR, we don't use linguistic isolation. + + self.df[field_names.WORKFORCE_THRESHOLD_EXCEEDED] = ( + ## First we calculate for the non-island areas + ( + ( + self.df[field_names.POVERTY_PCTILE_THRESHOLD] + | self.df[field_names.UNEMPLOYMENT_PCTILE_THRESHOLD] + ) + | self.df[field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] + ) + | ( + self.df[field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD] + & ( + self.df[field_names.GEOID_TRACT_FIELD].str[:2] + != constants.TILES_PUERTO_RICO_FIPS_CODE[0] + ) + ) + ) | ( + ## then we calculate just for the island areas + ( + self.df[field_names.ISLAND_UNEMPLOYMENT_PCTILE_THRESHOLD] + | self.df[field_names.ISLAND_POVERTY_PCTILE_THRESHOLD] + ) + | self.df[field_names.ISLAND_LOW_MEDIAN_INCOME_PCTILE_THRESHOLD] + ) + + # Because of the island complications, we also have to separately calculate the threshold for + # socioeconomic thresholds + self.df[field_names.WORKFORCE_SOCIO_INDICATORS_EXCEEDED] = ( + self.df[field_names.ISLAND_AREAS_LOW_HS_EDUCATION_FIELD] + | self.df[field_names.LOW_HS_EDUCATION_FIELD] + ) + + # A tract is included if it meets either the states tract criteria or the + # island areas tract criteria. + return ( + workforce_combined_criteria_for_states + | workforce_combined_criteria_for_island_areas + ) + + def _mark_donut_hole_tracts(self) -> pd.DataFrame: + """Mark tracts that do not qualify on their own, but are surrounded by those that do + + A donut hole is a tract surrounded by tracts that are marked for inclusion + by the scoring system AND meet a less stringent low-income threshhold. + + We calculate "donut holes" after the initial score generation + """ + logger.info("Marking donut hole tracts") + + # This is the boolean we pass to the front end for the donut-hole-specific + # low income criterion + self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED_DONUTS] = ( + self.df[ + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.LOW_INCOME_THRESHOLD_DONUT + ) + + self.df = self.df.merge( + calculate_tract_adjacency_scores( + self.df, field_names.SCORE_N_COMMUNITIES + ), + how="left", + on=field_names.GEOID_TRACT_FIELD, + ) + + # This is the boolean we pass to the front end for color + self.df[field_names.ADJACENT_TRACT_SCORE_ABOVE_DONUT_THRESHOLD] = ( + self.df[ + ( + field_names.SCORE_N_COMMUNITIES + + field_names.ADJACENCY_INDEX_SUFFIX + ) + ] + >= self.SCORE_THRESHOLD_DONUT + ) + + # This constructs the boolean for whether it's a donut hole community + # This can also be true when the tract itself is a DAC on its own + self.df[ + field_names.SCORE_N_COMMUNITIES + field_names.ADJACENT_MEAN_SUFFIX + ] = ( + self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED_DONUTS] + & self.df[field_names.ADJACENT_TRACT_SCORE_ABOVE_DONUT_THRESHOLD] + ) + + # This should be the "final list" of Score Narwhal communities, meaning that we would + # expect this to be True if either the tract is a donut hole community OR the tract is a DAC + self.df[field_names.FINAL_SCORE_N_BOOLEAN] = ( + self.df[field_names.SCORE_N_COMMUNITIES] + | self.df[ + field_names.SCORE_N_COMMUNITIES + + field_names.ADJACENT_MEAN_SUFFIX + ] + ) + + def _mark_tribal_dacs(self) -> None: + """Per the October 7th compromise (#1988), + tracts that are approx 100% tribal are Score N communities. + """ + self.df[field_names.SCORE_N_COMMUNITIES] = np.where( + self.df[field_names.IS_TRIBAL_DAC], + True, + self.df[field_names.SCORE_N_COMMUNITIES], + ) + + def _get_percent_of_tract_that_is_dac(self) -> float: + """Per the October 7th compromise (#1988), + tracts can be partially DACs if some portion of the tract is tribal land. + + Rules are as follows: + If a tract is a SCORE_N_COMMUNITY, it is 100% a DAC + If a tract is not, but contains tribal land, the percent that is tribal land is a DAC. + """ + tribal_percent = self.df[ + field_names.PERCENT_OF_TRIBAL_AREA_IN_TRACT + ].fillna(0.0) + return np.where( + self.df[field_names.FINAL_SCORE_N_BOOLEAN], + 1.0, + tribal_percent, + ) + + def add_columns(self) -> pd.DataFrame: + logger.info("Adding Score Narhwal") + self.df[field_names.THRESHOLD_COUNT] = 0 + + self.df[field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED] = ( + self.df[ + # UPDATE: Pull the imputed poverty statistic + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ] + >= self.LOW_INCOME_THRESHOLD + ) + + self.df[field_names.N_CLIMATE] = self._climate_factor() + self.df[field_names.N_ENERGY] = self._energy_factor() + self.df[field_names.N_TRANSPORTATION] = self._transportation_factor() + self.df[field_names.N_HOUSING] = self._housing_factor() + self.df[field_names.N_POLLUTION] = self._pollution_factor() + self.df[field_names.N_WATER] = self._water_factor() + self.df[field_names.N_HEALTH] = self._health_factor() + self.df[field_names.N_WORKFORCE] = self._workforce_factor() + + factors = [ + field_names.N_CLIMATE, + field_names.N_ENERGY, + field_names.N_TRANSPORTATION, + field_names.N_HOUSING, + field_names.N_POLLUTION, + field_names.N_WATER, + field_names.N_HEALTH, + field_names.N_WORKFORCE, + ] + self.df[field_names.CATEGORY_COUNT] = self.df[factors].sum(axis=1) + self.df[field_names.SCORE_N_COMMUNITIES] = self.df[factors].any(axis=1) + self._mark_tribal_dacs() + self.df[ + field_names.SCORE_N_COMMUNITIES + + field_names.PERCENTILE_FIELD_SUFFIX + ] = self.df[field_names.SCORE_N_COMMUNITIES].astype(int) + + self._mark_donut_hole_tracts() + self.df[ + field_names.PERCENT_OF_TRACT_IS_DAC + ] = self._get_percent_of_tract_that_is_dac() + + return self.df diff --git a/data/data-pipeline/data_pipeline/score/score_runner.py b/data/data-pipeline/data_pipeline/score/score_runner.py index b22e2d510..e88c3c29e 100644 --- a/data/data-pipeline/data_pipeline/score/score_runner.py +++ b/data/data-pipeline/data_pipeline/score/score_runner.py @@ -1,17 +1,5 @@ import pandas as pd -from data_pipeline.score.score_a import ScoreA -from data_pipeline.score.score_b import ScoreB -from data_pipeline.score.score_c import ScoreC -from data_pipeline.score.score_d import ScoreD -from data_pipeline.score.score_f import ScoreF -from data_pipeline.score.score_g import ScoreG -from data_pipeline.score.score_h import ScoreH -from data_pipeline.score.score_i import ScoreI -from data_pipeline.score.score_k import ScoreK -from data_pipeline.score.score_l import ScoreL -from data_pipeline.score.score_m import ScoreM -from data_pipeline.score import field_names - +from data_pipeline.score.score_narwhal import ScoreNarwhal from data_pipeline.utils import get_module_logger logger = get_module_logger(__name__) @@ -23,46 +11,6 @@ def __init__(self, df: pd.DataFrame): self.df = df def calculate_scores(self) -> pd.DataFrame: - # Index scores - self.df = ScoreA(df=self.df).add_columns() - self.df = ScoreB(df=self.df).add_columns() - self.df = ScoreC(df=self.df).add_columns() - self.df = ScoreD(df=self.df).add_columns() - self.df = ScoreF(df=self.df).add_columns() - self.df = ScoreG(df=self.df).add_columns() - self.df = ScoreH(df=self.df).add_columns() - self.df = ScoreI(df=self.df).add_columns() - self.df = ScoreK(df=self.df).add_columns() - self.df = ScoreL(df=self.df).add_columns() - self.df = ScoreM(df=self.df).add_columns() - - # TODO do this with each score instead of in a bundle - # Create percentiles for these index scores - self.df = self._add_score_percentiles() - - return self.df - - def _add_score_percentiles(self) -> pd.DataFrame: - logger.info("Adding Score Percentiles") - for score_field in [ - field_names.SCORE_A, - field_names.SCORE_B, - field_names.SCORE_C, - field_names.SCORE_D, - field_names.SCORE_E, - ]: - self.df[ - f"{score_field}{field_names.PERCENTILE_FIELD_SUFFIX}" - ] = self.df[score_field].rank(pct=True) + self.df = ScoreNarwhal(df=self.df).add_columns() - for threshold in [0.25, 0.3, 0.35, 0.4]: - fraction_converted_to_percent = int(100 * threshold) - self.df[ - f"{score_field} (top {fraction_converted_to_percent}th percentile)" - ] = ( - self.df[ - f"{score_field}{field_names.PERCENTILE_FIELD_SUFFIX}" - ] - >= 1 - threshold - ) return self.df diff --git a/data/data-pipeline/data_pipeline/score/utils.py b/data/data-pipeline/data_pipeline/score/utils.py new file mode 100644 index 000000000..5450faf6b --- /dev/null +++ b/data/data-pipeline/data_pipeline/score/utils.py @@ -0,0 +1,56 @@ +"""Utilities to help generate the score.""" +import data_pipeline.score.field_names as field_names +import geopandas as gpd +import pandas as pd +from data_pipeline.etl.sources.geo_utils import get_tract_geojson +from data_pipeline.utils import get_module_logger + +# XXX: @jorge I am torn about the coupling that importing from +# etl.sources vs keeping the code DRY. Thoughts? + +logger = get_module_logger(__name__) + + +def calculate_tract_adjacency_scores( + df: pd.DataFrame, score_column: str +) -> pd.DataFrame: + """Calculate the mean score of each tract in df based on its neighbors + + Args: + df (pandas.DataFrame): A dataframe with at least the following columns: + * field_names.GEOID_TRACT_FIELD + * score_column + + score_column (str): The name of the column that contains the scores + to average + Returns: + df (pandas.DataFrame): A dataframe with two columns: + * field_names.GEOID_TRACT_FIELD + * {score_column}_ADJACENT_MEAN, which is the average of score_column for + each tract that touches the tract identified + in field_names.GEOID_TRACT_FIELD + """ + ORIGINAL_TRACT = "ORIGINAL_TRACT" + logger.debug("Calculating tract adjacency scores") + tract_data = get_tract_geojson() + df: gpd.GeoDataFrame = tract_data.merge( + df, on=field_names.GEOID_TRACT_FIELD + ) + df = df.rename(columns={field_names.GEOID_TRACT_FIELD: ORIGINAL_TRACT}) + + logger.debug("Perfoming spatial join to find all adjacent tracts") + adjacent_tracts: gpd.GeoDataFrame = df.sjoin( + tract_data, predicate="touches" + ) + + logger.debug("Calculating means based on adjacency") + return ( + adjacent_tracts.groupby(field_names.GEOID_TRACT_FIELD)[[score_column]] + .mean() + .reset_index() + .rename( + columns={ + score_column: f"{score_column}{field_names.ADJACENCY_INDEX_SUFFIX}", + } + ) + ) diff --git a/data/data-pipeline/data_pipeline/tests/conftest.py b/data/data-pipeline/data_pipeline/tests/conftest.py index f1dc63ac0..8c68375a0 100644 --- a/data/data-pipeline/data_pipeline/tests/conftest.py +++ b/data/data-pipeline/data_pipeline/tests/conftest.py @@ -3,7 +3,6 @@ from shutil import copyfile import pytest - from data_pipeline.config import settings from data_pipeline.etl.base import ExtractTransformLoad @@ -52,3 +51,16 @@ def mock_etl(monkeypatch, mock_paths) -> None: data_path, tmp_path = mock_paths monkeypatch.setattr(ExtractTransformLoad, "DATA_PATH", data_path) monkeypatch.setattr(ExtractTransformLoad, "TMP_PATH", tmp_path) + + +def pytest_collection_modifyitems(config, items): + keywordexpr = config.option.keyword + markexpr = config.option.markexpr + if keywordexpr or markexpr: + return # let pytest handle this + + smoketest = "smoketest" + skip_mymarker = pytest.mark.skip(reason=f"{smoketest} not selected") + for item in items: + if smoketest in item.keywords: + item.add_marker(skip_mymarker) diff --git a/data/data-pipeline/data_pipeline/tests/score/__init__.py b/data/data-pipeline/data_pipeline/tests/score/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/score/fixtures.py b/data/data-pipeline/data_pipeline/tests/score/fixtures.py new file mode 100644 index 000000000..d591454f8 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/fixtures.py @@ -0,0 +1,230 @@ +import pandas as pd +import pytest +from data_pipeline.config import settings +from data_pipeline.etl.score import constants +from data_pipeline.score.field_names import GEOID_TRACT_FIELD + + +@pytest.fixture(scope="session") +def final_score_df(): + return pd.read_csv( + settings.APP_ROOT / "data" / "score" / "csv" / "full" / "usa.csv", + dtype={GEOID_TRACT_FIELD: str}, + low_memory=False, + ) + + +@pytest.fixture() +def census_acs_df(): + census_acs_csv = constants.DATA_PATH / "dataset" / "census_acs" / "usa.csv" + return pd.read_csv( + census_acs_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def ejscreen_df(): + ejscreen_csv = constants.DATA_PATH / "dataset" / "ejscreen" / "usa.csv" + return pd.read_csv( + ejscreen_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def hud_housing_df(): + hud_housing_csv = ( + constants.DATA_PATH / "dataset" / "hud_housing" / "usa.csv" + ) + return pd.read_csv( + hud_housing_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def cdc_places_df(): + cdc_places_csv = constants.DATA_PATH / "dataset" / "cdc_places" / "usa.csv" + return pd.read_csv( + cdc_places_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def census_acs_median_incomes_df(): + census_acs_median_incomes_csv = ( + constants.DATA_PATH + / "dataset" + / "census_acs_median_income_2019" + / "usa.csv" + ) + return pd.read_csv( + census_acs_median_incomes_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def cdc_life_expectancy_df(): + cdc_life_expectancy_csv = ( + constants.DATA_PATH / "dataset" / "cdc_life_expectancy" / "usa.csv" + ) + return pd.read_csv( + cdc_life_expectancy_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def doe_energy_burden_df(): + doe_energy_burden_csv = ( + constants.DATA_PATH / "dataset" / "doe_energy_burden" / "usa.csv" + ) + return pd.read_csv( + doe_energy_burden_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def national_risk_index_df(): + return pd.read_csv( + constants.DATA_PATH / "dataset" / "national_risk_index" / "usa.csv", + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def dot_travel_disadvantage_df(): + return pd.read_csv( + constants.DATA_PATH / "dataset" / "travel_composite" / "usa.csv", + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def fsf_fire_df(): + return pd.read_csv( + constants.DATA_PATH / "dataset" / "fsf_wildfire_risk" / "usa.csv", + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def fsf_flood_df(): + return pd.read_csv( + constants.DATA_PATH / "dataset" / "fsf_flood_risk" / "usa.csv", + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def nature_deprived_df(): + return pd.read_csv( + constants.DATA_PATH / "dataset" / "nlcd_nature_deprived" / "usa.csv", + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def eamlis_df(): + return pd.read_csv( + constants.DATA_PATH / "dataset" / "eamlis" / "usa.csv", + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def fuds_df(): + return pd.read_csv( + constants.DATA_PATH / "dataset" / "us_army_fuds" / "usa.csv", + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def geocorr_urban_rural_df(): + geocorr_urban_rural_csv = ( + constants.DATA_PATH / "dataset" / "geocorr" / "usa.csv" + ) + return pd.read_csv( + geocorr_urban_rural_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def census_decennial_df(): + census_decennial_csv = ( + constants.DATA_PATH / "dataset" / "census_decennial_2010" / "usa.csv" + ) + return pd.read_csv( + census_decennial_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def census_2010_df(): + census_2010_csv = ( + constants.DATA_PATH / "dataset" / "census_acs_2010" / "usa.csv" + ) + return pd.read_csv( + census_2010_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def hrs_df(): + hrs_csv = constants.DATA_PATH / "dataset" / "historic_redlining" / "usa.csv" + + return pd.read_csv( + hrs_csv, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) + + +@pytest.fixture() +def national_tract_df(): + national_tract_csv = constants.DATA_CENSUS_CSV_FILE_PATH + return pd.read_csv( + national_tract_csv, + names=[GEOID_TRACT_FIELD], + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + header=None, + ) + + +@pytest.fixture() +def tribal_overlap(): + tribal_overlap = ( + constants.DATA_PATH / "dataset" / "tribal_overlap" / "usa.csv" + ) + + return pd.read_csv( + tribal_overlap, + dtype={GEOID_TRACT_FIELD: "string"}, + low_memory=False, + ) diff --git a/data/data-pipeline/data_pipeline/tests/score/test_calculation.py b/data/data-pipeline/data_pipeline/tests/score/test_calculation.py new file mode 100644 index 000000000..f2cb494d3 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/test_calculation.py @@ -0,0 +1,292 @@ +# flake8: noqa: W0613,W0611,F811 +from dataclasses import dataclass + +import pytest +from data_pipeline.score import field_names +from data_pipeline.score.score_narwhal import ScoreNarwhal +from data_pipeline.utils import get_module_logger + +from .fixtures import final_score_df # pylint: disable=unused-import + +logger = get_module_logger(__name__) + +pytestmark = pytest.mark.smoketest + + +@dataclass +class PercentileTestConfig: + percentile_column_name: str + threshold_column_name: str + threshold: float + percentile_column_need_suffix: bool = True + + @property + def full_percentile_column_name(self): + if self.percentile_column_need_suffix: + return ( + self.percentile_column_name + + field_names.PERCENTILE_FIELD_SUFFIX + ) + return self.percentile_column_name + + +def _check_percentile_against_threshold(df, config: PercentileTestConfig): + """Note - for the purpose of testing, this fills with False""" + is_minimum_flagged_ok = ( + df[df[config.threshold_column_name].fillna(False)][ + config.full_percentile_column_name + ].min() + >= config.threshold + ) + + is_maximum_not_flagged_ok = ( + df[~df[config.threshold_column_name].fillna(False)][ + config.full_percentile_column_name + ].max() + < config.threshold + ) + errors = [] + if not is_minimum_flagged_ok: + errors.append( + f"For column {config.threshold_column_name}, there is someone flagged below {config.threshold} percentile!" + ) + if not is_maximum_not_flagged_ok: + errors.append( + f"For column {config.threshold_column_name}, there is someone not flagged above {config.threshold} percentile!" + ) + return errors + + +def test_percentile_columns(final_score_df): + low_income = PercentileTestConfig( + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD, + field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED, + ScoreNarwhal.LOW_INCOME_THRESHOLD, + ) + population_loss = PercentileTestConfig( + field_names.EXPECTED_POPULATION_LOSS_RATE_FIELD, + field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + agricultural_loss = PercentileTestConfig( + field_names.EXPECTED_AGRICULTURE_LOSS_RATE_FIELD, + field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + building_loss = PercentileTestConfig( + field_names.EXPECTED_BUILDING_LOSS_RATE_FIELD, + field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + flood = PercentileTestConfig( + field_names.FUTURE_FLOOD_RISK_FIELD, + field_names.HIGH_FUTURE_FLOOD_RISK_FIELD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + wildfire = PercentileTestConfig( + field_names.FUTURE_WILDFIRE_RISK_FIELD, + field_names.HIGH_FUTURE_WILDFIRE_RISK_FIELD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + low_high_school = PercentileTestConfig( + field_names.HIGH_SCHOOL_ED_FIELD, + field_names.LOW_HS_EDUCATION_FIELD, + ScoreNarwhal.LACK_OF_HIGH_SCHOOL_MINIMUM_THRESHOLD, + percentile_column_need_suffix=False, + ) + donut_hole_income = PercentileTestConfig( + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD, + field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED_DONUTS, + ScoreNarwhal.LOW_INCOME_THRESHOLD_DONUT, + ) + donut_hole_adjacency = PercentileTestConfig( + (field_names.SCORE_N_COMMUNITIES + field_names.ADJACENCY_INDEX_SUFFIX), + field_names.ADJACENT_TRACT_SCORE_ABOVE_DONUT_THRESHOLD, + ScoreNarwhal.SCORE_THRESHOLD_DONUT, + percentile_column_need_suffix=False, + ) + diesel = PercentileTestConfig( + field_names.DIESEL_FIELD, + field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + dot_burden = PercentileTestConfig( + field_names.DOT_TRAVEL_BURDEN_FIELD, + field_names.DOT_BURDEN_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + traffic_proximity = PercentileTestConfig( + field_names.TRAFFIC_FIELD, + field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + energy_burden = PercentileTestConfig( + field_names.ENERGY_BURDEN_FIELD, + field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + pm25 = PercentileTestConfig( + field_names.PM25_FIELD, + field_names.PM25_EXCEEDS_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + kitchen_plumbing = PercentileTestConfig( + field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_FIELD, + field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + # Leadpaint is handled below in a separate method + housing = PercentileTestConfig( + field_names.HOUSING_BURDEN_FIELD, + field_names.HOUSING_BURDEN_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + non_natural_space = PercentileTestConfig( + field_names.TRACT_PERCENT_NON_NATURAL_FIELD_NAME, + field_names.NON_NATURAL_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + rmp = PercentileTestConfig( + field_names.RMP_FIELD, + field_names.RMP_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + npl = PercentileTestConfig( + field_names.NPL_FIELD, + field_names.NPL_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + tsdf = PercentileTestConfig( + field_names.TSDF_FIELD, + field_names.TSDF_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + wastewater = PercentileTestConfig( + field_names.WASTEWATER_FIELD, + field_names.WASTEWATER_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + ust = PercentileTestConfig( + field_names.UST_FIELD, + field_names.UST_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + diabetes = PercentileTestConfig( + field_names.DIABETES_FIELD, + field_names.DIABETES_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + asthma = PercentileTestConfig( + field_names.ASTHMA_FIELD, + field_names.ASTHMA_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + heart_disease = PercentileTestConfig( + field_names.HEART_DISEASE_FIELD, + field_names.HEART_DISEASE_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + low_life_expectancy = PercentileTestConfig( + field_names.LOW_LIFE_EXPECTANCY_FIELD, + field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + unemployment = PercentileTestConfig( + field_names.UNEMPLOYMENT_FIELD, + field_names.UNEMPLOYMENT_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + low_median_income = PercentileTestConfig( + field_names.LOW_MEDIAN_INCOME_AS_PERCENT_OF_AMI_FIELD, + field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + linguist_isolation = PercentileTestConfig( + field_names.LINGUISTIC_ISO_FIELD, + field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + poverty = PercentileTestConfig( + field_names.POVERTY_LESS_THAN_100_FPL_FIELD, + field_names.POVERTY_PCTILE_THRESHOLD, + ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD, + ) + errors = [] + for threshhold_config in ( + low_income, + population_loss, + agricultural_loss, + building_loss, + flood, + wildfire, + low_high_school, + donut_hole_income, + donut_hole_adjacency, + dot_burden, + diesel, + traffic_proximity, + energy_burden, + pm25, + kitchen_plumbing, + housing, + non_natural_space, + rmp, + npl, + tsdf, + wastewater, + ust, + diabetes, + asthma, + heart_disease, + low_life_expectancy, + unemployment, + low_median_income, + linguist_isolation, + poverty, + ): + errors.extend( + _check_percentile_against_threshold( + final_score_df, threshhold_config + ) + ) + error_text = "\n".join(errors) + assert not errors, error_text + + +def test_lead_paint_indicator( + final_score_df, +): + """We need special logic here because this is a combined threshold, so we need this test to have two parts. + + 1. We construct our own threshold columns + 2. We make sure it's the same as the threshold column in the dataframe + """ + lead_pfs = ( + field_names.LEAD_PAINT_FIELD + field_names.PERCENTILE_FIELD_SUFFIX + ) + home_val_pfs = ( + field_names.MEDIAN_HOUSE_VALUE_FIELD + + field_names.PERCENTILE_FIELD_SUFFIX + ) + combined_proxy_boolean = field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD + + tmp_lead_threshold = ( + final_score_df[lead_pfs] >= ScoreNarwhal.ENVIRONMENTAL_BURDEN_THRESHOLD + ) + tmp_mhv_threshold = ( + final_score_df[home_val_pfs] + <= ScoreNarwhal.MEDIAN_HOUSE_VALUE_THRESHOLD + ) + + true_combined_proxy = tmp_lead_threshold & tmp_mhv_threshold + + assert ( + tmp_mhv_threshold.sum() > 0 + ), "MHV threshold alone does not capture any homes" + + assert final_score_df[combined_proxy_boolean].equals( + true_combined_proxy + ), "Lead proxy calculated improperly" + assert ( + tmp_lead_threshold.sum() > true_combined_proxy.sum() + ), "House value is not further limiting this proxy" diff --git a/data/data-pipeline/data_pipeline/tests/score/test_output.py b/data/data-pipeline/data_pipeline/tests/score/test_output.py new file mode 100644 index 000000000..cb9f8d5cc --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/test_output.py @@ -0,0 +1,473 @@ +# flake8: noqa: W0613,W0611,F811, +# pylint: disable=unused-import,too-many-arguments +from dataclasses import dataclass +from typing import List + +import numpy as np +import pandas as pd +import pytest +from data_pipeline.etl.score import constants +from data_pipeline.etl.score.constants import TILES_ISLAND_AREA_FIPS_CODES +from data_pipeline.score import field_names +from data_pipeline.score.field_names import GEOID_TRACT_FIELD + +from .fixtures import cdc_life_expectancy_df # noqa +from .fixtures import cdc_places_df # noqa +from .fixtures import census_2010_df # noqa +from .fixtures import census_acs_df # noqa +from .fixtures import census_acs_median_incomes_df # noqa +from .fixtures import census_decennial_df # noqa +from .fixtures import doe_energy_burden_df # noqa +from .fixtures import dot_travel_disadvantage_df # noqa +from .fixtures import eamlis_df # noqa +from .fixtures import ejscreen_df # noqa +from .fixtures import final_score_df # noqa +from .fixtures import fsf_fire_df # noqa +from .fixtures import fuds_df # noqa +from .fixtures import geocorr_urban_rural_df # noqa +from .fixtures import hrs_df # noqa +from .fixtures import hud_housing_df # noqa +from .fixtures import national_risk_index_df # noqa +from .fixtures import national_tract_df # noqa +from .fixtures import nature_deprived_df # noqa +from .fixtures import tribal_overlap # noqa + +pytestmark = pytest.mark.smoketest +UNMATCHED_TRACT_THRESHOLD = 1000 + + +def _helper_test_count_exceeding_threshold(df, col, error_check=1000): + """Fills NA with False""" + return df[df[col].fillna(False)].shape[0] >= error_check + + +def _helper_single_threshold_test(df, col, socioeconomic_column, score_column): + """Note that this fills nulls in the threshold column where nulls exist""" + nulls_dont_exist = ( + df[df[col].fillna(False) & df[socioeconomic_column]][score_column] + .isna() + .sum() + == 0 + ) + only_trues = df[df[col].fillna(False) & df[socioeconomic_column]][ + score_column + ].min() + return nulls_dont_exist, only_trues + + +@dataclass +class ThresholdTestConfig: + name: str + threshhold_columns: List[str] + ses_column_name: str = field_names.FPL_200_SERIES_IMPUTED_AND_ADJUSTED + score_column_name: str = field_names.SCORE_N_COMMUNITIES + + @property + def error_message(self): + return f"Eligibility columns have an error, {self.name}" + + +def check_for_threshhold_errors( + df: pd.DataFrame, config: ThresholdTestConfig +) -> List[str]: + errors = [] + for col in config.threshhold_columns: + nulls_dont_exist, only_trues = _helper_single_threshold_test( + df, + col, + config.ses_column_name, + config.score_column_name, + ) + proper_threshold_identification = ( + _helper_test_count_exceeding_threshold(df, col) + ) + if not nulls_dont_exist: + errors.append( + f"For {col}, threshold is not calculated right -- there are NaNs in Score" + ) + if not only_trues: + errors.append( + f"For {col} and {config.ses_column_name}, threshold is not calculated right " + f"-- there are Falses where there should only be Trues" + ) + if not proper_threshold_identification: + errors.append( + f"Threshold {col} returns too few tracts, are you sure it's nationally-representative?" + ) + if errors: + errors.append(config.error_message) + return errors + + +def test_threshholds(final_score_df): + climate_thresholds = ThresholdTestConfig( + "climate", + [ + field_names.EXPECTED_POPULATION_LOSS_EXCEEDS_PCTILE_THRESHOLD, + field_names.EXPECTED_AGRICULTURAL_LOSS_EXCEEDS_PCTILE_THRESHOLD, + field_names.EXPECTED_BUILDING_LOSS_EXCEEDS_PCTILE_THRESHOLD, + field_names.HIGH_FUTURE_FLOOD_RISK_FIELD, + field_names.HIGH_FUTURE_WILDFIRE_RISK_FIELD, + ], + ) + energy_thresholds = ThresholdTestConfig( + "energy", + [ + field_names.ENERGY_BURDEN_EXCEEDS_PCTILE_THRESHOLD, + field_names.PM25_EXCEEDS_PCTILE_THRESHOLD, + ], + ) + transportation_thresholds = ThresholdTestConfig( + "transportation", + [ + field_names.DIESEL_EXCEEDS_PCTILE_THRESHOLD, + field_names.DOT_BURDEN_PCTILE_THRESHOLD, + field_names.TRAFFIC_PROXIMITY_PCTILE_THRESHOLD, + ], + ) + housing_thresholds = ThresholdTestConfig( + "housing", + [ + field_names.HISTORIC_REDLINING_SCORE_EXCEEDED, + field_names.NO_KITCHEN_OR_INDOOR_PLUMBING_PCTILE_THRESHOLD, + field_names.LEAD_PAINT_PROXY_PCTILE_THRESHOLD, + field_names.HOUSING_BURDEN_PCTILE_THRESHOLD, + field_names.NON_NATURAL_PCTILE_THRESHOLD, + ], + ) + pollution_thresholds = ThresholdTestConfig( + "pollution", + [ + field_names.RMP_PCTILE_THRESHOLD, + field_names.NPL_PCTILE_THRESHOLD, + field_names.TSDF_PCTILE_THRESHOLD, + field_names.AML_BOOLEAN, + field_names.ELIGIBLE_FUDS_BINARY_FIELD_NAME, + ], + ) + water_thresholds = ThresholdTestConfig( + "water", + [ + field_names.WASTEWATER_PCTILE_THRESHOLD, + field_names.UST_PCTILE_THRESHOLD, + ], + ) + health_thresholds = ThresholdTestConfig( + "health", + [ + field_names.DIABETES_PCTILE_THRESHOLD, + field_names.ASTHMA_PCTILE_THRESHOLD, + field_names.HEART_DISEASE_PCTILE_THRESHOLD, + field_names.LOW_LIFE_EXPECTANCY_PCTILE_THRESHOLD, + ], + ) + workforce_base_thresholds = ThresholdTestConfig( + "workforce (not island areas)", + [ + field_names.UNEMPLOYMENT_PCTILE_THRESHOLD, + field_names.LOW_MEDIAN_INCOME_PCTILE_THRESHOLD, + field_names.LINGUISTIC_ISOLATION_PCTILE_THRESHOLD, + field_names.POVERTY_PCTILE_THRESHOLD, + ], + ses_column_name=field_names.LOW_HS_EDUCATION_FIELD, + ) + errors = [] + for threshhold_config in [ + climate_thresholds, + energy_thresholds, + transportation_thresholds, + housing_thresholds, + pollution_thresholds, + water_thresholds, + health_thresholds, + workforce_base_thresholds, + ]: + errors.extend( + check_for_threshhold_errors(final_score_df, threshhold_config) + ) + error_text = "\n".join(errors) + assert not errors, error_text + + +def test_max_40_percent_DAC(final_score_df): + score_col_with_donuts = field_names.FINAL_SCORE_N_BOOLEAN + total_population_col = field_names.TOTAL_POP_FIELD + assert ( + final_score_df[score_col_with_donuts].isna().sum() == 0 + ), f"Error: {score_col_with_donuts} contains NULLs" + assert ( + final_score_df[final_score_df[score_col_with_donuts]][ + total_population_col + ].sum() + / final_score_df[total_population_col].sum() + ) < 0.4, "Error: the scoring methodology identifies >40% of people in the US as disadvantaged" + assert ( + final_score_df[score_col_with_donuts].sum() > 0 + ), "FYI: You've identified no tracts at all!" + + +def test_donut_hole_addition_to_score_n(final_score_df): + score_col_with_donuts = field_names.FINAL_SCORE_N_BOOLEAN + score_col = field_names.SCORE_N_COMMUNITIES + donut_hole_score_only = ( + field_names.SCORE_N_COMMUNITIES + field_names.ADJACENT_MEAN_SUFFIX + ) + count_donuts = final_score_df[donut_hole_score_only].sum() + count_n = final_score_df[score_col].sum() + count_n_with_donuts = final_score_df[score_col_with_donuts].sum() + new_donuts = final_score_df[ + final_score_df[donut_hole_score_only] & ~final_score_df[score_col] + ].shape[0] + + assert ( + new_donuts + count_n == count_n_with_donuts + ), "The math doesn't work! The number of new donut hole tracts plus score tracts (base) does not equal the total number of tracts identified" + + assert ( + count_donuts < count_n + ), "There are more donut hole tracts than base tracts. How can it be?" + + assert ( + new_donuts > 0 + ), "FYI: The adjacency index is doing nothing. Consider removing it?" + + +def test_data_sources( + final_score_df, + hud_housing_df, + ejscreen_df, + census_acs_df, + cdc_places_df, + census_acs_median_incomes_df, + cdc_life_expectancy_df, + doe_energy_burden_df, + national_risk_index_df, + dot_travel_disadvantage_df, + fsf_fire_df, + nature_deprived_df, + eamlis_df, + fuds_df, + geocorr_urban_rural_df, + census_decennial_df, + census_2010_df, + hrs_df, + tribal_overlap, +): + data_sources = { + key: value for key, value in locals().items() if key != "final_score_df" + } + + # For each data source that's injected via the fixtures, do the following: + # * Ensure at least one column from the source shows up in the score + # * Ensure any tracts NOT in the data source are NA/null in the score + # * Ensure the data source doesn't have a large number of tract IDs that are not + # included in the final score, since that implies the source is using 2020 + # tract IDs + # * Verify that the data from the source that's in the final score output + # is the "equal" to the data from the ETL, allowing for the minor + # differences that come from floating point comparisons + for data_source_name, data_source in data_sources.items(): + final = "_final" + df: pd.DataFrame = final_score_df.merge( + data_source, + on=GEOID_TRACT_FIELD, + indicator="MERGE", + suffixes=(final, f"_{data_source_name}"), + how="outer", + ) + + # Make our lists of columns for later comparison + core_cols = data_source.columns.intersection( + final_score_df.columns + ).drop(GEOID_TRACT_FIELD) + data_source_columns = [f"{col}_{data_source_name}" for col in core_cols] + final_columns = [f"{col}{final}" for col in core_cols] + assert ( + final_columns + ), f"No columns from data source show up in final score in source {data_source_name}" + + # Make sure we have NAs for any tracts in the final data that aren't + # included in the data source + has_additional_non_null_tracts = not np.all( + df[df.MERGE == "left_only"][final_columns].isna() + ) + if has_additional_non_null_tracts: + # We backfill island areas with data from the 2010 census, so if THOSE tracts + # have data beyond the data source, that's to be expected and is fine to pass. + # If some other state or territory does though, this should fail + left_only = df.loc[(df.MERGE == "left_only")] + left_only_has_value = left_only.loc[ + ~df[final_columns].isna().all(axis=1) + ] + fips_with_values = set( + left_only_has_value[field_names.GEOID_TRACT_FIELD].str[0:2] + ) + non_island_fips_codes = fips_with_values.difference( + TILES_ISLAND_AREA_FIPS_CODES + ) + assert not non_island_fips_codes + + # Make sure the datasource doesn't have a ton of unmatched tracts, implying it + # has moved to 2020 tracts + assert len(df[df.MERGE == "right_only"]) < UNMATCHED_TRACT_THRESHOLD + + df = df[df.MERGE == "both"] + + # Compare every column for equality, using close equality for numerics and + # `equals` equality for non-numeric columns + for final_column, data_source_column in zip( + data_source_columns, final_columns + ): + error_message = ( + f"Column {final_column} not equal " + f"between {data_source_name} and final score" + ) + # For non-numeric types, we can use the built-in equals from pandas + if df[final_column].dtype in [ + np.dtype(object), + np.dtype(bool), + np.dtype(str), + ]: + assert df[final_column].equals( + df[data_source_column] + ), error_message + # For numeric sources, use np.close so we don't get harmed by + # float equaity weirdness + else: + assert np.allclose( + df[final_column], + df[data_source_column], + equal_nan=True, + ), error_message + + +def test_island_demographic_backfill(final_score_df, census_decennial_df): + # Copied from score_etl because there's no better source of truth for it + ISLAND_DEMOGRAPHIC_BACKFILL_FIELDS = [ + field_names.PERCENT_BLACK_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_AMERICAN_INDIAN_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_ASIAN_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_HAWAIIAN_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_TWO_OR_MORE_RACES_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_NON_HISPANIC_WHITE_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_HISPANIC_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.PERCENT_OTHER_RACE_FIELD_NAME + + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + field_names.TOTAL_POP_FIELD + field_names.ISLAND_AREA_BACKFILL_SUFFIX, + ] + + # rename the columns from the decennial census to be their final score names + decennial_cols = { + col_name: col_name.replace(field_names.ISLAND_AREA_BACKFILL_SUFFIX, "") + for col_name in ISLAND_DEMOGRAPHIC_BACKFILL_FIELDS + } + census_decennial_df: pd.DataFrame = census_decennial_df.rename( + columns=decennial_cols + ) + + # Merge decennial data with the final score + df: pd.DataFrame = final_score_df.merge( + census_decennial_df, + on=GEOID_TRACT_FIELD, + indicator="MERGE", + suffixes=("_final", "_decennial"), + how="outer", + ) + + # Make sure columns from both the decennial census and final score overlap + core_cols = census_decennial_df.columns.intersection( + final_score_df.columns + ).drop(GEOID_TRACT_FIELD) + final_columns = [f"{col}_final" for col in core_cols] + assert ( + final_columns + ), "No columns from decennial census show up in final score, extremely weird" + + # Make sure we're only grabbing island tracts for the decennial data + assert ( + sorted( + df[df.MERGE == "both"][field_names.GEOID_TRACT_FIELD] + .str[:2] + .unique() + ) + == constants.TILES_ISLAND_AREA_FIPS_CODES + ), "2010 Decennial census contributed unexpected tracts" + + df = df[df.MERGE == "both"] + + # Make sure for all the backfill tracts, the data made it into the + # final score. This can be simple since it's all perenctages and an int + for col in final_columns: + assert np.allclose( + df[col], + df[col.replace("_final", "_decennial")], + equal_nan=True, + ), f"Data mismatch in decennial census backfill for {col}" + + +def test_output_tracts(final_score_df, national_tract_df): + df = final_score_df.merge( + national_tract_df, + on=GEOID_TRACT_FIELD, + how="outer", + indicator="MERGE", + ) + counts = df.value_counts("MERGE") + assert counts.loc["left_only"] == 0 + assert counts.loc["right_only"] == 0 + + +def test_all_tracts_have_scores(final_score_df): + assert not final_score_df[field_names.SCORE_N_COMMUNITIES].isna().any() + + +def test_imputed_tracts(final_score_df): + # Make sure that any tracts with zero population have null imputed income + tracts_with_zero_population_df = final_score_df[ + final_score_df[field_names.TOTAL_POP_FIELD] == 0 + ] + assert ( + tracts_with_zero_population_df[ + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD + ] + .isna() + .all() + ) + + # Make sure that any tracts with null population have null imputed income + tracts_with_null_population_df = final_score_df[ + final_score_df[field_names.TOTAL_POP_FIELD].isnull() + ] + assert ( + tracts_with_null_population_df[ + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD + ] + .isna() + .all() + ) + + # Make sure that no tracts with population have null imputed income + # We DO NOT impute income for island areas, so remove those from the test + is_island_area = ( + final_score_df[field_names.GEOID_TRACT_FIELD] + .str[:2] + .isin(constants.TILES_ISLAND_AREA_FIPS_CODES) + ) + + tracts_with_some_population_df = final_score_df[ + (final_score_df[field_names.TOTAL_POP_FIELD] > 0) & ~is_island_area + ] + assert ( + not tracts_with_some_population_df[ + field_names.POVERTY_LESS_THAN_200_FPL_IMPUTED_FIELD + ] + .isna() + .any() + ) diff --git a/data/data-pipeline/data_pipeline/tests/score/test_score_narwhal_methods.py b/data/data-pipeline/data_pipeline/tests/score/test_score_narwhal_methods.py new file mode 100644 index 000000000..df7c1b4bf --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/test_score_narwhal_methods.py @@ -0,0 +1,85 @@ +# pylint: disable=protected-access +import pandas as pd +import pytest +from data_pipeline.config import settings +from data_pipeline.etl.score.etl_score import ScoreETL +from data_pipeline.score import field_names +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +@pytest.fixture +def toy_score_df(scope="module"): + return pd.read_csv( + settings.APP_ROOT + / "tests" + / "score" + / "test_utils" + / "data" + / "test_drop_tracts_from_percentile.csv", + dtype={field_names.GEOID_TRACT_FIELD: str}, + ) + + +def _helper_test_dropping_tracts(toy_score_df, drop_tracts): + logger.info(drop_tracts) + test_frame = toy_score_df[ + ~toy_score_df[field_names.GEOID_TRACT_FIELD].isin(drop_tracts) + ] + return_df = ScoreETL._add_percentiles_to_df( + df=toy_score_df, + input_column_name="to_rank", + output_column_name_root="to_rank_auto", + drop_tracts=drop_tracts, + ) + + test_frame = test_frame.assign( + true_rank=test_frame["to_rank"].rank(pct=True) + ) + + check_frame = test_frame.merge( + return_df[ + [ + field_names.GEOID_TRACT_FIELD, + "to_rank_auto" + field_names.PERCENTILE_FIELD_SUFFIX, + ] + ], + on=[field_names.GEOID_TRACT_FIELD], + ) + + return check_frame["true_rank"].equals( + check_frame["to_rank_auto" + field_names.PERCENTILE_FIELD_SUFFIX] + ) + + +def test_drop_0_tracts(toy_score_df): + assert _helper_test_dropping_tracts( + toy_score_df, drop_tracts=[] + ), "Percentile in score fails when we do not drop any tracts" + + +def test_drop_1_tract(toy_score_df): + assert _helper_test_dropping_tracts( + toy_score_df, drop_tracts=["1"] + ), "Percentile in score fails when we do drop a single tract" + + +def test_drop_2_tracts(toy_score_df): + assert _helper_test_dropping_tracts( + toy_score_df, drop_tracts=["1", "2"] + ), "Percentile in score fails when we drop two tracts" + + +def test_drop_many_tracts(toy_score_df): + assert _helper_test_dropping_tracts( + toy_score_df, + drop_tracts=toy_score_df[field_names.GEOID_TRACT_FIELD].to_list()[:5], + ), "Percentile in score fails when we drop many tracts" + + +def test_drop_all_tracts(toy_score_df): + assert _helper_test_dropping_tracts( + toy_score_df, + drop_tracts=toy_score_df[field_names.GEOID_TRACT_FIELD].to_list(), + ), "Percentile in score fails when we drop all tracts" diff --git a/data/data-pipeline/data_pipeline/tests/score/test_tiles_smoketests.py b/data/data-pipeline/data_pipeline/tests/score/test_tiles_smoketests.py new file mode 100644 index 000000000..c6176b28a --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/test_tiles_smoketests.py @@ -0,0 +1,276 @@ +# flake8: noqa: W0613,W0611,F811 +from dataclasses import dataclass +from typing import Optional + +import geopandas as gpd +import numpy as np +import pandas as pd +import pytest +from data_pipeline.config import settings +from data_pipeline.etl.score import constants +from data_pipeline.etl.score.constants import THRESHOLD_COUNT_TO_SHOW_FIELD_NAME +from data_pipeline.etl.score.constants import TILES_SCORE_COLUMNS +from data_pipeline.etl.score.constants import ( + USER_INTERFACE_EXPERIENCE_FIELD_NAME, +) +from data_pipeline.score import field_names + +from .fixtures import final_score_df # pylint: disable=unused-import + +pytestmark = pytest.mark.smoketest + + +@pytest.fixture +def tiles_df(scope="session"): + return pd.read_csv( + settings.APP_ROOT / "data" / "score" / "csv" / "tiles" / "usa.csv", + dtype={"GTF": str}, + low_memory=False, + ) + + +@pytest.fixture() +def tiles_geojson_df(): + return gpd.read_file( + settings.APP_ROOT / "data" / "score" / "geojson" / "usa-high.json" + ) + + +PERCENTILE_FIELDS = [ + "DF_PFS", + "AF_PFS", + "HDF_PFS", + "DSF_PFS", + "EBF_PFS", + "EALR_PFS", + "EBLR_PFS", + "EPLR_PFS", + "HBF_PFS", + "LLEF_PFS", + "LIF_PFS", + "LMI_PFS", + "PM25F_PFS", + "P100_PFS", + "P200_I_PFS", + "LPF_PFS", + "KP_PFS", + "NPL_PFS", + "RMP_PFS", + "TSDF_PFS", + "TF_PFS", + "UF_PFS", + "WF_PFS", + "UST_PFS", +] + + +def test_percentiles(tiles_df): + for col in PERCENTILE_FIELDS: + assert tiles_df[col].min() >= 0, f"Negative percentile exists for {col}" + assert ( + tiles_df[col].max() <= 1 + ), f"Percentile over 100th exists for {col}" + assert (tiles_df[col].median() >= 0.4) & ( + tiles_df[col].median() <= 0.6 + ), f"Percentile distribution for {col} is decidedly not uniform" + return True + + +def test_count_of_fips_codes(tiles_df, final_score_df): + final_score_state_count = ( + final_score_df[field_names.GEOID_TRACT_FIELD].str[:2].nunique() + ) + assert ( + tiles_df["GTF"].str[:2].nunique() == final_score_state_count + ), "Some states are missing from tiles" + pfs_columns = tiles_df.filter(like="PFS").columns.to_list() + assert ( + tiles_df.dropna(how="all", subset=pfs_columns)["GTF"].str[:2].nunique() + == 56 + ), "Some states do not have any percentile data" + + +def test_column_presence(tiles_df): + expected_column_names = set(TILES_SCORE_COLUMNS.values()) | { + THRESHOLD_COUNT_TO_SHOW_FIELD_NAME, + USER_INTERFACE_EXPERIENCE_FIELD_NAME, + } + actual_column_names = set(tiles_df.columns) + extra_columns = actual_column_names - expected_column_names + missing_columns = expected_column_names - expected_column_names + assert not ( + extra_columns + ), f"tiles/usa.csv has columns not specified in TILE_SCORE_COLUMNS: {extra_columns}" + assert not ( + missing_columns + ), f"tiles/usa.csv is missing columns from TILE_SCORE_COLUMNS: {missing_columns}" + + +def test_tract_equality(tiles_df, final_score_df): + assert tiles_df.shape[0] == final_score_df.shape[0] + + +def is_col_fake_bool(col) -> bool: + if col.dtype == np.dtype("float64"): + fake_bool = {1.0, 0.0, None} + # Replace the nans in the column values with None for + # so we can just use issubset below + col_values = set( + not np.isnan(val) and val or None + for val in col.value_counts(dropna=False).index + ) + return len(col_values) <= 3 and col_values.issubset(fake_bool) + return False + + +@dataclass +class ColumnValueComparison: + final_score_column: pd.Series + tiles_column: pd.Series + col_name: str + + @property + def _is_tiles_column_fake_bool(self) -> bool: + return is_col_fake_bool(self.tiles_column) + + @property + def _is_dtype_ok(self) -> bool: + if self.final_score_column.dtype == self.tiles_column.dtype: + return True + if ( + self.final_score_column.dtype == np.dtype("O") + and self.tiles_column.dtype == np.dtype("float64") + and self._is_tiles_column_fake_bool + ): + return True + return False + + def __post_init__(self): + self._is_value_ok = False + if self._is_dtype_ok: + if self._is_tiles_column_fake_bool: + # Cast to actual bool for useful comparison + self.tiles_column = self.tiles_column.apply( + lambda val: bool(val) if not np.isnan(val) else np.nan + ) + if self.tiles_column.dtype == np.dtype("float64"): + self._is_value_ok = np.allclose( + self.final_score_column, + self.tiles_column, + atol=float(f"1e-{constants.TILES_ROUND_NUM_DECIMALS}"), + equal_nan=True, + ) + else: + self._is_value_ok = self.final_score_column.equals( + self.tiles_column + ) + + def __bool__(self) -> bool: + return self._is_dtype_ok and bool(self._is_value_ok) + + @property + def error_message(self) -> Optional[str]: + if not self._is_dtype_ok: + return ( + f"Column {self.col_name} dtype mismatch: " + f"score_df: {self.final_score_column.dtype}, " + f"tile_df: {self.tiles_column.dtype}" + ) + if not self._is_value_ok: + return f"Column {self.col_name} value mismatch" + return None + + +def test_for_column_fidelitiy_from_score(tiles_df, final_score_df): + # Verify the following: + # * Shape and tracts match between score csv and tile csv + # * If you rename score CSV columns, you are able to make the tile csv + # * The dtypes and values of every renamed score column is "equal" to + # every tile column + # * Because tiles use rounded floats, we use close with a tolerance + assert ( + set(TILES_SCORE_COLUMNS.values()) - set(tiles_df.columns) == set() + ), "Some TILES_SCORE_COLUMNS are missing from the tiles dataframe" + + # Keep only the tiles score columns in the final score data + final_score_df = final_score_df.rename(columns=TILES_SCORE_COLUMNS).drop( + final_score_df.columns.difference(TILES_SCORE_COLUMNS.values()), + axis=1, + errors="ignore", + ) + + # Drop the UI-specific fields from the tiles dataframe + tiles_df = tiles_df.drop( + columns=[ + "SF", # State field, added at geoscore + "CF", # County field, added at geoscore, + constants.THRESHOLD_COUNT_TO_SHOW_FIELD_NAME, + constants.USER_INTERFACE_EXPERIENCE_FIELD_NAME, + ] + ) + errors = [] + + # Are the dataframes the same shape truly + assert tiles_df.shape == final_score_df.shape + assert tiles_df["GTF"].equals(final_score_df["GTF"]) + assert sorted(tiles_df.columns) == sorted(final_score_df.columns) + + # Are all the dtypes and values the same? + comparisons = [] + for col_name in final_score_df.columns: + value_comparison = ColumnValueComparison( + final_score_df[col_name], tiles_df[col_name], col_name + ) + comparisons.append(value_comparison) + errors = [comp for comp in comparisons if not comp] + error_message = "\n".join(error.error_message for error in errors) + assert not errors, error_message + + +def test_for_geojson_fidelity_from_tiles_csv(tiles_df, tiles_geojson_df): + tiles_geojson_df = tiles_geojson_df.drop(columns=["geometry"]).rename( + columns={"GEOID10": "GTF"} + ) + assert tiles_df.shape == tiles_geojson_df.shape + assert tiles_df["GTF"].equals(tiles_geojson_df["GTF"]) + assert sorted(tiles_df.columns) == sorted(tiles_geojson_df.columns) + + # Are all the dtypes and values the same? + for col_name in tiles_geojson_df.columns: + if is_col_fake_bool(tiles_df[col_name]): + tiles_df[col_name] = ( + tiles_df[col_name] + .astype("float64") + .replace({0.0: False, 1.0: True}) + ) + if is_col_fake_bool(tiles_geojson_df[col_name]): + tiles_geojson_df[col_name] = ( + tiles_geojson_df[col_name] + .astype("float64") + .replace({0.0: False, 1.0: True}) + ) + tiles_geojson_df[col_name] = tiles_df[col_name].replace({None: np.nan}) + error_message = f"Column {col_name} not equal " + # For non-numeric types, we can use the built-in equals from pandas + if tiles_df[col_name].dtype in [ + np.dtype(object), + np.dtype(bool), + np.dtype(str), + ]: + assert tiles_df[col_name].equals( + tiles_geojson_df[col_name] + ), error_message + # For numeric sources, use np.close so we don't get harmed by + # float equaity weirdness + else: + assert np.allclose( + tiles_df[col_name], + tiles_geojson_df[col_name], + equal_nan=True, + ), error_message + + +def test_for_state_names(tiles_df): + states = tiles_df["SF"].value_counts(dropna=False).index + assert np.nan not in states + assert states.all() diff --git a/data/data-pipeline/data_pipeline/tests/score/test_utils/__init__.py b/data/data-pipeline/data_pipeline/tests/score/test_utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/score/test_utils/data/scores.csv b/data/data-pipeline/data_pipeline/tests/score/test_utils/data/scores.csv new file mode 100644 index 000000000..d11e7ff4f --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/test_utils/data/scores.csv @@ -0,0 +1,10 @@ +GEOID10_TRACT,included +24027602100,True +24027602303,True +24027605503,True +24027605502,True +24027603004,False +24027605104,True +24027603003,True +24027603001,True +24027602201,True diff --git a/data/data-pipeline/data_pipeline/tests/score/test_utils/data/test_drop_tracts_from_percentile.csv b/data/data-pipeline/data_pipeline/tests/score/test_utils/data/test_drop_tracts_from_percentile.csv new file mode 100644 index 000000000..5177546cc --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/test_utils/data/test_drop_tracts_from_percentile.csv @@ -0,0 +1,101 @@ +GEOID10_TRACT,to_rank +1,1 +2,2 +3,3 +4,4 +5,5 +6,6 +7,7 +8,8 +9,9 +10,10 +11,11 +12,12 +13,13 +14,14 +15,15 +16,16 +17,17 +18,18 +19,19 +20,20 +21,21 +22,22 +23,23 +24,24 +25,25 +26,26 +27,27 +28,28 +29,29 +30,30 +31,31 +32,32 +33,33 +34,34 +35,35 +36,36 +37,37 +38,38 +39,39 +40,40 +41,41 +42,42 +43,43 +44,44 +45,45 +46,46 +47,47 +48,48 +49,49 +50,50 +51,51 +52,52 +53,53 +54,54 +55,55 +56,56 +57,57 +58,58 +59,59 +60,60 +61,61 +62,62 +63,63 +64,64 +65,65 +66,66 +67,67 +68,68 +69,69 +70,70 +71,71 +72,72 +73,73 +74,74 +75,75 +76,76 +77,77 +78,78 +79,79 +80,80 +81,81 +82,82 +83,83 +84,84 +85,85 +86,86 +87,87 +88,88 +89,89 +90,90 +91,91 +92,92 +93,93 +94,94 +95,95 +96,96 +97,97 +98,98 +99,99 +100,100 diff --git a/data/data-pipeline/data_pipeline/tests/score/test_utils/data/us.geojson b/data/data-pipeline/data_pipeline/tests/score/test_utils/data/us.geojson new file mode 100644 index 000000000..51b54c74c --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/test_utils/data/us.geojson @@ -0,0 +1,15 @@ +{ +"type": "FeatureCollection", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "602100", "GEOID10": "24027602100", "NAME10": "6021", "NAMELSAD10": "Census Tract 6021", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 13769934, "AWATER10": 3674, "INTPTLAT10": "+39.3076905", "INTPTLON10": "-076.8349752" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.863049, 39.31484 ], [ -76.863078, 39.315008 ], [ -76.863131, 39.315303 ], [ -76.863199, 39.315573 ], [ -76.863322, 39.315985 ], [ -76.863365, 39.316098 ], [ -76.863447, 39.316311 ], [ -76.863791, 39.317575 ], [ -76.863169, 39.318198 ], [ -76.861878, 39.319552 ], [ -76.861097, 39.320404 ], [ -76.858475, 39.322622 ], [ -76.856653, 39.323775 ], [ -76.856606, 39.323823 ], [ -76.856331, 39.324016 ], [ -76.855603, 39.323367 ], [ -76.855439, 39.323224 ], [ -76.855382, 39.323082 ], [ -76.85531, 39.322804 ], [ -76.85531, 39.322407 ], [ -76.855263, 39.321945 ], [ -76.855201, 39.321529 ], [ -76.855193, 39.320992 ], [ -76.855232, 39.320651 ], [ -76.855252, 39.320449 ], [ -76.855141, 39.320282 ], [ -76.855093, 39.320199 ], [ -76.855069, 39.320086 ], [ -76.855014, 39.320018 ], [ -76.854927, 39.319798 ], [ -76.854836, 39.319444 ], [ -76.854786, 39.319234 ], [ -76.854686, 39.318939 ], [ -76.854222, 39.318135 ], [ -76.85408, 39.317851 ], [ -76.853915, 39.317662 ], [ -76.853701, 39.317489 ], [ -76.853443, 39.317383 ], [ -76.853135, 39.317255 ], [ -76.852777, 39.317166 ], [ -76.852591, 39.317093 ], [ -76.852426, 39.316959 ], [ -76.852334, 39.316848 ], [ -76.852191, 39.316648 ], [ -76.852098, 39.316509 ], [ -76.85164, 39.316174 ], [ -76.851168, 39.315935 ], [ -76.850924, 39.315862 ], [ -76.850766, 39.315848 ], [ -76.850609, 39.315834 ], [ -76.850193, 39.315872 ], [ -76.849362, 39.315894 ], [ -76.848975, 39.316004 ], [ -76.848495, 39.316176 ], [ -76.847999, 39.316665 ], [ -76.847237, 39.31787 ], [ -76.846922, 39.318115 ], [ -76.846889, 39.318124 ], [ -76.846642, 39.318192 ], [ -76.846291, 39.318219 ], [ -76.846047, 39.31828 ], [ -76.845567, 39.318319 ], [ -76.844908, 39.318345 ], [ -76.844277, 39.318333 ], [ -76.844013, 39.318177 ], [ -76.843719, 39.31796 ], [ -76.843512, 39.317788 ], [ -76.843134, 39.317214 ], [ -76.842891, 39.316919 ], [ -76.84264, 39.316736 ], [ -76.84246, 39.31647 ], [ -76.842324, 39.316342 ], [ -76.842195, 39.316309 ], [ -76.842088, 39.31632 ], [ -76.841923, 39.316303 ], [ -76.841708, 39.316269 ], [ -76.841579, 39.316197 ], [ -76.841493, 39.316113 ], [ -76.841394, 39.315952 ], [ -76.841215, 39.315746 ], [ -76.840993, 39.31564 ], [ -76.840871, 39.315606 ], [ -76.840456, 39.315478 ], [ -76.839796, 39.315288 ], [ -76.839737, 39.315274 ], [ -76.839667, 39.315272 ], [ -76.839563, 39.315275 ], [ -76.839423, 39.315294 ], [ -76.83878, 39.315346 ], [ -76.83836, 39.315372 ], [ -76.838004, 39.315401 ], [ -76.837677, 39.315438 ], [ -76.837564, 39.315461 ], [ -76.837457, 39.315507 ], [ -76.837338, 39.315586 ], [ -76.837258, 39.31563 ], [ -76.837179, 39.315662 ], [ -76.837072, 39.31569 ], [ -76.837, 39.315709 ], [ -76.836168, 39.315782 ], [ -76.835962, 39.315804 ], [ -76.835779, 39.315838 ], [ -76.83565, 39.315845 ], [ -76.835563, 39.315837 ], [ -76.835472, 39.315804 ], [ -76.835342, 39.315725 ], [ -76.835211, 39.315602 ], [ -76.835163, 39.315542 ], [ -76.835134, 39.315509 ], [ -76.83511, 39.315427 ], [ -76.83509, 39.314909 ], [ -76.835081, 39.314763 ], [ -76.835076, 39.314692 ], [ -76.835095, 39.31461 ], [ -76.835144, 39.314521 ], [ -76.835416, 39.314201 ], [ -76.835493, 39.314081 ], [ -76.835507, 39.313973 ], [ -76.835498, 39.313921 ], [ -76.835479, 39.313862 ], [ -76.835421, 39.313783 ], [ -76.835398, 39.313716 ], [ -76.835407, 39.313664 ], [ -76.835482, 39.313504 ], [ -76.83555, 39.313161 ], [ -76.835574, 39.313101 ], [ -76.835608, 39.313049 ], [ -76.835613, 39.313004 ], [ -76.83558, 39.312911 ], [ -76.835565, 39.312814 ], [ -76.835633, 39.312717 ], [ -76.835657, 39.312605 ], [ -76.83566, 39.312419 ], [ -76.835579, 39.31208 ], [ -76.835522, 39.311972 ], [ -76.835387, 39.311848 ], [ -76.835253, 39.311777 ], [ -76.835025, 39.311695 ], [ -76.834785, 39.311613 ], [ -76.834756, 39.311605 ], [ -76.834454, 39.311526 ], [ -76.834089, 39.311496 ], [ -76.833674, 39.311507 ], [ -76.833626, 39.311507 ], [ -76.833568, 39.311514 ], [ -76.833501, 39.311555 ], [ -76.833467, 39.311588 ], [ -76.833404, 39.311622 ], [ -76.833251, 39.311692 ], [ -76.833092, 39.311767 ], [ -76.832948, 39.311796 ], [ -76.832864, 39.311808 ], [ -76.832748, 39.311848 ], [ -76.832691, 39.311882 ], [ -76.832563, 39.312001 ], [ -76.832515, 39.312042 ], [ -76.832409, 39.312124 ], [ -76.832356, 39.312172 ], [ -76.832332, 39.312217 ], [ -76.832284, 39.31231 ], [ -76.832236, 39.312373 ], [ -76.832183, 39.312407 ], [ -76.83213, 39.312422 ], [ -76.832072, 39.312436 ], [ -76.832029, 39.312481 ], [ -76.831947, 39.312563 ], [ -76.831904, 39.312645 ], [ -76.83185, 39.312749 ], [ -76.831788, 39.312913 ], [ -76.831739, 39.313032 ], [ -76.831706, 39.313066 ], [ -76.831532, 39.313144 ], [ -76.831446, 39.313177 ], [ -76.831417, 39.3132 ], [ -76.831311, 39.313393 ], [ -76.831258, 39.313542 ], [ -76.831233, 39.313684 ], [ -76.831204, 39.313967 ], [ -76.831185, 39.314019 ], [ -76.831141, 39.314049 ], [ -76.831108, 39.314075 ], [ -76.831009, 39.314303 ], [ -76.830741, 39.314899 ], [ -76.83062, 39.31513 ], [ -76.830456, 39.315476 ], [ -76.830318, 39.31577 ], [ -76.830198, 39.315983 ], [ -76.830044, 39.31618 ], [ -76.830014, 39.316266 ], [ -76.830014, 39.316359 ], [ -76.83, 39.316411 ], [ -76.82999, 39.316437 ], [ -76.829947, 39.316452 ], [ -76.82986, 39.316456 ], [ -76.829798, 39.316467 ], [ -76.829747, 39.316564 ], [ -76.829554, 39.316847 ], [ -76.829453, 39.317025 ], [ -76.829395, 39.317122 ], [ -76.829333, 39.317204 ], [ -76.829265, 39.317245 ], [ -76.829184, 39.317278 ], [ -76.829107, 39.317308 ], [ -76.829022, 39.317356 ], [ -76.828455, 39.317781 ], [ -76.827793, 39.318261 ], [ -76.827172, 39.318685 ], [ -76.826735, 39.3189 ], [ -76.826415, 39.319049 ], [ -76.825713, 39.319271 ], [ -76.825526, 39.319312 ], [ -76.825206, 39.319349 ], [ -76.82487, 39.319349 ], [ -76.824493, 39.319311 ], [ -76.824099, 39.319236 ], [ -76.823806, 39.319172 ], [ -76.823538, 39.319089 ], [ -76.823326, 39.319011 ], [ -76.822937, 39.318834 ], [ -76.822809, 39.318634 ], [ -76.822688, 39.318473 ], [ -76.822465, 39.318243 ], [ -76.822332, 39.318117 ], [ -76.822102, 39.317878 ], [ -76.821843, 39.317462 ], [ -76.82171, 39.317307 ], [ -76.821648, 39.317252 ], [ -76.821582, 39.317216 ], [ -76.821536, 39.317174 ], [ -76.821507, 39.317139 ], [ -76.821478, 39.317042 ], [ -76.821458, 39.316951 ], [ -76.821425, 39.316903 ], [ -76.821391, 39.31688 ], [ -76.821354, 39.316858 ], [ -76.821327, 39.316813 ], [ -76.821307, 39.316751 ], [ -76.82129, 39.316654 ], [ -76.821274, 39.316625 ], [ -76.82122, 39.31659 ], [ -76.821174, 39.316561 ], [ -76.821133, 39.316538 ], [ -76.821103, 39.316509 ], [ -76.821079, 39.316464 ], [ -76.820982, 39.316173 ], [ -76.820957, 39.316102 ], [ -76.820899, 39.316015 ], [ -76.820857, 39.315986 ], [ -76.820824, 39.31597 ], [ -76.820808, 39.315947 ], [ -76.820779, 39.315896 ], [ -76.820771, 39.315834 ], [ -76.820767, 39.315783 ], [ -76.820763, 39.315718 ], [ -76.820729, 39.315673 ], [ -76.820688, 39.315647 ], [ -76.820638, 39.315624 ], [ -76.820574, 39.31555 ], [ -76.820504, 39.31544 ], [ -76.82047, 39.315356 ], [ -76.820433, 39.315272 ], [ -76.820409, 39.315179 ], [ -76.820388, 39.315147 ], [ -76.820346, 39.315101 ], [ -76.820263, 39.315027 ], [ -76.820125, 39.314856 ], [ -76.820062, 39.314791 ], [ -76.820038, 39.314746 ], [ -76.81998, 39.314656 ], [ -76.819943, 39.314568 ], [ -76.819918, 39.314491 ], [ -76.819885, 39.314426 ], [ -76.819847, 39.314365 ], [ -76.819802, 39.314336 ], [ -76.819752, 39.314323 ], [ -76.819686, 39.314303 ], [ -76.819621, 39.314249 ], [ -76.819584, 39.314207 ], [ -76.819555, 39.31411 ], [ -76.819543, 39.314071 ], [ -76.819472, 39.314013 ], [ -76.819422, 39.313997 ], [ -76.819182, 39.313893 ], [ -76.819111, 39.313851 ], [ -76.819053, 39.313786 ], [ -76.818968, 39.313654 ], [ -76.818922, 39.313618 ], [ -76.818844, 39.313534 ], [ -76.818715, 39.313473 ], [ -76.818674, 39.31346 ], [ -76.818545, 39.313444 ], [ -76.81847, 39.313437 ], [ -76.818408, 39.31343 ], [ -76.81837, 39.313408 ], [ -76.818358, 39.313369 ], [ -76.818341, 39.313347 ], [ -76.8183, 39.313324 ], [ -76.818213, 39.313311 ], [ -76.818113, 39.313275 ], [ -76.818005, 39.313243 ], [ -76.817843, 39.313201 ], [ -76.817434, 39.313129 ], [ -76.817043, 39.313086 ], [ -76.816862, 39.313086 ], [ -76.816721, 39.313109 ], [ -76.816451, 39.313176 ], [ -76.816288, 39.31325 ], [ -76.816171, 39.313331 ], [ -76.815997, 39.313485 ], [ -76.815951, 39.313559 ], [ -76.815925, 39.31363 ], [ -76.815938, 39.313708 ], [ -76.815985, 39.313889 ], [ -76.816022, 39.314005 ], [ -76.81603, 39.314085 ], [ -76.816021, 39.314343 ], [ -76.815998, 39.314482 ], [ -76.815986, 39.314514 ], [ -76.815956, 39.314537 ], [ -76.815948, 39.314563 ], [ -76.815965, 39.314585 ], [ -76.815998, 39.314598 ], [ -76.816068, 39.314605 ], [ -76.816106, 39.314615 ], [ -76.816122, 39.314644 ], [ -76.81611, 39.314682 ], [ -76.816093, 39.314737 ], [ -76.816072, 39.314808 ], [ -76.816076, 39.314869 ], [ -76.816088, 39.314921 ], [ -76.816113, 39.314966 ], [ -76.816185, 39.315044 ], [ -76.816211, 39.315073 ], [ -76.816248, 39.315118 ], [ -76.81626, 39.31516 ], [ -76.816239, 39.315289 ], [ -76.816218, 39.315357 ], [ -76.816197, 39.315399 ], [ -76.815974, 39.315689 ], [ -76.81587, 39.315866 ], [ -76.815832, 39.315914 ], [ -76.815799, 39.315959 ], [ -76.815678, 39.316117 ], [ -76.815553, 39.316291 ], [ -76.815453, 39.316407 ], [ -76.815349, 39.316497 ], [ -76.815307, 39.316536 ], [ -76.815278, 39.316584 ], [ -76.815245, 39.316659 ], [ -76.815193, 39.316756 ], [ -76.815204, 39.316837 ], [ -76.815196, 39.3169 ], [ -76.81516, 39.316982 ], [ -76.815086, 39.317151 ], [ -76.815045, 39.317383 ], [ -76.815009, 39.317496 ], [ -76.814968, 39.317555 ], [ -76.814928, 39.31758 ], [ -76.814901, 39.317612 ], [ -76.814828, 39.31774 ], [ -76.814763, 39.317834 ], [ -76.814686, 39.317884 ], [ -76.814502, 39.317953 ], [ -76.814361, 39.317978 ], [ -76.814268, 39.317994 ], [ -76.814054, 39.318006 ], [ -76.813696, 39.31799 ], [ -76.813356, 39.317992 ], [ -76.812859, 39.317985 ], [ -76.81254, 39.31795 ], [ -76.812342, 39.317903 ], [ -76.812271, 39.317859 ], [ -76.812215, 39.317768 ], [ -76.812151, 39.317589 ], [ -76.812075, 39.317168 ], [ -76.812039, 39.316962 ], [ -76.812015, 39.316868 ], [ -76.811911, 39.316711 ], [ -76.811776, 39.316482 ], [ -76.811748, 39.316404 ], [ -76.811756, 39.316341 ], [ -76.811772, 39.31625 ], [ -76.811756, 39.316193 ], [ -76.81168, 39.316102 ], [ -76.811629, 39.316045 ], [ -76.811571, 39.31598 ], [ -76.811414, 39.315851 ], [ -76.811212, 39.315706 ], [ -76.811024, 39.315602 ], [ -76.810578, 39.31541 ], [ -76.810251, 39.315272 ], [ -76.81013, 39.315237 ], [ -76.810009, 39.315221 ], [ -76.809688, 39.315186 ], [ -76.809293, 39.31514 ], [ -76.808952, 39.315157 ], [ -76.808786, 39.315182 ], [ -76.808677, 39.3152 ], [ -76.808616, 39.315235 ], [ -76.808588, 39.315257 ], [ -76.808572, 39.315272 ], [ -76.808543, 39.315326 ], [ -76.808511, 39.315373 ], [ -76.808434, 39.315448 ], [ -76.808308, 39.315526 ], [ -76.808078, 39.31566 ], [ -76.808029, 39.315689 ], [ -76.80794, 39.31571 ], [ -76.807855, 39.31571 ], [ -76.807787, 39.315716 ], [ -76.807746, 39.315729 ], [ -76.807659, 39.315757 ], [ -76.807498, 39.315842 ], [ -76.807405, 39.315876 ], [ -76.80729, 39.315889 ], [ -76.807096, 39.315882 ], [ -76.807031, 39.315888 ], [ -76.806966, 39.31591 ], [ -76.806914, 39.315954 ], [ -76.806877, 39.315995 ], [ -76.806839, 39.316036 ], [ -76.806764, 39.316086 ], [ -76.806562, 39.316167 ], [ -76.806383, 39.316257 ], [ -76.806157, 39.316348 ], [ -76.806052, 39.316398 ], [ -76.805991, 39.316426 ], [ -76.805926, 39.316442 ], [ -76.805777, 39.316451 ], [ -76.805243, 39.316618 ], [ -76.805037, 39.316673 ], [ -76.804858, 39.316703 ], [ -76.804518, 39.316733 ], [ -76.804396, 39.316604 ], [ -76.804234, 39.316702 ], [ -76.803967, 39.316658 ], [ -76.803789, 39.31661 ], [ -76.803683, 39.316576 ], [ -76.803527, 39.316502 ], [ -76.803272, 39.316333 ], [ -76.80306, 39.316216 ], [ -76.802854, 39.316164 ], [ -76.802654, 39.316142 ], [ -76.802526, 39.316154 ], [ -76.802389, 39.316176 ], [ -76.802283, 39.316184 ], [ -76.802024, 39.316149 ], [ -76.801852, 39.316088 ], [ -76.801574, 39.315976 ], [ -76.801496, 39.315898 ], [ -76.801435, 39.315837 ], [ -76.801385, 39.315811 ], [ -76.801324, 39.315785 ], [ -76.801257, 39.31578 ], [ -76.801151, 39.315741 ], [ -76.800742, 39.315563 ], [ -76.800314, 39.315334 ], [ -76.800197, 39.315286 ], [ -76.800064, 39.315255 ], [ -76.799799, 39.315225 ], [ -76.799404, 39.31512 ], [ -76.799187, 39.315042 ], [ -76.799109, 39.315007 ], [ -76.79897, 39.314994 ], [ -76.798769, 39.315011 ], [ -76.798636, 39.315011 ], [ -76.79817, 39.315062 ], [ -76.79797, 39.315126 ], [ -76.797908, 39.315152 ], [ -76.797719, 39.315208 ], [ -76.797602, 39.315208 ], [ -76.797429, 39.315177 ], [ -76.797257, 39.315121 ], [ -76.79708, 39.315055 ], [ -76.796788, 39.314981 ], [ -76.796398, 39.314894 ], [ -76.795875, 39.314746 ], [ -76.795741, 39.314729 ], [ -76.795652, 39.314733 ], [ -76.795618, 39.314728 ], [ -76.795596, 39.314718 ], [ -76.795391, 39.314607 ], [ -76.795118, 39.314451 ], [ -76.794901, 39.314355 ], [ -76.794718, 39.314277 ], [ -76.7946, 39.314232 ], [ -76.794498, 39.314153 ], [ -76.794453, 39.314073 ], [ -76.794407, 39.313936 ], [ -76.794325, 39.313831 ], [ -76.794202, 39.313747 ], [ -76.794141, 39.313723 ], [ -76.794102, 39.313723 ], [ -76.794016, 39.313716 ], [ -76.793886, 39.313709 ], [ -76.793626, 39.313655 ], [ -76.793474, 39.313588 ], [ -76.793388, 39.31351 ], [ -76.793349, 39.313446 ], [ -76.793308, 39.313298 ], [ -76.793265, 39.31321 ], [ -76.793166, 39.312985 ], [ -76.793088, 39.312809 ], [ -76.792769, 39.312159 ], [ -76.792709, 39.312065 ], [ -76.792622, 39.311961 ], [ -76.792575, 39.31187 ], [ -76.792479, 39.311483 ], [ -76.792484, 39.311136 ], [ -76.792502, 39.311008 ], [ -76.792528, 39.3109 ], [ -76.792621, 39.310777 ], [ -76.792871, 39.31035 ], [ -76.793066, 39.310013 ], [ -76.793182, 39.309904 ], [ -76.79328, 39.309823 ], [ -76.79334, 39.30975 ], [ -76.793439, 39.309561 ], [ -76.793458, 39.309465 ], [ -76.79348, 39.309296 ], [ -76.793423, 39.30842 ], [ -76.793417, 39.307887 ], [ -76.793414, 39.307801 ], [ -76.793433, 39.307715 ], [ -76.793628, 39.307378 ], [ -76.793797, 39.307045 ], [ -76.793946, 39.306834 ], [ -76.794031, 39.306798 ], [ -76.794191, 39.306785 ], [ -76.794466, 39.306797 ], [ -76.794799, 39.306784 ], [ -76.795125, 39.306758 ], [ -76.795374, 39.306682 ], [ -76.795537, 39.306617 ], [ -76.795724, 39.306508 ], [ -76.796009, 39.306236 ], [ -76.796228, 39.306067 ], [ -76.796342, 39.305994 ], [ -76.796457, 39.305885 ], [ -76.796597, 39.305659 ], [ -76.796632, 39.305571 ], [ -76.79663, 39.305509 ], [ -76.79661, 39.305363 ], [ -76.796511, 39.305045 ], [ -76.796813, 39.304922 ], [ -76.797816, 39.304469 ], [ -76.798116, 39.304336 ], [ -76.798508, 39.304148 ], [ -76.799366, 39.30368 ], [ -76.79965, 39.30351 ], [ -76.800132, 39.303201 ], [ -76.800334, 39.30305 ], [ -76.800733, 39.302713 ], [ -76.800925, 39.302541 ], [ -76.801301, 39.302162 ], [ -76.801466, 39.301987 ], [ -76.801671, 39.301754 ], [ -76.801858, 39.301536 ], [ -76.80232, 39.300924 ], [ -76.802529, 39.300667 ], [ -76.802903, 39.300245 ], [ -76.803197, 39.299922 ], [ -76.803516, 39.299612 ], [ -76.803887, 39.299305 ], [ -76.80437, 39.298958 ], [ -76.804845, 39.29867 ], [ -76.805352, 39.298397 ], [ -76.805996, 39.29812 ], [ -76.806617, 39.297886 ], [ -76.807251, 39.297667 ], [ -76.807798, 39.29751 ], [ -76.808441, 39.297349 ], [ -76.809147, 39.297208 ], [ -76.809798, 39.297097 ], [ -76.810484, 39.29699 ], [ -76.811238, 39.296891 ], [ -76.811748, 39.296846 ], [ -76.812737, 39.296736 ], [ -76.813301, 39.29669 ], [ -76.814143, 39.296617 ], [ -76.815314, 39.296609 ], [ -76.816029, 39.29661 ], [ -76.816749, 39.29665 ], [ -76.817691, 39.296753 ], [ -76.818141, 39.296779 ], [ -76.818386, 39.296794 ], [ -76.818628, 39.296804 ], [ -76.818861, 39.296805 ], [ -76.81962, 39.296781 ], [ -76.820341, 39.29674 ], [ -76.821557, 39.296627 ], [ -76.822439, 39.296584 ], [ -76.823306, 39.296569 ], [ -76.824645, 39.296599 ], [ -76.824856, 39.296598 ], [ -76.825503, 39.296619 ], [ -76.82605, 39.296617 ], [ -76.826506, 39.296623 ], [ -76.833032, 39.296569 ], [ -76.834454, 39.296513 ], [ -76.835779, 39.296463 ], [ -76.837182, 39.296414 ], [ -76.840925, 39.296269 ], [ -76.846458, 39.296053 ], [ -76.847385, 39.296009 ], [ -76.848616, 39.295953 ], [ -76.85006, 39.295947 ], [ -76.851894, 39.295995 ], [ -76.853487, 39.296105 ], [ -76.854745, 39.296225 ], [ -76.855258, 39.29629 ], [ -76.855857, 39.29638 ], [ -76.856944, 39.296531 ], [ -76.857948, 39.296713 ], [ -76.85898, 39.296931 ], [ -76.859642, 39.297082 ], [ -76.8603, 39.297254 ], [ -76.861513, 39.297574 ], [ -76.862788, 39.29796 ], [ -76.864048, 39.298387 ], [ -76.865139, 39.298813 ], [ -76.86639, 39.299345 ], [ -76.867603, 39.299888 ], [ -76.86793, 39.300013 ], [ -76.868661, 39.300336 ], [ -76.869016, 39.300494 ], [ -76.869593, 39.300737 ], [ -76.870822, 39.301262 ], [ -76.87273, 39.302082 ], [ -76.87337, 39.302359 ], [ -76.874166, 39.302697 ], [ -76.874962, 39.303044 ], [ -76.875485, 39.303304 ], [ -76.875803, 39.303442 ], [ -76.876392, 39.303677 ], [ -76.876493, 39.303717 ], [ -76.876886, 39.303853 ], [ -76.877627, 39.304125 ], [ -76.878326, 39.304351 ], [ -76.878916, 39.304525 ], [ -76.879667, 39.304732 ], [ -76.880261, 39.304878 ], [ -76.880578, 39.304954 ], [ -76.88072, 39.304984 ], [ -76.880733, 39.305174 ], [ -76.880735, 39.305263 ], [ -76.880547, 39.305504 ], [ -76.879848, 39.305738 ], [ -76.87922, 39.305965 ], [ -76.877891, 39.306433 ], [ -76.877241, 39.306642 ], [ -76.87623, 39.306966 ], [ -76.875149, 39.307313 ], [ -76.874586, 39.3075 ], [ -76.870653, 39.308758 ], [ -76.87045, 39.308843 ], [ -76.870392, 39.30884 ], [ -76.869161, 39.308786 ], [ -76.869153, 39.308799 ], [ -76.869122, 39.308816 ], [ -76.869013, 39.308862 ], [ -76.868485, 39.309055 ], [ -76.867978, 39.309239 ], [ -76.867705, 39.309347 ], [ -76.867261, 39.309502 ], [ -76.866102, 39.309894 ], [ -76.866101, 39.309894 ], [ -76.865669, 39.310066 ], [ -76.864234, 39.310568 ], [ -76.863039, 39.310937 ], [ -76.862618, 39.311062 ], [ -76.86255, 39.311114 ], [ -76.862538, 39.311172 ], [ -76.862581, 39.311225 ], [ -76.862677, 39.311297 ], [ -76.862787, 39.311386 ], [ -76.862929, 39.311549 ], [ -76.863046, 39.311741 ], [ -76.863144, 39.311933 ], [ -76.863206, 39.312082 ], [ -76.863267, 39.312264 ], [ -76.86331, 39.31248 ], [ -76.86334, 39.312713 ], [ -76.863359, 39.313026 ], [ -76.863314, 39.313502 ], [ -76.863203, 39.314109 ], [ -76.863106, 39.314569 ], [ -76.863049, 39.31484 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "602303", "GEOID10": "24027602303", "NAME10": "6023.03", "NAMELSAD10": "Census Tract 6023.03", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 11740756, "AWATER10": 26901, "INTPTLAT10": "+39.2600506", "INTPTLON10": "-076.8754102" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.867498, 39.251702 ], [ -76.867537, 39.251363 ], [ -76.867542, 39.251137 ], [ -76.867547, 39.250948 ], [ -76.867551, 39.250735 ], [ -76.867571, 39.249715 ], [ -76.867587, 39.24866 ], [ -76.867563, 39.24726 ], [ -76.867551, 39.246539 ], [ -76.867545, 39.246374 ], [ -76.86753, 39.245874 ], [ -76.867524, 39.245519 ], [ -76.867513, 39.244852 ], [ -76.867508, 39.244569 ], [ -76.867494, 39.243752 ], [ -76.867464, 39.243254 ], [ -76.867459, 39.243021 ], [ -76.867491, 39.242734 ], [ -76.867527, 39.242574 ], [ -76.867606, 39.242323 ], [ -76.867733, 39.241979 ], [ -76.867789, 39.241874 ], [ -76.867887, 39.241707 ], [ -76.868088, 39.241397 ], [ -76.868319, 39.241012 ], [ -76.868406, 39.240819 ], [ -76.868436, 39.240755 ], [ -76.868517, 39.240547 ], [ -76.868561, 39.240399 ], [ -76.868589, 39.240301 ], [ -76.868621, 39.240145 ], [ -76.868629, 39.240066 ], [ -76.868641, 39.239875 ], [ -76.868623, 39.238958 ], [ -76.868615, 39.23887 ], [ -76.868554, 39.238179 ], [ -76.868554, 39.238066 ], [ -76.868555, 39.237674 ], [ -76.868571, 39.237198 ], [ -76.868561, 39.23667 ], [ -76.868552, 39.236125 ], [ -76.868546, 39.235658 ], [ -76.86878, 39.235675 ], [ -76.869588, 39.235778 ], [ -76.869847, 39.235808 ], [ -76.870245, 39.235855 ], [ -76.870766, 39.235881 ], [ -76.871369, 39.235869 ], [ -76.871573, 39.235861 ], [ -76.87345, 39.235787 ], [ -76.875368, 39.235696 ], [ -76.875646, 39.235687 ], [ -76.877313, 39.235635 ], [ -76.878161, 39.23561 ], [ -76.879152, 39.235581 ], [ -76.879839, 39.235561 ], [ -76.880951, 39.235524 ], [ -76.883983, 39.235429 ], [ -76.884053, 39.235427 ], [ -76.884272, 39.235399 ], [ -76.884876, 39.23532 ], [ -76.885061, 39.235297 ], [ -76.886926, 39.235007 ], [ -76.886964, 39.235238 ], [ -76.886987, 39.235552 ], [ -76.88701, 39.235716 ], [ -76.887038, 39.23583 ], [ -76.887089, 39.235956 ], [ -76.887246, 39.236325 ], [ -76.887364, 39.236659 ], [ -76.887473, 39.236965 ], [ -76.887565, 39.237225 ], [ -76.887781, 39.237825 ], [ -76.887906, 39.238185 ], [ -76.888091, 39.238782 ], [ -76.888283, 39.239401 ], [ -76.888328, 39.239546 ], [ -76.888388, 39.239729 ], [ -76.888452, 39.239925 ], [ -76.888569, 39.24027 ], [ -76.888689, 39.240617 ], [ -76.888805, 39.240963 ], [ -76.888849, 39.241105 ], [ -76.889019, 39.241664 ], [ -76.889512, 39.243139 ], [ -76.889674, 39.243623 ], [ -76.889757, 39.243938 ], [ -76.889796, 39.244105 ], [ -76.889852, 39.244662 ], [ -76.889927, 39.245411 ], [ -76.890066, 39.24679 ], [ -76.890386, 39.249972 ], [ -76.890404, 39.250156 ], [ -76.891167, 39.250894 ], [ -76.891834, 39.251539 ], [ -76.893979, 39.251355 ], [ -76.893811, 39.252927 ], [ -76.893722, 39.253641 ], [ -76.893596, 39.254762 ], [ -76.893579, 39.254976 ], [ -76.89355, 39.255294 ], [ -76.893523, 39.25562 ], [ -76.893473, 39.255937 ], [ -76.89343, 39.256247 ], [ -76.893383, 39.256556 ], [ -76.893349, 39.256858 ], [ -76.893322, 39.257178 ], [ -76.893276, 39.257485 ], [ -76.893237, 39.257716 ], [ -76.893225, 39.257766 ], [ -76.893209, 39.257858 ], [ -76.893163, 39.258261 ], [ -76.8931, 39.258765 ], [ -76.893054, 39.259291 ], [ -76.893033, 39.259451 ], [ -76.892998, 39.259755 ], [ -76.892961, 39.260096 ], [ -76.892887, 39.260737 ], [ -76.892788, 39.261153 ], [ -76.892659, 39.261512 ], [ -76.89255, 39.261842 ], [ -76.892336, 39.262507 ], [ -76.89222, 39.26283 ], [ -76.892107, 39.263171 ], [ -76.892106, 39.263171 ], [ -76.891997, 39.263486 ], [ -76.891813, 39.264007 ], [ -76.891303, 39.265528 ], [ -76.891279, 39.2656 ], [ -76.891191, 39.265868 ], [ -76.890978, 39.266501 ], [ -76.890775, 39.267142 ], [ -76.890556, 39.26778 ], [ -76.890127, 39.268997 ], [ -76.890003, 39.269336 ], [ -76.889925, 39.269549 ], [ -76.889705, 39.270143 ], [ -76.889628, 39.270361 ], [ -76.889491, 39.270729 ], [ -76.889323, 39.271261 ], [ -76.889234, 39.271588 ], [ -76.889038, 39.272185 ], [ -76.888832, 39.272795 ], [ -76.888659, 39.273323 ], [ -76.888499, 39.273796 ], [ -76.888414, 39.274103 ], [ -76.888144, 39.274975 ], [ -76.888143, 39.275178 ], [ -76.888149, 39.275634 ], [ -76.888141, 39.275972 ], [ -76.888135, 39.276203 ], [ -76.888106, 39.276999 ], [ -76.888106, 39.27724 ], [ -76.888183, 39.277746 ], [ -76.888344, 39.278588 ], [ -76.888519, 39.279431 ], [ -76.888685, 39.280251 ], [ -76.88886, 39.281024 ], [ -76.889016, 39.281823 ], [ -76.889177, 39.282592 ], [ -76.889339, 39.283318 ], [ -76.889408, 39.283789 ], [ -76.88942, 39.28405 ], [ -76.8894, 39.284507 ], [ -76.889353, 39.284891 ], [ -76.889272, 39.285147 ], [ -76.889218, 39.28524 ], [ -76.889396, 39.28528 ], [ -76.88966, 39.285318 ], [ -76.889832, 39.285337 ], [ -76.890173, 39.285375 ], [ -76.890913, 39.285453 ], [ -76.891613, 39.285534 ], [ -76.892779, 39.285684 ], [ -76.894114, 39.285804 ], [ -76.89437, 39.285828 ], [ -76.89448, 39.285837 ], [ -76.890823, 39.289173 ], [ -76.889975, 39.289948 ], [ -76.889806, 39.290103 ], [ -76.889729, 39.290065 ], [ -76.889613, 39.29001 ], [ -76.88911, 39.289772 ], [ -76.888796, 39.289621 ], [ -76.887773, 39.289128 ], [ -76.887661, 39.289074 ], [ -76.886098, 39.288336 ], [ -76.884595, 39.287649 ], [ -76.883825, 39.287277 ], [ -76.883128, 39.28694 ], [ -76.881729, 39.286274 ], [ -76.880399, 39.285636 ], [ -76.879398, 39.285165 ], [ -76.878118, 39.284545 ], [ -76.876769, 39.283851 ], [ -76.876647, 39.283789 ], [ -76.87634, 39.283634 ], [ -76.875409, 39.283105 ], [ -76.874609, 39.282655 ], [ -76.874382, 39.282527 ], [ -76.874056, 39.282319 ], [ -76.873448, 39.281984 ], [ -76.873267, 39.281885 ], [ -76.872481, 39.281469 ], [ -76.872155, 39.28135 ], [ -76.871936, 39.281275 ], [ -76.871374, 39.281081 ], [ -76.870703, 39.280897 ], [ -76.870132, 39.28075 ], [ -76.869799, 39.280679 ], [ -76.868465, 39.280437 ], [ -76.8679, 39.280363 ], [ -76.867262, 39.280267 ], [ -76.86667, 39.280177 ], [ -76.866008, 39.28009 ], [ -76.865352, 39.280007 ], [ -76.86472, 39.27992 ], [ -76.863834, 39.279826 ], [ -76.863616, 39.279806 ], [ -76.863218, 39.279769 ], [ -76.862832, 39.279734 ], [ -76.862409, 39.279695 ], [ -76.862262, 39.279682 ], [ -76.861319, 39.279613 ], [ -76.860231, 39.279532 ], [ -76.860358, 39.279352 ], [ -76.861245, 39.277897 ], [ -76.861667, 39.276437 ], [ -76.861821, 39.27589 ], [ -76.861964, 39.275491 ], [ -76.862094, 39.27529 ], [ -76.862277, 39.275041 ], [ -76.862597, 39.274729 ], [ -76.86297, 39.274395 ], [ -76.863236, 39.274175 ], [ -76.863504, 39.273962 ], [ -76.864083, 39.273473 ], [ -76.864273, 39.273322 ], [ -76.86446, 39.273174 ], [ -76.864617, 39.273052 ], [ -76.864748, 39.272917 ], [ -76.864893, 39.27276 ], [ -76.865004, 39.272603 ], [ -76.865096, 39.272442 ], [ -76.865186, 39.2722 ], [ -76.865244, 39.271998 ], [ -76.865273, 39.271814 ], [ -76.865303, 39.271601 ], [ -76.865317, 39.271294 ], [ -76.865267, 39.271102 ], [ -76.865205, 39.270947 ], [ -76.865154, 39.270825 ], [ -76.865094, 39.270695 ], [ -76.865048, 39.270606 ], [ -76.864963, 39.27045 ], [ -76.864871, 39.270295 ], [ -76.864735, 39.270073 ], [ -76.864452, 39.26958 ], [ -76.864244, 39.269159 ], [ -76.864084, 39.268812 ], [ -76.863939, 39.268534 ], [ -76.86371, 39.268139 ], [ -76.863425, 39.267654 ], [ -76.863267, 39.267393 ], [ -76.862744, 39.266485 ], [ -76.862395, 39.265864 ], [ -76.862222, 39.265484 ], [ -76.862181, 39.265371 ], [ -76.862109, 39.265029 ], [ -76.862076, 39.264846 ], [ -76.862056, 39.264605 ], [ -76.862064, 39.264419 ], [ -76.862078, 39.264297 ], [ -76.86211, 39.26414 ], [ -76.862148, 39.263997 ], [ -76.862229, 39.263825 ], [ -76.862423, 39.263409 ], [ -76.862979, 39.262309 ], [ -76.863159, 39.261933 ], [ -76.863622, 39.261021 ], [ -76.863842, 39.260488 ], [ -76.864054, 39.260003 ], [ -76.865498, 39.256784 ], [ -76.866081, 39.255518 ], [ -76.866543, 39.254515 ], [ -76.866826, 39.253967 ], [ -76.866925, 39.253738 ], [ -76.867014, 39.253513 ], [ -76.867091, 39.253317 ], [ -76.867197, 39.253021 ], [ -76.86731, 39.252548 ], [ -76.867386, 39.252249 ], [ -76.867413, 39.252143 ], [ -76.867494, 39.251734 ], [ -76.867498, 39.251702 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "605503", "GEOID10": "24027605503", "NAME10": "6055.03", "NAMELSAD10": "Census Tract 6055.03", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 3158645, "AWATER10": 8444, "INTPTLAT10": "+39.2274469", "INTPTLON10": "-076.8803625" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.884053, 39.235427 ], [ -76.883983, 39.235429 ], [ -76.880951, 39.235524 ], [ -76.879839, 39.235561 ], [ -76.879152, 39.235581 ], [ -76.878161, 39.23561 ], [ -76.877313, 39.235635 ], [ -76.875646, 39.235687 ], [ -76.875368, 39.235696 ], [ -76.87345, 39.235787 ], [ -76.871573, 39.235861 ], [ -76.871369, 39.235869 ], [ -76.870766, 39.235881 ], [ -76.870245, 39.235855 ], [ -76.869847, 39.235808 ], [ -76.869588, 39.235778 ], [ -76.86878, 39.235675 ], [ -76.868546, 39.235658 ], [ -76.868474, 39.234553 ], [ -76.868431, 39.233877 ], [ -76.868354, 39.23388 ], [ -76.867631, 39.233946 ], [ -76.867162, 39.233989 ], [ -76.866848, 39.233997 ], [ -76.866664, 39.233982 ], [ -76.866443, 39.233937 ], [ -76.866238, 39.233889 ], [ -76.86605, 39.233827 ], [ -76.865887, 39.233747 ], [ -76.865675, 39.233638 ], [ -76.865531, 39.233543 ], [ -76.865429, 39.233464 ], [ -76.865274, 39.233322 ], [ -76.865191, 39.23322 ], [ -76.864982, 39.232941 ], [ -76.864657, 39.232448 ], [ -76.864197, 39.231762 ], [ -76.863933, 39.231376 ], [ -76.864652, 39.230976 ], [ -76.865181, 39.23063 ], [ -76.86569, 39.230272 ], [ -76.866187, 39.229899 ], [ -76.866092, 39.22931 ], [ -76.866063, 39.229107 ], [ -76.866036, 39.228961 ], [ -76.866004, 39.228772 ], [ -76.865986, 39.228622 ], [ -76.865982, 39.228537 ], [ -76.866001, 39.22838 ], [ -76.866038, 39.228252 ], [ -76.866107, 39.228099 ], [ -76.866188, 39.227951 ], [ -76.866245, 39.227853 ], [ -76.866288, 39.227754 ], [ -76.866326, 39.227632 ], [ -76.866347, 39.227556 ], [ -76.866363, 39.227482 ], [ -76.867636, 39.227627 ], [ -76.867771, 39.226876 ], [ -76.867808, 39.226889 ], [ -76.867822, 39.22689 ], [ -76.867841, 39.226889 ], [ -76.867866, 39.226881 ], [ -76.867901, 39.226864 ], [ -76.868056, 39.226792 ], [ -76.868143, 39.226747 ], [ -76.868248, 39.226678 ], [ -76.868326, 39.226608 ], [ -76.868405, 39.226515 ], [ -76.868447, 39.22647 ], [ -76.868537, 39.226413 ], [ -76.868647, 39.226368 ], [ -76.868757, 39.226344 ], [ -76.868993, 39.226307 ], [ -76.869106, 39.226291 ], [ -76.869148, 39.226246 ], [ -76.869154, 39.226197 ], [ -76.869154, 39.226136 ], [ -76.869159, 39.226091 ], [ -76.869233, 39.226071 ], [ -76.869379, 39.226104 ], [ -76.869432, 39.226112 ], [ -76.869484, 39.22608 ], [ -76.8695, 39.226031 ], [ -76.869485, 39.225982 ], [ -76.869474, 39.225937 ], [ -76.869485, 39.225884 ], [ -76.869537, 39.225843 ], [ -76.869606, 39.225811 ], [ -76.869721, 39.225803 ], [ -76.869742, 39.225839 ], [ -76.869779, 39.225872 ], [ -76.869823, 39.22588 ], [ -76.869902, 39.22586 ], [ -76.870316, 39.225815 ], [ -76.870547, 39.225803 ], [ -76.870684, 39.225808 ], [ -76.870799, 39.22584 ], [ -76.87103, 39.22589 ], [ -76.871171, 39.225955 ], [ -76.871216, 39.226024 ], [ -76.871284, 39.226049 ], [ -76.871378, 39.226061 ], [ -76.871483, 39.226123 ], [ -76.871567, 39.226155 ], [ -76.87163, 39.226172 ], [ -76.871672, 39.226212 ], [ -76.871714, 39.226261 ], [ -76.871735, 39.226278 ], [ -76.871804, 39.226285 ], [ -76.871884, 39.22625 ], [ -76.871928, 39.226235 ], [ -76.871992, 39.226232 ], [ -76.87207, 39.226251 ], [ -76.87213, 39.226285 ], [ -76.872158, 39.226322 ], [ -76.87217, 39.226359 ], [ -76.87219, 39.226412 ], [ -76.872198, 39.226506 ], [ -76.872214, 39.226524 ], [ -76.872242, 39.226524 ], [ -76.872314, 39.226512 ], [ -76.872378, 39.226478 ], [ -76.872422, 39.226462 ], [ -76.87247, 39.226462 ], [ -76.872506, 39.226487 ], [ -76.872522, 39.226522 ], [ -76.872518, 39.226556 ], [ -76.872506, 39.226599 ], [ -76.872494, 39.226661 ], [ -76.872502, 39.226727 ], [ -76.872518, 39.226773 ], [ -76.87257, 39.226843 ], [ -76.872679, 39.226779 ], [ -76.872712, 39.226767 ], [ -76.87274, 39.226748 ], [ -76.872758, 39.226733 ], [ -76.872788, 39.226725 ], [ -76.872838, 39.226724 ], [ -76.872887, 39.226731 ], [ -76.872948, 39.226743 ], [ -76.873029, 39.226763 ], [ -76.873177, 39.226784 ], [ -76.873285, 39.226787 ], [ -76.873383, 39.226782 ], [ -76.873442, 39.226773 ], [ -76.87351, 39.226756 ], [ -76.87363, 39.226724 ], [ -76.873757, 39.226707 ], [ -76.873822, 39.22669 ], [ -76.873916, 39.226669 ], [ -76.873998, 39.226669 ], [ -76.874157, 39.226699 ], [ -76.874255, 39.226738 ], [ -76.87437, 39.22678 ], [ -76.874501, 39.226836 ], [ -76.874645, 39.226774 ], [ -76.874811, 39.226723 ], [ -76.874962, 39.226684 ], [ -76.875098, 39.226641 ], [ -76.875194, 39.226587 ], [ -76.875264, 39.226501 ], [ -76.87531, 39.226419 ], [ -76.875395, 39.22638 ], [ -76.875531, 39.226368 ], [ -76.875692, 39.226325 ], [ -76.875823, 39.226283 ], [ -76.875949, 39.226228 ], [ -76.876158, 39.226134 ], [ -76.876273, 39.226111 ], [ -76.876384, 39.226111 ], [ -76.876465, 39.226123 ], [ -76.876525, 39.226119 ], [ -76.876565, 39.226115 ], [ -76.876641, 39.226096 ], [ -76.876701, 39.226072 ], [ -76.876762, 39.225994 ], [ -76.876782, 39.22592 ], [ -76.876807, 39.225838 ], [ -76.876883, 39.225697 ], [ -76.877047, 39.225494 ], [ -76.877107, 39.225432 ], [ -76.877167, 39.225373 ], [ -76.877218, 39.225338 ], [ -76.877298, 39.225299 ], [ -76.877394, 39.225225 ], [ -76.87751, 39.225147 ], [ -76.877596, 39.225061 ], [ -76.877999, 39.224448 ], [ -76.877999, 39.224369 ], [ -76.877994, 39.224311 ], [ -76.877969, 39.224237 ], [ -76.877969, 39.224154 ], [ -76.87804, 39.224078 ], [ -76.878095, 39.224022 ], [ -76.878251, 39.223994 ], [ -76.878332, 39.223963 ], [ -76.878397, 39.223909 ], [ -76.878473, 39.223842 ], [ -76.878569, 39.223745 ], [ -76.878649, 39.223616 ], [ -76.878689, 39.2236 ], [ -76.878805, 39.2236 ], [ -76.878871, 39.223596 ], [ -76.878906, 39.223569 ], [ -76.878956, 39.223507 ], [ -76.878992, 39.223444 ], [ -76.879034, 39.223386 ], [ -76.879045, 39.223327 ], [ -76.87904, 39.22326 ], [ -76.87902, 39.223182 ], [ -76.879, 39.223096 ], [ -76.879005, 39.223006 ], [ -76.87904, 39.222913 ], [ -76.879065, 39.222858 ], [ -76.879081, 39.222784 ], [ -76.879101, 39.222564 ], [ -76.879081, 39.222285 ], [ -76.879051, 39.222093 ], [ -76.879051, 39.221854 ], [ -76.879082, 39.221767 ], [ -76.879144, 39.221687 ], [ -76.879257, 39.221599 ], [ -76.879411, 39.221496 ], [ -76.879555, 39.221408 ], [ -76.87977, 39.221305 ], [ -76.880017, 39.221122 ], [ -76.880253, 39.220938 ], [ -76.880438, 39.220795 ], [ -76.880736, 39.22062 ], [ -76.880808, 39.220588 ], [ -76.880911, 39.220548 ], [ -76.881065, 39.220445 ], [ -76.88126, 39.22036 ], [ -76.881301, 39.220349 ], [ -76.881383, 39.220355 ], [ -76.881444, 39.220342 ], [ -76.881507, 39.220326 ], [ -76.881578, 39.220328 ], [ -76.881696, 39.220335 ], [ -76.881814, 39.220326 ], [ -76.881886, 39.220302 ], [ -76.881968, 39.220278 ], [ -76.882035, 39.220252 ], [ -76.881948, 39.22012 ], [ -76.881889, 39.220035 ], [ -76.881788, 39.21993 ], [ -76.881655, 39.21983 ], [ -76.881476, 39.219727 ], [ -76.881328, 39.219663 ], [ -76.881146, 39.2196 ], [ -76.881087, 39.219576 ], [ -76.881, 39.21954 ], [ -76.880876, 39.219485 ], [ -76.880758, 39.219397 ], [ -76.88061, 39.219293 ], [ -76.880507, 39.219208 ], [ -76.880396, 39.219113 ], [ -76.880298, 39.218997 ], [ -76.880228, 39.218898 ], [ -76.880157, 39.218764 ], [ -76.880097, 39.218618 ], [ -76.880056, 39.218458 ], [ -76.88003, 39.218308 ], [ -76.880016, 39.218129 ], [ -76.880021, 39.217982 ], [ -76.880034, 39.217795 ], [ -76.880052, 39.217625 ], [ -76.880071, 39.217495 ], [ -76.880124, 39.217062 ], [ -76.880192, 39.21651 ], [ -76.880209, 39.216246 ], [ -76.880703, 39.216272 ], [ -76.881043, 39.21629 ], [ -76.881236, 39.216294 ], [ -76.88147, 39.216299 ], [ -76.88156, 39.2163 ], [ -76.881841, 39.216303 ], [ -76.882125, 39.216307 ], [ -76.882476, 39.216292 ], [ -76.882946, 39.216253 ], [ -76.883282, 39.216206 ], [ -76.883617, 39.216151 ], [ -76.883905, 39.216087 ], [ -76.883979, 39.216301 ], [ -76.884188, 39.216261 ], [ -76.884364, 39.216219 ], [ -76.884521, 39.21617 ], [ -76.884959, 39.216016 ], [ -76.885339, 39.215879 ], [ -76.885547, 39.215802 ], [ -76.885466, 39.215629 ], [ -76.885728, 39.215551 ], [ -76.886416, 39.215306 ], [ -76.88696, 39.215124 ], [ -76.887318, 39.215006 ], [ -76.88745, 39.214962 ], [ -76.887483, 39.215136 ], [ -76.887614, 39.215822 ], [ -76.887719, 39.216376 ], [ -76.887751, 39.216569 ], [ -76.8879, 39.217235 ], [ -76.88796, 39.217576 ], [ -76.887999, 39.217826 ], [ -76.888031, 39.218163 ], [ -76.888235, 39.219402 ], [ -76.88825, 39.219529 ], [ -76.888316, 39.220107 ], [ -76.888322, 39.220205 ], [ -76.888355, 39.220515 ], [ -76.888435, 39.221126 ], [ -76.888458, 39.221366 ], [ -76.888452, 39.221538 ], [ -76.888899, 39.221561 ], [ -76.890292, 39.221641 ], [ -76.890953, 39.221677 ], [ -76.891369, 39.221713 ], [ -76.891753, 39.221768 ], [ -76.891918, 39.221809 ], [ -76.892111, 39.221879 ], [ -76.892353, 39.222014 ], [ -76.892448, 39.222086 ], [ -76.892496, 39.222122 ], [ -76.892619, 39.222231 ], [ -76.892744, 39.222386 ], [ -76.892808, 39.222478 ], [ -76.892859, 39.222593 ], [ -76.89294, 39.222798 ], [ -76.893069, 39.223233 ], [ -76.893206, 39.223659 ], [ -76.893414, 39.224302 ], [ -76.893613, 39.224891 ], [ -76.89376, 39.225212 ], [ -76.894045, 39.225836 ], [ -76.89385, 39.225884 ], [ -76.893684, 39.225936 ], [ -76.893489, 39.225976 ], [ -76.893375, 39.225998 ], [ -76.893252, 39.225998 ], [ -76.893114, 39.225994 ], [ -76.892991, 39.225987 ], [ -76.892834, 39.225964 ], [ -76.892522, 39.225898 ], [ -76.892442, 39.225878 ], [ -76.892361, 39.225863 ], [ -76.892274, 39.225859 ], [ -76.892179, 39.225859 ], [ -76.892094, 39.225862 ], [ -76.892021, 39.22587 ], [ -76.891916, 39.225889 ], [ -76.891839, 39.22591 ], [ -76.891579, 39.225985 ], [ -76.891069, 39.226163 ], [ -76.890558, 39.226349 ], [ -76.890123, 39.226517 ], [ -76.889981, 39.226577 ], [ -76.88985, 39.226646 ], [ -76.889731, 39.226722 ], [ -76.889646, 39.226788 ], [ -76.889553, 39.226865 ], [ -76.889496, 39.226927 ], [ -76.889437, 39.226997 ], [ -76.889389, 39.227074 ], [ -76.889331, 39.227157 ], [ -76.889285, 39.227327 ], [ -76.889279, 39.227403 ], [ -76.889279, 39.227497 ], [ -76.889282, 39.22769 ], [ -76.8893, 39.227975 ], [ -76.889347, 39.228373 ], [ -76.889386, 39.228701 ], [ -76.889489, 39.229117 ], [ -76.889556, 39.229397 ], [ -76.889599, 39.229575 ], [ -76.889664, 39.229824 ], [ -76.889758, 39.230222 ], [ -76.889788, 39.23033 ], [ -76.889896, 39.230726 ], [ -76.890198, 39.231898 ], [ -76.890484, 39.232946 ], [ -76.890596, 39.233322 ], [ -76.890697, 39.233653 ], [ -76.890824, 39.234054 ], [ -76.890949, 39.234416 ], [ -76.888182, 39.234822 ], [ -76.887931, 39.234859 ], [ -76.886926, 39.235007 ], [ -76.885061, 39.235297 ], [ -76.884876, 39.23532 ], [ -76.884272, 39.235399 ], [ -76.884053, 39.235427 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "605502", "GEOID10": "24027605502", "NAME10": "6055.02", "NAMELSAD10": "Census Tract 6055.02", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 5260984, "AWATER10": 16405, "INTPTLAT10": "+39.2257617", "INTPTLON10": "-076.9054701" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.908812, 39.21739 ], [ -76.90882, 39.217394 ], [ -76.909061, 39.217453 ], [ -76.909194, 39.217499 ], [ -76.909264, 39.217557 ], [ -76.909307, 39.217628 ], [ -76.90936, 39.217728 ], [ -76.909408, 39.217815 ], [ -76.909483, 39.217894 ], [ -76.909692, 39.218011 ], [ -76.909892, 39.21809 ], [ -76.910042, 39.218173 ], [ -76.910165, 39.218278 ], [ -76.910267, 39.218394 ], [ -76.910384, 39.218573 ], [ -76.910448, 39.218631 ], [ -76.910507, 39.218669 ], [ -76.910812, 39.218769 ], [ -76.911147, 39.218998 ], [ -76.911227, 39.219073 ], [ -76.911259, 39.219111 ], [ -76.91128, 39.219177 ], [ -76.911296, 39.21929 ], [ -76.911333, 39.219439 ], [ -76.911333, 39.219523 ], [ -76.911365, 39.219606 ], [ -76.91144, 39.219685 ], [ -76.91155, 39.219747 ], [ -76.911646, 39.219822 ], [ -76.911775, 39.21991 ], [ -76.911823, 39.21996 ], [ -76.911855, 39.220022 ], [ -76.911855, 39.220085 ], [ -76.911844, 39.220147 ], [ -76.91179, 39.220235 ], [ -76.911715, 39.220289 ], [ -76.911714, 39.220289 ], [ -76.911629, 39.220359 ], [ -76.911549, 39.220447 ], [ -76.911455, 39.220513 ], [ -76.911418, 39.220613 ], [ -76.911396, 39.220713 ], [ -76.911401, 39.220808 ], [ -76.911423, 39.220888 ], [ -76.911455, 39.220942 ], [ -76.911514, 39.220987 ], [ -76.911621, 39.221037 ], [ -76.911749, 39.221079 ], [ -76.911899, 39.221121 ], [ -76.912092, 39.22115 ], [ -76.912204, 39.221204 ], [ -76.912284, 39.221271 ], [ -76.912324, 39.221325 ], [ -76.912335, 39.2214 ], [ -76.912335, 39.221433 ], [ -76.912329, 39.221458 ], [ -76.912249, 39.221521 ], [ -76.912045, 39.221629 ], [ -76.911853, 39.22172 ], [ -76.911804, 39.221766 ], [ -76.911783, 39.221816 ], [ -76.91181, 39.221878 ], [ -76.911973, 39.222086 ], [ -76.912026, 39.22219 ], [ -76.912058, 39.222286 ], [ -76.91209, 39.222415 ], [ -76.912063, 39.222511 ], [ -76.912015, 39.222582 ], [ -76.911972, 39.222661 ], [ -76.911945, 39.222765 ], [ -76.911958, 39.222885 ], [ -76.911964, 39.222981 ], [ -76.912006, 39.223073 ], [ -76.912065, 39.223139 ], [ -76.912193, 39.223206 ], [ -76.912279, 39.223289 ], [ -76.912375, 39.223377 ], [ -76.912493, 39.223502 ], [ -76.912536, 39.223576 ], [ -76.91256, 39.223664 ], [ -76.912544, 39.223726 ], [ -76.912485, 39.223818 ], [ -76.91242, 39.223951 ], [ -76.912393, 39.224051 ], [ -76.91243, 39.224205 ], [ -76.912524, 39.224442 ], [ -76.912609, 39.224567 ], [ -76.912679, 39.224667 ], [ -76.91277, 39.224758 ], [ -76.912839, 39.224846 ], [ -76.912861, 39.224937 ], [ -76.912882, 39.22505 ], [ -76.9129, 39.225216 ], [ -76.912906, 39.225387 ], [ -76.912916, 39.225624 ], [ -76.912916, 39.225761 ], [ -76.912948, 39.225865 ], [ -76.913025, 39.225986 ], [ -76.913116, 39.226057 ], [ -76.913239, 39.226115 ], [ -76.913416, 39.226178 ], [ -76.913635, 39.226236 ], [ -76.913949, 39.226316 ], [ -76.914077, 39.226357 ], [ -76.914157, 39.226411 ], [ -76.914243, 39.226495 ], [ -76.914307, 39.226603 ], [ -76.914366, 39.226707 ], [ -76.914446, 39.226811 ], [ -76.914521, 39.226894 ], [ -76.914649, 39.226994 ], [ -76.914748, 39.227082 ], [ -76.914828, 39.227182 ], [ -76.91485, 39.22724 ], [ -76.914903, 39.227336 ], [ -76.914962, 39.22739 ], [ -76.91509, 39.227473 ], [ -76.915187, 39.227532 ], [ -76.915385, 39.227656 ], [ -76.915443, 39.227711 ], [ -76.915574, 39.227844 ], [ -76.915703, 39.227997 ], [ -76.915806, 39.228094 ], [ -76.915874, 39.228147 ], [ -76.915954, 39.228188 ], [ -76.91609, 39.228255 ], [ -76.916204, 39.228297 ], [ -76.916342, 39.228352 ], [ -76.91648, 39.228447 ], [ -76.916564, 39.22853 ], [ -76.916625, 39.228637 ], [ -76.916632, 39.228732 ], [ -76.916643, 39.228914 ], [ -76.916647, 39.229065 ], [ -76.916669, 39.22916 ], [ -76.916696, 39.229211 ], [ -76.917049, 39.229446 ], [ -76.91672, 39.229819 ], [ -76.916556, 39.229975 ], [ -76.916328, 39.23016 ], [ -76.916091, 39.230309 ], [ -76.915948, 39.230389 ], [ -76.91581, 39.230453 ], [ -76.915602, 39.230544 ], [ -76.915432, 39.230603 ], [ -76.915217, 39.230669 ], [ -76.914954, 39.230728 ], [ -76.914825, 39.230749 ], [ -76.914623, 39.230773 ], [ -76.914417, 39.230787 ], [ -76.91399, 39.230818 ], [ -76.913462, 39.230851 ], [ -76.912914, 39.230906 ], [ -76.912687, 39.230926 ], [ -76.912552, 39.230947 ], [ -76.91226, 39.231015 ], [ -76.911909, 39.231142 ], [ -76.911291, 39.231429 ], [ -76.911039, 39.231532 ], [ -76.910706, 39.231669 ], [ -76.910482, 39.231744 ], [ -76.910117, 39.231879 ], [ -76.90995, 39.231938 ], [ -76.909795, 39.231984 ], [ -76.909621, 39.232034 ], [ -76.909443, 39.232076 ], [ -76.909281, 39.232106 ], [ -76.909044, 39.232132 ], [ -76.908921, 39.232146 ], [ -76.908188, 39.232231 ], [ -76.906062, 39.232486 ], [ -76.904183, 39.232719 ], [ -76.903472, 39.232798 ], [ -76.902909, 39.23286 ], [ -76.902559, 39.232909 ], [ -76.901778, 39.233021 ], [ -76.900781, 39.233182 ], [ -76.900751, 39.233187 ], [ -76.899982, 39.233296 ], [ -76.899037, 39.233428 ], [ -76.897826, 39.233589 ], [ -76.897353, 39.233637 ], [ -76.896697, 39.233705 ], [ -76.895342, 39.233878 ], [ -76.894645, 39.233948 ], [ -76.894297, 39.233978 ], [ -76.894039, 39.234002 ], [ -76.893433, 39.234059 ], [ -76.89318, 39.234093 ], [ -76.892438, 39.234191 ], [ -76.891674, 39.234305 ], [ -76.890949, 39.234416 ], [ -76.890824, 39.234054 ], [ -76.890697, 39.233653 ], [ -76.890596, 39.233322 ], [ -76.890484, 39.232946 ], [ -76.890198, 39.231898 ], [ -76.889896, 39.230726 ], [ -76.889788, 39.23033 ], [ -76.889758, 39.230222 ], [ -76.889664, 39.229824 ], [ -76.889599, 39.229575 ], [ -76.889556, 39.229397 ], [ -76.889489, 39.229117 ], [ -76.889386, 39.228701 ], [ -76.889347, 39.228373 ], [ -76.8893, 39.227975 ], [ -76.889282, 39.22769 ], [ -76.889279, 39.227497 ], [ -76.889279, 39.227403 ], [ -76.889285, 39.227327 ], [ -76.889331, 39.227157 ], [ -76.889389, 39.227074 ], [ -76.889437, 39.226997 ], [ -76.889496, 39.226927 ], [ -76.889553, 39.226865 ], [ -76.889646, 39.226788 ], [ -76.889731, 39.226722 ], [ -76.88985, 39.226646 ], [ -76.889981, 39.226577 ], [ -76.890123, 39.226517 ], [ -76.890558, 39.226349 ], [ -76.891069, 39.226163 ], [ -76.891579, 39.225985 ], [ -76.891839, 39.22591 ], [ -76.891916, 39.225889 ], [ -76.892021, 39.22587 ], [ -76.892094, 39.225862 ], [ -76.892179, 39.225859 ], [ -76.892274, 39.225859 ], [ -76.892361, 39.225863 ], [ -76.892442, 39.225878 ], [ -76.892522, 39.225898 ], [ -76.892834, 39.225964 ], [ -76.892991, 39.225987 ], [ -76.893114, 39.225994 ], [ -76.893252, 39.225998 ], [ -76.893375, 39.225998 ], [ -76.893489, 39.225976 ], [ -76.893684, 39.225936 ], [ -76.89385, 39.225884 ], [ -76.894045, 39.225836 ], [ -76.89376, 39.225212 ], [ -76.893613, 39.224891 ], [ -76.893414, 39.224302 ], [ -76.893206, 39.223659 ], [ -76.893069, 39.223233 ], [ -76.89294, 39.222798 ], [ -76.892859, 39.222593 ], [ -76.892808, 39.222478 ], [ -76.892744, 39.222386 ], [ -76.892619, 39.222231 ], [ -76.892496, 39.222122 ], [ -76.892448, 39.222086 ], [ -76.892353, 39.222014 ], [ -76.892111, 39.221879 ], [ -76.891918, 39.221809 ], [ -76.891753, 39.221768 ], [ -76.891369, 39.221713 ], [ -76.890953, 39.221677 ], [ -76.890292, 39.221641 ], [ -76.888899, 39.221561 ], [ -76.888452, 39.221538 ], [ -76.888458, 39.221366 ], [ -76.888435, 39.221126 ], [ -76.888355, 39.220515 ], [ -76.888322, 39.220205 ], [ -76.888316, 39.220107 ], [ -76.88825, 39.219529 ], [ -76.888235, 39.219402 ], [ -76.888031, 39.218163 ], [ -76.887999, 39.217826 ], [ -76.88796, 39.217576 ], [ -76.8879, 39.217235 ], [ -76.887751, 39.216569 ], [ -76.887719, 39.216376 ], [ -76.887614, 39.215822 ], [ -76.887483, 39.215136 ], [ -76.88745, 39.214962 ], [ -76.887831, 39.214814 ], [ -76.88811, 39.214712 ], [ -76.888451, 39.214544 ], [ -76.888699, 39.214412 ], [ -76.888955, 39.214291 ], [ -76.889255, 39.214118 ], [ -76.891175, 39.212763 ], [ -76.891805, 39.212344 ], [ -76.892623, 39.211791 ], [ -76.892847, 39.211638 ], [ -76.892975, 39.211554 ], [ -76.893114, 39.211465 ], [ -76.893257, 39.211394 ], [ -76.893316, 39.211431 ], [ -76.89356, 39.211581 ], [ -76.893793, 39.211715 ], [ -76.893877, 39.211756 ], [ -76.894018, 39.211822 ], [ -76.894167, 39.211878 ], [ -76.894319, 39.211929 ], [ -76.894448, 39.211963 ], [ -76.894625, 39.211994 ], [ -76.894764, 39.21201 ], [ -76.89484, 39.212007 ], [ -76.894892, 39.212012 ], [ -76.895955, 39.212182 ], [ -76.89617, 39.212205 ], [ -76.896316, 39.21222 ], [ -76.8966, 39.212258 ], [ -76.897452, 39.212375 ], [ -76.897899, 39.212437 ], [ -76.898713, 39.212553 ], [ -76.899126, 39.212613 ], [ -76.899187, 39.21262 ], [ -76.899389, 39.212647 ], [ -76.89953, 39.212657 ], [ -76.899674, 39.212657 ], [ -76.899827, 39.212654 ], [ -76.900038, 39.212631 ], [ -76.90014, 39.212621 ], [ -76.900318, 39.212585 ], [ -76.900476, 39.212552 ], [ -76.900648, 39.212499 ], [ -76.900798, 39.212436 ], [ -76.900851, 39.21253 ], [ -76.900929, 39.212646 ], [ -76.901074, 39.21279 ], [ -76.901155, 39.212851 ], [ -76.901237, 39.212898 ], [ -76.901249, 39.212905 ], [ -76.901384, 39.212977 ], [ -76.901541, 39.213065 ], [ -76.901658, 39.213121 ], [ -76.901808, 39.213184 ], [ -76.901969, 39.213258 ], [ -76.902077, 39.213314 ], [ -76.90219, 39.213375 ], [ -76.902316, 39.213465 ], [ -76.902565, 39.213312 ], [ -76.902677, 39.213232 ], [ -76.902803, 39.213137 ], [ -76.902886, 39.21306 ], [ -76.902909, 39.213016 ], [ -76.902951, 39.212942 ], [ -76.903024, 39.212786 ], [ -76.903055, 39.212696 ], [ -76.903061, 39.212645 ], [ -76.903068, 39.212598 ], [ -76.903091, 39.212165 ], [ -76.903099, 39.212055 ], [ -76.903107, 39.212008 ], [ -76.903228, 39.211646 ], [ -76.903244, 39.211538 ], [ -76.903242, 39.211456 ], [ -76.903229, 39.211375 ], [ -76.903191, 39.211275 ], [ -76.903144, 39.211185 ], [ -76.903084, 39.211112 ], [ -76.903005, 39.211041 ], [ -76.902916, 39.210988 ], [ -76.902783, 39.210941 ], [ -76.90269, 39.210912 ], [ -76.90259, 39.210896 ], [ -76.902396, 39.210883 ], [ -76.902075, 39.210869 ], [ -76.902071, 39.210695 ], [ -76.902055, 39.210531 ], [ -76.902007, 39.210358 ], [ -76.901953, 39.210195 ], [ -76.901717, 39.209768 ], [ -76.901501, 39.209416 ], [ -76.901234, 39.208926 ], [ -76.901121, 39.208712 ], [ -76.901065, 39.208614 ], [ -76.900697, 39.207977 ], [ -76.900332, 39.207367 ], [ -76.900234, 39.207232 ], [ -76.900142, 39.207118 ], [ -76.900028, 39.20701 ], [ -76.899978, 39.206966 ], [ -76.899714, 39.206725 ], [ -76.899528, 39.206566 ], [ -76.899391, 39.206462 ], [ -76.89924, 39.206364 ], [ -76.899128, 39.206299 ], [ -76.89905, 39.206257 ], [ -76.898874, 39.206185 ], [ -76.898665, 39.206107 ], [ -76.898584, 39.206086 ], [ -76.89851, 39.206067 ], [ -76.898342, 39.206035 ], [ -76.898156, 39.206002 ], [ -76.897948, 39.205973 ], [ -76.897569, 39.205956 ], [ -76.897424, 39.205959 ], [ -76.897227, 39.205975 ], [ -76.896923, 39.206019 ], [ -76.896695, 39.206066 ], [ -76.896481, 39.206125 ], [ -76.896265, 39.206192 ], [ -76.89597, 39.206292 ], [ -76.895836, 39.206039 ], [ -76.895801, 39.205996 ], [ -76.895766, 39.205972 ], [ -76.895689, 39.205924 ], [ -76.895634, 39.205885 ], [ -76.895593, 39.205814 ], [ -76.895588, 39.205723 ], [ -76.895599, 39.205553 ], [ -76.895621, 39.205461 ], [ -76.895639, 39.205388 ], [ -76.895691, 39.205194 ], [ -76.895725, 39.205034 ], [ -76.895714, 39.204871 ], [ -76.895714, 39.20476 ], [ -76.895725, 39.204667 ], [ -76.895843, 39.204346 ], [ -76.895874, 39.203669 ], [ -76.895938, 39.203426 ], [ -76.895888, 39.203284 ], [ -76.89585, 39.203195 ], [ -76.895838, 39.203143 ], [ -76.895855, 39.203071 ], [ -76.895884, 39.203018 ], [ -76.895906, 39.202972 ], [ -76.89591, 39.20295 ], [ -76.895889, 39.202927 ], [ -76.895855, 39.20291 ], [ -76.89583, 39.202891 ], [ -76.89583, 39.202841 ], [ -76.895843, 39.20274 ], [ -76.89586, 39.202707 ], [ -76.895923, 39.202668 ], [ -76.895999, 39.202593 ], [ -76.896058, 39.20253 ], [ -76.896159, 39.202507 ], [ -76.896235, 39.202485 ], [ -76.896286, 39.202449 ], [ -76.89634, 39.20239 ], [ -76.896419, 39.202108 ], [ -76.896462, 39.201942 ], [ -76.896529, 39.201734 ], [ -76.896576, 39.201433 ], [ -76.896602, 39.201292 ], [ -76.896602, 39.2012 ], [ -76.896582, 39.201139 ], [ -76.896525, 39.201079 ], [ -76.896459, 39.201041 ], [ -76.896442, 39.201031 ], [ -76.896288, 39.200979 ], [ -76.896195, 39.200946 ], [ -76.896128, 39.200894 ], [ -76.896066, 39.200822 ], [ -76.896019, 39.200729 ], [ -76.895989, 39.200561 ], [ -76.895989, 39.200388 ], [ -76.896028, 39.200199 ], [ -76.896054, 39.200111 ], [ -76.896126, 39.199975 ], [ -76.896194, 39.199806 ], [ -76.896226, 39.199694 ], [ -76.896246, 39.199625 ], [ -76.896324, 39.199292 ], [ -76.896347, 39.199196 ], [ -76.896358, 39.198866 ], [ -76.896345, 39.198746 ], [ -76.896304, 39.198646 ], [ -76.896227, 39.198549 ], [ -76.896123, 39.198433 ], [ -76.896036, 39.198316 ], [ -76.895958, 39.198183 ], [ -76.895897, 39.198015 ], [ -76.895874, 39.197834 ], [ -76.895864, 39.197424 ], [ -76.89589, 39.197332 ], [ -76.895993, 39.1972 ], [ -76.896163, 39.197042 ], [ -76.896345, 39.196925 ], [ -76.896445, 39.196858 ], [ -76.896502, 39.196802 ], [ -76.89654, 39.196729 ], [ -76.896562, 39.19666 ], [ -76.896555, 39.196508 ], [ -76.896565, 39.196334 ], [ -76.896584, 39.196244 ], [ -76.896613, 39.196181 ], [ -76.896651, 39.196138 ], [ -76.896725, 39.196096 ], [ -76.896815, 39.196063 ], [ -76.896946, 39.196028 ], [ -76.897147, 39.19598 ], [ -76.897369, 39.195924 ], [ -76.897617, 39.195856 ], [ -76.898003, 39.195703 ], [ -76.898294, 39.195931 ], [ -76.898441, 39.196067 ], [ -76.898556, 39.196184 ], [ -76.898653, 39.196291 ], [ -76.898742, 39.196405 ], [ -76.898847, 39.196556 ], [ -76.898944, 39.196771 ], [ -76.899154, 39.197061 ], [ -76.899268, 39.197187 ], [ -76.899373, 39.197269 ], [ -76.899486, 39.197351 ], [ -76.899603, 39.197398 ], [ -76.899678, 39.197428 ], [ -76.899814, 39.197487 ], [ -76.899958, 39.197515 ], [ -76.900109, 39.197548 ], [ -76.900273, 39.1976 ], [ -76.900418, 39.197653 ], [ -76.900532, 39.197716 ], [ -76.900722, 39.197827 ], [ -76.900859, 39.197939 ], [ -76.90096, 39.198068 ], [ -76.900974, 39.198129 ], [ -76.900952, 39.198185 ], [ -76.900895, 39.19824 ], [ -76.900823, 39.198268 ], [ -76.900644, 39.198301 ], [ -76.900479, 39.198335 ], [ -76.90035, 39.198351 ], [ -76.900272, 39.198396 ], [ -76.900264, 39.198485 ], [ -76.900278, 39.198574 ], [ -76.900343, 39.198674 ], [ -76.900463, 39.198786 ], [ -76.900565, 39.19888 ], [ -76.900665, 39.198958 ], [ -76.900844, 39.199053 ], [ -76.90103, 39.199137 ], [ -76.901173, 39.199165 ], [ -76.901396, 39.199172 ], [ -76.901632, 39.199206 ], [ -76.901778, 39.199254 ], [ -76.902106, 39.199298 ], [ -76.902193, 39.199322 ], [ -76.902306, 39.199394 ], [ -76.902388, 39.199482 ], [ -76.902475, 39.199606 ], [ -76.902613, 39.199789 ], [ -76.902762, 39.200013 ], [ -76.902857, 39.200139 ], [ -76.903168, 39.200556 ], [ -76.903409, 39.200847 ], [ -76.903515, 39.200988 ], [ -76.903613, 39.201123 ], [ -76.903733, 39.201275 ], [ -76.903899, 39.201522 ], [ -76.904019, 39.20161 ], [ -76.904309, 39.201686 ], [ -76.904536, 39.201727 ], [ -76.904656, 39.201774 ], [ -76.904784, 39.201857 ], [ -76.904886, 39.201999 ], [ -76.904997, 39.202163 ], [ -76.90507, 39.202281 ], [ -76.905108, 39.202373 ], [ -76.905101, 39.202462 ], [ -76.905057, 39.202553 ], [ -76.905022, 39.202652 ], [ -76.905012, 39.202727 ], [ -76.905021, 39.202813 ], [ -76.905066, 39.202907 ], [ -76.905152, 39.203009 ], [ -76.905272, 39.203115 ], [ -76.905406, 39.203219 ], [ -76.905638, 39.203368 ], [ -76.905807, 39.203494 ], [ -76.906088, 39.203729 ], [ -76.906362, 39.203883 ], [ -76.90665, 39.204006 ], [ -76.906942, 39.204118 ], [ -76.907264, 39.204211 ], [ -76.907937, 39.204368 ], [ -76.908157, 39.204438 ], [ -76.908294, 39.204512 ], [ -76.908361, 39.204589 ], [ -76.908404, 39.204651 ], [ -76.908423, 39.204745 ], [ -76.908417, 39.20485 ], [ -76.908382, 39.204961 ], [ -76.908308, 39.205132 ], [ -76.908113, 39.205509 ], [ -76.907906, 39.205961 ], [ -76.907645, 39.206534 ], [ -76.907572, 39.206742 ], [ -76.907441, 39.206928 ], [ -76.907345, 39.207035 ], [ -76.907239, 39.207101 ], [ -76.907097, 39.207181 ], [ -76.906947, 39.20723 ], [ -76.906746, 39.207307 ], [ -76.906503, 39.207391 ], [ -76.906356, 39.207455 ], [ -76.906257, 39.207532 ], [ -76.906129, 39.207651 ], [ -76.90597, 39.20783 ], [ -76.905873, 39.208013 ], [ -76.905839, 39.208158 ], [ -76.905838, 39.208428 ], [ -76.905881, 39.20858 ], [ -76.905889, 39.208666 ], [ -76.90588, 39.208804 ], [ -76.905855, 39.208903 ], [ -76.905804, 39.209015 ], [ -76.905804, 39.209154 ], [ -76.905829, 39.209246 ], [ -76.90588, 39.209345 ], [ -76.905939, 39.209404 ], [ -76.906048, 39.209476 ], [ -76.906193, 39.209577 ], [ -76.906377, 39.209729 ], [ -76.906468, 39.209817 ], [ -76.906511, 39.20986 ], [ -76.906547, 39.209896 ], [ -76.906709, 39.210069 ], [ -76.906769, 39.210134 ], [ -76.906799, 39.210194 ], [ -76.906824, 39.210294 ], [ -76.906828, 39.210462 ], [ -76.906807, 39.210633 ], [ -76.906761, 39.210837 ], [ -76.906703, 39.211111 ], [ -76.906621, 39.211247 ], [ -76.906587, 39.211329 ], [ -76.906539, 39.211451 ], [ -76.906493, 39.211652 ], [ -76.906455, 39.211936 ], [ -76.906379, 39.212177 ], [ -76.906328, 39.212262 ], [ -76.906267, 39.212315 ], [ -76.906198, 39.212368 ], [ -76.906116, 39.21241 ], [ -76.906048, 39.212455 ], [ -76.90597, 39.212524 ], [ -76.905881, 39.21262 ], [ -76.905779, 39.212701 ], [ -76.905676, 39.212738 ], [ -76.905616, 39.212768 ], [ -76.905481, 39.212812 ], [ -76.90537, 39.212842 ], [ -76.905279, 39.212879 ], [ -76.905235, 39.212922 ], [ -76.905207, 39.212997 ], [ -76.905195, 39.213049 ], [ -76.905195, 39.213117 ], [ -76.905201, 39.213206 ], [ -76.905213, 39.21328 ], [ -76.905212, 39.213367 ], [ -76.905185, 39.213422 ], [ -76.905133, 39.213475 ], [ -76.905065, 39.213527 ], [ -76.90501, 39.213592 ], [ -76.904978, 39.213685 ], [ -76.904926, 39.213753 ], [ -76.90486, 39.213833 ], [ -76.904828, 39.213901 ], [ -76.904789, 39.213993 ], [ -76.904773, 39.21408 ], [ -76.904777, 39.21416 ], [ -76.904816, 39.214252 ], [ -76.904864, 39.214324 ], [ -76.904999, 39.214429 ], [ -76.905042, 39.214478 ], [ -76.905094, 39.214543 ], [ -76.905145, 39.214614 ], [ -76.905225, 39.214688 ], [ -76.905276, 39.214728 ], [ -76.905363, 39.214778 ], [ -76.905471, 39.214816 ], [ -76.905607, 39.214842 ], [ -76.905769, 39.214859 ], [ -76.905921, 39.214888 ], [ -76.906052, 39.214954 ], [ -76.906143, 39.21502 ], [ -76.906247, 39.215094 ], [ -76.906355, 39.21518 ], [ -76.906436, 39.215264 ], [ -76.906745, 39.215595 ], [ -76.90698, 39.215932 ], [ -76.907049, 39.216049 ], [ -76.907097, 39.216116 ], [ -76.907204, 39.216182 ], [ -76.90729, 39.216207 ], [ -76.907419, 39.216216 ], [ -76.907542, 39.216241 ], [ -76.907665, 39.216278 ], [ -76.907729, 39.216337 ], [ -76.907788, 39.216403 ], [ -76.907852, 39.216499 ], [ -76.90787, 39.216624 ], [ -76.907892, 39.216819 ], [ -76.907924, 39.21694 ], [ -76.908004, 39.217032 ], [ -76.908089, 39.217123 ], [ -76.908212, 39.217202 ], [ -76.908325, 39.217252 ], [ -76.908485, 39.217278 ], [ -76.908624, 39.21729 ], [ -76.908812, 39.21739 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "603004", "GEOID10": "24027603004", "NAME10": "6030.04", "NAMELSAD10": "Census Tract 6030.04", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 44425097, "AWATER10": 99882, "INTPTLAT10": "+39.2817022", "INTPTLON10": "-076.9188315" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.985392, 39.266096 ], [ -76.985574, 39.266727 ], [ -76.985885, 39.267675 ], [ -76.985993, 39.268062 ], [ -76.986343, 39.26926 ], [ -76.986469, 39.269658 ], [ -76.986959, 39.27135 ], [ -76.987091, 39.271847 ], [ -76.987186, 39.272269 ], [ -76.987198, 39.272432 ], [ -76.987207, 39.272642 ], [ -76.987206, 39.273074 ], [ -76.987177, 39.273304 ], [ -76.987147, 39.273477 ], [ -76.98709, 39.273701 ], [ -76.98703, 39.273898 ], [ -76.986965, 39.274064 ], [ -76.986896, 39.274222 ], [ -76.986767, 39.274469 ], [ -76.986731, 39.274538 ], [ -76.986592, 39.274766 ], [ -76.986408, 39.275049 ], [ -76.986203, 39.275309 ], [ -76.986129, 39.275407 ], [ -76.986045, 39.275505 ], [ -76.985896, 39.275663 ], [ -76.985612, 39.275928 ], [ -76.985395, 39.276116 ], [ -76.985198, 39.276268 ], [ -76.985017, 39.276409 ], [ -76.984805, 39.276561 ], [ -76.983694, 39.277373 ], [ -76.983262, 39.277677 ], [ -76.982491, 39.27824 ], [ -76.981045, 39.279298 ], [ -76.980871, 39.279414 ], [ -76.980573, 39.279618 ], [ -76.980379, 39.279735 ], [ -76.980081, 39.279918 ], [ -76.979546, 39.280215 ], [ -76.979029, 39.280473 ], [ -76.978812, 39.280572 ], [ -76.978394, 39.280754 ], [ -76.977677, 39.281042 ], [ -76.977254, 39.281206 ], [ -76.976695, 39.281415 ], [ -76.97642, 39.281521 ], [ -76.975709, 39.281799 ], [ -76.975534, 39.281864 ], [ -76.974848, 39.282122 ], [ -76.974677, 39.282187 ], [ -76.973704, 39.282562 ], [ -76.973075, 39.282816 ], [ -76.972639, 39.282993 ], [ -76.97225, 39.283131 ], [ -76.971947, 39.283226 ], [ -76.971642, 39.283331 ], [ -76.971327, 39.283411 ], [ -76.970862, 39.283515 ], [ -76.970354, 39.283601 ], [ -76.969764, 39.283656 ], [ -76.969433, 39.283677 ], [ -76.969125, 39.283687 ], [ -76.968581, 39.283687 ], [ -76.968042, 39.283678 ], [ -76.967562, 39.283688 ], [ -76.967122, 39.283712 ], [ -76.966578, 39.283775 ], [ -76.96649, 39.283786 ], [ -76.966106, 39.283836 ], [ -76.965611, 39.283928 ], [ -76.96524, 39.28401 ], [ -76.964729, 39.284136 ], [ -76.964328, 39.284257 ], [ -76.96411, 39.284326 ], [ -76.963886, 39.284402 ], [ -76.96373, 39.284454 ], [ -76.963153, 39.284696 ], [ -76.962721, 39.284902 ], [ -76.962453, 39.285046 ], [ -76.961849, 39.285376 ], [ -76.961479, 39.285616 ], [ -76.961241, 39.285793 ], [ -76.96122, 39.285809 ], [ -76.96061, 39.286214 ], [ -76.959916, 39.286699 ], [ -76.959664, 39.28686 ], [ -76.9594, 39.287023 ], [ -76.959036, 39.287264 ], [ -76.958903, 39.287361 ], [ -76.956846, 39.28874 ], [ -76.956494, 39.288984 ], [ -76.95626, 39.289149 ], [ -76.956086, 39.289286 ], [ -76.956059, 39.289308 ], [ -76.955906, 39.28943 ], [ -76.955794, 39.289523 ], [ -76.955678, 39.289617 ], [ -76.955428, 39.289858 ], [ -76.955331, 39.28996 ], [ -76.955044, 39.290277 ], [ -76.954912, 39.290439 ], [ -76.954759, 39.290637 ], [ -76.954644, 39.290799 ], [ -76.954601, 39.290867 ], [ -76.954522, 39.290979 ], [ -76.95439, 39.291203 ], [ -76.954185, 39.291551 ], [ -76.953981, 39.292004 ], [ -76.953868, 39.292321 ], [ -76.953794, 39.292595 ], [ -76.953727, 39.292965 ], [ -76.953658, 39.293415 ], [ -76.953597, 39.293762 ], [ -76.953557, 39.294086 ], [ -76.953512, 39.294353 ], [ -76.953441, 39.294776 ], [ -76.953382, 39.295237 ], [ -76.953303, 39.295798 ], [ -76.953259, 39.29613 ], [ -76.953033, 39.297703 ], [ -76.952891, 39.298644 ], [ -76.95288, 39.298799 ], [ -76.952849, 39.299112 ], [ -76.952845, 39.299163 ], [ -76.952821, 39.299521 ], [ -76.95279, 39.300077 ], [ -76.952779, 39.300831 ], [ -76.95282, 39.301094 ], [ -76.952856, 39.301266 ], [ -76.952914, 39.301489 ], [ -76.953007, 39.30181 ], [ -76.953123, 39.302159 ], [ -76.953176, 39.302397 ], [ -76.953235, 39.302753 ], [ -76.953266, 39.30321 ], [ -76.953276, 39.303413 ], [ -76.953281, 39.303691 ], [ -76.953266, 39.304281 ], [ -76.953238, 39.304851 ], [ -76.95299, 39.306589 ], [ -76.952658, 39.308803 ], [ -76.952623, 39.309039 ], [ -76.952357, 39.309009 ], [ -76.952092, 39.30898 ], [ -76.951321, 39.308892 ], [ -76.95038, 39.308793 ], [ -76.949424, 39.308686 ], [ -76.948442, 39.308572 ], [ -76.946457, 39.30835 ], [ -76.945448, 39.308248 ], [ -76.944942, 39.308186 ], [ -76.94364, 39.308039 ], [ -76.942737, 39.307943 ], [ -76.942157, 39.307876 ], [ -76.941596, 39.307814 ], [ -76.941049, 39.307751 ], [ -76.940487, 39.307682 ], [ -76.939914, 39.307617 ], [ -76.939326, 39.30756 ], [ -76.93874, 39.307509 ], [ -76.93818, 39.307451 ], [ -76.937639, 39.307397 ], [ -76.937118, 39.307342 ], [ -76.936758, 39.3073 ], [ -76.936177, 39.307229 ], [ -76.934904, 39.307098 ], [ -76.933917, 39.306983 ], [ -76.93295, 39.306878 ], [ -76.931998, 39.306779 ], [ -76.931268, 39.306694 ], [ -76.930549, 39.306607 ], [ -76.930238, 39.306561 ], [ -76.929088, 39.30644 ], [ -76.928368, 39.306378 ], [ -76.927648, 39.306306 ], [ -76.927019, 39.306238 ], [ -76.926522, 39.306188 ], [ -76.926091, 39.306156 ], [ -76.924915, 39.30602 ], [ -76.924538, 39.305961 ], [ -76.923102, 39.305786 ], [ -76.922207, 39.305692 ], [ -76.921195, 39.305587 ], [ -76.92018, 39.305484 ], [ -76.91925, 39.305374 ], [ -76.918421, 39.305259 ], [ -76.91755, 39.305086 ], [ -76.916732, 39.304892 ], [ -76.916174, 39.304741 ], [ -76.916003, 39.304685 ], [ -76.915253, 39.304423 ], [ -76.914732, 39.304219 ], [ -76.914355, 39.304049 ], [ -76.913819, 39.303787 ], [ -76.913458, 39.303609 ], [ -76.912721, 39.303287 ], [ -76.912057, 39.303046 ], [ -76.911134, 39.302762 ], [ -76.910383, 39.302592 ], [ -76.909909, 39.302507 ], [ -76.909721, 39.302479 ], [ -76.909033, 39.302404 ], [ -76.908336, 39.302338 ], [ -76.907701, 39.302312 ], [ -76.907152, 39.302312 ], [ -76.906815, 39.302316 ], [ -76.906492, 39.30234 ], [ -76.905906, 39.302395 ], [ -76.90551, 39.302443 ], [ -76.905136, 39.302505 ], [ -76.904479, 39.302643 ], [ -76.904243, 39.302694 ], [ -76.903662, 39.30285 ], [ -76.903422, 39.302918 ], [ -76.903123, 39.303015 ], [ -76.902765, 39.303129 ], [ -76.901627, 39.303532 ], [ -76.900525, 39.303894 ], [ -76.899812, 39.304108 ], [ -76.899172, 39.304288 ], [ -76.89811, 39.304572 ], [ -76.896894, 39.304867 ], [ -76.895878, 39.305093 ], [ -76.895331, 39.305212 ], [ -76.894462, 39.305373 ], [ -76.893442, 39.305509 ], [ -76.892412, 39.305635 ], [ -76.891829, 39.305695 ], [ -76.891221, 39.305748 ], [ -76.890979, 39.305765 ], [ -76.8903, 39.305807 ], [ -76.88963, 39.30584 ], [ -76.889012, 39.305863 ], [ -76.888401, 39.305863 ], [ -76.887795, 39.30585 ], [ -76.887181, 39.30584 ], [ -76.886588, 39.305812 ], [ -76.88604, 39.30578 ], [ -76.885075, 39.305698 ], [ -76.884599, 39.305647 ], [ -76.884197, 39.305597 ], [ -76.883947, 39.305568 ], [ -76.883608, 39.305518 ], [ -76.882851, 39.305396 ], [ -76.882233, 39.305279 ], [ -76.881703, 39.305181 ], [ -76.881151, 39.305076 ], [ -76.88072, 39.304984 ], [ -76.880578, 39.304954 ], [ -76.880261, 39.304878 ], [ -76.879667, 39.304732 ], [ -76.878916, 39.304525 ], [ -76.878326, 39.304351 ], [ -76.877627, 39.304125 ], [ -76.876886, 39.303853 ], [ -76.876493, 39.303717 ], [ -76.876703, 39.303485 ], [ -76.876877, 39.303292 ], [ -76.876993, 39.303189 ], [ -76.877074, 39.303153 ], [ -76.877237, 39.303065 ], [ -76.877342, 39.302995 ], [ -76.877377, 39.302975 ], [ -76.877412, 39.302971 ], [ -76.877444, 39.302953 ], [ -76.877473, 39.302921 ], [ -76.877496, 39.302901 ], [ -76.877569, 39.3028 ], [ -76.877693, 39.302711 ], [ -76.877842, 39.302501 ], [ -76.877992, 39.302313 ], [ -76.878, 39.302105 ], [ -76.877768, 39.301814 ], [ -76.877798, 39.301377 ], [ -76.877597, 39.301217 ], [ -76.877409, 39.301012 ], [ -76.877474, 39.300815 ], [ -76.87747, 39.300602 ], [ -76.877619, 39.300517 ], [ -76.877999, 39.300256 ], [ -76.878723, 39.299756 ], [ -76.878869, 39.299664 ], [ -76.879091, 39.299501 ], [ -76.879562, 39.299174 ], [ -76.879848, 39.29899 ], [ -76.880121, 39.298805 ], [ -76.880867, 39.29833 ], [ -76.881123, 39.298204 ], [ -76.881371, 39.298108 ], [ -76.881785, 39.297911 ], [ -76.88216, 39.297661 ], [ -76.882446, 39.297462 ], [ -76.882608, 39.297264 ], [ -76.882747, 39.29707 ], [ -76.882924, 39.296817 ], [ -76.883223, 39.296424 ], [ -76.883456, 39.296145 ], [ -76.884069, 39.29544 ], [ -76.884199, 39.295296 ], [ -76.884379, 39.295033 ], [ -76.884513, 39.294809 ], [ -76.884609, 39.294636 ], [ -76.884767, 39.294293 ], [ -76.884903, 39.294 ], [ -76.884951, 39.293858 ], [ -76.885004, 39.293736 ], [ -76.885056, 39.293646 ], [ -76.885133, 39.293576 ], [ -76.885241, 39.293487 ], [ -76.885588, 39.29327 ], [ -76.885804, 39.293124 ], [ -76.885965, 39.292988 ], [ -76.886129, 39.292856 ], [ -76.886311, 39.292658 ], [ -76.886589, 39.292308 ], [ -76.886718, 39.292148 ], [ -76.886833, 39.292029 ], [ -76.887026, 39.291856 ], [ -76.889806, 39.290103 ], [ -76.889975, 39.289948 ], [ -76.890823, 39.289173 ], [ -76.89448, 39.285837 ], [ -76.89437, 39.285828 ], [ -76.894114, 39.285804 ], [ -76.892779, 39.285684 ], [ -76.891613, 39.285534 ], [ -76.890913, 39.285453 ], [ -76.890173, 39.285375 ], [ -76.889832, 39.285337 ], [ -76.88966, 39.285318 ], [ -76.889396, 39.28528 ], [ -76.889218, 39.28524 ], [ -76.889272, 39.285147 ], [ -76.889353, 39.284891 ], [ -76.8894, 39.284507 ], [ -76.88942, 39.28405 ], [ -76.889408, 39.283789 ], [ -76.889339, 39.283318 ], [ -76.889177, 39.282592 ], [ -76.889016, 39.281823 ], [ -76.88886, 39.281024 ], [ -76.888685, 39.280251 ], [ -76.888519, 39.279431 ], [ -76.888344, 39.278588 ], [ -76.888183, 39.277746 ], [ -76.888106, 39.27724 ], [ -76.888106, 39.276999 ], [ -76.888135, 39.276203 ], [ -76.888141, 39.275972 ], [ -76.888149, 39.275634 ], [ -76.888143, 39.275178 ], [ -76.888144, 39.274975 ], [ -76.888414, 39.274103 ], [ -76.888499, 39.273796 ], [ -76.888659, 39.273323 ], [ -76.888832, 39.272795 ], [ -76.889038, 39.272185 ], [ -76.889234, 39.271588 ], [ -76.889323, 39.271261 ], [ -76.889491, 39.270729 ], [ -76.889628, 39.270361 ], [ -76.889705, 39.270143 ], [ -76.889925, 39.269549 ], [ -76.890003, 39.269336 ], [ -76.890127, 39.268997 ], [ -76.890556, 39.26778 ], [ -76.890775, 39.267142 ], [ -76.890978, 39.266501 ], [ -76.891191, 39.265868 ], [ -76.891279, 39.2656 ], [ -76.891303, 39.265528 ], [ -76.891813, 39.264007 ], [ -76.891997, 39.263486 ], [ -76.892106, 39.263171 ], [ -76.892107, 39.263171 ], [ -76.89222, 39.26283 ], [ -76.892336, 39.262507 ], [ -76.89255, 39.261842 ], [ -76.892659, 39.261512 ], [ -76.892788, 39.261153 ], [ -76.892887, 39.260737 ], [ -76.892961, 39.260096 ], [ -76.892998, 39.259755 ], [ -76.893033, 39.259451 ], [ -76.893054, 39.259291 ], [ -76.8931, 39.258765 ], [ -76.893163, 39.258261 ], [ -76.893209, 39.257858 ], [ -76.893225, 39.257766 ], [ -76.893237, 39.257716 ], [ -76.893276, 39.257485 ], [ -76.893322, 39.257178 ], [ -76.893349, 39.256858 ], [ -76.893383, 39.256556 ], [ -76.89343, 39.256247 ], [ -76.893473, 39.255937 ], [ -76.893523, 39.25562 ], [ -76.89355, 39.255294 ], [ -76.893579, 39.254976 ], [ -76.893596, 39.254762 ], [ -76.893722, 39.253641 ], [ -76.893811, 39.252927 ], [ -76.893979, 39.251355 ], [ -76.891834, 39.251539 ], [ -76.891167, 39.250894 ], [ -76.890404, 39.250156 ], [ -76.890386, 39.249972 ], [ -76.890066, 39.24679 ], [ -76.889927, 39.245411 ], [ -76.889852, 39.244662 ], [ -76.889796, 39.244105 ], [ -76.889757, 39.243938 ], [ -76.889674, 39.243623 ], [ -76.889512, 39.243139 ], [ -76.889019, 39.241664 ], [ -76.888849, 39.241105 ], [ -76.888805, 39.240963 ], [ -76.888689, 39.240617 ], [ -76.888569, 39.24027 ], [ -76.888452, 39.239925 ], [ -76.888388, 39.239729 ], [ -76.888328, 39.239546 ], [ -76.888283, 39.239401 ], [ -76.888091, 39.238782 ], [ -76.887906, 39.238185 ], [ -76.887781, 39.237825 ], [ -76.887565, 39.237225 ], [ -76.887473, 39.236965 ], [ -76.887364, 39.236659 ], [ -76.887246, 39.236325 ], [ -76.887089, 39.235956 ], [ -76.887038, 39.23583 ], [ -76.88701, 39.235716 ], [ -76.886987, 39.235552 ], [ -76.886964, 39.235238 ], [ -76.886926, 39.235007 ], [ -76.887931, 39.234859 ], [ -76.888182, 39.234822 ], [ -76.890949, 39.234416 ], [ -76.891674, 39.234305 ], [ -76.892438, 39.234191 ], [ -76.89318, 39.234093 ], [ -76.893433, 39.234059 ], [ -76.894039, 39.234002 ], [ -76.894297, 39.233978 ], [ -76.894645, 39.233948 ], [ -76.895342, 39.233878 ], [ -76.896697, 39.233705 ], [ -76.897353, 39.233637 ], [ -76.897826, 39.233589 ], [ -76.899037, 39.233428 ], [ -76.899438, 39.23529 ], [ -76.899449, 39.235341 ], [ -76.899644, 39.235734 ], [ -76.899764, 39.235936 ], [ -76.899948, 39.236167 ], [ -76.900152, 39.236369 ], [ -76.900392, 39.236581 ], [ -76.900714, 39.23684 ], [ -76.900769, 39.236883 ], [ -76.900902, 39.236986 ], [ -76.90115, 39.23716 ], [ -76.90138, 39.237288 ], [ -76.901612, 39.2374 ], [ -76.901908, 39.237528 ], [ -76.90235, 39.237686 ], [ -76.9028, 39.237835 ], [ -76.902959, 39.237885 ], [ -76.903132, 39.237959 ], [ -76.903373, 39.238083 ], [ -76.90365, 39.238228 ], [ -76.903943, 39.238418 ], [ -76.904241, 39.23861 ], [ -76.905193, 39.239251 ], [ -76.905931, 39.239781 ], [ -76.906054, 39.239873 ], [ -76.906152, 39.239958 ], [ -76.906233, 39.240043 ], [ -76.906324, 39.240156 ], [ -76.906429, 39.240305 ], [ -76.906615, 39.240694 ], [ -76.90683, 39.2411 ], [ -76.906907, 39.241217 ], [ -76.907005, 39.241343 ], [ -76.907559, 39.242059 ], [ -76.908102, 39.242784 ], [ -76.908372, 39.243127 ], [ -76.908463, 39.243226 ], [ -76.908572, 39.243332 ], [ -76.908694, 39.243427 ], [ -76.908879, 39.243551 ], [ -76.908983, 39.243615 ], [ -76.909165, 39.243697 ], [ -76.909799, 39.244022 ], [ -76.910104, 39.244174 ], [ -76.910331, 39.24427 ], [ -76.910561, 39.244344 ], [ -76.910906, 39.244447 ], [ -76.911634, 39.244638 ], [ -76.913116, 39.244986 ], [ -76.913462, 39.245071 ], [ -76.913708, 39.245127 ], [ -76.913828, 39.245159 ], [ -76.914078, 39.245237 ], [ -76.91461, 39.245439 ], [ -76.915406, 39.245786 ], [ -76.916072, 39.246059 ], [ -76.916375, 39.246152 ], [ -76.91653, 39.246193 ], [ -76.916691, 39.246222 ], [ -76.917192, 39.246281 ], [ -76.917862, 39.246332 ], [ -76.919019, 39.246448 ], [ -76.919412, 39.246494 ], [ -76.919684, 39.246547 ], [ -76.919921, 39.246602 ], [ -76.920292, 39.246714 ], [ -76.920775, 39.246893 ], [ -76.92099, 39.246976 ], [ -76.921233, 39.247073 ], [ -76.92134, 39.247109 ], [ -76.921448, 39.247139 ], [ -76.921774, 39.247201 ], [ -76.922359, 39.247302 ], [ -76.922451, 39.247318 ], [ -76.922594, 39.247342 ], [ -76.923406, 39.247497 ], [ -76.924245, 39.247653 ], [ -76.925002, 39.24784 ], [ -76.925782, 39.248059 ], [ -76.926757, 39.248334 ], [ -76.927755, 39.248612 ], [ -76.92878, 39.248881 ], [ -76.929734, 39.24913 ], [ -76.930729, 39.249397 ], [ -76.931747, 39.249651 ], [ -76.931976, 39.249713 ], [ -76.933213, 39.250062 ], [ -76.934104, 39.250302 ], [ -76.934586, 39.250433 ], [ -76.93529, 39.250605 ], [ -76.935398, 39.250633 ], [ -76.936259, 39.250834 ], [ -76.937088, 39.251041 ], [ -76.938695, 39.25144 ], [ -76.938918, 39.251502 ], [ -76.93918, 39.251584 ], [ -76.939304, 39.251623 ], [ -76.939612, 39.251754 ], [ -76.940047, 39.251958 ], [ -76.941237, 39.252488 ], [ -76.942443, 39.253098 ], [ -76.943679, 39.253689 ], [ -76.944102, 39.253898 ], [ -76.944307, 39.254015 ], [ -76.9447, 39.254276 ], [ -76.945218, 39.254695 ], [ -76.945386, 39.254835 ], [ -76.945657, 39.255021 ], [ -76.945982, 39.255212 ], [ -76.946762, 39.25571 ], [ -76.947052, 39.255886 ], [ -76.94731, 39.256038 ], [ -76.947555, 39.256183 ], [ -76.947887, 39.256387 ], [ -76.948329, 39.256657 ], [ -76.948429, 39.256712 ], [ -76.948557, 39.256771 ], [ -76.948723, 39.25685 ], [ -76.948857, 39.256899 ], [ -76.948946, 39.256924 ], [ -76.949026, 39.256936 ], [ -76.949732, 39.256974 ], [ -76.950565, 39.256988 ], [ -76.951095, 39.256991 ], [ -76.951459, 39.256991 ], [ -76.951965, 39.256965 ], [ -76.952571, 39.256939 ], [ -76.953393, 39.256911 ], [ -76.954632, 39.256849 ], [ -76.955173, 39.256839 ], [ -76.955459, 39.256839 ], [ -76.955779, 39.256857 ], [ -76.956037, 39.256865 ], [ -76.956304, 39.256892 ], [ -76.956481, 39.25691 ], [ -76.956946, 39.256947 ], [ -76.957454, 39.256977 ], [ -76.957718, 39.25698 ], [ -76.958431, 39.256898 ], [ -76.959318, 39.256722 ], [ -76.959602, 39.256667 ], [ -76.95989, 39.256622 ], [ -76.960292, 39.25657 ], [ -76.96046, 39.256547 ], [ -76.960837, 39.256535 ], [ -76.96116, 39.256533 ], [ -76.961399, 39.256557 ], [ -76.961704, 39.256608 ], [ -76.961907, 39.256638 ], [ -76.96213, 39.256667 ], [ -76.963746, 39.256903 ], [ -76.965388, 39.257148 ], [ -76.965942, 39.257238 ], [ -76.966185, 39.257286 ], [ -76.966705, 39.257391 ], [ -76.967435, 39.257573 ], [ -76.96782, 39.257679 ], [ -76.968144, 39.257804 ], [ -76.968163, 39.257814 ], [ -76.968466, 39.257975 ], [ -76.96877, 39.258179 ], [ -76.969025, 39.258339 ], [ -76.969626, 39.258836 ], [ -76.970231, 39.25936 ], [ -76.970574, 39.259651 ], [ -76.970849, 39.259884 ], [ -76.971481, 39.260408 ], [ -76.972273, 39.261131 ], [ -76.973038, 39.261761 ], [ -76.973295, 39.261965 ], [ -76.973561, 39.262169 ], [ -76.973806, 39.262367 ], [ -76.974116, 39.262596 ], [ -76.974275, 39.2627 ], [ -76.974495, 39.262827 ], [ -76.974821, 39.262973 ], [ -76.975083, 39.263075 ], [ -76.975337, 39.263165 ], [ -76.975892, 39.263344 ], [ -76.977919, 39.263991 ], [ -76.979535, 39.264537 ], [ -76.979922, 39.264594 ], [ -76.980056, 39.26461 ], [ -76.980141, 39.264619 ], [ -76.980213, 39.264624 ], [ -76.980279, 39.264627 ], [ -76.980802, 39.264636 ], [ -76.98088, 39.264634 ], [ -76.981407, 39.264569 ], [ -76.981977, 39.264484 ], [ -76.982585, 39.26438 ], [ -76.983126, 39.264297 ], [ -76.983443, 39.26426 ], [ -76.983707, 39.264231 ], [ -76.984273, 39.264176 ], [ -76.984827, 39.26414 ], [ -76.985392, 39.266096 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "605104", "GEOID10": "24027605104", "NAME10": "6051.04", "NAMELSAD10": "Census Tract 6051.04", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 39969526, "AWATER10": 1553493, "INTPTLAT10": "+39.2369323", "INTPTLON10": "-076.9735549" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.979794, 39.23322 ], [ -76.980182, 39.233564 ], [ -76.980281, 39.233645 ], [ -76.980433, 39.23377 ], [ -76.981287, 39.234471 ], [ -76.981502, 39.234651 ], [ -76.981607, 39.234738 ], [ -76.9823, 39.235332 ], [ -76.983034, 39.235973 ], [ -76.983426, 39.236282 ], [ -76.983974, 39.236649 ], [ -76.98452, 39.237022 ], [ -76.984631, 39.237097 ], [ -76.984947, 39.237313 ], [ -76.985231, 39.237509 ], [ -76.985652, 39.237834 ], [ -76.985736, 39.237916 ], [ -76.985891, 39.238088 ], [ -76.986289, 39.238649 ], [ -76.986781, 39.239354 ], [ -76.987624, 39.238757 ], [ -76.988555, 39.238125 ], [ -76.988705, 39.238015 ], [ -76.988923, 39.237852 ], [ -76.989062, 39.237687 ], [ -76.989122, 39.237613 ], [ -76.989194, 39.237473 ], [ -76.989287, 39.23721 ], [ -76.989423, 39.236725 ], [ -76.989511, 39.236542 ], [ -76.989527, 39.236517 ], [ -76.989619, 39.236377 ], [ -76.989763, 39.236181 ], [ -76.9901, 39.235847 ], [ -76.991289, 39.234987 ], [ -76.991698, 39.234704 ], [ -76.991877, 39.234565 ], [ -76.99205, 39.234418 ], [ -76.992194, 39.234281 ], [ -76.992305, 39.234166 ], [ -76.992374, 39.234065 ], [ -76.992456, 39.233925 ], [ -76.992515, 39.23382 ], [ -76.992951, 39.232906 ], [ -76.992994, 39.232814 ], [ -76.993281, 39.232204 ], [ -76.993321, 39.232118 ], [ -76.993669, 39.23141 ], [ -76.993795, 39.231154 ], [ -76.994248, 39.23029 ], [ -76.994391, 39.230049 ], [ -76.994423, 39.229996 ], [ -76.994803, 39.229358 ], [ -76.995346, 39.228514 ], [ -76.995659, 39.228027 ], [ -76.995691, 39.227988 ], [ -76.995828, 39.227816 ], [ -76.995962, 39.22767 ], [ -76.996184, 39.227468 ], [ -76.996295, 39.227383 ], [ -76.996485, 39.227257 ], [ -76.996733, 39.227111 ], [ -76.996869, 39.22703 ], [ -76.997153, 39.226867 ], [ -76.997448, 39.226687 ], [ -76.997958, 39.226382 ], [ -76.998436, 39.226099 ], [ -76.998925, 39.225806 ], [ -76.999375, 39.225522 ], [ -76.999715, 39.225313 ], [ -76.999861, 39.225223 ], [ -77.00018, 39.225047 ], [ -77.000434, 39.22491 ], [ -77.000673, 39.224779 ], [ -77.000918, 39.224659 ], [ -77.001036, 39.224609 ], [ -77.001232, 39.22453 ], [ -77.00149, 39.224445 ], [ -77.001739, 39.224362 ], [ -77.002104, 39.224236 ], [ -77.002254, 39.22418 ], [ -77.002364, 39.224136 ], [ -77.002449, 39.2241 ], [ -77.002523, 39.224061 ], [ -77.002597, 39.224013 ], [ -77.002779, 39.223858 ], [ -77.00294, 39.223698 ], [ -77.003058, 39.223579 ], [ -77.003339, 39.223248 ], [ -77.003629, 39.222906 ], [ -77.003694, 39.222836 ], [ -77.00391, 39.222629 ], [ -77.003973, 39.222571 ], [ -77.00403, 39.222506 ], [ -77.004143, 39.22239 ], [ -77.004206, 39.222313 ], [ -77.004278, 39.222218 ], [ -77.004418, 39.22199 ], [ -77.004475, 39.221869 ], [ -77.00459, 39.221576 ], [ -77.004644, 39.221404 ], [ -77.004694, 39.221223 ], [ -77.004765, 39.221033 ], [ -77.004835, 39.220864 ], [ -77.005021, 39.220484 ], [ -77.005089, 39.220349 ], [ -77.005189, 39.220213 ], [ -77.005331, 39.220055 ], [ -77.005411, 39.219982 ], [ -77.005472, 39.219917 ], [ -77.005518, 39.219864 ], [ -77.005584, 39.219765 ], [ -77.005699, 39.219537 ], [ -77.005838, 39.219223 ], [ -77.005937, 39.218996 ], [ -77.005964, 39.218941 ], [ -77.006029, 39.218807 ], [ -77.006128, 39.218633 ], [ -77.00624, 39.218474 ], [ -77.006473, 39.218285 ], [ -77.006387, 39.218016 ], [ -77.006549, 39.216358 ], [ -77.006956, 39.215363 ], [ -77.008294, 39.212648 ], [ -77.009865, 39.210296 ], [ -77.011448, 39.207539 ], [ -77.01757, 39.209751 ], [ -77.019293, 39.21292 ], [ -77.022292, 39.213991 ], [ -77.032325, 39.220317 ], [ -77.032074, 39.224405 ], [ -77.034516, 39.226144 ], [ -77.03588, 39.229674 ], [ -77.037497, 39.230801 ], [ -77.038488, 39.231446 ], [ -77.041001, 39.234191 ], [ -77.040354, 39.234684 ], [ -77.0366, 39.237904 ], [ -77.036501, 39.237805 ], [ -77.035825, 39.237862 ], [ -77.035144, 39.23792 ], [ -77.034741, 39.238069 ], [ -77.033827, 39.238386 ], [ -77.033105, 39.23864 ], [ -77.03288, 39.238729 ], [ -77.032407, 39.238916 ], [ -77.030909, 39.239625 ], [ -77.030036, 39.23999 ], [ -77.029793, 39.240105 ], [ -77.029489, 39.240276 ], [ -77.028822, 39.240923 ], [ -77.028556, 39.241209 ], [ -77.027843, 39.241981 ], [ -77.027573, 39.242311 ], [ -77.027393, 39.242597 ], [ -77.027288, 39.242803 ], [ -77.027234, 39.24294 ], [ -77.027221, 39.242974 ], [ -77.027192, 39.243056 ], [ -77.02706, 39.243427 ], [ -77.026903, 39.24383 ], [ -77.026825, 39.243988 ], [ -77.026723, 39.244142 ], [ -77.026495, 39.244399 ], [ -77.026125, 39.244757 ], [ -77.025833, 39.245037 ], [ -77.025642, 39.245182 ], [ -77.025465, 39.24531 ], [ -77.025249, 39.245435 ], [ -77.024901, 39.245614 ], [ -77.02449, 39.245847 ], [ -77.024363, 39.245937 ], [ -77.024289, 39.245989 ], [ -77.024177, 39.246075 ], [ -77.023938, 39.246258 ], [ -77.023521, 39.24665 ], [ -77.023318, 39.246844 ], [ -77.022591, 39.247495 ], [ -77.02203, 39.248019 ], [ -77.02183, 39.248302 ], [ -77.021701, 39.248507 ], [ -77.021475, 39.24897 ], [ -77.021373, 39.249205 ], [ -77.02103, 39.249998 ], [ -77.020928, 39.250263 ], [ -77.02063, 39.251038 ], [ -77.020487, 39.251406 ], [ -77.02022, 39.252093 ], [ -77.020143, 39.252287 ], [ -77.019837, 39.253063 ], [ -77.019774, 39.253201 ], [ -77.019707, 39.253315 ], [ -77.019597, 39.253443 ], [ -77.019359, 39.253678 ], [ -77.019139, 39.253858 ], [ -77.018047, 39.254615 ], [ -77.01734, 39.255121 ], [ -77.017238, 39.255187 ], [ -77.017012, 39.255314 ], [ -77.01677, 39.255326 ], [ -77.016594, 39.255352 ], [ -77.016328, 39.255397 ], [ -77.016046, 39.255463 ], [ -77.015597, 39.255608 ], [ -77.015187, 39.255725 ], [ -77.014912, 39.255802 ], [ -77.014738, 39.255859 ], [ -77.014349, 39.256007 ], [ -77.013983, 39.256212 ], [ -77.01295, 39.256859 ], [ -77.012806, 39.256957 ], [ -77.012545, 39.257187 ], [ -77.012425, 39.257312 ], [ -77.01202, 39.257875 ], [ -77.011901, 39.258043 ], [ -77.011722, 39.258256 ], [ -77.011558, 39.258395 ], [ -77.01145, 39.258469 ], [ -77.011306, 39.258562 ], [ -77.0112, 39.258649 ], [ -77.010921, 39.258916 ], [ -77.010651, 39.259186 ], [ -77.010245, 39.259612 ], [ -77.01007, 39.259767 ], [ -77.009985, 39.25983 ], [ -77.009949, 39.25985 ], [ -77.009898, 39.259877 ], [ -77.009799, 39.259912 ], [ -77.009694, 39.259939 ], [ -77.009452, 39.25998 ], [ -77.008872, 39.260065 ], [ -77.008614, 39.260118 ], [ -77.008223, 39.260186 ], [ -77.007454, 39.26031 ], [ -77.006723, 39.260413 ], [ -77.006462, 39.260464 ], [ -77.006295, 39.260504 ], [ -77.006023, 39.260588 ], [ -77.005347, 39.260815 ], [ -77.004415, 39.261149 ], [ -77.003569, 39.261395 ], [ -77.003445, 39.261435 ], [ -77.002678, 39.261684 ], [ -77.001754, 39.261959 ], [ -77.001587, 39.262013 ], [ -77.00067, 39.262312 ], [ -77.000155, 39.262467 ], [ -76.999874, 39.262555 ], [ -76.999769, 39.26258 ], [ -76.999705, 39.262595 ], [ -76.999579, 39.262615 ], [ -76.999331, 39.262659 ], [ -76.999049, 39.262718 ], [ -76.998821, 39.262785 ], [ -76.998579, 39.262872 ], [ -76.998503, 39.262906 ], [ -76.997968, 39.263148 ], [ -76.997838, 39.263193 ], [ -76.997659, 39.263247 ], [ -76.997398, 39.263305 ], [ -76.997118, 39.263363 ], [ -76.996945, 39.263399 ], [ -76.994915, 39.263809 ], [ -76.993733, 39.264057 ], [ -76.993514, 39.264104 ], [ -76.993363, 39.264127 ], [ -76.993105, 39.264146 ], [ -76.992966, 39.264146 ], [ -76.992819, 39.26413 ], [ -76.992399, 39.264057 ], [ -76.991316, 39.2639 ], [ -76.990711, 39.263801 ], [ -76.989945, 39.263637 ], [ -76.989779, 39.263616 ], [ -76.989611, 39.263602 ], [ -76.989408, 39.263598 ], [ -76.989163, 39.263597 ], [ -76.988831, 39.263608 ], [ -76.988226, 39.263668 ], [ -76.98798, 39.263698 ], [ -76.987908, 39.263707 ], [ -76.987171, 39.263814 ], [ -76.987093, 39.263826 ], [ -76.986191, 39.263967 ], [ -76.985846, 39.264026 ], [ -76.985659, 39.26405 ], [ -76.984827, 39.26414 ], [ -76.984273, 39.264176 ], [ -76.983707, 39.264231 ], [ -76.983443, 39.26426 ], [ -76.983126, 39.264297 ], [ -76.982585, 39.26438 ], [ -76.981977, 39.264484 ], [ -76.981407, 39.264569 ], [ -76.98088, 39.264634 ], [ -76.980802, 39.264636 ], [ -76.980279, 39.264627 ], [ -76.980213, 39.264624 ], [ -76.980141, 39.264619 ], [ -76.980056, 39.26461 ], [ -76.979922, 39.264594 ], [ -76.979535, 39.264537 ], [ -76.977919, 39.263991 ], [ -76.975892, 39.263344 ], [ -76.975337, 39.263165 ], [ -76.975083, 39.263075 ], [ -76.974821, 39.262973 ], [ -76.974495, 39.262827 ], [ -76.974275, 39.2627 ], [ -76.974116, 39.262596 ], [ -76.973806, 39.262367 ], [ -76.973561, 39.262169 ], [ -76.973295, 39.261965 ], [ -76.973038, 39.261761 ], [ -76.972273, 39.261131 ], [ -76.971481, 39.260408 ], [ -76.970849, 39.259884 ], [ -76.970574, 39.259651 ], [ -76.970231, 39.25936 ], [ -76.969626, 39.258836 ], [ -76.969025, 39.258339 ], [ -76.96877, 39.258179 ], [ -76.968466, 39.257975 ], [ -76.968163, 39.257814 ], [ -76.968144, 39.257804 ], [ -76.96782, 39.257679 ], [ -76.967435, 39.257573 ], [ -76.966705, 39.257391 ], [ -76.966185, 39.257286 ], [ -76.965942, 39.257238 ], [ -76.965388, 39.257148 ], [ -76.963746, 39.256903 ], [ -76.96213, 39.256667 ], [ -76.961907, 39.256638 ], [ -76.961704, 39.256608 ], [ -76.961399, 39.256557 ], [ -76.96116, 39.256533 ], [ -76.960837, 39.256535 ], [ -76.96046, 39.256547 ], [ -76.960292, 39.25657 ], [ -76.95989, 39.256622 ], [ -76.959602, 39.256667 ], [ -76.959318, 39.256722 ], [ -76.958431, 39.256898 ], [ -76.957718, 39.25698 ], [ -76.957454, 39.256977 ], [ -76.956946, 39.256947 ], [ -76.956481, 39.25691 ], [ -76.956304, 39.256892 ], [ -76.956037, 39.256865 ], [ -76.955779, 39.256857 ], [ -76.955459, 39.256839 ], [ -76.955173, 39.256839 ], [ -76.954632, 39.256849 ], [ -76.953393, 39.256911 ], [ -76.952571, 39.256939 ], [ -76.951965, 39.256965 ], [ -76.951459, 39.256991 ], [ -76.951095, 39.256991 ], [ -76.950565, 39.256988 ], [ -76.949732, 39.256974 ], [ -76.949026, 39.256936 ], [ -76.948946, 39.256924 ], [ -76.948857, 39.256899 ], [ -76.948723, 39.25685 ], [ -76.948557, 39.256771 ], [ -76.948429, 39.256712 ], [ -76.948329, 39.256657 ], [ -76.947887, 39.256387 ], [ -76.947555, 39.256183 ], [ -76.94731, 39.256038 ], [ -76.947052, 39.255886 ], [ -76.946762, 39.25571 ], [ -76.945982, 39.255212 ], [ -76.945657, 39.255021 ], [ -76.945386, 39.254835 ], [ -76.945218, 39.254695 ], [ -76.9447, 39.254276 ], [ -76.944307, 39.254015 ], [ -76.944102, 39.253898 ], [ -76.943679, 39.253689 ], [ -76.942443, 39.253098 ], [ -76.941237, 39.252488 ], [ -76.940047, 39.251958 ], [ -76.939612, 39.251754 ], [ -76.939304, 39.251623 ], [ -76.93918, 39.251584 ], [ -76.938918, 39.251502 ], [ -76.938695, 39.25144 ], [ -76.937088, 39.251041 ], [ -76.936259, 39.250834 ], [ -76.935398, 39.250633 ], [ -76.93529, 39.250605 ], [ -76.934586, 39.250433 ], [ -76.934104, 39.250302 ], [ -76.933213, 39.250062 ], [ -76.931976, 39.249713 ], [ -76.931747, 39.249651 ], [ -76.930729, 39.249397 ], [ -76.929734, 39.24913 ], [ -76.92878, 39.248881 ], [ -76.927755, 39.248612 ], [ -76.926757, 39.248334 ], [ -76.925782, 39.248059 ], [ -76.925002, 39.24784 ], [ -76.924245, 39.247653 ], [ -76.923406, 39.247497 ], [ -76.922594, 39.247342 ], [ -76.922451, 39.247318 ], [ -76.922359, 39.247302 ], [ -76.921774, 39.247201 ], [ -76.921448, 39.247139 ], [ -76.92134, 39.247109 ], [ -76.921233, 39.247073 ], [ -76.92099, 39.246976 ], [ -76.920775, 39.246893 ], [ -76.920292, 39.246714 ], [ -76.919921, 39.246602 ], [ -76.919684, 39.246547 ], [ -76.919412, 39.246494 ], [ -76.919019, 39.246448 ], [ -76.917862, 39.246332 ], [ -76.917192, 39.246281 ], [ -76.916691, 39.246222 ], [ -76.91653, 39.246193 ], [ -76.916375, 39.246152 ], [ -76.916072, 39.246059 ], [ -76.915406, 39.245786 ], [ -76.91461, 39.245439 ], [ -76.914078, 39.245237 ], [ -76.913828, 39.245159 ], [ -76.913708, 39.245127 ], [ -76.913462, 39.245071 ], [ -76.913116, 39.244986 ], [ -76.911634, 39.244638 ], [ -76.910906, 39.244447 ], [ -76.910561, 39.244344 ], [ -76.910331, 39.24427 ], [ -76.910104, 39.244174 ], [ -76.909799, 39.244022 ], [ -76.909165, 39.243697 ], [ -76.908983, 39.243615 ], [ -76.908879, 39.243551 ], [ -76.908694, 39.243427 ], [ -76.908572, 39.243332 ], [ -76.908463, 39.243226 ], [ -76.908372, 39.243127 ], [ -76.908102, 39.242784 ], [ -76.907559, 39.242059 ], [ -76.907005, 39.241343 ], [ -76.906907, 39.241217 ], [ -76.90683, 39.2411 ], [ -76.906615, 39.240694 ], [ -76.906429, 39.240305 ], [ -76.906324, 39.240156 ], [ -76.906233, 39.240043 ], [ -76.906152, 39.239958 ], [ -76.906054, 39.239873 ], [ -76.905931, 39.239781 ], [ -76.905193, 39.239251 ], [ -76.904241, 39.23861 ], [ -76.903943, 39.238418 ], [ -76.90365, 39.238228 ], [ -76.903373, 39.238083 ], [ -76.903132, 39.237959 ], [ -76.902959, 39.237885 ], [ -76.9028, 39.237835 ], [ -76.90235, 39.237686 ], [ -76.901908, 39.237528 ], [ -76.901612, 39.2374 ], [ -76.90138, 39.237288 ], [ -76.90115, 39.23716 ], [ -76.900902, 39.236986 ], [ -76.900769, 39.236883 ], [ -76.900714, 39.23684 ], [ -76.900392, 39.236581 ], [ -76.900152, 39.236369 ], [ -76.899948, 39.236167 ], [ -76.899764, 39.235936 ], [ -76.899644, 39.235734 ], [ -76.899449, 39.235341 ], [ -76.899438, 39.23529 ], [ -76.899037, 39.233428 ], [ -76.899982, 39.233296 ], [ -76.900751, 39.233187 ], [ -76.900781, 39.233182 ], [ -76.901778, 39.233021 ], [ -76.902559, 39.232909 ], [ -76.902909, 39.23286 ], [ -76.903472, 39.232798 ], [ -76.904183, 39.232719 ], [ -76.906062, 39.232486 ], [ -76.908188, 39.232231 ], [ -76.908921, 39.232146 ], [ -76.909044, 39.232132 ], [ -76.909281, 39.232106 ], [ -76.909443, 39.232076 ], [ -76.909621, 39.232034 ], [ -76.909795, 39.231984 ], [ -76.90995, 39.231938 ], [ -76.910117, 39.231879 ], [ -76.910482, 39.231744 ], [ -76.910706, 39.231669 ], [ -76.911039, 39.231532 ], [ -76.911291, 39.231429 ], [ -76.911909, 39.231142 ], [ -76.91226, 39.231015 ], [ -76.912552, 39.230947 ], [ -76.912687, 39.230926 ], [ -76.912914, 39.230906 ], [ -76.913462, 39.230851 ], [ -76.91399, 39.230818 ], [ -76.914417, 39.230787 ], [ -76.914623, 39.230773 ], [ -76.914825, 39.230749 ], [ -76.914954, 39.230728 ], [ -76.915217, 39.230669 ], [ -76.915432, 39.230603 ], [ -76.915602, 39.230544 ], [ -76.91581, 39.230453 ], [ -76.915948, 39.230389 ], [ -76.916091, 39.230309 ], [ -76.916328, 39.23016 ], [ -76.916556, 39.229975 ], [ -76.91672, 39.229819 ], [ -76.917049, 39.229446 ], [ -76.918112, 39.228176 ], [ -76.918478, 39.227752 ], [ -76.918833, 39.227347 ], [ -76.919072, 39.227078 ], [ -76.919215, 39.226942 ], [ -76.91939, 39.226796 ], [ -76.919412, 39.226779 ], [ -76.919662, 39.226602 ], [ -76.919866, 39.226479 ], [ -76.921681, 39.225473 ], [ -76.921981, 39.225309 ], [ -76.922301, 39.225138 ], [ -76.922488, 39.225036 ], [ -76.922609, 39.224978 ], [ -76.923095, 39.224729 ], [ -76.923328, 39.2246 ], [ -76.923728, 39.224384 ], [ -76.924127, 39.224177 ], [ -76.924181, 39.22415 ], [ -76.924338, 39.224073 ], [ -76.924529, 39.223978 ], [ -76.924777, 39.22387 ], [ -76.925038, 39.223746 ], [ -76.925227, 39.223646 ], [ -76.925372, 39.223555 ], [ -76.925493, 39.223467 ], [ -76.925603, 39.223376 ], [ -76.925761, 39.223227 ], [ -76.926207, 39.222803 ], [ -76.926531, 39.222489 ], [ -76.926911, 39.222083 ], [ -76.927233, 39.221766 ], [ -76.927575, 39.221434 ], [ -76.928164, 39.220852 ], [ -76.928262, 39.220788 ], [ -76.928338, 39.220721 ], [ -76.928633, 39.220448 ], [ -76.929094, 39.220009 ], [ -76.929476, 39.219641 ], [ -76.929904, 39.219233 ], [ -76.930329, 39.218817 ], [ -76.9306, 39.218553 ], [ -76.930811, 39.218339 ], [ -76.931072, 39.218064 ], [ -76.931814, 39.2173 ], [ -76.931904, 39.217215 ], [ -76.932306, 39.216804 ], [ -76.932463, 39.216617 ], [ -76.932571, 39.216477 ], [ -76.932705, 39.216342 ], [ -76.932932, 39.216137 ], [ -76.933404, 39.215657 ], [ -76.93377, 39.215321 ], [ -76.933909, 39.215206 ], [ -76.934025, 39.215103 ], [ -76.934088, 39.215046 ], [ -76.934324, 39.214843 ], [ -76.934626, 39.214566 ], [ -76.934946, 39.214279 ], [ -76.935169, 39.214054 ], [ -76.935751, 39.213492 ], [ -76.935831, 39.213416 ], [ -76.936438, 39.212833 ], [ -76.936845, 39.212441 ], [ -76.937145, 39.212153 ], [ -76.937204, 39.212094 ], [ -76.937464, 39.211833 ], [ -76.937811, 39.211487 ], [ -76.938794, 39.210567 ], [ -76.940319, 39.209147 ], [ -76.940389, 39.209081 ], [ -76.940869, 39.208651 ], [ -76.941045, 39.208494 ], [ -76.94132, 39.20825 ], [ -76.941714, 39.207858 ], [ -76.945573, 39.209651 ], [ -76.945897, 39.209802 ], [ -76.946798, 39.210223 ], [ -76.946916, 39.210279 ], [ -76.950177, 39.211831 ], [ -76.952256, 39.212812 ], [ -76.953747, 39.213523 ], [ -76.955233, 39.214229 ], [ -76.956718, 39.214936 ], [ -76.958193, 39.215631 ], [ -76.959658, 39.216329 ], [ -76.961108, 39.217028 ], [ -76.962471, 39.217675 ], [ -76.963818, 39.218322 ], [ -76.965165, 39.218972 ], [ -76.965611, 39.2192 ], [ -76.966425, 39.219683 ], [ -76.966902, 39.219974 ], [ -76.967246, 39.220218 ], [ -76.967787, 39.220621 ], [ -76.968095, 39.220852 ], [ -76.968449, 39.221167 ], [ -76.968883, 39.221546 ], [ -76.969165, 39.22181 ], [ -76.969629, 39.222293 ], [ -76.969911, 39.222616 ], [ -76.970081, 39.222819 ], [ -76.970317, 39.223115 ], [ -76.970671, 39.223606 ], [ -76.971041, 39.224145 ], [ -76.971172, 39.224366 ], [ -76.971408, 39.224781 ], [ -76.971675, 39.225303 ], [ -76.971922, 39.225817 ], [ -76.972364, 39.226726 ], [ -76.972543, 39.227097 ], [ -76.97272, 39.227528 ], [ -76.972774, 39.227669 ], [ -76.972911, 39.228024 ], [ -76.972965, 39.228183 ], [ -76.973021, 39.228359 ], [ -76.973087, 39.228541 ], [ -76.973153, 39.228742 ], [ -76.9733, 39.229245 ], [ -76.973505, 39.229919 ], [ -76.97598, 39.230227 ], [ -76.97607, 39.230521 ], [ -76.976272, 39.230901 ], [ -76.976423, 39.231142 ], [ -76.976603, 39.231354 ], [ -76.976959, 39.231688 ], [ -76.977291, 39.23187 ], [ -76.97914, 39.232754 ], [ -76.979287, 39.232847 ], [ -76.979483, 39.232978 ], [ -76.979794, 39.23322 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "603003", "GEOID10": "24027603003", "NAME10": "6030.03", "NAMELSAD10": "Census Tract 6030.03", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 45161338, "AWATER10": 174904, "INTPTLAT10": "+39.3192333", "INTPTLON10": "-076.9680454" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.933499, 39.357602 ], [ -76.933409, 39.35756 ], [ -76.933305, 39.357502 ], [ -76.933213, 39.357448 ], [ -76.933124, 39.357401 ], [ -76.933052, 39.357343 ], [ -76.932917, 39.357247 ], [ -76.932699, 39.357065 ], [ -76.932616, 39.357003 ], [ -76.932564, 39.356949 ], [ -76.932501, 39.356879 ], [ -76.932492, 39.356869 ], [ -76.932417, 39.356799 ], [ -76.932331, 39.356719 ], [ -76.932256, 39.356625 ], [ -76.932148, 39.35643 ], [ -76.932073, 39.356265 ], [ -76.931978, 39.35611 ], [ -76.931915, 39.356003 ], [ -76.931858, 39.355938 ], [ -76.9318, 39.355878 ], [ -76.931708, 39.355802 ], [ -76.931565, 39.355672 ], [ -76.931502, 39.355614 ], [ -76.931413, 39.355551 ], [ -76.931384, 39.355527 ], [ -76.931338, 39.355457 ], [ -76.931309, 39.355404 ], [ -76.931249, 39.355343 ], [ -76.931165, 39.35531 ], [ -76.931062, 39.355296 ], [ -76.930952, 39.355289 ], [ -76.930831, 39.355276 ], [ -76.930769, 39.355274 ], [ -76.93066, 39.355314 ], [ -76.930576, 39.355334 ], [ -76.930513, 39.355343 ], [ -76.930467, 39.35534 ], [ -76.930406, 39.355329 ], [ -76.930375, 39.355311 ], [ -76.930346, 39.355273 ], [ -76.930308, 39.355217 ], [ -76.930277, 39.355177 ], [ -76.930219, 39.355141 ], [ -76.930153, 39.355094 ], [ -76.929987, 39.354906 ], [ -76.929904, 39.354799 ], [ -76.929832, 39.354707 ], [ -76.929772, 39.354618 ], [ -76.929589, 39.354209 ], [ -76.929463, 39.354061 ], [ -76.929385, 39.353996 ], [ -76.929313, 39.353951 ], [ -76.929252, 39.353925 ], [ -76.929169, 39.353898 ], [ -76.929068, 39.353875 ], [ -76.92899, 39.353853 ], [ -76.928898, 39.35383 ], [ -76.928825, 39.353822 ], [ -76.928776, 39.353816 ], [ -76.928675, 39.353814 ], [ -76.928556, 39.353787 ], [ -76.92846, 39.353794 ], [ -76.928401, 39.353799 ], [ -76.928349, 39.3538 ], [ -76.928303, 39.353799 ], [ -76.928208, 39.353779 ], [ -76.928148, 39.353751 ], [ -76.928019, 39.353655 ], [ -76.927985, 39.353607 ], [ -76.927945, 39.35355 ], [ -76.927902, 39.353502 ], [ -76.927834, 39.353451 ], [ -76.927779, 39.353425 ], [ -76.927719, 39.35342 ], [ -76.927623, 39.353419 ], [ -76.927554, 39.353429 ], [ -76.927478, 39.353448 ], [ -76.927376, 39.353486 ], [ -76.927314, 39.353514 ], [ -76.92727, 39.353561 ], [ -76.927243, 39.353606 ], [ -76.927233, 39.353653 ], [ -76.927221, 39.353691 ], [ -76.927209, 39.353733 ], [ -76.927182, 39.353758 ], [ -76.92713, 39.35377 ], [ -76.927063, 39.353776 ], [ -76.927005, 39.353755 ], [ -76.926988, 39.353734 ], [ -76.926968, 39.353729 ], [ -76.926936, 39.353736 ], [ -76.926882, 39.353748 ], [ -76.926835, 39.353756 ], [ -76.92676, 39.353744 ], [ -76.92663, 39.35371 ], [ -76.926506, 39.353674 ], [ -76.92642, 39.353648 ], [ -76.926316, 39.353608 ], [ -76.926232, 39.353591 ], [ -76.92616, 39.353587 ], [ -76.926108, 39.353591 ], [ -76.926009, 39.35363 ], [ -76.925886, 39.353705 ], [ -76.925876, 39.353708 ], [ -76.925722, 39.353764 ], [ -76.925472, 39.353668 ], [ -76.925354, 39.353575 ], [ -76.925246, 39.35349 ], [ -76.924932, 39.353171 ], [ -76.92468, 39.353025 ], [ -76.924119, 39.352808 ], [ -76.923916, 39.352635 ], [ -76.923809, 39.352544 ], [ -76.923614, 39.352255 ], [ -76.923534, 39.35221 ], [ -76.923282, 39.352068 ], [ -76.922839, 39.352033 ], [ -76.922706, 39.352013 ], [ -76.922335, 39.351957 ], [ -76.921768, 39.351726 ], [ -76.92061, 39.351537 ], [ -76.920175, 39.351462 ], [ -76.919921, 39.351419 ], [ -76.919324, 39.351299 ], [ -76.919305, 39.351295 ], [ -76.918843, 39.351039 ], [ -76.918595, 39.350922 ], [ -76.918288, 39.350856 ], [ -76.918268, 39.350856 ], [ -76.917268, 39.350875 ], [ -76.917011, 39.350792 ], [ -76.916762, 39.350643 ], [ -76.916602, 39.350636 ], [ -76.916244, 39.350755 ], [ -76.916021, 39.350917 ], [ -76.915814, 39.351036 ], [ -76.915604, 39.351109 ], [ -76.915145, 39.35131 ], [ -76.915016, 39.351294 ], [ -76.914917, 39.351282 ], [ -76.91464, 39.351093 ], [ -76.91434, 39.350916 ], [ -76.91397, 39.350893 ], [ -76.914072, 39.350481 ], [ -76.914112, 39.350404 ], [ -76.91421, 39.350352 ], [ -76.914362, 39.3503 ], [ -76.914491, 39.350238 ], [ -76.914582, 39.350177 ], [ -76.914658, 39.350115 ], [ -76.914711, 39.350049 ], [ -76.914759, 39.349971 ], [ -76.914775, 39.349884 ], [ -76.914774, 39.349789 ], [ -76.914746, 39.349679 ], [ -76.91467, 39.349481 ], [ -76.914501, 39.34937 ], [ -76.914421, 39.349247 ], [ -76.914385, 39.349119 ], [ -76.9144, 39.348985 ], [ -76.914436, 39.348857 ], [ -76.914566, 39.348732 ], [ -76.914788, 39.348612 ], [ -76.915119, 39.348484 ], [ -76.915349, 39.348389 ], [ -76.915507, 39.348289 ], [ -76.915637, 39.348144 ], [ -76.91577, 39.348021 ], [ -76.915842, 39.347943 ], [ -76.915919, 39.347828 ], [ -76.915974, 39.347711 ], [ -76.916019, 39.347548 ], [ -76.916029, 39.347391 ], [ -76.91608, 39.347281 ], [ -76.916237, 39.347204 ], [ -76.916561, 39.346969 ], [ -76.916874, 39.346675 ], [ -76.917035, 39.346509 ], [ -76.917206, 39.346373 ], [ -76.917781, 39.345762 ], [ -76.918151, 39.34534 ], [ -76.918306, 39.345161 ], [ -76.918434, 39.345015 ], [ -76.918663, 39.344776 ], [ -76.918874, 39.344617 ], [ -76.919115, 39.344481 ], [ -76.919269, 39.344389 ], [ -76.919433, 39.344297 ], [ -76.919544, 39.344219 ], [ -76.919767, 39.343977 ], [ -76.91994, 39.343774 ], [ -76.920352, 39.343252 ], [ -76.920588, 39.342874 ], [ -76.920674, 39.342667 ], [ -76.920854, 39.34238 ], [ -76.921027, 39.342104 ], [ -76.921396, 39.341609 ], [ -76.921944, 39.340866 ], [ -76.92251, 39.340156 ], [ -76.922875, 39.339707 ], [ -76.923047, 39.339489 ], [ -76.923199, 39.339264 ], [ -76.923333, 39.338933 ], [ -76.923402, 39.338704 ], [ -76.92349, 39.338243 ], [ -76.9238, 39.337803 ], [ -76.924068, 39.337451 ], [ -76.924299, 39.337003 ], [ -76.924607, 39.336458 ], [ -76.925137, 39.335566 ], [ -76.925289, 39.335288 ], [ -76.92563, 39.334897 ], [ -76.925796, 39.334709 ], [ -76.926098, 39.334468 ], [ -76.926129, 39.334443 ], [ -76.926394, 39.334291 ], [ -76.927298, 39.333685 ], [ -76.927629, 39.333368 ], [ -76.927826, 39.333071 ], [ -76.927937, 39.332863 ], [ -76.927995, 39.332613 ], [ -76.928005, 39.332452 ], [ -76.927985, 39.332349 ], [ -76.92797, 39.332272 ], [ -76.927905, 39.332139 ], [ -76.927572, 39.331818 ], [ -76.927075, 39.331419 ], [ -76.926222, 39.330947 ], [ -76.925602, 39.330662 ], [ -76.924948, 39.330405 ], [ -76.924707, 39.33027 ], [ -76.924512, 39.330152 ], [ -76.924338, 39.33001 ], [ -76.924191, 39.329854 ], [ -76.92412, 39.329726 ], [ -76.924035, 39.329549 ], [ -76.923958, 39.328973 ], [ -76.92394, 39.328751 ], [ -76.923927, 39.328314 ], [ -76.923883, 39.32755 ], [ -76.923862, 39.326648 ], [ -76.923909, 39.326342 ], [ -76.923963, 39.32609 ], [ -76.923969, 39.326073 ], [ -76.923994, 39.326007 ], [ -76.924059, 39.325837 ], [ -76.924251, 39.325539 ], [ -76.924413, 39.325351 ], [ -76.924725, 39.325048 ], [ -76.925256, 39.324586 ], [ -76.925547, 39.324351 ], [ -76.92563, 39.324277 ], [ -76.925785, 39.324114 ], [ -76.925888, 39.323962 ], [ -76.925954, 39.323801 ], [ -76.926009, 39.323639 ], [ -76.926111, 39.323312 ], [ -76.926165, 39.322982 ], [ -76.926265, 39.322309 ], [ -76.926302, 39.32197 ], [ -76.926313, 39.321621 ], [ -76.926352, 39.321251 ], [ -76.927788, 39.321346 ], [ -76.927867, 39.320936 ], [ -76.927924, 39.320547 ], [ -76.927953, 39.320359 ], [ -76.928011, 39.319769 ], [ -76.928096, 39.31918 ], [ -76.928162, 39.318787 ], [ -76.928223, 39.318269 ], [ -76.928254, 39.317768 ], [ -76.928279, 39.317337 ], [ -76.928284, 39.316942 ], [ -76.928311, 39.31656 ], [ -76.928337, 39.316321 ], [ -76.928361, 39.316195 ], [ -76.928413, 39.316045 ], [ -76.928499, 39.315842 ], [ -76.928809, 39.315147 ], [ -76.929029, 39.314601 ], [ -76.929268, 39.314032 ], [ -76.929583, 39.313305 ], [ -76.929737, 39.312927 ], [ -76.929794, 39.312786 ], [ -76.929887, 39.312549 ], [ -76.930146, 39.311954 ], [ -76.930229, 39.311728 ], [ -76.930258, 39.311636 ], [ -76.930292, 39.311526 ], [ -76.930341, 39.311308 ], [ -76.930415, 39.31095 ], [ -76.930483, 39.310587 ], [ -76.93056, 39.310217 ], [ -76.930591, 39.310062 ], [ -76.930601, 39.30963 ], [ -76.930595, 39.309257 ], [ -76.930553, 39.308275 ], [ -76.930539, 39.307937 ], [ -76.930535, 39.307857 ], [ -76.930519, 39.307566 ], [ -76.930526, 39.307072 ], [ -76.930535, 39.306729 ], [ -76.930549, 39.306607 ], [ -76.931268, 39.306694 ], [ -76.931998, 39.306779 ], [ -76.93295, 39.306878 ], [ -76.933917, 39.306983 ], [ -76.934904, 39.307098 ], [ -76.936177, 39.307229 ], [ -76.936758, 39.3073 ], [ -76.937118, 39.307342 ], [ -76.937639, 39.307397 ], [ -76.93818, 39.307451 ], [ -76.93874, 39.307509 ], [ -76.939326, 39.30756 ], [ -76.939914, 39.307617 ], [ -76.940487, 39.307682 ], [ -76.941049, 39.307751 ], [ -76.941596, 39.307814 ], [ -76.942157, 39.307876 ], [ -76.942737, 39.307943 ], [ -76.94364, 39.308039 ], [ -76.944942, 39.308186 ], [ -76.945448, 39.308248 ], [ -76.946457, 39.30835 ], [ -76.948442, 39.308572 ], [ -76.949424, 39.308686 ], [ -76.95038, 39.308793 ], [ -76.951321, 39.308892 ], [ -76.952092, 39.30898 ], [ -76.952357, 39.309009 ], [ -76.952623, 39.309039 ], [ -76.952658, 39.308803 ], [ -76.95299, 39.306589 ], [ -76.953238, 39.304851 ], [ -76.953266, 39.304281 ], [ -76.953281, 39.303691 ], [ -76.953276, 39.303413 ], [ -76.953266, 39.30321 ], [ -76.953235, 39.302753 ], [ -76.953176, 39.302397 ], [ -76.953123, 39.302159 ], [ -76.953007, 39.30181 ], [ -76.952914, 39.301489 ], [ -76.952856, 39.301266 ], [ -76.95282, 39.301094 ], [ -76.952779, 39.300831 ], [ -76.95279, 39.300077 ], [ -76.952821, 39.299521 ], [ -76.952845, 39.299163 ], [ -76.952849, 39.299112 ], [ -76.95288, 39.298799 ], [ -76.952891, 39.298644 ], [ -76.953033, 39.297703 ], [ -76.953259, 39.29613 ], [ -76.953303, 39.295798 ], [ -76.953382, 39.295237 ], [ -76.953441, 39.294776 ], [ -76.953512, 39.294353 ], [ -76.953557, 39.294086 ], [ -76.953597, 39.293762 ], [ -76.953658, 39.293415 ], [ -76.953727, 39.292965 ], [ -76.953794, 39.292595 ], [ -76.953868, 39.292321 ], [ -76.953981, 39.292004 ], [ -76.954185, 39.291551 ], [ -76.95439, 39.291203 ], [ -76.954522, 39.290979 ], [ -76.954601, 39.290867 ], [ -76.954644, 39.290799 ], [ -76.954759, 39.290637 ], [ -76.954912, 39.290439 ], [ -76.955044, 39.290277 ], [ -76.955331, 39.28996 ], [ -76.955428, 39.289858 ], [ -76.955678, 39.289617 ], [ -76.955794, 39.289523 ], [ -76.955906, 39.28943 ], [ -76.956059, 39.289308 ], [ -76.956086, 39.289286 ], [ -76.95626, 39.289149 ], [ -76.956494, 39.288984 ], [ -76.956846, 39.28874 ], [ -76.958903, 39.287361 ], [ -76.959036, 39.287264 ], [ -76.9594, 39.287023 ], [ -76.959664, 39.28686 ], [ -76.959916, 39.286699 ], [ -76.96061, 39.286214 ], [ -76.96122, 39.285809 ], [ -76.961241, 39.285793 ], [ -76.961479, 39.285616 ], [ -76.961849, 39.285376 ], [ -76.962453, 39.285046 ], [ -76.962721, 39.284902 ], [ -76.963153, 39.284696 ], [ -76.96373, 39.284454 ], [ -76.963886, 39.284402 ], [ -76.96411, 39.284326 ], [ -76.964328, 39.284257 ], [ -76.964729, 39.284136 ], [ -76.96524, 39.28401 ], [ -76.965611, 39.283928 ], [ -76.966106, 39.283836 ], [ -76.96649, 39.283786 ], [ -76.966578, 39.283775 ], [ -76.967122, 39.283712 ], [ -76.967562, 39.283688 ], [ -76.968042, 39.283678 ], [ -76.968581, 39.283687 ], [ -76.969125, 39.283687 ], [ -76.969433, 39.283677 ], [ -76.969764, 39.283656 ], [ -76.970354, 39.283601 ], [ -76.970862, 39.283515 ], [ -76.971327, 39.283411 ], [ -76.971642, 39.283331 ], [ -76.971947, 39.283226 ], [ -76.97225, 39.283131 ], [ -76.972639, 39.282993 ], [ -76.973075, 39.282816 ], [ -76.973704, 39.282562 ], [ -76.974677, 39.282187 ], [ -76.974848, 39.282122 ], [ -76.975534, 39.281864 ], [ -76.975709, 39.281799 ], [ -76.97642, 39.281521 ], [ -76.976695, 39.281415 ], [ -76.977254, 39.281206 ], [ -76.977677, 39.281042 ], [ -76.978394, 39.280754 ], [ -76.978812, 39.280572 ], [ -76.979029, 39.280473 ], [ -76.979546, 39.280215 ], [ -76.980081, 39.279918 ], [ -76.980379, 39.279735 ], [ -76.980573, 39.279618 ], [ -76.980871, 39.279414 ], [ -76.981045, 39.279298 ], [ -76.982491, 39.27824 ], [ -76.983262, 39.277677 ], [ -76.983694, 39.277373 ], [ -76.984805, 39.276561 ], [ -76.985017, 39.276409 ], [ -76.985198, 39.276268 ], [ -76.985395, 39.276116 ], [ -76.985612, 39.275928 ], [ -76.985896, 39.275663 ], [ -76.986045, 39.275505 ], [ -76.986129, 39.275407 ], [ -76.986203, 39.275309 ], [ -76.986408, 39.275049 ], [ -76.986592, 39.274766 ], [ -76.986731, 39.274538 ], [ -76.986767, 39.274469 ], [ -76.986896, 39.274222 ], [ -76.986965, 39.274064 ], [ -76.98703, 39.273898 ], [ -76.98709, 39.273701 ], [ -76.987147, 39.273477 ], [ -76.987177, 39.273304 ], [ -76.987206, 39.273074 ], [ -76.987207, 39.272642 ], [ -76.987198, 39.272432 ], [ -76.987186, 39.272269 ], [ -76.987091, 39.271847 ], [ -76.986959, 39.27135 ], [ -76.986469, 39.269658 ], [ -76.986343, 39.26926 ], [ -76.985993, 39.268062 ], [ -76.985885, 39.267675 ], [ -76.985574, 39.266727 ], [ -76.985392, 39.266096 ], [ -76.984827, 39.26414 ], [ -76.985659, 39.26405 ], [ -76.985846, 39.264026 ], [ -76.986191, 39.263967 ], [ -76.987093, 39.263826 ], [ -76.987171, 39.263814 ], [ -76.987908, 39.263707 ], [ -76.98798, 39.263698 ], [ -76.988226, 39.263668 ], [ -76.988831, 39.263608 ], [ -76.989163, 39.263597 ], [ -76.989408, 39.263598 ], [ -76.989611, 39.263602 ], [ -76.989779, 39.263616 ], [ -76.989945, 39.263637 ], [ -76.990711, 39.263801 ], [ -76.991316, 39.2639 ], [ -76.992399, 39.264057 ], [ -76.992819, 39.26413 ], [ -76.992966, 39.264146 ], [ -76.993105, 39.264146 ], [ -76.993363, 39.264127 ], [ -76.993514, 39.264104 ], [ -76.993733, 39.264057 ], [ -76.994915, 39.263809 ], [ -76.996945, 39.263399 ], [ -76.997118, 39.263363 ], [ -76.997398, 39.263305 ], [ -76.997659, 39.263247 ], [ -76.997838, 39.263193 ], [ -76.997968, 39.263148 ], [ -76.998503, 39.262906 ], [ -76.998845, 39.264196 ], [ -76.999135, 39.26541 ], [ -76.999218, 39.265758 ], [ -76.999442, 39.267073 ], [ -76.999586, 39.267919 ], [ -76.999656, 39.268311 ], [ -76.999679, 39.26849 ], [ -76.999704, 39.270969 ], [ -76.999742, 39.271032 ], [ -77.000626, 39.271425 ], [ -77.001102, 39.27162 ], [ -77.00119, 39.271694 ], [ -77.001239, 39.271756 ], [ -77.001273, 39.271874 ], [ -77.0013, 39.272118 ], [ -77.001317, 39.272307 ], [ -77.00129, 39.272475 ], [ -77.00122, 39.272779 ], [ -77.001055, 39.273393 ], [ -77.000994, 39.273614 ], [ -77.000968, 39.273767 ], [ -77.000971, 39.273841 ], [ -77.000998, 39.273897 ], [ -77.001032, 39.273947 ], [ -77.001044, 39.274 ], [ -77.001046, 39.274086 ], [ -77.000846, 39.274828 ], [ -77.000759, 39.275038 ], [ -77.000664, 39.275256 ], [ -77.000649, 39.275333 ], [ -77.000656, 39.275386 ], [ -77.000717, 39.275492 ], [ -77.000725, 39.275522 ], [ -77.000717, 39.275575 ], [ -77.000623, 39.275802 ], [ -76.999674, 39.275563 ], [ -76.999846, 39.277653 ], [ -76.999868, 39.277925 ], [ -76.999868, 39.277929 ], [ -76.999854, 39.278265 ], [ -76.999776, 39.280159 ], [ -76.99972, 39.282866 ], [ -76.9997, 39.283804 ], [ -76.9997, 39.285403 ], [ -76.999607, 39.289715 ], [ -76.999486, 39.289898 ], [ -76.999151, 39.290369 ], [ -76.998959, 39.290675 ], [ -76.998741, 39.291037 ], [ -76.998389, 39.291634 ], [ -76.998257, 39.291863 ], [ -76.997903, 39.292647 ], [ -76.997848, 39.292768 ], [ -76.997688, 39.293182 ], [ -76.997556, 39.293634 ], [ -76.997434, 39.294094 ], [ -76.997286, 39.294584 ], [ -76.997125, 39.295086 ], [ -76.997035, 39.295353 ], [ -76.997015, 39.295504 ], [ -76.997, 39.295671 ], [ -76.996996, 39.296092 ], [ -76.996998, 39.296262 ], [ -76.997005, 39.296413 ], [ -76.997008, 39.296477 ], [ -76.997035, 39.296716 ], [ -76.997061, 39.296968 ], [ -76.997084, 39.297276 ], [ -76.997095, 39.297479 ], [ -76.9971, 39.297563 ], [ -76.997101, 39.298051 ], [ -76.997103, 39.298304 ], [ -76.997125, 39.29878 ], [ -76.997144, 39.299136 ], [ -76.997166, 39.300087 ], [ -76.99717, 39.300137 ], [ -76.997208, 39.300579 ], [ -76.997237, 39.301003 ], [ -76.997258, 39.301095 ], [ -76.99729, 39.301159 ], [ -76.997335, 39.301204 ], [ -76.997432, 39.301265 ], [ -76.997734, 39.301368 ], [ -76.998118, 39.301505 ], [ -76.998195, 39.301527 ], [ -76.998271, 39.301555 ], [ -76.998317, 39.301589 ], [ -76.99836, 39.301633 ], [ -76.998396, 39.301708 ], [ -76.998448, 39.301809 ], [ -76.998475, 39.301848 ], [ -76.998554, 39.301898 ], [ -76.998662, 39.301951 ], [ -76.999305, 39.302127 ], [ -76.999257, 39.302233 ], [ -76.9984, 39.307403 ], [ -76.99732, 39.31118 ], [ -76.9972, 39.311603 ], [ -76.997139, 39.313119 ], [ -76.997018, 39.313259 ], [ -76.996878, 39.313484 ], [ -76.996786, 39.313737 ], [ -76.996697, 39.313961 ], [ -76.996631, 39.314115 ], [ -76.996576, 39.314395 ], [ -76.996546, 39.314467 ], [ -76.996504, 39.314549 ], [ -76.996429, 39.314651 ], [ -76.996347, 39.314755 ], [ -76.996296, 39.314824 ], [ -76.996134, 39.315046 ], [ -76.995804, 39.315562 ], [ -76.995611, 39.315873 ], [ -76.99547, 39.316101 ], [ -76.995143, 39.316621 ], [ -76.99501, 39.316834 ], [ -76.994812, 39.317152 ], [ -76.994508, 39.317627 ], [ -76.99422, 39.318117 ], [ -76.994105, 39.318301 ], [ -76.993993, 39.318447 ], [ -76.993884, 39.318577 ], [ -76.993815, 39.318658 ], [ -76.993731, 39.318735 ], [ -76.993603, 39.318842 ], [ -76.993442, 39.31897 ], [ -76.993055, 39.319248 ], [ -76.99235, 39.319787 ], [ -76.99209, 39.319993 ], [ -76.991909, 39.320162 ], [ -76.99181, 39.320264 ], [ -76.991728, 39.320376 ], [ -76.991662, 39.320476 ], [ -76.991626, 39.320545 ], [ -76.99156, 39.320747 ], [ -76.991259, 39.321038 ], [ -76.991049, 39.321241 ], [ -76.9912, 39.322803 ], [ -76.991143, 39.322905 ], [ -76.988385, 39.327839 ], [ -76.985165, 39.334401 ], [ -76.985114, 39.334504 ], [ -76.985153, 39.334546 ], [ -76.985167, 39.334579 ], [ -76.985192, 39.33467 ], [ -76.985299, 39.335031 ], [ -76.985453, 39.335584 ], [ -76.98556, 39.33586 ], [ -76.985658, 39.336173 ], [ -76.985774, 39.336566 ], [ -76.98596, 39.337132 ], [ -76.986119, 39.337664 ], [ -76.986296, 39.33828 ], [ -76.986356, 39.338519 ], [ -76.986449, 39.338836 ], [ -76.98683, 39.340101 ], [ -76.986937, 39.340465 ], [ -76.987066, 39.340993 ], [ -76.987105, 39.341308 ], [ -76.98712, 39.341474 ], [ -76.987121, 39.341485 ], [ -76.987114, 39.341869 ], [ -76.987111, 39.341977 ], [ -76.987114, 39.342502 ], [ -76.987153, 39.342937 ], [ -76.987192, 39.343479 ], [ -76.987205, 39.343861 ], [ -76.987241, 39.344366 ], [ -76.987234, 39.344522 ], [ -76.987229, 39.344721 ], [ -76.987056, 39.344778 ], [ -76.986432, 39.344984 ], [ -76.986117, 39.345093 ], [ -76.985558, 39.345297 ], [ -76.985325, 39.345388 ], [ -76.985154, 39.345479 ], [ -76.985066, 39.345543 ], [ -76.984985, 39.345625 ], [ -76.984886, 39.345756 ], [ -76.984735, 39.346044 ], [ -76.984567, 39.346398 ], [ -76.98439, 39.346753 ], [ -76.984243, 39.347093 ], [ -76.984184, 39.347245 ], [ -76.984038, 39.347719 ], [ -76.984029, 39.347749 ], [ -76.983974, 39.347962 ], [ -76.983919, 39.348136 ], [ -76.983778, 39.348458 ], [ -76.983656, 39.348663 ], [ -76.983475, 39.349004 ], [ -76.983166, 39.349705 ], [ -76.983096, 39.349796 ], [ -76.982854, 39.350068 ], [ -76.983477, 39.350338 ], [ -76.984079, 39.350599 ], [ -76.9851, 39.351042 ], [ -76.985556, 39.35124 ], [ -76.985781, 39.351353 ], [ -76.985999, 39.351449 ], [ -76.986416, 39.351632 ], [ -76.987425, 39.352063 ], [ -76.988416, 39.352497 ], [ -76.989406, 39.352919 ], [ -76.989918, 39.35316 ], [ -76.99011, 39.353281 ], [ -76.990229, 39.35337 ], [ -76.99028, 39.353439 ], [ -76.990321, 39.353525 ], [ -76.990384, 39.353706 ], [ -76.990388, 39.353782 ], [ -76.990388, 39.353961 ], [ -76.990386, 39.354179 ], [ -76.990376, 39.354379 ], [ -76.990358, 39.354759 ], [ -76.990362, 39.355066 ], [ -76.990365, 39.355124 ], [ -76.990365, 39.355169 ], [ -76.99037, 39.355221 ], [ -76.990382, 39.355295 ], [ -76.990588, 39.356547 ], [ -76.990644, 39.356875 ], [ -76.990656, 39.356977 ], [ -76.990661, 39.35701 ], [ -76.990692, 39.357232 ], [ -76.990703, 39.357275 ], [ -76.990734, 39.357342 ], [ -76.990764, 39.357394 ], [ -76.990792, 39.35744 ], [ -76.990827, 39.35748 ], [ -76.990944, 39.357575 ], [ -76.991244, 39.357782 ], [ -76.991444, 39.357941 ], [ -76.991599, 39.358077 ], [ -76.991679, 39.358155 ], [ -76.991758, 39.358253 ], [ -76.991869, 39.358423 ], [ -76.992046, 39.358748 ], [ -76.9921, 39.358878 ], [ -76.992103, 39.358881 ], [ -76.992135, 39.358972 ], [ -76.992161, 39.359097 ], [ -76.99217, 39.359159 ], [ -76.992174, 39.359239 ], [ -76.992182, 39.359376 ], [ -76.992166, 39.359664 ], [ -76.992153, 39.359806 ], [ -76.992095, 39.35981 ], [ -76.991303, 39.359842 ], [ -76.991017, 39.35997 ], [ -76.990904, 39.360022 ], [ -76.990518, 39.360601 ], [ -76.990011, 39.361048 ], [ -76.989404, 39.361338 ], [ -76.989, 39.361435 ], [ -76.988335, 39.361514 ], [ -76.988097, 39.361521 ], [ -76.988006, 39.361524 ], [ -76.987514, 39.361552 ], [ -76.987208, 39.361535 ], [ -76.986946, 39.361459 ], [ -76.98685, 39.361431 ], [ -76.986633, 39.361339 ], [ -76.986512, 39.361296 ], [ -76.986337, 39.361234 ], [ -76.986254, 39.361233 ], [ -76.98615, 39.361242 ], [ -76.985758, 39.361318 ], [ -76.985347, 39.361493 ], [ -76.985215, 39.361605 ], [ -76.985085, 39.361717 ], [ -76.984919, 39.361957 ], [ -76.984869, 39.36203 ], [ -76.984578, 39.362219 ], [ -76.984335, 39.362378 ], [ -76.983729, 39.36272 ], [ -76.983432, 39.362834 ], [ -76.983383, 39.362853 ], [ -76.983001, 39.36286 ], [ -76.982869, 39.36283 ], [ -76.982607, 39.362771 ], [ -76.982488, 39.362701 ], [ -76.982372, 39.362633 ], [ -76.98232, 39.362602 ], [ -76.982279, 39.362526 ], [ -76.982096, 39.362181 ], [ -76.98207, 39.362139 ], [ -76.981994, 39.362015 ], [ -76.981927, 39.361906 ], [ -76.981905, 39.36187 ], [ -76.98173, 39.361709 ], [ -76.981634, 39.361674 ], [ -76.981613, 39.361667 ], [ -76.981508, 39.361668 ], [ -76.981007, 39.3617 ], [ -76.980861, 39.36171 ], [ -76.980101, 39.361726 ], [ -76.979502, 39.361712 ], [ -76.979163, 39.361705 ], [ -76.979001, 39.361718 ], [ -76.978852, 39.36173 ], [ -76.978407, 39.361767 ], [ -76.978259, 39.36178 ], [ -76.978194, 39.361784 ], [ -76.978001, 39.3618 ], [ -76.977937, 39.361806 ], [ -76.977848, 39.361813 ], [ -76.97764, 39.361831 ], [ -76.977583, 39.361834 ], [ -76.977495, 39.361841 ], [ -76.976946, 39.361877 ], [ -76.976697, 39.361894 ], [ -76.976665, 39.361897 ], [ -76.976113, 39.361838 ], [ -76.975727, 39.361702 ], [ -76.975452, 39.361451 ], [ -76.97519, 39.361197 ], [ -76.974893, 39.361152 ], [ -76.974589, 39.361202 ], [ -76.974553, 39.361243 ], [ -76.974425, 39.361392 ], [ -76.974116, 39.36191 ], [ -76.973705, 39.36257 ], [ -76.973696, 39.362586 ], [ -76.973253, 39.362915 ], [ -76.972392, 39.363309 ], [ -76.971774, 39.363457 ], [ -76.9716, 39.363503 ], [ -76.970863, 39.363701 ], [ -76.970849, 39.363702 ], [ -76.970464, 39.363729 ], [ -76.970375, 39.363736 ], [ -76.970022, 39.363824 ], [ -76.969843, 39.36398 ], [ -76.969697, 39.363982 ], [ -76.969388, 39.363898 ], [ -76.969074, 39.363814 ], [ -76.969017, 39.363798 ], [ -76.96898, 39.363766 ], [ -76.968884, 39.363685 ], [ -76.968815, 39.363624 ], [ -76.968381, 39.36324 ], [ -76.968204, 39.363109 ], [ -76.968096, 39.363029 ], [ -76.967994, 39.362946 ], [ -76.967914, 39.362884 ], [ -76.967674, 39.362701 ], [ -76.967594, 39.36264 ], [ -76.96755, 39.362606 ], [ -76.967454, 39.362533 ], [ -76.967417, 39.362511 ], [ -76.967371, 39.362483 ], [ -76.967273, 39.362425 ], [ -76.967057, 39.362297 ], [ -76.966974, 39.362267 ], [ -76.966868, 39.362229 ], [ -76.966679, 39.362161 ], [ -76.966576, 39.362131 ], [ -76.966157, 39.362011 ], [ -76.965688, 39.361882 ], [ -76.965392, 39.361801 ], [ -76.965196, 39.361698 ], [ -76.964979, 39.361584 ], [ -76.964638, 39.361341 ], [ -76.964552, 39.36128 ], [ -76.96449, 39.361183 ], [ -76.964457, 39.361131 ], [ -76.964455, 39.360939 ], [ -76.964442, 39.36078 ], [ -76.964419, 39.360715 ], [ -76.96433, 39.360593 ], [ -76.964197, 39.360428 ], [ -76.964066, 39.360265 ], [ -76.963861, 39.359937 ], [ -76.963422, 39.359638 ], [ -76.963304, 39.359445 ], [ -76.963002, 39.358778 ], [ -76.962832, 39.358544 ], [ -76.962716, 39.358433 ], [ -76.962311, 39.358049 ], [ -76.962092, 39.357865 ], [ -76.962001, 39.357788 ], [ -76.961775, 39.35772 ], [ -76.961585, 39.357675 ], [ -76.961423, 39.357637 ], [ -76.960756, 39.357274 ], [ -76.960392, 39.357129 ], [ -76.960151, 39.356912 ], [ -76.960147, 39.356906 ], [ -76.959955, 39.356636 ], [ -76.959741, 39.356594 ], [ -76.959206, 39.356683 ], [ -76.958959, 39.356856 ], [ -76.958678, 39.357106 ], [ -76.95853, 39.357168 ], [ -76.958329, 39.357254 ], [ -76.957806, 39.357576 ], [ -76.957138, 39.357733 ], [ -76.955723, 39.357806 ], [ -76.955038, 39.357805 ], [ -76.954748, 39.357881 ], [ -76.95453, 39.357877 ], [ -76.954188, 39.357872 ], [ -76.953629, 39.357752 ], [ -76.953312, 39.35771 ], [ -76.953166, 39.357711 ], [ -76.952889, 39.357741 ], [ -76.952665, 39.357842 ], [ -76.952515, 39.357884 ], [ -76.952273, 39.357954 ], [ -76.95102, 39.357767 ], [ -76.950741, 39.357764 ], [ -76.950502, 39.357791 ], [ -76.950484, 39.357794 ], [ -76.95037, 39.357975 ], [ -76.950508, 39.3584 ], [ -76.950552, 39.358537 ], [ -76.950768, 39.35862 ], [ -76.950899, 39.358664 ], [ -76.951046, 39.358715 ], [ -76.951183, 39.358887 ], [ -76.951136, 39.359149 ], [ -76.95102, 39.359356 ], [ -76.950725, 39.359617 ], [ -76.950474, 39.359719 ], [ -76.950005, 39.359911 ], [ -76.949999, 39.359915 ], [ -76.949571, 39.360188 ], [ -76.949029, 39.360371 ], [ -76.948411, 39.360426 ], [ -76.947786, 39.360428 ], [ -76.947198, 39.360454 ], [ -76.947005, 39.360605 ], [ -76.946942, 39.360804 ], [ -76.946913, 39.360981 ], [ -76.946733, 39.361063 ], [ -76.946429, 39.361039 ], [ -76.946067, 39.36095 ], [ -76.94583, 39.360751 ], [ -76.945638, 39.360443 ], [ -76.945494, 39.360008 ], [ -76.945334, 39.359768 ], [ -76.945145, 39.359547 ], [ -76.945018, 39.359391 ], [ -76.944929, 39.35905 ], [ -76.944847, 39.358917 ], [ -76.944441, 39.358607 ], [ -76.944184, 39.358493 ], [ -76.943614, 39.358389 ], [ -76.943208, 39.358293 ], [ -76.942055, 39.35773 ], [ -76.941374, 39.357472 ], [ -76.941036, 39.357417 ], [ -76.940797, 39.357403 ], [ -76.940372, 39.357478 ], [ -76.939979, 39.35763 ], [ -76.939759, 39.357778 ], [ -76.939415, 39.358217 ], [ -76.939041, 39.358568 ], [ -76.938577, 39.358861 ], [ -76.938246, 39.35894 ], [ -76.937827, 39.358965 ], [ -76.937407, 39.358848 ], [ -76.936523, 39.358349 ], [ -76.936371, 39.358294 ], [ -76.936257, 39.3583 ], [ -76.936242, 39.358301 ], [ -76.936035, 39.35823 ], [ -76.935888, 39.358185 ], [ -76.935715, 39.358127 ], [ -76.935365, 39.358053 ], [ -76.935143, 39.358015 ], [ -76.935005, 39.357979 ], [ -76.934892, 39.357965 ], [ -76.93476, 39.357956 ], [ -76.934607, 39.357932 ], [ -76.934462, 39.357898 ], [ -76.934364, 39.35786 ], [ -76.934315, 39.357824 ], [ -76.934231, 39.357817 ], [ -76.934142, 39.35782 ], [ -76.934058, 39.35782 ], [ -76.933989, 39.357808 ], [ -76.933909, 39.357777 ], [ -76.933814, 39.357743 ], [ -76.933596, 39.357647 ], [ -76.933499, 39.357602 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "603001", "GEOID10": "24027603001", "NAME10": "6030.01", "NAMELSAD10": "Census Tract 6030.01", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 24726303, "AWATER10": 57708, "INTPTLAT10": "+39.3279761", "INTPTLON10": "-076.8942412" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.863078, 39.315008 ], [ -76.863049, 39.31484 ], [ -76.863106, 39.314569 ], [ -76.863203, 39.314109 ], [ -76.863314, 39.313502 ], [ -76.863359, 39.313026 ], [ -76.86334, 39.312713 ], [ -76.86331, 39.31248 ], [ -76.863267, 39.312264 ], [ -76.863206, 39.312082 ], [ -76.863144, 39.311933 ], [ -76.863046, 39.311741 ], [ -76.862929, 39.311549 ], [ -76.862787, 39.311386 ], [ -76.862677, 39.311297 ], [ -76.862581, 39.311225 ], [ -76.862538, 39.311172 ], [ -76.86255, 39.311114 ], [ -76.862618, 39.311062 ], [ -76.863039, 39.310937 ], [ -76.864234, 39.310568 ], [ -76.865669, 39.310066 ], [ -76.866101, 39.309894 ], [ -76.866102, 39.309894 ], [ -76.867261, 39.309502 ], [ -76.867705, 39.309347 ], [ -76.867978, 39.309239 ], [ -76.868485, 39.309055 ], [ -76.869013, 39.308862 ], [ -76.869122, 39.308816 ], [ -76.869153, 39.308799 ], [ -76.869161, 39.308786 ], [ -76.870392, 39.30884 ], [ -76.87045, 39.308843 ], [ -76.870653, 39.308758 ], [ -76.874586, 39.3075 ], [ -76.875149, 39.307313 ], [ -76.87623, 39.306966 ], [ -76.877241, 39.306642 ], [ -76.877891, 39.306433 ], [ -76.87922, 39.305965 ], [ -76.879848, 39.305738 ], [ -76.880547, 39.305504 ], [ -76.880735, 39.305263 ], [ -76.880733, 39.305174 ], [ -76.88072, 39.304984 ], [ -76.881151, 39.305076 ], [ -76.881703, 39.305181 ], [ -76.882233, 39.305279 ], [ -76.882851, 39.305396 ], [ -76.883608, 39.305518 ], [ -76.883947, 39.305568 ], [ -76.884197, 39.305597 ], [ -76.884599, 39.305647 ], [ -76.885075, 39.305698 ], [ -76.88604, 39.30578 ], [ -76.886588, 39.305812 ], [ -76.887181, 39.30584 ], [ -76.887795, 39.30585 ], [ -76.888401, 39.305863 ], [ -76.889012, 39.305863 ], [ -76.88963, 39.30584 ], [ -76.8903, 39.305807 ], [ -76.890979, 39.305765 ], [ -76.891221, 39.305748 ], [ -76.891829, 39.305695 ], [ -76.892412, 39.305635 ], [ -76.893442, 39.305509 ], [ -76.894462, 39.305373 ], [ -76.895331, 39.305212 ], [ -76.895878, 39.305093 ], [ -76.896894, 39.304867 ], [ -76.89811, 39.304572 ], [ -76.899172, 39.304288 ], [ -76.899812, 39.304108 ], [ -76.900525, 39.303894 ], [ -76.901627, 39.303532 ], [ -76.902765, 39.303129 ], [ -76.903123, 39.303015 ], [ -76.903422, 39.302918 ], [ -76.903662, 39.30285 ], [ -76.904243, 39.302694 ], [ -76.904479, 39.302643 ], [ -76.905136, 39.302505 ], [ -76.90551, 39.302443 ], [ -76.905906, 39.302395 ], [ -76.906492, 39.30234 ], [ -76.906815, 39.302316 ], [ -76.907152, 39.302312 ], [ -76.907701, 39.302312 ], [ -76.908336, 39.302338 ], [ -76.909033, 39.302404 ], [ -76.909721, 39.302479 ], [ -76.909909, 39.302507 ], [ -76.910383, 39.302592 ], [ -76.911134, 39.302762 ], [ -76.912057, 39.303046 ], [ -76.912721, 39.303287 ], [ -76.913458, 39.303609 ], [ -76.913819, 39.303787 ], [ -76.914355, 39.304049 ], [ -76.914732, 39.304219 ], [ -76.915253, 39.304423 ], [ -76.916003, 39.304685 ], [ -76.916174, 39.304741 ], [ -76.916732, 39.304892 ], [ -76.91755, 39.305086 ], [ -76.918421, 39.305259 ], [ -76.91925, 39.305374 ], [ -76.92018, 39.305484 ], [ -76.921195, 39.305587 ], [ -76.922207, 39.305692 ], [ -76.923102, 39.305786 ], [ -76.924538, 39.305961 ], [ -76.924915, 39.30602 ], [ -76.926091, 39.306156 ], [ -76.926522, 39.306188 ], [ -76.927019, 39.306238 ], [ -76.927648, 39.306306 ], [ -76.928368, 39.306378 ], [ -76.929088, 39.30644 ], [ -76.930238, 39.306561 ], [ -76.930549, 39.306607 ], [ -76.930535, 39.306729 ], [ -76.930526, 39.307072 ], [ -76.930519, 39.307566 ], [ -76.930535, 39.307857 ], [ -76.930539, 39.307937 ], [ -76.930553, 39.308275 ], [ -76.930595, 39.309257 ], [ -76.930601, 39.30963 ], [ -76.930591, 39.310062 ], [ -76.93056, 39.310217 ], [ -76.930483, 39.310587 ], [ -76.930415, 39.31095 ], [ -76.930341, 39.311308 ], [ -76.930292, 39.311526 ], [ -76.930258, 39.311636 ], [ -76.930229, 39.311728 ], [ -76.930146, 39.311954 ], [ -76.929887, 39.312549 ], [ -76.929794, 39.312786 ], [ -76.929737, 39.312927 ], [ -76.929583, 39.313305 ], [ -76.929268, 39.314032 ], [ -76.929029, 39.314601 ], [ -76.928809, 39.315147 ], [ -76.928499, 39.315842 ], [ -76.928413, 39.316045 ], [ -76.928361, 39.316195 ], [ -76.928337, 39.316321 ], [ -76.928311, 39.31656 ], [ -76.928284, 39.316942 ], [ -76.928279, 39.317337 ], [ -76.928254, 39.317768 ], [ -76.928223, 39.318269 ], [ -76.928162, 39.318787 ], [ -76.928096, 39.31918 ], [ -76.928011, 39.319769 ], [ -76.927953, 39.320359 ], [ -76.927924, 39.320547 ], [ -76.927867, 39.320936 ], [ -76.927788, 39.321346 ], [ -76.926352, 39.321251 ], [ -76.926313, 39.321621 ], [ -76.926302, 39.32197 ], [ -76.926265, 39.322309 ], [ -76.926165, 39.322982 ], [ -76.926111, 39.323312 ], [ -76.926009, 39.323639 ], [ -76.925954, 39.323801 ], [ -76.925888, 39.323962 ], [ -76.925785, 39.324114 ], [ -76.92563, 39.324277 ], [ -76.925547, 39.324351 ], [ -76.925256, 39.324586 ], [ -76.924725, 39.325048 ], [ -76.924413, 39.325351 ], [ -76.924251, 39.325539 ], [ -76.924059, 39.325837 ], [ -76.923994, 39.326007 ], [ -76.923969, 39.326073 ], [ -76.923963, 39.32609 ], [ -76.923909, 39.326342 ], [ -76.923862, 39.326648 ], [ -76.923883, 39.32755 ], [ -76.923927, 39.328314 ], [ -76.92394, 39.328751 ], [ -76.923958, 39.328973 ], [ -76.924035, 39.329549 ], [ -76.92412, 39.329726 ], [ -76.924191, 39.329854 ], [ -76.924338, 39.33001 ], [ -76.924512, 39.330152 ], [ -76.924707, 39.33027 ], [ -76.924948, 39.330405 ], [ -76.925602, 39.330662 ], [ -76.926222, 39.330947 ], [ -76.927075, 39.331419 ], [ -76.927572, 39.331818 ], [ -76.927905, 39.332139 ], [ -76.92797, 39.332272 ], [ -76.927985, 39.332349 ], [ -76.928005, 39.332452 ], [ -76.927995, 39.332613 ], [ -76.927937, 39.332863 ], [ -76.927826, 39.333071 ], [ -76.927629, 39.333368 ], [ -76.927298, 39.333685 ], [ -76.926394, 39.334291 ], [ -76.926129, 39.334443 ], [ -76.926098, 39.334468 ], [ -76.925796, 39.334709 ], [ -76.92563, 39.334897 ], [ -76.925289, 39.335288 ], [ -76.925137, 39.335566 ], [ -76.924607, 39.336458 ], [ -76.924299, 39.337003 ], [ -76.924068, 39.337451 ], [ -76.9238, 39.337803 ], [ -76.92349, 39.338243 ], [ -76.923402, 39.338704 ], [ -76.923333, 39.338933 ], [ -76.923199, 39.339264 ], [ -76.923047, 39.339489 ], [ -76.922875, 39.339707 ], [ -76.92251, 39.340156 ], [ -76.921944, 39.340866 ], [ -76.921396, 39.341609 ], [ -76.921027, 39.342104 ], [ -76.920854, 39.34238 ], [ -76.920674, 39.342667 ], [ -76.920588, 39.342874 ], [ -76.920352, 39.343252 ], [ -76.91994, 39.343774 ], [ -76.919767, 39.343977 ], [ -76.919544, 39.344219 ], [ -76.919433, 39.344297 ], [ -76.919269, 39.344389 ], [ -76.919115, 39.344481 ], [ -76.918874, 39.344617 ], [ -76.918663, 39.344776 ], [ -76.918434, 39.345015 ], [ -76.918306, 39.345161 ], [ -76.918151, 39.34534 ], [ -76.917781, 39.345762 ], [ -76.917206, 39.346373 ], [ -76.917035, 39.346509 ], [ -76.916874, 39.346675 ], [ -76.916561, 39.346969 ], [ -76.916237, 39.347204 ], [ -76.91608, 39.347281 ], [ -76.916029, 39.347391 ], [ -76.916019, 39.347548 ], [ -76.915974, 39.347711 ], [ -76.915919, 39.347828 ], [ -76.915842, 39.347943 ], [ -76.91577, 39.348021 ], [ -76.915637, 39.348144 ], [ -76.915507, 39.348289 ], [ -76.915349, 39.348389 ], [ -76.915119, 39.348484 ], [ -76.914788, 39.348612 ], [ -76.914566, 39.348732 ], [ -76.914436, 39.348857 ], [ -76.9144, 39.348985 ], [ -76.914385, 39.349119 ], [ -76.914421, 39.349247 ], [ -76.914501, 39.34937 ], [ -76.91467, 39.349481 ], [ -76.914746, 39.349679 ], [ -76.914774, 39.349789 ], [ -76.914775, 39.349884 ], [ -76.914759, 39.349971 ], [ -76.914711, 39.350049 ], [ -76.914658, 39.350115 ], [ -76.914582, 39.350177 ], [ -76.914491, 39.350238 ], [ -76.914362, 39.3503 ], [ -76.91421, 39.350352 ], [ -76.914112, 39.350404 ], [ -76.914072, 39.350481 ], [ -76.91397, 39.350893 ], [ -76.913927, 39.35089 ], [ -76.913618, 39.35093 ], [ -76.913586, 39.350937 ], [ -76.913404, 39.350981 ], [ -76.912915, 39.350968 ], [ -76.912461, 39.350796 ], [ -76.912287, 39.35073 ], [ -76.912119, 39.35062 ], [ -76.911949, 39.350509 ], [ -76.911792, 39.350256 ], [ -76.911733, 39.349817 ], [ -76.911608, 39.349589 ], [ -76.911169, 39.349299 ], [ -76.910721, 39.349003 ], [ -76.910154, 39.348656 ], [ -76.909577, 39.348463 ], [ -76.909262, 39.3485 ], [ -76.909031, 39.348598 ], [ -76.908677, 39.34881 ], [ -76.908417, 39.349004 ], [ -76.908001, 39.349382 ], [ -76.907981, 39.34963 ], [ -76.908048, 39.349846 ], [ -76.908259, 39.349998 ], [ -76.908525, 39.350175 ], [ -76.908811, 39.350376 ], [ -76.90885, 39.350473 ], [ -76.908909, 39.35062 ], [ -76.908925, 39.351083 ], [ -76.908904, 39.351977 ], [ -76.908896, 39.352191 ], [ -76.90888, 39.352653 ], [ -76.908672, 39.352891 ], [ -76.908241, 39.353096 ], [ -76.907715, 39.353202 ], [ -76.907421, 39.35331 ], [ -76.907261, 39.35337 ], [ -76.90701, 39.35353 ], [ -76.906414, 39.353764 ], [ -76.905975, 39.353992 ], [ -76.905803, 39.354145 ], [ -76.905571, 39.35422 ], [ -76.905106, 39.354317 ], [ -76.904421, 39.354323 ], [ -76.903802, 39.354236 ], [ -76.903586, 39.354274 ], [ -76.903337, 39.354381 ], [ -76.903019, 39.354407 ], [ -76.902777, 39.354377 ], [ -76.902227, 39.354206 ], [ -76.901996, 39.354197 ], [ -76.901668, 39.354245 ], [ -76.901411, 39.354199 ], [ -76.901323, 39.354184 ], [ -76.901095, 39.35403 ], [ -76.900541, 39.353575 ], [ -76.90021, 39.353264 ], [ -76.899956, 39.35291 ], [ -76.899903, 39.352787 ], [ -76.899813, 39.35258 ], [ -76.899795, 39.352538 ], [ -76.899595, 39.35233 ], [ -76.899396, 39.352236 ], [ -76.899282, 39.352199 ], [ -76.89916, 39.352161 ], [ -76.899068, 39.352133 ], [ -76.898873, 39.352075 ], [ -76.898846, 39.352067 ], [ -76.898313, 39.351838 ], [ -76.898215, 39.351796 ], [ -76.89813, 39.351751 ], [ -76.897901, 39.35163 ], [ -76.897629, 39.351624 ], [ -76.89757, 39.351623 ], [ -76.897045, 39.351793 ], [ -76.896269, 39.352036 ], [ -76.896115, 39.352098 ], [ -76.895951, 39.352165 ], [ -76.895602, 39.352218 ], [ -76.895061, 39.352159 ], [ -76.894621, 39.352203 ], [ -76.894232, 39.352326 ], [ -76.894166, 39.352348 ], [ -76.893652, 39.352546 ], [ -76.893188, 39.352704 ], [ -76.891643, 39.352903 ], [ -76.891132, 39.353077 ], [ -76.89083, 39.353106 ], [ -76.890514, 39.353161 ], [ -76.890188, 39.353287 ], [ -76.890181, 39.35329 ], [ -76.889354, 39.353704 ], [ -76.889029, 39.353805 ], [ -76.888912, 39.353775 ], [ -76.888831, 39.353755 ], [ -76.888536, 39.353554 ], [ -76.888105, 39.353153 ], [ -76.888055, 39.35294 ], [ -76.88813, 39.352778 ], [ -76.888365, 39.352435 ], [ -76.888562, 39.352151 ], [ -76.888592, 39.352024 ], [ -76.888406, 39.351743 ], [ -76.887606, 39.351154 ], [ -76.886714, 39.350613 ], [ -76.886526, 39.350563 ], [ -76.886421, 39.350588 ], [ -76.886324, 39.350636 ], [ -76.886126, 39.350788 ], [ -76.886142, 39.351397 ], [ -76.886175, 39.352237 ], [ -76.886097, 39.352552 ], [ -76.88586, 39.352604 ], [ -76.885753, 39.352629 ], [ -76.884656, 39.352399 ], [ -76.884252, 39.352258 ], [ -76.884092, 39.352168 ], [ -76.884069, 39.352156 ], [ -76.884049, 39.352139 ], [ -76.884001, 39.3521 ], [ -76.883939, 39.352045 ], [ -76.883888, 39.351995 ], [ -76.883837, 39.35195 ], [ -76.883775, 39.351882 ], [ -76.883721, 39.351823 ], [ -76.883629, 39.35173 ], [ -76.883557, 39.351661 ], [ -76.883501, 39.351617 ], [ -76.883448, 39.35157 ], [ -76.883388, 39.351527 ], [ -76.883334, 39.351486 ], [ -76.883316, 39.351466 ], [ -76.883301, 39.351441 ], [ -76.883299, 39.351424 ], [ -76.8833, 39.351404 ], [ -76.883304, 39.351384 ], [ -76.883297, 39.351361 ], [ -76.883291, 39.351336 ], [ -76.883216, 39.351249 ], [ -76.88288, 39.350932 ], [ -76.882763, 39.350829 ], [ -76.882684, 39.350756 ], [ -76.882615, 39.350696 ], [ -76.882554, 39.35064 ], [ -76.882508, 39.350593 ], [ -76.882432, 39.3505 ], [ -76.882356, 39.350401 ], [ -76.882281, 39.350307 ], [ -76.882263, 39.350282 ], [ -76.882239, 39.350239 ], [ -76.882274, 39.350185 ], [ -76.882202, 39.349881 ], [ -76.882107, 39.349588 ], [ -76.882067, 39.349371 ], [ -76.882032, 39.349072 ], [ -76.881959, 39.348743 ], [ -76.881906, 39.34855 ], [ -76.881829, 39.348402 ], [ -76.88171, 39.348296 ], [ -76.881513, 39.348204 ], [ -76.881376, 39.348081 ], [ -76.88114, 39.347778 ], [ -76.880966, 39.347517 ], [ -76.880747, 39.347199 ], [ -76.88055, 39.34682 ], [ -76.880395, 39.346634 ], [ -76.88027, 39.346507 ], [ -76.880145, 39.346425 ], [ -76.879986, 39.346367 ], [ -76.879878, 39.346268 ], [ -76.879814, 39.346183 ], [ -76.879656, 39.345981 ], [ -76.879488, 39.345771 ], [ -76.879326, 39.345482 ], [ -76.879224, 39.345281 ], [ -76.879165, 39.345048 ], [ -76.879153, 39.344838 ], [ -76.879075, 39.344545 ], [ -76.878956, 39.344293 ], [ -76.878827, 39.343941 ], [ -76.878699, 39.343492 ], [ -76.878552, 39.343064 ], [ -76.878405, 39.342695 ], [ -76.878253, 39.34242 ], [ -76.878105, 39.342267 ], [ -76.877762, 39.342072 ], [ -76.87738, 39.341919 ], [ -76.876911, 39.341626 ], [ -76.876518, 39.341342 ], [ -76.876322, 39.341219 ], [ -76.876098, 39.340973 ], [ -76.875662, 39.340527 ], [ -76.875438, 39.34032 ], [ -76.875297, 39.340108 ], [ -76.875134, 39.339747 ], [ -76.875069, 39.339451 ], [ -76.875031, 39.339107 ], [ -76.875026, 39.338777 ], [ -76.875032, 39.338476 ], [ -76.875109, 39.338226 ], [ -76.875148, 39.33804 ], [ -76.875121, 39.337858 ], [ -76.875148, 39.337718 ], [ -76.875197, 39.337646 ], [ -76.875274, 39.33757 ], [ -76.875378, 39.337472 ], [ -76.875487, 39.337379 ], [ -76.875602, 39.337282 ], [ -76.875728, 39.33721 ], [ -76.875821, 39.337164 ], [ -76.875908, 39.337143 ], [ -76.876012, 39.33713 ], [ -76.876121, 39.337189 ], [ -76.87623, 39.337283 ], [ -76.876279, 39.337304 ], [ -76.876368, 39.337311 ], [ -76.876647, 39.337317 ], [ -76.877075, 39.33724 ], [ -76.877361, 39.337151 ], [ -76.877776, 39.33693 ], [ -76.878119, 39.336714 ], [ -76.878276, 39.336592 ], [ -76.87837, 39.336454 ], [ -76.878363, 39.336288 ], [ -76.878085, 39.335916 ], [ -76.877671, 39.335506 ], [ -76.877165, 39.335189 ], [ -76.876986, 39.335062 ], [ -76.876822, 39.334868 ], [ -76.876502, 39.334546 ], [ -76.876288, 39.334363 ], [ -76.875981, 39.334168 ], [ -76.875867, 39.333991 ], [ -76.875689, 39.333586 ], [ -76.87554, 39.333065 ], [ -76.875419, 39.33276 ], [ -76.875327, 39.332583 ], [ -76.875041, 39.332154 ], [ -76.874791, 39.331954 ], [ -76.874477, 39.331776 ], [ -76.874285, 39.331693 ], [ -76.874106, 39.331693 ], [ -76.873828, 39.331709 ], [ -76.873485, 39.331825 ], [ -76.87332, 39.331858 ], [ -76.873013, 39.331886 ], [ -76.872684, 39.331957 ], [ -76.87237, 39.33199 ], [ -76.872013, 39.331984 ], [ -76.871728, 39.331945 ], [ -76.871356, 39.331878 ], [ -76.870985, 39.331778 ], [ -76.870614, 39.331678 ], [ -76.870227, 39.331611 ], [ -76.869932, 39.331573 ], [ -76.869628, 39.331475 ], [ -76.869391, 39.331385 ], [ -76.869251, 39.331351 ], [ -76.869053, 39.331351 ], [ -76.868889, 39.331392 ], [ -76.868647, 39.331436 ], [ -76.868337, 39.331522 ], [ -76.868076, 39.331586 ], [ -76.867743, 39.331619 ], [ -76.867312, 39.331686 ], [ -76.867017, 39.331705 ], [ -76.866607, 39.331708 ], [ -76.866191, 39.331629 ], [ -76.86578, 39.331501 ], [ -76.865375, 39.331403 ], [ -76.865123, 39.331305 ], [ -76.864993, 39.331252 ], [ -76.864027, 39.330794 ], [ -76.86338, 39.330451 ], [ -76.862796, 39.330079 ], [ -76.862444, 39.329813 ], [ -76.861995, 39.329415 ], [ -76.861561, 39.328979 ], [ -76.861126, 39.3286 ], [ -76.860905, 39.328344 ], [ -76.860833, 39.328134 ], [ -76.860693, 39.327898 ], [ -76.860399, 39.327541 ], [ -76.860093, 39.327325 ], [ -76.86008, 39.327316 ], [ -76.859593, 39.327004 ], [ -76.859279, 39.326865 ], [ -76.858989, 39.326703 ], [ -76.858608, 39.32632 ], [ -76.858323, 39.326001 ], [ -76.85774, 39.325464 ], [ -76.857498, 39.325201 ], [ -76.856862, 39.324683 ], [ -76.85663, 39.324427 ], [ -76.856414, 39.324091 ], [ -76.856331, 39.324016 ], [ -76.856606, 39.323823 ], [ -76.856653, 39.323775 ], [ -76.858475, 39.322622 ], [ -76.861097, 39.320404 ], [ -76.861878, 39.319552 ], [ -76.863169, 39.318198 ], [ -76.863791, 39.317575 ], [ -76.863447, 39.316311 ], [ -76.863365, 39.316098 ], [ -76.863322, 39.315985 ], [ -76.863199, 39.315573 ], [ -76.863131, 39.315303 ], [ -76.863078, 39.315008 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "24", "COUNTYFP10": "027", "TRACTCE10": "602201", "GEOID10": "24027602201", "NAME10": "6022.01", "NAMELSAD10": "Census Tract 6022.01", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 4611549, "AWATER10": 6125, "INTPTLAT10": "+39.2900228", "INTPTLON10": "-076.8721238" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -76.877496, 39.302901 ], [ -76.877473, 39.302921 ], [ -76.877444, 39.302953 ], [ -76.877412, 39.302971 ], [ -76.877377, 39.302975 ], [ -76.877342, 39.302995 ], [ -76.877237, 39.303065 ], [ -76.877074, 39.303153 ], [ -76.876993, 39.303189 ], [ -76.876877, 39.303292 ], [ -76.876703, 39.303485 ], [ -76.876493, 39.303717 ], [ -76.876392, 39.303677 ], [ -76.875803, 39.303442 ], [ -76.875485, 39.303304 ], [ -76.874962, 39.303044 ], [ -76.874166, 39.302697 ], [ -76.87337, 39.302359 ], [ -76.87273, 39.302082 ], [ -76.870822, 39.301262 ], [ -76.869593, 39.300737 ], [ -76.869016, 39.300494 ], [ -76.868661, 39.300336 ], [ -76.86793, 39.300013 ], [ -76.867603, 39.299888 ], [ -76.86639, 39.299345 ], [ -76.865139, 39.298813 ], [ -76.864048, 39.298387 ], [ -76.862788, 39.29796 ], [ -76.861513, 39.297574 ], [ -76.8603, 39.297254 ], [ -76.859642, 39.297082 ], [ -76.85898, 39.296931 ], [ -76.857948, 39.296713 ], [ -76.856944, 39.296531 ], [ -76.855857, 39.29638 ], [ -76.855908, 39.296094 ], [ -76.855981, 39.295678 ], [ -76.856063, 39.29522 ], [ -76.856189, 39.294589 ], [ -76.856387, 39.293907 ], [ -76.856418, 39.293731 ], [ -76.856645, 39.292447 ], [ -76.856869, 39.291341 ], [ -76.857125, 39.290075 ], [ -76.857304, 39.289352 ], [ -76.857405, 39.289047 ], [ -76.857549, 39.288533 ], [ -76.857606, 39.28822 ], [ -76.858093, 39.286203 ], [ -76.858132, 39.286042 ], [ -76.858565, 39.284547 ], [ -76.858697, 39.284104 ], [ -76.85882, 39.283107 ], [ -76.858877, 39.282786 ], [ -76.858997, 39.282204 ], [ -76.85905, 39.282088 ], [ -76.860231, 39.279532 ], [ -76.861319, 39.279613 ], [ -76.862262, 39.279682 ], [ -76.862409, 39.279695 ], [ -76.862832, 39.279734 ], [ -76.863218, 39.279769 ], [ -76.863616, 39.279806 ], [ -76.863834, 39.279826 ], [ -76.86472, 39.27992 ], [ -76.865352, 39.280007 ], [ -76.866008, 39.28009 ], [ -76.86667, 39.280177 ], [ -76.867262, 39.280267 ], [ -76.8679, 39.280363 ], [ -76.868465, 39.280437 ], [ -76.869799, 39.280679 ], [ -76.870132, 39.28075 ], [ -76.870703, 39.280897 ], [ -76.871374, 39.281081 ], [ -76.871936, 39.281275 ], [ -76.872155, 39.28135 ], [ -76.872481, 39.281469 ], [ -76.873267, 39.281885 ], [ -76.873448, 39.281984 ], [ -76.874056, 39.282319 ], [ -76.874382, 39.282527 ], [ -76.874609, 39.282655 ], [ -76.875409, 39.283105 ], [ -76.87634, 39.283634 ], [ -76.876647, 39.283789 ], [ -76.876769, 39.283851 ], [ -76.878118, 39.284545 ], [ -76.879398, 39.285165 ], [ -76.880399, 39.285636 ], [ -76.881729, 39.286274 ], [ -76.883128, 39.28694 ], [ -76.883825, 39.287277 ], [ -76.884595, 39.287649 ], [ -76.886098, 39.288336 ], [ -76.887661, 39.289074 ], [ -76.887773, 39.289128 ], [ -76.888796, 39.289621 ], [ -76.88911, 39.289772 ], [ -76.889613, 39.29001 ], [ -76.889729, 39.290065 ], [ -76.889806, 39.290103 ], [ -76.887026, 39.291856 ], [ -76.886833, 39.292029 ], [ -76.886718, 39.292148 ], [ -76.886589, 39.292308 ], [ -76.886311, 39.292658 ], [ -76.886129, 39.292856 ], [ -76.885965, 39.292988 ], [ -76.885804, 39.293124 ], [ -76.885588, 39.29327 ], [ -76.885241, 39.293487 ], [ -76.885133, 39.293576 ], [ -76.885056, 39.293646 ], [ -76.885004, 39.293736 ], [ -76.884951, 39.293858 ], [ -76.884903, 39.294 ], [ -76.884767, 39.294293 ], [ -76.884609, 39.294636 ], [ -76.884513, 39.294809 ], [ -76.884379, 39.295033 ], [ -76.884199, 39.295296 ], [ -76.884069, 39.29544 ], [ -76.883456, 39.296145 ], [ -76.883223, 39.296424 ], [ -76.882924, 39.296817 ], [ -76.882747, 39.29707 ], [ -76.882608, 39.297264 ], [ -76.882446, 39.297462 ], [ -76.88216, 39.297661 ], [ -76.881785, 39.297911 ], [ -76.881371, 39.298108 ], [ -76.881123, 39.298204 ], [ -76.880867, 39.29833 ], [ -76.880121, 39.298805 ], [ -76.879848, 39.29899 ], [ -76.879562, 39.299174 ], [ -76.879091, 39.299501 ], [ -76.878869, 39.299664 ], [ -76.878723, 39.299756 ], [ -76.877999, 39.300256 ], [ -76.877619, 39.300517 ], [ -76.87747, 39.300602 ], [ -76.877474, 39.300815 ], [ -76.877409, 39.301012 ], [ -76.877597, 39.301217 ], [ -76.877798, 39.301377 ], [ -76.877768, 39.301814 ], [ -76.878, 39.302105 ], [ -76.877992, 39.302313 ], [ -76.877842, 39.302501 ], [ -76.877693, 39.302711 ], [ -76.877569, 39.3028 ], [ -76.877496, 39.302901 ] ] ] } } +] +} diff --git a/data/data-pipeline/data_pipeline/tests/score/test_utils/test_adjacency.py b/data/data-pipeline/data_pipeline/tests/score/test_utils/test_adjacency.py new file mode 100644 index 000000000..679a458e9 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/score/test_utils/test_adjacency.py @@ -0,0 +1,73 @@ +# pylint: disable=protected-access +# flake8: noqa=F841 +from contextlib import contextmanager +from functools import partial +from pathlib import Path +from unittest import mock + +import pandas as pd +import pytest +from data_pipeline.etl.sources.geo_utils import get_tract_geojson +from data_pipeline.score import field_names +from data_pipeline.score.utils import ( + calculate_tract_adjacency_scores as original_calculate_tract_adjacency_score, +) + + +@contextmanager +def patch_calculate_tract_adjacency_scores(): + # Use fixtures for tract data. + tract_data_path = Path(__file__).parent / "data" / "us.geojson" + + get_tract_geojson_mock = partial( + get_tract_geojson, _tract_data_path=tract_data_path + ) + with mock.patch( + "data_pipeline.score.utils.get_tract_geojson", + new=get_tract_geojson_mock, + ): + yield original_calculate_tract_adjacency_score + + +@pytest.fixture +def score_data(): + score_csv = Path(__file__).parent / "data" / "scores.csv" + return pd.read_csv( + score_csv, dtype={field_names.GEOID_TRACT_FIELD: str, "included": bool} + ) + + +def test_all_adjacent_are_true(score_data): + score_data["included"] = True + score_data.loc[ + score_data.GEOID10_TRACT == "24027603004", "included" + ] = False + with patch_calculate_tract_adjacency_scores() as calculate_tract_adjacency_scores: + adjancency_scores = calculate_tract_adjacency_scores( + score_data, "included" + ) + assert ( + adjancency_scores.loc[ + adjancency_scores.GEOID10_TRACT == "24027603004", + "included" + field_names.ADJACENCY_INDEX_SUFFIX, + ].iloc[0] + == 1.0 + ) + + +def test_all_adjacent_are_false(score_data): + score_data["included"] = False + score_data.loc[ + score_data.GEOID10_TRACT == "24027603004", "included" + ] = False + with patch_calculate_tract_adjacency_scores() as calculate_tract_adjacency_scores: + adjancency_scores = calculate_tract_adjacency_scores( + score_data, "included" + ) + assert ( + adjancency_scores.loc[ + adjancency_scores.GEOID10_TRACT == "24027603004", + "included" + field_names.ADJACENCY_INDEX_SUFFIX, + ].iloc[0] + == 0.0 + ) diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/ME_A.CSV b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/ME_A.CSV new file mode 100644 index 000000000..6c316fa38 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/ME_A.CSV @@ -0,0 +1,2 @@ +"Tract ID","STATE2KX","CNTY2KX","TRACT2KX","e(0)","se(e(0))","Abridged life table flag" +23001010100,23,001,010100,72.3,2.2928,3 diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/US_A.CSV b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/US_A.CSV new file mode 100644 index 000000000..f021be4fc --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/US_A.CSV @@ -0,0 +1,16 @@ +Tract ID,STATE2KX,CNTY2KX,TRACT2KX,e(0),se(e(0)),Abridged life table flag +15001021010,15,001,021010,77.4,1.6548,2 +15001021101,15,001,021101,82.5,3.9086,3 +15001021402,15,001,021402,80.4,1.093,2 +15001021800,15,001,021800,79.5,1.132,2 +15003010201,15,003,010201,79.4,1.5261,3 +15007040603,15,007,040603,86.3,2.2285,3 +15007040604,15,007,040604,84.9,2.1995,3 +15007040700,15,007,040700,80.4,0.7571,2 +15009030100,15,009,030100,77.2,1.8736,3 +15009030402,15,009,030402,83.5,1.8267,3 +15009030800,15,009,030800,82.2,1.6251,3 +06027000800,06,007,040500,99.1,3.1415,3 +06069000802,06,001,020100,99.1,3.1415,3 +06061021322,06,007,040300,99.1,3.1415,3 +15009030201,15,009,030201,99.1,3.1415,3 diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/WI_A.CSV b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/WI_A.CSV new file mode 100644 index 000000000..b166804e0 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/WI_A.CSV @@ -0,0 +1,2 @@ +"Tract ID","STATE2KX","CNTY2KX","TRACT2KX","e(0)","se(e(0))","Abridged life table flag" +55001950201,55,001,950201,74.5,2.5471,3 diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/extract.csv new file mode 100644 index 000000000..17e0a8276 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/extract.csv @@ -0,0 +1,16 @@ +Tract ID,STATE2KX,CNTY2KX,TRACT2KX,e(0),se(e(0)),Abridged life table flag +15001021010,15,1,21010,77.4000000000,1.6548000000,2 +15001021101,15,1,21101,82.5000000000,3.9086000000,3 +15001021402,15,1,21402,80.4000000000,1.0930000000,2 +15001021800,15,1,21800,79.5000000000,1.1320000000,2 +15003010201,15,3,10201,79.4000000000,1.5261000000,3 +15007040603,15,7,40603,86.3000000000,2.2285000000,3 +15007040604,15,7,40604,84.9000000000,2.1995000000,3 +15007040700,15,7,40700,80.4000000000,0.7571000000,2 +15009030100,15,9,30100,77.2000000000,1.8736000000,3 +15009030402,15,9,30402,83.5000000000,1.8267000000,3 +15009030800,15,9,30800,82.2000000000,1.6251000000,3 +6027000800,6,7,40500,99.1000000000,3.1415000000,3 +6069000802,6,1,20100,99.1000000000,3.1415000000,3 +6061021322,6,7,40300,99.1000000000,3.1415000000,3 +15009030201,15,9,30201,99.1000000000,3.1415000000,3 diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/output.csv new file mode 100644 index 000000000..ca8909426 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/output.csv @@ -0,0 +1,18 @@ +GEOID10_TRACT,Life expectancy (years) +15001021010,77.4000000000 +15001021101,82.5000000000 +15001021402,80.4000000000 +15001021800,79.5000000000 +15003010201,79.4000000000 +15007040603,86.3000000000 +15007040604,84.9000000000 +15007040700,80.4000000000 +15009030100,77.2000000000 +15009030402,83.5000000000 +15009030800,82.2000000000 +06027000800,99.1000000000 +06069000802,99.1000000000 +06061021322,99.1000000000 +15009030201,99.1000000000 +23001010100,72.3000000000 +55001950201,74.5000000000 diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/transform.csv new file mode 100644 index 000000000..6cff770b4 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/data/transform.csv @@ -0,0 +1,18 @@ +GEOID10_TRACT,STATE2KX,CNTY2KX,TRACT2KX,Life expectancy (years),se(e(0)),Abridged life table flag +15001021010,15,1,21010,77.4000000000,1.6548000000,2 +15001021101,15,1,21101,82.5000000000,3.9086000000,3 +15001021402,15,1,21402,80.4000000000,1.0930000000,2 +15001021800,15,1,21800,79.5000000000,1.1320000000,2 +15003010201,15,3,10201,79.4000000000,1.5261000000,3 +15007040603,15,7,40603,86.3000000000,2.2285000000,3 +15007040604,15,7,40604,84.9000000000,2.1995000000,3 +15007040700,15,7,40700,80.4000000000,0.7571000000,2 +15009030100,15,9,30100,77.2000000000,1.8736000000,3 +15009030402,15,9,30402,83.5000000000,1.8267000000,3 +15009030800,15,9,30800,82.2000000000,1.6251000000,3 +06027000800,06,7,40500,99.1000000000,3.1415000000,3 +06069000802,06,1,20100,99.1000000000,3.1415000000,3 +06061021322,06,7,40300,99.1000000000,3.1415000000,3 +15009030201,15,9,30201,99.1000000000,3.1415000000,3 +23001010100,23,1,10100,72.3000000000,2.2928000000,3 +55001950201,55,1,950201,74.5000000000,2.5471000000,3 diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/test_etl.py new file mode 100644 index 000000000..271ba800e --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_life_expectancy/test_etl.py @@ -0,0 +1,113 @@ +# pylint: disable=protected-access +import pathlib +from unittest import mock + +import requests +from data_pipeline.etl.base import ExtractTransformLoad +from data_pipeline.etl.sources.cdc_life_expectancy.etl import CDCLifeExpectancy +from data_pipeline.tests.sources.example.test_etl import TestETL +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +class TestCDCLifeExpectency(TestETL): + """Tests the CDC Life Expectancy ETL. + + This uses pytest-snapshot. + To update individual snapshots: $ poetry run pytest + data_pipeline/tests/sources/cdc_life_expectancy/test_etl.py::TestClassNameETL:: + --snapshot-update + """ + + _ETL_CLASS = CDCLifeExpectancy + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "US_A.CSV" + _SAMPLE_DATA_ZIP_FILE_NAME = None + _EXTRACT_TMP_FOLDER_NAME = "CDCLifeExpectanc" + _EXTRACT_CSV_FILE_NAME = "extract.csv" + _FIXTURES_SHARED_TRACT_IDS = TestETL._FIXTURES_SHARED_TRACT_IDS + [ + "55001950201", # WI + "23001010100", # ME + ] + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) + + def _setup_etl_instance_and_run_extract( + self, mock_etl, mock_paths + ) -> ExtractTransformLoad: + """Method to setup an ETL instance with proper upstream mocks to run extract. + This must be re-implemented in every child class. + + This method can be used by multiple tests that need to run the same fixtures + that need these same mocks. + + In order to re-implement this method, usually it will involve a + decent amount of work to monkeypatch `requests` or another method that's + used to retrieve data in order to force that method to retrieve the fixture + data. A basic version of that patching is included here for classes that can use it. + """ + + with mock.patch( + "data_pipeline.utils.requests" + ) as requests_mock, mock.patch( + "data_pipeline.etl.score.etl_utils.get_state_fips_codes" + ) as mock_get_state_fips_codes: + tmp_path = mock_paths[1] + + def fake_get(url, *args, **kwargs): + file_path = url.split("/")[-1] + with open( + self._DATA_DIRECTORY_FOR_TEST / file_path, + "rb", + ) as file: + file_contents = file.read() + + response_mock = requests.Response() + response_mock.status_code = 200 + # pylint: disable=protected-access + # Return text fixture: + response_mock._content = file_contents + return response_mock + + requests_mock.get = fake_get + mock_get_state_fips_codes.return_value = [ + x[0:2] for x in self._FIXTURES_SHARED_TRACT_IDS + ] + # Instantiate the ETL class. + etl = self._get_instance_of_etl_class() + + # Monkey-patch the temporary directory to the one used in the test + etl.TMP_PATH = tmp_path + + # Run the extract method. + etl.extract() + return etl + + def test_init(self, mock_etl, mock_paths): + etl = self._ETL_CLASS() + data_path, _ = mock_paths + assert etl.DATA_PATH == data_path + assert etl.COLUMNS_TO_KEEP == [ + "GEOID10_TRACT", + "Life expectancy (years)", + ] + assert etl.INPUT_GEOID_TRACT_FIELD_NAME == "Tract ID" + assert etl.LIFE_EXPECTANCY_FIELD_NAME == "Life expectancy (years)" + + def test_get_output_file_path(self, mock_etl, mock_paths): + """Tests the right file name is returned.""" + etl = self._ETL_CLASS() + data_path, tmp_path = mock_paths + + output_file_path = etl._get_output_file_path() + expected_output_file_path = ( + data_path / "dataset" / "cdc_life_expectancy" / "usa.csv" + ) + assert output_file_path == expected_output_file_path diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_places/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/census_tract.csv b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/census_tract.csv new file mode 100644 index 000000000..3530d6459 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/census_tract.csv @@ -0,0 +1,451 @@ +Year,StateAbbr,StateDesc,CountyName,CountyFIPS,LocationName,DataSource,Category,Measure,Data_Value_Unit,Data_Value_Type,Data_Value,Data_Value_Footnote_Symbol,Data_Value_Footnote,Low_Confidence_Limit,High_Confidence_Limit,TotalPopulation,Geolocation,LocationID,CategoryID,MeasureId,DataValueTypeID,Short_Question_Text +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,36.1,,,35.2,36.8,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,13.1,,,12.6,13.6,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,15.1,,,14.4,15.8,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,82.0,,,80.5,83.4,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,14.2,,,12.8,15.6,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,ACCESS2,CrdPrv,Health Insurance +2018,CA,California,Inyo,06027,06027000800,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,33.1,,,32.1,34.1,3378,POINT (-117.1176757 36.25159703),06027000800,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,86.4,,,86.1,86.7,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,17.2,,,15.8,18.5,3378,POINT (-117.1176757 36.25159703),06027000800,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,8.6,,,8.1,9.1,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,30.2,,,29.4,31.0,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,24.2,,,22.4,25.9,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,74.3,,,73.6,74.9,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.9,,,3.8,4.1,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,16.8,,,15.8,17.7,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2018,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,25.6,,,22.4,29.2,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,COREW,CrdPrv,Core preventive services for older women +2018,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,26.5,,,24.0,29.1,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,72.5,,,71.9,73.0,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,26.9,,,25.3,28.4,3378,POINT (-117.1176757 36.25159703),06027000800,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,35.8,,,35.2,36.5,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,8.3,,,8.0,8.5,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,19.5,,,18.9,20.2,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,9.2,,,8.4,10.0,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,COPD,CrdPrv,COPD +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,16.2,,,15.8,16.6,3378,POINT (-117.1176757 36.25159703),06027000800,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,17.7,,,14.2,21.6,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,10.1,,,9.7,10.4,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2018,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,74.9,,,72.7,77.0,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,MAMMOUSE,CrdPrv,Mammography +2018,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,58.1,,,55.6,59.9,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,CA,California,Inyo,06027,06027000800,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,61.5,,,59.2,63.6,3378,POINT (-117.1176757 36.25159703),06027000800,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,28.5,,,27.8,29.2,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,CA,California,Inyo,06027,06027000800,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,4.6,,,4.3,4.9,3378,POINT (-117.1176757 36.25159703),06027000800,HLTHOUT,STROKE,CrdPrv,Stroke +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,23.0,,,22.2,24.0,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,23.2,,,22.5,23.9,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,3.9,,,3.7,4.2,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,16.6,,,15.2,18.1,8762,POINT (-121.4057179 38.84598382),06061021322,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,17.2,,,16.4,18.0,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,18.9,,,18.3,19.5,8762,POINT (-121.4057179 38.84598382),06061021322,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,CA,California,Placer,06061,06061021322,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,35.7,,,31.8,39.8,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,COREM,CrdPrv,Core preventive services for older men +2018,CA,California,Placer,06061,06061021322,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,31.9,,,30.6,33.2,8762,POINT (-121.4057179 38.84598382),06061021322,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.2,,,2.1,2.3,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,8.6,,,8.2,8.9,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.0,,,11.1,13.0,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,CA,California,Placer,06061,06061021322,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,83.4,,,81.6,85.2,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,6.9,,,6.6,7.3,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,CA,California,Placer,06061,06061021322,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,34.4,,,30.3,38.5,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,28.8,,,28.2,29.4,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,CA,California,Placer,06061,06061021322,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,86.2,,,85.7,86.8,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,CA,California,Placer,06061,06061021322,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,78.2,,,75.6,80.3,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,5.9,,,5.7,6.1,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,2.2,,,2.0,2.4,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,STROKE,CrdPrv,Stroke +2018,CA,California,Placer,06061,06061021322,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,72.1,,,69.9,74.0,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,CA,California,Placer,06061,06061021322,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,9.0,,,7.8,10.6,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,11.4,,,9.8,13.2,8762,POINT (-121.4057179 38.84598382),06061021322,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,CA,California,Placer,06061,06061021322,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,67.4,,,66.4,68.4,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,9.4,,,8.7,10.1,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,CA,California,Placer,06061,06061021322,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,70.2,,,69.4,70.9,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2018,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,7.6,,,5.6,10.0,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,12.3,,,11.0,13.6,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,4.2,,,3.8,4.8,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,COPD,CrdPrv,COPD +2019,CA,California,Placer,06061,06061021322,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,18.7,,,18.0,19.4,8762,POINT (-121.4057179 38.84598382),06061021322,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,CA,California,Placer,06061,06061021322,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,71.8,,,69.5,74.1,8762,POINT (-121.4057179 38.84598382),06061021322,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,6.5,,,5.9,7.0,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,COPD,CrdPrv,COPD +2018,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,12.3,,,9.6,15.5,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.6,,,75.4,79.6,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.3,,,9.0,9.6,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,23.6,,,23.0,24.3,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,64.8,,,62.9,67.0,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.9,,,2.8,3.0,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2018,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,84.7,,,83.5,86.0,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,18.7,,,18.3,19.1,2534,POINT (-121.0070559 36.54987144),06069000802,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.5,,,12.9,14.2,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,30.3,,,26.8,34.1,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.4,,,12.7,14.2,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,19.2,,,18.6,19.9,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,7.0,,,6.8,7.2,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,32.7,,,32.1,33.3,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,87.1,,,86.9,87.2,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,CA,California,San Benito,06069,06069000802,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,31.9,,,30.7,32.8,2534,POINT (-121.0070559 36.54987144),06069000802,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.9,,,17.5,20.4,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,70.6,,,69.8,71.2,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,BPMED,CrdPrv,Taking BP Medication +2018,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,29.3,,,26.0,32.8,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,71.1,,,70.5,71.7,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.2,,,3.0,3.4,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,STROKE,CrdPrv,Stroke +2018,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,65.7,,,63.5,67.7,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,22.7,,,21.4,24.1,2534,POINT (-121.0070559 36.54987144),06069000802,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,CA,California,San Benito,06069,06069000802,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,13.2,,,11.9,14.5,2534,POINT (-121.0070559 36.54987144),06069000802,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.2,,,9.8,10.6,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,30.2,,,29.5,30.9,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,5.8,,,5.5,6.1,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,29.2,,,28.4,30.0,2534,POINT (-121.0070559 36.54987144),06069000802,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,CA,California,San Benito,06069,06069000802,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,14.5,,,13.3,15.7,2534,POINT (-121.0070559 36.54987144),06069000802,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,73.5,,,73.1,73.8,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,29.4,,,29.0,29.8,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,23.4,,,20.4,26.5,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,20.7,,,20.5,20.9,7884,POINT (-155.1037996 19.49754656),15001021010,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.4,,,11.9,12.9,4025,POINT (-155.906965 19.51804981),15001021402,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,24.3,,,24.0,24.7,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,64.9,,,63.7,66.2,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,15.9,,,15.6,16.3,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.8,,,10.3,11.3,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,24.9,,,23.8,25.9,4025,POINT (-155.906965 19.51804981),15001021402,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.0,,,3.0,3.1,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,16.0,,,14.9,17.2,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,21.1,,,20.8,21.4,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,11.3,,,11.1,11.5,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,82.3,,,81.3,83.2,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.9,,,2.8,3.0,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,74.5,,,73.9,75.1,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.8,,,5.5,6.0,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,15.6,,,14.7,16.5,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,18.2,,,18.0,18.4,4025,POINT (-155.906965 19.51804981),15001021402,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,20.3,,,17.4,23.4,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,11.5,,,10.9,12.2,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,28.8,,,28.6,29.1,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,10.1,,,9.1,11.3,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,22.6,,,21.1,24.3,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,14.0,,,13.6,14.3,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,72.6,,,72.3,72.9,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,32.6,,,31.6,33.6,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,83.2,,,82.6,83.9,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,8.5,,,7.2,10.1,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,19.8,,,19.1,20.6,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,17.8,,,17.4,18.3,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,29.5,,,29.2,29.8,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,83.8,,,83.7,83.9,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,61.9,,,60.9,63.0,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,5.9,,,5.9,6.1,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,13.3,,,11.7,15.1,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.2,,,12.9,13.6,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.5,,,82.4,82.6,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,23.8,,,23.4,24.2,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.2,,,9.0,9.4,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,11.2,,,10.8,11.5,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,10.4,,,10.0,10.7,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,20.5,,,19.1,22.0,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,79.8,,,79.7,79.9,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,39.4,,,38.2,41.2,3531,POINT (-154.8953489 19.44949565),15001021101,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,29.6,,,29.1,30.2,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,29.8,,,29.4,30.2,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,21.7,,,21.3,22.1,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.4,,,6.2,6.6,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.2,,,3.1,3.3,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,22.6,,,21.7,23.6,7884,POINT (-155.1037996 19.49754656),15001021010,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.7,,,10.5,11.0,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,19.1,,,18.7,19.5,3531,POINT (-154.8953489 19.44949565),15001021101,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,11.4,,,10.6,12.1,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,ACCESS2,CrdPrv,Health Insurance +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,76.2,,,75.3,77.1,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,70.6,,,70.1,71.0,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,25.7,,,24.8,26.6,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,21.4,,,19.4,23.6,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.8,,,9.6,9.9,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,12.5,,,11.9,13.1,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.6,,,3.4,3.7,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,65.5,,,63.5,68.0,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,40.2,,,39.7,40.7,6322,POINT (-155.8112721 20.16059783),15001021800,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.5,,,3.3,3.6,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,4.0,,,3.9,4.2,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,63.8,,,61.3,66.1,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,42.6,,,41.8,43.1,7884,POINT (-155.1037996 19.49754656),15001021010,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,83.1,,,83.0,83.3,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,27.3,,,26.5,28.1,7884,POINT (-155.1037996 19.49754656),15001021010,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,7.4,,,7.1,7.8,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,25.8,,,24.0,27.7,3531,POINT (-154.8953489 19.44949565),15001021101,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,60.7,,,59.6,61.7,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,17.7,,,17.4,17.9,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.0,,,17.1,19.0,4025,POINT (-155.906965 19.51804981),15001021402,HLTHSTAT,GHLTH,CrdPrv,General Health +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.1,,,22.7,25.6,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,COREW,CrdPrv,Core preventive services for older women +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,83.4,,,82.0,84.8,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,74.4,,,73.9,74.9,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,4.2,,,3.9,4.5,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.8,,,22.8,26.9,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,75.9,,,75.6,76.3,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.3,,,17.6,19.0,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,75.4,,,75.2,75.7,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,19.2,,,19.0,19.4,6322,POINT (-155.8112721 20.16059783),15001021800,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.2,,,12.7,13.6,4025,POINT (-155.906965 19.51804981),15001021402,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.0,,,5.8,6.3,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,24.0,,,23.3,24.8,6322,POINT (-155.8112721 20.16059783),15001021800,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,11.2,,,10.9,11.4,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,30.6,,,30.2,31.0,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.7,,,6.6,6.8,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,19.3,,,17.2,21.4,3531,POINT (-154.8953489 19.44949565),15001021101,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,40.2,,,39.3,41.0,4025,POINT (-155.906965 19.51804981),15001021402,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.2,,,9.1,11.4,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,16.7,,,16.2,17.2,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,66.0,,,65.0,67.0,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.2,,,4.9,5.5,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,COPD,CrdPrv,COPD +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,67.4,,,66.4,68.4,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.8,,,6.6,7.0,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,21.1,,,20.6,21.5,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,83.0,,,82.5,83.7,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,22.6,,,22.2,22.9,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,75.9,,,74.6,77.2,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,MAMMOUSE,CrdPrv,Mammography +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,68.3,,,67.0,69.7,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,30.8,,,30.2,31.4,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,74.6,,,73.7,75.4,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.3,,,6.2,6.4,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,27.9,,,27.0,28.8,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,29.8,,,29.4,30.2,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,76.2,,,75.1,77.3,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.7,,,3.6,3.8,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,7.7,,,7.2,8.3,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,18.5,,,17.0,20.1,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,16.8,,,16.1,17.6,6322,POINT (-155.8112721 20.16059783),15001021800,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.9,,,6.7,7.1,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,11.9,,,8.9,15.0,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.6,,,75.5,79.5,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,21.0,,,19.1,23.0,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,16.1,,,15.1,17.0,4025,POINT (-155.906965 19.51804981),15001021402,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,22.9,,,22.1,23.7,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,7.3,,,6.5,8.2,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,15.7,,,14.4,17.0,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,2.8,,,2.7,2.9,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.7,,,6.6,6.9,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,27.0,,,25.1,28.9,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.7,,,10.3,11.1,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,17.2,,,16.7,17.6,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.1,,,8.9,9.3,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,20.4,,,19.8,21.0,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,22.7,,,22.3,23.1,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,61.8,,,60.6,63.0,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,11.7,,,11.0,12.4,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.5,,,3.3,3.6,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,84.8,,,83.9,85.7,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,23.0,,,22.7,23.4,2291,POINT (-156.1446943 20.72704536),15009030100,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,24.3,,,23.7,25.0,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,65.5,,,64.3,66.8,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,38.7,,,38.0,39.4,8652,POINT (-156.3303372 20.82505697),15009030402,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,22.6,,,22.0,23.1,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,22.7,,,21.4,24.2,8652,POINT (-156.3303372 20.82505697),15009030402,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,29.3,,,28.9,29.7,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,27.5,,,26.6,28.4,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,73.0,,,72.4,73.6,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,14.1,,,13.6,14.7,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,24.3,,,23.2,25.5,8403,POINT (-159.5219447 21.94546074),15007040700,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,71.5,,,69.7,73.4,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,14.9,,,13.7,16.2,2544,POINT (-159.4384998 21.90703588),15007040603,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.3,,,6.1,6.4,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,69.2,,,68.1,70.1,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,BPMED,CrdPrv,Taking BP Medication +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,11.2,,,9.4,13.1,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,83.6,,,83.3,83.8,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,70.2,,,69.0,71.4,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,18.6,,,18.2,18.9,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,85.6,,,84.8,86.6,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,6.1,,,5.7,6.6,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,31.0,,,30.5,31.5,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,11.0,,,10.4,11.6,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.9,,,13.4,14.3,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,25.3,,,21.7,29.2,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,COREW,CrdPrv,Core preventive services for older women +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,82.1,,,81.0,83.1,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,15.7,,,14.8,16.7,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,10.8,,,10.3,11.3,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,31.1,,,30.3,31.8,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,12.2,,,12.0,12.5,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,27.0,,,25.3,28.5,2544,POINT (-159.4384998 21.90703588),15007040603,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,29.2,,,28.6,29.8,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,85.0,,,83.8,86.2,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,4.6,,,4.3,5.0,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,77.8,,,77.5,78.1,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,6.2,,,5.1,7.5,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,8.9,,,8.5,9.4,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,25.6,,,23.3,27.9,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.9,,,12.5,13.4,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,67.9,,,66.6,69.3,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.8,,,5.5,6.2,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,20.0,,,19.0,21.0,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHSTAT,GHLTH,CrdPrv,General Health +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,82.4,,,80.9,84.0,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,84.2,,,83.4,85.1,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,25.3,,,24.6,26.0,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,69.0,,,67.5,70.4,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,10.2,,,10.0,10.5,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,12.2,,,11.5,12.8,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,21.3,,,21.0,21.6,5882,POINT (-157.8941068 21.55452063),15003010201,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,37.5,,,36.9,38.1,3139,POINT (-159.4840794 21.90956079),15007040604,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,10.1,,,8.7,11.6,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,8.1,,,6.2,10.2,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.5,,,6.3,6.8,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,19.2,,,18.9,19.6,8403,POINT (-159.5219447 21.94546074),15007040700,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,40.9,,,40.1,41.6,6907,POINT (-156.5426669 20.90996813),15009030800,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,15.5,,,15.0,16.0,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,17.5,,,16.4,18.7,5882,POINT (-157.8941068 21.55452063),15003010201,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,15.2,,,14.9,15.6,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,21.0,,,20.6,21.4,8652,POINT (-156.3303372 20.82505697),15009030402,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,27.0,,,26.6,27.4,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,67.1,,,65.3,68.9,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,26.4,,,25.8,26.9,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,28.1,,,27.6,28.7,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.4,,,6.3,6.5,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,15.9,,,15.6,16.2,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.9,,,82.7,83.0,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.7,,,2.6,2.8,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,21.8,,,21.5,22.1,6907,POINT (-156.5426669 20.90996813),15009030800,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.0,,,5.8,6.3,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.5,,,2.5,2.6,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.9,,,82.9,83.0,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,25.5,,,24.9,25.9,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.7,,,10.4,11.1,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,68.0,,,66.2,69.9,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.3,,,11.6,13.0,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,8.9,,,8.7,9.2,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.0,,,2.8,3.2,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,19.5,,,18.6,20.5,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.4,,,11.6,13.1,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.1,,,3.0,3.2,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,24.8,,,23.8,25.9,5882,POINT (-157.8941068 21.55452063),15003010201,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,26.1,,,22.4,30.0,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,23.1,,,22.6,23.6,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,12.3,,,12.0,12.7,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.0,,,22.0,25.9,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.4,,,6.1,6.7,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,23.7,,,23.0,24.3,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,84.2,,,84.1,84.4,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,15.1,,,14.3,15.8,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.7,,,3.5,3.9,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,79.1,,,78.8,79.4,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,25.0,,,22.9,27.3,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.9,,,82.5,83.3,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,13.6,,,12.6,14.6,8403,POINT (-159.5219447 21.94546074),15007040700,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,28.3,,,27.9,28.7,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.0,,,8.7,9.2,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,22.1,,,20.7,23.7,2453,POINT (-156.2504199 20.86252093),15009030201,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.5,,,76.1,78.9,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,14.7,,,14.2,15.2,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,DEPRESSION,CrdPrv,Depression +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,63.2,,,61.5,64.8,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.8,,,3.7,4.0,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.2,,,10.0,10.5,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,25.4,,,22.7,28.5,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.0,,,81.7,82.4,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,18.5,,,17.9,19.2,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,DEPRESSION,CrdPrv,Depression +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,79.6,,,78.6,80.7,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,11.1,,,10.3,11.9,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,23.5,,,23.0,24.0,2453,POINT (-156.2504199 20.86252093),15009030201,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,18.4,,,17.3,19.6,2291,POINT (-156.1446943 20.72704536),15009030100,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,9.6,,,9.2,10.1,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,26.3,,,23.2,29.7,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,70.6,,,70.0,71.4,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.7,,,9.4,10.0,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.6,,,5.1,6.1,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,COPD,CrdPrv,COPD +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,36.8,,,35.8,37.7,2544,POINT (-159.4384998 21.90703588),15007040603,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,7.9,,,6.2,9.9,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,27.7,,,26.6,28.7,3139,POINT (-159.4840794 21.90956079),15007040604,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,26.2,,,25.7,26.6,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,80.7,,,78.6,82.6,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.1,,,17.1,19.1,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.1,,,2.9,3.2,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,23.8,,,22.7,24.9,2291,POINT (-156.1446943 20.72704536),15009030100,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,8.2,,,6.4,10.4,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,24.8,,,22.9,27.0,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.0,,,12.5,13.5,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,18.5,,,18.3,18.8,3139,POINT (-159.4840794 21.90956079),15007040604,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,9.3,,,9.0,9.5,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.1,,,6.0,6.3,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,69.2,,,68.0,70.5,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,11.4,,,10.4,12.6,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,27.9,,,27.3,28.5,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.6,,,2.5,2.7,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,72.1,,,70.8,73.3,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,23.0,,,21.0,25.0,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,69.9,,,69.4,70.4,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.0,,,11.5,12.5,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,7.0,,,6.8,7.2,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.9,,,2.8,2.9,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,73.2,,,72.9,73.6,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,30.0,,,29.4,30.6,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,77.8,,,77.5,78.2,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,24.5,,,24.2,24.8,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,40.4,,,39.6,41.5,2291,POINT (-156.1446943 20.72704536),15009030100,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,74.1,,,73.6,74.6,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,9.6,,,7.8,11.5,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,23.8,,,23.3,24.1,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,82.1,,,81.2,82.9,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.6,,,82.3,83.0,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,73.2,,,71.2,74.9,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,21.3,,,19.5,23.3,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,33.4,,,32.9,34.0,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,70.7,,,69.9,71.4,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.6,,,12.0,13.1,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,5.5,,,5.3,5.7,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,23.0,,,22.2,23.7,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.7,,,22.1,27.4,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,10.7,,,10.3,11.0,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.5,,,11.8,13.2,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.2,,,12.7,13.8,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,72.2,,,70.8,73.5,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.9,,,2.8,3.0,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,15.2,,,14.1,16.4,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.5,,,5.0,6.1,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.7,,,3.4,3.9,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.3,,,9.3,11.3,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.3,,,3.2,3.4,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.9,,,13.2,14.6,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,23.2,,,22.7,23.8,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,15.6,,,14.8,16.5,3139,POINT (-159.4840794 21.90956079),15007040604,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,25.6,,,24.8,26.4,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,22.6,,,21.7,23.6,6907,POINT (-156.5426669 20.90996813),15009030800,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.6,,,76.1,79.2,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.9,,,5.6,6.2,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.2,,,9.5,11.0,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,4.3,,,4.1,4.6,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,5.0,,,4.7,5.4,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.6,,,9.4,9.8,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,15.3,,,14.0,16.7,8652,POINT (-156.3303372 20.82505697),15009030402,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,4.5,,,4.2,4.8,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,18.5,,,18.0,18.9,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,DEPRESSION,CrdPrv,Depression +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.1,,,21.1,27.2,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,14.5,,,14.2,14.9,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,5.4,,,5.3,5.5,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,9.3,,,8.3,10.2,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,78.5,,,78.0,78.9,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.1,,,2.9,3.3,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,78.5,,,77.1,79.9,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,MAMMOUSE,CrdPrv,Mammography +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,22.7,,,20.4,25.1,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,COREM,CrdPrv,Core preventive services for older men +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,48.2,,,47.6,48.9,5882,POINT (-157.8941068 21.55452063),15003010201,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,16.1,,,15.1,17.0,6907,POINT (-156.5426669 20.90996813),15009030800,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,63.8,,,61.5,65.9,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,74.8,,,74.3,75.4,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.6,,,10.0,11.3,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,17.5,,,15.9,19.2,2453,POINT (-156.2504199 20.86252093),15009030201,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,8.1,,,7.1,9.3,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,5.0,,,4.8,5.3,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,8.7,,,8.5,8.9,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.0,,,12.4,13.5,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,4.8,,,4.5,5.1,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.2,,,16.8,19.5,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,74.2,,,73.8,74.6,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,77.1,,,76.5,77.7,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,BPMED,CrdPrv,Taking BP Medication +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,37.8,,,37.1,38.6,2453,POINT (-156.2504199 20.86252093),15009030201,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.2,,,9.5,11.1,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,29.8,,,29.4,30.1,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,65.4,,,63.1,67.3,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,67.7,,,67.1,68.2,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,76.2,,,75.8,76.7,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,BPMED,CrdPrv,Taking BP Medication +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,79.6,,,77.8,81.3,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,24.3,,,23.8,24.7,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,87.3,,,86.7,88.1,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.1,,,5.8,6.5,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,17.9,,,17.5,18.2,2544,POINT (-159.4384998 21.90703588),15007040603,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,26.0,,,25.6,26.5,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.1,,,75.2,79.0,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.9,,,6.8,7.1,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,31.2,,,30.8,31.8,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,15.1,,,14.5,15.7,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,87.7,,,86.6,88.8,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,4.3,,,4.2,4.4,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,36.4,,,35.6,36.9,8403,POINT (-159.5219447 21.94546074),15007040700,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.8,,,82.7,82.9,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,25.2,,,24.6,25.9,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,27.8,,,25.4,30.3,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.3,,,2.3,2.4,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,25.0,,,23.0,27.0,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,COREM,CrdPrv,Core preventive services for older men +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,64.2,,,62.8,65.7,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/extract.csv new file mode 100644 index 000000000..0dda6ca5f --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/extract.csv @@ -0,0 +1,451 @@ +Year,StateAbbr,StateDesc,CountyName,CountyFIPS,LocationName,DataSource,Category,Measure,Data_Value_Unit,Data_Value_Type,Data_Value,Data_Value_Footnote_Symbol,Data_Value_Footnote,Low_Confidence_Limit,High_Confidence_Limit,TotalPopulation,Geolocation,LocationID,CategoryID,MeasureId,DataValueTypeID,Short_Question_Text +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,36.1000000000,,,35.2000000000,36.8000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,13.1000000000,,,12.6000000000,13.6000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,15.1000000000,,,14.4000000000,15.8000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,82.0000000000,,,80.5000000000,83.4000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,14.2000000000,,,12.8000000000,15.6000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,ACCESS2,CrdPrv,Health Insurance +2018,CA,California,Inyo,6027,6027000800,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,33.1000000000,,,32.1000000000,34.1000000000,3378,POINT (-117.1176757 36.25159703),6027000800,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,86.4000000000,,,86.1000000000,86.7000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,17.2000000000,,,15.8000000000,18.5000000000,3378,POINT (-117.1176757 36.25159703),6027000800,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,8.6000000000,,,8.1000000000,9.1000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,30.2000000000,,,29.4000000000,31.0000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,24.2000000000,,,22.4000000000,25.9000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,74.3000000000,,,73.6000000000,74.9000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.9000000000,,,3.8000000000,4.1000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,16.8000000000,,,15.8000000000,17.7000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2018,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,25.6000000000,,,22.4000000000,29.2000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,COREW,CrdPrv,Core preventive services for older women +2018,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,26.5000000000,,,24.0000000000,29.1000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,72.5000000000,,,71.9000000000,73.0000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,26.9000000000,,,25.3000000000,28.4000000000,3378,POINT (-117.1176757 36.25159703),6027000800,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,35.8000000000,,,35.2000000000,36.5000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,8.3000000000,,,8.0000000000,8.5000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,19.5000000000,,,18.9000000000,20.2000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,9.2000000000,,,8.4000000000,10.0000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,COPD,CrdPrv,COPD +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,16.2000000000,,,15.8000000000,16.6000000000,3378,POINT (-117.1176757 36.25159703),6027000800,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,17.7000000000,,,14.2000000000,21.6000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,10.1000000000,,,9.7000000000,10.4000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2018,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,74.9000000000,,,72.7000000000,77.0000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,MAMMOUSE,CrdPrv,Mammography +2018,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,58.1000000000,,,55.6000000000,59.9000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,CA,California,Inyo,6027,6027000800,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,61.5000000000,,,59.2000000000,63.6000000000,3378,POINT (-117.1176757 36.25159703),6027000800,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,28.5000000000,,,27.8000000000,29.2000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,CA,California,Inyo,6027,6027000800,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,4.6000000000,,,4.3000000000,4.9000000000,3378,POINT (-117.1176757 36.25159703),6027000800,HLTHOUT,STROKE,CrdPrv,Stroke +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,23.0000000000,,,22.2000000000,24.0000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,23.2000000000,,,22.5000000000,23.9000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,3.9000000000,,,3.7000000000,4.2000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,16.6000000000,,,15.2000000000,18.1000000000,8762,POINT (-121.4057179 38.84598382),6061021322,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,17.2000000000,,,16.4000000000,18.0000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,18.9000000000,,,18.3000000000,19.5000000000,8762,POINT (-121.4057179 38.84598382),6061021322,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,CA,California,Placer,6061,6061021322,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,35.7000000000,,,31.8000000000,39.8000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,COREM,CrdPrv,Core preventive services for older men +2018,CA,California,Placer,6061,6061021322,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,31.9000000000,,,30.6000000000,33.2000000000,8762,POINT (-121.4057179 38.84598382),6061021322,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.2000000000,,,2.1000000000,2.3000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,8.6000000000,,,8.2000000000,8.9000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.0000000000,,,11.1000000000,13.0000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,CA,California,Placer,6061,6061021322,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,83.4000000000,,,81.6000000000,85.2000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,6.9000000000,,,6.6000000000,7.3000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,CA,California,Placer,6061,6061021322,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,34.4000000000,,,30.3000000000,38.5000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,28.8000000000,,,28.2000000000,29.4000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,CA,California,Placer,6061,6061021322,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,86.2000000000,,,85.7000000000,86.8000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,CA,California,Placer,6061,6061021322,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,78.2000000000,,,75.6000000000,80.3000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,5.9000000000,,,5.7000000000,6.1000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,2.2000000000,,,2.0000000000,2.4000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,STROKE,CrdPrv,Stroke +2018,CA,California,Placer,6061,6061021322,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,72.1000000000,,,69.9000000000,74.0000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,CA,California,Placer,6061,6061021322,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,9.0000000000,,,7.8000000000,10.6000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,11.4000000000,,,9.8000000000,13.2000000000,8762,POINT (-121.4057179 38.84598382),6061021322,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,CA,California,Placer,6061,6061021322,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,67.4000000000,,,66.4000000000,68.4000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,9.4000000000,,,8.7000000000,10.1000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,CA,California,Placer,6061,6061021322,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,70.2000000000,,,69.4000000000,70.9000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2018,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,7.6000000000,,,5.6000000000,10.0000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,12.3000000000,,,11.0000000000,13.6000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,4.2000000000,,,3.8000000000,4.8000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,COPD,CrdPrv,COPD +2019,CA,California,Placer,6061,6061021322,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,18.7000000000,,,18.0000000000,19.4000000000,8762,POINT (-121.4057179 38.84598382),6061021322,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,CA,California,Placer,6061,6061021322,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,71.8000000000,,,69.5000000000,74.1000000000,8762,POINT (-121.4057179 38.84598382),6061021322,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,6.5000000000,,,5.9000000000,7.0000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,COPD,CrdPrv,COPD +2018,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,12.3000000000,,,9.6000000000,15.5000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.6000000000,,,75.4000000000,79.6000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.3000000000,,,9.0000000000,9.6000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,23.6000000000,,,23.0000000000,24.3000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,64.8000000000,,,62.9000000000,67.0000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.9000000000,,,2.8000000000,3.0000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2018,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,84.7000000000,,,83.5000000000,86.0000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,18.7000000000,,,18.3000000000,19.1000000000,2534,POINT (-121.0070559 36.54987144),6069000802,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.5000000000,,,12.9000000000,14.2000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,30.3000000000,,,26.8000000000,34.1000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.4000000000,,,12.7000000000,14.2000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,19.2000000000,,,18.6000000000,19.9000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,7.0000000000,,,6.8000000000,7.2000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,32.7000000000,,,32.1000000000,33.3000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,87.1000000000,,,86.9000000000,87.2000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,CA,California,San Benito,6069,6069000802,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,31.9000000000,,,30.7000000000,32.8000000000,2534,POINT (-121.0070559 36.54987144),6069000802,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.9000000000,,,17.5000000000,20.4000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,70.6000000000,,,69.8000000000,71.2000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,BPMED,CrdPrv,Taking BP Medication +2018,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,29.3000000000,,,26.0000000000,32.8000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,71.1000000000,,,70.5000000000,71.7000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.2000000000,,,3.0000000000,3.4000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,STROKE,CrdPrv,Stroke +2018,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,65.7000000000,,,63.5000000000,67.7000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,22.7000000000,,,21.4000000000,24.1000000000,2534,POINT (-121.0070559 36.54987144),6069000802,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,CA,California,San Benito,6069,6069000802,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,13.2000000000,,,11.9000000000,14.5000000000,2534,POINT (-121.0070559 36.54987144),6069000802,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.2000000000,,,9.8000000000,10.6000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,30.2000000000,,,29.5000000000,30.9000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,5.8000000000,,,5.5000000000,6.1000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,29.2000000000,,,28.4000000000,30.0000000000,2534,POINT (-121.0070559 36.54987144),6069000802,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,CA,California,San Benito,6069,6069000802,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,14.5000000000,,,13.3000000000,15.7000000000,2534,POINT (-121.0070559 36.54987144),6069000802,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,73.5000000000,,,73.1000000000,73.8000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,29.4000000000,,,29.0000000000,29.8000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,23.4000000000,,,20.4000000000,26.5000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,20.7000000000,,,20.5000000000,20.9000000000,7884,POINT (-155.1037996 19.49754656),15001021010,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.4000000000,,,11.9000000000,12.9000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,24.3000000000,,,24.0000000000,24.7000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,64.9000000000,,,63.7000000000,66.2000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,15.9000000000,,,15.6000000000,16.3000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.8000000000,,,10.3000000000,11.3000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,24.9000000000,,,23.8000000000,25.9000000000,4025,POINT (-155.906965 19.51804981),15001021402,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.0000000000,,,3.0000000000,3.1000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,16.0000000000,,,14.9000000000,17.2000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,21.1000000000,,,20.8000000000,21.4000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,11.3000000000,,,11.1000000000,11.5000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,82.3000000000,,,81.3000000000,83.2000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.9000000000,,,2.8000000000,3.0000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,74.5000000000,,,73.9000000000,75.1000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.8000000000,,,5.5000000000,6.0000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,15.6000000000,,,14.7000000000,16.5000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,18.2000000000,,,18.0000000000,18.4000000000,4025,POINT (-155.906965 19.51804981),15001021402,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,20.3000000000,,,17.4000000000,23.4000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,11.5000000000,,,10.9000000000,12.2000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,28.8000000000,,,28.6000000000,29.1000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,10.1000000000,,,9.1000000000,11.3000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,22.6000000000,,,21.1000000000,24.3000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,14.0000000000,,,13.6000000000,14.3000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,72.6000000000,,,72.3000000000,72.9000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,32.6000000000,,,31.6000000000,33.6000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,83.2000000000,,,82.6000000000,83.9000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,8.5000000000,,,7.2000000000,10.1000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,19.8000000000,,,19.1000000000,20.6000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,17.8000000000,,,17.4000000000,18.3000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,29.5000000000,,,29.2000000000,29.8000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,83.8000000000,,,83.7000000000,83.9000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,61.9000000000,,,60.9000000000,63.0000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,5.9000000000,,,5.9000000000,6.1000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,13.3000000000,,,11.7000000000,15.1000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.2000000000,,,12.9000000000,13.6000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.5000000000,,,82.4000000000,82.6000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,23.8000000000,,,23.4000000000,24.2000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.2000000000,,,9.0000000000,9.4000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,11.2000000000,,,10.8000000000,11.5000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,10.4000000000,,,10.0000000000,10.7000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,20.5000000000,,,19.1000000000,22.0000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,79.8000000000,,,79.7000000000,79.9000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,39.4000000000,,,38.2000000000,41.2000000000,3531,POINT (-154.8953489 19.44949565),15001021101,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,29.6000000000,,,29.1000000000,30.2000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,29.8000000000,,,29.4000000000,30.2000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,21.7000000000,,,21.3000000000,22.1000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.4000000000,,,6.2000000000,6.6000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.2000000000,,,3.1000000000,3.3000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,22.6000000000,,,21.7000000000,23.6000000000,7884,POINT (-155.1037996 19.49754656),15001021010,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.7000000000,,,10.5000000000,11.0000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,19.1000000000,,,18.7000000000,19.5000000000,3531,POINT (-154.8953489 19.44949565),15001021101,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,11.4000000000,,,10.6000000000,12.1000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,ACCESS2,CrdPrv,Health Insurance +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,76.2000000000,,,75.3000000000,77.1000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,70.6000000000,,,70.1000000000,71.0000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,25.7000000000,,,24.8000000000,26.6000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,21.4000000000,,,19.4000000000,23.6000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.8000000000,,,9.6000000000,9.9000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,12.5000000000,,,11.9000000000,13.1000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.6000000000,,,3.4000000000,3.7000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,65.5000000000,,,63.5000000000,68.0000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,40.2000000000,,,39.7000000000,40.7000000000,6322,POINT (-155.8112721 20.16059783),15001021800,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.5000000000,,,3.3000000000,3.6000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,4.0000000000,,,3.9000000000,4.2000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,63.8000000000,,,61.3000000000,66.1000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,42.6000000000,,,41.8000000000,43.1000000000,7884,POINT (-155.1037996 19.49754656),15001021010,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,83.1000000000,,,83.0000000000,83.3000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,27.3000000000,,,26.5000000000,28.1000000000,7884,POINT (-155.1037996 19.49754656),15001021010,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,7.4000000000,,,7.1000000000,7.8000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,25.8000000000,,,24.0000000000,27.7000000000,3531,POINT (-154.8953489 19.44949565),15001021101,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,60.7000000000,,,59.6000000000,61.7000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,17.7000000000,,,17.4000000000,17.9000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.0000000000,,,17.1000000000,19.0000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHSTAT,GHLTH,CrdPrv,General Health +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.1000000000,,,22.7000000000,25.6000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,COREW,CrdPrv,Core preventive services for older women +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,83.4000000000,,,82.0000000000,84.8000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,74.4000000000,,,73.9000000000,74.9000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,4.2000000000,,,3.9000000000,4.5000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.8000000000,,,22.8000000000,26.9000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,75.9000000000,,,75.6000000000,76.3000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.3000000000,,,17.6000000000,19.0000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,75.4000000000,,,75.2000000000,75.7000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,19.2000000000,,,19.0000000000,19.4000000000,6322,POINT (-155.8112721 20.16059783),15001021800,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.2000000000,,,12.7000000000,13.6000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.0000000000,,,5.8000000000,6.3000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,24.0000000000,,,23.3000000000,24.8000000000,6322,POINT (-155.8112721 20.16059783),15001021800,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,11.2000000000,,,10.9000000000,11.4000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,30.6000000000,,,30.2000000000,31.0000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.7000000000,,,6.6000000000,6.8000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,19.3000000000,,,17.2000000000,21.4000000000,3531,POINT (-154.8953489 19.44949565),15001021101,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,40.2000000000,,,39.3000000000,41.0000000000,4025,POINT (-155.906965 19.51804981),15001021402,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.2000000000,,,9.1000000000,11.4000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,16.7000000000,,,16.2000000000,17.2000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,66.0000000000,,,65.0000000000,67.0000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.2000000000,,,4.9000000000,5.5000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,COPD,CrdPrv,COPD +2018,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,67.4000000000,,,66.4000000000,68.4000000000,6322,POINT (-155.8112721 20.16059783),15001021800,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.8000000000,,,6.6000000000,7.0000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,21.1000000000,,,20.6000000000,21.5000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,83.0000000000,,,82.5000000000,83.7000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,22.6000000000,,,22.2000000000,22.9000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,75.9000000000,,,74.6000000000,77.2000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,MAMMOUSE,CrdPrv,Mammography +2018,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,68.3000000000,,,67.0000000000,69.7000000000,4025,POINT (-155.906965 19.51804981),15001021402,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,30.8000000000,,,30.2000000000,31.4000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,74.6000000000,,,73.7000000000,75.4000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.3000000000,,,6.2000000000,6.4000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,27.9000000000,,,27.0000000000,28.8000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,29.8000000000,,,29.4000000000,30.2000000000,4025,POINT (-155.906965 19.51804981),15001021402,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,76.2000000000,,,75.1000000000,77.3000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.7000000000,,,3.6000000000,3.8000000000,6322,POINT (-155.8112721 20.16059783),15001021800,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,7.7000000000,,,7.2000000000,8.3000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2018,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,18.5000000000,,,17.0000000000,20.1000000000,7884,POINT (-155.1037996 19.49754656),15001021010,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Hawaii,15001,15001021800,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,16.8000000000,,,16.1000000000,17.6000000000,6322,POINT (-155.8112721 20.16059783),15001021800,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.9000000000,,,6.7000000000,7.1000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,11.9000000000,,,8.9000000000,15.0000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.6000000000,,,75.5000000000,79.5000000000,3531,POINT (-154.8953489 19.44949565),15001021101,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,21.0000000000,,,19.1000000000,23.0000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Hawaii,15001,15001021402,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,16.1000000000,,,15.1000000000,17.0000000000,4025,POINT (-155.906965 19.51804981),15001021402,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Hawaii,15001,15001021010,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,22.9000000000,,,22.1000000000,23.7000000000,7884,POINT (-155.1037996 19.49754656),15001021010,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Hawaii,15001,15001021101,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,7.3000000000,,,6.5000000000,8.2000000000,3531,POINT (-154.8953489 19.44949565),15001021101,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,15.7000000000,,,14.4000000000,17.0000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,2.8000000000,,,2.7000000000,2.9000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.7000000000,,,6.6000000000,6.9000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,27.0000000000,,,25.1000000000,28.9000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.7000000000,,,10.3000000000,11.1000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,17.2000000000,,,16.7000000000,17.6000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.1000000000,,,8.9000000000,9.3000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,20.4000000000,,,19.8000000000,21.0000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,22.7000000000,,,22.3000000000,23.1000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,61.8000000000,,,60.6000000000,63.0000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,11.7000000000,,,11.0000000000,12.4000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.5000000000,,,3.3000000000,3.6000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,84.8000000000,,,83.9000000000,85.7000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,23.0000000000,,,22.7000000000,23.4000000000,2291,POINT (-156.1446943 20.72704536),15009030100,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,24.3000000000,,,23.7000000000,25.0000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,65.5000000000,,,64.3000000000,66.8000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,38.7000000000,,,38.0000000000,39.4000000000,8652,POINT (-156.3303372 20.82505697),15009030402,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,22.6000000000,,,22.0000000000,23.1000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,22.7000000000,,,21.4000000000,24.2000000000,8652,POINT (-156.3303372 20.82505697),15009030402,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,29.3000000000,,,28.9000000000,29.7000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,27.5000000000,,,26.6000000000,28.4000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,73.0000000000,,,72.4000000000,73.6000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,14.1000000000,,,13.6000000000,14.7000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,24.3000000000,,,23.2000000000,25.5000000000,8403,POINT (-159.5219447 21.94546074),15007040700,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,71.5000000000,,,69.7000000000,73.4000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,14.9000000000,,,13.7000000000,16.2000000000,2544,POINT (-159.4384998 21.90703588),15007040603,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.3000000000,,,6.1000000000,6.4000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,69.2000000000,,,68.1000000000,70.1000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,BPMED,CrdPrv,Taking BP Medication +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,11.2000000000,,,9.4000000000,13.1000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,83.6000000000,,,83.3000000000,83.8000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,70.2000000000,,,69.0000000000,71.4000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,18.6000000000,,,18.2000000000,18.9000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,85.6000000000,,,84.8000000000,86.6000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,6.1000000000,,,5.7000000000,6.6000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,31.0000000000,,,30.5000000000,31.5000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,11.0000000000,,,10.4000000000,11.6000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.9000000000,,,13.4000000000,14.3000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,25.3000000000,,,21.7000000000,29.2000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,COREW,CrdPrv,Core preventive services for older women +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,82.1000000000,,,81.0000000000,83.1000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,15.7000000000,,,14.8000000000,16.7000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,10.8000000000,,,10.3000000000,11.3000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,31.1000000000,,,30.3000000000,31.8000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,12.2000000000,,,12.0000000000,12.5000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,27.0000000000,,,25.3000000000,28.5000000000,2544,POINT (-159.4384998 21.90703588),15007040603,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,29.2000000000,,,28.6000000000,29.8000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,85.0000000000,,,83.8000000000,86.2000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,4.6000000000,,,4.3000000000,5.0000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,77.8000000000,,,77.5000000000,78.1000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,6.2000000000,,,5.1000000000,7.5000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,8.9000000000,,,8.5000000000,9.4000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,25.6000000000,,,23.3000000000,27.9000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.9000000000,,,12.5000000000,13.4000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,67.9000000000,,,66.6000000000,69.3000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.8000000000,,,5.5000000000,6.2000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,20.0000000000,,,19.0000000000,21.0000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHSTAT,GHLTH,CrdPrv,General Health +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,82.4000000000,,,80.9000000000,84.0000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,84.2000000000,,,83.4000000000,85.1000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,25.3000000000,,,24.6000000000,26.0000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,69.0000000000,,,67.5000000000,70.4000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,10.2000000000,,,10.0000000000,10.5000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,12.2000000000,,,11.5000000000,12.8000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,21.3000000000,,,21.0000000000,21.6000000000,5882,POINT (-157.8941068 21.55452063),15003010201,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,37.5000000000,,,36.9000000000,38.1000000000,3139,POINT (-159.4840794 21.90956079),15007040604,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,10.1000000000,,,8.7000000000,11.6000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,8.1000000000,,,6.2000000000,10.2000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.5000000000,,,6.3000000000,6.8000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,19.2000000000,,,18.9000000000,19.6000000000,8403,POINT (-159.5219447 21.94546074),15007040700,RISKBEH,BINGE,CrdPrv,Binge Drinking +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,40.9000000000,,,40.1000000000,41.6000000000,6907,POINT (-156.5426669 20.90996813),15009030800,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,15.5000000000,,,15.0000000000,16.0000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,17.5000000000,,,16.4000000000,18.7000000000,5882,POINT (-157.8941068 21.55452063),15003010201,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,15.2000000000,,,14.9000000000,15.6000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,21.0000000000,,,20.6000000000,21.4000000000,8652,POINT (-156.3303372 20.82505697),15009030402,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,27.0000000000,,,26.6000000000,27.4000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,67.1000000000,,,65.3000000000,68.9000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,26.4000000000,,,25.8000000000,26.9000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,28.1000000000,,,27.6000000000,28.7000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.4000000000,,,6.3000000000,6.5000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,15.9000000000,,,15.6000000000,16.2000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.9000000000,,,82.7000000000,83.0000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.7000000000,,,2.6000000000,2.8000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,21.8000000000,,,21.5000000000,22.1000000000,6907,POINT (-156.5426669 20.90996813),15009030800,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.0000000000,,,5.8000000000,6.3000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.5000000000,,,2.5000000000,2.6000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.9000000000,,,82.9000000000,83.0000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,25.5000000000,,,24.9000000000,25.9000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.7000000000,,,10.4000000000,11.1000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,68.0000000000,,,66.2000000000,69.9000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.3000000000,,,11.6000000000,13.0000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,8.9000000000,,,8.7000000000,9.2000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.0000000000,,,2.8000000000,3.2000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,19.5000000000,,,18.6000000000,20.5000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.4000000000,,,11.6000000000,13.1000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.1000000000,,,3.0000000000,3.2000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,24.8000000000,,,23.8000000000,25.9000000000,5882,POINT (-157.8941068 21.55452063),15003010201,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,26.1000000000,,,22.4000000000,30.0000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,23.1000000000,,,22.6000000000,23.6000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,12.3000000000,,,12.0000000000,12.7000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.0000000000,,,22.0000000000,25.9000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.4000000000,,,6.1000000000,6.7000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,23.7000000000,,,23.0000000000,24.3000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,84.2000000000,,,84.1000000000,84.4000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,15.1000000000,,,14.3000000000,15.8000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.7000000000,,,3.5000000000,3.9000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,79.1000000000,,,78.8000000000,79.4000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,25.0000000000,,,22.9000000000,27.3000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.9000000000,,,82.5000000000,83.3000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,13.6000000000,,,12.6000000000,14.6000000000,8403,POINT (-159.5219447 21.94546074),15007040700,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,28.3000000000,,,27.9000000000,28.7000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.0000000000,,,8.7000000000,9.2000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,22.1000000000,,,20.7000000000,23.7000000000,2453,POINT (-156.2504199 20.86252093),15009030201,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.5000000000,,,76.1000000000,78.9000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,14.7000000000,,,14.2000000000,15.2000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,DEPRESSION,CrdPrv,Depression +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,63.2000000000,,,61.5000000000,64.8000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.8000000000,,,3.7000000000,4.0000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,10.2000000000,,,10.0000000000,10.5000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,25.4000000000,,,22.7000000000,28.5000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.0000000000,,,81.7000000000,82.4000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,18.5000000000,,,17.9000000000,19.2000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,DEPRESSION,CrdPrv,Depression +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,79.6000000000,,,78.6000000000,80.7000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,11.1000000000,,,10.3000000000,11.9000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,23.5000000000,,,23.0000000000,24.0000000000,2453,POINT (-156.2504199 20.86252093),15009030201,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,18.4000000000,,,17.3000000000,19.6000000000,2291,POINT (-156.1446943 20.72704536),15009030100,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,9.6000000000,,,9.2000000000,10.1000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,DIABETES,CrdPrv,Diabetes +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,26.3000000000,,,23.2000000000,29.7000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,70.6000000000,,,70.0000000000,71.4000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.7000000000,,,9.4000000000,10.0000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.6000000000,,,5.1000000000,6.1000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,COPD,CrdPrv,COPD +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,36.8000000000,,,35.8000000000,37.7000000000,2544,POINT (-159.4384998 21.90703588),15007040603,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,7.9000000000,,,6.2000000000,9.9000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,27.7000000000,,,26.6000000000,28.7000000000,3139,POINT (-159.4840794 21.90956079),15007040604,RISKBEH,LPA,CrdPrv,Physical Inactivity +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,26.2000000000,,,25.7000000000,26.6000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,80.7000000000,,,78.6000000000,82.6000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.1000000000,,,17.1000000000,19.1000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.1000000000,,,2.9000000000,3.2000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,23.8000000000,,,22.7000000000,24.9000000000,2291,POINT (-156.1446943 20.72704536),15009030100,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,8.2000000000,,,6.4000000000,10.4000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,24.8000000000,,,22.9000000000,27.0000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.0000000000,,,12.5000000000,13.5000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,18.5000000000,,,18.3000000000,18.8000000000,3139,POINT (-159.4840794 21.90956079),15007040604,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Diagnosed diabetes among adults aged >=18 years,%,Crude prevalence,9.3000000000,,,9.0000000000,9.5000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,DIABETES,CrdPrv,Diabetes +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.1000000000,,,6.0000000000,6.3000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,69.2000000000,,,68.0000000000,70.5000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,11.4000000000,,,10.4000000000,12.6000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,27.9000000000,,,27.3000000000,28.5000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.6000000000,,,2.5000000000,2.7000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,72.1000000000,,,70.8000000000,73.3000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,23.0000000000,,,21.0000000000,25.0000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,69.9000000000,,,69.4000000000,70.4000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.0000000000,,,11.5000000000,12.5000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,7.0000000000,,,6.8000000000,7.2000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.9000000000,,,2.8000000000,2.9000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,73.2000000000,,,72.9000000000,73.6000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,30.0000000000,,,29.4000000000,30.6000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,77.8000000000,,,77.5000000000,78.2000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,24.5000000000,,,24.2000000000,24.8000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,40.4000000000,,,39.6000000000,41.5000000000,2291,POINT (-156.1446943 20.72704536),15009030100,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,74.1000000000,,,73.6000000000,74.6000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,9.6000000000,,,7.8000000000,11.5000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,23.8000000000,,,23.3000000000,24.1000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,82.1000000000,,,81.2000000000,82.9000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.6000000000,,,82.3000000000,83.0000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,73.2000000000,,,71.2000000000,74.9000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,DENTAL,CrdPrv,Dental Visit +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,21.3000000000,,,19.5000000000,23.3000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,33.4000000000,,,32.9000000000,34.0000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,OBESITY,CrdPrv,Obesity +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,70.7000000000,,,69.9000000000,71.4000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.6000000000,,,12.0000000000,13.1000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,5.5000000000,,,5.3000000000,5.7000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,23.0000000000,,,22.2000000000,23.7000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.7000000000,,,22.1000000000,27.4000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,10.7000000000,,,10.3000000000,11.0000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,12.5000000000,,,11.8000000000,13.2000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.2000000000,,,12.7000000000,13.8000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Visits to dentist or dental clinic among adults aged >=18 years,%,Crude prevalence,72.2000000000,,,70.8000000000,73.5000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,DENTAL,CrdPrv,Dental Visit +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.9000000000,,,2.8000000000,3.0000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,15.2000000000,,,14.1000000000,16.4000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.5000000000,,,5.0000000000,6.1000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.7000000000,,,3.4000000000,3.9000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,STROKE,CrdPrv,Stroke +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.3000000000,,,9.3000000000,11.3000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,3.3000000000,,,3.2000000000,3.4000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.9000000000,,,13.2000000000,14.6000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Arthritis among adults aged >=18 years,%,Crude prevalence,23.2000000000,,,22.7000000000,23.8000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,ARTHRITIS,CrdPrv,Arthritis +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,15.6000000000,,,14.8000000000,16.5000000000,3139,POINT (-159.4840794 21.90956079),15007040604,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,25.6000000000,,,24.8000000000,26.4000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Risk Behaviors,No leisure-time physical activity among adults aged >=18 years,%,Crude prevalence,22.6000000000,,,21.7000000000,23.6000000000,6907,POINT (-156.5426669 20.90996813),15009030800,RISKBEH,LPA,CrdPrv,Physical Inactivity +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.6000000000,,,76.1000000000,79.2000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,5.9000000000,,,5.6000000000,6.2000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.2000000000,,,9.5000000000,11.0000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,4.3000000000,,,4.1000000000,4.6000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,5.0000000000,,,4.7000000000,5.4000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,9.6000000000,,,9.4000000000,9.8000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,15.3000000000,,,14.0000000000,16.7000000000,8652,POINT (-156.3303372 20.82505697),15009030402,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Chronic obstructive pulmonary disease among adults aged >=18 years,%,Crude prevalence,4.5000000000,,,4.2000000000,4.8000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,COPD,CrdPrv,COPD +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,18.5000000000,,,18.0000000000,18.9000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,DEPRESSION,CrdPrv,Depression +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,"Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",%,Crude prevalence,24.1000000000,,,21.1000000000,27.2000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,COREW,CrdPrv,Core preventive services for older women +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Depression among adults aged >=18 years,%,Crude prevalence,14.5000000000,,,14.2000000000,14.9000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,DEPRESSION,CrdPrv,Depression +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,5.4000000000,,,5.3000000000,5.5000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,9.3000000000,,,8.3000000000,10.2000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,78.5000000000,,,78.0000000000,78.9000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Outcomes,Stroke among adults aged >=18 years,%,Crude prevalence,3.1000000000,,,2.9000000000,3.3000000000,2453,POINT (-156.2504199 20.86252093),15009030201,HLTHOUT,STROKE,CrdPrv,Stroke +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,78.5000000000,,,77.1000000000,79.9000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,MAMMOUSE,CrdPrv,Mammography +2018,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,22.7000000000,,,20.4000000000,25.1000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,COREM,CrdPrv,Core preventive services for older men +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,48.2000000000,,,47.6000000000,48.9000000000,5882,POINT (-157.8941068 21.55452063),15003010201,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,16.1000000000,,,15.1000000000,17.0000000000,6907,POINT (-156.5426669 20.90996813),15009030800,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,63.8000000000,,,61.5000000000,65.9000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,74.8000000000,,,74.3000000000,75.4000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.6000000000,,,10.0000000000,11.3000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Risk Behaviors,Current smoking among adults aged >=18 years,%,Crude prevalence,17.5000000000,,,15.9000000000,19.2000000000,2453,POINT (-156.2504199 20.86252093),15009030201,RISKBEH,CSMOKING,CrdPrv,Current Smoking +2018,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,All teeth lost among adults aged >=65 years,%,Crude prevalence,8.1000000000,,,7.1000000000,9.3000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,TEETHLOST,CrdPrv,All Teeth Lost +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,5.0000000000,,,4.8000000000,5.3000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Outcomes,Current asthma among adults aged >=18 years,%,Crude prevalence,8.7000000000,,,8.5000000000,8.9000000000,8403,POINT (-159.5219447 21.94546074),15007040700,HLTHOUT,CASTHMA,CrdPrv,Current Asthma +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Status,Physical health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,13.0000000000,,,12.4000000000,13.5000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHSTAT,PHLTH,CrdPrv,Physical Health +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,4.8000000000,,,4.5000000000,5.1000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Status,Fair or poor self-rated health status among adults aged >=18 years,%,Crude prevalence,18.2000000000,,,16.8000000000,19.5000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHSTAT,GHLTH,CrdPrv,General Health +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Prevention,Visits to doctor for routine checkup within the past year among adults aged >=18 years,%,Crude prevalence,74.2000000000,,,73.8000000000,74.6000000000,2291,POINT (-156.1446943 20.72704536),15009030100,PREVENT,CHECKUP,CrdPrv,Annual Checkup +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,77.1000000000,,,76.5000000000,77.7000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,BPMED,CrdPrv,Taking BP Medication +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,37.8000000000,,,37.1000000000,38.6000000000,2453,POINT (-156.2504199 20.86252093),15009030201,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,Current lack of health insurance among adults aged 18-64 years,%,Crude prevalence,10.2000000000,,,9.5000000000,11.1000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,ACCESS2,CrdPrv,Health Insurance +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,%,Crude prevalence,29.8000000000,,,29.4000000000,30.1000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,HIGHCHOL,CrdPrv,High Cholesterol +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,65.4000000000,,,63.1000000000,67.3000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,67.7000000000,,,67.1000000000,68.2000000000,6907,POINT (-156.5426669 20.90996813),15009030800,PREVENT,BPMED,CrdPrv,Taking BP Medication +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,%,Crude prevalence,76.2000000000,,,75.8000000000,76.7000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,BPMED,CrdPrv,Taking BP Medication +2018,HI,Hawaii,Maui,15009,15009030402,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,79.6000000000,,,77.8000000000,81.3000000000,8652,POINT (-156.3303372 20.82505697),15009030402,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,24.3000000000,,,23.8000000000,24.7000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,87.3000000000,,,86.7000000000,88.1000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,6.1000000000,,,5.8000000000,6.5000000000,2544,POINT (-159.4384998 21.90703588),15007040603,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2019,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Health Risk Behaviors,Binge drinking among adults aged >=18 years,%,Crude prevalence,17.9000000000,,,17.5000000000,18.2000000000,2544,POINT (-159.4384998 21.90703588),15007040603,RISKBEH,BINGE,CrdPrv,Binge Drinking +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Health Outcomes,Obesity among adults aged >=18 years,%,Crude prevalence,26.0000000000,,,25.6000000000,26.5000000000,3139,POINT (-159.4840794 21.90956079),15007040604,HLTHOUT,OBESITY,CrdPrv,Obesity +2018,HI,Hawaii,Kauai,15007,15007040603,BRFSS,Prevention,Mammography use among women aged 50-74 years,%,Crude prevalence,77.1000000000,,,75.2000000000,79.0000000000,2544,POINT (-159.4384998 21.90703588),15007040603,PREVENT,MAMMOUSE,CrdPrv,Mammography +2019,HI,Hawaii,Maui,15009,15009030100,BRFSS,Health Outcomes,Cancer (excluding skin cancer) among adults aged >=18 years,%,Crude prevalence,6.9000000000,,,6.8000000000,7.1000000000,2291,POINT (-156.1446943 20.72704536),15009030100,HLTHOUT,CANCER,CrdPrv,Cancer (except skin) +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,31.2000000000,,,30.8000000000,31.8000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2019,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Health Status,Mental health not good for >=14 days among adults aged >=18 years,%,Crude prevalence,15.1000000000,,,14.5000000000,15.7000000000,5882,POINT (-157.8941068 21.55452063),15003010201,HLTHSTAT,MHLTH,CrdPrv,Mental Health +2018,HI,Hawaii,Maui,15009,15009030201,BRFSS,Prevention,Cervical cancer screening among adult women aged 21-65 years,%,Crude prevalence,87.7000000000,,,86.6000000000,88.8000000000,2453,POINT (-156.2504199 20.86252093),15009030201,PREVENT,CERVICAL,CrdPrv,Cervical Cancer Screening +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Coronary heart disease among adults aged >=18 years,%,Crude prevalence,4.3000000000,,,4.2000000000,4.4000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,CHD,CrdPrv,Coronary Heart Disease +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Health Risk Behaviors,Sleeping less than 7 hours among adults aged >=18 years,%,Crude prevalence,36.4000000000,,,35.6000000000,36.9000000000,8403,POINT (-159.5219447 21.94546074),15007040700,RISKBEH,SLEEP,CrdPrv,Sleep <7 hours +2019,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,Cholesterol screening among adults aged >=18 years,%,Crude prevalence,82.8000000000,,,82.7000000000,82.9000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,CHOLSCREEN,CrdPrv,Cholesterol Screening +2019,HI,Hawaii,Maui,15009,15009030402,BRFSS,Health Outcomes,High blood pressure among adults aged >=18 years,%,Crude prevalence,25.2000000000,,,24.6000000000,25.9000000000,8652,POINT (-156.3303372 20.82505697),15009030402,HLTHOUT,BPHIGH,CrdPrv,High Blood Pressure +2018,HI,Hawaii,Kauai,15007,15007040700,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,27.8000000000,,,25.4000000000,30.3000000000,8403,POINT (-159.5219447 21.94546074),15007040700,PREVENT,COREM,CrdPrv,Core preventive services for older men +2019,HI,Hawaii,Maui,15009,15009030800,BRFSS,Health Outcomes,Chronic kidney disease among adults aged >=18 years,%,Crude prevalence,2.3000000000,,,2.3000000000,2.4000000000,6907,POINT (-156.5426669 20.90996813),15009030800,HLTHOUT,KIDNEY,CrdPrv,Chronic Kidney Disease +2018,HI,Hawaii,Honolulu,15003,15003010201,BRFSS,Prevention,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening",%,Crude prevalence,25.0000000000,,,23.0000000000,27.0000000000,5882,POINT (-157.8941068 21.55452063),15003010201,PREVENT,COREM,CrdPrv,Core preventive services for older men +2018,HI,Hawaii,Kauai,15007,15007040604,BRFSS,Prevention,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",%,Crude prevalence,64.2000000000,,,62.8000000000,65.7000000000,3139,POINT (-159.4840794 21.90956079),15007040604,PREVENT,COLON_SCREEN,CrdPrv,Colorectal Cancer Screening diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/output.csv new file mode 100644 index 000000000..f5bc346b4 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Diagnosed diabetes among adults aged greater than or equal to 18 years,Current asthma among adults aged greater than or equal to 18 years,Coronary heart disease among adults aged greater than or equal to 18 years,Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years,Current lack of health insurance among adults aged 18-64 years,Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years +06027000800,13.1000000000,10.1000000000,8.6000000000,8.3000000000,14.2000000000,16.8000000000 +06061021322,6.9000000000,8.6000000000,3.9000000000,5.9000000000,9.0000000000,9.4000000000 +06069000802,10.2000000000,9.3000000000,5.8000000000,7.0000000000,13.2000000000,13.4000000000 +15001021010,11.2000000000,11.3000000000,6.9000000000,5.9000000000,12.5000000000,16.7000000000 +15001021101,11.5000000000,10.4000000000,7.7000000000,6.8000000000,10.2000000000,16.0000000000 +15001021402,11.2000000000,9.2000000000,6.0000000000,6.3000000000,11.4000000000,12.4000000000 +15001021800,10.7000000000,9.8000000000,6.4000000000,6.7000000000,10.8000000000,13.2000000000 +15003010201,10.2000000000,12.2000000000,5.5000000000,6.4000000000,10.2000000000,13.0000000000 +15007040603,12.2000000000,9.0000000000,6.1000000000,7.0000000000,11.4000000000,12.3000000000 +15007040604,12.3000000000,9.6000000000,6.4000000000,6.7000000000,11.7000000000,13.2000000000 +15007040700,10.7000000000,8.7000000000,5.0000000000,6.3000000000,10.2000000000,10.8000000000 +15009030100,10.7000000000,10.2000000000,6.0000000000,6.9000000000,11.1000000000,13.0000000000 +15009030201,8.9000000000,9.7000000000,5.0000000000,6.5000000000,9.3000000000,12.4000000000 +15009030402,9.6000000000,8.9000000000,4.8000000000,6.1000000000,10.3000000000,11.0000000000 +15009030800,9.3000000000,9.1000000000,4.3000000000,5.4000000000,10.6000000000,10.7000000000 diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/transform.csv new file mode 100644 index 000000000..947e039ec --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/data/transform.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,All teeth lost among adults aged >=65 years,Arthritis among adults aged >=18 years,Binge drinking among adults aged >=18 years,Cancer (excluding skin cancer) among adults aged greater than or equal to 18 years,Cervical cancer screening among adult women aged 21-65 years,Cholesterol screening among adults aged >=18 years,Chronic kidney disease among adults aged >=18 years,Chronic obstructive pulmonary disease among adults aged >=18 years,Coronary heart disease among adults aged greater than or equal to 18 years,Current asthma among adults aged greater than or equal to 18 years,Current lack of health insurance among adults aged 18-64 years,Current smoking among adults aged >=18 years,Depression among adults aged >=18 years,Diagnosed diabetes among adults aged greater than or equal to 18 years,Fair or poor self-rated health status among adults aged >=18 years,"Fecal occult blood test, sigmoidoscopy, or colonoscopy among adults aged 50-75 years",High blood pressure among adults aged >=18 years,High cholesterol among adults aged >=18 years who have been screened in the past 5 years,Mammography use among women aged 50-74 years,Mental health not good for >=14 days among adults aged >=18 years,No leisure-time physical activity among adults aged >=18 years,Obesity among adults aged >=18 years,"Older adult men aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening","Older adult women aged >=65 years who are up to date on a core set of clinical preventive services: Flu shot past year, PPV shot ever, Colorectal cancer screening, and Mammogram past 2 years",Physical health not good for greater than or equal to 14 days among adults aged greater than or equal to 18 years,Sleeping less than 7 hours among adults aged >=18 years,Stroke among adults aged >=18 years,Taking medicine for high blood pressure control among adults aged >=18 years with high blood pressure,Visits to dentist or dental clinic among adults aged >=18 years,Visits to doctor for routine checkup within the past year among adults aged >=18 years +06027000800,17.7000000000,28.5000000000,16.2000000000,8.3000000000,82.0000000000,86.4000000000,3.9000000000,9.2000000000,8.6000000000,10.1000000000,14.2000000000,17.2000000000,19.5000000000,13.1000000000,24.2000000000,61.5000000000,36.1000000000,35.8000000000,74.9000000000,15.1000000000,26.9000000000,30.2000000000,26.5000000000,25.6000000000,16.8000000000,33.1000000000,4.6000000000,74.3000000000,58.1000000000,72.5000000000 +06061021322,7.6000000000,18.7000000000,18.9000000000,5.9000000000,83.4000000000,86.2000000000,2.2000000000,4.2000000000,3.9000000000,8.6000000000,9.0000000000,11.4000000000,17.2000000000,6.9000000000,12.3000000000,72.1000000000,23.2000000000,28.8000000000,78.2000000000,12.0000000000,16.6000000000,23.0000000000,35.7000000000,34.4000000000,9.4000000000,31.9000000000,2.2000000000,67.4000000000,71.8000000000,70.2000000000 +06069000802,12.3000000000,23.6000000000,18.7000000000,7.0000000000,84.7000000000,87.1000000000,2.9000000000,6.5000000000,5.8000000000,9.3000000000,13.2000000000,14.5000000000,19.2000000000,10.2000000000,18.9000000000,65.7000000000,30.2000000000,32.7000000000,77.6000000000,13.5000000000,22.7000000000,29.2000000000,30.3000000000,29.3000000000,13.4000000000,31.9000000000,3.2000000000,70.6000000000,64.8000000000,71.1000000000 +15001021010,13.3000000000,23.8000000000,20.7000000000,5.9000000000,83.0000000000,79.8000000000,3.2000000000,7.4000000000,6.9000000000,11.3000000000,12.5000000000,22.6000000000,21.1000000000,11.2000000000,22.9000000000,60.7000000000,30.6000000000,28.8000000000,76.2000000000,17.8000000000,27.3000000000,29.4000000000,18.5000000000,22.6000000000,16.7000000000,42.6000000000,4.0000000000,70.6000000000,61.9000000000,72.6000000000 +15001021101,11.9000000000,25.7000000000,19.1000000000,6.8000000000,83.4000000000,82.5000000000,3.5000000000,7.3000000000,7.7000000000,10.4000000000,10.2000000000,19.3000000000,19.8000000000,11.5000000000,21.0000000000,63.8000000000,32.6000000000,30.8000000000,77.6000000000,15.6000000000,25.8000000000,27.9000000000,20.3000000000,23.4000000000,16.0000000000,39.4000000000,4.2000000000,74.6000000000,65.5000000000,74.5000000000 +15001021402,8.5000000000,21.1000000000,18.2000000000,6.3000000000,82.3000000000,83.8000000000,2.9000000000,5.2000000000,6.0000000000,9.2000000000,11.4000000000,16.1000000000,15.9000000000,11.2000000000,18.0000000000,64.9000000000,29.6000000000,29.8000000000,75.9000000000,13.2000000000,24.9000000000,21.7000000000,21.4000000000,24.8000000000,12.4000000000,40.2000000000,3.6000000000,74.4000000000,68.3000000000,75.9000000000 +15001021800,10.1000000000,22.6000000000,19.2000000000,6.7000000000,83.2000000000,83.1000000000,3.0000000000,5.8000000000,6.4000000000,9.8000000000,10.8000000000,16.8000000000,17.7000000000,10.7000000000,18.3000000000,66.0000000000,29.8000000000,29.5000000000,76.2000000000,14.0000000000,24.0000000000,24.3000000000,20.5000000000,24.1000000000,13.2000000000,40.2000000000,3.7000000000,73.5000000000,67.4000000000,75.4000000000 +15003010201,10.1000000000,22.7000000000,21.3000000000,6.4000000000,87.3000000000,82.9000000000,2.9000000000,5.9000000000,5.5000000000,12.2000000000,10.2000000000,17.5000000000,18.5000000000,10.2000000000,20.0000000000,69.2000000000,31.2000000000,29.8000000000,82.1000000000,15.1000000000,24.8000000000,33.4000000000,25.0000000000,27.0000000000,13.0000000000,48.2000000000,3.5000000000,69.9000000000,72.1000000000,79.1000000000 +15007040603,8.1000000000,25.3000000000,17.9000000000,7.0000000000,82.4000000000,83.6000000000,3.1000000000,5.6000000000,6.1000000000,9.0000000000,11.4000000000,14.9000000000,14.7000000000,12.2000000000,18.2000000000,67.1000000000,31.1000000000,30.0000000000,77.1000000000,12.6000000000,27.0000000000,24.3000000000,26.3000000000,24.1000000000,12.3000000000,36.8000000000,3.7000000000,77.1000000000,68.0000000000,78.5000000000 +15007040604,9.6000000000,25.5000000000,18.5000000000,6.7000000000,82.1000000000,82.8000000000,3.3000000000,5.8000000000,6.4000000000,9.6000000000,11.7000000000,15.6000000000,15.9000000000,12.3000000000,19.5000000000,64.2000000000,31.0000000000,29.3000000000,77.5000000000,13.9000000000,27.7000000000,26.0000000000,25.0000000000,21.3000000000,13.2000000000,37.5000000000,3.8000000000,76.2000000000,65.5000000000,77.8000000000 +15007040700,6.2000000000,22.6000000000,19.2000000000,6.3000000000,84.8000000000,84.2000000000,2.7000000000,4.5000000000,5.0000000000,8.7000000000,10.2000000000,13.6000000000,14.5000000000,10.7000000000,15.7000000000,69.0000000000,27.9000000000,28.3000000000,77.6000000000,12.0000000000,24.3000000000,23.1000000000,27.8000000000,25.6000000000,10.8000000000,36.4000000000,3.1000000000,74.8000000000,72.2000000000,77.8000000000 +15009030100,11.2000000000,23.2000000000,23.0000000000,6.9000000000,85.6000000000,82.6000000000,2.9000000000,6.1000000000,6.0000000000,10.2000000000,11.1000000000,18.4000000000,17.2000000000,10.7000000000,18.1000000000,63.2000000000,28.1000000000,27.0000000000,78.5000000000,14.1000000000,23.8000000000,29.2000000000,22.7000000000,23.0000000000,13.0000000000,40.4000000000,3.7000000000,70.6000000000,67.9000000000,74.2000000000 +15009030201,8.2000000000,23.0000000000,23.5000000000,6.5000000000,87.7000000000,82.9000000000,2.6000000000,5.5000000000,5.0000000000,9.7000000000,9.3000000000,17.5000000000,18.5000000000,8.9000000000,15.7000000000,65.4000000000,25.6000000000,26.4000000000,80.7000000000,13.9000000000,22.1000000000,27.5000000000,26.1000000000,25.3000000000,12.4000000000,37.8000000000,3.1000000000,69.2000000000,73.2000000000,73.0000000000 +15009030402,7.9000000000,20.4000000000,21.0000000000,6.1000000000,85.0000000000,82.9000000000,2.5000000000,4.6000000000,4.8000000000,8.9000000000,10.3000000000,15.3000000000,15.5000000000,9.6000000000,15.2000000000,63.8000000000,25.2000000000,26.2000000000,79.6000000000,12.5000000000,22.7000000000,23.7000000000,25.4000000000,24.7000000000,11.0000000000,38.7000000000,3.0000000000,70.7000000000,71.5000000000,74.1000000000 +15009030800,8.1000000000,18.6000000000,21.8000000000,5.4000000000,84.2000000000,82.0000000000,2.3000000000,4.3000000000,4.3000000000,9.1000000000,10.6000000000,16.1000000000,15.2000000000,9.3000000000,15.1000000000,61.8000000000,23.8000000000,24.5000000000,79.6000000000,12.9000000000,22.6000000000,24.3000000000,24.8000000000,24.0000000000,10.7000000000,40.9000000000,2.8000000000,67.7000000000,70.2000000000,73.2000000000 diff --git a/data/data-pipeline/data_pipeline/tests/sources/cdc_places/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/test_etl.py new file mode 100644 index 000000000..133fef312 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/cdc_places/test_etl.py @@ -0,0 +1,26 @@ +import pathlib + +from data_pipeline.etl.sources.cdc_places.etl import CDCPlacesETL +from data_pipeline.tests.sources.example.test_etl import TestETL + + +class TestCDCPlacesETL(TestETL): + _ETL_CLASS = CDCPlacesETL + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "census_tract.csv" + _SAMPLE_DATA_ZIP_FILE_NAME = None + _EXTRACT_TMP_FOLDER_NAME = "cdc_places" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) + + def test_sample_data_exists(self): + """This will test that the sample data exists where it's supposed to as it's supposed to + As per conversation with Jorge, here we can *just* test that the zip file exists. + """ + assert (self._SAMPLE_DATA_PATH / self._SAMPLE_DATA_FILE_NAME).exists() diff --git a/data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/data/coi.zip b/data/data-pipeline/data_pipeline/tests/sources/child_opportunity_index/data/coi.zip new file mode 100644 index 0000000000000000000000000000000000000000..a5289deb1e6f4f324c09c9887ccfcedb86fb5c2a GIT binary patch literal 5858 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 + --snapshot-update + """ + + _ETL_CLASS = ChildOpportunityIndex + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "raw.csv" + _SAMPLE_DATA_ZIP_FILE_NAME = "coi.zip" + _EXTRACT_TMP_FOLDER_NAME = "ChildOpportunityIndex" + _EXTRACT_CSV_FILE_NAME = "raw.csv" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) + + def test_init(self, mock_etl, mock_paths): + """Tests that the ChildOpportunityIndexETL class was initialized + correctly. + """ + + etl = ChildOpportunityIndex() + data_path, _ = mock_paths + assert etl.DATA_PATH == data_path + assert etl.COLUMNS_TO_KEEP == [ + "GEOID10_TRACT", + "Summer days above 90F", + "Percent low access to healthy food", + "Percent impenetrable surface areas", + "Third grade reading proficiency", + ] + assert etl.GEOID_FIELD_NAME == "GEOID10" + assert etl.GEOID_TRACT_FIELD_NAME == "GEOID10_TRACT" + assert etl.TRACT_INPUT_COLUMN_NAME == "geoid" + assert etl.EXTREME_HEAT_INPUT_FIELD == "HE_HEAT" + assert etl.HEALTHY_FOOD_INPUT_FIELD == "HE_FOOD" + assert etl.IMPENETRABLE_SURFACES_INPUT_FIELD == "HE_GREEN" + assert etl.READING_INPUT_FIELD == "ED_READING" + + def test_get_output_file_path(self, mock_etl, mock_paths): + """Tests the right file name is returned.""" + etl = self._get_instance_of_etl_class() + data_path, tmp_path = mock_paths + + output_file_path = etl._get_output_file_path() + expected_output_file_path = ( + data_path / "dataset" / "child_opportunity_index" / "usa.csv" + ) + assert output_file_path == expected_output_file_path diff --git a/data/data-pipeline/data_pipeline/tests/sources/data/us.geojson b/data/data-pipeline/data_pipeline/tests/sources/data/us.geojson new file mode 100644 index 000000000..67e236148 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/data/us.geojson @@ -0,0 +1,10 @@ +{ +"type": "FeatureCollection", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "STATEFP10": "06", "COUNTYFP10": "037", "TRACTCE10": "207400", "GEOID10_TRACT": "06037207400", "NAME10": "2074", "NAMELSAD10": "Census Tract 2074", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 862884, "AWATER10": 6531, "INTPTLAT10": "+34.0561941", "INTPTLON10": "-118.2466502" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -118.25165, 34.057561 ], [ -118.251856, 34.057693 ], [ -118.251973, 34.057769 ], [ -118.253069, 34.058478 ], [ -118.253333, 34.058635 ], [ -118.253175, 34.058788 ], [ -118.252985, 34.058967 ], [ -118.252934, 34.059012 ], [ -118.252592, 34.059315 ], [ -118.252391, 34.059485 ], [ -118.252131, 34.059695 ], [ -118.251474, 34.060224 ], [ -118.251082, 34.060543 ], [ -118.250554, 34.060988 ], [ -118.249996, 34.061475 ], [ -118.248871, 34.06247 ], [ -118.248822, 34.062513 ], [ -118.248754, 34.062434 ], [ -118.247476, 34.060942 ], [ -118.247368, 34.060818 ], [ -118.247013, 34.06041 ], [ -118.24698, 34.060373 ], [ -118.246769, 34.060147 ], [ -118.246548, 34.059926 ], [ -118.246318, 34.059712 ], [ -118.246079, 34.059505 ], [ -118.245633, 34.059146 ], [ -118.245532, 34.059066 ], [ -118.245262, 34.058851 ], [ -118.244952, 34.058609 ], [ -118.244638, 34.05837 ], [ -118.244425, 34.058215 ], [ -118.244007, 34.057917 ], [ -118.243393, 34.057507 ], [ -118.243099, 34.057319 ], [ -118.24245, 34.056913 ], [ -118.241377, 34.056241 ], [ -118.241204, 34.056133 ], [ -118.240288, 34.055562 ], [ -118.239443, 34.055035 ], [ -118.238512, 34.054454 ], [ -118.238227, 34.054289 ], [ -118.238023, 34.054178 ], [ -118.237887, 34.054108 ], [ -118.2379, 34.054002 ], [ -118.237936, 34.053725 ], [ -118.237945, 34.053651 ], [ -118.237976, 34.052819 ], [ -118.238039, 34.05107 ], [ -118.239698, 34.052451 ], [ -118.239867, 34.051906 ], [ -118.240115, 34.0514 ], [ -118.240172, 34.051284 ], [ -118.240271, 34.051083 ], [ -118.240856, 34.050405 ], [ -118.242151, 34.051344 ], [ -118.242382, 34.051511 ], [ -118.24334, 34.050273 ], [ -118.244519, 34.051003 ], [ -118.245067, 34.051354 ], [ -118.245606, 34.051703 ], [ -118.246677, 34.052395 ], [ -118.247754, 34.053091 ], [ -118.248466, 34.053552 ], [ -118.248818, 34.05378 ], [ -118.249888, 34.054472 ], [ -118.25095, 34.055158 ], [ -118.251081, 34.055241 ], [ -118.250895, 34.055373 ], [ -118.250712, 34.05553 ], [ -118.250052, 34.056232 ], [ -118.249838, 34.056391 ], [ -118.25165, 34.057561 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "13", "COUNTYFP10": "121", "TRACTCE10": "011900", "GEOID10_TRACT": "13121011900", "NAME10": "119", "NAMELSAD10": "Census Tract 119", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 1530847, "AWATER10": 0, "INTPTLAT10": "+33.7539369", "INTPTLON10": "-084.3826910" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -84.393243, 33.754604 ], [ -84.393434, 33.754711 ], [ -84.393836, 33.75492 ], [ -84.39376, 33.755141 ], [ -84.394037, 33.756265 ], [ -84.394411, 33.757235 ], [ -84.394982, 33.758491 ], [ -84.394325, 33.758955 ], [ -84.393831, 33.759308 ], [ -84.393459, 33.759573 ], [ -84.393366, 33.759627 ], [ -84.393273, 33.759663 ], [ -84.393187, 33.759685 ], [ -84.392783, 33.75973 ], [ -84.392071, 33.759729 ], [ -84.390564, 33.759722 ], [ -84.389801, 33.759719 ], [ -84.389083, 33.759716 ], [ -84.387584, 33.759709 ], [ -84.387539, 33.759708 ], [ -84.386062, 33.759685 ], [ -84.384198, 33.759666 ], [ -84.38422, 33.758392 ], [ -84.384242, 33.757117 ], [ -84.384268, 33.755571 ], [ -84.384283, 33.75473 ], [ -84.384287, 33.754521 ], [ -84.384305, 33.754462 ], [ -84.382272, 33.754439 ], [ -84.381907, 33.754434 ], [ -84.380277, 33.754417 ], [ -84.3802, 33.754414 ], [ -84.379455, 33.754397 ], [ -84.379157, 33.75439 ], [ -84.378673, 33.754379 ], [ -84.378332, 33.75438 ], [ -84.378297, 33.75437 ], [ -84.378044, 33.754368 ], [ -84.377363, 33.754378 ], [ -84.377298, 33.754379 ], [ -84.377099, 33.754376 ], [ -84.376604, 33.754371 ], [ -84.375544, 33.754355 ], [ -84.374384, 33.754337 ], [ -84.37336, 33.754322 ], [ -84.372422, 33.754309 ], [ -84.37215, 33.754305 ], [ -84.371286, 33.754295 ], [ -84.369769, 33.754278 ], [ -84.368828, 33.754282 ], [ -84.368562, 33.754283 ], [ -84.368027, 33.754285 ], [ -84.367498, 33.754287 ], [ -84.366551, 33.75429 ], [ -84.366444, 33.754291 ], [ -84.365863, 33.754297 ], [ -84.365599, 33.754312 ], [ -84.365617, 33.754242 ], [ -84.365791, 33.753851 ], [ -84.366268, 33.75328 ], [ -84.366323, 33.753215 ], [ -84.3666, 33.752984 ], [ -84.366842, 33.752754 ], [ -84.366935, 33.752666 ], [ -84.36698, 33.752629 ], [ -84.367086, 33.752523 ], [ -84.367248, 33.75237 ], [ -84.368362, 33.752078 ], [ -84.369133, 33.751836 ], [ -84.369871, 33.751612 ], [ -84.370491, 33.751434 ], [ -84.370976, 33.751284 ], [ -84.37217, 33.750916 ], [ -84.373348, 33.750533 ], [ -84.374128, 33.750253 ], [ -84.375093, 33.749926 ], [ -84.376294, 33.749564 ], [ -84.376636, 33.749461 ], [ -84.376945, 33.749372 ], [ -84.37768, 33.749186 ], [ -84.378404, 33.74904 ], [ -84.378835, 33.748964 ], [ -84.379047, 33.748935 ], [ -84.379541, 33.748892 ], [ -84.379663, 33.748881 ], [ -84.380133, 33.748853 ], [ -84.380525, 33.748853 ], [ -84.380758, 33.748868 ], [ -84.381016, 33.748884 ], [ -84.381506, 33.748923 ], [ -84.382132, 33.748903 ], [ -84.38251, 33.748886 ], [ -84.382727, 33.748877 ], [ -84.383153, 33.748907 ], [ -84.383313, 33.748923 ], [ -84.383493, 33.748941 ], [ -84.383746, 33.749 ], [ -84.383896, 33.749035 ], [ -84.384064, 33.749089 ], [ -84.384277, 33.749158 ], [ -84.384328, 33.74918 ], [ -84.384564, 33.749282 ], [ -84.38487, 33.749449 ], [ -84.385214, 33.749686 ], [ -84.385654, 33.749989 ], [ -84.386389, 33.750471 ], [ -84.387563, 33.75124 ], [ -84.387886, 33.751452 ], [ -84.388865, 33.752093 ], [ -84.389895, 33.752768 ], [ -84.390844, 33.753391 ], [ -84.39132, 33.753703 ], [ -84.391525, 33.753837 ], [ -84.392156, 33.754065 ], [ -84.392373, 33.754172 ], [ -84.392834, 33.754399 ], [ -84.39318, 33.754569 ], [ -84.393243, 33.754604 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "25", "COUNTYFP10": "025", "TRACTCE10": "030300", "GEOID10_TRACT": "25025030300", "NAME10": "303", "NAMELSAD10": "Census Tract 303", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 691377, "AWATER10": 234496, "INTPTLAT10": "+42.3600562", "INTPTLON10": "-071.0532861" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -71.045566, 42.359733 ], [ -71.049073, 42.354939 ], [ -71.049333, 42.354585 ], [ -71.049396, 42.354498 ], [ -71.049595, 42.354497 ], [ -71.050434, 42.354846 ], [ -71.050471, 42.354898 ], [ -71.050892, 42.35506 ], [ -71.05106, 42.355131 ], [ -71.050981, 42.355309 ], [ -71.050889, 42.355475 ], [ -71.050856, 42.355555 ], [ -71.050762, 42.356011 ], [ -71.050749, 42.356124 ], [ -71.050816, 42.35664 ], [ -71.051009, 42.356937 ], [ -71.051198, 42.357241 ], [ -71.05137, 42.357474 ], [ -71.051411, 42.357539 ], [ -71.051508, 42.357692 ], [ -71.051613, 42.357921 ], [ -71.051784, 42.358295 ], [ -71.051941, 42.358637 ], [ -71.051976, 42.358699 ], [ -71.052005, 42.358693 ], [ -71.052065, 42.358682 ], [ -71.052158, 42.358666 ], [ -71.052294, 42.358646 ], [ -71.052749, 42.358576 ], [ -71.053192, 42.358496 ], [ -71.053248, 42.358478 ], [ -71.053321, 42.358455 ], [ -71.053518, 42.358356 ], [ -71.053765, 42.358183 ], [ -71.053961, 42.358012 ], [ -71.054265, 42.357737 ], [ -71.05437, 42.357662 ], [ -71.054524, 42.357551 ], [ -71.054848, 42.35735 ], [ -71.05502, 42.357245 ], [ -71.05519, 42.357143 ], [ -71.055539, 42.356971 ], [ -71.055759, 42.356913 ], [ -71.056292, 42.356874 ], [ -71.05659, 42.356852 ], [ -71.057191, 42.356822 ], [ -71.05771, 42.356777 ], [ -71.057993, 42.356789 ], [ -71.058235, 42.356832 ], [ -71.058737, 42.356988 ], [ -71.058561, 42.357161 ], [ -71.05829, 42.35741 ], [ -71.058759, 42.357577 ], [ -71.059299, 42.357766 ], [ -71.059613, 42.357863 ], [ -71.060354, 42.358092 ], [ -71.061259, 42.358283 ], [ -71.06151, 42.358336 ], [ -71.061714, 42.358318 ], [ -71.061977, 42.358246 ], [ -71.062375, 42.358095 ], [ -71.062642, 42.357977 ], [ -71.062727, 42.358311 ], [ -71.062817, 42.358665 ], [ -71.062823, 42.358714 ], [ -71.062846, 42.358889 ], [ -71.062862, 42.359204 ], [ -71.062875, 42.359483 ], [ -71.062864, 42.36009 ], [ -71.062911, 42.361229 ], [ -71.062762, 42.361642 ], [ -71.062626, 42.361842 ], [ -71.062499, 42.362001 ], [ -71.062354, 42.362143 ], [ -71.062268, 42.362205 ], [ -71.062195, 42.362258 ], [ -71.061856, 42.36243 ], [ -71.061669, 42.362493 ], [ -71.061223, 42.362633 ], [ -71.060878, 42.362731 ], [ -71.060042, 42.362967 ], [ -71.059606, 42.36307 ], [ -71.059491, 42.363104 ], [ -71.058769, 42.363318 ], [ -71.058559, 42.363381 ], [ -71.0584, 42.363412 ], [ -71.058216, 42.363431 ], [ -71.058037, 42.363481 ], [ -71.057979, 42.363511 ], [ -71.057882, 42.363546 ], [ -71.057776, 42.363542 ], [ -71.057709, 42.363543 ], [ -71.05757, 42.36342 ], [ -71.057332, 42.36318 ], [ -71.057051, 42.362987 ], [ -71.056227, 42.362386 ], [ -71.056176, 42.362357 ], [ -71.05525, 42.36183 ], [ -71.055228, 42.361869 ], [ -71.055183, 42.361919 ], [ -71.055187, 42.361941 ], [ -71.055159, 42.361989 ], [ -71.055123, 42.362045 ], [ -71.055026, 42.362149 ], [ -71.05489, 42.362265 ], [ -71.054661, 42.36238 ], [ -71.054626, 42.362404 ], [ -71.054581, 42.362434 ], [ -71.054494, 42.362511 ], [ -71.054407, 42.362634 ], [ -71.054311, 42.362802 ], [ -71.054296, 42.36283 ], [ -71.05419, 42.362973 ], [ -71.054061, 42.363108 ], [ -71.053826, 42.363303 ], [ -71.053709, 42.363367 ], [ -71.053585, 42.363405 ], [ -71.053549, 42.363416 ], [ -71.053199, 42.363474 ], [ -71.053043, 42.363495 ], [ -71.052769, 42.36353 ], [ -71.05246, 42.363586 ], [ -71.05224, 42.363626 ], [ -71.052061, 42.36371 ], [ -71.051895, 42.363501 ], [ -71.051661, 42.363192 ], [ -71.051647, 42.36311 ], [ -71.051414, 42.363386 ], [ -71.05135, 42.36347 ], [ -71.051195, 42.36372 ], [ -71.051115, 42.363979 ], [ -71.051088, 42.364065 ], [ -71.05109, 42.364175 ], [ -71.0496, 42.364044 ], [ -71.049409, 42.364045 ], [ -71.046389, 42.363935 ], [ -71.045985, 42.362294 ], [ -71.045918, 42.361164 ], [ -71.0455, 42.359825 ], [ -71.045566, 42.359733 ] ] ] } }, +{ "type": "Feature", "properties": { "STATEFP10": "28", "COUNTYFP10": "047", "TRACTCE10": "003800", "GEOID10_TRACT": "28047003800", "NAME10": "38", "NAMELSAD10": "Census Tract 38", "MTFCC10": "G5020", "FUNCSTAT10": "S", "ALAND10": 2304789, "AWATER10": 3104014, "INTPTLAT10": "+30.3577592", "INTPTLON10": "-089.1130708" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -89.101237, 30.347697 ], [ -89.117538, 30.342797 ], [ -89.124278, 30.343971 ], [ -89.124335, 30.353194 ], [ -89.124336, 30.353446 ], [ -89.124338, 30.353697 ], [ -89.124555, 30.354007 ], [ -89.124595, 30.353991 ], [ -89.124991, 30.354701 ], [ -89.125114, 30.354921 ], [ -89.125679, 30.355921 ], [ -89.127359, 30.358407 ], [ -89.127508, 30.358574 ], [ -89.127077, 30.35871 ], [ -89.124073, 30.359753 ], [ -89.12318, 30.360048 ], [ -89.122255, 30.360367 ], [ -89.121353, 30.360674 ], [ -89.120354, 30.36101 ], [ -89.117854, 30.36182 ], [ -89.116359, 30.362304 ], [ -89.11492, 30.362785 ], [ -89.113579, 30.363225 ], [ -89.112509, 30.363583 ], [ -89.11135, 30.363984 ], [ -89.11121, 30.364005 ], [ -89.110283, 30.364326 ], [ -89.109295, 30.364647 ], [ -89.108217, 30.365012 ], [ -89.107137, 30.365376 ], [ -89.105342, 30.365959 ], [ -89.102779, 30.36682 ], [ -89.101505, 30.367176 ], [ -89.100242, 30.367636 ], [ -89.098984, 30.368 ], [ -89.097738, 30.368327 ], [ -89.097572, 30.368365 ], [ -89.096742, 30.368555 ], [ -89.096574, 30.368614 ], [ -89.095317, 30.368959 ], [ -89.095334, 30.371183 ], [ -89.095338, 30.371317 ], [ -89.093988, 30.371319 ], [ -89.09397, 30.371327 ], [ -89.093034, 30.371329 ], [ -89.092869, 30.371322 ], [ -89.09153, 30.371326 ], [ -89.090312, 30.371327 ], [ -89.090136, 30.371327 ], [ -89.088809, 30.371327 ], [ -89.088797, 30.372373 ], [ -89.087557, 30.372377 ], [ -89.087432, 30.372371 ], [ -89.087429, 30.371074 ], [ -89.087429, 30.370979 ], [ -89.087431, 30.36924 ], [ -89.087424, 30.368559 ], [ -89.087394, 30.368228 ], [ -89.087398, 30.3681 ], [ -89.087408, 30.367653 ], [ -89.087405, 30.367552 ], [ -89.088805, 30.367086 ], [ -89.090137, 30.366643 ], [ -89.090263, 30.366603 ], [ -89.091459, 30.366215 ], [ -89.092643, 30.365831 ], [ -89.092912, 30.365758 ], [ -89.093006, 30.365732 ], [ -89.093168, 30.365712 ], [ -89.094308, 30.36534 ], [ -89.094388, 30.365301 ], [ -89.094683, 30.365183 ], [ -89.094739, 30.365156 ], [ -89.094852, 30.365118 ], [ -89.095644, 30.364853 ], [ -89.096427, 30.364604 ], [ -89.096534, 30.364567 ], [ -89.097512, 30.364275 ], [ -89.097679, 30.364234 ], [ -89.098915, 30.363843 ], [ -89.10016, 30.363411 ], [ -89.100979, 30.363155 ], [ -89.101422, 30.362993 ], [ -89.101423, 30.362631 ], [ -89.101426, 30.36174 ], [ -89.101417, 30.361088 ], [ -89.101237, 30.347697 ] ] ] } } +] +} diff --git a/data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/data/DOE_LEAD_AMI_TRACT_2018_ALL.csv.zip b/data/data-pipeline/data_pipeline/tests/sources/doe_energy_burden/data/DOE_LEAD_AMI_TRACT_2018_ALL.csv.zip new file mode 100644 index 0000000000000000000000000000000000000000..32c1edae978e4dd44126f6390ed9a29ea36d9e97 GIT binary patch literal 382 zcmWIWW@Zs#U|`^2F!bjNRr{13vkJ)TW@KQHXOLlV@pp~)admWwcl7m)4+(N~4v9B1 zFtmtw^zqS4E-niV;bdU;-T67`@63lur4`%^j4Ush85qDs?1j60hZJ~NA5;t9e{y6? z>!;$KFMCwd0w34>cNe_Tc2HXHm!tn_gSrA={+`pXjm}o+9sc9@{bj`t)eS<1oX?p{ zl!OyjH0!YHIB#M04sy_$^I9PwS5@#7ug}7*Q!6qu9-N${9Bi!9^8diKl{`A754Q8L z_wpwBMt%>FxPMSi@57yg``GuCea+?VXWu=& zT#IABHpT~dGcw6B;|c@`U~n)n0K0p6@^AnlAmm + --snapshot-update + """ + + _ETL_CLASS = DOEEnergyBurden + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "DOE_LEAD_AMI_TRACT_2018_ALL.csv" + _SAMPLE_DATA_ZIP_FILE_NAME = "DOE_LEAD_AMI_TRACT_2018_ALL.csv.zip" + _EXTRACT_TMP_FOLDER_NAME = "DOEEnergyBurden" + _EXTRACT_CSV_FILE_NAME = "extract.csv" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) + + def test_init(self, mock_etl, mock_paths): + """Tests that the ChildOpportunityIndexETL class was initialized + correctly. + """ + + etl = DOEEnergyBurden() + data_path, _ = mock_paths + assert etl.DATA_PATH == data_path + assert etl.COLUMNS_TO_KEEP == ["GEOID10_TRACT", "Energy burden"] + assert etl.GEOID_FIELD_NAME == "GEOID10" + assert etl.GEOID_TRACT_FIELD_NAME == "GEOID10_TRACT" + assert etl.INPUT_GEOID_TRACT_FIELD_NAME == "FIP" + assert etl.INPUT_ENERGY_BURDEN_FIELD_NAME == "BURDEN" + assert etl.REVISED_ENERGY_BURDEN_FIELD_NAME == "Energy burden" + + def test_get_output_file_path(self, mock_etl, mock_paths): + """Tests the right file name is returned.""" + etl = self._get_instance_of_etl_class() + data_path, tmp_path = mock_paths + + output_file_path = etl._get_output_file_path() + expected_output_file_path = ( + data_path / "dataset" / "doe_energy_burden" / "usa.csv" + ) + assert output_file_path == expected_output_file_path diff --git a/data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/data/Shapefile_and_Metadata.zip b/data/data-pipeline/data_pipeline/tests/sources/dot_travel_composite/data/Shapefile_and_Metadata.zip new file mode 100644 index 0000000000000000000000000000000000000000..232735bb61d4bb1dcd23bf1827620fe031ba834c GIT binary patch literal 101440 zcmeFYRZtvG^ficv;2Kb~4tx2x;axwreMDI+4G!Trx*)8P1FuYBqJKi2;&W;k*<8Gxp-jIEog zg{P^byQ#IM@i$X%OIKq#TSrrSV@YRMTYGL!Zf>N`=$ zyAsBOF>zSq!6L{tC=0sPnEiu5oXJ%g8&_#{?uK{AcipZ`9#I}q z@TppUEF!uVdd>c2Zf0(mCeY(V==~ld{(7?o67jx`3wVnY7r`Api@5;}zk=>^9t&cu zeOKeAy2Lx5svkhAlZ{79@&Hhm&$f4t*vIZo{w^ZxVR<4(Yp@=4rrcWoZ0Y^^c7Fu_ z@@{|YZMjKY-#FVa8+2n1gm$y%c6WDncNo39`a;BS@A#Yf&!FvNSC$oOieKEYQ~h!3Ip*PH1$!!&1$y>qRSz`K1woA+AhQ1ux*=u(N*vCQFMntABscfd8YZr)n_1M$R*wbGBGyS>) zwxONeU3U+6SIxuP##?z2>u-mThmS|tesJ?g#@QWyo-aAGZ{1f_m*U4qM+=7+3l9s2 zhZAyS?=enO0FL<^P<1yDw)=XJ`?yyyx2Ns9YAov8`RPRox)K1&5nG${f1CXPd$tCP zXLktAb-$a%Q~eNQJJ?Ho_w#+w>Lu!baYkwF1O>pJh2B@8ppB01w)Tbp%*&&$o2Xg; zq1(F`J&LU}5c_+RZuj!~>zApiCfKoK!M~-wH7|Y$pculj_HJppd;0g_>3DDiG-;HR zOHL7<8^thds_<~|B(Ya^@cME)ad=tt6(-}?9K-TcW7jG9wsMob2`(5lS zyX(j*`?*>qO+oj!6^~>d%RNI4Cqp78I*|0H)|w~zNSFfvZ)-W}*j{H5zc?J)uGvH% zF*}vWOYgNQOBNo!t6}U^f6~FmS{EL4t?*?VM)77or*=`&wdB4isG&r?_FFzf|44XE z6Pu@F)G+xaVp?58w4x3@hed_ND!Of66KpDw7c&UmmHv5L?U&|xSh>Y(sATyV&G~!S zlidnraNqBTZQ*KNO`@?@wf1YnPdU-Kaoq6)imO`qDPJy@P?CKgA9Np@FKo;oBh z4eovA-SgV}RhN@AA{|ggbZjEtVqgQ_B)q}+z_Ey;|64%ybCFn#H948#6)9cQt44WZ-bdUj#VkO@;y*v9`TWS|xT?gb@K}zFFZ+=qEr4S<) z$uQK6XHMdFMU(vDr%CIGsP;#_E+r4wG{(XN85wU@YaL)40b047v$fO;Bn zED2m0A*43?Y-|$OWr7#lZ`)j-mA^_>IE~g^JR4&Axr&-;%kyM0}ITuwk3LW)skZ_Nar`9G^?Wt^ivZ&F?P{ccWOtaT=)!A zMw#gm2Gi(QLQl+xO$5gYWBn6ED}_B5)aws(PR##G%_coCGn7zZy4<#WzTKxsVVqw_f4tw53|4R(@0%KR%^D@mE-?sY!SBkzOS=&F}MnX}dTpKiO z8X)>4$86G85jC-cIavS@)Hiu%6R&bcu3^?q%6DPV;KAm@=Ml9&{26Ikg%yvKi+6W! zU@>nUX{s^qxutT1?k6IA+oR9(A|TJ#Zf5^+4G80+K2kGLOrh=52y90RGBv-S;XS*= z$iSNpR}oyey2M|V4F~kh72PojhSgc|5IFgI7WRSDsl%NOY~yzp zAMay$F`V*Q`rCuZ&oCs{!X~j;SM)&Caz!L?Yxb2~Kge0kCRxn>u~!Nq=44x*X()*P zz9}K@GSS2R33t*&8c)W2J>K0hGjUr*_t+#rU{M9QbaLHa#q8=yHUywO7I8U^3K(tq-KfmY5 zUkHP1x3mK!KtdL_<<%df%qYH_w*IJ4l*}u*CZxcM+G_u9ny59k*zvuIc_|xOyPJAg z6A(xhx5uPx>}HI0kS8iUchA_&lw9QWzZvH}(sM}|#x4-Asy@KicZ4s%qi zEPwOP#{5L4J$1QN+{-+%m-nV|RF?ae(VUcy$U43+4UTcnA~>$>T48m!&0>gKS>go1 zox$)8EEkh^mG)tx&M9u6}J^VH5+7?o)-jJbc__Nj;SHt^EU-^%0AH~*^~#Tg~F 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
5Ni{vk&*Vegle&*}n?@b|(on1Gp< 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 z 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�dDGWjv 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 literal 0 HcmV?d00001 diff --git a/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/extract.csv new file mode 100644 index 000000000..8e8f79062 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/extract.csv @@ -0,0 +1,16 @@ +AMLIS Key State/Tribe County Congressional District Quadrangle Name Watershed HUC Code FIPS Code Latitude Longitude Funding Source / Program Problem Area Name Problem Area Number Planning Unit Name Planning Unit Number Problem Priority Problem Type Mining Type Ore Types Date Prepared Date Revised Private Owner % State Owner % Other Federal Owner % Park Service Owner % Forest Service Owner % Indian Owner % BLM Owner % Unfunded Standard Units Unfunded Costs Unfunded GPRA Acres Unfunded Metric Units Funded Standard Units Funded Costs Funded GPRA Acres Funded Metric Units Completed Standard Units Completed Costs Completed GPRA Acres Completed Metric Units Unnamed: 40 +CA000001 CA MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 36.25161281807095 -117.11772856883819 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +CA000002 CA MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 36.5498780497345 -121.0070599015156 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +CA000003 CA MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 38.84602113669345 -121.40564726784282 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000004 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 19.49784370888389 -155.10321769858746 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000005 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 19.446650238354696 -154.89548634140738 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000006 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 21.904412260968197 -159.43665201302525 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000007 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 21.94208315793464 -159.52362041178708 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000008 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 20.72796381691298 -156.14177664396527 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000009 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 20.86486713282688 -156.2497797752935 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000010 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 19.516629328900667 -155.91378867633992 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000011 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 20.164406070883054 -155.81110884967674 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000012 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 20.825369670478306 -156.33064622489087 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000013 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 20.9170439162332 -156.54289869319305 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000014 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 21.556464980367483 -157.89225964427064 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 +HI000015 HI MATANUSKA-SUSITNA 1.0 ANCHORAGE C-8 02170 21.90754283544759 -159.48416846823164 FRA EAST HOUSTON MINE 1 HOUSTON 1 1 VO S 12/3/1986 12:00:00 AM 4/23/2014 6:40:28 PM 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 10000.0 0.2 2.0 diff --git a/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/output.csv new file mode 100644 index 000000000..87d5ca8d0 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Is there at least one abandoned mine in this census tract? +06027000800,True +06069000802,True +06061021322,True +15001021010,True +15001021101,True +15007040603,True +15007040700,True +15009030100,True +15009030201,True +15001021402,True +15001021800,True +15009030402,True +15009030800,True +15003010201,True +15007040604,True diff --git a/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/transform.csv new file mode 100644 index 000000000..87d5ca8d0 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/eamlis/data/transform.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Is there at least one abandoned mine in this census tract? +06027000800,True +06069000802,True +06061021322,True +15001021010,True +15001021101,True +15007040603,True +15007040700,True +15009030100,True +15009030201,True +15001021402,True +15001021800,True +15009030402,True +15009030800,True +15003010201,True +15007040604,True diff --git a/data/data-pipeline/data_pipeline/tests/sources/eamlis/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/eamlis/test_etl.py new file mode 100644 index 000000000..f99949772 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/eamlis/test_etl.py @@ -0,0 +1,157 @@ +# pylint: disable=protected-access +import pathlib +from unittest import mock + +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.etl.sources.eamlis.etl import AbandonedMineETL +from data_pipeline.tests.sources.example.test_etl import TestETL +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +def _fake_add_tracts_for_geometries(df): + """The actual geojoin is too slow for tests. Use precomputed results.""" + lookups = { + (-117.1177285688382, 36.25161281807095): "06027000800", + (-121.0070599015156, 36.5498780497345): "06069000802", + (-121.40564726784282, 38.84602113669345): "06061021322", + (-155.10321769858746, 19.49784370888389): "15001021010", + (-154.89548634140738, 19.446650238354696): "15001021101", + (-159.43665201302525, 21.9044122609682): "15007040603", + (-159.52362041178708, 21.94208315793464): "15007040700", + (-156.14177664396527, 20.72796381691298): "15009030100", + (-156.2497797752935, 20.86486713282688): "15009030201", + (-155.91378867633992, 19.516629328900667): "15001021402", + (-155.81110884967674, 20.164406070883054): "15001021800", + (-156.33064622489087, 20.825369670478302): "15009030402", + (-156.54289869319305, 20.9170439162332): "15009030800", + (-157.89225964427064, 21.556464980367483): "15003010201", + (-159.48416846823164, 21.90754283544759): "15007040604", + } + df["GEOID10_TRACT"] = df.geometry.apply( + lambda point: lookups[(point.x, point.y)] + ) + return df + + +class TestAbandondedLandMineETL(TestETL): + """Tests the Abandoned Mine Dataset ETL + + This uses pytest-snapshot. + To update individual snapshots: $ poetry run pytest + data_pipeline/tests/sources/eamlis/test_etl.py::TestClassNameETL:: + --snapshot-update + """ + + _ETL_CLASS = AbandonedMineETL + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "eAMLIS export of all data.tsv" + _SAMPLE_DATA_ZIP_FILE_NAME = "eAMLIS export of all data.tsv.zip" + _EXTRACT_TMP_FOLDER_NAME = "AbandonedMineETL" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) + + def test_init(self, mock_etl, mock_paths): + """Tests that the mock class instance was + initiliazed correctly. + """ + # setup + etl = self._get_instance_of_etl_class() + # validation + assert etl.GEOID_FIELD_NAME == "GEOID10" + assert etl.GEOID_TRACT_FIELD_NAME == "GEOID10_TRACT" + assert etl.NAME == "eamlis" + assert etl.GEO_LEVEL == ValidGeoLevel.CENSUS_TRACT + assert etl.COLUMNS_TO_KEEP == [ + etl.GEOID_TRACT_FIELD_NAME, + etl.AML_BOOLEAN, + ] + + def test_get_output_file_path(self, mock_etl, mock_paths): + """Tests the right file name is returned.""" + etl = self._get_instance_of_etl_class() + data_path, tmp_path = mock_paths + + output_file_path = etl._get_output_file_path() + expected_output_file_path = ( + data_path / "dataset" / self._ETL_CLASS.NAME / "usa.csv" + ) + assert output_file_path == expected_output_file_path + + def test_fixtures_contain_shared_tract_ids_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.eamlis.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + return super().test_fixtures_contain_shared_tract_ids_base( + mock_etl, mock_paths + ) + + def test_transform_base(self, snapshot, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.eamlis.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + super().test_transform_base( + snapshot=snapshot, mock_etl=mock_etl, mock_paths=mock_paths + ) + + def test_transform_sets_output_df_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.eamlis.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + super().test_transform_sets_output_df_base( + mock_etl=mock_etl, mock_paths=mock_paths + ) + + def test_validate_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.eamlis.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + super().test_validate_base(mock_etl=mock_etl, mock_paths=mock_paths) + + def test_full_etl_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.eamlis.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + return super().test_full_etl_base(mock_etl, mock_paths) + + def test_get_data_frame_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.eamlis.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + return super().test_get_data_frame_base(mock_etl, mock_paths) + + def test_tracts_without_fuds_not_in_results(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.eamlis.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + etl = self._setup_etl_instance_and_run_extract( + mock_etl=mock_etl, mock_paths=mock_paths + ) + etl.transform() + etl.validate() + etl.load() + df = etl.get_data_frame() + assert len(df[etl.GEOID_TRACT_FIELD_NAME]) == len( + self._FIXTURES_SHARED_TRACT_IDS + ) + + def test_tract_id_lengths(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.eamlis.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + super().test_tract_id_lengths(mock_etl, mock_paths) diff --git a/data/data-pipeline/data_pipeline/tests/sources/ejscreen/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/EJSCREEN_2021_USPR_Tracts.csv.zip b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/EJSCREEN_2021_USPR_Tracts.csv.zip new file mode 100644 index 0000000000000000000000000000000000000000..5ea1817b9584c1275101740a73381fba9616f4de GIT binary patch literal 13479 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 literal 0 HcmV?d00001 diff --git a/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/extract.csv new file mode 100644 index 000000000..a4f5266e9 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/extract.csv @@ -0,0 +1,16 @@ +OBJECTID,ID,ACSTOTPOP,ACSIPOVBAS,ACSEDUCBAS,ACSTOTHH,ACSTOTHU,ACSUNEMPBAS,MINORPOP,MINORPCT,LOWINCOME,LOWINCPCT,LESSHS,LESSHSPCT,LINGISO,LINGISOPCT,UNDER5,UNDER5PCT,OVER64,OVER64PCT,UNEMP,UNEMPPCT,PRE1960,PRE1960PCT,VULEOPCT,VULSVI6PCT,VULEO,VULSVI6,DISPEO,DISPSVI6,DSLPM,CANCER,RESP,PTRAF,PWDIS,PNPL,PRMP,PTSDF,OZONE,PM25,UST,D_LDPNT_2,D_DSLPM_2,D_CANCR_2,D_RESP_2,D_PTRAF_2,D_PWDIS_2,D_PNPL_2,D_PRMP_2,D_PTSDF_2,D_OZONE_2,D_PM25_2,D_UST_2,STATE_NAME,ST_ABBREV,REGION,P_MINORPCT,P_LWINCPCT,P_LESHSPCT,P_LNGISPCT,P_UNDR5PCT,P_OVR64PCT,P_UNEMP,P_UNEMPPCT,P_LDPNT,P_VULEOPCT,P_VULSVI6PCT,P_VULSVI6,P_DISPSVI6,P_DSLPM,P_CANCR,P_RESP,P_PTRAF,P_PWDIS,P_PNPL,P_PRMP,P_PTSDF,P_OZONE,P_PM25,P_UST,P_LDPNT_D2,P_DSLPM_D2,P_CANCR_D2,P_RESP_D2,P_PTRAF_D2,P_PWDIS_D2,P_PNPL_D2,P_PRMP_D2,P_PTSDF_D2,P_OZONE_D2,P_PM25_D2,P_UST_D2,B_MINORPCT,B_LWINCPCT,B_LESHSPCT,B_LNGISPCT,B_UNDR5PCT,B_OVR64PCT,B_UNEMP,B_UNEMPPCT,B_LDPNT,B_VULEOPCT,B_VULSVI6PCT,B_VULSVI6,B_DISPSVI6,B_DSLPM,B_CANCR,B_RESP,B_PTRAF,B_PWDIS,B_PNPL,B_PRMP,B_PTSDF,B_OZONE,B_PM25,B_UST,B_LDPNT_D2,B_DSLPM_D2,B_CANCR_D2,B_RESP_D2,B_PTRAF_D2,B_PWDIS_D2,B_PNPL_D2,B_PRMP_D2,B_PTSDF_D2,B_OZONE_D2,B_PM25_D2,B_UST_D2,T_MINORPCT,T_LWINCPCT,T_LESHSPCT,T_LNGISPCT,T_UNDR5PCT,T_OVR64PCT,T_UNEMPPCT,T_VULEOPCT,T_LDPNT,T_LDPNT_D2,T_DSLPM,T_DSLPM_D2,T_CANCR,T_CANCR_D2,T_RESP,T_RESP_D2,T_PTRAF,T_PTRAF_D2,T_PWDIS,T_PWDIS_D2,T_PNPL,T_PNPL_D2,T_PRMP,T_PRMP_D2,T_PTSDF,T_PTSDF_D2,T_OZONE,T_OZONE_D2,T_PM25,T_PM25_D2,T_UST,T_UST_D2,AREALAND,AREAWATER,NPL_CNT,TSDF_CNT,Shape_Length,Shape_Area +4529,6027000800,3054,3009,2337,1420,2067,1443,1218,0.3988212181,1210,0.4021269525,475,0.2032520325,134,0.0943661972,129,0.0422396857,747,0.2445972495,62,0.0429660430,763,0.3691340106,0.4004740853,0.2309005559,1223.0478564307,705.1702977293,135.9429095904,144.8520486255,0.0162608457,20.0000000000,0.2000000000,134.3731709435,0.0000000476,0.0088169702,0.0161739005,0.0231458734,59.8143830065,5.9332945205,0.0271801764,50.1811514356,2.2105466749,2718.8581918080,27.1885819181,18267.0798289539,0.0000064773,1.1986045786,2.1987270931,3.1465173743,8131.3412612630,806.5893205801,3.6949522625,California,CA,9,58.2565807824,70.8357682483,82.0300855712,83.4211514441,22.4791060804,91.4310072487,20.6342392033,44.8003303446,69.4492207493,64.4805710566,73.9747591523,41.2001973366,69.9936559849,0.4881982980,32.2031638835,14.4688811492,33.6358789383,2.7793036790,3.1380644255,0.3541522801,2.0598614138,97.6642425963,3.6388096802,6.3535808084,71.4956721564,59.1319320934,61.5316181718,60.9745786385,62.4689837463,62.0864910202,59.8317854029,59.0710337447,59.2599060994,64.9284478117,62.2619591744,60.9702180540,6,8,9,9,3,10,3,5,7,7,8,5,7,1,4,2,4,1,1,1,1,11,1,1,8,6,7,7,7,7,6,6,6,7,7,7,40% (58%ile),40% (70%ile),20% (82%ile),9% (83%ile),4% (22%ile),24% (91%ile),4% (44%ile),40% (64%ile),0.37 = fraction pre-1960 (69%ile),71%ile,0.0163 ug/m3 (0%ile),59%ile,20 lifetime risk per million (32%ile),61%ile,0.2 (14%ile),60%ile,130 daily vehicles/meters distance (33%ile),62%ile,0.000000048 toxicity-weighted concentration/meters distance (2%ile),62%ile,0.0088 sites/km distance (3%ile),59%ile,0.016 facilities/km distance (0%ile),59%ile,0.023 facilities/km distance (2%ile),59%ile,59.8 ppb (97%ile),64%ile,5.93 ug/m3 (3%ile),62%ile,0.027 facilities/sq km area (6%ile),60%ile,17743852489.0000000000,41257887.0000000000,0,1,969231.5231135677,27404749177.8422279358 +8028,6061021322,20899,20874,13290,6549,6904,9172,9199,0.4401646012,3881,0.1859250743,825,0.0620767494,225,0.0343563903,1429,0.0683764773,2939,0.1406287382,312,0.0340165722,231,0.0334588644,0.3130448377,0.1552546718,6542.3240634282,3244.6673856589,-896.9052371663,-589.6780917541,0.1849562857,30.0000000000,0.5000000000,12.5173455346,0.2667203153,0.0687928975,0.4515663958,0.2027045525,52.7832287582,12.1102756164,0.0258826940,-30.0094307337,-165.8882612555,-26907.1571149896,-448.4526185832,-11226.8727654026,-239.2228476257,-61.7007100657,-405.0122653138,-181.8067747336,-47341.5543077505,-10861.7696239112,-23.2143238368,California,CA,9,61.7694531724,28.3124099080,32.2625612545,63.3138029183,65.9392366308,44.1611446180,92.1063805127,31.2336817151,19.3531578232,52.0599864076,48.1147912182,98.1253263672,8.5598852754,35.4160437794,83.7767623034,95.2520218071,6.7786023570,88.6613290583,53.5138135020,56.0049245976,28.8270859466,89.7745222973,94.2035706464,6.2511191138,43.0185694890,24.7769097248,17.2770098374,9.5647689629,49.9350307593,5.0850465016,20.5837755437,15.4478896201,34.6338200533,14.8104044330,10.3206402564,53.0011626680,7,3,4,7,7,5,10,4,2,6,5,11,1,4,9,11,1,9,6,6,3,9,10,1,5,3,2,1,5,1,3,2,4,2,2,6,44% (61%ile),19% (28%ile),6% (32%ile),3% (63%ile),7% (65%ile),14% (44%ile),3% (31%ile),31% (52%ile),0.033 = fraction pre-1960 (19%ile),43%ile,0.185 ug/m3 (35%ile),24%ile,30 lifetime risk per million (83%ile),17%ile,0.5 (95%ile),9%ile,13 daily vehicles/meters distance (6%ile),49%ile,0.27 toxicity-weighted concentration/meters distance (88%ile),5%ile,0.069 sites/km distance (53%ile),20%ile,0.45 facilities/km distance (56%ile),15%ile,0.2 facilities/km distance (28%ile),34%ile,52.8 ppb (89%ile),14%ile,12.1 ug/m3 (94%ile),10%ile,0.026 facilities/sq km area (6%ile),53%ile,258653359.0000000000,119890.0000000000,0,0,124755.3452199987,427225089.6229769588 +8849,6069000802,3049,3045,2076,955,1119,1493,1247,0.4089865530,747,0.2453201970,307,0.1478805395,31,0.0324607330,240,0.0787143326,468,0.1534929485,93,0.0622906899,390,0.3485254692,0.3271533750,0.1778092173,997.4906403941,542.1403034316,-87.8345013597,-17.2605942492,0.0375346206,20.0000000000,0.2000000000,15.7944927934,,0.0396183204,0.0811927061,0.1674220356,47.0434058824,7.4113546849,0.0102735941,-30.6125607956,-3.2968346872,-1756.6900271942,-17.5669002719,-1387.3013987358,,-3.4798554127,-7.1315208575,-14.7054310128,-4132.0340979390,-650.9726431509,-0.9023760119,California,CA,9,59.1858457424,41.3904741949,69.9513617378,62.0187896062,79.0518001240,52.1216510370,37.3180569516,68.3483551403,67.5701406274,54.3994266601,57.9926859232,26.1831217492,58.7612911558,2.0014414700,32.2031638835,14.4688811492,8.1570460385,,34.5749415665,10.3739430074,25.1131375379,84.5333172848,19.2864164585,4.9410824602,42.8621394303,58.0471933934,56.5430390950,57.0023528116,55.7266348497,,54.6373148803,57.1359685902,54.8116596007,56.2167239668,56.9568759225,56.2801621878,6,5,7,7,8,6,4,7,7,6,6,3,6,1,4,2,1,0,4,2,3,9,2,1,5,6,6,6,6,0,6,6,6,6,6,6,41% (59%ile),25% (41%ile),15% (69%ile),3% (62%ile),8% (79%ile),15% (52%ile),6% (68%ile),33% (54%ile),0.35 = fraction pre-1960 (67%ile),42%ile,0.0375 ug/m3 (2%ile),58%ile,20 lifetime risk per million (32%ile),56%ile,0.2 (14%ile),57%ile,16 daily vehicles/meters distance (8%ile),55%ile,,,0.04 sites/km distance (34%ile),54%ile,0.081 facilities/km distance (10%ile),57%ile,0.17 facilities/km distance (25%ile),54%ile,47 ppb (84%ile),56%ile,7.41 ug/m3 (19%ile),56%ile,0.01 facilities/sq km area (4%ile),56%ile,2987635876.0000000000,3272257.0000000000,1,0,422237.6856758550,4643687820.1565904617 +20324,15001021010,8606,8586,6124,3300,4089,3602,5362,0.6230536835,4430,0.5159562078,425,0.0693990856,36,0.0109090909,315,0.0366023704,1715,0.1992795724,502,0.1393670183,46,0.0112496943,0.5695049456,0.2425333351,4901.1595620778,2087.2418818153,1837.7590471768,508.2966127298,0.0067389217,10.0000000000,0.1000000000,0.1074143214,,0.0027318608,0.0478749209,0.0931096253,,,0.0259838494,20.6742274811,12.3845143014,18377.5904717679,183.7759047177,197.4016409694,,5.0205019537,87.9825690670,171.1130563323,,,47.7520542990,Hawaii,HI,9,74.7108013633,85.0291087110,36.7675143964,39.4832933303,15.2054293702,77.9602931979,98.1974410889,95.8100562593,9.2273848439,81.1726508957,76.5777942789,91.7961653862,85.2496673015,0.0699884723,1.8303662611,1.0748659980,0.5930748980,,0.1022787768,3.9663081684,14.5954101870,,,6.2654376121,66.8695670869,60.7245800447,74.1372134844,71.3832220072,58.5855777989,,62.7945832024,66.7236133386,67.8259227785,,,62.6039374599,8,9,4,4,2,8,11,11,1,9,8,10,9,1,1,1,1,0,1,1,2,0,0,1,7,7,8,8,6,0,7,7,7,0,0,7,62% (74%ile),52% (85%ile),7% (36%ile),1% (39%ile),4% (15%ile),20% (77%ile),14% (95%ile),57% (81%ile),0.011 = fraction pre-1960 (9%ile),66%ile,0.00674 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),74%ile,0.1 (1%ile),71%ile,0.11 daily vehicles/meters distance (0%ile),58%ile,,,0.0027 sites/km distance (0%ile),62%ile,0.048 facilities/km distance (3%ile),66%ile,0.093 facilities/km distance (14%ile),67%ile,,,,,0.026 facilities/sq km area (6%ile),62%ile,151184621.0000000000,0.0000000000,0,0,71817.3979516648,171030272.0024483502 +20327,15001021101,3054,3049,2569,1543,1958,1227,1086,0.3555992141,1450,0.4755657593,159,0.0618917867,30,0.0194426442,92,0.0301244270,909,0.2976424361,144,0.1173594132,33,0.0168539326,0.4155824867,0.2067110446,1269.1889143982,631.2955301209,182.0839675579,70.9772810171,0.0033713587,10.0000000000,0.1000000000,1.7167679255,,0.0025910486,0.2484740667,0.2746856427,,,0.0375389154,3.0688309139,0.6138703733,1820.8396755785,18.2083967558,312.5959152482,,0.4717884163,45.2431438983,50.0158516497,,,6.8352346500,Hawaii,HI,9,53.9485559986,80.7725127831,32.1386664749,50.6977998974,9.0084816593,96.6414513706,60.5643076662,92.9519087655,12.2637725970,66.3100091245,67.7573127614,34.5728724616,65.2982705045,0.0304238852,1.8303662611,1.0748659980,2.1438079687,,0.0856704529,41.7496844562,33.9762800526,,,7.1437776548,61.7192931562,58.8385531222,60.6418036749,60.2753222588,58.6611251941,,59.1844884925,63.7189045047,63.4569851575,,,61.1560978740,6,9,4,6,1,11,7,10,2,7,7,4,7,1,1,1,1,0,1,5,4,0,0,1,7,6,7,7,6,0,6,7,7,0,0,7,36% (53%ile),48% (80%ile),6% (32%ile),2% (50%ile),3% (9%ile),30% (96%ile),12% (92%ile),42% (66%ile),0.017 = fraction pre-1960 (12%ile),61%ile,0.00337 ug/m3 (0%ile),58%ile,10 lifetime risk per million (1%ile),60%ile,0.1 (1%ile),60%ile,1.7 daily vehicles/meters distance (2%ile),58%ile,,,0.0026 sites/km distance (0%ile),59%ile,0.25 facilities/km distance (41%ile),63%ile,0.27 facilities/km distance (33%ile),63%ile,,,,,0.038 facilities/sq km area (7%ile),61%ile,106332317.0000000000,11164968.0000000000,0,1,61396.6485753379,132838116.6897320002 +20331,15001021402,3778,3755,2731,1374,1583,1803,3034,0.8030704076,705,0.1877496671,214,0.0783595752,56,0.0407569141,284,0.0751720487,933,0.2469560614,23,0.0127565169,276,0.1743524953,0.4954100374,0.2386774457,1871.6591211718,901.7233898617,526.8383978048,208.5726547229,0.0131608945,10.0000000000,0.1000000000,635.9981128640,,0.0033357209,0.0225482603,0.6278707343,,,0.5088713177,91.8555892572,6.9336645713,5268.3839780481,52.6838397805,335068.2267881447,,1.7573858477,11.8792893273,330.7864116735,,,268.0929496982,Hawaii,HI,9,84.7051677398,28.7308989413,41.8348284107,67.0398022547,74.9080519616,91.8116448026,3.9836481634,4.5613171192,47.5766504879,74.5975822746,75.7504514060,55.7976616902,73.4870488517,0.2827998785,1.8303662611,1.0748659980,72.8760884284,,0.2741900811,0.7727230166,47.2090589343,,,27.1111550629,75.5651255220,59.8939075539,64.0364159199,62.9860278691,78.3054903833,,60.2827950818,60.4356420863,71.4747506314,,,66.1787674526,9,3,5,7,8,10,1,1,5,8,8,6,8,1,1,1,8,0,1,1,5,0,0,3,8,6,7,7,8,0,7,7,8,0,0,7,80% (84%ile),19% (28%ile),8% (41%ile),4% (67%ile),8% (74%ile),25% (91%ile),1% (4%ile),50% (74%ile),0.17 = fraction pre-1960 (47%ile),75%ile,0.0132 ug/m3 (0%ile),59%ile,10 lifetime risk per million (1%ile),64%ile,0.1 (1%ile),62%ile,640 daily vehicles/meters distance (72%ile),78%ile,,,0.0033 sites/km distance (0%ile),60%ile,0.023 facilities/km distance (0%ile),60%ile,0.63 facilities/km distance (47%ile),71%ile,,,,,0.51 facilities/sq km area (27%ile),66%ile,41940841.0000000000,6313950.0000000000,0,1,49320.0395726063,54601507.7207057551 +20340,15001021800,5998,5977,4357,2112,2631,3179,4020,0.6702234078,1613,0.2698678267,180,0.0413128299,76,0.0359848485,352,0.0586862287,1411,0.2352450817,241,0.0758100031,441,0.1676168757,0.4700456172,0.2185533706,2819.3336121800,1310.8831165809,684.2794304026,210.4283496771,0.0049503455,10.0000000000,0.1000000000,0.0743045071,,0.0038298946,0.0402733327,0.0410968274,,,0.1071290552,114.6967802385,3.3874195708,6842.7943040262,68.4279430403,50.8450457862,,2.6207181028,27.5582131707,28.1217136206,,,73.3062089025,Hawaii,HI,9,77.3411360526,46.5995830170,19.2008132329,64.3649112351,50.1501995746,89.5998226210,84.7007475319,78.6950985799,46.5822171086,72.0610072717,71.0200691830,75.5958544882,73.5619777633,0.0461211856,1.8303662611,1.0748659980,0.4752886632,,0.3337575583,2.8011103792,5.4042726335,,,11.7520153164,77.1764003076,59.3164619569,65.4523902797,64.1879137098,58.4409328484,,60.9620163260,62.2019174282,62.1288554973,,,63.2369902585,8,5,2,7,6,9,9,8,5,8,8,8,8,1,1,1,1,0,1,1,1,0,0,2,8,6,7,7,6,0,7,7,7,0,0,7,67% (77%ile),27% (46%ile),4% (19%ile),4% (64%ile),6% (50%ile),24% (89%ile),8% (78%ile),47% (72%ile),0.17 = fraction pre-1960 (46%ile),77%ile,0.00495 ug/m3 (0%ile),59%ile,10 lifetime risk per million (1%ile),65%ile,0.1 (1%ile),64%ile,0.074 daily vehicles/meters distance (0%ile),58%ile,,,0.0038 sites/km distance (0%ile),60%ile,0.04 facilities/km distance (2%ile),62%ile,0.041 facilities/km distance (5%ile),62%ile,,,,,0.11 facilities/sq km area (11%ile),63%ile,365110254.0000000000,37900489.0000000000,0,0,92961.9049100969,459707845.8010936975 +20560,15003010201,4936,4798,3182,1441,1938,2266,3695,0.7485818476,1439,0.2999166319,231,0.0725958517,49,0.0340041638,476,0.0964343598,651,0.1318881686,115,0.0507502207,413,0.2131062951,0.5242492398,0.2305701706,2587.6942476032,1138.0943619037,830.6706662005,232.4850372225,0.0171119880,10.0000000000,0.1000000000,1493.8870892160,,0.0694550700,0.0548137804,0.4080845621,,,0.0995447326,177.0211481635,14.2144264416,8306.7066620049,83.0670666200,1240928.1836273719,,57.6942892272,45.5321994534,338.9838750865,,,82.6888893711,Hawaii,HI,9,81.7629198374,52.7224313484,38.5909198362,63.0702607098,91.9817357703,38.9013315993,48.2935747432,55.4563410918,53.0116816593,77.2470730276,73.8991238733,68.7030659293,74.5973100320,0.5552831600,1.8303662611,1.0748659980,88.8972054263,,53.8623224639,5.1063675682,39.9537688137,,,11.2751492958,80.6790478991,60.9966060167,66.7493132622,65.1696166202,90.1940360178,,78.6444132849,63.7434121326,71.6211763075,,,63.4227438652,9,6,4,7,10,4,5,6,6,8,8,7,8,1,1,1,9,0,6,1,4,0,0,2,9,7,7,7,10,0,8,7,8,0,0,7,75% (81%ile),30% (52%ile),7% (38%ile),3% (63%ile),10% (91%ile),13% (38%ile),5% (55%ile),52% (77%ile),0.21 = fraction pre-1960 (53%ile),80%ile,0.0171 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),66%ile,0.1 (1%ile),65%ile,1500 daily vehicles/meters distance (88%ile),90%ile,,,0.069 sites/km distance (53%ile),78%ile,0.055 facilities/km distance (5%ile),63%ile,0.41 facilities/km distance (39%ile),71%ile,,,,,0.1 facilities/sq km area (11%ile),63%ile,66256288.0000000000,7249455.0000000000,0,0,42997.4044651793,85395519.3857139796 +20614,15007040603,2984,2978,2104,1058,2064,1468,2011,0.6739276139,797,0.2676292814,138,0.0655893536,33,0.0311909263,168,0.0563002681,756,0.2533512064,64,0.0435967302,193,0.0935077519,0.4707784477,0.2246647750,1404.8028878442,670.3996884791,342.6152122150,122.9243592959,0.0225796264,10.0000000000,0.1000000000,255.5966484444,,0.0065810172,0.1042895043,0.5200441984,,,0.1610354485,32.0371782740,7.7361234992,3426.1521221502,34.2615212215,87571.2999482384,,2.2547565999,35.7311706322,178.1750534077,,,55.1731943631,Hawaii,HI,9,77.5456369017,46.0970850340,34.4418368771,61.1045870101,46.0008635792,92.7630589707,21.6211577108,45.6650954498,34.4080455626,72.1367523014,72.5017628853,38.1901457794,68.6478207991,0.9188048692,1.8303662611,1.0748659980,48.7907692784,,1.7474241413,15.4267424965,43.8004140051,,,14.6634418792,68.8698351102,60.0337698662,62.2468364816,61.5558275260,68.4712288534,,60.6727330898,62.8928664453,68.0134997705,,,62.8256530053,8,5,4,7,5,10,3,5,4,8,8,4,7,1,1,1,5,0,1,2,5,0,0,2,7,7,7,7,7,0,7,7,7,0,0,7,67% (77%ile),27% (46%ile),7% (34%ile),3% (61%ile),6% (46%ile),25% (92%ile),4% (45%ile),47% (72%ile),0.094 = fraction pre-1960 (34%ile),68%ile,0.0226 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),62%ile,0.1 (1%ile),61%ile,260 daily vehicles/meters distance (48%ile),68%ile,,,0.0066 sites/km distance (1%ile),60%ile,0.1 facilities/km distance (15%ile),62%ile,0.52 facilities/km distance (43%ile),68%ile,,,,,0.16 facilities/sq km area (14%ile),62%ile,41255867.0000000000,7041518.0000000000,0,0,36855.9892981643,56378891.3118786365 +20615,15007040604,3529,3458,2370,1187,1625,1757,2203,0.6242561632,1275,0.3687102371,133,0.0561181435,42,0.0353833193,333,0.0943610088,632,0.1790875602,109,0.0620375640,322,0.1981538462,0.4964832002,0.2263194054,1752.0892134182,798.6811814815,495.9027833594,151.2145472028,0.0297040750,10.0000000000,0.1000000000,464.0468169721,,0.0064334940,0.1282189641,0.3810520320,,,0.2277699060,98.2650438411,14.7303334730,4959.0278335940,49.5902783359,230122.1081455294,,3.1903875793,63.5841411863,188.9647632974,,,112.9517303753,Hawaii,HI,9,74.7796778307,65.5138546463,28.4761545436,63.9820945208,90.9928060818,67.6211097498,45.4287763592,68.1087856009,51.0102487547,74.6953085329,72.8443904311,48.6363888652,70.3699602168,1.3729134893,1.8303662611,1.0748659980,64.8054389268,,1.7014251995,20.6071512154,38.9237463430,,,17.5743663328,76.0259182532,61.0699450431,63.7308514802,62.7533582560,75.0094643983,,61.3999056181,65.1045697304,68.3212418487,,,64.0124628341,8,7,3,7,10,7,5,7,6,8,8,5,8,1,1,1,7,0,1,3,4,0,0,2,8,7,7,7,8,0,7,7,7,0,0,7,62% (74%ile),37% (65%ile),6% (28%ile),4% (63%ile),9% (90%ile),18% (67%ile),6% (68%ile),50% (74%ile),0.2 = fraction pre-1960 (51%ile),76%ile,0.0297 ug/m3 (1%ile),61%ile,10 lifetime risk per million (1%ile),63%ile,0.1 (1%ile),62%ile,460 daily vehicles/meters distance (64%ile),75%ile,,,0.0064 sites/km distance (1%ile),61%ile,0.13 facilities/km distance (20%ile),65%ile,0.38 facilities/km distance (38%ile),68%ile,,,,,0.23 facilities/sq km area (17%ile),64%ile,21724894.0000000000,2371158.0000000000,0,1,27760.3117775823,28129042.7970332205 +20616,15007040700,9552,9523,6234,2895,3298,4974,7071,0.7402638191,1980,0.2079176730,309,0.0495668912,95,0.0328151986,772,0.0808207705,1834,0.1920016750,205,0.0412143144,346,0.1049120679,0.4740907460,0.2172310046,4528.5148062585,2074.9905558098,1128.3751689898,322.4823975128,0.0120486502,10.0000000000,0.1000000000,829.6297843840,,0.0062317499,0.2776903565,0.5315584393,,,0.8605507426,118.3801723682,13.5953976825,11283.7516898982,112.8375168990,936133.6481533048,,7.0317517976,313.3389029609,599.7973437979,,,971.0240895638,Hawaii,HI,9,81.2804870193,33.1925490446,24.3539720817,62.2442189921,81.2507708079,74.5290795692,78.3337372056,42.2880946853,36.4589583341,72.4690666385,70.6843205648,91.6638490724,78.6800785920,0.2182262554,1.8303662611,1.0748659980,78.8807149861,,1.6540510210,44.6852775053,44.1677595343,,,35.8025350464,77.4223719690,60.9007569981,69.0968995957,67.2008685709,87.5969776098,,64.0977043448,75.6532891441,75.2184280558,,,72.0462363568,9,4,3,7,9,8,8,5,4,8,8,10,8,1,1,1,8,0,1,5,5,0,0,4,8,7,7,7,9,0,7,8,8,0,0,8,74% (81%ile),21% (33%ile),5% (24%ile),3% (62%ile),8% (81%ile),19% (74%ile),4% (42%ile),47% (72%ile),0.1 = fraction pre-1960 (36%ile),77%ile,0.012 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),69%ile,0.1 (1%ile),67%ile,830 daily vehicles/meters distance (78%ile),87%ile,,,0.0062 sites/km distance (1%ile),64%ile,0.28 facilities/km distance (44%ile),75%ile,0.53 facilities/km distance (44%ile),75%ile,,,,,0.86 facilities/sq km area (35%ile),72%ile,93005151.0000000000,5658877.0000000000,0,1,70950.4293149945,115233329.7073323578 +20624,15009030100,1405,1374,980,467,796,729,1060,0.7544483986,400,0.2911208151,44,0.0448979592,0,0.0000000000,124,0.0882562278,342,0.2434163701,41,0.0562414266,170,0.2135678392,0.5227846069,0.2370232951,734.5123726346,333.0177296537,234.3871433253,75.2419798205,0.0026846006,10.0000000000,0.1000000000,,,0.0046765532,0.0398066625,0.0329594792,,,0.0973247551,50.0575557353,0.6292358547,2343.8714332533,23.4387143325,,,1.0961239415,9.3301699117,7.7252781836,,,22.8116713113,Hawaii,HI,9,82.0728020535,51.0042892937,21.4097431797,22.2149776961,87.3264635475,91.2196103997,10.4895772204,61.9590696975,53.0589655984,77.1174117652,75.3619764353,7.5930221772,65.5506156308,0.0292580509,1.8303662611,1.0748659980,,,0.7827594098,2.7444494654,3.8365691660,,,11.1452377410,71.4770935032,58.8413451490,61.1806956436,60.6714580607,,,59.7579323526,60.0938330974,59.9756316335,,,61.8121208766,9,6,3,3,9,10,2,7,6,8,8,1,7,1,1,1,0,0,1,1,1,0,0,2,8,6,7,7,0,0,6,7,6,0,0,7,75% (82%ile),29% (51%ile),4% (21%ile),0% (22%ile),9% (87%ile),24% (91%ile),6% (61%ile),52% (77%ile),0.21 = fraction pre-1960 (53%ile),71%ile,0.00268 ug/m3 (0%ile),58%ile,10 lifetime risk per million (1%ile),61%ile,0.1 (1%ile),60%ile,,,,,0.0047 sites/km distance (0%ile),59%ile,0.04 facilities/km distance (2%ile),60%ile,0.033 facilities/km distance (3%ile),59%ile,,,,,0.097 facilities/sq km area (11%ile),61%ile,555262221.0000000000,25398369.0000000000,0,0,165450.9181509207,667169893.1947253942 +20625,15009030201,2340,2327,1879,842,1045,1395,992,0.4239316239,623,0.2677266867,62,0.0329962746,0,0.0000000000,150,0.0641025641,554,0.2367521368,133,0.0953405018,97,0.0928229665,0.3458291553,0.1709182144,809.2402234637,399.9486215874,-23.7085570230,-29.3718443271,0.0063521816,10.0000000000,0.1000000000,7.0868595222,,0.0053511202,0.1292001112,0.0908033666,,,0.0098923140,-2.2006985945,-0.1506010605,-237.0855702299,-2.3708557023,-168.0192130960,,-0.1268673373,-3.0631482031,-2.1528167944,,,-0.2345324900,Hawaii,HI,9,60.4734810662,46.1223337837,13.8610651481,22.2149776961,59.2951174656,89.9006101655,56.2295738392,87.6116027815,34.2663836750,57.2620275919,55.1869446757,12.9269845729,57.7176364334,0.0651806253,1.8303662611,1.0748659980,4.6368984700,,1.3707744996,20.8229399202,14.1722671160,,,4.9075810703,55.1341860078,58.6779670685,58.4263245996,58.4806520514,57.3658121936,,58.5702573228,58.1201119303,58.2216584263,,,56.4332033900,7,5,2,3,6,9,6,9,4,6,6,2,6,1,1,1,1,0,1,3,2,0,0,1,6,6,6,6,6,0,6,6,6,0,0,6,42% (60%ile),27% (46%ile),3% (13%ile),0% (22%ile),6% (59%ile),24% (89%ile),10% (87%ile),35% (57%ile),0.093 = fraction pre-1960 (34%ile),55%ile,0.00635 ug/m3 (0%ile),58%ile,10 lifetime risk per million (1%ile),58%ile,0.1 (1%ile),58%ile,7.1 daily vehicles/meters distance (4%ile),57%ile,,,0.0054 sites/km distance (1%ile),58%ile,0.13 facilities/km distance (20%ile),58%ile,0.091 facilities/km distance (14%ile),58%ile,,,,,0.0099 facilities/sq km area (4%ile),56%ile,118113265.0000000000,4116462.0000000000,0,0,68639.8224567451,140691933.2772550285 +20629,15009030402,8562,8562,6540,3180,3473,4778,5420,0.6330296660,1535,0.1792805419,294,0.0449541284,39,0.0122641509,397,0.0463676711,1550,0.1810324690,210,0.0439514441,264,0.0760149726,0.4061551039,0.1828214379,3477.5000000000,1565.3171513473,429.7617698603,-5.5554252167,0.0153866969,10.0000000000,0.1000000000,233.6880574427,,0.0055146115,0.6633705951,0.5914191729,,,0.4432670413,32.6683291803,6.6126141119,4297.6176986027,42.9761769860,100430.1931617688,,2.3699691830,285.0913210180,254.1693504667,,,190.4992282028,Hawaii,HI,9,75.2886221409,26.8565530362,21.4439231945,41.5097856648,28.7449442824,68.6690121278,79.3833218173,46.1798708736,30.8409993308,65.1595288992,59.9703175674,82.9721886150,59.7346670413,0.4238414396,1.8303662611,1.0748659980,46.4851154373,,1.4363834459,65.6894718646,46.0793962757,,,25.2542546354,68.9789876320,59.8548490559,63.0853618909,62.2063722143,69.2554009969,,60.7689024131,74.9199434460,69.9134569074,,,65.2067338787,8,3,3,5,3,7,8,5,4,7,6,9,6,1,1,1,5,0,1,7,5,0,0,3,7,6,7,7,7,0,7,8,7,0,0,7,63% (75%ile),18% (26%ile),4% (21%ile),1% (41%ile),5% (28%ile),18% (68%ile),4% (46%ile),41% (65%ile),0.076 = fraction pre-1960 (30%ile),68%ile,0.0154 ug/m3 (0%ile),59%ile,10 lifetime risk per million (1%ile),63%ile,0.1 (1%ile),62%ile,230 daily vehicles/meters distance (46%ile),69%ile,,,0.0055 sites/km distance (1%ile),60%ile,0.66 facilities/km distance (65%ile),74%ile,0.59 facilities/km distance (46%ile),69%ile,,,,,0.44 facilities/sq km area (25%ile),65%ile,46066876.0000000000,109238.0000000000,0,1,49929.5140313853,53123180.2369696796 +20639,15009030800,7879,7871,5174,2235,2335,4210,6161,0.7819520244,1091,0.1386100877,195,0.0376884422,3,0.0013422819,594,0.0753902780,1027,0.1303464907,163,0.0387173397,285,0.1220556745,0.4602810560,0.1942216008,3626.5544403507,1530.2719926347,821.9375850282,84.7096204381,0.0169064550,10.0000000000,0.1000000000,575.9991000531,0.0008675195,0.0061499864,1.0347888110,0.5999348163,,,0.0263640121,100.3221463525,13.8960508008,8219.3758502819,82.1937585028,473435.3092760353,0.7130468458,5.0549049971,850.5318163110,493.1089740953,,,21.6695724544,Hawaii,HI,9,83.5697361596,17.7978784355,16.7867123482,22.7576898463,75.1762179508,37.9999341618,67.3605976499,38.4952526223,39.4719140158,71.0499579469,63.9144112870,82.0845801288,66.2238170511,0.5328167647,1.8303662611,1.0748659980,70.4238972397,46.4801242962,1.6311542890,76.8934515139,46.3897571267,,,6.2894452647,76.1966079716,60.9434745816,66.6801583126,65.1083356253,81.3398307482,78.4421389238,62.8183222708,84.3474497827,73.9856189804,,,61.7713841743,9,2,2,3,8,4,7,4,4,8,7,9,7,1,1,1,8,5,1,8,5,0,0,1,8,7,7,7,9,8,7,9,8,0,0,7,78% (83%ile),14% (17%ile),4% (16%ile),0% (22%ile),8% (75%ile),13% (37%ile),4% (38%ile),46% (71%ile),0.12 = fraction pre-1960 (39%ile),76%ile,0.0169 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),66%ile,0.1 (1%ile),65%ile,580 daily vehicles/meters distance (70%ile),81%ile,0.00087 toxicity-weighted concentration/meters distance (46%ile),78%ile,0.0061 sites/km distance (1%ile),62%ile,1 facilities/km distance (76%ile),84%ile,0.6 facilities/km distance (46%ile),73%ile,,,,,0.026 facilities/sq km area (6%ile),61%ile,141603534.0000000000,11781155.0000000000,0,0,80194.4536675024,176674254.7197769880 diff --git a/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/output.csv new file mode 100644 index 000000000..d66576471 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Air toxics cancer risk,Respiratory hazard index,Diesel particulate matter exposure,PM2.5 in the air,Ozone,Traffic proximity and volume,Proximity to Risk Management Plan (RMP) facilities,Proximity to hazardous waste sites,Proximity to NPL sites,Wastewater discharge,Percent of households in linguistic isolation,Poverty (Less than 200% of federal poverty line),Individuals over 64 years old,Individuals under 5 years old,Percent pre-1960s housing (lead paint indicator),Leaky underground storage tanks +06027000800,20.0000000000,0.2000000000,0.0162608457,5.9332945205,59.8143830065,134.3731709435,0.0161739005,0.0231458734,0.0088169702,0.0000000476,0.0943661972,0.4021269525,0.2445972495,0.0422396857,0.3691340106,0.0271801764 +06061021322,30.0000000000,0.5000000000,0.1849562857,12.1102756164,52.7832287582,12.5173455346,0.4515663958,0.2027045525,0.0687928975,0.2667203153,0.0343563903,0.1859250743,0.1406287382,0.0683764773,0.0334588644,0.0258826940 +06069000802,20.0000000000,0.2000000000,0.0375346206,7.4113546849,47.0434058824,15.7944927934,0.0811927061,0.1674220356,0.0396183204,,0.0324607330,0.2453201970,0.1534929485,0.0787143326,0.3485254692,0.0102735941 +15001021010,10.0000000000,0.1000000000,0.0067389217,,,0.1074143214,0.0478749209,0.0931096253,0.0027318608,,0.0109090909,0.5159562078,0.1992795724,0.0366023704,0.0112496943,0.0259838494 +15001021101,10.0000000000,0.1000000000,0.0033713587,,,1.7167679255,0.2484740667,0.2746856427,0.0025910486,,0.0194426442,0.4755657593,0.2976424361,0.0301244270,0.0168539326,0.0375389154 +15001021402,10.0000000000,0.1000000000,0.0131608945,,,635.9981128640,0.0225482603,0.6278707343,0.0033357209,,0.0407569141,0.1877496671,0.2469560614,0.0751720487,0.1743524953,0.5088713177 +15001021800,10.0000000000,0.1000000000,0.0049503455,,,0.0743045071,0.0402733327,0.0410968274,0.0038298946,,0.0359848485,0.2698678267,0.2352450817,0.0586862287,0.1676168757,0.1071290552 +15003010201,10.0000000000,0.1000000000,0.0171119880,,,1493.8870892160,0.0548137804,0.4080845621,0.0694550700,,0.0340041638,0.2999166319,0.1318881686,0.0964343598,0.2131062951,0.0995447326 +15007040603,10.0000000000,0.1000000000,0.0225796264,,,255.5966484444,0.1042895043,0.5200441984,0.0065810172,,0.0311909263,0.2676292814,0.2533512064,0.0563002681,0.0935077519,0.1610354485 +15007040604,10.0000000000,0.1000000000,0.0297040750,,,464.0468169721,0.1282189641,0.3810520320,0.0064334940,,0.0353833193,0.3687102371,0.1790875602,0.0943610088,0.1981538462,0.2277699060 +15007040700,10.0000000000,0.1000000000,0.0120486502,,,829.6297843840,0.2776903565,0.5315584393,0.0062317499,,0.0328151986,0.2079176730,0.1920016750,0.0808207705,0.1049120679,0.8605507426 +15009030100,10.0000000000,0.1000000000,0.0026846006,,,,0.0398066625,0.0329594792,0.0046765532,,0.0000000000,0.2911208151,0.2434163701,0.0882562278,0.2135678392,0.0973247551 +15009030201,10.0000000000,0.1000000000,0.0063521816,,,7.0868595222,0.1292001112,0.0908033666,0.0053511202,,0.0000000000,0.2677266867,0.2367521368,0.0641025641,0.0928229665,0.0098923140 +15009030402,10.0000000000,0.1000000000,0.0153866969,,,233.6880574427,0.6633705951,0.5914191729,0.0055146115,,0.0122641509,0.1792805419,0.1810324690,0.0463676711,0.0760149726,0.4432670413 +15009030800,10.0000000000,0.1000000000,0.0169064550,,,575.9991000531,1.0347888110,0.5999348163,0.0061499864,0.0008675195,0.0013422819,0.1386100877,0.1303464907,0.0753902780,0.1220556745,0.0263640121 diff --git a/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/transform.csv new file mode 100644 index 000000000..9c353ca40 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/data/transform.csv @@ -0,0 +1,16 @@ +OBJECTID,GEOID10_TRACT,ACSTOTPOP,ACSIPOVBAS,ACSEDUCBAS,ACSTOTHH,ACSTOTHU,ACSUNEMPBAS,MINORPOP,MINORPCT,LOWINCOME,Poverty (Less than 200% of federal poverty line),LESSHS,LESSHSPCT,LINGISO,Percent of households in linguistic isolation,UNDER5,Individuals under 5 years old,OVER64,Individuals over 64 years old,UNEMP,UNEMPPCT,PRE1960,Percent pre-1960s housing (lead paint indicator),VULEOPCT,VULSVI6PCT,VULEO,VULSVI6,DISPEO,DISPSVI6,Diesel particulate matter exposure,Air toxics cancer risk,Respiratory hazard index,Traffic proximity and volume,Wastewater discharge,Proximity to NPL sites,Proximity to Risk Management Plan (RMP) facilities,Proximity to hazardous waste sites,Ozone,PM2.5 in the air,Leaky underground storage tanks,D_LDPNT_2,D_DSLPM_2,D_CANCR_2,D_RESP_2,D_PTRAF_2,D_PWDIS_2,D_PNPL_2,D_PRMP_2,D_PTSDF_2,D_OZONE_2,D_PM25_2,D_UST_2,STATE_NAME,ST_ABBREV,REGION,P_MINORPCT,P_LWINCPCT,P_LESHSPCT,P_LNGISPCT,P_UNDR5PCT,P_OVR64PCT,P_UNEMP,P_UNEMPPCT,P_LDPNT,P_VULEOPCT,P_VULSVI6PCT,P_VULSVI6,P_DISPSVI6,P_DSLPM,P_CANCR,P_RESP,P_PTRAF,P_PWDIS,P_PNPL,P_PRMP,P_PTSDF,P_OZONE,P_PM25,P_UST,P_LDPNT_D2,P_DSLPM_D2,P_CANCR_D2,P_RESP_D2,P_PTRAF_D2,P_PWDIS_D2,P_PNPL_D2,P_PRMP_D2,P_PTSDF_D2,P_OZONE_D2,P_PM25_D2,P_UST_D2,B_MINORPCT,B_LWINCPCT,B_LESHSPCT,B_LNGISPCT,B_UNDR5PCT,B_OVR64PCT,B_UNEMP,B_UNEMPPCT,B_LDPNT,B_VULEOPCT,B_VULSVI6PCT,B_VULSVI6,B_DISPSVI6,B_DSLPM,B_CANCR,B_RESP,B_PTRAF,B_PWDIS,B_PNPL,B_PRMP,B_PTSDF,B_OZONE,B_PM25,B_UST,B_LDPNT_D2,B_DSLPM_D2,B_CANCR_D2,B_RESP_D2,B_PTRAF_D2,B_PWDIS_D2,B_PNPL_D2,B_PRMP_D2,B_PTSDF_D2,B_OZONE_D2,B_PM25_D2,B_UST_D2,T_MINORPCT,T_LWINCPCT,T_LESHSPCT,T_LNGISPCT,T_UNDR5PCT,T_OVR64PCT,T_UNEMPPCT,T_VULEOPCT,T_LDPNT,T_LDPNT_D2,T_DSLPM,T_DSLPM_D2,T_CANCR,T_CANCR_D2,T_RESP,T_RESP_D2,T_PTRAF,T_PTRAF_D2,T_PWDIS,T_PWDIS_D2,T_PNPL,T_PNPL_D2,T_PRMP,T_PRMP_D2,T_PTSDF,T_PTSDF_D2,T_OZONE,T_OZONE_D2,T_PM25,T_PM25_D2,T_UST,T_UST_D2,AREALAND,AREAWATER,NPL_CNT,TSDF_CNT,Shape_Length,Shape_Area +4529,06027000800,3054,3009,2337,1420,2067,1443,1218,0.3988212181,1210,0.4021269525,475,0.2032520325,134,0.0943661972,129,0.0422396857,747,0.2445972495,62,0.0429660430,763,0.3691340106,0.4004740853,0.2309005559,1223.0478564307,705.1702977293,135.9429095904,144.8520486255,0.0162608457,20.0000000000,0.2000000000,134.3731709435,0.0000000476,0.0088169702,0.0161739005,0.0231458734,59.8143830065,5.9332945205,0.0271801764,50.1811514356,2.2105466749,2718.8581918080,27.1885819181,18267.0798289539,0.0000064773,1.1986045786,2.1987270931,3.1465173743,8131.3412612630,806.5893205801,3.6949522625,California,CA,9,58.2565807824,70.8357682483,82.0300855712,83.4211514441,22.4791060804,91.4310072487,20.6342392033,44.8003303446,69.4492207493,64.4805710566,73.9747591523,41.2001973366,69.9936559849,0.4881982980,32.2031638835,14.4688811492,33.6358789383,2.7793036790,3.1380644255,0.3541522801,2.0598614138,97.6642425963,3.6388096802,6.3535808084,71.4956721564,59.1319320934,61.5316181718,60.9745786385,62.4689837463,62.0864910202,59.8317854029,59.0710337447,59.2599060994,64.9284478117,62.2619591744,60.9702180540,6,8,9,9,3,10,3,5,7,7,8,5,7,1,4,2,4,1,1,1,1,11,1,1,8,6,7,7,7,7,6,6,6,7,7,7,40% (58%ile),40% (70%ile),20% (82%ile),9% (83%ile),4% (22%ile),24% (91%ile),4% (44%ile),40% (64%ile),0.37 = fraction pre-1960 (69%ile),71%ile,0.0163 ug/m3 (0%ile),59%ile,20 lifetime risk per million (32%ile),61%ile,0.2 (14%ile),60%ile,130 daily vehicles/meters distance (33%ile),62%ile,0.000000048 toxicity-weighted concentration/meters distance (2%ile),62%ile,0.0088 sites/km distance (3%ile),59%ile,0.016 facilities/km distance (0%ile),59%ile,0.023 facilities/km distance (2%ile),59%ile,59.8 ppb (97%ile),64%ile,5.93 ug/m3 (3%ile),62%ile,0.027 facilities/sq km area (6%ile),60%ile,17743852489.0000000000,41257887.0000000000,0,1,969231.5231135677,27404749177.8422279358 +8028,06061021322,20899,20874,13290,6549,6904,9172,9199,0.4401646012,3881,0.1859250743,825,0.0620767494,225,0.0343563903,1429,0.0683764773,2939,0.1406287382,312,0.0340165722,231,0.0334588644,0.3130448377,0.1552546718,6542.3240634282,3244.6673856589,-896.9052371663,-589.6780917541,0.1849562857,30.0000000000,0.5000000000,12.5173455346,0.2667203153,0.0687928975,0.4515663958,0.2027045525,52.7832287582,12.1102756164,0.0258826940,-30.0094307337,-165.8882612555,-26907.1571149896,-448.4526185832,-11226.8727654026,-239.2228476257,-61.7007100657,-405.0122653138,-181.8067747336,-47341.5543077505,-10861.7696239112,-23.2143238368,California,CA,9,61.7694531724,28.3124099080,32.2625612545,63.3138029183,65.9392366308,44.1611446180,92.1063805127,31.2336817151,19.3531578232,52.0599864076,48.1147912182,98.1253263672,8.5598852754,35.4160437794,83.7767623034,95.2520218071,6.7786023570,88.6613290583,53.5138135020,56.0049245976,28.8270859466,89.7745222973,94.2035706464,6.2511191138,43.0185694890,24.7769097248,17.2770098374,9.5647689629,49.9350307593,5.0850465016,20.5837755437,15.4478896201,34.6338200533,14.8104044330,10.3206402564,53.0011626680,7,3,4,7,7,5,10,4,2,6,5,11,1,4,9,11,1,9,6,6,3,9,10,1,5,3,2,1,5,1,3,2,4,2,2,6,44% (61%ile),19% (28%ile),6% (32%ile),3% (63%ile),7% (65%ile),14% (44%ile),3% (31%ile),31% (52%ile),0.033 = fraction pre-1960 (19%ile),43%ile,0.185 ug/m3 (35%ile),24%ile,30 lifetime risk per million (83%ile),17%ile,0.5 (95%ile),9%ile,13 daily vehicles/meters distance (6%ile),49%ile,0.27 toxicity-weighted concentration/meters distance (88%ile),5%ile,0.069 sites/km distance (53%ile),20%ile,0.45 facilities/km distance (56%ile),15%ile,0.2 facilities/km distance (28%ile),34%ile,52.8 ppb (89%ile),14%ile,12.1 ug/m3 (94%ile),10%ile,0.026 facilities/sq km area (6%ile),53%ile,258653359.0000000000,119890.0000000000,0,0,124755.3452199987,427225089.6229769588 +8849,06069000802,3049,3045,2076,955,1119,1493,1247,0.4089865530,747,0.2453201970,307,0.1478805395,31,0.0324607330,240,0.0787143326,468,0.1534929485,93,0.0622906899,390,0.3485254692,0.3271533750,0.1778092173,997.4906403941,542.1403034316,-87.8345013597,-17.2605942492,0.0375346206,20.0000000000,0.2000000000,15.7944927934,,0.0396183204,0.0811927061,0.1674220356,47.0434058824,7.4113546849,0.0102735941,-30.6125607956,-3.2968346872,-1756.6900271942,-17.5669002719,-1387.3013987358,,-3.4798554127,-7.1315208575,-14.7054310128,-4132.0340979390,-650.9726431509,-0.9023760119,California,CA,9,59.1858457424,41.3904741949,69.9513617378,62.0187896062,79.0518001240,52.1216510370,37.3180569516,68.3483551403,67.5701406274,54.3994266601,57.9926859232,26.1831217492,58.7612911558,2.0014414700,32.2031638835,14.4688811492,8.1570460385,,34.5749415665,10.3739430074,25.1131375379,84.5333172848,19.2864164585,4.9410824602,42.8621394303,58.0471933934,56.5430390950,57.0023528116,55.7266348497,,54.6373148803,57.1359685902,54.8116596007,56.2167239668,56.9568759225,56.2801621878,6,5,7,7,8,6,4,7,7,6,6,3,6,1,4,2,1,0,4,2,3,9,2,1,5,6,6,6,6,0,6,6,6,6,6,6,41% (59%ile),25% (41%ile),15% (69%ile),3% (62%ile),8% (79%ile),15% (52%ile),6% (68%ile),33% (54%ile),0.35 = fraction pre-1960 (67%ile),42%ile,0.0375 ug/m3 (2%ile),58%ile,20 lifetime risk per million (32%ile),56%ile,0.2 (14%ile),57%ile,16 daily vehicles/meters distance (8%ile),55%ile,,,0.04 sites/km distance (34%ile),54%ile,0.081 facilities/km distance (10%ile),57%ile,0.17 facilities/km distance (25%ile),54%ile,47 ppb (84%ile),56%ile,7.41 ug/m3 (19%ile),56%ile,0.01 facilities/sq km area (4%ile),56%ile,2987635876.0000000000,3272257.0000000000,1,0,422237.6856758550,4643687820.1565904617 +20324,15001021010,8606,8586,6124,3300,4089,3602,5362,0.6230536835,4430,0.5159562078,425,0.0693990856,36,0.0109090909,315,0.0366023704,1715,0.1992795724,502,0.1393670183,46,0.0112496943,0.5695049456,0.2425333351,4901.1595620778,2087.2418818153,1837.7590471768,508.2966127298,0.0067389217,10.0000000000,0.1000000000,0.1074143214,,0.0027318608,0.0478749209,0.0931096253,,,0.0259838494,20.6742274811,12.3845143014,18377.5904717679,183.7759047177,197.4016409694,,5.0205019537,87.9825690670,171.1130563323,,,47.7520542990,Hawaii,HI,9,74.7108013633,85.0291087110,36.7675143964,39.4832933303,15.2054293702,77.9602931979,98.1974410889,95.8100562593,9.2273848439,81.1726508957,76.5777942789,91.7961653862,85.2496673015,0.0699884723,1.8303662611,1.0748659980,0.5930748980,,0.1022787768,3.9663081684,14.5954101870,,,6.2654376121,66.8695670869,60.7245800447,74.1372134844,71.3832220072,58.5855777989,,62.7945832024,66.7236133386,67.8259227785,,,62.6039374599,8,9,4,4,2,8,11,11,1,9,8,10,9,1,1,1,1,0,1,1,2,0,0,1,7,7,8,8,6,0,7,7,7,0,0,7,62% (74%ile),52% (85%ile),7% (36%ile),1% (39%ile),4% (15%ile),20% (77%ile),14% (95%ile),57% (81%ile),0.011 = fraction pre-1960 (9%ile),66%ile,0.00674 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),74%ile,0.1 (1%ile),71%ile,0.11 daily vehicles/meters distance (0%ile),58%ile,,,0.0027 sites/km distance (0%ile),62%ile,0.048 facilities/km distance (3%ile),66%ile,0.093 facilities/km distance (14%ile),67%ile,,,,,0.026 facilities/sq km area (6%ile),62%ile,151184621.0000000000,0.0000000000,0,0,71817.3979516648,171030272.0024483502 +20327,15001021101,3054,3049,2569,1543,1958,1227,1086,0.3555992141,1450,0.4755657593,159,0.0618917867,30,0.0194426442,92,0.0301244270,909,0.2976424361,144,0.1173594132,33,0.0168539326,0.4155824867,0.2067110446,1269.1889143982,631.2955301209,182.0839675579,70.9772810171,0.0033713587,10.0000000000,0.1000000000,1.7167679255,,0.0025910486,0.2484740667,0.2746856427,,,0.0375389154,3.0688309139,0.6138703733,1820.8396755785,18.2083967558,312.5959152482,,0.4717884163,45.2431438983,50.0158516497,,,6.8352346500,Hawaii,HI,9,53.9485559986,80.7725127831,32.1386664749,50.6977998974,9.0084816593,96.6414513706,60.5643076662,92.9519087655,12.2637725970,66.3100091245,67.7573127614,34.5728724616,65.2982705045,0.0304238852,1.8303662611,1.0748659980,2.1438079687,,0.0856704529,41.7496844562,33.9762800526,,,7.1437776548,61.7192931562,58.8385531222,60.6418036749,60.2753222588,58.6611251941,,59.1844884925,63.7189045047,63.4569851575,,,61.1560978740,6,9,4,6,1,11,7,10,2,7,7,4,7,1,1,1,1,0,1,5,4,0,0,1,7,6,7,7,6,0,6,7,7,0,0,7,36% (53%ile),48% (80%ile),6% (32%ile),2% (50%ile),3% (9%ile),30% (96%ile),12% (92%ile),42% (66%ile),0.017 = fraction pre-1960 (12%ile),61%ile,0.00337 ug/m3 (0%ile),58%ile,10 lifetime risk per million (1%ile),60%ile,0.1 (1%ile),60%ile,1.7 daily vehicles/meters distance (2%ile),58%ile,,,0.0026 sites/km distance (0%ile),59%ile,0.25 facilities/km distance (41%ile),63%ile,0.27 facilities/km distance (33%ile),63%ile,,,,,0.038 facilities/sq km area (7%ile),61%ile,106332317.0000000000,11164968.0000000000,0,1,61396.6485753379,132838116.6897320002 +20331,15001021402,3778,3755,2731,1374,1583,1803,3034,0.8030704076,705,0.1877496671,214,0.0783595752,56,0.0407569141,284,0.0751720487,933,0.2469560614,23,0.0127565169,276,0.1743524953,0.4954100374,0.2386774457,1871.6591211718,901.7233898617,526.8383978048,208.5726547229,0.0131608945,10.0000000000,0.1000000000,635.9981128640,,0.0033357209,0.0225482603,0.6278707343,,,0.5088713177,91.8555892572,6.9336645713,5268.3839780481,52.6838397805,335068.2267881447,,1.7573858477,11.8792893273,330.7864116735,,,268.0929496982,Hawaii,HI,9,84.7051677398,28.7308989413,41.8348284107,67.0398022547,74.9080519616,91.8116448026,3.9836481634,4.5613171192,47.5766504879,74.5975822746,75.7504514060,55.7976616902,73.4870488517,0.2827998785,1.8303662611,1.0748659980,72.8760884284,,0.2741900811,0.7727230166,47.2090589343,,,27.1111550629,75.5651255220,59.8939075539,64.0364159199,62.9860278691,78.3054903833,,60.2827950818,60.4356420863,71.4747506314,,,66.1787674526,9,3,5,7,8,10,1,1,5,8,8,6,8,1,1,1,8,0,1,1,5,0,0,3,8,6,7,7,8,0,7,7,8,0,0,7,80% (84%ile),19% (28%ile),8% (41%ile),4% (67%ile),8% (74%ile),25% (91%ile),1% (4%ile),50% (74%ile),0.17 = fraction pre-1960 (47%ile),75%ile,0.0132 ug/m3 (0%ile),59%ile,10 lifetime risk per million (1%ile),64%ile,0.1 (1%ile),62%ile,640 daily vehicles/meters distance (72%ile),78%ile,,,0.0033 sites/km distance (0%ile),60%ile,0.023 facilities/km distance (0%ile),60%ile,0.63 facilities/km distance (47%ile),71%ile,,,,,0.51 facilities/sq km area (27%ile),66%ile,41940841.0000000000,6313950.0000000000,0,1,49320.0395726063,54601507.7207057551 +20340,15001021800,5998,5977,4357,2112,2631,3179,4020,0.6702234078,1613,0.2698678267,180,0.0413128299,76,0.0359848485,352,0.0586862287,1411,0.2352450817,241,0.0758100031,441,0.1676168757,0.4700456172,0.2185533706,2819.3336121800,1310.8831165809,684.2794304026,210.4283496771,0.0049503455,10.0000000000,0.1000000000,0.0743045071,,0.0038298946,0.0402733327,0.0410968274,,,0.1071290552,114.6967802385,3.3874195708,6842.7943040262,68.4279430403,50.8450457862,,2.6207181028,27.5582131707,28.1217136206,,,73.3062089025,Hawaii,HI,9,77.3411360526,46.5995830170,19.2008132329,64.3649112351,50.1501995746,89.5998226210,84.7007475319,78.6950985799,46.5822171086,72.0610072717,71.0200691830,75.5958544882,73.5619777633,0.0461211856,1.8303662611,1.0748659980,0.4752886632,,0.3337575583,2.8011103792,5.4042726335,,,11.7520153164,77.1764003076,59.3164619569,65.4523902797,64.1879137098,58.4409328484,,60.9620163260,62.2019174282,62.1288554973,,,63.2369902585,8,5,2,7,6,9,9,8,5,8,8,8,8,1,1,1,1,0,1,1,1,0,0,2,8,6,7,7,6,0,7,7,7,0,0,7,67% (77%ile),27% (46%ile),4% (19%ile),4% (64%ile),6% (50%ile),24% (89%ile),8% (78%ile),47% (72%ile),0.17 = fraction pre-1960 (46%ile),77%ile,0.00495 ug/m3 (0%ile),59%ile,10 lifetime risk per million (1%ile),65%ile,0.1 (1%ile),64%ile,0.074 daily vehicles/meters distance (0%ile),58%ile,,,0.0038 sites/km distance (0%ile),60%ile,0.04 facilities/km distance (2%ile),62%ile,0.041 facilities/km distance (5%ile),62%ile,,,,,0.11 facilities/sq km area (11%ile),63%ile,365110254.0000000000,37900489.0000000000,0,0,92961.9049100969,459707845.8010936975 +20560,15003010201,4936,4798,3182,1441,1938,2266,3695,0.7485818476,1439,0.2999166319,231,0.0725958517,49,0.0340041638,476,0.0964343598,651,0.1318881686,115,0.0507502207,413,0.2131062951,0.5242492398,0.2305701706,2587.6942476032,1138.0943619037,830.6706662005,232.4850372225,0.0171119880,10.0000000000,0.1000000000,1493.8870892160,,0.0694550700,0.0548137804,0.4080845621,,,0.0995447326,177.0211481635,14.2144264416,8306.7066620049,83.0670666200,1240928.1836273719,,57.6942892272,45.5321994534,338.9838750865,,,82.6888893711,Hawaii,HI,9,81.7629198374,52.7224313484,38.5909198362,63.0702607098,91.9817357703,38.9013315993,48.2935747432,55.4563410918,53.0116816593,77.2470730276,73.8991238733,68.7030659293,74.5973100320,0.5552831600,1.8303662611,1.0748659980,88.8972054263,,53.8623224639,5.1063675682,39.9537688137,,,11.2751492958,80.6790478991,60.9966060167,66.7493132622,65.1696166202,90.1940360178,,78.6444132849,63.7434121326,71.6211763075,,,63.4227438652,9,6,4,7,10,4,5,6,6,8,8,7,8,1,1,1,9,0,6,1,4,0,0,2,9,7,7,7,10,0,8,7,8,0,0,7,75% (81%ile),30% (52%ile),7% (38%ile),3% (63%ile),10% (91%ile),13% (38%ile),5% (55%ile),52% (77%ile),0.21 = fraction pre-1960 (53%ile),80%ile,0.0171 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),66%ile,0.1 (1%ile),65%ile,1500 daily vehicles/meters distance (88%ile),90%ile,,,0.069 sites/km distance (53%ile),78%ile,0.055 facilities/km distance (5%ile),63%ile,0.41 facilities/km distance (39%ile),71%ile,,,,,0.1 facilities/sq km area (11%ile),63%ile,66256288.0000000000,7249455.0000000000,0,0,42997.4044651793,85395519.3857139796 +20614,15007040603,2984,2978,2104,1058,2064,1468,2011,0.6739276139,797,0.2676292814,138,0.0655893536,33,0.0311909263,168,0.0563002681,756,0.2533512064,64,0.0435967302,193,0.0935077519,0.4707784477,0.2246647750,1404.8028878442,670.3996884791,342.6152122150,122.9243592959,0.0225796264,10.0000000000,0.1000000000,255.5966484444,,0.0065810172,0.1042895043,0.5200441984,,,0.1610354485,32.0371782740,7.7361234992,3426.1521221502,34.2615212215,87571.2999482384,,2.2547565999,35.7311706322,178.1750534077,,,55.1731943631,Hawaii,HI,9,77.5456369017,46.0970850340,34.4418368771,61.1045870101,46.0008635792,92.7630589707,21.6211577108,45.6650954498,34.4080455626,72.1367523014,72.5017628853,38.1901457794,68.6478207991,0.9188048692,1.8303662611,1.0748659980,48.7907692784,,1.7474241413,15.4267424965,43.8004140051,,,14.6634418792,68.8698351102,60.0337698662,62.2468364816,61.5558275260,68.4712288534,,60.6727330898,62.8928664453,68.0134997705,,,62.8256530053,8,5,4,7,5,10,3,5,4,8,8,4,7,1,1,1,5,0,1,2,5,0,0,2,7,7,7,7,7,0,7,7,7,0,0,7,67% (77%ile),27% (46%ile),7% (34%ile),3% (61%ile),6% (46%ile),25% (92%ile),4% (45%ile),47% (72%ile),0.094 = fraction pre-1960 (34%ile),68%ile,0.0226 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),62%ile,0.1 (1%ile),61%ile,260 daily vehicles/meters distance (48%ile),68%ile,,,0.0066 sites/km distance (1%ile),60%ile,0.1 facilities/km distance (15%ile),62%ile,0.52 facilities/km distance (43%ile),68%ile,,,,,0.16 facilities/sq km area (14%ile),62%ile,41255867.0000000000,7041518.0000000000,0,0,36855.9892981643,56378891.3118786365 +20615,15007040604,3529,3458,2370,1187,1625,1757,2203,0.6242561632,1275,0.3687102371,133,0.0561181435,42,0.0353833193,333,0.0943610088,632,0.1790875602,109,0.0620375640,322,0.1981538462,0.4964832002,0.2263194054,1752.0892134182,798.6811814815,495.9027833594,151.2145472028,0.0297040750,10.0000000000,0.1000000000,464.0468169721,,0.0064334940,0.1282189641,0.3810520320,,,0.2277699060,98.2650438411,14.7303334730,4959.0278335940,49.5902783359,230122.1081455294,,3.1903875793,63.5841411863,188.9647632974,,,112.9517303753,Hawaii,HI,9,74.7796778307,65.5138546463,28.4761545436,63.9820945208,90.9928060818,67.6211097498,45.4287763592,68.1087856009,51.0102487547,74.6953085329,72.8443904311,48.6363888652,70.3699602168,1.3729134893,1.8303662611,1.0748659980,64.8054389268,,1.7014251995,20.6071512154,38.9237463430,,,17.5743663328,76.0259182532,61.0699450431,63.7308514802,62.7533582560,75.0094643983,,61.3999056181,65.1045697304,68.3212418487,,,64.0124628341,8,7,3,7,10,7,5,7,6,8,8,5,8,1,1,1,7,0,1,3,4,0,0,2,8,7,7,7,8,0,7,7,7,0,0,7,62% (74%ile),37% (65%ile),6% (28%ile),4% (63%ile),9% (90%ile),18% (67%ile),6% (68%ile),50% (74%ile),0.2 = fraction pre-1960 (51%ile),76%ile,0.0297 ug/m3 (1%ile),61%ile,10 lifetime risk per million (1%ile),63%ile,0.1 (1%ile),62%ile,460 daily vehicles/meters distance (64%ile),75%ile,,,0.0064 sites/km distance (1%ile),61%ile,0.13 facilities/km distance (20%ile),65%ile,0.38 facilities/km distance (38%ile),68%ile,,,,,0.23 facilities/sq km area (17%ile),64%ile,21724894.0000000000,2371158.0000000000,0,1,27760.3117775823,28129042.7970332205 +20616,15007040700,9552,9523,6234,2895,3298,4974,7071,0.7402638191,1980,0.2079176730,309,0.0495668912,95,0.0328151986,772,0.0808207705,1834,0.1920016750,205,0.0412143144,346,0.1049120679,0.4740907460,0.2172310046,4528.5148062585,2074.9905558098,1128.3751689898,322.4823975128,0.0120486502,10.0000000000,0.1000000000,829.6297843840,,0.0062317499,0.2776903565,0.5315584393,,,0.8605507426,118.3801723682,13.5953976825,11283.7516898982,112.8375168990,936133.6481533048,,7.0317517976,313.3389029609,599.7973437979,,,971.0240895638,Hawaii,HI,9,81.2804870193,33.1925490446,24.3539720817,62.2442189921,81.2507708079,74.5290795692,78.3337372056,42.2880946853,36.4589583341,72.4690666385,70.6843205648,91.6638490724,78.6800785920,0.2182262554,1.8303662611,1.0748659980,78.8807149861,,1.6540510210,44.6852775053,44.1677595343,,,35.8025350464,77.4223719690,60.9007569981,69.0968995957,67.2008685709,87.5969776098,,64.0977043448,75.6532891441,75.2184280558,,,72.0462363568,9,4,3,7,9,8,8,5,4,8,8,10,8,1,1,1,8,0,1,5,5,0,0,4,8,7,7,7,9,0,7,8,8,0,0,8,74% (81%ile),21% (33%ile),5% (24%ile),3% (62%ile),8% (81%ile),19% (74%ile),4% (42%ile),47% (72%ile),0.1 = fraction pre-1960 (36%ile),77%ile,0.012 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),69%ile,0.1 (1%ile),67%ile,830 daily vehicles/meters distance (78%ile),87%ile,,,0.0062 sites/km distance (1%ile),64%ile,0.28 facilities/km distance (44%ile),75%ile,0.53 facilities/km distance (44%ile),75%ile,,,,,0.86 facilities/sq km area (35%ile),72%ile,93005151.0000000000,5658877.0000000000,0,1,70950.4293149945,115233329.7073323578 +20624,15009030100,1405,1374,980,467,796,729,1060,0.7544483986,400,0.2911208151,44,0.0448979592,0,0.0000000000,124,0.0882562278,342,0.2434163701,41,0.0562414266,170,0.2135678392,0.5227846069,0.2370232951,734.5123726346,333.0177296537,234.3871433253,75.2419798205,0.0026846006,10.0000000000,0.1000000000,,,0.0046765532,0.0398066625,0.0329594792,,,0.0973247551,50.0575557353,0.6292358547,2343.8714332533,23.4387143325,,,1.0961239415,9.3301699117,7.7252781836,,,22.8116713113,Hawaii,HI,9,82.0728020535,51.0042892937,21.4097431797,22.2149776961,87.3264635475,91.2196103997,10.4895772204,61.9590696975,53.0589655984,77.1174117652,75.3619764353,7.5930221772,65.5506156308,0.0292580509,1.8303662611,1.0748659980,,,0.7827594098,2.7444494654,3.8365691660,,,11.1452377410,71.4770935032,58.8413451490,61.1806956436,60.6714580607,,,59.7579323526,60.0938330974,59.9756316335,,,61.8121208766,9,6,3,3,9,10,2,7,6,8,8,1,7,1,1,1,0,0,1,1,1,0,0,2,8,6,7,7,0,0,6,7,6,0,0,7,75% (82%ile),29% (51%ile),4% (21%ile),0% (22%ile),9% (87%ile),24% (91%ile),6% (61%ile),52% (77%ile),0.21 = fraction pre-1960 (53%ile),71%ile,0.00268 ug/m3 (0%ile),58%ile,10 lifetime risk per million (1%ile),61%ile,0.1 (1%ile),60%ile,,,,,0.0047 sites/km distance (0%ile),59%ile,0.04 facilities/km distance (2%ile),60%ile,0.033 facilities/km distance (3%ile),59%ile,,,,,0.097 facilities/sq km area (11%ile),61%ile,555262221.0000000000,25398369.0000000000,0,0,165450.9181509207,667169893.1947253942 +20625,15009030201,2340,2327,1879,842,1045,1395,992,0.4239316239,623,0.2677266867,62,0.0329962746,0,0.0000000000,150,0.0641025641,554,0.2367521368,133,0.0953405018,97,0.0928229665,0.3458291553,0.1709182144,809.2402234637,399.9486215874,-23.7085570230,-29.3718443271,0.0063521816,10.0000000000,0.1000000000,7.0868595222,,0.0053511202,0.1292001112,0.0908033666,,,0.0098923140,-2.2006985945,-0.1506010605,-237.0855702299,-2.3708557023,-168.0192130960,,-0.1268673373,-3.0631482031,-2.1528167944,,,-0.2345324900,Hawaii,HI,9,60.4734810662,46.1223337837,13.8610651481,22.2149776961,59.2951174656,89.9006101655,56.2295738392,87.6116027815,34.2663836750,57.2620275919,55.1869446757,12.9269845729,57.7176364334,0.0651806253,1.8303662611,1.0748659980,4.6368984700,,1.3707744996,20.8229399202,14.1722671160,,,4.9075810703,55.1341860078,58.6779670685,58.4263245996,58.4806520514,57.3658121936,,58.5702573228,58.1201119303,58.2216584263,,,56.4332033900,7,5,2,3,6,9,6,9,4,6,6,2,6,1,1,1,1,0,1,3,2,0,0,1,6,6,6,6,6,0,6,6,6,0,0,6,42% (60%ile),27% (46%ile),3% (13%ile),0% (22%ile),6% (59%ile),24% (89%ile),10% (87%ile),35% (57%ile),0.093 = fraction pre-1960 (34%ile),55%ile,0.00635 ug/m3 (0%ile),58%ile,10 lifetime risk per million (1%ile),58%ile,0.1 (1%ile),58%ile,7.1 daily vehicles/meters distance (4%ile),57%ile,,,0.0054 sites/km distance (1%ile),58%ile,0.13 facilities/km distance (20%ile),58%ile,0.091 facilities/km distance (14%ile),58%ile,,,,,0.0099 facilities/sq km area (4%ile),56%ile,118113265.0000000000,4116462.0000000000,0,0,68639.8224567451,140691933.2772550285 +20629,15009030402,8562,8562,6540,3180,3473,4778,5420,0.6330296660,1535,0.1792805419,294,0.0449541284,39,0.0122641509,397,0.0463676711,1550,0.1810324690,210,0.0439514441,264,0.0760149726,0.4061551039,0.1828214379,3477.5000000000,1565.3171513473,429.7617698603,-5.5554252167,0.0153866969,10.0000000000,0.1000000000,233.6880574427,,0.0055146115,0.6633705951,0.5914191729,,,0.4432670413,32.6683291803,6.6126141119,4297.6176986027,42.9761769860,100430.1931617688,,2.3699691830,285.0913210180,254.1693504667,,,190.4992282028,Hawaii,HI,9,75.2886221409,26.8565530362,21.4439231945,41.5097856648,28.7449442824,68.6690121278,79.3833218173,46.1798708736,30.8409993308,65.1595288992,59.9703175674,82.9721886150,59.7346670413,0.4238414396,1.8303662611,1.0748659980,46.4851154373,,1.4363834459,65.6894718646,46.0793962757,,,25.2542546354,68.9789876320,59.8548490559,63.0853618909,62.2063722143,69.2554009969,,60.7689024131,74.9199434460,69.9134569074,,,65.2067338787,8,3,3,5,3,7,8,5,4,7,6,9,6,1,1,1,5,0,1,7,5,0,0,3,7,6,7,7,7,0,7,8,7,0,0,7,63% (75%ile),18% (26%ile),4% (21%ile),1% (41%ile),5% (28%ile),18% (68%ile),4% (46%ile),41% (65%ile),0.076 = fraction pre-1960 (30%ile),68%ile,0.0154 ug/m3 (0%ile),59%ile,10 lifetime risk per million (1%ile),63%ile,0.1 (1%ile),62%ile,230 daily vehicles/meters distance (46%ile),69%ile,,,0.0055 sites/km distance (1%ile),60%ile,0.66 facilities/km distance (65%ile),74%ile,0.59 facilities/km distance (46%ile),69%ile,,,,,0.44 facilities/sq km area (25%ile),65%ile,46066876.0000000000,109238.0000000000,0,1,49929.5140313853,53123180.2369696796 +20639,15009030800,7879,7871,5174,2235,2335,4210,6161,0.7819520244,1091,0.1386100877,195,0.0376884422,3,0.0013422819,594,0.0753902780,1027,0.1303464907,163,0.0387173397,285,0.1220556745,0.4602810560,0.1942216008,3626.5544403507,1530.2719926347,821.9375850282,84.7096204381,0.0169064550,10.0000000000,0.1000000000,575.9991000531,0.0008675195,0.0061499864,1.0347888110,0.5999348163,,,0.0263640121,100.3221463525,13.8960508008,8219.3758502819,82.1937585028,473435.3092760353,0.7130468458,5.0549049971,850.5318163110,493.1089740953,,,21.6695724544,Hawaii,HI,9,83.5697361596,17.7978784355,16.7867123482,22.7576898463,75.1762179508,37.9999341618,67.3605976499,38.4952526223,39.4719140158,71.0499579469,63.9144112870,82.0845801288,66.2238170511,0.5328167647,1.8303662611,1.0748659980,70.4238972397,46.4801242962,1.6311542890,76.8934515139,46.3897571267,,,6.2894452647,76.1966079716,60.9434745816,66.6801583126,65.1083356253,81.3398307482,78.4421389238,62.8183222708,84.3474497827,73.9856189804,,,61.7713841743,9,2,2,3,8,4,7,4,4,8,7,9,7,1,1,1,8,5,1,8,5,0,0,1,8,7,7,7,9,8,7,9,8,0,0,7,78% (83%ile),14% (17%ile),4% (16%ile),0% (22%ile),8% (75%ile),13% (37%ile),4% (38%ile),46% (71%ile),0.12 = fraction pre-1960 (39%ile),76%ile,0.0169 ug/m3 (0%ile),60%ile,10 lifetime risk per million (1%ile),66%ile,0.1 (1%ile),65%ile,580 daily vehicles/meters distance (70%ile),81%ile,0.00087 toxicity-weighted concentration/meters distance (46%ile),78%ile,0.0061 sites/km distance (1%ile),62%ile,1 facilities/km distance (76%ile),84%ile,0.6 facilities/km distance (46%ile),73%ile,,,,,0.026 facilities/sq km area (6%ile),61%ile,141603534.0000000000,11781155.0000000000,0,0,80194.4536675024,176674254.7197769880 diff --git a/data/data-pipeline/data_pipeline/tests/sources/ejscreen/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/test_etl.py new file mode 100644 index 000000000..fc0694674 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/ejscreen/test_etl.py @@ -0,0 +1,20 @@ +import pathlib + +from data_pipeline.etl.sources.ejscreen.etl import EJSCREENETL +from data_pipeline.tests.sources.example.test_etl import TestETL + + +class TestEJSCREENETL(TestETL): + _ETL_CLASS = EJSCREENETL + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "EJSCREEN_2021_USPR_Tracts.csv" + _SAMPLE_DATA_ZIP_FILE_NAME = "EJSCREEN_2021_USPR_Tracts.csv.zip" + _EXTRACT_TMP_FOLDER_NAME = "EJSCREENETL" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) diff --git a/data/data-pipeline/data_pipeline/tests/sources/example/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/example/data/extract.csv index 8531b3b34..6a5bdf73c 100644 --- a/data/data-pipeline/data_pipeline/tests/sources/example/data/extract.csv +++ b/data/data-pipeline/data_pipeline/tests/sources/example/data/extract.csv @@ -1,7 +1,7 @@ GEOID10_TRACT,Input Field 1 -06007040300,2.0000000000 -06001020100,6.1000000000 -06007040500,-7.8000000000 +06027000800,2.0000000000 +06069000802,6.1000000000 +06061021322,-7.8000000000 15001021010,12.0000000000 15001021101,12.0552478300 15007040603,13.5141757800 diff --git a/data/data-pipeline/data_pipeline/tests/sources/example/data/input.zip b/data/data-pipeline/data_pipeline/tests/sources/example/data/input.zip index 17293f6cb181b5b6e4a948e43955e2e744c81f8f..d0a8235cb44cab35e2398416ae2b00ff6ec1d639 100644 GIT binary patch literal 366 zcmWIWW@Zs#U|`^2_~OGAS`^)(e+5V-*$ww63R(-Y20qkW>wog-t7E)J z1fCUrk@_t=CBx#U$cIarOV%wpb=KMJ!4)G%t|eMhF}7kS?lCsVUA${{!P6*@Y4N=^ z|6O?xEOuVS-F@hmR{l=?C?-YLoW??NoyATnSHiFSNu1gdT5_{EZuJ(24N1(&izDx@ zYIEQ5_5bs&j5mTyQV#0}cr!A|G2;pf31FZwFaSe^VM!y1g%mKXkbpr8lmKs5HjqL_ MAoK^)oFKgn0GR@Y>i_@% literal 390 zcmWIWW@Zs#-~dAAiH;!*P>{#Sz`)6%z>t|&P+FpwTwE3!!pp!OzV~Nh77%9uacKoN z10%~fpgN#-1_s{=yR(`Nd0M|a+*9O#AR&8lSB1{r7N5omd%dkiyk1_|SO4_BNcx6{ zbNsC))mH7BGv8tT_Sc6Wubs1hUwu8FzWn?7`Rs4XQ(XLdTULCSqHxan=quUlCVg?q z`r;>fi*K6p3U#!l#+XR?fv}g zYzh7sAJzwWvvYj4W&3dm=o^st1H2iTM3@mlgDeLM8W>p82x1W(PyyboY# Type[ExtractTransformLoad]: - return self._ETL_CLASS() + etl_class = self._ETL_CLASS() + + # Find out what unique state codes are present in the test fixture data. + states_expected_from_fixtures = { + x[0:2] for x in self._FIXTURES_SHARED_TRACT_IDS + } + + # Set values to match test fixtures + etl_class.EXPECTED_MISSING_STATES = [ + x + for x in TILES_CONTINENTAL_US_FIPS_CODE + + TILES_ALASKA_AND_HAWAII_FIPS_CODE + if x not in states_expected_from_fixtures + ] + etl_class.PUERTO_RICO_EXPECTED_IN_DATA = False + etl_class.ISLAND_AREAS_EXPECTED_IN_DATA = False + etl_class.ALASKA_AND_HAWAII_EXPECTED_IN_DATA = True + + return etl_class def _setup_etl_instance_and_run_extract( self, mock_etl, mock_paths @@ -98,18 +121,47 @@ def _setup_etl_instance_and_run_extract( In order to re-implement this method, usually it will involve a decent amount of work to monkeypatch `requests` or another method that's used to retrieve data in order to force that method to retrieve the fixture - data. + data. A basic version of that patching is included here for classes that can use it. """ - # When running this in child classes, make sure the child class re-implements - # this method. - if self._ETL_CLASS is not ExampleETL: - raise NotImplementedError( - "Prepare and run extract method not defined for this class." - ) - # The rest of this method applies for `ExampleETL` only. - etl = self._get_instance_of_etl_class() - etl.extract() + with mock.patch( + "data_pipeline.utils.requests" + ) as requests_mock, mock.patch( + "data_pipeline.etl.score.etl_utils.get_state_fips_codes" + ) as mock_get_state_fips_codes: + tmp_path = mock_paths[1] + if self._SAMPLE_DATA_ZIP_FILE_NAME is not None: + zip_file_fixture_src = ( + self._DATA_DIRECTORY_FOR_TEST + / self._SAMPLE_DATA_ZIP_FILE_NAME + ) + + # Create mock response. + with open(zip_file_fixture_src, mode="rb") as file: + file_contents = file.read() + else: + with open( + self._DATA_DIRECTORY_FOR_TEST / self._SAMPLE_DATA_FILE_NAME, + "rb", + ) as file: + file_contents = file.read() + response_mock = requests.Response() + response_mock.status_code = 200 + # pylint: disable=protected-access + response_mock._content = file_contents + # Return text fixture: + requests_mock.get = mock.MagicMock(return_value=response_mock) + mock_get_state_fips_codes.return_value = [ + x[0:2] for x in self._FIXTURES_SHARED_TRACT_IDS + ] + # Instantiate the ETL class. + etl = self._get_instance_of_etl_class() + + # Monkey-patch the temporary directory to the one used in the test + etl.TMP_PATH = tmp_path + + # Run the extract method. + etl.extract() return etl @@ -154,6 +206,16 @@ def test_get_output_file_path_base(self, mock_etl, mock_paths): assert actual_file_path == expected_file_path + def test_tract_id_lengths(self, mock_etl, mock_paths): + etl = self._setup_etl_instance_and_run_extract( + mock_etl=mock_etl, mock_paths=mock_paths + ) + etl.transform() + etl.validate() + etl.load() + df = etl.get_data_frame() + assert (df[etl.GEOID_TRACT_FIELD_NAME].str.len() == 11).all() + def test_fixtures_contain_shared_tract_ids_base(self, mock_etl, mock_paths): """Check presence of necessary shared tract IDs. Note: We used shared census tract IDs so that later our tests can join all the @@ -185,9 +247,14 @@ def test_sample_data_exists(self): """This will test that the sample data exists where it's supposed to as it's supposed to As per conversation with Jorge, here we can *just* test that the zip file exists. """ - assert ( - self._SAMPLE_DATA_PATH / self._SAMPLE_DATA_ZIP_FILE_NAME - ).exists() + if self._SAMPLE_DATA_ZIP_FILE_NAME is not None: + assert ( + self._SAMPLE_DATA_PATH / self._SAMPLE_DATA_ZIP_FILE_NAME + ).exists() + else: + assert ( + self._SAMPLE_DATA_PATH / self._SAMPLE_DATA_FILE_NAME + ).exists() def test_extract_unzips_base(self, mock_etl, mock_paths): """Tests the extract method. @@ -195,17 +262,18 @@ def test_extract_unzips_base(self, mock_etl, mock_paths): As per conversation with Jorge, no longer includes snapshot. Instead, verifies that the file was unzipped from a "fake" downloaded zip (located in data) in a temporary path. """ - tmp_path = mock_paths[1] + if self._SAMPLE_DATA_ZIP_FILE_NAME is not None: + tmp_path = mock_paths[1] - _ = self._setup_etl_instance_and_run_extract( - mock_etl=mock_etl, - mock_paths=mock_paths, - ) - assert ( - tmp_path - / self._EXTRACT_TMP_FOLDER_NAME - / self._SAMPLE_DATA_FILE_NAME - ).exists() + _ = self._setup_etl_instance_and_run_extract( + mock_etl=mock_etl, + mock_paths=mock_paths, + ) + assert ( + tmp_path + / self._EXTRACT_TMP_FOLDER_NAME + / self._SAMPLE_DATA_FILE_NAME + ).exists() def test_extract_produces_valid_data(self, snapshot, mock_etl, mock_paths): """Tests the extract method. @@ -363,9 +431,14 @@ def test_validate_base(self, mock_etl, mock_paths): etl_with_duplicate_geo_field.output_df = actual_output_df.copy( deep=True ) + etl_with_duplicate_geo_field.output_df.reset_index(inplace=True) etl_with_duplicate_geo_field.output_df.loc[ 0:1, ExtractTransformLoad.GEOID_TRACT_FIELD_NAME - ] = "06007040300" + ] = etl_with_duplicate_geo_field.output_df[ + ExtractTransformLoad.GEOID_TRACT_FIELD_NAME + ].iloc[ + 0 + ] with pytest.raises(ValueError) as error: etl_with_duplicate_geo_field.validate() assert str(error.value).startswith("Duplicate values:") @@ -436,7 +509,7 @@ def test_validate_base(self, mock_etl, mock_paths): # Remove another column to keep and make sure error occurs. etl_with_missing_column = copy.deepcopy(etl) - columns_to_keep = actual_output_df.columns[:-1] + columns_to_keep = etl.COLUMNS_TO_KEEP[:-1] etl_with_missing_column.output_df = actual_output_df[columns_to_keep] with pytest.raises(ValueError) as error: etl_with_missing_column.validate() diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/extract.csv new file mode 100644 index 000000000..7a37fcd1f --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/extract.csv @@ -0,0 +1,17 @@ +GEOID,count_properties,mid_depth_100_year00,mid_depth_100_year30 +6027000800,942,214,215 +6069000802,1131,283,292 +6061021322,1483,100,108 +15001021010,1888,179,186 +15001021101,3463,130,137 +15007040603,1557,152,181 +15007040700,1533,177,191 +15009030100,1658,232,242 +15009030201,6144,431,447 +15001021402,4118,321,329 +15001021800,2813,350,356 +15009030402,3374,852,888 +15009030800,4847,1003,1019 +15003010201,2335,220,227 +15007040604,5364,630,641 +2290000400,1,1,1 diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/fsf_flood.zip b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/fsf_flood.zip new file mode 100644 index 0000000000000000000000000000000000000000..c605c141073d53bc828fdacb2d16b144721079a5 GIT binary patch literal 602 zcmWIWW@h1H0D<#?dZAzjl;C2JVMr@Zi%-kR&ri`04dG;9KK4*Cx#XT=a%lxO10%}| zW(Ec@5dbtp1gMLH!6i;Vv_(SX<2NAhHX{RrEQ%RmlXOdp5|c}e3=9qQl8ej0#;*5N zPL9JgHh03=tRn_IE$Q(pUH|-Rx81qrPq*Y<|L!_t`uwk@>Hn5z+W5yrN*lB1m4pWs zhFChhWe*TCROD5DTcvzRYneiy-j@JF|DYL@A1HKkOuF_ln4MASbC={{(QNZeHx#?l zG09QtdI!8h#Zi4xS|JQ9x$dDwlun+n1?m8fL4Ga V3&RRlHjrbOfN(RAo(M9J0RX$1!>j-R literal 0 HcmV?d00001 diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/output.csv new file mode 100644 index 000000000..cdb3b9d50 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/output.csv @@ -0,0 +1,17 @@ +GEOID10_TRACT,Count of properties eligible for flood risk calculation within tract (floor of 250),Count of properties at risk of flood today,Count of properties at risk of flood in 30 years,Share of properties at risk of flood today,Share of properties at risk of flood in 30 years +06027000800,942,214,215,0.2271762208,0.2282377919 +06069000802,1131,283,292,0.2502210433,0.2581786030 +06061021322,1483,100,108,0.0674308833,0.0728253540 +15001021010,1888,179,186,0.0948093220,0.0985169492 +15001021101,3463,130,137,0.0375397055,0.0395610742 +15007040603,1557,152,181,0.0976236352,0.1162491972 +15007040700,1533,177,191,0.1154598826,0.1245923027 +15009030100,1658,232,242,0.1399276236,0.1459589867 +15009030201,6144,431,447,0.0701497396,0.0727539062 +15001021402,4118,321,329,0.0779504614,0.0798931520 +15001021800,2813,350,356,0.1244223249,0.1265552791 +15009030402,3374,852,888,0.2525192650,0.2631890931 +15009030800,4847,1003,1019,0.2069321230,0.2102331339 +15003010201,2335,220,227,0.0942184154,0.0972162741 +15007040604,5364,630,641,0.1174496644,0.1195003729 +02290000400,250,1,1,0.0040000000,0.0040000000 diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/transform.csv new file mode 100644 index 000000000..f33814034 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/data/transform.csv @@ -0,0 +1,17 @@ +GEOID,count_properties,Count of properties at risk of flood today,Count of properties at risk of flood in 30 years,GEOID10_TRACT,Count of properties eligible for flood risk calculation within tract (floor of 250),Share of properties at risk of flood today,Share of properties at risk of flood in 30 years +06027000800,942,214,215,06027000800,942,0.2271762208,0.2282377919 +06069000802,1131,283,292,06069000802,1131,0.2502210433,0.2581786030 +06061021322,1483,100,108,06061021322,1483,0.0674308833,0.0728253540 +15001021010,1888,179,186,15001021010,1888,0.0948093220,0.0985169492 +15001021101,3463,130,137,15001021101,3463,0.0375397055,0.0395610742 +15007040603,1557,152,181,15007040603,1557,0.0976236352,0.1162491972 +15007040700,1533,177,191,15007040700,1533,0.1154598826,0.1245923027 +15009030100,1658,232,242,15009030100,1658,0.1399276236,0.1459589867 +15009030201,6144,431,447,15009030201,6144,0.0701497396,0.0727539062 +15001021402,4118,321,329,15001021402,4118,0.0779504614,0.0798931520 +15001021800,2813,350,356,15001021800,2813,0.1244223249,0.1265552791 +15009030402,3374,852,888,15009030402,3374,0.2525192650,0.2631890931 +15009030800,4847,1003,1019,15009030800,4847,0.2069321230,0.2102331339 +15003010201,2335,220,227,15003010201,2335,0.0942184154,0.0972162741 +15007040604,5364,630,641,15007040604,5364,0.1174496644,0.1195003729 +2290000400,1,1,1,02290000400,250,0.0040000000,0.0040000000 diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/test_etl.py new file mode 100644 index 000000000..acc009c2e --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/fsf_flood_risk/test_etl.py @@ -0,0 +1,23 @@ +import pathlib + +from data_pipeline.etl.sources.fsf_flood_risk.etl import FloodRiskETL +from data_pipeline.tests.sources.example.test_etl import TestETL + + +class TestFloodRiskETL(TestETL): + _ETL_CLASS = FloodRiskETL + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "fsf_flood/flood-tract2010.csv" + _SAMPLE_DATA_ZIP_FILE_NAME = "fsf_flood.zip" + _EXTRACT_TMP_FOLDER_NAME = "FloodRiskETL" + _FIXTURES_SHARED_TRACT_IDS = TestETL._FIXTURES_SHARED_TRACT_IDS + [ + "02290000400" # A tract with 1 property + ] + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/extract.csv new file mode 100644 index 000000000..11a310d2d --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/extract.csv @@ -0,0 +1,17 @@ +GEOID,count_properties,burnprob_year00_flag,burnprob_year30_flag +6027000800,942,31,634 +6069000802,1131,0,264 +6061021322,1483,13,478 +15001021010,1888,62,550 +15001021101,3463,18,192 +15007040603,1557,0,509 +15007040700,1535,0,43 +15009030100,1660,177,968 +15009030201,6144,173,2856 +15001021402,4118,20,329 +15001021800,2814,111,770 +15009030402,3375,7,437 +15009030800,4847,3268,3529 +15003010201,2335,1949,2005 +15007040604,5365,3984,4439 +4003001402,1,1,1 diff --git a/data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/fsf_fire.zip b/data/data-pipeline/data_pipeline/tests/sources/fsf_wildfire_risk/data/fsf_fire.zip new file mode 100644 index 0000000000000000000000000000000000000000..51778725af3f38f443ff62b7c57d611ad0378b49 GIT binary patch literal 974 zcmWIWW@h1H0D*;x`k`P3l;C8LVMr@Zi%-ieO4Sby;bdUu^H)wT-K~&ZTEWf0$nt`j zfdNbe0F4jfE(04X1~fDi z)6md{sMF-yJecpOs@67D&=imOW&nVv!SGdV6O)u@$x)i6(y2m&3 zV?0@=cz$l@UOl6!TC#KE_NetLGuj*4m#os5s#L)haKh%H#-w%S3pXkY>MUBQw8OtI z@`2ccyz)CYC$P@xTyFX*GC0s=$qr}3OI>rG_8G@qSmU#-mg{kzZlilk)Z>|EI%&Eq z7Vh)4lZm@GVX~{({>fe4BR zlN<9lya5K{L0}+qAqQe5JR-o6ff^B^{bzw;#?yLzr~l;tC*Oz`K2@F)wubJy)YUA0f<`s?E#yZN?%ZF!&gz4p%fGrPB+{|gSX0z`<} z6@25>?qo2^yti>fm*$4)6D2BFyEau8h)i0wD5UGb$%_h~kJL;oxm%IkE)(F=TvIS# zqOn1@;jY=On+hzmIxk6mU2`*F#qu4C6PJiu*2;d2O;`mCuTO<*rzJQ8!%Ndt>`YWZ zbMfqoGu4&N9%7Myyn1~O$M8ljt#0Q(KL7QcLq;d6EO$o7*XVql=6x)>jv>ICkx7mj zSIU)ureOhwzm6a#QaWaZreoBggBXV^6+?^z#s$NcMrUN>u%&6B1)wyIkx4-Ag;;T(xSv1 zz2xGu&=5`rW{()DWOpDgt>9*0WO)J90VZlEpUt}CAkgx@Qf%Xw_a)yAk0?G7;n>H0 zG-pz4YHrH=-^OyK>j+FHb*jU(fIJ`SJJu`EtvrKcD`(veMc%{@LZ! zxb?4#=1u>)W6!?TG1ui!KaI0o=l{80>c8&$-P@nvKmNL^s@B@}to`}Z>-n#EG<8hM z2C-G0 zwVmg5?3v!$b&D@?!tr&?iA$Roc8aC>B^e6tsmtIgNGnRMa5>yi?i4@2#Ukoz_UsE& zJkJI(DRXXZGtQ4ZJJ;Eua>_k{TZ%K3j~C6k!_IhU&n1Tz;XEk|?-%Od(n4lED;IQZ zOVyrsCHz34vICR!tJGCj^O94RE*GtIc7GDja#&(-=z~KF0d9*6{8C?hy*5`*On2jx zX){ijxI0W+_T*mIN^|oSQA)aJdz&LyWotAgPtBS)NwP-y$_P7o$xu>Fz>3=BZ-5Hx6=U(bGkK|IN#`rGRbzBr*O>%1+JXX748F4`cyKUiJGEK%p;0#9w37W)8iMkYCCTnR}6n7|kqfa!{1 gOCyMdGg+}hk`-E#3h-uS18HLf!dM{f&IIBC0CV~s&;S4c literal 0 HcmV?d00001 diff --git a/data/data-pipeline/data_pipeline/tests/sources/geocorr/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/geocorr/data/output.csv new file mode 100644 index 000000000..5311c0f4c --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/geocorr/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Urban Heuristic Flag +06027000800,0 +06061021322,1 +06069000802,0 +15001021010,0 +15001021101,0 +15001021402,1 +15001021800,1 +15003010201,1 +15007040603,1 +15007040604,1 +15007040700,1 +15009030100,0 +15009030201,0 +15009030402,1 +15009030800,1 diff --git a/data/data-pipeline/data_pipeline/tests/sources/geocorr/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/geocorr/data/transform.csv new file mode 100644 index 000000000..2c12f718b --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/geocorr/data/transform.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,population_in_rural_areas,population_in_urban_areas,perc_population_in_rural_areas,perc_population_in_urban_areas,Urban Heuristic Flag +06027000800,3378.0000000000,,1.0000000000,,0 +06061021322,2252.0000000000,6510.0000000000,0.2570189454,0.7429810546,1 +06069000802,2007.0000000000,527.0000000000,0.7920284136,0.2079715864,0 +15001021010,7884.0000000000,,1.0000000000,,0 +15001021101,3312.0000000000,219.0000000000,0.9379779099,0.0620220901,0 +15001021402,1532.0000000000,2493.0000000000,0.3806211180,0.6193788820,1 +15001021800,2725.0000000000,3597.0000000000,0.4310344828,0.5689655172,1 +15003010201,827.0000000000,5055.0000000000,0.1405984359,0.8594015641,1 +15007040603,789.0000000000,1755.0000000000,0.3101415094,0.6898584906,1 +15007040604,275.0000000000,2864.0000000000,0.0876075183,0.9123924817,1 +15007040700,814.0000000000,7589.0000000000,0.0968701654,0.9031298346,1 +15009030100,2291.0000000000,,1.0000000000,,0 +15009030201,1982.0000000000,471.0000000000,0.8079902161,0.1920097839,0 +15009030402,419.0000000000,8233.0000000000,0.0484281091,0.9515718909,1 +15009030800,1100.0000000000,5807.0000000000,0.1592587230,0.8407412770,1 diff --git a/data/data-pipeline/data_pipeline/tests/sources/geocorr/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/geocorr/test_etl.py new file mode 100644 index 000000000..95bdf0b77 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/geocorr/test_etl.py @@ -0,0 +1,20 @@ +import pathlib + +from data_pipeline.etl.sources.geocorr.etl import GeoCorrETL +from data_pipeline.tests.sources.example.test_etl import TestETL + + +class TestGeoCorrETL(TestETL): + _ETL_CLASS = GeoCorrETL + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "geocorr_urban_rural.csv" + _SAMPLE_DATA_ZIP_FILE_NAME = "geocorr_urban_rural.csv.zip" + _EXTRACT_TMP_FOLDER_NAME = "GeoCorrETL" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) diff --git a/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/HRS_2010.zip b/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/HRS_2010.zip new file mode 100644 index 0000000000000000000000000000000000000000..c8c43cbe7b08c502175d051b996ca0d450f5b44e GIT binary patch literal 5446 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 literal 0 HcmV?d00001 diff --git a/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/output.csv new file mode 100644 index 000000000..8b86f139b --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Tract-level redlining score,Tract-level redlining score meets or exceeds 3.25,Tract-level redlining score meets or exceeds 3.5,Tract-level redlining score meets or exceeds 3.75 +06027000800,3.3000000000,True,False,False +06061021322,3.9900000000,True,True,True +06069000802,3.7800000000,True,True,True +15001021010,4.0000000000,True,True,True +15001021101,4.0000000000,True,True,True +15001021402,3.8600000000,True,True,True +15001021800,4.0000000000,True,True,True +15003010201,3.9600000000,True,True,True +15007040603,3.9700000000,True,True,True +15007040604,3.9400000000,True,True,True +15007040700,3.2000000000,False,False,False +15009030100,3.7700000000,True,True,True +15009030201,3.2300000000,False,False,False +15009030402,3.0000000000,False,False,False +15009030800,3.4000000000,True,False,False diff --git a/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/transform.csv new file mode 100644 index 000000000..5c49681c6 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/data/transform.csv @@ -0,0 +1,16 @@ +GEOID10,CBSA_NAME,CBSA_NUM,EQINTERVAL2010,Tract-level redlining score,GEOID10_TRACT,Tract-level redlining score meets or exceeds 3.25,Tract-level redlining score meets or exceeds 3.5,Tract-level redlining score meets or exceeds 3.75 +6027000800,"Birmingham-Hoover, AL",13820,4,3.3000000000,06027000800,True,False,False +6061021322,"Birmingham-Hoover, AL",13820,4,3.9900000000,06061021322,True,True,True +6069000802,"Birmingham-Hoover, AL",13820,4,3.7800000000,06069000802,True,True,True +15001021010,"Birmingham-Hoover, AL",13820,4,4.0000000000,15001021010,True,True,True +15001021101,"Birmingham-Hoover, AL",13820,4,4.0000000000,15001021101,True,True,True +15001021402,"Birmingham-Hoover, AL",13820,4,3.8600000000,15001021402,True,True,True +15001021800,"Birmingham-Hoover, AL",13820,4,4.0000000000,15001021800,True,True,True +15003010201,"Birmingham-Hoover, AL",13820,4,3.9600000000,15003010201,True,True,True +15007040603,"Birmingham-Hoover, AL",13820,4,3.9700000000,15007040603,True,True,True +15007040604,"Birmingham-Hoover, AL",13820,4,3.9400000000,15007040604,True,True,True +15007040700,"Birmingham-Hoover, AL",13820,3,3.2000000000,15007040700,False,False,False +15009030100,"Birmingham-Hoover, AL",13820,4,3.7700000000,15009030100,True,True,True +15009030201,"Birmingham-Hoover, AL",13820,3,3.2300000000,15009030201,False,False,False +15009030402,"Birmingham-Hoover, AL",13820,3,3.0000000000,15009030402,False,False,False +15009030800,"Birmingham-Hoover, AL",13820,4,3.4000000000,15009030800,True,False,False diff --git a/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/test_etl.py new file mode 100644 index 000000000..de2c7f8f9 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/historic_redlining/test_etl.py @@ -0,0 +1,67 @@ +# pylint: disable=protected-access +import pathlib + +import pandas as pd +from data_pipeline.etl.sources.historic_redlining.etl import ( + HistoricRedliningETL, +) +from data_pipeline.tests.sources.example.test_etl import TestETL + + +class TestHistoricRedliningETL(TestETL): + _ETL_CLASS = HistoricRedliningETL + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "HRS_2010.xlsx" + _SAMPLE_DATA_ZIP_FILE_NAME = "HRS_2010.zip" + _EXTRACT_TMP_FOLDER_NAME = "HistoricRedliningETL" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) + + def test_extract_produces_valid_data(self, snapshot, mock_etl, mock_paths): + etl = self._setup_etl_instance_and_run_extract( + mock_etl=mock_etl, + mock_paths=mock_paths, + ) + tmp_df = pd.read_excel( + etl.get_tmp_path() / self._SAMPLE_DATA_FILE_NAME, + dtype={etl.GEOID_TRACT_FIELD_NAME: str}, + ) + assert tmp_df.shape == (15, 5) + + def test_load_base(self, snapshot, mock_etl, mock_paths): + """Test load method. + We need to run transform here for real to add + the dynamic cols to keep + """ + # setup - input variables + etl = self._setup_etl_instance_and_run_extract( + mock_etl=mock_etl, + mock_paths=mock_paths, + ) + etl.transform() + etl.load() + + # Make sure it creates the file. + actual_output_path = etl._get_output_file_path() + assert actual_output_path.exists() + + # Check COLUMNS_TO_KEEP remain + actual_output = pd.read_csv( + actual_output_path, dtype={etl.GEOID_TRACT_FIELD_NAME: str} + ) + + for col in etl.COLUMNS_TO_KEEP: + assert col in actual_output.columns, f"{col} is missing from output" + + # Check the snapshots + snapshot.snapshot_dir = self._DATA_DIRECTORY_FOR_TEST + snapshot.assert_match( + actual_output.to_csv(index=False, float_format=self._FLOAT_FORMAT), + self._OUTPUT_CSV_FILE_NAME, + ) diff --git a/data/data-pipeline/data_pipeline/tests/sources/hud_housing/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/2014thru2018-140-csv.zip b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/2014thru2018-140-csv.zip new file mode 100644 index 0000000000000000000000000000000000000000..4360702937fcd7bc66215ec56f2d25aa2aaf5f4a GIT binary patch literal 7488 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 literal 0 HcmV?d00001 diff --git a/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/extract.csv new file mode 100644 index 000000000..74ad03681 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/extract.csv @@ -0,0 +1,16 @@ +source,sumlevel,geoid,name,st,cnty,tract,T3_est1,T3_est2,T3_est3,T3_est4,T3_est5,T3_est6,T3_est7,T3_est8,T3_est9,T3_est10,T3_est11,T3_est12,T3_est13,T3_est14,T3_est15,T3_est16,T3_est17,T3_est18,T3_est19,T3_est20,T3_est21,T3_est22,T3_est23,T3_est24,T3_est25,T3_est26,T3_est27,T3_est28,T3_est29,T3_est30,T3_est31,T3_est32,T3_est33,T3_est34,T3_est35,T3_est36,T3_est37,T3_est38,T3_est39,T3_est40,T3_est41,T3_est42,T3_est43,T3_est44,T3_est45,T3_est46,T3_est47,T3_est48,T3_est49,T3_est50,T3_est51,T3_est52,T3_est53,T3_est54,T3_est55,T3_est56,T3_est57,T3_est58,T3_est59,T3_est60,T3_est61,T3_est62,T3_est63,T3_est64,T3_est65,T3_est66,T3_est67,T3_est68,T3_est69,T3_est70,T3_est71,T3_est72,T3_est73,T3_est74,T3_est75,T3_est76,T3_est77,T3_est78,T3_est79,T3_est80,T3_est81,T3_est82,T3_est83,T3_est84,T3_est85,T3_est86,T3_est87,T3_moe1,T3_moe2,T3_moe3,T3_moe4,T3_moe5,T3_moe6,T3_moe7,T3_moe8,T3_moe9,T3_moe10,T3_moe11,T3_moe12,T3_moe13,T3_moe14,T3_moe15,T3_moe16,T3_moe17,T3_moe18,T3_moe19,T3_moe20,T3_moe21,T3_moe22,T3_moe23,T3_moe24,T3_moe25,T3_moe26,T3_moe27,T3_moe28,T3_moe29,T3_moe30,T3_moe31,T3_moe32,T3_moe33,T3_moe34,T3_moe35,T3_moe36,T3_moe37,T3_moe38,T3_moe39,T3_moe40,T3_moe41,T3_moe42,T3_moe43,T3_moe44,T3_moe45,T3_moe46,T3_moe47,T3_moe48,T3_moe49,T3_moe50,T3_moe51,T3_moe52,T3_moe53,T3_moe54,T3_moe55,T3_moe56,T3_moe57,T3_moe58,T3_moe59,T3_moe60,T3_moe61,T3_moe62,T3_moe63,T3_moe64,T3_moe65,T3_moe66,T3_moe67,T3_moe68,T3_moe69,T3_moe70,T3_moe71,T3_moe72,T3_moe73,T3_moe74,T3_moe75,T3_moe76,T3_moe77,T3_moe78,T3_moe79,T3_moe80,T3_moe81,T3_moe82,T3_moe83,T3_moe84,T3_moe85,T3_moe86,T3_moe87 +2014thru2018,140,14000US06027000800,"Census Tract 8, Inyo County, California",6,27,800,1375,800,30,30,0,0,0,0,0,0,0,0,0,0,10,0,0,0,10,0,115,35,30,50,0,4,115,15,35,10,15,35,0,0,0,0,0,0,530,30,65,70,50,320,580,35,25,10,0,0,0,0,0,0,0,0,0,65,0,10,0,55,0,90,70,20,0,0,0,95,10,30,40,0,10,0,0,0,0,0,0,300,10,40,85,0,165,133,101,31,31,12,12,12,12,12,12,12,12,12,12,15,12,12,12,15,12,57,26,32,41,12,5,56,15,34,13,22,35,12,12,12,12,12,12,90,31,34,41,25,79,122,34,30,16,12,12,12,12,12,12,12,12,12,67,12,18,12,64,12,83,79,32,12,12,12,52,20,32,35,12,14,12,12,12,12,12,12,89,14,30,50,12,64 +2014thru2018,140,14000US06061021322,"Census Tract 213.22, Placer County, California",6,61,21322,5395,4250,0,0,0,0,0,0,15,0,0,0,0,15,120,0,0,0,55,65,250,70,45,105,35,0,630,30,75,130,105,290,65,65,0,0,0,0,3170,15,45,140,60,2905,1145,0,0,0,0,0,0,50,50,0,0,0,0,45,0,45,0,0,0,240,160,30,50,0,0,270,0,160,85,30,0,15,15,0,0,0,0,520,65,0,135,105,215,179,212,19,19,19,19,19,19,26,19,19,19,19,26,108,19,19,19,65,84,122,57,39,84,39,19,151,37,88,78,67,116,87,87,19,19,19,19,238,20,38,92,56,249,187,19,19,19,19,19,19,81,81,19,19,19,19,73,19,73,19,19,19,100,95,35,52,19,19,115,19,93,90,30,19,26,26,19,19,19,19,170,83,19,105,87,99 +2014thru2018,140,14000US06069000802,"Census Tract 8.02, San Benito County, California",6,69,802,885,615,4,4,0,4,0,4,4,0,0,0,0,4,0,0,0,0,0,0,70,4,20,20,4,25,90,4,10,10,10,55,4,4,0,0,0,0,440,10,25,35,35,335,265,4,0,0,4,0,0,4,0,0,0,4,0,20,4,15,0,0,0,25,4,20,0,0,0,25,4,4,15,0,0,4,4,0,0,0,0,190,20,35,20,35,80,69,70,11,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,25,12,16,12,1,20,28,3,11,11,12,23,10,10,12,12,12,12,62,10,31,20,19,46,45,4,12,12,4,12,12,11,12,12,12,11,12,19,12,17,12,12,12,17,11,18,12,12,12,14,2,7,14,12,12,3,3,12,12,12,12,43,14,19,14,18,28 +2014thru2018,140,14000US15001021010,"Census Tract 210.10, Hawaii County, Hawaii",15,1,21010,3130,2515,230,85,70,4,20,50,55,10,35,0,0,10,110,10,15,50,0,30,245,155,85,4,0,0,275,30,60,135,40,4,55,55,0,0,0,0,1550,170,290,140,190,760,615,40,20,4,0,4,10,65,20,0,0,0,45,50,20,0,0,25,4,55,40,4,0,10,0,100,0,50,45,0,0,70,70,0,0,0,0,235,30,20,40,35,105,176,219,100,44,81,10,32,43,37,13,35,15,15,14,56,23,22,41,15,32,121,112,62,19,15,15,136,38,40,118,34,15,40,40,15,15,15,15,212,104,145,72,107,189,168,26,18,9,15,10,13,77,30,15,15,15,70,40,22,15,15,33,2,35,31,14,15,15,15,55,15,40,44,15,15,86,86,15,15,15,15,111,25,27,36,30,91 +2014thru2018,140,14000US15001021101,"Census Tract 211.01, Hawaii County, Hawaii",15,1,21101,1690,1385,125,75,30,0,0,20,35,4,10,10,0,10,4,4,0,0,0,0,255,140,80,35,0,0,125,50,4,20,20,30,30,30,0,0,0,0,810,85,115,115,170,320,300,40,4,0,35,0,0,25,25,0,0,0,0,4,0,0,0,0,4,70,70,0,0,0,0,35,15,10,4,10,0,4,4,0,0,0,0,125,30,10,20,15,50,157,136,73,58,29,11,11,36,29,8,20,15,11,13,3,3,11,11,11,11,78,69,46,34,11,11,40,27,10,14,22,24,23,23,11,11,11,11,117,39,55,61,65,96,98,52,12,11,54,11,11,38,38,11,11,11,11,2,11,11,11,11,2,60,60,11,11,11,11,28,22,13,11,15,11,11,11,11,11,11,11,51,26,13,23,21,36 +2014thru2018,140,14000US15001021402,"Census Tract 214.02, Hawaii County, Hawaii",15,1,21402,1340,830,4,0,0,4,0,0,4,0,0,0,0,4,70,0,0,0,10,60,70,30,4,25,4,0,130,10,10,55,0,55,0,0,0,0,0,0,550,10,4,50,30,455,510,30,30,0,0,0,0,10,0,0,10,0,0,15,0,10,0,0,4,115,100,4,4,0,0,85,20,20,15,25,4,0,0,0,0,0,0,250,40,15,35,45,120,103,132,1,11,11,1,11,11,13,11,11,11,11,13,61,11,11,11,19,59,53,46,14,21,2,11,68,16,20,52,11,32,11,11,11,11,11,11,122,17,15,31,30,107,102,50,50,11,11,11,11,13,11,11,13,11,11,21,11,16,11,11,12,74,70,10,13,11,11,51,21,31,22,40,7,11,11,11,11,11,11,92,22,22,33,47,58 +2014thru2018,140,14000US15001021800,"Census Tract 218, Hawaii County, Hawaii",15,1,21800,2015,1375,30,25,0,0,0,4,10,0,4,4,4,4,65,0,4,4,4,55,100,35,15,30,0,20,285,25,20,20,15,205,15,15,0,0,0,0,870,15,40,105,95,615,640,55,55,0,4,0,0,15,10,0,0,0,4,25,10,4,0,0,10,55,40,15,0,0,0,100,25,25,35,10,4,0,0,0,0,0,0,395,25,0,50,25,290,201,188,41,40,15,15,15,15,13,15,9,4,5,3,41,15,3,5,1,41,53,34,21,28,15,26,118,25,20,16,20,115,21,21,15,15,15,15,159,16,27,51,40,140,159,80,79,15,15,15,15,17,14,15,15,15,11,24,14,10,15,15,14,37,31,18,15,15,15,53,30,20,42,14,3,15,15,15,15,15,15,162,27,15,34,24,155 +2014thru2018,140,14000US15003010201,"Census Tract 102.01, Honolulu County, Hawaii",15,3,10201,1515,785,15,4,0,10,0,0,35,4,0,15,10,4,85,0,4,40,10,30,95,50,10,15,4,10,125,4,15,50,25,35,4,4,0,0,0,0,425,15,4,45,55,305,730,50,10,15,20,0,4,95,25,4,40,15,10,75,0,15,35,4,20,150,55,85,10,0,0,95,10,10,40,25,15,30,30,0,0,0,0,230,4,10,50,45,120,66,73,16,10,15,13,15,15,27,10,15,25,12,9,46,15,9,33,13,22,31,30,13,12,3,17,33,15,13,18,16,15,11,11,15,15,15,15,69,15,11,22,31,52,72,23,11,20,17,15,15,42,21,11,32,14,13,36,15,23,25,15,18,48,28,42,13,15,15,43,14,13,32,22,15,25,25,15,15,15,15,53,10,17,28,23,48 +2014thru2018,140,14000US15007040603,"Census Tract 406.03, Kauai County, Hawaii",15,7,40603,1035,595,4,0,0,0,0,4,4,0,0,0,0,4,30,0,0,4,4,25,100,15,20,20,30,20,80,0,15,4,4,55,4,4,0,0,0,0,370,10,20,55,10,275,440,4,0,0,0,0,4,10,10,0,0,0,0,30,4,4,4,10,10,105,55,25,25,0,4,80,4,15,30,15,10,10,10,0,0,0,0,195,15,0,35,35,115,84,70,11,11,11,11,11,11,18,11,11,11,11,18,25,11,11,4,11,26,34,15,16,12,22,13,31,11,14,11,11,29,11,11,11,11,11,11,66,15,16,29,12,55,75,11,11,11,11,11,11,15,15,11,11,11,11,27,3,3,16,13,14,45,26,20,23,11,17,35,15,21,20,13,14,13,13,11,11,11,11,52,16,11,24,25,45 +2014thru2018,140,14000US15007040604,"Census Tract 406.04, Kauai County, Hawaii",15,7,40604,1235,655,10,0,0,0,0,10,10,0,0,0,4,4,15,0,4,0,0,10,75,45,4,15,4,0,120,4,15,20,25,55,15,15,0,0,0,0,410,15,30,35,15,315,580,4,4,0,0,0,0,30,0,20,0,0,10,25,4,4,0,4,15,90,15,50,20,0,0,165,35,70,15,20,30,0,0,0,0,0,0,260,30,40,20,25,150,79,96,14,11,11,11,11,14,13,11,11,11,10,1,18,11,10,11,11,13,36,33,10,14,9,11,55,11,22,23,28,32,15,15,11,11,11,11,80,28,30,18,18,74,101,11,11,11,11,11,11,31,11,29,11,11,13,25,7,3,11,10,21,45,18,35,24,11,11,56,28,44,15,23,24,11,11,11,11,11,11,77,27,26,16,22,63 +2014thru2018,140,14000US15007040700,"Census Tract 407, Kauai County, Hawaii",15,7,40700,2875,1930,0,0,0,0,0,0,0,0,0,0,0,0,115,0,0,4,0,110,245,80,10,115,15,25,380,80,20,45,70,170,25,25,0,0,0,0,1165,40,20,110,75,920,950,25,0,0,0,4,15,80,0,10,0,10,60,45,0,10,4,0,30,205,90,60,55,0,0,105,20,15,25,0,45,15,15,0,0,0,0,470,25,20,45,100,285,162,199,15,15,15,15,15,15,15,15,15,15,15,15,51,15,15,10,15,52,98,62,17,62,21,30,128,74,29,32,53,83,27,27,15,15,15,15,171,34,17,46,53,179,157,29,15,15,15,13,25,67,15,19,15,21,61,48,15,17,15,15,44,94,64,48,43,15,15,75,23,23,41,15,53,19,19,15,15,15,15,107,18,24,35,72,115 +2014thru2018,140,14000US15009030100,"Census Tract 301, Maui County, Hawaii",15,9,30100,500,320,20,10,0,0,0,10,10,0,0,4,0,4,40,4,0,15,0,20,30,25,0,10,0,0,15,0,0,4,0,10,0,0,0,0,0,0,200,4,65,15,20,95,175,4,4,0,0,0,0,10,0,0,0,0,10,20,0,0,0,20,0,20,20,0,0,0,0,4,0,4,0,0,0,0,0,0,0,0,0,120,25,4,10,0,80,71,75,27,18,11,11,11,18,15,11,11,14,11,10,23,11,11,23,11,14,25,19,11,15,11,11,20,11,11,10,11,18,11,11,11,11,11,11,62,11,57,15,23,53,69,11,11,11,11,11,11,16,11,11,11,11,16,25,11,11,11,25,11,24,24,11,11,11,11,9,11,9,11,11,11,11,11,11,11,11,11,62,30,9,12,11,59 +2014thru2018,140,14000US15009030201,"Census Tract 302.01, Maui County, Hawaii",15,9,30201,820,605,0,0,0,0,0,0,15,0,0,0,0,15,10,0,0,0,10,0,70,25,35,0,0,10,160,10,10,65,15,60,0,0,0,0,0,0,350,40,40,35,10,225,215,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,10,0,0,4,0,4,0,0,0,45,0,0,45,0,0,0,0,0,0,0,0,155,0,10,55,0,90,99,113,11,11,11,11,11,11,23,11,11,11,11,23,24,11,11,11,24,11,47,30,31,11,11,17,81,15,18,73,21,31,11,11,11,11,11,11,91,36,34,34,21,80,100,11,11,11,11,11,11,11,11,11,11,11,11,20,11,11,20,11,11,20,11,20,11,11,11,49,11,11,49,11,11,11,11,11,11,11,11,85,11,21,49,11,78 +2014thru2018,140,14000US15009030402,"Census Tract 304.02, Maui County, Hawaii",15,9,30402,3140,2205,0,0,0,0,0,0,15,0,0,0,0,15,70,25,0,0,0,45,360,100,85,75,85,20,275,10,0,10,10,245,45,45,0,0,0,0,1435,0,90,150,90,1105,935,0,0,0,0,0,0,0,0,0,0,0,0,75,0,15,15,0,45,95,30,30,40,0,0,220,0,45,90,0,80,0,0,0,0,0,0,540,35,0,85,155,270,167,236,15,15,15,15,15,15,30,15,15,15,15,30,55,39,15,15,15,43,150,74,71,65,62,32,130,19,15,21,21,128,70,70,15,15,15,15,227,15,59,122,67,235,244,15,15,15,15,15,15,15,15,15,15,15,15,83,15,29,36,15,72,67,36,34,48,15,15,141,15,44,98,15,97,15,15,15,15,15,15,182,49,15,97,105,127 +2014thru2018,140,14000US15009030800,"Census Tract 308, Maui County, Hawaii",15,9,30800,2250,1810,20,0,0,0,0,20,25,0,4,4,0,20,65,4,0,4,4,60,185,70,30,60,15,15,365,30,15,45,80,195,4,4,0,0,0,0,1140,4,80,50,110,895,445,0,0,0,0,0,0,25,0,10,4,0,10,30,0,0,20,0,10,65,20,15,30,0,0,65,0,10,25,4,25,0,0,0,0,0,0,260,20,35,115,10,85,110,134,27,15,15,15,15,27,19,15,3,8,15,17,38,3,15,4,4,36,70,45,28,36,18,23,120,33,18,31,65,110,11,11,15,15,15,15,166,15,82,41,49,167,132,15,15,15,15,15,15,22,15,17,15,15,15,29,15,15,28,15,17,38,24,19,29,15,15,34,15,17,21,10,32,15,15,15,15,15,15,114,29,31,108,13,40 diff --git a/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/output.csv new file mode 100644 index 000000000..acd005728 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,HOUSING_BURDEN_NUMERATOR,HOUSING_BURDEN_DENOMINATOR,Housing burden (percent),Share of homes with no kitchen or indoor plumbing (percent),DENOM INCL NOT COMPUTED +06027000800,370,1376,0.2688953488,0.0471014493,1380 +06061021322,985,5265,0.1870845204,0.0000000000,5395 +06069000802,136,872,0.1559633028,0.0090909091,880 +15001021010,723,2970,0.2434343434,0.0862619808,3130 +15001021101,449,1610,0.2788819876,0.0979228487,1685 +15001021402,354,1340,0.2641791045,0.0253731343,1340 +15001021800,355,2000,0.1775000000,0.0421836228,2015 +15003010201,504,1471,0.3426240653,0.0429042904,1515 +15007040603,238,1021,0.2331047992,0.0077294686,1035 +15007040604,328,1220,0.2688524590,0.0113360324,1235 +15007040700,635,2840,0.2235915493,0.0086805556,2880 +15009030100,84,491,0.1710794297,0.0484848485,495 +15009030201,194,820,0.2365853659,0.0000000000,820 +15009030402,555,3095,0.1793214863,0.0000000000,3140 +15009030800,385,2251,0.1710350955,0.0088691796,2255 diff --git a/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/transform.csv new file mode 100644 index 000000000..1eb4b6263 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/data/transform.csv @@ -0,0 +1,16 @@ +source_x,sumlevel_x,geoid_x,name_x,st_x,cnty_x,tract_x,T8_est1,T8_est2,T8_est3,T8_est4,T8_est5,T8_est6,T8_est7,T8_est8,T8_est9,T8_est10,T8_est11,T8_est12,T8_est13,T8_est14,T8_est15,T8_est16,T8_est17,T8_est18,T8_est19,T8_est20,T8_est21,T8_est22,T8_est23,T8_est24,T8_est25,T8_est26,T8_est27,T8_est28,T8_est29,T8_est30,T8_est31,T8_est32,T8_est33,T8_est34,T8_est35,T8_est36,T8_est37,T8_est38,T8_est39,T8_est40,T8_est41,T8_est42,T8_est43,T8_est44,T8_est45,T8_est46,T8_est47,T8_est48,T8_est49,T8_est50,T8_est51,T8_est52,T8_est53,T8_est54,T8_est55,T8_est56,T8_est57,T8_est58,T8_est59,T8_est60,T8_est61,T8_est62,T8_est63,T8_est64,T8_est65,T8_est66,T8_est67,T8_est68,T8_est69,T8_est70,T8_est71,T8_est72,T8_est73,T8_est74,T8_est75,T8_est76,T8_est77,T8_est78,T8_est79,T8_est80,T8_est81,T8_est82,T8_est83,T8_est84,T8_est85,T8_est86,T8_est87,T8_est88,T8_est89,T8_est90,T8_est91,T8_est92,T8_est93,T8_est94,T8_est95,T8_est96,T8_est97,T8_est98,T8_est99,T8_est100,T8_est101,T8_est102,T8_est103,T8_est104,T8_est105,T8_est106,T8_est107,T8_est108,T8_est109,T8_est110,T8_est111,T8_est112,T8_est113,T8_est114,T8_est115,T8_est116,T8_est117,T8_est118,T8_est119,T8_est120,T8_est121,T8_est122,T8_est123,T8_est124,T8_est125,T8_est126,T8_est127,T8_est128,T8_est129,T8_est130,T8_est131,T8_est132,T8_est133,T8_moe1,T8_moe2,T8_moe3,T8_moe4,T8_moe5,T8_moe6,T8_moe7,T8_moe8,T8_moe9,T8_moe10,T8_moe11,T8_moe12,T8_moe13,T8_moe14,T8_moe15,T8_moe16,T8_moe17,T8_moe18,T8_moe19,T8_moe20,T8_moe21,T8_moe22,T8_moe23,T8_moe24,T8_moe25,T8_moe26,T8_moe27,T8_moe28,T8_moe29,T8_moe30,T8_moe31,T8_moe32,T8_moe33,T8_moe34,T8_moe35,T8_moe36,T8_moe37,T8_moe38,T8_moe39,T8_moe40,T8_moe41,T8_moe42,T8_moe43,T8_moe44,T8_moe45,T8_moe46,T8_moe47,T8_moe48,T8_moe49,T8_moe50,T8_moe51,T8_moe52,T8_moe53,T8_moe54,T8_moe55,T8_moe56,T8_moe57,T8_moe58,T8_moe59,T8_moe60,T8_moe61,T8_moe62,T8_moe63,T8_moe64,T8_moe65,T8_moe66,T8_moe67,T8_moe68,T8_moe69,T8_moe70,T8_moe71,T8_moe72,T8_moe73,T8_moe74,T8_moe75,T8_moe76,T8_moe77,T8_moe78,T8_moe79,T8_moe80,T8_moe81,T8_moe82,T8_moe83,T8_moe84,T8_moe85,T8_moe86,T8_moe87,T8_moe88,T8_moe89,T8_moe90,T8_moe91,T8_moe92,T8_moe93,T8_moe94,T8_moe95,T8_moe96,T8_moe97,T8_moe98,T8_moe99,T8_moe100,T8_moe101,T8_moe102,T8_moe103,T8_moe104,T8_moe105,T8_moe106,T8_moe107,T8_moe108,T8_moe109,T8_moe110,T8_moe111,T8_moe112,T8_moe113,T8_moe114,T8_moe115,T8_moe116,T8_moe117,T8_moe118,T8_moe119,T8_moe120,T8_moe121,T8_moe122,T8_moe123,T8_moe124,T8_moe125,T8_moe126,T8_moe127,T8_moe128,T8_moe129,T8_moe130,T8_moe131,T8_moe132,T8_moe133,GEOID10_TRACT,source_y,sumlevel_y,geoid_y,name_y,st_y,cnty_y,tract_y,T3_est1,T3_est2,T3_est3,T3_est4,T3_est5,T3_est6,T3_est7,T3_est8,T3_est9,T3_est10,T3_est11,T3_est12,T3_est13,T3_est14,T3_est15,T3_est16,T3_est17,T3_est18,T3_est19,T3_est20,T3_est21,T3_est22,T3_est23,T3_est24,T3_est25,T3_est26,T3_est27,T3_est28,T3_est29,T3_est30,T3_est31,T3_est32,T3_est33,T3_est34,T3_est35,T3_est36,T3_est37,T3_est38,T3_est39,T3_est40,T3_est41,T3_est42,T3_est43,T3_est44,T3_est45,T3_est46,T3_est47,T3_est48,T3_est49,T3_est50,T3_est51,T3_est52,T3_est53,T3_est54,T3_est55,T3_est56,T3_est57,T3_est58,T3_est59,T3_est60,T3_est61,T3_est62,T3_est63,T3_est64,T3_est65,T3_est66,T3_est67,T3_est68,T3_est69,T3_est70,T3_est71,T3_est72,T3_est73,T3_est74,T3_est75,T3_est76,T3_est77,T3_est78,T3_est79,T3_est80,T3_est81,T3_est82,T3_est83,T3_est84,T3_est85,T3_est86,T3_est87,T3_moe1,T3_moe2,T3_moe3,T3_moe4,T3_moe5,T3_moe6,T3_moe7,T3_moe8,T3_moe9,T3_moe10,T3_moe11,T3_moe12,T3_moe13,T3_moe14,T3_moe15,T3_moe16,T3_moe17,T3_moe18,T3_moe19,T3_moe20,T3_moe21,T3_moe22,T3_moe23,T3_moe24,T3_moe25,T3_moe26,T3_moe27,T3_moe28,T3_moe29,T3_moe30,T3_moe31,T3_moe32,T3_moe33,T3_moe34,T3_moe35,T3_moe36,T3_moe37,T3_moe38,T3_moe39,T3_moe40,T3_moe41,T3_moe42,T3_moe43,T3_moe44,T3_moe45,T3_moe46,T3_moe47,T3_moe48,T3_moe49,T3_moe50,T3_moe51,T3_moe52,T3_moe53,T3_moe54,T3_moe55,T3_moe56,T3_moe57,T3_moe58,T3_moe59,T3_moe60,T3_moe61,T3_moe62,T3_moe63,T3_moe64,T3_moe65,T3_moe66,T3_moe67,T3_moe68,T3_moe69,T3_moe70,T3_moe71,T3_moe72,T3_moe73,T3_moe74,T3_moe75,T3_moe76,T3_moe77,T3_moe78,T3_moe79,T3_moe80,T3_moe81,T3_moe82,T3_moe83,T3_moe84,T3_moe85,T3_moe86,T3_moe87,Share of homes with no kitchen or indoor plumbing (percent),HOUSING_BURDEN_NUMERATOR,HOUSING_BURDEN_DENOMINATOR,DENOM INCL NOT COMPUTED,Housing burden (percent) +2014thru2018,140,14000US06027000800,"Census Tract 8, Inyo County, California",6,27,800,1375,800,105,40,15,30,15,0,15,50,15,35,0,0,0,130,65,0,65,35,0,35,30,0,30,0,0,0,130,70,0,70,10,0,10,50,0,50,0,0,0,70,55,0,55,15,0,15,0,0,0,0,0,0,360,320,0,320,35,0,35,4,0,4,0,0,0,580,120,30,20,10,10,0,10,70,0,70,4,4,0,110,50,10,40,40,0,40,20,0,20,0,0,0,125,85,0,85,40,0,40,0,0,0,0,0,0,55,0,0,0,55,0,55,0,0,0,0,0,0,170,165,0,165,10,0,10,0,0,0,0,0,0,133,101,51,30,15,31,15,12,15,37,31,26,12,12,12,48,34,12,34,34,12,34,32,12,32,12,12,12,59,41,12,41,13,12,13,41,12,41,12,12,12,38,33,12,33,22,12,22,12,12,12,12,12,12,87,79,12,79,35,12,35,5,12,5,12,12,12,122,84,29,28,14,20,12,20,79,12,79,12,12,12,54,34,16,30,37,12,37,32,12,32,12,12,12,56,50,12,50,35,12,35,12,12,12,12,12,12,64,12,12,12,64,12,64,12,12,12,12,12,12,68,64,12,64,14,12,14,12,12,12,12,12,12,06027000800,2014thru2018,140,14000US06027000800,"Census Tract 8, Inyo County, California",6,27,800,1375,800,30,30,0,0,0,0,0,0,0,0,0,0,10,0,0,0,10,0,115,35,30,50,0,4,115,15,35,10,15,35,0,0,0,0,0,0,530,30,65,70,50,320,580,35,25,10,0,0,0,0,0,0,0,0,0,65,0,10,0,55,0,90,70,20,0,0,0,95,10,30,40,0,10,0,0,0,0,0,0,300,10,40,85,0,165,133,101,31,31,12,12,12,12,12,12,12,12,12,12,15,12,12,12,15,12,57,26,32,41,12,5,56,15,34,13,22,35,12,12,12,12,12,12,90,31,34,41,25,79,122,34,30,16,12,12,12,12,12,12,12,12,12,67,12,18,12,64,12,83,79,32,12,12,12,52,20,32,35,12,14,12,12,12,12,12,12,89,14,30,50,12,64,0.0471014493,370,1376,1380,0.2688953488 +2014thru2018,140,14000US06061021322,"Census Tract 213.22, Placer County, California",6,61,21322,5395,4250,185,15,0,15,30,0,30,70,0,70,65,0,65,165,45,0,45,75,0,75,45,0,45,0,0,0,375,140,0,140,130,0,130,105,0,105,0,0,0,255,60,0,60,160,0,160,35,0,35,0,0,0,3275,2990,0,2990,290,0,290,0,0,0,0,0,0,1145,295,65,0,65,0,0,0,160,0,160,65,0,65,235,0,0,0,205,0,205,30,0,30,0,0,0,270,135,0,135,85,0,85,50,0,50,0,0,0,130,105,0,105,30,0,30,0,0,0,0,0,0,215,215,0,215,0,0,0,0,0,0,0,0,0,179,212,100,20,19,20,37,19,37,57,19,57,87,19,87,100,38,19,38,88,19,88,39,19,39,19,19,19,164,92,19,92,78,19,78,84,19,84,19,19,19,109,56,19,56,88,19,88,39,19,39,19,19,19,232,232,19,232,116,19,116,19,19,19,19,19,19,187,139,83,19,83,19,19,19,95,19,95,94,19,94,115,19,19,19,100,19,100,35,19,35,19,19,19,146,105,19,105,90,19,90,52,19,52,19,19,19,91,87,19,87,30,19,30,19,19,19,19,19,19,99,99,19,99,19,19,19,19,19,19,19,19,19,06061021322,2014thru2018,140,14000US06061021322,"Census Tract 213.22, Placer County, California",6,61,21322,5395,4250,0,0,0,0,0,0,15,0,0,0,0,15,120,0,0,0,55,65,250,70,45,105,35,0,630,30,75,130,105,290,65,65,0,0,0,0,3170,15,45,140,60,2905,1145,0,0,0,0,0,0,50,50,0,0,0,0,45,0,45,0,0,0,240,160,30,50,0,0,270,0,160,85,30,0,15,15,0,0,0,0,520,65,0,135,105,215,179,212,19,19,19,19,19,19,26,19,19,19,19,26,108,19,19,19,65,84,122,57,39,84,39,19,151,37,88,78,67,116,87,87,19,19,19,19,238,20,38,92,56,249,187,19,19,19,19,19,19,81,81,19,19,19,19,73,19,73,19,19,19,100,95,35,52,19,19,115,19,93,90,30,19,26,26,19,19,19,19,170,83,19,105,87,99,0.0000000000,985,5265,5395,0.1870845204 +2014thru2018,140,14000US06069000802,"Census Tract 8.02, San Benito County, California",6,69,802,885,615,25,10,4,10,4,0,4,4,0,4,4,0,4,55,25,0,25,10,0,10,20,0,20,0,0,0,70,40,4,35,10,0,10,20,0,20,0,0,0,45,35,0,35,10,0,10,4,0,4,0,0,0,420,340,4,335,55,0,55,25,0,25,0,0,0,265,35,20,0,20,4,0,4,10,0,10,4,0,4,75,35,0,35,4,0,4,35,0,35,0,0,0,35,25,4,20,15,0,15,0,0,0,0,0,0,40,40,0,40,0,0,0,0,0,0,0,0,0,80,80,0,80,0,0,0,0,0,0,0,0,0,69,70,14,12,5,10,3,12,3,12,12,12,10,12,10,35,31,12,31,11,12,11,16,12,16,12,12,12,22,18,12,20,11,12,11,12,12,12,12,12,12,20,19,12,19,12,12,12,1,12,1,12,12,12,49,47,12,47,23,12,23,20,12,20,12,12,12,45,15,14,12,14,2,12,2,9,12,9,3,12,3,28,19,12,19,7,12,7,23,12,23,12,12,12,21,15,4,14,14,12,14,12,12,12,12,12,12,20,20,12,20,12,12,12,12,12,12,12,12,12,28,28,12,28,12,12,12,12,12,12,12,12,12,06069000802,2014thru2018,140,14000US06069000802,"Census Tract 8.02, San Benito County, California",6,69,802,885,615,4,4,0,4,0,4,4,0,0,0,0,4,0,0,0,0,0,0,70,4,20,20,4,25,90,4,10,10,10,55,4,4,0,0,0,0,440,10,25,35,35,335,265,4,0,0,4,0,0,4,0,0,0,4,0,20,4,15,0,0,0,25,4,20,0,0,0,25,4,4,15,0,0,4,4,0,0,0,0,190,20,35,20,35,80,69,70,11,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,25,12,16,12,1,20,28,3,11,11,12,23,10,10,12,12,12,12,62,10,31,20,19,46,45,4,12,12,4,12,12,11,12,12,12,11,12,19,12,17,12,12,12,17,11,18,12,12,12,14,2,7,14,12,12,3,3,12,12,12,12,43,14,19,14,18,28,0.0090909091,136,872,880,0.1559633028 +2014thru2018,140,14000US15001021010,"Census Tract 210.10, Hawaii County, Hawaii",15,1,21010,3130,2515,520,210,25,190,40,10,30,190,30,155,80,20,60,555,385,70,310,90,0,90,85,0,85,0,0,0,345,200,4,190,135,0,135,4,0,4,0,0,0,245,205,20,190,40,0,40,0,0,0,0,0,0,855,840,40,800,15,10,4,0,0,0,0,0,0,615,200,40,10,30,0,0,0,80,10,70,80,0,80,85,25,4,20,50,0,50,4,0,4,0,0,0,90,40,0,40,45,0,45,0,0,0,0,0,0,80,70,4,65,0,0,0,10,0,10,0,0,0,160,160,10,155,0,0,0,0,0,0,0,0,0,176,219,147,112,21,107,40,13,38,116,33,112,43,21,40,166,161,81,146,48,15,48,62,15,62,15,15,15,143,80,10,81,118,15,118,19,15,19,15,15,15,100,99,32,107,34,15,34,15,15,15,15,15,15,196,199,39,189,22,13,15,15,15,15,15,15,15,168,111,30,13,25,15,15,15,50,17,44,92,15,92,51,29,9,27,40,15,40,14,15,14,15,15,15,53,36,15,36,44,15,44,15,15,15,15,15,15,43,43,10,42,15,15,15,15,15,15,15,15,15,114,114,13,114,15,15,15,15,15,15,15,15,15,15001021010,2014thru2018,140,14000US15001021010,"Census Tract 210.10, Hawaii County, Hawaii",15,1,21010,3130,2515,230,85,70,4,20,50,55,10,35,0,0,10,110,10,15,50,0,30,245,155,85,4,0,0,275,30,60,135,40,4,55,55,0,0,0,0,1550,170,290,140,190,760,615,40,20,4,0,4,10,65,20,0,0,0,45,50,20,0,0,25,4,55,40,4,0,10,0,100,0,50,45,0,0,70,70,0,0,0,0,235,30,20,40,35,105,176,219,100,44,81,10,32,43,37,13,35,15,15,14,56,23,22,41,15,32,121,112,62,19,15,15,136,38,40,118,34,15,40,40,15,15,15,15,212,104,145,72,107,189,168,26,18,9,15,10,13,77,30,15,15,15,70,40,22,15,15,33,2,35,31,14,15,15,15,55,15,40,44,15,15,86,86,15,15,15,15,111,25,27,36,30,91,0.0862619808,723,2970,3130,0.2434343434 +2014thru2018,140,14000US15001021101,"Census Tract 211.01, Hawaii County, Hawaii",15,1,21101,1690,1385,390,145,60,85,50,0,50,145,0,145,50,15,30,240,140,15,125,20,15,4,80,0,80,0,0,0,185,130,0,130,20,0,20,35,0,35,0,0,0,190,170,0,170,20,0,20,0,0,0,0,0,0,380,350,20,330,30,0,30,0,0,0,0,0,0,300,150,35,4,30,15,0,15,70,0,70,25,0,25,15,10,0,10,10,0,10,0,0,0,0,0,0,55,55,35,20,4,0,4,0,0,0,0,0,0,25,15,0,15,10,0,10,0,0,0,0,0,0,55,55,0,55,0,0,0,0,0,0,0,0,0,157,136,98,63,54,39,27,11,27,71,11,71,33,24,25,79,63,22,59,23,24,10,46,11,46,11,11,11,74,63,11,63,14,11,14,34,11,34,11,11,11,68,65,11,65,22,11,22,11,11,11,11,11,11,101,97,36,97,24,11,24,11,11,11,11,11,11,98,76,29,12,26,22,11,22,60,11,60,36,11,36,21,13,11,13,13,11,13,11,11,11,11,11,11,58,57,54,23,11,11,11,11,11,11,11,11,11,22,21,11,21,15,11,15,11,11,11,11,11,11,33,33,11,33,11,11,11,11,11,11,11,11,11,15001021101,2014thru2018,140,14000US15001021101,"Census Tract 211.01, Hawaii County, Hawaii",15,1,21101,1690,1385,125,75,30,0,0,20,35,4,10,10,0,10,4,4,0,0,0,0,255,140,80,35,0,0,125,50,4,20,20,30,30,30,0,0,0,0,810,85,115,115,170,320,300,40,4,0,35,0,0,25,25,0,0,0,0,4,0,0,0,0,4,70,70,0,0,0,0,35,15,10,4,10,0,4,4,0,0,0,0,125,30,10,20,15,50,157,136,73,58,29,11,11,36,29,8,20,15,11,13,3,3,11,11,11,11,78,69,46,34,11,11,40,27,10,14,22,24,23,23,11,11,11,11,117,39,55,61,65,96,98,52,12,11,54,11,11,38,38,11,11,11,11,2,11,11,11,11,2,60,60,11,11,11,11,28,22,13,11,15,11,11,11,11,11,11,11,51,26,13,23,21,36,0.0979228487,449,1610,1685,0.2788819876 +2014thru2018,140,14000US15001021402,"Census Tract 214.02, Hawaii County, Hawaii",15,1,21402,1340,830,55,10,0,10,10,0,10,30,0,30,0,0,0,25,4,0,4,10,0,10,4,0,4,0,0,0,130,50,0,50,55,0,55,30,4,25,0,0,0,45,40,0,40,0,0,0,4,0,4,0,0,0,575,520,0,520,55,0,55,0,0,0,0,0,0,510,195,40,0,40,20,0,20,130,30,100,0,0,0,50,15,0,15,20,0,20,15,0,15,0,0,0,65,35,0,35,15,0,15,15,0,15,0,0,0,70,45,0,45,25,0,25,0,0,0,0,0,0,130,125,0,125,4,0,4,0,0,0,0,0,0,103,132,51,17,11,17,16,11,16,46,11,46,11,11,11,21,15,11,15,20,11,20,14,11,14,11,11,11,58,31,11,31,52,11,52,24,1,21,11,11,11,34,34,11,34,11,11,11,2,11,2,11,11,11,119,121,11,121,32,11,32,11,11,11,11,11,11,102,83,22,11,22,21,11,21,84,50,70,11,11,11,39,22,11,22,31,11,31,19,11,19,11,11,11,41,33,11,33,22,11,22,20,11,20,11,11,11,59,47,11,47,40,11,40,11,11,11,11,11,11,60,60,11,60,7,11,7,11,11,11,11,11,11,15001021402,2014thru2018,140,14000US15001021402,"Census Tract 214.02, Hawaii County, Hawaii",15,1,21402,1340,830,4,0,0,4,0,0,4,0,0,0,0,4,70,0,0,0,10,60,70,30,4,25,4,0,130,10,10,55,0,55,0,0,0,0,0,0,550,10,4,50,30,455,510,30,30,0,0,0,0,10,0,0,10,0,0,15,0,10,0,0,4,115,100,4,4,0,0,85,20,20,15,25,4,0,0,0,0,0,0,250,40,15,35,45,120,103,132,1,11,11,1,11,11,13,11,11,11,11,13,61,11,11,11,19,59,53,46,14,21,2,11,68,16,20,52,11,32,11,11,11,11,11,11,122,17,15,31,30,107,102,50,50,11,11,11,11,13,11,11,13,11,11,21,11,16,11,11,12,74,70,10,13,11,11,51,21,31,22,40,7,11,11,11,11,11,11,92,22,22,33,47,58,0.0253731343,354,1340,1340,0.2641791045 +2014thru2018,140,14000US15001021800,"Census Tract 218, Hawaii County, Hawaii",15,1,21800,2015,1375,120,40,25,15,25,0,25,35,0,35,15,0,15,80,45,0,45,20,0,20,15,0,15,0,0,0,155,110,0,110,20,0,20,30,0,30,0,0,0,110,100,0,100,15,0,15,0,0,0,0,0,0,905,680,4,675,205,0,205,20,0,20,0,0,0,640,160,25,0,25,25,0,25,110,55,55,0,0,0,45,4,0,4,25,0,25,15,0,15,0,0,0,85,55,4,50,35,0,35,0,0,0,0,0,0,35,25,0,25,10,0,10,0,0,0,0,0,0,310,310,0,310,4,0,4,0,0,0,0,0,0,201,188,62,43,40,16,25,15,25,34,15,34,21,15,21,39,31,15,31,20,15,20,21,15,21,15,15,15,58,49,15,49,16,15,16,28,15,28,15,15,15,45,40,15,40,20,15,20,15,15,15,15,15,15,170,149,15,148,115,15,115,26,15,26,15,15,15,159,91,27,15,27,30,15,30,86,79,37,15,15,15,29,10,15,10,20,15,20,18,15,18,15,15,15,50,36,15,34,42,15,42,15,15,15,15,15,15,27,24,15,24,14,15,14,15,15,15,15,15,15,155,155,15,155,3,15,3,15,15,15,15,15,15,15001021800,2014thru2018,140,14000US15001021800,"Census Tract 218, Hawaii County, Hawaii",15,1,21800,2015,1375,30,25,0,0,0,4,10,0,4,4,4,4,65,0,4,4,4,55,100,35,15,30,0,20,285,25,20,20,15,205,15,15,0,0,0,0,870,15,40,105,95,615,640,55,55,0,4,0,0,15,10,0,0,0,4,25,10,4,0,0,10,55,40,15,0,0,0,100,25,25,35,10,4,0,0,0,0,0,0,395,25,0,50,25,290,201,188,41,40,15,15,15,15,13,15,9,4,5,3,41,15,3,5,1,41,53,34,21,28,15,26,118,25,20,16,20,115,21,21,15,15,15,15,159,16,27,51,40,140,159,80,79,15,15,15,15,17,14,15,15,15,11,24,14,10,15,15,14,37,31,18,15,15,15,53,30,20,42,14,3,15,15,15,15,15,15,162,27,15,34,24,155,0.0421836228,355,2000,2015,0.1775000000 +2014thru2018,140,14000US15003010201,"Census Tract 102.01, Honolulu County, Hawaii",15,3,10201,1515,785,85,15,0,15,4,0,4,65,4,55,4,0,4,35,4,0,4,15,0,15,15,0,15,0,0,0,180,75,4,70,75,10,65,30,0,30,0,0,0,100,70,0,70,25,0,25,4,0,4,0,0,0,385,340,0,340,35,0,35,10,0,10,0,0,0,730,135,10,4,4,10,0,10,75,4,70,40,0,40,150,10,0,10,50,15,35,85,0,85,0,0,0,195,110,10,100,65,4,65,15,4,10,0,0,0,90,65,0,65,25,0,25,0,0,0,0,0,0,165,145,4,140,20,0,20,0,0,0,0,0,0,66,73,36,15,15,15,15,15,15,31,10,31,11,15,11,18,11,15,11,13,15,13,14,15,14,15,15,15,50,35,15,35,26,15,28,24,15,24,15,15,15,35,33,15,33,16,15,16,3,15,3,15,15,15,54,50,15,50,15,15,15,17,15,17,15,15,15,72,46,14,15,10,14,15,14,33,10,34,28,15,28,55,17,15,17,35,20,31,42,15,42,15,15,15,57,43,13,41,34,15,33,22,13,13,15,15,15,34,29,15,29,22,15,22,15,15,15,15,15,15,57,54,15,56,18,15,18,15,15,15,15,15,15,15003010201,2014thru2018,140,14000US15003010201,"Census Tract 102.01, Honolulu County, Hawaii",15,3,10201,1515,785,15,4,0,10,0,0,35,4,0,15,10,4,85,0,4,40,10,30,95,50,10,15,4,10,125,4,15,50,25,35,4,4,0,0,0,0,425,15,4,45,55,305,730,50,10,15,20,0,4,95,25,4,40,15,10,75,0,15,35,4,20,150,55,85,10,0,0,95,10,10,40,25,15,30,30,0,0,0,0,230,4,10,50,45,120,66,73,16,10,15,13,15,15,27,10,15,25,12,9,46,15,9,33,13,22,31,30,13,12,3,17,33,15,13,18,16,15,11,11,15,15,15,15,69,15,11,22,31,52,72,23,11,20,17,15,15,42,21,11,32,14,13,36,15,23,25,15,18,48,28,42,13,15,15,43,14,13,32,22,15,25,25,15,15,15,15,53,10,17,28,23,48,0.0429042904,504,1471,1515,0.3426240653 +2014thru2018,140,14000US15007040603,"Census Tract 406.03, Kauai County, Hawaii",15,7,40603,1035,595,25,10,0,10,0,0,0,15,0,15,4,0,4,55,20,0,20,15,0,15,20,0,20,0,0,0,80,55,0,55,4,0,4,20,0,20,0,0,0,50,10,0,10,10,0,10,30,0,30,0,0,0,385,310,4,305,55,0,55,20,0,20,0,0,0,440,100,25,0,25,4,0,4,55,0,55,10,0,10,40,4,0,4,15,0,15,25,0,25,0,0,0,100,35,0,35,40,0,40,25,0,25,0,0,0,60,40,0,40,15,0,15,0,0,0,0,0,0,145,125,4,125,10,0,10,4,0,4,0,0,0,84,70,15,15,11,15,11,11,11,15,11,15,11,11,11,24,16,11,16,14,11,14,16,11,16,11,11,11,33,29,11,29,11,11,11,14,11,14,11,11,11,21,12,11,12,10,11,10,22,11,22,11,11,11,67,60,11,61,29,11,29,13,11,13,11,11,11,75,34,21,11,21,15,11,15,28,11,28,13,11,13,29,3,11,3,21,11,21,20,11,20,11,11,11,43,24,11,24,23,11,23,23,11,23,11,11,11,32,30,11,30,13,11,13,11,11,11,11,11,11,53,49,11,49,14,11,14,17,11,17,11,11,11,15007040603,2014thru2018,140,14000US15007040603,"Census Tract 406.03, Kauai County, Hawaii",15,7,40603,1035,595,4,0,0,0,0,4,4,0,0,0,0,4,30,0,0,4,4,25,100,15,20,20,30,20,80,0,15,4,4,55,4,4,0,0,0,0,370,10,20,55,10,275,440,4,0,0,0,0,4,10,10,0,0,0,0,30,4,4,4,10,10,105,55,25,25,0,4,80,4,15,30,15,10,10,10,0,0,0,0,195,15,0,35,35,115,84,70,11,11,11,11,11,11,18,11,11,11,11,18,25,11,11,4,11,26,34,15,16,12,22,13,31,11,14,11,11,29,11,11,11,11,11,11,66,15,16,29,12,55,75,11,11,11,11,11,11,15,15,11,11,11,11,27,3,3,16,13,14,45,26,20,23,11,17,35,15,21,20,13,14,13,13,11,11,11,11,52,16,11,24,25,45,0.0077294686,238,1021,1035,0.2331047992 +2014thru2018,140,14000US15007040604,"Census Tract 406.04, Kauai County, Hawaii",15,7,40604,1235,655,85,15,0,15,4,0,4,45,0,45,15,0,15,55,35,0,35,15,0,15,4,0,4,0,0,0,70,35,0,35,20,0,20,15,0,15,0,0,0,50,20,0,20,25,0,25,4,0,4,0,0,0,395,335,4,330,60,4,55,0,0,0,0,0,0,580,95,35,4,30,40,0,40,15,0,15,0,0,0,180,45,0,45,85,0,85,50,0,50,0,0,0,55,20,0,20,15,0,15,20,0,20,0,0,0,45,25,0,25,20,0,20,0,0,0,0,0,0,205,175,0,175,30,0,30,0,0,0,0,0,0,79,96,46,28,11,28,11,11,11,33,11,33,15,11,15,35,30,11,30,22,11,22,10,11,10,11,11,11,31,18,11,18,23,11,23,14,11,14,11,11,11,36,19,11,19,28,11,28,9,11,9,11,11,11,80,74,13,76,33,5,32,11,11,11,11,11,11,101,44,28,11,27,30,11,30,18,11,18,11,11,11,65,29,11,29,50,11,50,35,11,35,11,11,11,28,16,11,16,15,11,15,24,11,24,11,11,11,29,21,11,21,23,11,23,11,11,11,11,11,11,72,69,11,69,24,11,24,11,11,11,11,11,11,15007040604,2014thru2018,140,14000US15007040604,"Census Tract 406.04, Kauai County, Hawaii",15,7,40604,1235,655,10,0,0,0,0,10,10,0,0,0,4,4,15,0,4,0,0,10,75,45,4,15,4,0,120,4,15,20,25,55,15,15,0,0,0,0,410,15,30,35,15,315,580,4,4,0,0,0,0,30,0,20,0,0,10,25,4,4,0,4,15,90,15,50,20,0,0,165,35,70,15,20,30,0,0,0,0,0,0,260,30,40,20,25,150,79,96,14,11,11,11,11,14,13,11,11,11,10,1,18,11,10,11,11,13,36,33,10,14,9,11,55,11,22,23,28,32,15,15,11,11,11,11,80,28,30,18,18,74,101,11,11,11,11,11,11,31,11,29,11,11,13,25,7,3,11,10,21,45,18,35,24,11,11,56,28,44,15,23,24,11,11,11,11,11,11,77,27,26,16,22,63,0.0113360324,328,1220,1235,0.2688524590 +2014thru2018,140,14000US15007040700,"Census Tract 407, Kauai County, Hawaii",15,7,40700,2875,1930,220,40,0,40,80,0,80,80,0,80,25,0,25,50,20,0,20,20,0,20,10,0,10,0,0,0,275,115,0,115,45,0,45,115,0,115,0,0,0,160,75,0,75,70,0,70,15,0,15,0,0,0,1225,1030,0,1030,170,0,170,25,0,25,0,0,0,950,150,25,0,25,20,0,20,90,0,90,15,0,15,120,35,0,35,25,0,25,60,0,60,0,0,0,135,45,0,45,35,0,35,55,0,55,0,0,0,115,115,4,110,0,0,0,0,0,0,0,0,0,430,370,0,370,60,15,45,0,0,0,0,0,0,162,199,93,34,15,34,74,15,74,62,15,62,27,15,27,38,17,15,17,29,15,29,17,15,17,15,15,15,82,46,15,46,32,15,32,62,15,62,15,15,15,73,53,15,53,53,15,53,21,15,21,15,15,15,187,173,15,173,83,15,83,30,15,30,15,15,15,157,73,18,15,18,23,15,23,64,15,64,19,15,19,68,32,15,32,33,15,33,48,15,48,15,15,15,66,35,15,35,44,15,44,43,15,43,15,15,15,79,79,13,74,15,15,15,15,15,15,15,15,15,141,134,15,134,57,25,53,15,15,15,15,15,15,15007040700,2014thru2018,140,14000US15007040700,"Census Tract 407, Kauai County, Hawaii",15,7,40700,2875,1930,0,0,0,0,0,0,0,0,0,0,0,0,115,0,0,4,0,110,245,80,10,115,15,25,380,80,20,45,70,170,25,25,0,0,0,0,1165,40,20,110,75,920,950,25,0,0,0,4,15,80,0,10,0,10,60,45,0,10,4,0,30,205,90,60,55,0,0,105,20,15,25,0,45,15,15,0,0,0,0,470,25,20,45,100,285,162,199,15,15,15,15,15,15,15,15,15,15,15,15,51,15,15,10,15,52,98,62,17,62,21,30,128,74,29,32,53,83,27,27,15,15,15,15,171,34,17,46,53,179,157,29,15,15,15,13,25,67,15,19,15,21,61,48,15,17,15,15,44,94,64,48,43,15,15,75,23,23,41,15,53,19,19,15,15,15,15,107,18,24,35,72,115,0.0086805556,635,2840,2880,0.2235915493 +2014thru2018,140,14000US15009030100,"Census Tract 301, Maui County, Hawaii",15,9,30100,500,320,45,4,0,4,10,10,0,25,0,25,4,0,4,65,65,0,65,0,0,0,0,0,0,0,0,0,50,35,0,35,10,0,10,10,0,10,0,0,0,20,20,0,20,0,0,0,0,0,0,0,0,0,145,135,10,120,10,0,10,0,0,0,0,0,0,175,50,25,0,25,0,0,0,25,4,20,0,0,0,10,4,0,4,4,0,4,0,0,0,0,0,0,10,10,0,10,0,0,0,0,0,0,0,0,0,20,15,0,15,4,0,4,0,0,0,0,0,0,90,90,0,90,0,0,0,0,0,0,0,0,0,71,75,25,11,11,11,18,18,11,19,11,19,11,11,11,57,57,11,57,11,11,11,11,11,11,11,11,11,32,27,11,27,14,11,14,15,11,15,11,11,11,23,23,11,23,11,11,11,11,11,11,11,11,11,58,55,18,53,18,11,18,11,11,11,11,11,11,69,41,30,11,30,11,11,11,24,11,24,11,11,11,14,9,11,9,9,11,9,11,11,11,11,11,11,12,12,11,12,11,11,11,11,11,11,11,11,11,25,25,11,25,10,11,10,11,11,11,11,11,11,59,59,11,59,11,11,11,11,11,11,11,11,11,15009030100,2014thru2018,140,14000US15009030100,"Census Tract 301, Maui County, Hawaii",15,9,30100,500,320,20,10,0,0,0,10,10,0,0,4,0,4,40,4,0,15,0,20,30,25,0,10,0,0,15,0,0,4,0,10,0,0,0,0,0,0,200,4,65,15,20,95,175,4,4,0,0,0,0,10,0,0,0,0,10,20,0,0,0,20,0,20,20,0,0,0,0,4,0,4,0,0,0,0,0,0,0,0,0,120,25,4,10,0,80,71,75,27,18,11,11,11,18,15,11,11,14,11,10,23,11,11,23,11,14,25,19,11,15,11,11,20,11,11,10,11,18,11,11,11,11,11,11,62,11,57,15,23,53,69,11,11,11,11,11,11,16,11,11,11,11,16,25,11,11,11,25,11,24,24,11,11,11,11,9,11,9,11,11,11,11,11,11,11,11,11,62,30,9,12,11,59,0.0484848485,84,491,495,0.1710794297 +2014thru2018,140,14000US15009030201,"Census Tract 302.01, Maui County, Hawaii",15,9,30201,820,605,75,40,0,40,10,0,10,25,0,25,0,0,0,85,40,0,40,10,0,10,35,0,35,0,0,0,100,35,0,35,65,0,65,0,0,0,0,0,0,40,10,0,10,15,0,15,10,0,10,0,0,0,310,240,0,240,60,0,60,10,0,10,0,0,0,215,0,0,0,0,0,0,0,0,0,0,0,0,0,15,10,0,10,0,0,0,4,0,4,0,0,0,110,65,0,65,45,0,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,90,90,0,90,0,0,0,0,0,0,0,0,0,99,113,49,36,11,36,15,11,15,30,11,30,11,11,11,48,34,11,34,18,11,18,31,11,31,11,11,11,79,34,11,34,73,11,73,11,11,11,11,11,11,35,21,11,21,21,11,21,24,11,24,11,11,11,88,84,11,84,31,11,31,17,11,17,11,11,11,100,11,11,11,11,11,11,11,11,11,11,11,11,11,25,21,11,21,11,11,11,20,11,20,11,11,11,67,45,11,45,49,11,49,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,78,78,11,78,11,11,11,11,11,11,11,11,11,15009030201,2014thru2018,140,14000US15009030201,"Census Tract 302.01, Maui County, Hawaii",15,9,30201,820,605,0,0,0,0,0,0,15,0,0,0,0,15,10,0,0,0,10,0,70,25,35,0,0,10,160,10,10,65,15,60,0,0,0,0,0,0,350,40,40,35,10,225,215,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,10,0,0,4,0,4,0,0,0,45,0,0,45,0,0,0,0,0,0,0,0,155,0,10,55,0,90,99,113,11,11,11,11,11,11,23,11,11,11,11,23,24,11,11,11,24,11,47,30,31,11,11,17,81,15,18,73,21,31,11,11,11,11,11,11,91,36,34,34,21,80,100,11,11,11,11,11,11,11,11,11,11,11,11,20,11,11,20,11,11,20,11,20,11,11,11,49,11,11,49,11,11,11,11,11,11,11,11,85,11,21,49,11,78,0.0000000000,194,820,820,0.2365853659 +2014thru2018,140,14000US15009030402,"Census Tract 304.02, Maui County, Hawaii",15,9,30402,3140,2205,185,0,0,0,10,0,10,125,0,125,45,0,45,175,90,0,90,0,0,0,85,0,85,0,0,0,235,150,0,150,10,0,10,75,0,75,0,0,0,185,90,0,90,10,0,10,85,0,85,0,0,0,1425,1165,0,1165,245,0,245,20,0,20,0,0,0,935,65,35,0,35,0,0,0,30,0,30,0,0,0,90,0,0,0,45,0,45,45,0,45,0,0,0,230,100,0,100,90,0,90,40,0,40,0,0,0,155,155,0,155,0,0,0,0,0,0,0,0,0,395,315,0,315,80,0,80,0,0,0,0,0,0,167,236,102,15,15,15,19,15,19,84,15,84,70,15,70,88,59,15,59,15,15,15,71,15,71,15,15,15,139,122,15,122,21,15,21,65,15,65,15,15,15,93,67,15,67,21,15,21,62,15,62,15,15,15,218,231,15,231,128,15,128,32,15,32,15,15,15,244,62,49,15,49,15,15,15,36,15,36,15,15,15,57,15,15,15,44,15,44,46,15,46,15,15,15,155,100,15,100,98,15,98,48,15,48,15,15,15,105,105,15,105,15,15,15,15,15,15,15,15,15,167,148,15,148,97,15,97,15,15,15,15,15,15,15009030402,2014thru2018,140,14000US15009030402,"Census Tract 304.02, Maui County, Hawaii",15,9,30402,3140,2205,0,0,0,0,0,0,15,0,0,0,0,15,70,25,0,0,0,45,360,100,85,75,85,20,275,10,0,10,10,245,45,45,0,0,0,0,1435,0,90,150,90,1105,935,0,0,0,0,0,0,0,0,0,0,0,0,75,0,15,15,0,45,95,30,30,40,0,0,220,0,45,90,0,80,0,0,0,0,0,0,540,35,0,85,155,270,167,236,15,15,15,15,15,15,30,15,15,15,15,30,55,39,15,15,15,43,150,74,71,65,62,32,130,19,15,21,21,128,70,70,15,15,15,15,227,15,59,122,67,235,244,15,15,15,15,15,15,15,15,15,15,15,15,83,15,29,36,15,72,67,36,34,48,15,15,141,15,44,98,15,97,15,15,15,15,15,15,182,49,15,97,105,127,0.0000000000,555,3095,3140,0.1793214863 +2014thru2018,140,14000US15009030800,"Census Tract 308, Maui County, Hawaii",15,9,30800,2250,1810,110,4,0,4,30,0,30,75,0,75,4,0,4,125,80,0,80,15,0,15,30,0,30,0,0,0,160,55,0,55,45,0,45,60,0,60,0,0,0,210,115,0,115,80,0,80,15,0,15,0,0,0,1205,995,20,980,195,0,195,15,0,15,0,0,0,445,40,20,0,20,0,0,0,20,0,20,0,0,0,70,35,0,35,10,0,10,25,0,25,0,0,0,190,115,0,115,45,0,45,30,0,30,0,0,0,15,10,0,10,4,0,4,0,0,0,0,0,0,130,105,0,105,25,0,25,0,0,0,0,0,0,110,134,56,15,15,15,33,15,33,47,15,47,11,15,11,87,82,15,82,15,15,15,28,15,28,15,15,15,61,40,15,40,31,15,31,36,15,36,15,15,15,82,47,15,47,65,15,65,18,15,18,15,15,15,159,175,27,168,110,15,110,23,15,23,15,15,15,132,34,29,15,29,15,15,15,24,15,24,15,15,15,42,31,15,31,17,15,17,23,15,23,15,15,15,120,106,15,106,30,15,30,29,15,29,15,15,15,16,13,15,13,10,15,10,15,15,15,15,15,15,57,48,15,48,32,15,32,15,15,15,15,15,15,15009030800,2014thru2018,140,14000US15009030800,"Census Tract 308, Maui County, Hawaii",15,9,30800,2250,1810,20,0,0,0,0,20,25,0,4,4,0,20,65,4,0,4,4,60,185,70,30,60,15,15,365,30,15,45,80,195,4,4,0,0,0,0,1140,4,80,50,110,895,445,0,0,0,0,0,0,25,0,10,4,0,10,30,0,0,20,0,10,65,20,15,30,0,0,65,0,10,25,4,25,0,0,0,0,0,0,260,20,35,115,10,85,110,134,27,15,15,15,15,27,19,15,3,8,15,17,38,3,15,4,4,36,70,45,28,36,18,23,120,33,18,31,65,110,11,11,15,15,15,15,166,15,82,41,49,167,132,15,15,15,15,15,15,22,15,17,15,15,15,29,15,15,28,15,17,38,24,19,29,15,15,34,15,17,21,10,32,15,15,15,15,15,15,114,29,31,108,13,40,0.0088691796,385,2251,2255,0.1710350955 diff --git a/data/data-pipeline/data_pipeline/tests/sources/hud_housing/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/test_etl.py new file mode 100644 index 000000000..920f4f127 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/hud_housing/test_etl.py @@ -0,0 +1,20 @@ +import pathlib + +from data_pipeline.etl.sources.hud_housing.etl import HudHousingETL +from data_pipeline.tests.sources.example.test_etl import TestETL + + +class TestHudHousingETL(TestETL): + _ETL_CLASS = HudHousingETL + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "140/Table3.csv" + _SAMPLE_DATA_ZIP_FILE_NAME = "2014thru2018-140-csv.zip" + _EXTRACT_TMP_FOLDER_NAME = "HudHousingETL" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) diff --git a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/NRI_Table_CensusTracts.zip b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/NRI_Table_CensusTracts.zip index 0a2c612979e49641c163f3faad48fd01c4dced59..11d182d086a8c3098b89b4b6e4dc62cc43e06e75 100644 GIT binary patch delta 57193 zcmY&<18`nV`*+mXXd2sUY}?iyvr(hQI&sq2xMSOD+}Mq6Ck-1rU!NEAf4`YCJA1C( z%fD-P=j@#GJLsf)Xd)GPXc%k=2ncux6AeU7j5lwY(I*Iqf*&vt_z;BgL_`1r1oX$= zYtzoYM-x{MBnU{DBWMVSe>JC_>j{MNDOv6;?45lAB8?gE@A{^eBH3JA-lT*I>TUT= z!^IqyRrdJ2igFG$w`arQQI+9h7F7OXA5{j(_>{~o%?rbx-*mg~LGL%Kz)S4xh49U zgOo`&U;9cPjh-*i-fy;Zfcx`Vhxg~y*nKCZ2}Kr%H8~(J*b=A&+ErP72(9i-qHP`_9BJvK*|2r zMQRY*Nze2C(fZAa@auL<$=J%aj{$!si$M3b56|Z7(0waQ68k>fv+Nq;vP!blCOu^X=uVkNJH& zp|4JCO60fyBYNGOc)2`X`gEV<{dx;?2XxL;`(|HPblW#)|HHTLbz?0AzIbuDF%k4? zA!ahN>fUzww`!jjVqXvt>t_(Fl*;=G-oMw8=r|I)g?fAm*vOEV!; z&Ov)>f%3_8&B^q!@3nhP7)i-J$$Jan{$$Ue+3hVfCc`XE@=N++u}}FrK6=ynuQCv` zz5MlmH2v2{fz1oA2dAg~bqBz`&4@qq!d(a$d;Kq~`^j|49K*< z>;0p?$D>!T2W!D6S3y2skFL$zzu|7*dr_{?_RJvWt;M!()q`{f8o4s{Ka-bJnQu~2bbR_ti;Id%h_V) zf89JNc;x>3@=vtSekuPKjQ>V#U&*rps<0C9ux@jI=Ge9Q$oNkw{VSWoz=X8hKlOBL z)yngK)GF!jYUvWR$@_Lp)@;9RY&N%b8 zC(f~LX?gYc%eUS4r|#h6#F{SD3*Y;{g%taK9s7R8GRxAPC6@lSPV#;?1f;)h*8tCB z-ETnRz2f1+;+LF`oMw`fvQ+CR9r;DPLzegAIK7&UWU$^G9Oxb(d*Gwe4!WQUosllT z8$9>9E~2Rhjg^``J(LK)|1o;s2VRaR-#0g3&uiYlmCIgO72T%z#t1(2lvTPH>xjvg z?OQFDnM9oiZ7k*+`gmlq>Cf}KR_U0Hkd>4jqq?$t0W&PJ>m_sp0%}feeKTS)O^216 z0@3Gsu2ctx-U>idG}t!%rhRt`c*yK46>Ov%RJ&={n?ai!j!MDHrR$$wqt(^k))Oli z55mwt!zb`9@QY9`vU7Oce7_ZbKkk10Ya_@0IcRS&HQuMJDYOh`QJ&}B=fkbB@ z5QJ&)ha##glMXG6l3H7gvFW%h2`pBo&f}3b&1!5B1>BBb-9LA~ooseK*Sz0OzF+0M zJpgZy%0q|5Z!OhELsmUuKlC@H1;rIKP z$)>i-Az_d*=i{8%lxCzK>AEQlThJtysoWR+m-(wxc{?smnPiu~>sXV5!Jtc)kgAYZYR;J)> zkiUf=)=X2-m)WYF-1nc`3U)UFsGHkS_U-#giJ@-1SiaHV4KMV}V=rWjBUbC&jO^P@ z-#M7)vG?2j`*H{0_xHC&;nx!2bryJQcL#vSvCX%KFDP5U`vvfHF?8_?>t0GXBRwz9 zSmyKSzINw*fGa;Lc_IlbF69(Fbjp6XF8-VmvAm)j`v)z|-iI98@m% zrE))=3o{|C0!Dp;R$SiM99K!d5xhq~!QTy?sme*4)AYhw@$GZa4q&UzlXC}xO%E3f zJonZHj0CX^{R`6=hETcIWPEOB5D=q5!ti#JomQcZ&V}80)9}^0lRvPKO$W+Z)!H*W z;umP<$-%jcNwd`|gd{B^@3W#2qdJyZ71Larc>Pp?LB+$W02!H#7^p^y#8Zb9XM#~)e4raM8= z^)pcIPASvRCoBy#_z;a4M1UYaqd`+HDqeYlE|vpk{=(&x?ham?+eQ$ z(3#(}lIJu+Alh4k#h;7+fZm=@LM6CYxdXBH2RKxdisCik`HH}awq8f|21}xXbj4zFFbJw6Zpmk}9X-f4v`v=D z(uv2&Gc+j9qv8nZ`IL&4uRE313AJCS8YHngFRo69qGCe6fQv`{&$sAk^%s*a_V!$T z5koZ8Ff7t?0x@||D%avH@2FW5kKqQbJm9P5o1N4Pz2&a!0kM#@Eb@9jDBBO+W)5oL zN#G#&dbD}JOn;hvT3j)zY(@(&uKEi{{;$L@MP0Y7Yz-6-#O8$i$lOB3M3cTMn8GP} z_+S&NgM)}-Evq&pPvP`<*>1gscBj6GoMiP90lJG>zLYj0c5<`qRZhIUF>YdW{j$E1L`-)RaLyQu5Xn*A{oW z;~!3WSxE*hCayKW=CvCpT6Rr>&qOF8@W&a}E#_b@(RN;zV?0W1$DW2Kzva*oH(gp9?m9|7IP-kgW)Ic-1yLabf*!!B*l2s*dOq;#lV5DNSniy0pMg zAzvjJ5kqkz=_X=Orx->8rQ#eNPCim{AE%Dq9b>hnQ)-vZ4*YcfIW+S~Js=e^j1B)= zT6$T?b8qj)FrD%dNB1y(b=y}P#Q;J4U7Iy40!S(W?Md!&j2>?W&(Aw_dwd*dUl@f& z-S9l$-t&=WOAEH@JRUhGwobY}I%5dzDKhZyVLOdrxn-(D;dZqaY$yy!b;|2$Ff)e5^23EzU>c@qmFWqt12W)!hK@P3GiJ=EKw8t3$OS?JV|qD;fw z)q|Bk=uktYD6WlhLtWjp_C5c|uDv0j6liF5gLSjGcqXhi^*wQ(A0C9Sv(eo^D6jgV zQBm>Zn!qCBo2n2+;oQPDm@$jit|VMF5^;UhWQ2>z7HcR%d&XAxlddZfriU1QUqNlx(=i zu0kiFKp*k)lGfTsSx}XrwjhN+zu;7&E*X+qp)PjaldP7^MLFVH!;b8u-_GS6j-lGx zbiO3ANT-(`WG%s7ZQCfS9;)cb5Av`=2xhA_9K3b9Id8aPIo{Hb;=d6MQURWYlkWVt zhQUO^MUAAxp>f+IskIAQQq2}UpsQWS3Q3w3d z+O%@E0%1hOtE9G$+WH-tK!)q2j(SBoGi>Q&bt*L{m<}aTwGR(7>lTP<}?_p{-etkqSz^pZ;2D8&sq;jlL$q;j&I zin@@V&$x>%(3Yqdmj#SZWoK8PEJIW@3q*#oGoAe_!v?$1c`C_8M)wkSl-DK6^pR29 z2dXt^&KRsW57s8efLU5CLhzb%hjNt04IZN$M#abRsXc4)mTa608%UcaC|2eoPbx1# zsTtI%-_uQ2dw<}Rl_y(=Cv6v+ij9-k=_7E4e(qcQLt2urG6YRPFkMW5tWT3GMZ@f+ z+^ghE#y)FrOXj~-tfG%QaFxos_YN*g1f*pjST%pk;JDZ01+wOzX8Vs{)XJxz9+bzO z8$hDpXMSX9&$snV6X;03os(RbJEWZ}Y*ZoPn?P6eXA46WQCSjnkjZc`3 z-y!Tzko;y?UBt@Ush`%XWn)jItx!g=5~3OR;l>$R6qTltZK=!?rY4DVSiB)k6Gj0P z#=m$T*z)nWI}k7gPvkn;X1p{H8I=D48cEIer=ohK5?Z%<#&%Vl_6e=^2r75!h9(z% zs{ehQfreTo6?0;!;%|)(RQZR-e)w+|rxj2TovOkPKgNBoo=lPi)PJrLhC5S@-=B_K zZh;8De@wFkCnWnJvuo#u$^4$a{49dTSqE9NXZeWBz5@J){&Cl&aiP{7w|}WWr%xv* z4zbaYS!}A#U5}i6uBr;NAFrN-TS)H+lj;1A9@y5waO_QHn^_Xh@)DRRdZ zy+Q&3m?h=t$+S$V39@sMV%kL>dn$9uqs4S6T0S%tHT@dIo2h4RA()ms{Zfh?`(=|* zu13I=^QwnHL7cmXbVoAX*=(Y9MIId|Z3G@n8RBpD+Juktu!AavM%ds-iCYT_@2}Y9 zDVCn4#Fdy(RK@rs>&FRmN*G=g@UUT;zN8iu_IjV_6Z>9%_0RspvgI@kGN z4FMSf9W99>)!E?K`b|SKxfm$>U(#$JNUQ<+5q@f`e8hUFXY26WUx-_zlVv;_J@&9d ze~^Yfyzy#wzC-=qM~Uxu4K?*Ml+CpFI6BiHrZt&k43DX|`)!2%(e+M3Os)E$ieCx0 z6lQWfzSt-3HAu{m9lJvV(IYVMwc1fP5+c~b$S0LZSe3m|Jy2Hjx*^izVjyHwe_#wq z(IiJRQJ0vNULHVLRPZU1QZ5i2n4xR>4iauN%vHi)8&}6y&X-h;)Dm2D5Q7ys7L z)zJwZT<2r;GdVffeIaM=N=U)r2+yRNSvD>FkG~hXtuG-ZZm5M0=S4L5uIW$Doc0VduybHnq%zI1@7 zd7b&d3LVOiwkYmVL=YrC4t_n{Xe%yUQR@d6qDHOapB|GQh$x)7tBH)!8%sEc&Hbn% z1ukIAK!2yH8*^G|9^|`6HP0?B$K7PFA1!hlv*~}E95|d`vos8oMFwOKwhW$UovV}S zz%=7m*weEv;xQ>QhIN=|a&ABw3sWyq$zHln+*}XIw$NW(w@b^ufFqYa#xBFOg6tc; zdd+7cS9~&?Oet+2A#4F%LOK%K3KD}VMHA|0Da1&hwvOO&g*Z=&6}1>#9?3fCc+UCg zBWR0!L0L;lRXL6=a`fc>BgqZjfo#&jYZodI;dGDa=bZh4fuR zN+{2?!Q6B8r^gAlET29q5ewn)=JE|6Y><4daa?iKu$D<=;vly7=&#)uhoG?l!=kgx zP1`@`+@Md_>1#{9*AWgw2ZBlOe>~0?V>Ut{Uji_;YW#%nRe#7++2!%E`~E^VD?!UY z!|-a}UAMiFopbbI<^KkJ-L7UVfg0VK0kxjs+`Bbo$|9JIj9Dbh&?j5a0G=!#9nti!az$xGwS9rD_OC5adk48c%I~zrX_q{nd-{a|t6fET>H2 zTB8!^+GzKhyo$I3{GgeYVU=@OaXxHAA(`1qC?$`w5A3-&kL?5carc*_Qy>f5n&P$- zA?mvc(wcf3?IUw2$xn#2DXyg6k_es}_yolQ^|OIi5&Ov%aD0QsGx{*N!*h$r5*B?5 zWLav~pgx2#C_x}U-I$?SXqaa?W8;?{{kHF5C}f1tK>H2EzOU@H&(~x7qN?oLgai@6 zoT5*xIwq;vpL9KQbA^A?q^2EJSj{req~U1f_IQ1xv@!~dFP)oCnK ziYUzdnD&wSm6htcE1pi$hLw|E@Af%)YpNWcc2G&Sc-#u<(@D8=w{GM@TSl)W+32)* zGD4wu4tB%Zz?3*)I;hFYoX88z4ku|sBVUxRj8|hC&t#&LkG#}}lH1?P_4IkY=ZeEfA*C+~%aq``WSx|i{iz&n*VAv0+aE1f};^)RqAJFoGLo1 zZBzw7GeCw|3;hp7wx-N4pPJw;$xQ+J4}~}E9K#yh8uFufoQsK>n0Bn&^4O?+N0;EvA{l0sSsZ}K2B|sU8 z#Jb>*k+8haxMK9432Ka&u_b4nadkoQXUpi|niJsP0ga@S%2t$GM0wUXM87 z1H|oo#tj5p4isvBbxGZ-()nZ)je@Eys5zIMampue(yVgt9o2^m^=UJLXe?1hr)tlubq11Gmz(V zgtR?sZB1-?9XV#pX361~^R0FD5vMl6#n=j+AW8I)HdKxtu@f6+VUMw;C#!yR-|&-V zQK8){mCe*XCXV3FOj6I!NJH}}Y;lJ7;QWnRLhv$|pwmM1G%5ek^tv8J;QKN_x-!PM z)}FS&E#6q?2{y&%!?eI~W-2I=>3uT7#-*=-%}0^2XuP1UmmfcY!m+B`lT%OH>YM&L zO*^5+RiYAMV}KY7K4?n`sKM1kQy}bws!1SEyAtrfqhh+AUqhUxo6z`FAk#mK+OqVg z7!D~m4XV3rFPN%sLziph(j5_yBB~UU67HcX>q3c{%76-mwbl7y#Ss>f8ft;qwbk)M z+xTv@ZMAv{6ER04F~ewt`$ud|MSJXL?qG#0{Ox8?8|9+agZ(+0gm65 zuGXi;5fO9O>zTP1yZ$?Yw;SB{UqXsDDiO!tN+hJF^KI7Si{IV+_}1uvZml^R)Yl`S zJUZ9tLHkGV6Ungw+Or;30d(BT%%Ny@NU3rCW&AwE`e13BW5dYEF1#M1=1IEe;*ym- z1syG;dgoE8?Z)%;2|J#H8+B{4uND!Id_7WSE?W3Z7uBcryawUqp3R^JpWbh7SBXDuMbq?gcYwfCdsTK z`GV@Q#XLdj(De{NFBwLGcrPu`*TEHU{accRu0cAF!>GCKb9`q#k}WkU{y50-S^`!l zI!o(FRJV%UphDcZS51~iJ!%crVh*SJE&j<;(O_sImjo>&v`ZH9g)Nm6ge`_UjNiny z=OZ@3;nhItdQy`3S-y{B8LH^c4y;v<%xNItJUkvNM1vpFJGS|2{K0xlqgW+t-S{cAUf#h6T>^vg$!kPdWB%rCW+HR zDCRKM+fn7}f1Ojx{pLhSY>W%FP6_hHGZmREL;A}3=}p%>0Ls?`6*g*H8nU_D?Eol_JEuIB)5Kmewo9%Q zAo@e;TqN9;jSRlyd_?ArKeoJk2MVRb=i)IllvOSunrJ-5T=dRX=R_?|8&?0P4K6j7 zM1oh0iYD*MJgIjfUwbC+4TS&-Tk)B5fHuXzX0XI1<(L;2C54!62KTOe{Ls&U+6(#? zs*p|WU@f*$o)D!ON?V^V!^3FEuVOK`m-F=E-$tfI zqD#d9+AvLd#Pm>_bh+5p#*ED5ja*f2-*;vSdcUFs}LXDhF{^O7#Fp;v+E5QNO{9oG$XiMH!*-O zfe>1}#!U&NSn@%GNuN^x;U-iexyG1jFCqridgqDOn>iuh==GC}Pbj^UQg@01XAG!^ z;>zH-xKGoets`d4HKGdNf12yEUvnRXIsgaKl2JM4_9}$tiJ34GT`k~zHL`ockA(D) z_M=OsdLdG)i1JIALGL(zK8QRfq=l0WzJ3X~##r#@$#GmC)J~J{EruPWqC};j+(`i1 z(BmUmmej_#V%VIS!ji*MmZ{WPPKdHk>$~e)koY4<9?|N@9HV035bQpGE_Kghx)!_- zFieHGH~xJ*@5Vy}j^BmR*!+0SCN{r?6R_2PgItCl{&2I3Yt5qU3d$#i61DunBH}1h z#wi45jX3iER&PR|Y&GW9C#bwwun7b3Uoo4b^z^_({z)#5wZBT99XiR02c$4WYlOLUwHzXhxwYz5UdRmp2LT<09X0v&M2cb)1h3K0X^@I%7V9h z(2C(_Y8j(=vd0uO;{noa4+wx&g-`HklILQOHWT@?#@sA4?a}QguC}iWxl=O7<;-O@ zLCsv%*92HrKE@LXeWRueTd0L=H`$&!Szk#t9>AXf|8 zgK8Nf4*4J$r{655TA6+?IttIQk7*|)Ia7<&FYc~6s~S|yS!4XtA!Hl|Nf3vjQC)bC zT}jIQ0lk1Fa8J}vv}GkXzV;V}^s?x#*Qw5ev|Flq&eB*ChV7}z9rr}j{y2ep-((O* z3%e8}zbBK_+CR7A6s17+p25M#=*|qdz@n%{F3x1vpaaS4>nTAx`%)_vNX`5+u|pa? z>E`7hNFN$F14iOi@(R>$@chR_BGO5SOun*zL)xuWP%Z$F2bBBBi_70FS5ZN^ z)g*LbCIl~y6Gwv>Z&xqjYRJ5HJv{U=$CM|z8#;bu8A-IilbYzq;8l3W-)GbheY$*L zYhXWWea;M`Gu>&;+fK)e;D0#HrLD^IuA-^Z!TXwPQeRvcssZu)r+Q#?SJ+xu!L1ZC zw`gAS4*s8+o2fY9`^Ndi2b=L-SWM#J9jgyt_7;9zK2F$O{30g0os?Tzj7|(vwzx~O zb~0T|9FS+OFfV@|MT<_2`y5Nq*{zVcM?m@V!tPMnNwBaH^#au{j~Po|={;SzKMSpR0kIS0ml|#|`s{^2}@GNB;C$@n5QD@q30S9<{O?;{YC$m>3%E z6t!SB8m(j7Wq|c{3bm;@Z=+TMPqrMpSogfm$0VReO%x6 zKqV(I+2c(YL~8osdm#>KwPpZDPhsmEh6coFsuK4%pit9)14UxG47M3Q>v!w)F{7sA z`E(J<;9Hxt4}$`#F|w<e8AZU>53Gbfm_zgRCW&}Z{uHt)&(n3!Jdt36h5&x2i;_{)6FEweRc8KN zO4%+l@NJF&nNdS!y(gL)8e28TvVbhDkZ!&L)RXcV1|M6za=bYg&Zr{@p32ocD30K_ z*8Fb*Ch*{KB?jNYdP|DkAgWHJ*Bk-7cejnXOFKh19)wf{L9=65yaWIADAahvm!SiZ z{2!|9RAPg_raE4p>!Do<;RaGIemfb0=I-v*+VW~VZz=Sp?i9u{Uy_8OLdg>kT>mW zrHXLtGix=XFJ@pKxH%>Mh{OqV1aU}S@Q060G-+iR;@3xo)@xaR=CmpXsdh6X>aIpF zfSy2k_nU?JVgAvP+|haUB`r49jSdp`pBTJPv-m%oa5z@5$rgM;T8#AmSB&lXn9VxMD=uIoT>@4uoaK+VHPSR^bMA&eFAD!Ed4Z`WQ<(k(F z)tr_8RWzcZc=Tw!g8U;WN}N5HoCeya388Ig*dP);OFM=FM=oIlTc9icre81F2XPY@2@29%{~5MJza8ahwk>mMP&#C!3qZ^ zM&T(IB0i$1!u1*bLdp@;2U#NW?9?B6mrW%u>)Vr1;p_r7O|4}eBEa17#f^G>xH(&eFuHvD1QM1-3ZdVzDSvgjF3 z48mLL1v$Q=_Ld{Y?Fal4lxWH6@Pi{3QF({bH`pEK0f62>ggaMKt=w1} zaY5m#1uML#=K-VurTz0hceAD`gxE%wm^hI*~3x28p@76PKUo!OM;Qzs6*bZJ`)z$O?pC z?3}|>*{8$y&^ejaga9-OC3LS8u6Q-+w6mLZHSCI8iK=x8Du#*4IY}M6G;CSi;TRkd z259BdHMNcHV-M|)$}lDG%arbVemfqbAdP^>s;V}E(#4Cu4~iy9bB}u2X$T3hlp*Np z1oF@<&oSShP+635OcSh$QWjE0JVI)*BoV5`D+|)Iql1D#9|08j=oM&U-r^Frm|1Zd zbh$>6Z*TaSoY)%?)y@zn#1JkwzdYTl_jy?Cwjcu1ESBr%4@vXXrm2{pLhO3Tn-?J? zdVQ3X>S*9q%GQo55$fa2=d9@ZBln>^-9)mL7<25wNML+DUzq{0;UGcP3&_4F$ts33N`U&hO_MVzc&YMib@!{CZ9t zD_Uv7q$F`P7dG)l|V(gDtx-Vt|dVU(c~8T`LT;Wthpr-hz*m z9Q+fC#$p~0MKx-vfBq*PJ9AgK12s9ZAC9vS3Acr8MKY3D6oZkSy|1}_t)@{GC8`o< zSkqS$n%EuCkX_pmj>Ur!_&lZtdl)peUaxexQdyw}5WO`$q0G1PPj5RSqV!{l-MKtUnaEnPsMw2~Tf#~_+s{Tno^1LJ~9JM5GCbi?(avC}P z0O^Fav&!OpB|^>V6nr$QMQ42wvD9Jx7bc#}24ks1cCIf?gSFY6oU5qe6652#7qDIl zr*dLblN+EMu$mBX3F;j^S7;RMnM-BgkQX=7_d;#_p89 zqXbBW>BSr1*ytAz;s|H<0%#fc5sz4p#7gg|?p!}j5lpY1?M`=$*`-)`edSWmEOBUG z1n-!rFiqa+-s;tq#Z%u~Dosg!tnws5qv%FNpaV zb`1g&wR<7N`9UnFiz~V%S!!DGm}eGrVP#-sd1bhVQC6xAiW7-za*IRxfs0h!%rl_d zXX>^I=`-R=U6#4>ASPWn;t_r7!Et{{mdhVgwjVJ5rm1KP#~0)49P=gL~52gZU(E1^qemuEy`)p#%BZw#S;~ zyZ3DxCVn3%XyVB%_i3cL)2>2HDhv~%lrO3#PaE-a%O=;i;JA7fMjRhjTfGYJE6%f@ z*|80~6J(+3^T&W7vFe%o&Oc|r$@CXQ8pW&v;tR zBGUo$)MYeBW$~`QCQVIGbdkjwSW6GTK1Y(^7YL@USwFUKhn_>_NxpG`NbE$r|EQWp zRc*j6I%mY%at&y_IKu$}zn#XiKckS|II%a1Q@1bqKMkpZ7wAu!=*u0A! z!Z%!2k?`TomHhp6LIuU-hhXM#+w9b#(n(Apy(yK~uAuz}oP3XPmc1+1L-{F)Iyyoh z8ctua_S+Uo8$|=KBuMdQSVMf6zHZ^uV^#DrP>3_s7fj{khcXX^S`dT+1;znfk)|?X zMqksMz~62sMl5JYE2mhG7o&l%@Lm^(qj|RWH3hLa#vcqv{AtV*QjBI`s(9=ad0PCimSU+$(pG zF_A2O*Xn9e9f*EMdP$E6GVTr6I~zDh^a+!r=dV&K>edRr)5{1r%&)H*5$XKc;>|9Q zk!esZW!{_{tSeM4umnT0?}CGCos8bbDY9TX-Ys__ULrxvBtD0bUk$^XdY&oaOp4t* z6qVHq##tc`fn^Y@*CPNjXqBJVpnkyQ!_~i`guNua3-j(_JDEsxv~z!IRq!g#eBQ%~ zYFYd})xvqu81tziawm62?U+E!&|F_mYfzhzQ_vX1q}k^_^4n^icIx@DwGFR#K#Db; zI4ps*!qFuoZBb68)cnS!1by7`kvX+wr-iz^>@<)uo4EIZ*e@=p&CpU#?JhBPNG zAIj{{Fsa2CHknEQ2VJ@%hqy`+6dc546N#xNs=~R+BQFG$WteEkN)nu|JR8O?1y&1R zZ}B+~;zQG)aC}P5%*aiML+ZUK&t7Dhz2?x<*# zUp^aKo3^mm(e$s>AYqg$J}G;u%&I11&|sK$xE&dCge(LYOtKi<(EqR}+R92SgE0j& zNYguXga2qiK3bWjMxd?BPc8(YaY*M?u|`i)H4}v}PLktI8S~TD;7opMuoi*zv7$aY z>^C15d!YF&$i5148%SC`5=_HSD$VK=tiphphmqm7c&dZzHzI93^$}eq%}_>-i~!{d z?#A6OehLQ6A#-=9UzATj^QfJEOaU0;e7t{Vd)L%kr)t(ict-?dpWtI}vgwiD*sDe0 z&?@I4C*wm+a8t_iyH3UJ)Ary$V58+RPkh;fhpw-+fl&mZ;5Nd?V`}-yELAsuqP19u zWx>ai6#eSwX3@T&p1(XKL@Ync>Qd5nJX+FL|5E_4wfL<^%`;Y7UCd3bn%!Vfi9>B3 zyfqv(+F6G9`V-!+)Eg~`@BaA0U8Iyn{_#-2rJ%fL%%gsxXc*YmcNcuh8SKVK&!FsiUze{sv&WspA6c1e2 zWPZ&VVJ)wVS|n!VL`(7uEK*Z`!PPHtd)ve{cA7ol;-IY{9-7puvm{B5X_Qw+rYwn& zNh}I2&1S$(oV8)FkICnK zPjLMQ`|1Ip-*L<1_6slBc}1`kw=>e(mwjs#wxT*2bC1K)KLrT}-~0jHi?MasMl3@H z+Oh@olkuCs7KaNP%)F+sB5Q$ZT@)9F3ElvGj2wKCkn;`p{1B1?G&gFrW69^cGS624 z!r51L%%{l|R1iKIE{$N+7s2f+SC^YL6Q_~XplX8nHn*Dl%?la3dHD2Kj-8f)a{8A! zmj)YUAmF>oIW(b|>i2{V?dr6T;n(IV6<@!kJz*q67<)Djk%h!t^(V>~za=oSAlsF* zwS?1Z>l9<)s3D>&xQry(Tb0jFxkTCl@=^l9SfEdzS?4vUk1Y2&48)Yj@bHS&D4Fy2 z2J)BfT$xm5KN;Ly{l+`T2&Ri#;UTBYt3DQe~dX0%DIOaERy9jo?V6i@q|^K*M%2D879+9Y|B!q_1|akM!4I$NSW-IHM>@}E;pV|!ypoxtAp0dsT=sF zU{|R#7BAQ8tDJd4#E(Wr|L{Ujon?-uSQXxsC=+@P;R`nyg26y3UPa#=V?94WC)@4DHeBsm z7he$z7kY;CouO*ku^lqtBQ-OAH>t>twG|l|0}>=Ll{?5lYsHk1DVi;H`I#IY9jjcC z_HFvZs`~PsmLW~_pn;B}eekzG=B?9Caxha1-{Y1AsmWuLM7R;_&nP*@No%92Hn!MZ zIS{EO6$b4y-5aI3bme9N@1y)y}ht@ULG}8VeR8j zuVHlBAuSm7Ej-fEv3jeBG=V@%lyx^RlG3ZFQdih3R4;4=W!JDl8^bY2HS0*zk50hF zdGH~*Mc(mdWv^U(0dpd)Ue$iuT;Z$%pI}Qnw zM=oH0^d5G_D;PGUNcy4ov>JFv~Rw+2Z=^(e4|__~%Fat($#ZJqUgG*5!CtZwO1 z4Xg3l33+0$T>~6BFQ^0QsKoYbNOj8wqOdB$>*8eGGvELegx207ew3HZlSIbSUnysMiM?Mu}N@YYQfy~BCiaXqa!AB;a zr)@}sLH1VBAomcL$2t;6W6$&ESdiqZC#4B}jcQ)_x@eI%oy;6<>NT-jm2?-%zFD1g z$4q^9Hf68HoSDlt<5ktn(xpFBdKBH|0P9~@H-QV#k}dO3a9|aX#VK?W_M+w(h(9Ri zOjqH`7ZGMY21tA(B?nZgO19X7>T5%ty{I>P=v^ z(s?EDw@xbI(YK+s3T{Ju4^wBwMFi>F{)ImVQ3v4o8qsJ+3dEs?pS+eEYT9qEUCBB| z`ac8p1)ItU@N<=oK{L>4G6PkcMaxO!gP1InJ2D?jVQ)@-vTT`JCR2%RQKoaHKL?e8 zZ;pFCy!h*pGGWy);kg9P;va*hVSe=avrVaLugnKrlf|UOm%x&d;L*`*fz{ulRKgRm zUX9o+pR&Iiw^`E?O_ly8qO~(I-gmh{aurnfTHr5M4Fq9Fwx ze`SgRgYfUCGYT(e>D8*Xr~+PS{63$hw0-gTzBCET@H-|ryuG-W#Sk4vB){Z~J$bOg z5lvA#hVOZ!B^ni+JL{F|uI>7XUP{~4RN%1FciHJ3JE@nB@8#k(F%p>Pk>On1tz}t2 z_0XVKwjOk479JlASJz`o9HT{v1no6PpOxHMg=>rYKr-YS*^khazD4ub8_^Mk0z3YaSvLXzKNZ*o|JRMA)dkT-TF5HV??zS@T%1bfebxz_ z@_VH=l3h~WReH`vJXk0c6aGJQZ>3Mg995OVQ(TMgIZBCbRY>^uMX#kP>1hR(?ldEe z@P65;p6I&}P}k~*?OC&5p(iOZ{EikaMuBoFLHGU{q8usNFjD@IuN8ud69}XMBN%2^ zU%H^*swI3}d+_0)DC};RGuUNS!}$5@|8RtlL}L=kl-Hk?Bx2~QqM&F#LR&B3P0qs? zK<6%tX|9Ufu1!!-3h1(K-*fjbDs{W{b7!Yxx#4ugve7W!wvUzYty=uJ@>{Y|HNmSP zO&Y=GvX~DzheB?gWvCTMB(5Do zu_&r!;h*#*MSBdl>0k~GPCu0|#tH$=7W%A^;Si4yaFojNgPtw!dk9k+;H>QV!gW19 zmUlKhME`O-bv+#Zs}W6usljzF1>omE6ugb3acbc}+_Z`w|KiMEXZ-+hUGyZ;^>pu| zCbZXv{Qd0(sq8igcUR82-Cht~!xq8(X@q`WY(my= zB$hh8yO<;1%ljUG67|BSIej=HY9>rs-)K zblaj|_-M#qb;1=;3|q9YW+KdS_G@=h_FZJ6sS{w+usNs_uW(-MKWB>%DC#|0bV{($ zVN@m0tgQ;Aytl@0w5Kg{Q*@R(GPKVyHN}X}aHhzM^^6vy%0b(?(CRQ^J5BV*W4EgO zo|g@7!%fEi<8P}snlnTXb04`V!ujHSnHocCh}1mBfB``tQQ@McCuLKRL-7?)H`S)4BWvdA2N+>Z|mM85GpgQUw1vqTn5`BlwNgje+c0AN6$zgw3c zBAAI9PIxnS;cPHU;Y7TPI8X_9i}>Dy#roM<6z;-e-AtnplJYbva(~zrMXGMynu>C) zzz)&+4;?gmPz->h%G(+>aBd!kD68jG2HxpZMNKf#ZjBZI`>N5(PZS0iGwlVx?m)+b zjU45lSLkU_*gGP|HIHvO>!5QR5dapyC%#O7e~)LTY_2uUks zP@#jd*K@@$VmO0cihpQ07+HFz8G%sRiY_Q)w{lyE)92FDZln?cSU$_J)2Rd|Kp+8J zzQt>c(^91TDkl_d+V^bG{GquNY=YK7Z*~cAye0r#_$xbtf0iz2wn3j%Db8ks24nrA zOraoqGuPhc#i8oI$hoL5fsYXa;<~xb>$ntfXp#MpfHLK2VSh!46??RHqLHjD4CL{Lv%E$Af1!8MB-PoR(?(Q4c-Y*3)RqAnR&0=b}+ z92ILw=zk$KrdvakhxeqG=mL*KVkAo!;2V3LkV5d@CuIU&_{wgF4!FsM`Z*Kx^zv7raaFUAhJLL`& zA!w!!V0o?5*Q#vf^YyvcfVMRB7R%(j=~RStjy2^&Q?qSXeJ@ocjfOmQ?Yev+$^xWV z(B?76+9dA>OC<$&NXHL&_Or9H1xmtY@y2#PK`+TRQi@^PknIh$z2VHa18whOUVj1e z0)MA=P~YIrHlg_#v4 z)98$=1tv!D$#l^qt1s-m&`{PXAbK8X`;tcbd7v$d63rXY0=xfZF*Y=cL`pSfaWsA= z2^$E524QBSel0}{^k?!beRfdckIa3hNq>XpXlfUBk*Ev`CA`Q2p@SH9a>Vxn+FnO~ zix`XoQ7_X;1xf~(0&bf!HD2J-^w4;l%oE@%`pBW0jBca`6Oj%XO7Lq_aztqqK`LZf zQZ@M&O=m|BPA(ZeU0QN(1a;5wQYR4ncf$uZY>4YGXoJo)qF{VAOYeej**ej2fVeQqv3dZ=8Rc@>sA3CTL)slh_LT88 zXm<)AFES$osi01g=mpxCt;*Z(Q-2q}f-bkx$gjDhW&90C{fsI+HR^P6lBxi$t~Z_e zs=n4alJpZTk-cr1s_4wH{ND;TH3wJ2*=CvYY8?ogzch3zJP__ArW)CzrU}Ai zr7C`hRj9{Z^}&p3VD>~9e!>>#v!6nVf{bnD&MvnJcf(HUC3-5$;6j1YTYoh@FgZc0 z7${zyn%Qd0OH1E znFJ!!tZi0A1q?E!1PY)L{US$)RbP;OdxexhrnyKI~8 z6&WSJ-yggJ{k543Ym9?sgnu9bdM3>RX08Ty0M-Or5ov3iXD$S^m6ATKB^aD54KC&6 znOP4sM@M*63TE8b=WCiF-lONGrxejwo8N5wxH_#lJ}GHeCJUm*uFjxZdp=j7n1(%y zr%+8Iv?glS;kb}ZK4{eDIc37$YSlDf9sIqM(Eq0afAb9fCU_Mds(+gO^4Guo_0NC% z^WV+@a5BtS>pHB;X3Hmun5RNnJ(>6(F7&1@=5UJxP8@l9EqW*u6h+j|f*`20ok^`` zh5oXS!*(Wjabcw-jy9$agA1DUqDz)3+a6ihQKWMc zN7KS(`)!JLhz3R^Q-7dlDH`oNh3#5I1F=|WY#`UM!AHihDMps*m&KxB4z(@?d#3A9 z;YiXCXZuCwmLG3LYgU!31xXVO{R$)RRbyd`g55Ut7U@@q zBr_Pegp`5ubQ{rZ^W*x zY(SFQWu&t;6l!dUkJNht< z(qR^@oKUAk4V~~l@=2)99MF_MDPN>|q03&O=YKAMol1|lj4gKq^d2ZWp@Mr!c?QU8 zGS#&DR9J5msaGqzl)a;o0ZAJf%+al+L4gzUOUg9BjbLnJXAC0INh<^~%1E&Q6`h6B zEPbMSR7v!7T?U2Im(X)R;sOBBD{P}&Ht z(EL%9a_oXNxco9t7qXRHzHU!#jyO_Vcdj;}YKTIf#l|t1^0S3;zhHe~1Av;LlEZmF zO9>H44O*>AXB^3fF^^V+!Ltdi48S-Nkbh=yZ`Ctuq)}*jL|eSfFw!cd86wK1Te!C) zQ3|~{go*WOxVN&o2IQRj_@<+N!VsPsbtP_^=WJWWb4jirsAv1NI64{s1Re0(#gIF= zUW;IC4UO}4eQCnNdXSmRF!hEpcinsRVtJAPawuAB>dU3R%7`HC!daX}drGCKeK!GhTT9MG~bJQ^f2+fD=29QH!1OTum=H4g)T(`r}BZ4o6|J+yuhT*VB^XLTXsc%{YM^f(7n~FDKFiB_?T}599`I?yp{+@Y9##@Zr$(VLx%-B?p5rEd zSRDETaF3c4h=PbG=6F`%tT&~QS3q*W$O|-E73;y< zPd_o}5rsPlnZp4VeOC;ZXbgh(f8L~3Ql^|TCs^%VwEiNQrnyaLi|)$wkB)$p0zK4q zo`vqdoTcV(kALoJ7QnKIX4F1d9)J}x=cuy#WnF|sbtmP41s=-S9hHJ87-dvvZ4bU8 z@M3J43Z*I5wdkCUZUx#%)M%>g+suLy_mZ_&KrDa1#l2T?@X`=WXRpg3Qwa_n z2r#g=ne=V(AHkSLfr0GIW2L?HlgnqaN&~$$dgr|K;LoS<4k9{g*-EXBq@_?(Pr8#$ z*Ez7kYRg-{nT!#R$LKJfiWv1S;BV+rTs9(iYH>7g((#6C)DMK37Wsl$AjrJBCnv94 z!{sgV9o-56}Bwt01#@efuB`*MliD&B-1Bx|MsE|pB z)SG-7WoUHXkl&vO`K@Pa2mQY*sU6a(%zt(g)-GJal#eUFb5>eQSA?nZMtNeoV<6phb5mk1 z=_G3z;e8_ipiiliaVU+jmd!JMl7CRE43~ltp+mB_jdz;UUC>?!Ie#jC+kcTwcC*b9 z=ExAyH#snvmiZjy_DWYF-&dNcCr%d+d~|`v^KFBUUh<7yzC>^U`|}$B{OmI~0>JSg z;?#2QubtYV%63u0z%>7?ea3$8SGtzvW6HbGp3C}uPH^oyZU<17a(oS%A%Ds$xK>GP zTv<;9T2-e(WWGJka<241LGsS^5{1G)2zqv1&1s{ANc{ip8WIL7ff&Y=+ zbn9LK81S;T!Ss*2HTgJ7Lw~w8CX;sK`^m*mpSdqvE~Cz~kkayO`Fu z1HSZJQczgsgH6eNDSr!e5OiyWBDQ0e!Yj?z@G!O|HtUUTH_NE74d0pr_oj}(WT_&& zm&lSNt7BE5S}w}&*lp7NK{KX_@k|EZ7d6YzV{;e-l5;DoY{>*=Pk*1GmsGLl!1z?i zw&?t&VvVPz_^8oOWqqzFjH2>wtQiDr8fHBnpoJZ7L@fpCI(kqVV=%0HMSHKKa03SdmFis37)@wli~K;dG=QH4Ugw-tXf$#OcPF;sAC=&tNBVmXnqhqZBe z#5a>TAl+)$1XQGNIe#q>1Su6ohE{G&w&cuL@ScvS#gQ@`;I=C>AjT9joVgqQ9(k5l z6WdDrE^In>DC@z&x3b%veKijHc5Ysc0rI-^Z=%_}Iv=eiYMcxH8JwS8awr8Uke+K& zl;|SAjj1Eb!rBexOJKhg9|xu>jjtV|!)SF%7u`0RBhU^Sg?~$ZIs?%VXuU=xwfeUm z^cgRBYS05UzRDgoDK{Evo_tQ1I1M@wCJf76eBbtBAOlw9~`EYtou?1pRCl7 z#Ge{LRudgJy&XfkvYzbtA`n^GXME&shm-k|$6=n#QGa)h24;qaA2n6YHXHGo#+QO) z1|PvFCNng?6ca-!r!hHMrNt@7j$U!6J|lKE_RftM{9Q@otK~+A$IJ$DdUJtii8&wQ zbkeG0W6WCf(DUTnpmN`%(3yekD7qXlYRj=hb+wfZm=Up7aZkj$8`JcL@xF>^{~^ZP zw(4rvVt>4OgYj}Kqk@omnzhaM@sFo>z!4$9MILFSmse;&c7=iw;!>o_jNKg96`)5W z58oLNOotquW?_LxESO5INeI$80$qbre+Z`(J(+?eF;CjX5~Vx#_d2_8w1afy)0_#Z zK>=VC4(Jmi3ai`Hk_@=TXyo@Wv*-fBs%cSxqkmy|o*3p&2;k&-%0#PvrUS%N%RBdg zn1nNoToENUWI-YwvI_754GV*Q!nofE>riWFlU}7jl<^MmwgY0H{*4g!5*%&E{%*0| zZ?r1rGjDooUvTCJhI0=}apFqTyC!GH=IW8t=g4KJrshdl5*4o%^&Grw5p{m-_IB0Ju{R^X35zL=f4nw?hxv(o*z z8Xwc>n&(g%v-G=NRWULVP+s|E2u`6FpxdynrvYQAadOE1u>CeN1r`T=Tf?DLnUwIb z#}`_-x)NxcEPll?eK>ol`3PwqY6w7=*M9=riAwX=2<~Pu7v(9EN;!mtP)Ip%Q_#7R zneYZUBq}@Te89r%R0Ngq^uAM^l@j%vdWcN-5t)aSY*|Ms9B>th7@FQMnoWJAKhrFU zFZV`8<9}{2_a0{T%~-C&F$nb86{ZU`gmudn=I%oE(LgVkcrv1XR%ZPhuON{|9e-m} zf~`?OqNh1Lmtv5U)&x^uCWQ*+1p6*>>|1`NMvHu9Tj~lv}6k2MduP)PL=`y^2%771k6k$TN3IQa!%XikwOl= zB!>k#Xx=A}-y6NX2lMo^tEb(Ad4IYYpsfUWO(unJto4i(cA#rEOUh*Gq=nx9B*)5+ zC)BGQqSOrHrzpybqXT@&smN-<;(=QwucVKW*0XU@;0ZM;v{mq@jB8p1n~6Tr))Bwu zke{ODr-oc3CXeh#fz@ugXWf(n6E^Pb47i(Zv?;CI@&dpwLu&5PV$+C~^M5ll<_Z`S z^kASy(GU+>IQv|t4sNIC0NbJMv=qQtpjoJUdLBk03oe=oX!OfUxEOSBQoa*i7yqW4 z_N{c&YHdIYN8hts80xW(`*;5O$8+{xm30!a3FFpJ`AKJ z*xl~)26wZ?8)&d+r>w*0KG8!#msqxVRmoj1N%?U>?gwppk2N>Z3A#Yw48{`#cIxWk zZ5O-kKC<4$mYpxa$bXO(=B8MlcM*vj20QhUThO=Vfk)QdD3PD6@T?|y1;)4Y!Dlq0+5$O zU6ywcYig!nh;9YN6CvyyHl9idu^wM>P#?^n&i&KIZMi{%=I8X9!vEgtMo#;7jWjx0 zAcv{OAw+g`&TlAe$c1*bZvJZ^i$K>$CX<3&cldyAWYFCy8R?B8DJ}eF0D!_mWg)fW zHTW^qB3u-SaDPFn>=b{ZO8thzKL5Sk>B(!M}3W-pBia}Ua4%RnMs%UfMap_xGhrJiX(#7bW9g` z9u)9swrSqlIjCn~a55o4k8W9of1Hw7Xvyo=rZjyj4D647cRtwDe8Xp7=w81LK09W7 zmVYwTx|1}U|6@gHXALu%$oak7&q2sN(fUYEc4&!_C!?`@(9$y?GNoe*@flC_2Rkiq zBqSU~*VGKvjP%PSxAb|CTS6kPm4f6-t(>ZG=`3if+#K>_ol;l&)2Mi8mzU7@cdS00 zTrkEST>_SZ)?7zVk+%CBpoLdPDsNmmvVUF_p7L?HgC+{y^hUxUGJzorA3ELn^y60B zH=*@i?ztHKt1A1R=}s?b|Wk)~G~S;iZF4&8h*U>FvtTWGf-gF=Md^jlQtb?PKiDrkUhRp%jm#A^?enj(XBt1}TTior2Cx zWr=3%ok12qFfcp%-blH;{M~Xx#eZ5n^OyUBFW@;aT`%-1W_k9<4Kj;qKL9XzKhlU+ z;bV%&7n|c@tpm2AMp+O-`i)1RXm{H=qal)+_4E~=U{_W?YcVJ(kFB5CZmFCqO4<9O zSw=@BC48mZul#I+=Ij9#E*_*_6St?7*+x1)rUw?5hA9II{ zu_CVXYZ>D<&O*1(Wx73A>V!(FgPT=U`kbe}OnGT7C`KV_J6I_h zrh3F&V693HYTN|BK7t1RLh*-EQfqV^ibZOC9yt4=Ci)PaP0RlMCe14-i4T4janUL~ zW3@kpIJJWcc~l8=GkKm_QF5Z|+2STe*yssEISdb>z7^>##Xv|k?0-<#0E??t62f#N zKe|J1?**5=j^38O+YH~CGkINEXT%?sZ%kToE}|%}$*92(hc~Q8*k6ZG)yEl8N-Cnw0^!!U|I6%IaSEdGHMa$9()vxs49!6qEEI((FjpM zw_Qk?P#b|JLU0dp!+)5?w=7SCiFejbqazqmkv1A}ZG~rqg`)JT)8ee3n-NOS6XIHm zim5tlbU(@fC|qQ>v{))*+G)_MZu~JV(;W&@7=6)Q@2}BW^C*p3pr36yi2@;WSe}&b z+u9uawwI;Lohl=h>1(FCx;{p<;tHFjH88Nw_@-$+X;$pd27d>V&9ZnhbOm|rNe+vh zRXs;##DUm0D&wOjsF1v7lZe@*B!LcdSu!hhhgtB7;@W`>R-q&N9!5SRaDq@P>M`s5 zmzRU)rkwa}VS%tTe{6qYroo;f+?p$53!6AA0J&NyN_%}EgEVz*1v|4fh0cS#9+4Bx zd#K#WXkk)-)PF$HE6Q<*T+$eZ+TW#|BYWY26{3W&ZY8x3R5|o@ohr7TPR<0@0!7Xm zBN-!FIlAr#{@6IRjD`n_X-tWc^~}LAWimQ!2>^NeJ`WtNxOg(jN>pAVYc|1_O-bfh zMD&1|3+#SYthX4KmC|;@76`uNR< zNCXvX!~tNkNyh~?HS{A;%0pUn*9wPtq6{I;f^5v@wy)DT8qH`LzU!HJ7Avy_VS$(? z(uITQDYH1ZIp@e-R+MhAc@}GSDL_Db3BE>_Ewo>^#^Q^OsIswc{Q+^Xhh1aqi~=^+OgqSJOoCC4PJh~tR&jYqnl|y zrhojGE7!dQm=r9Q*Yj$|9OGfdwttlt;lbO*qqtiPxLq>d2A+n}1r&m9TePDG2ZJn+ zHKCI*XseMY(=#jlc|_`Lzkb-mP;5F#1KBjEnS~N^Gr!>+g~^~-8qLcElWBy!?xK`( z$ertnD5Z=rT5R4Nfw25adZgHkNWIz^4Sxm6h~q)smh4l6xK@H>kCKYaWmcN3(FdSWtO(KICS@!{(0}A7 zW(HF6*W{CnNQ&&v*Br`+ZV~a$OqUB1w<*{2YXKm(Qn&o2=r6hwUe2hQs;{lt^&x4L zVtFjAX^L&xmP^vU2 zHAgOcFSU6Wmd^id@GnJs${diD)_)_pkNN!t)wyg0Yx#RJSFX7XUl>-lmSeD%GNP(Wo`U<WB8Mz9sHKILGn3Fr1lc1Xx0owRk&FVkBel#& zdo0;{EsEa)I40S${fQPN~&`$p|58 zg*~AqVunV!anD0`9xc|cVKV`9fivfq;T&@gHS#{-^PFBg|# zN6HZOdG3B5*uCGP-9vU@t)zTbeV=BLplW2%6(!Wz(LK%7`qkk`n{e#tx@ra6ybV^^ zo1C$SwRLxC_Okj1tbZ4kSQ0K-*wLSl=PKu+`%O0rAN*-VKr2cD&sSiEex#dqLI+b) zVOyV1Hk2(2zDcwl_Bb>RSFGZwc09T|9{`nMnqTjbY*IlJbdnNMx`*P~h1x4YSQ4B+~B zdHqIxmjVsNB{G@p&~|xEc9KdVv(rddJp=rwJXolqP}QtK%gr$P*x)7VgWdwlxaCJ< zBsSn#pBy_R@qo8}+YuE^7dTz?8d(KH#nH=7ri@)l|v>w}}^I*no?h?~# zYH~&st#$U$Xrs6kHHpT4-c9ZYfFZ-@#GXKrxrAKlcpE+|M7_K1< zL-U+Q*T>B<=6ZJ$-HKBI?f$g{FnD}1J990F3kQTAz!8Y6{Jt1!cKS+1N2SAyFrT0) zLn}zjynj>>+ftSbP^NDLGlaK^eu$wMYFoiu3AoXrq%c(`;iA0vs-mE;IF>tK*c6}T zVPh;y(AU>wIRf$}D>vTFAg-o`^8tjZ2Gej_8yL_H#sVi!BBWas4nkk$*}zXk3dn>TO4+RHv}Q^wtu&w}ShcKR z019VCM~JC3*(4>v^#a1x+bBP1D0w|eDEY96_a%+=wHR(-)i*1~t0p3~BtnXH6176W zm46eol+IXL>de{IQ6nxhy8_{xwK5stQ51zNIYUb|xP=<_TKW!N5VfSu;;L27|G z71bN2w^}J5iMHcFHZl|9_%DWe2V%U2gMS1gJC+}hbH$hvU`r9AKBqX4CIB!7ifVK> z_-~v+urUIl^N=Fb9&A4mK_^E$BPi~menpXE#&1I(P-%ioqitQY@;KccX_?|_O*Q{I z{r1i1FQW^mZ5>AcLfO&j0)t0Da+BCqjSitD)C6gSA{|Y1)llx2QBP6sM2OoeReywq zK2fRxHJz0Ek$=L?fTDKWDvg2*XC-1NEn)o9lWYvZLMvrE1$O*zI`$|0;K{KMgOXfX zmAI+c(K~gUR5H$IP`Roy?fycMG8Usmq!cH-xTW|s)f`0~%(P(_y_Jvf7g{gM$AQIm(H+;3oZaKPgwCyID zty%vspwnwiKy1-M9F(e6YHNmOg#mCC$YmkthZfn?OdNtLXxZaj0+ome_cGfMviq@N!m5~F#LA!SPwL`mc3+?7-K)ZR`eokR=W6P?Q z&ysg-&R8qxpzN+6}2bP&fU>OP|@9aNzeXndNiIQ<5m{s);{ z3ieIbvDwNS`T4EYc9p!2z zq1nXC0C)THZ$_!Cj!UTYUJ=~~v<$&e{YLA8qFFSID()Ijuf!qHh<}56t%ea%Inx(u zARLfS$ukbfp%f7JsVD@YHY``Y1hEo)GZyA;;J1iZ&JT(uV(=Grv3Zchb2HYavwd@* zTk({3VnMO&nhjQitEtmqUm!p*HyBMouTzmw!==EmcHN7 z?x+F2epEL@px-SE`+tlj#!~N2Qg{{~>-vqrdY@&^y%N=hbf+r~UOrB#iiN`H=r+pN zPnWfnFgr-&=D!LN+JwHjqG#6@)^3v`P)rk?ajm66gk9DJHKV$Uv^rU2D%8}sB|*79 zJN$}cdBf=5j_1moxf-AbQea21Tv;zkBOv>gwF1yM2yqfmv42`y!@+Ip**aKp5#>%a z2G%lFiz69!vN=V?4;>7G%PteyYKLEY~>y>EweQ97qcpUt0|m}<)< z(KSTSOqNg{A6S-+AT)B=vN*WSQoGY6E&9qvQzuQh$t603bc2+`< z>gS!pPq`J>C|_Wv>;Es>%$K)G$S4;9{;K7Qx>JFgOrE(JbU3URabI{XcOIi{8&b*x zckJ#RufRv&j@>pbrvedDsc_1TwOksWDo7G&oGD6ld+RX&>mlKW`_W9%D$Ky{MxYIP znUv$f7=Ms5`i2kyh707@Q!`ClfmX4e!joypfP$$Zp)~6E9&-&Q?7#E^oE=AKh_IcA zixU+N0crsvmaXHU>Au5UO1)6u#QSiTk_OBL&(X+8BRQTa7?zVA~ z*<9DHbd3Q`B6+f|ddklf1+sacGe4sPX?kly)*xVkeSthaLwB(33SCRVK#??sq8&IN z@Vc+V)F|P|&`?_14#82U)w#e&JKwS5_GErU-xXkvXhyFv=&#kM^@y3mI|c@CQe(wR zjekvj?68&jxM(+~XsiWt__Y1Ps*m;%8yxhcQGiEbpH1Q9qD={uI^fOCOyPvWM^I1^ z>DN|5GHfTIGhwTKJw4XOj{t*QFuS&$-q%695dKpH+#m}*S$b*im2X{ez;4gd7}(9xDE+PwPv=N@J#_=A`CD-p`qACs~fMtHd%rBramD2 zm?2uNo(RH6NMgNTz%vVN0wD|@HKH9By9wcdj^<+<03RDFr7Y4;m4ViEb(;!abbpKJ zH&rC-xV)*AvA!`{gcu+TT60=wB+Y*AtC8)d(FQ(Wi;1m(*eMmE=@03LY^^mi=~-^L z%DiG_G50#f7IriWVlzCu0g%~&-33C~XdMHQpFt}NogMaX0G18y@;Tfs-g`;G5F;Q( z1x*;#`0rYvFJz3I3Az;G{<>fx&tCcb(a-VOyNulW^+bLSlCLZ;hW-xC9c8>iRGTm(?Q9Q8E>B3m^N7>`d-#n1fANbg)R<9AY!tvsp4Tat!ZT~iKaZwRA)QC5izjyPRFiNdq^zd%+hU< zk)uH5;rScrNYe_$5d=qKA;_LLQAqU79op*c~`V58Ltqq>iGe6@kwRs2J&Tc-%J@t1~}e=OeEGw2U~eX ze&xiwF)QzHsPJ_|>|oWRGH{B76@{4AOb9HuP`qV|FH=+GP3&6e3s%Zc`(h<$KvM%v z-zbMgUIQmtq|sNwe1A9UPvmyw1{QA2o8ewvhiXrNW;*6*E6nqx0Wm@=9ZHP^NdSo( zRmIVAv{YMB*5qaOdp3q@#pBJGO`10de;AYl=P3FZXn8@hQLNI^qfWd-a1w9}w8a+b z$ID6ay8QI*oDEuCG+}9+VT`ddp7{b$t7@O~EAiBD!E_;8jT-q`m?hM zxFp!9gO}+YDXZ+U^=ci@-KWg{*H2Ngslh0k(k9R?hFy zp#C-WTk^Ho2Ga}^n_$k?%epG1R1+=76ty`GTZDsxV(yr#0rR2uIW7;BPf=bK7NXZH zVPBFerHisOnmlaUoQqd+zBK1X*-k}>8i-;S)$f?B{eK2tOm79w2#6$WvW8cZb{tLT zt=EkeR#?r{3X95aU+5U%wL#P4f_+Kp0vm3I?hLF{g1dQG1g)8GO>0egz48}Y3uMHZ zP9W}0&nnxlXU&xG!5|9t6HNY%if;;Tlmt?gcTp{L9VwhXO?og_?UU zdrdya-hTrK2$Z^`#nVZ+*b`Ob=s+1&bfI)ZKVi_tUUxk)0q=vqQOcIA+VTzGwbQR1 z-_0|=o2XIU;k$qR%U}Qew?F^wjPTCXy0VP(ySJaDcT?s?i|lie<>rinYy~-uRue3w zhtY-tG$H_C$+(peHq|4j;T4AKNpx7s7bv$|H-Bg`?jWipO~fFv>UMRo?0J#xa*e8m zXav*af{-E8??h8lwPv%5F1@}J)_QhN9IBZRtrk}0LUg621Tn;5l}!a!a3I`Nj4=g5 zhlAg*RGAWBcA*B_`deKuqsy(Ku^cOVU>ImN|ASxtjni)sZpatcEWu@ZM3$1bv8$E} z$bTyi?%xPt8{znYM@2l&*lL$EUkKpdFu$)qLo-ojdg*2r1luu?2a#_^yMY~8Gr zd9!|MqdA8mXTMYZR8ly;>Zm?@oc$xPt)(R?eHOM2)HQdQLQ&|ozJ~PzFvT>5@}_4B zIh#WGWF%~d&Pf5EBJe2n3;VscKfoPP*%w4rT9*BkaR5>YA)chcM69ilCJX`Sje)QNTm z@rqnbrHFla%|0sVZd}-(y_h^1a`O#3gY~1dSpdAvXA0#h5Ehp$wh=OAZW?1{?9~v7 zTkr4aO3|4<1?8huk6tJ}Imk88JIm~yZg)9efpazAiBQ*>F_+C}LYTBt6@OtDK%f1k z4Dui^rGnaEn{@$MEsVm#F{KWA)H*3(daMa74S052hcvEpr3y}^Wf$S~izUWwDoFJa zWlZ>MeSh*#y4HyFEWCB~vl;mdjCNrh8z5;trx!rd;B|BP@niM13L~8Cb>h{g>EF)y zpq`es_U15kXF`O{3dGoTI)Avy2wxYKp+#c|;Y*Kj@tCGHs$vDDvn^yuJt`vR2+L|- ze7{hJkR=7+klr`HOnEzCi0|@@dlf|iYWUb zY+BZ`SpMI&WwG|&?dPJA81*!7ZSC!=HKI0o)f^)ETw)8{Q2gu=1AmqYSMaCIg`E+U zq>^kL#xNn7yswM(t}EW-6Uw7|=y~eYIAESGV`S@)%2|qRkLzNKYgEn# z0&k^F@}~zyw#Fir+%T;_w6f^oQ4ARfL<%Fu-(lQC8Fk>xPU`tRi3 zHl*iaypq~jBmYefCT?(1s-{shZ!>vZG>Qwu#tYKu?C-%3OzN&6pBQA)3eI$kIQBOY z0j}9<<(A-x;GzUm*Vv@jjkxh5O7taao~L3!`(?)@g$$?S1AoXJXN5YSnth6GM?^uP z!!>4GIA+-FY7u(9tv^nRt08|Cu2e!I| zlP=i7Yt5f9nd4t@Z9y!Ql3Ltn%M{ZIR6#Btf~nJ0DSgP%)m5nsmX|om6e#Rv|MzrO zc}qac!d00Doqwf`6pFnqGhPAQqjaJpj#AT>4Cg6bltBveH3#z2A$G(q8Z}P?X|K&| zGW*?tyqfo$W(xmp4u;X2(Z4OX}+5JpgM1{cZ6sWWuMc#OXRVc2Gyio z-l}2gd4COHNba>v0haM zOSNZg-N6|+AhIl=oQ2}g4!diC@`a)=aHM-6j?14vZDuIrdPE zNQbga3N0&TnIvHcTnF%G$RkrCSn@$H?yK?1H`l#lfizVLgsT<)(v`I(Q{~oY?Rd&w z(aeBz7UFCzw$z$4eqeAoOdd9l z_47Hio0jM$gS9^=Lv3koOcXR>33ZRPB_8oqB1NdgG#x$|=oS>OHfo+w(m|B*qJ1J6 z!%JneE{Cnd*l*|HFcNj;DW1<9JeV8LynkAv+G`}pP`6{gYk`5QYXnW}o!(kSthUV` z=$>K!$LdcCl#+1N7@g5TvbnI$U%VdDkWZ0l^_3cXTfiuo%jyB;;WD8z z@Q4i#5MO;v5o(6X#z#u^hbbR>eS3oZ3y>8$^=guWJN|;~*v&zNT?>%k%PD#_dOrQD zNJ}QCT~xZf7L3+1GdV|%HcZ0Md{yLx6#CM4+!29?B%sS=%81c_pwA8i1Ap{h>&RhS zOJQ-PrT`?pYnmt;I&se|phrcAwNneXT_^wlwvoaECHaZGD9uf$)T+${!VQ0>Aykiv zbo3lyUk6#M6a&h*vT2s-7SYY>KMDD_>fwbQS$Vv|o)^qpcV^%GPlnY#sDZtQS$#Wi zL1V?weUWfK)wReq0CupetH)}Q9$Z#Q2^jTfyeSgql5F?9SDM6Ir)Mxbt!+(L~38sEMJS%mfBX+C-k*2#QSQgo}mb`XBgf^nE31y-?9f zWu|-*ZD!Tz8$6DnB8^3l30?(74Kg6e3KTcycqwf@a~3FsFTjpN!2>FF<@uZicVfzJ zrz~jAf#CovAwxITWFvpUCNY%Rg>IAuy+Nc$(=oUWS(&b>FJ#q5Q@E2qcUUDT^bqyX zEm7z~lC5u#?1^uC=LfsolnG+u=rg^-L&J2@=4t!ghdpBdxO=Ly7NZqV4g zti~99alC|94YRbthFC7bq7315CfVJ~MRxYiQF|In!J%erBIEvgF+L7gBW^8!CY zW21b>BOxqPt7(4=eGJ%tMu^>tA9b<;gatsA05dog28z=W{Ulb0e(Zq4z>o^&1yNUf zqcE6Hzjjo&trP|WJnw1>1AF)OleDI4?px$?RsVxhdn(U6n`vxjdE-%OxzGbb&=@XM zE)||<1w@5{OE^R#Z)b}kpV3(BU?rqzlno#;ybBtWWw?I;cGmHxWr6k{JkP5H8N>$3 zL%L6+CNWchC{}4MBsd;US@OOL65YnqT)>wZ-+{uPiD=6KKPV!GmY+J_gCQ^yT}Z5y zIC~}JVat*3@HJ@040uKmd5ErWWyciD{U)PLc5%%&7K8J9-dGH-I`anJUVY{+SPbSw zE@py>`Wb(li%C9+30Km9gVz+KK5oFD!D1i-TcS(n&l_jcLWB@qgzM%vbpN9qWm5`|Y3N~-4}xG!g$`MZwHAi`Hy+Z^i- zbZLJUb7QvII+!P|`b>)#e1~R%$4viA})J_SxzJQTL-=*bOO!UozXNMLV9 z?p}b~d$35)WiWV67U>nZ*qaFrv=(Y-OB8rM)-!zsZPU~_XJk#BmRa;BNzC7ofK^jg zr%bUy_iI-wwrw2ejxo1FJ1pkc4x009Lw-HI9%IStgCj&kk+IBv-e@K=E! zE4zk94I46go^@M0i$LIDJA-;)LY_B9gYTb(J#prZ(cm6DoBxSW)IOuA!$`3oFdBdS z`#=6|QyDu9G}WY>-?{x%p)9i**PK5vp}C;>>K)yXXo^6xg3xvXDWu-KScwk8N6M5T zlZyq?E?;3dK1zWVRa30a9x~EOFq^mLKs$q9kkw%zrQW8Puj%SaHjgjXqw;uu3F2GX zI@Y?SjCR%o6fK$W2!exIG5el9P$U=3b{glaS+4d6^nM^Leuxjd9TMR;v z5&Tkv;GxvhQb#7mQx3{bGy>zkSgnRb10}LUIOti~>zXR7pfohM3Wsf`DUo|iG`^hv z4byL+d`=gSq6A0b*a}*VeHDDAnuG^QjRY+IQ$O%UFn;;IIrF8Zvg1JX*$X#2Z=_9!hB`*bSZSpjLR^g0T1zjvVv?QDM zMh}l~+N>Ms<8_^jG|n^Gfc9ZG2pc;Pv;26qpeuB|IL$8|2|7MT*Gz^$J9PGF;gjkF zOI?eA8l8($StF)Xil?8GOL>2?#ps34{J>~y8v9C^hyd~F&(0j7Opl*o3boi${+@s< ztbe^?CujnD+(cu+cPC}9T6%;PEcMap3_g0z&U9)Cth?^a0iyr%T5fqu5Jux()!c+#7G z6Pu{|qVR^b-f-sIVXc36F|Thgn(cJIk~0Oi>5X@4!4vW@xp?;5HL=+uMi8vfTSKrw zuS)f`vCmT|F;sY_SWF>9K(+`ST9jzneDD-CHKMD20UgqAP1}#6FvW;ZdGH6I>r2|_ z!?M{L7rF2UQDKcPm|jD+j^-5xq3BWe1uiZ>$)Gx*RAhN9G>m_3Qqt-`K47=BR{v~@ z4MfXYVTc?UIrXkx3v{t}qIYzLb^-9c0I|XE#p<(DP?_v+IYX0((g(eO%)0{FjFLo_ zbxmv!Xvhk)j#|2D){clBjTz!78WTDVtI8pgM$FA6CYqjrJF>^1SDkENI4igFEy@K_ zG`B!iAXp8d;WdA1g~))Ky)oPTOpqN7pGq5?2;b_A4O}l&kh>GsE8oCsBBVx9Ib}bX z`K_Bevn;;mR8*v{#Kam^^ih-8qfdM|+mmBAnvLL2YUJS8p&AEBQt|ZhzGpCkx=gax zDCynjF0aLD(_fEy8k-Fd84@F5U7){^<_)5}rTWkqm^y#yAUmX{a}5LN&!&(zG+M%igL0k6emDhxui zY7`l*248=++(o9@*D9ppEP(2;S)r;HMUSu*La2oXtpW%zTrhO1rWG2ed>JSqlLIzT ziE{nM)$Fy>bVu+v>SmVShl13TY%~1cP)!jB!cC&^SmU6KnBOZ)WVq~H2uICVqp_5n zb-?`t}!KgIkCfRl=GPi2INT}7f00R*gR&P-)U(}qzeXa&(HFi+*eKBP<}2oVxyAsNrb$w>z} zI=X)@_$0ICDXN4(2ScfsfIbWwIU}s5m}res1Jw@|RX=1m+@Rtx1f$+eawv8VmS#3f z^swb<5coqXP=jsI*Onxi4QQQ1Wr>dAtt{Xh{QD}x|A+AJIK#h+{H}z5dFS?1a2_d- zFW!>%-M0r#UnP0uk@9D7jUoXJHW#UslF5Id^9HKe%yPEMry`RFhn_!PryUayrHB?H z9HL6XU?MrIf@zi~z-00?sDR+vLagx-X4pa+j2NS=ADvAHV6w?0$PJ7{JcWd{{E(J+ z2<*#^2)L)cTM1W-a^Nt6rOw=u!zBX~Wn02A7fZh6>ODCo8mSNRKNBoJ@Zj z5|Z^);8>w&e#ewR?HSQ~gO}AOD0d;|r7>ywm-3L@A221n68yIka~A4iA~f&8QZhY6 z@OJ%j0B)iqNDtb?97?DnB5=v}nJ;u5$ShB^jzyzYP;AUbflRPI+w&%~&$tBW;kQ3C zKx45ruo`F_jwXq`YPr}CuU5W02hx8K;UOIt=q6+r9foB6x`xC_W2?hF+9fzjXA4#Ld1qQ7-Krs;6+=r53o9G46i0xpkQXbkv128VF(5ehPz zTU$TA*t5`IdN7&{*ZOhIol}V%8Ob7Gi{X+tVE1h?T-1ihQpVO3R(`#}ASi!Ss8!*g zQL5G|Cnr1ri3g4SInw956z`=jbF@4NUGS)-xc73g|57l8x`(g+5}7T6Hg+X67JQI9Lv2?X+a zo4uq=s2{18Q5tkjPv#4s`I&za;JcXCw#Q!OA@*>Q)Ba5-}m| z0Vh4dJQN8UIkXXi_3>#qp<;txp-m8fXlnP=D8S^avFZvn7khp)1Ps%g12dz?8ddux zP}Voo_}{JWLhe*=U|D}e18kb2Tjd{6X46_uZ@H2bt$h+H`EDrcz1}fs_bnh1N;@iS zcS_w7A|c_C-WSCHG_A*m^BLtbHM+h<=3ZR)%|LLMp)ry-#oyF@t`<%cM)?m}%>)r{ z$?$EYRA8Uy$(3ZP(;CADW#%;c{CK;beKJW6o4)jvCWG_C7HEGe4rmMJV?9$)t*899 zQgiTCKtwR8I~a48A#8?dnVg+_*Uv?e4*>g~uG$8f0+Ay08_vXIOJ=L4 zp(X=+W9(T!&1$fSzMVG>#4p z-fW!th{=z68p9@1EvNLx76x>l`pHd)FcQXIxevWOGU~o=@rWxSU`?DfjN7)XULM-0 z!rCtMENb-hcnd`@u(l{9w{y|T?Bsz86dxAe>q*LF3}q1Ug4{?~g-1hvsz4N-^BV^I zx-sD7S9*Wk@C;G2un{%0W7^m!V{IXX+ zq@Y_tg2EN}S|DYrmlV0(NM0ax_sm_*%KaA>k6?}#gDg25Q~tp<^hHErum)0ne0Yrt zu|lT27v3t$Kd2V#6BVCb0gsGgH+~X~qD_^kfR=wQJ*avWSyPPyNu(=KU{`jpA*P}w zm;#hYUn*2(DKdm?AIYc7h9bX8*~Ag>3tgG+-N+|kGtwy;Z)1d=|1HL3n;wqFeNyCJ z;=YJG7!7%{YLnC}q%ewQZZ3lwMc8zT2ZrwwBt|u0`FIXsEM@K6=uqWHD;A%bv1q!| zvF*&)%e=5beS;@7fc4IxkRKTLRl0Hzh*EYl|J`y+cfyf7D6zpxwa?gOO!nU9Wdd6} z-oI9Y>7*UKW@oPD$dv&_^7!B)5!$}8Df@p_ge-%p80A#=3j>{gl?*ZY>h3&n1C0S5 zE`KuT^1yX8CEkHbD=oXeRXlrAK&6+jI+hO{B8+En4Qh~MsB?VHYt4wex$E>Awk z(9sgex)ii4GFB`OTc3VO+v(JF2SS|CX3*?J9_hgw?!xN%9~S^VoaYKTl%&uKFVit5 zR%|3NL5+K$E9T1y!WeWH^t{^V}=dK8pMl zNOh`8GPP%6-CeyI0ZwVK8{s=N_KJTY{0gs7^UIEfN4mfx9jl1GkJh1`Y-5VZw6n(n z*J4+qsR__~aMp(fZ(X6G3+eVwxs4WyykDiieUq%~#=(=BJ5mXxj=)@QA@8F6TNNi!5C>Y z>EqxIp?rms-J56|Sk0W6bn<_>friJ}(t<`A2#7=#Z$@PDHZQ#%&wMjKZp;V7c; zuPG;UCrVfDx%b8YpT7%ov*85mmTO2ae2GAoIxxxSG_m5zhqbff_pp z{2xW)2gN^>ac3iW#)I!D_>Mw0rbcBGS0RLM>{~vH6*YMJQ2<=ae;|JzeV&|A28f>H z}2YYI;41C^ZNA{}=W4RthF##|xgHvZ1p+8u(Grr9DC9vNDa~0e?h4C@>z> z?gp2r6Jscfak@_$Odx;CZi1frp$*&_JUmb(t*8bmMgRn*b!8pgcpF3zSwEko{n;8x=(@{; zB1mK=HO$2FK>WKU9o>N3SLs6mZ5!W;A-C*zc!EQwh`3LGkYLXsP$UE|ssOV-rT?#>UIqFJXh3`9AfDP`ob(96(6eM`tOkuyi z^bpz&XK42s%4cDtd}hb`adE1)tKpCK?gDXPmbaI$!oYv>NIS&l0fj2#$c;A36*p#O z574=@cbogU8f?kWp`xYvjse7QjIPi#8EGvH?{uEXRa&XLQT#yrl`k(rK_*q8(C*6W zB9O6_J)_?g`ZUF)w3#7pfSaL!9+H1>K4;A3W7wv6vKR_2Zq!1d9oMpj%N@hvsJKTD z)Hv;FER=r_a8&P7D9SD)nleD#^eZ$VKuU;@_numJ9^X#%R*kHFYQ=49dchJE^YwD^ z0A2~WTTJc_8scJ#p9&43rplA1Gkd05lhwM_vlT}0EMzL11IpH9Sa$Cxtg45v*jSSq z@c<5ZZ1l@0uuc%*U92{q?N+Wm#OOvsv`;uPNW@$-RC`GwM+S!QL z1?j@^MGB_XM6WtK1*IAtD5-&E5CDI$nyw@wlW7)Ff~xRclOwR0DnTXGZM2cQU{!3g z!)TPtT{hdNWD|}29PkBjSPP(iDae}}Xs zpgSSUD8`lr4>e0!BLJ3(N*pse&{6{_UZ?c5O-UvqHOMMtc`15{TOOuPoj!lFfp$m} zbbpO5`*u+@+gH(IVF#(vgR?wHMpJiT#VDCn4LNR#o)e>}z{w-MCr^d_V$Tj%d`&)A z=N2o&jFBD)Ug@?T5ruq8s`a>!L{&TrGL!>qLX9hZcVt^0Qdh${zU7lx;DjfiL?8vG zz$R_0dZ_+|%V2dDEM${o*gSuU0R=n5#07ws*9!!;xvS4DP8|+oT2mnrqB5RMi)6L# zUH`4Lv?=(7_zJM2(LjqKhKkn;y?urhIgU%6H1Ip{`bJ&uR*GUAjk^+FD#Mo2UPRj! zFGgrH;T$YhFQvg!fanmmg|^7Ub2zLjDx(Gm|5?X407Pq+vXX#$6bye<>=0xXNf*>` z`0I4i&c6o{wn_xifNN`AgDo}+mAT+WD*A50dZ{ZQH3H-TtYdW7;peD|OM!(^s1I{X z18BCa#7M{58PV$}(Wwo;PDi}=@NHMArZJVR{+S*(_*0O!XNy+@5G(|N(u|@ z52KmV=aWW8HRuN9aU_$ZVvoDPl7g?^Zv?@>q+i7+fl_*ZIZW8&J5#WIC_w+`(JtP2 z=BKIljf-rW^@m<9n>N3D`^jYdm04+tilG3KkyJImJnmx1=JO)0W!IGdhn`DQfp&;)WnKYq?a-^Q7@DP3m zy;(8fpoR9>SRsFBsW_3UD~(u&p-Dy^vYD~`o2TD+fR>BvzbUDm-}9!VcGa057zhq& z?_-*^CEDK&cXS_GYJmnbTDRCHd)yFXr}rxxn!QJ)UKO@QO6HDU^Uu;!V_#mT?qC!k zgj_eVrpPv`t7j4i(pFjHlzg$0fbD5YU`#4$#AphW$1Q)L%5S4d*n>wRu6$#sC<)2e z8{21(w*LY#wMagwr=qBnc0U@mH_Kh2t$t>v=BF5*X7#?*930(chT4>lcN+3=n=-Y`Myfsk5ETgy$vb?oN+S5A&EmW9H zWdYEuDr0{v*@wfDi(X(8ZM4CX1xLsk9X6GKs8UujHWNBI0t-~8>Di))=2`IX%UNgs zu2WM31Q_gdD;$O>XO%Pnr+^R~R<$u)ph2xIwCl9n8apKNi+YA7$?CBE)8SSu(C)y& zbI~yl`2$28PzR@je$nrZ_uhj^`q|agzOzaC0yTd%a5t@%RID3yf6vhl zMg?xLCQ^ZZ7v?qZ(ZECFrMl*dww&go^X}+ncU3unBP3;~$oBxTx)pV}6 zC6v9k-j?@nKL;-oOsCC|w=3=*x-3~xWq`E3L)fotINIcCvuPUFy3mTxMY7$|rDcj( zFr8`GM>W%2>1n9eJ!_z84Xh&A0NGu;yo7&|X(#As+1Kh^BC(fEb*2HdP+288VQ1cL8hT0b8(a;p4 zLkDn}@E3iOq8BQv&` z1?mVoG8D4QRZ>4QLHmOcPt<%s4ymwLoY*{`D9N|q3yp?GGt<5otoUd7Q5C7BoF9n8 z!rHM-GhC1O_Ms>xRS1$cZ>B@x^f0X)i7E%HF62{|im?PLd#@g}ULKD4h>C*?2MjX< zy&$pEe(|Q8cEgz)L;HhhvAX&r5Ga4h7)K-J_>3jSQ14G7NiiQEyk=}PkDK+YYiy|* zU>9fI;?b0v!7Flgv?NZKEo>aMGe>R+6i`f5D@Ch6S@6|Hk-gQ}(ubn|M~z*-sL83Y z=E`<9ZZeWZTv4#IP4m9uP~I@OUr=0YWpIi5HOibyT8R@pWiJ@ZTBk<;bAf-?&}hM0 zIYOS&K*OagvuhxuN|d_w1Y)iWLZEt#7lnti=UPbx!6~@g@65RQpAAag*3^Dg+i=T- zzP*?hm7JIxyrc5}C`_$ugwj8%lu%|$4mvtC(E=^3<8Vfo$YXyAe@jInEm%3; z1P}$)VkMtQOo`AB?$cH!DxBcsz`f`f8-AtfWZ@~uae+}Nf~9fnKI=JOPd_Atb22a ziz#(AHl)4<1iRL)l2U(EY6|jRPc;Ns8;(LIwn7x#e%BF?3iZ&=p=f>WfD35v4F-Ll zAjb%7G$kz~FvZr>iMd|D8+$-NKZovR7*1*C9eEs$cZ{%MH(2?MzG2={rp8N?zaj9F z(uHCGG|4qoh!qfH+suMPEi{^B=@vho(HeweMb8)ta_FjKvdMpBrX~VdFv$?}GE;+M zffD)(m9=h7A#XO?#*V73Ug?=|tWuboR)&^qt7LmM(F&OlvT>6^T;8rbmgUbDTToDn zEErXqa9y-%z+y|s3hl|>$iOM_CZ6o{=nN!zceR?s5u!r;5ui)ldyS(aOaT1U*W!zL z#-Ml+U@hueL^NdY1H;e1E5kU*A&*|4K^ONELvU;Pg$;QsO z1q81ui}jTBq4AtDj7ulmtzRj7NU*O*mMM2-EwB$M=dI|Clim80>o8J)d5VDlXYi_M zM8SK6NAIX|PxNwhh=kj>DvQ07(Eg_ZZu1$qtjru4k3iRq%g=OS>elENX%8*|H33n&Nd^v}T-m2$ za(^VR-B{FVegPLXerl6%s0!;Vrbpp^#H3jxg=`Z(gbmJs+U1FpqNDs;o#HTMe=_ml zbM-KLkd=Q^ViAo-f$oKU@oq8IcVo4$$#R_}&rG#PTmJPxw!`O(OW!SId&!G{vY5g@ z>n>4zK!^hQ4)w$oQc;=_^z$2oG(mdIqxTIOg`razez=fmC(?gwpcQB*BV_{0hZKED z?Mg*pf{^$Eh3znyZxS@>e$B2bTuNj=n|ITScB+3nGkvQ9ToOGTEz#l1liVoG4xTm- zhq{B2$D{rfF31p?kq>Jz*mnGoLZS*yw#~ zigv&w{b;r+5 zn4YZ{Dpgv#jC&O2_1F&+_0C8^xTUaHeoFR?%C?gA1ZP7L+XZNgkS|1V$ZGWVbaMFO zXMSeT_B+q$+i7hJPG9bp@~}ZtwOle)W;B0nooS*ao$e?A*={|ZM=Uo0PXvM46vGSK zyYL_Azvw8Mixd(-(&*>=LZHM2orl{{>72nipEnl(sQ=+jkr;rHUZuM52;>;r!R zg4-+`n`MPR074nWfND_yl( zabz{!%0E-1YOq~qHRgLGa?pkHYczkEU;uu;1nKv8&$lz)mWT)_L=#4BQP!%S#(%(e zQ0gQvMamlkM3-IZOFJs&>;av*Nj+S&$oKSSz9%X)9KbUUz_-PY=g(@2A}} zs&lOxJNfq=aecYMO{fObSWy_$53e-Heh#}$)KL+XWE#7>-^kEW@>6IBwPt@><^Fn} zvtCUKM|YXD>V2nB88WX*ne=2NQq;$Kdrn)KUu=howFfwG!=+f~(a&U&>MBcfUYwhZ z5bX_tP#8XAEvh_0Z~&A_eKHiMc?6b(;xiQ3GPMkvnP{`=X)E*{z1e=r2oBl}PpL%K zNS0-5=t=|^+DEvU$-Iq!7ixd31$|5`YJy4#y){z$I`oSp%~09=hf-&hcL5|l^EMbJ z>F_bSgN~$_Ufr7v`D|kZr52!D6uJ{OJ{rykQ0~imV}CX4EdfShL?}QxJr4*YJmH8Q zHa*o2ExJIBpjLK=PnnYg!T<;ka)6x|{sJK90{LP?V_@%$<<^bA2iSj0lWk9o@&@I; zih%zilv`FPmq~dolxy$ZevUm^{ZmRkoZB>)@RN0#FQbA;b|r%`l2iK(Cq<k3s7 z{f+P7hBIH4?;t{WOplRP)_qLtn^E72Oo2zi0)YsMnpWsVdA`o)hB68DXicu4pdJ!K zMKiV0JyqcOgE4RlbB|PvXn><1KRSXw71oav5>>WX85(~lATy9vkv%*Q^Lk0SEZyLBc5U6g400uCNU!q+gH;VI7oJjg`=c0~oq6kdU@lX6m;*0$&t z4R*xZ8TrIL(si!YE+;Vp5>ox-Vnjq0I$XchX`L|~EBmVR zW?rF?$WufPbA^2eU)FU`y0xg}x*6kng!DiULkWL3jT@AgqOPkr2=T~m;|7hFrAMn& zKqu<^MLAF4wD+6+KEgnog6ZuJ6znFpV;$tL}QQ3pqb5WURP?X=y~*EL>qBs9{nrgdHM|(RJIl|YBLdcJ%R_X^6EH&Ax--ZxP8nP+Yr-NGweqCd{b3jgG3iu4p8e&|%DFO7fW$9@6HL4XA%o)K_#4 zSt{LD%&}@%6M|L4#5++1HrBI@sw(nQ1)X7eLL&xXY!s9IsR zPz2HMWM-1NCrwy_0#D6 zXG_5=*7ImXDf1&jrQwR4r;mRJ6tq}26P8YjF`lA)e2B)rplQAuja9yi6hsE?8>EIy z6vex<;@B~Z2-A*cT3H6hW<{>qAykbzJB(3uR1XTec#3qwA-K8)V`2BKG~-+6bA1D2 z56=ADVC>yE-P_Svk4Sn)VUO-jW#fw*r%z}EKp7Hgqz?jVCu*$99&LZW!-!hobxQEI z7hP;PV`x?O36cxHAMYA?`!@G%U-FVDN}>llN2@V-%IRuEAyR6Tc#dy4^5^vb$&n9` zw|H87+J>aAE5M0)bq(AIxK#~{ZEkq!(!73+y}+O~r@(1DEZ6*bd-6Z9T3BE)FD9*Y?U z3y>pmR#ZR>NTG8RY@C9y8DK3%v0edTH0D4AY1llJv+^ilQI5t2SoBe^6y$fNQcgYm)A32B;X(01gOG5@m1}igzFrlx{TajR$|!;HgY((<9S8S-N`AthN`^&A1B37_m83bE0GxLNT8nJxWu?B{ zW-M*nEjoQ|w9am@q}83W6!i2f4HK2#18CNs579=M>K098ZqdLCCcxNH1n!e2IigEQ zBvZj0b&2I9?L&VV%{rKvBYK@$(ui2fBfw^Mq#Q_hL`RtoNNqgIM)Yk&!ej(tuWCed z&rF?fJM+`j(6%j)?RW-{?U=ToD=5=63gPK&-F^RnDgfnZPm_6o69j5kV`Dv>8YWG5Y{ZJbk;%1p5< zS%*jdTT5Jbf*(s1&&sSpRnMh>q$~&yNW&`wQ6QRggdnKXOup692xO`9w*@oe^F!Zr z7iP}?Y&h+iBSBC8F6Q>_?6#wjA3&1@KPG?52+JkuOV=$_*onH{HJJa%@)X<^6bK_i zqy*P8y!BH?DGWwPT3VIOLZ`)s1P}@gpQg;d-F|3IaYU=+qo9q?gK1yVI$sOZHU;F0 zRTA-}LdM}&EtSk@(s#>^Co4+RU0QChCt@^**3PDzz%U1*dkW0p*n}2^;BK!?t8jl+ z(J?olaz&otb<-r6bJH+8N-`LPqUay&q{&~wM?jKoGf7sH+Ce2b3hRvn0sbxyP|Q${ z-mLvV=9Y>+W%GK?xIch28Z^y>vGTg(Mnw0FnCml2n1&G@QVCtkiNMx`BQtUyC^s12 zqtjy|eQ79CX@O}CPz0gmqifEjtsxJx*t+2X&{h?#3I`X!c;70#$-X(6en3xfN1%Xjg&ZaQ0Brk_=d)B$Q`8S3R^C?DRVWTM6#}w!=|U7B98Pzc zg=G7Q^BIudfXN?$E29Mg;f)pbDNgRt z9I&ZhyYd+sA!s1m(q45f$g9cN$=YQ!NS@(BUS^AKIs>$`Okq28GD>4+oy>|miwu&F zuH*stP%wts0jG?{n3=9Y)>)Ahwr5V!Fl>S<;=hEZ9D``HAz ztm0DPZJ;&sG?TNebb^$J9b|<&1-*H8mT5_6^J6}VI514e8JI|46ts96q()ZJ4(ZAP zYXWRZG@e64+4r&gSAu_h?<58IX%OE&BfiO4ydSbA{Piz?{qx`c{I@gan+)bvP(HtV z`$;R$fqdP_40m@>3xphspBwF#Y(y3$Rp3jCbg2~>r3)*M?H<3Q{WQBcxrV2x2f` z<_02d7<^7`KwIUX)C-eu@@*gwk^R2IGS^0?OXQgVYxPFZ)xdwAV2-wVQuNeiX`);f zG7q$J0L}vE$uY;_9lI(zDpnkl=aq{{J1r{n4ju*O9K%3^Ib8W)Jg=@^<|v+&KH z1e~-ek(pA4mwW4|j?$#(LNymj4+B*4OJW!-ja1IKC9B7Sl`RimfKC(bp8>?ik<|D^9~(JOkZ$SWmOX*Q~#z(3nDx z!hoA`aKTL6nOkycK2vy95u9M?-fITQWHz<6hCVq9L6nX69&!W4bfls*p#DnFQkUmxDwKENM2BRf~1PFFBlaPU4{cWkpjifB(F%L1ree`NwarTal{Dp z3Xz8Pej)DRsT7_W(PUNbZOhC5yjU=Nxpy(IZ)bnarILkA*k}$F9j+o~aA8Hd0VwF{ zB#oXR9^s%net%970N8M|E%e1iw1*M!Pz(H<4J@%Nc6^_Gqw=OEbhKi_hGqf?_=|+ErI*J)z0oDc%C}1TVCJHy4HNVh5j@rQXdytyc=g^8bg24^ubT|0#L1B_?VY>{rO(ItbOmPTd7^sj7 zw5No(Y?J9Snl?~)D*Kt_t2B(7*BPxh3Iq#+G=ctF#g@G%$E&p&I-8W_Oprmh5uuD9 zAjt@xSxmg-t#DKDEK1$M>+crk&($DJuibCr9_;VRJ7{~R#zrK7$g2~Ul>5rP(2o%5zg)9Q6}t0%NAl5<%)zO8bGfL38- z2YmM^{hfu)*v_JcdM@2k-lMrzVX=QmI;{zrV6Ra&R5RsertqL(wHJ93t!%Ajxtr>Y z(m@l5nkK(}-c^?@P*DLd;(E3(9SnPuWzZ(_}^fpPFY~cg;q9PqYr?!AEOz1zu=O7IX)^(GneaBXx^8Jt*v* zV|}^m!2YgnSOMkj-txlHWyV3mEuL__rvwRFbu`j|eD1ep_zmfO6#@Q3q<5T=-ne67 z_#Dz3Pdp6ECtC#+#D^0j?(Tm8L!i7G!m+^SHRYFq?MS47*^8>|r&W6^TU55Q0~vfP z`Pln6xF*=WuE+&;LJV2aYRt8Z0$Q|9AsIe}QMDE}rqc1n3ZZ90kRdj(7vI{_k$VAR2#;7kh4C^>JI8n2`x#gB{X0&98NjO@A;tTbBpehU|sz2P7U9 zh$#==MHMpA7&tq6d4NO}heHRUDY319q{k77cd9#zPxpp^yaB#fpScgfH(Qsn1v&XM zRvII|54({mdxY*xD~=8P!;AT60lr$P-Mg~ChVRC7xtzhev(bN5RtAS)#T2q=aA7U) zqYo}v1-G0{C4?n$y4=EE0AC7@3cK|v*2nzpY9hO>uQ#R-T_xLGivMh^WlhrhTA4H7 z6uubjO~w&~L$d@AP0hxtdwlYx@J-eG}YM?ZAwq5qx2BQ zhdkG{pt(_zs%w9UNp3MQy~mpx2w7KrBWSqc%(nx3?_yrxUiq6Na0Y~VZ22OFxWJPY z$4n&}5^1)JYkXFDkfv9;aLraTC$yH*J+1Ie(IxyOvLh5F(5mIoI8b8Nu^)=mw)5IE zosk@=(04sWkN5!VeK{M=-*s3oBWFK&NRDib}FTNKGj>>;pDs%;f~wN=pq~P`Sy6Ky7UinJ&V&r_g$tNxRd|tb?xc@i}@-4-=h z&>_M6g{(PIp=JXiBf}gVKDZA^PZe02w6=RrDIOvjul+Wlz^VHQM^$) zlj%}_&?4uTE2PrHpehf37ba*#Osy6)anMtuFFwUQR5Y_|-DN zcm>1yHfZ1mbT(x#@*5~Ym5HQIRaPoy>w`+Nv@tCIR;qSGjTe``Ul{k2Q5Pa1ImMv( zl*d(JWAjGZ+^O=0Y#B8?(l_Fg2=%-SzRR(H52I{~bUI-EsR{urh5ymSbpp)^ep$R$ z8m#23Uy$uaqJpiaD+zTa7*`r;i5)8(-!p4Szru* z^!}utV}7KGj;PqTN6q>57;Zz8(Vc-=B*5pT$fnk6U?zl?t*2}Ko~|&`ILs|NKK&_& z=+^0twBFYE_v1>|ZxUKA;H0}RqJX}V&17bsC< zi)nZZ2Lg@xji`?PTkkJ~&cNVkJfmDI)u-Bw4s%9bf5HyI}nNrhD43~ zEO9p=(C_rFQ518)6Gy_N-%~+tD0_XFlia@tz8Ri{eUu$!I?^G{JU7e$tikA6COK)n z1>LMh#k5f+?(PHdt0Il&DG91dT=Bo~i|W7V()U|U(c}u;mw|dA&8B>RMX`v9F^!>> z{8b~#XOFfPLZ@iGN9OeD^RN)G53Tt+PYw(hK0xX4HqY-7EpV8q0%Wm$Z9RZw-m?Hp zoXFZ>PK4VProVh}lgbbsigG2B{iBFeAnu7sK*;eRd$vs=vlapBn`GXkgwG_}H5vwN zuqzg=Hra#>ITn174%%3MkJ-sY%mcomOha!|aF?i@rt%&d);8stkGDndx{iiEB$J#M zeEVuh7RzGLKZVjLztwzxe@R9M+}Xo7*pk*S*$zTaqnaTohl`!ZX6CTMUfCga;dh{n zc^HXDeX`QOTWD~gyx{0gL8)M54%c8KnB{8ZMi79)m?<*6j2V6s^K97 z-$enL-CXQO8gN}J93hhLGA_0W2i%L!oN-IZ5O9Qdw(Ap&S|=A&RI>0%nfh+RaxF7IeeXmf?Ox8Z)Nbn&Q?Bu|Is~%;t6fked&jTc8b!O#< zbTptasF-do%8>Y+4#x;AAC-NqVfqk%bRa#17Qlfx+me=sriIA#XQE zGh)1hD%=tul-1pZx${3aPWzoF^vyVJ2=wBV2E)pK3_vXIiVgfi3MmIhvQB-yr>awS zDjuQ*@HJ``R1mVB3Ex0tD>Nd|nZksXw!jB;p|U64NL1@ns_zeg+LyD={9Oms5@^!Z zg=_?+3TL8pxXBfyDBDM$LJ=kSP@DP96?d7b?rcmOn+o`Vegd4EkhOxqgtEmcDhl-Q z9@Dsgyj4YfT}Z8*n?@wbv~}dEVn)0f;7-O*sfzLuTCEWq4CDip<&Bny!d&EzI$QiG zB_FMrZqil_f(5#?(fZNjmy0~T`AZ6G73xq3S3zy4=InKK*|-K}Sm<;p1$H#5E6k&T z2Pv<^Mbq_LA-qE&1#vIvbpnO&0S2@{+JY2+(wiW2YL4Sc2?4jqh|){Z;6F>r2pYF`HGPd_yZ{YOYJVcEHlDHC{4A_CZ?Ia9v5ylZw)u0a zxtlZWbXfs^Jk?c#bOp+-C{u*cr|mGyOdW#^O9cC(%rRQ8D@wie+8AaFmgi)DGw9wz zmbGw{#y+ zt@oxLp*(bXC^!n8$OXEY9W8kv3>Sv`!A`e z9nB%(TqqDMiu=!5i-G)qv|z(IdAN6>4L1DTv6r*<{V*vd*{~`u21x zZPP^P5@e4l{^;Zz_hs(<&kfan=Lvl?RNIH6awuEfRi!Ux`8@mxmi^bMDX2&?E-}NV z)Xz_Jdn2I|hbdT~G|+08(gcsE7LwKmnIcV`o03`?pM)4|qlK$~KLvX{Kx$vkIP-TU zQj4kpV@AY6<<&~U0(&B|+Zq7n+-Qy~wU2!nxzJqnt%n&a0e*z=fW4Z6p1Gm8TaY3b zYvhK-qK5Wrky@FHo{g>6D!SQ!>IRmfjxZVowh{5KW@J8a3nZf_E%e}3>O}g{YDu)k z5l6BmnWJZN8P(T+>Ag3jv=D#E^?H<~*m;nVUa|OM!qXLGPe~3XaEZcSSUP<=Yy;Fn zf{a&gwBq+67)AI}|Ix_KG~3Ev*si!nC57T$q`MSHKNq0A1Lu1)KpP!&3I*-vApg6< z3qhW-Q*jaz6GvwYvJhj_J9fP=n#wv-H0d=#6g9C)s;3Qq{YD(fRb6b7T4tFN8dTP9 z^rYvdwN?Lw_}QfX+mAM-u+%Y8d%mKGfhv7Ox!Y#}+B9e|rM!o_FW#{h)5f6ejB3|t zwVlm~I*}QS6aWQSaI~c9orMeyL9}>L6XmQI zmS3OH+5CQ_fN#+2okZb34fLAM&?`NQ*F&$x`)T`sNd>fRf^(^0cCWbqU@9_+8dUlc zKyN93V!O#gY<8WFDP^N$2e6^WiRDH`8KK3rp{N~}jZ=5Ub{2HtU9L=#l4H z!L>&#{^{LBD&Yy33Sw5#(Tg5&04t`fC4EuIO=zDb83f)SCAg9t=mX?1TvLdHRl*SY_H8X9!Pl$sV5XIM7%0-49GxEOsBgwXJf zop}Ovb5ji7jiCz`gFzby++A=;L03yb*#$Xmk5q5d*<-YNcLq+pVX@D-rMtjlsclih zNA8R=^P}b&>wOqmKU$cDZg_vx)?bgsCUOyW!j`{o9g!B0*0}1C8CH=^A$|EP2@M5* z6tb1euLvzoU1mth8w!k8CR9;&%v2N;BxG}}ipwhLpG$m4?Ee+V^x32AzeI*CMK_?< z#$v%VTQ`*>gYeR(6^V%4nhWh_B#h{O9~^;C7!uKZp|zl8FDGe2oVG|0oH`q=<*YJ)*MYFr1hX?*KXg;4 zbDNPV;Z`e`4RE6}&SBXht1=jh>*YEZMpOi%U=$$$We374@aTg$s_qS1rvs|F zQB2$lar%rZP zTm^aNTNy@I1sLhWAx;>AQq2NGw)_*7oIE`@Z*`=IG;%B#z$`P1iY7$rYrdiaM7Pr* zDQz&Be8=%Na)U;`MtSNoV5EncP593Ov(V_Hlv<6OoB-(DIiWQH@d5FFWvmWDREnAK zETbK+PhTOH=7AuD)Ae?`1fteIod$4G`)w0NSJs;#_t&jaBz@U>vHzXO@`jMk#DDUT zOd&0pLBki^)+0BxxxCggBJKf>Mzke2s@P$qO7G!B|OR>36)33H>?Gu^$YqWNOm zC^*<>!nC8(&+5sAVXujQy2I6fV*w+C1cTc63=F~661>7A>yxk~VE<@gk%f$)H_C-^ z+mu{!KjjhHvF=(&%bw>wEU|wppqQ+Au*&S7xv7NeUD`X-Q*zX~{9{Od-Q62!To&qHz-C8TU89hS4`CkmR zZuON=(cUoAuRoK25oSX-^@49U!%!PuW}V)L!qrV@-ay*t+|r$Zw4EJu4_&MOjP=Dh zAB4!Mgh%0kLeBT)B4Q0ulEXoet&J=AiUxe4N$*@QtDHjNF%lU%y<)c!?a44uoQ-s2 zq6AbQk)wpT++=@g)0M07H&GiXx~yMwXrDdU{!8j*5n4ch>C&W=lmMpl;w~sA!4u1P zS{a}rDzuRtVYMMg5M9V5X)H)+HjtZpbVxeov*}V8#Z$}^DXk4XlzZEf@;^6L`<*BB z%~)-znpc|W2~!ZOKQkMU4O^U2lo+~DDR)vT9?=6oq@XQPvp&GB1-YmZht3sO$Ul)} z`>pbwraD!B;cUPbVB%+rhrOI_=I=VF)|NdQ=e`iDo)resxSf>_yj4@Crsy=GNlqYX z+O4iyYHtBTrdvaCwX8q^LQg4`?RtlRT-P#Xbh^pv{Xw<&V3MAT#J(nz^a_0J7jVoL zt40p=)%m>H@Q`)F$Q1&a>QLh(k%XpKuN|2r-<=76J)#>HETNSjrQCYJIUpb1+r_#v zrYN}KkRH3L>cf~UC`kFP<89kv$!HG8dAE(qmOwl)SGqpRGFy$}6hRpJ9efR|c~8*F z$uTH^QQ*TS9BMSO=)|f=cd5Jp3I(c7QA7dWh7XHwNGJ+qGq-zA)tQbsWuT$7vh_+;i-P4&jNcA3koBxR*)pCYZW&WN4sb+tMR5^yRA4#S*uH=vPFyVJ4#T{j5 z&Y;RAW0jS*$^ju7`ie#Q2Y zE~P6#C5@<8S)kcES(SrBt`NyBxlwi%CnCsy;b@Kxs3dm!(C2+J2wxIXl?rws-)n<* zot9#%#xWE7(IzsIkAaLW=cpf0@^Q-F0((|Pi7Vs}`mKsz!4#O0%fHzaqteCY-%!=_ zd)`phtIoWks?WKlJ3&=56rQISA2-0*=luWxpv`{=uhE$Hs5O5EstVnf>*tThaY6=v zjl-_4Ux*2E5W=h_vh15@>aT!4PJe^;uh3nm1)$KOpr7B5*#%6u20V}EF+2LFgwXCE}!^3U@5o@km0 z#EsQ7UunZ^-D>U+MT!!2X4MEZW2gI-&1o`wW5P?xXtA~=1W;%y?4z*nqMYe?ydQw7 zFJ_wgyHeLH%d)bKrA6F~%w;h*z+8j6Eedy?krd=pAlVh+>We$gOeM`9Bqnu#vMmrW zp~!+3!nWv7E}|hI2!kR8_ivc$!I_^JQ?)bS*&=-brfPlP^1Z%8kAB84>DAUl8>WPp zD;0?aX$<9^M}3h^;R>7qG-{#}=S?*!(u+B4>r$!Y1s5#b`3l!rfu&vHUjy#Ap|%;m z=V%8CO`%Z8wZ*nTDw_NZ4V2P<^W=DpYM?sWQ1!nGd)ZV!r!UHP>0vDt=(}jXeb$kC zKq_~-6SnKUCF!lQOV`Pook_2O8c?RaE!D5C!dO#@nE)K}8=`vmdF~scdJmq>|3rvt zJtL~)IV`XC?(HXgQlJ$e?_neBs$WF-1%jhI+|EEU1#v3Mt)8Z_u&ddBq>ClU?&j++sWFa^I^%6t&PHw`F+TE6Boh>XnJQIm{+Ty5KJ7SNkJ41WOC zM8D#}8}7m~{=krHD0}(W?#l9a!yVlP;#!Lm=>Q?2p4;avG@VEf&q3(_NL>QGOZ8D( ze?8t>w5$=6zF-hIEi`2nA*^2*vT}&D;;lmg?}W7sv|KHxb;qqw6j8xU5>0$UmOJk3 zX@*iRWlBZ&GO9>Z6zWXaaV#*bUof9l3PGq_!8(t4m-fy7+$igJozpjC ztg+L}otnHleaz&~t9NR!;APTwgrjqSps$;L<{^Dz^1z3GG=;}tQZ1FrRl1qLQAdPU z`U2EY3?eHNEOE>InU$+AWsUi}4q_e6gX=R!5~wJ zOpZd^sVI_vB%)NNfdxc|6?U+e4()4TV3g`0SFS7RZQ+6^>t=d^)bzcI=La;RwL$-| zB7D?+_gNpeLkT_{kU1*sDUq5TW-m=&LB+R%je_zlX;YgL$w+1^v~{a**{5^z)5_z# zMgep!mPPOGbvWUhA=m~xuH0<^&4V&vU1UBpDaaguDg6QT1n6r_yGQgvlwZ(Ru87>* zGt;a^KN=-XMK(QNP@<6G$iHjSb{zcEh+u?MLQ7Ti=sS*ep~auT1j@E0X+x7WP=Pfk z-VXrShdHjI8Kr}IRI+14pmnq6n4WB>5x-y|QRrfyo~F_L{m^i#OVQh)i)Q7hMX9($ z2v*U5W~OH>ZB1$jAjmK?bU3eKd!{H?@btNA;WubmNG3rCH7Cl{De#iHhVjsoHAbcG z_!!H=Tn~w@LgZt*Y=t7|UI7ngJ`{Gr8?$YZ34aQueOTQFLgM836!>|(Zf5!|AJfW5 zuRK-#MpUqoF82tvv}m7ft|CiA=^WW%rgB zjv3zo+dB!{e;UBHZ2{Z-EWkET+fTw$GNCGUJ*xn$?+9HXf5jQtfsBiss1};(<7UxD zMO3j!(6b3YbHhH=)QYl`Y`QCJ$BD{9Jz8H%grl5b<}V2{gYI+{#Y1oyXcldb!tfR?PzM7#3Ic^6r$k@dauohYr!MJn#1%}oK2@{KwULmyAwZO!bZ z;xrC~$vk#ACBrpj+j2mwEL0!DT(>QMc-( zbjkItYz)jp4n^B$;-iDY?dAP44B)xOsIPfLL0D867U7uC2aD1c?m3bsD#Jlt*D<~s zGGl9B*^99s?8r z000O8VN?oL5&nBf%K88RqqqbB8UPpo000000RR91q=5hc0FfOXECm1q7Q*vlb$AN^ k0R-p+000E&0{{R}O9ci1000010097C0000U`v3p{0KgSwH~;_u delta 57154 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 diff --git a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/extract.csv index 5e2f79e66..ce92d4f4c 100644 --- a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/extract.csv +++ b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/extract.csv @@ -1,7 +1,7 @@ OID_,NRI_ID,STATE,STATEABBRV,STATEFIPS,COUNTY,COUNTYTYPE,COUNTYFIPS,STCOFIPS,TRACT,TRACTFIPS,POPULATION,BUILDVALUE,AGRIVALUE,AREA,RISK_SCORE,RISK_RATNG,RISK_NPCTL,RISK_SPCTL,EAL_SCORE,EAL_RATNG,EAL_NPCTL,EAL_SPCTL,EAL_VALT,EAL_VALB,EAL_VALP,EAL_VALPE,EAL_VALA,SOVI_SCORE,SOVI_RATNG,SOVI_NPCTL,SOVI_SPCTL,SOVI_VALUE,RESL_SCORE,RESL_RATNG,RESL_NPCTL,RESL_SPCTL,RESL_VALUE,AVLN_EVNTS,AVLN_AFREQ,AVLN_EXPB,AVLN_EXPP,AVLN_EXPPE,AVLN_EXPT,AVLN_HLRB,AVLN_HLRP,AVLN_HLRR,AVLN_EALB,AVLN_EALP,AVLN_EALPE,AVLN_EALT,AVLN_EALS,AVLN_EALR,AVLN_RISKS,AVLN_RISKR,CFLD_EVNTS,CFLD_AFREQ,CFLD_EXPB,CFLD_EXPP,CFLD_EXPPE,CFLD_EXPT,CFLD_HLRB,CFLD_HLRP,CFLD_HLRR,CFLD_EALB,CFLD_EALP,CFLD_EALPE,CFLD_EALT,CFLD_EALS,CFLD_EALR,CFLD_RISKS,CFLD_RISKR,CWAV_EVNTS,CWAV_AFREQ,CWAV_EXPB,CWAV_EXPP,CWAV_EXPPE,CWAV_EXPA,CWAV_EXPT,CWAV_HLRB,CWAV_HLRP,CWAV_HLRA,CWAV_HLRR,CWAV_EALB,CWAV_EALP,CWAV_EALPE,CWAV_EALA,CWAV_EALT,CWAV_EALS,CWAV_EALR,CWAV_RISKS,CWAV_RISKR,DRGT_EVNTS,DRGT_AFREQ,DRGT_EXPA,DRGT_EXPT,DRGT_HLRA,DRGT_HLRR,DRGT_EALA,DRGT_EALT,DRGT_EALS,DRGT_EALR,DRGT_RISKS,DRGT_RISKR,ERQK_EVNTS,ERQK_AFREQ,ERQK_EXPB,ERQK_EXPP,ERQK_EXPPE,ERQK_EXPT,ERQK_HLRB,ERQK_HLRP,ERQK_HLRR,ERQK_EALB,ERQK_EALP,ERQK_EALPE,ERQK_EALT,ERQK_EALS,ERQK_EALR,ERQK_RISKS,ERQK_RISKR,HAIL_EVNTS,HAIL_AFREQ,HAIL_EXPB,HAIL_EXPP,HAIL_EXPPE,HAIL_EXPA,HAIL_EXPT,HAIL_HLRB,HAIL_HLRP,HAIL_HLRA,HAIL_HLRR,HAIL_EALB,HAIL_EALP,HAIL_EALPE,HAIL_EALA,HAIL_EALT,HAIL_EALS,HAIL_EALR,HAIL_RISKS,HAIL_RISKR,HWAV_EVNTS,HWAV_AFREQ,HWAV_EXPB,HWAV_EXPP,HWAV_EXPPE,HWAV_EXPA,HWAV_EXPT,HWAV_HLRB,HWAV_HLRP,HWAV_HLRA,HWAV_HLRR,HWAV_EALB,HWAV_EALP,HWAV_EALPE,HWAV_EALA,HWAV_EALT,HWAV_EALS,HWAV_EALR,HWAV_RISKS,HWAV_RISKR,HRCN_EVNTS,HRCN_AFREQ,HRCN_EXPB,HRCN_EXPP,HRCN_EXPPE,HRCN_EXPA,HRCN_EXPT,HRCN_HLRB,HRCN_HLRP,HRCN_HLRA,HRCN_HLRR,HRCN_EALB,HRCN_EALP,HRCN_EALPE,HRCN_EALA,HRCN_EALT,HRCN_EALS,HRCN_EALR,HRCN_RISKS,HRCN_RISKR,ISTM_EVNTS,ISTM_AFREQ,ISTM_EXPB,ISTM_EXPP,ISTM_EXPPE,ISTM_EXPT,ISTM_HLRB,ISTM_HLRP,ISTM_HLRR,ISTM_EALB,ISTM_EALP,ISTM_EALPE,ISTM_EALT,ISTM_EALS,ISTM_EALR,ISTM_RISKS,ISTM_RISKR,LNDS_EVNTS,LNDS_AFREQ,LNDS_EXPB,LNDS_EXPP,LNDS_EXPPE,LNDS_EXPT,LNDS_HLRB,LNDS_HLRP,LNDS_HLRR,LNDS_EALB,LNDS_EALP,LNDS_EALPE,LNDS_EALT,LNDS_EALS,LNDS_EALR,LNDS_RISKS,LNDS_RISKR,LTNG_EVNTS,LTNG_AFREQ,LTNG_EXPB,LTNG_EXPP,LTNG_EXPPE,LTNG_EXPT,LTNG_HLRB,LTNG_HLRP,LTNG_HLRR,LTNG_EALB,LTNG_EALP,LTNG_EALPE,LTNG_EALT,LTNG_EALS,LTNG_EALR,LTNG_RISKS,LTNG_RISKR,RFLD_EVNTS,RFLD_AFREQ,RFLD_EXPB,RFLD_EXPP,RFLD_EXPPE,RFLD_EXPA,RFLD_EXPT,RFLD_HLRB,RFLD_HLRP,RFLD_HLRA,RFLD_HLRR,RFLD_EALB,RFLD_EALP,RFLD_EALPE,RFLD_EALA,RFLD_EALT,RFLD_EALS,RFLD_EALR,RFLD_RISKS,RFLD_RISKR,SWND_EVNTS,SWND_AFREQ,SWND_EXPB,SWND_EXPP,SWND_EXPPE,SWND_EXPA,SWND_EXPT,SWND_HLRB,SWND_HLRP,SWND_HLRA,SWND_HLRR,SWND_EALB,SWND_EALP,SWND_EALPE,SWND_EALA,SWND_EALT,SWND_EALS,SWND_EALR,SWND_RISKS,SWND_RISKR,TRND_EVNTS,TRND_AFREQ,TRND_EXPB,TRND_EXPP,TRND_EXPPE,TRND_EXPA,TRND_EXPT,TRND_HLRB,TRND_HLRP,TRND_HLRA,TRND_HLRR,TRND_EALB,TRND_EALP,TRND_EALPE,TRND_EALA,TRND_EALT,TRND_EALS,TRND_EALR,TRND_RISKS,TRND_RISKR,TSUN_EVNTS,TSUN_AFREQ,TSUN_EXPB,TSUN_EXPP,TSUN_EXPPE,TSUN_EXPT,TSUN_HLRB,TSUN_HLRP,TSUN_HLRR,TSUN_EALB,TSUN_EALP,TSUN_EALPE,TSUN_EALT,TSUN_EALS,TSUN_EALR,TSUN_RISKS,TSUN_RISKR,VLCN_EVNTS,VLCN_AFREQ,VLCN_EXPB,VLCN_EXPP,VLCN_EXPPE,VLCN_EXPT,VLCN_HLRB,VLCN_HLRP,VLCN_HLRR,VLCN_EALB,VLCN_EALP,VLCN_EALPE,VLCN_EALT,VLCN_EALS,VLCN_EALR,VLCN_RISKS,VLCN_RISKR,WFIR_EVNTS,WFIR_AFREQ,WFIR_EXPB,WFIR_EXPP,WFIR_EXPPE,WFIR_EXPA,WFIR_EXPT,WFIR_HLRB,WFIR_HLRP,WFIR_HLRA,WFIR_HLRR,WFIR_EALB,WFIR_EALP,WFIR_EALPE,WFIR_EALA,WFIR_EALT,WFIR_EALS,WFIR_EALR,WFIR_RISKS,WFIR_RISKR,WNTW_EVNTS,WNTW_AFREQ,WNTW_EXPB,WNTW_EXPP,WNTW_EXPPE,WNTW_EXPA,WNTW_EXPT,WNTW_HLRB,WNTW_HLRP,WNTW_HLRA,WNTW_HLRR,WNTW_EALB,WNTW_EALP,WNTW_EALPE,WNTW_EALA,WNTW_EALT,WNTW_EALS,WNTW_EALR,WNTW_RISKS,WNTW_RISKR,NRI_VER -1,T06001020100,Hawaii,HI,15,Kauai,County,7,15007,40300,6001020100,8385,992658000.0000000000,147860.5647200878,3.6108521589,18.0705830803,Relatively Low,63.0775787404,63.4969325153,18.6199401875,Relatively Low,59.6420077263,70.5521472393,324935.2155714268,98076.5248682368,0.0296790442,225560.7358958097,1297.9548073803,31.6808724993,Relatively Moderate,48.7278745931,51.8518518519,-0.1330000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,202742385.5800542533,1862.6855876887,14156410466.4337959290,14359152852.0138511658,0.0000357579,0.0000000020,Very Low,507.2650077305,0.0000002606,1.9802850905,509.2452928210,2.6321796000,Very Low,2.5538810410,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0030589604,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0005345855,912658000.0000000000,8385.0000000000,63726000000.0000000000,64638658000.0000000000,0.0167507621,0.0001397988,Very Low,22512.2000000000,0.0001541200,1171.3120000000,23683.5120000000,11.8920653303,Relatively Low,13.0147002820,Relatively Low,0.0000000000,0.0000000000,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0343605913,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000255348,0.0000003276,0.0002460797,Very Low,788.9305592758,0.0000968737,736.2401254130,1.3226671624,1526.4933518512,4.6757862953,Very Low,6.1662913066,Very Low,0.0000000000,0.0148900000,912658000.0000000000,8385.0000000000,63726000000.0000000000,64638658000.0000000000,0.0000058883,0.0000028944,Relatively Low,80.0189118426,0.0003613770,2746.4650635800,2826.4839754226,19.2773661946,Relatively Low,15.4429446232,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,59632790.0585851222,418.9266599156,3183842615.3584799767,51591.3125103788,3243526996.7295761108,0.0001804370,0.0000114831,0.0042466231,Very Low,63663.1136805333,0.0284625391,216315.2971586954,1296.2757495066,281274.6865887354,29.5879096062,Relatively High,26.9708819409,Relatively High,1.0000000000,0.0312500000,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000032387,0.0000018297,0.0000727233,Very Low,92.3692287258,0.0004794348,3643.7043933928,0.3360282071,3736.4096503256,14.9734902768,Relatively Low,16.6070545485,Relatively Low,0.0000000000,0.0000653310,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0089662390,0.0000059784,0.0021079463,Very Low,534.6107152638,0.0000032750,24.8896914625,0.0203625042,559.5207692305,5.8706925202,Very Low,6.7469108145,Very Low,7.0000000000,0.0319693090,198555247.5326173902,978.4678896234,7436355961.1380958557,7634911208.6707134247,0.0015593140,0.0000038734,Very Low,9898.0167648649,0.0001211641,920.8471781755,10818.8639430404,23.6580872265,Relatively High,20.2115884136,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 -2,T06007040300,Hawaii,HI,15,Hawaii,County,1,15001,20100,6007040300,5213,409283000.0000000000,30161527.9142542519,97.0642891247,26.0474557835,Relatively High,89.4815710967,87.4233128834,24.6571275391,Relatively Moderate,83.8106105391,87.4233128834,754552.3595077734,510222.1167381129,0.0320334258,243454.0359926557,876.2067770047,33.3455935266,Relatively Moderate,67.0519519602,65.5270655271,0.9080000000,50.7751980000,Relatively Low,9.3859370029,40.0000000000,2.5387599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0579710120,1082842.5920536572,13.7920666932,104819706.8679994941,105902549.4600531608,0.0000313713,0.0000000025,Very Low,1.9692852387,0.0000000020,0.0151413322,1.9844265710,0.4142077200,Very Low,0.4374499910,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000541,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0099874373,409283000.0000000000,5213.0000000000,39618800000.0000000000,40028083000.0000000000,0.0008505842,0.0000116917,Very Low,509627.8000000000,0.0314233600,238817.5360000000,748445.3360000000,37.5977579168,Very High,44.7882310288,Very High,1.0000000000,0.0312500000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000180224,0.0000000760,0.0002275779,Very Low,230.5075462219,0.0000123856,94.1304164907,214.5030827638,539.1410454765,5.2311349597,Very Low,5.8932581207,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0100000000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000255348,0.0000003276,0.0002460797,Very Low,104.5094165573,0.0000170798,129.8064434247,74.2213962963,308.5372562783,2.7440512545,Very Low,3.9390063490,Very Low,0.0000000000,0.0148900000,409283000.0000000000,5213.0000000000,39618800000.0000000000,40028083000.0000000000,0.0000058883,0.0000013610,Very Low,35.8846142757,0.0001056430,802.8864714520,838.7710857277,12.8581949229,Relatively Low,11.2121138672,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0006245044,0.0000038327,0.0003492485,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,1.0000000000,0.0312500000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000083601,0.0000003102,0.0006212585,Very Low,106.9261414761,0.0000505411,384.1124266061,585.5657605523,1076.6043286345,9.8898625798,Very Low,11.9394659724,Relatively Low,0.0000000000,0.0006781468,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542519,40058244527.9142456055,0.0003985575,0.0000002657,0.0000937001,Very Low,110.6212172132,0.0000009395,7.1398535480,1.9165373923,119.6776081535,3.5109250974,Very Low,4.3917261130,Very Low,4.0000000000,0.0182681760,315888.8587620233,2.2117928286,16809625.4977076985,17125514.3564697206,0.0006654598,0.0000038734,Very Low,3.8401775301,0.0000001565,1.1894532216,5.0296307517,1.8327269938,Very Low,1.7042906890,Very Low,4.0000000000,0.0204021391,407903840.5845158696,5201.9799937840,39535047952.7582778931,39942951793.3427886963,0.0000000070,0.0000040043,Very Low,0.0583395999,0.0004233184,3217.2197865804,3217.2781261802,17.0524727301,Relatively Low,17.9932135371,Relatively Low,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 -3,T06007040500,Hawaii,HI,15,Kauai,County,7,15007,40500,6007040500,5943,1030806000.0000000000,459516.6731830848,6.1500338151,19.0467198618,Relatively Moderate,67.4534981234,69.3251533742,18.7719774304,Relatively Low,60.4118835838,72.0858895706,332959.9571449574,167792.7734322688,0.0217301935,165149.4709508616,17.7127618271,33.1217117362,Relatively Moderate,64.7826443794,63.5327635328,0.7680000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,66594737.2848528028,383.9447225607,2917979891.4611377716,2984574628.7459902763,0.0000063169,0.0000000003,Very Low,29.4350693631,0.0000000083,0.0628428106,29.4979121737,1.0184434918,Very Low,1.0330889632,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,56.0000000000,3.1111111110,0.0000000000,0.0000000000,0.0030589604,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0005860614,1030806000.0000000000,5943.0000000000,45166800000.0000000000,46197606000.0000000000,0.0167507621,0.0001397988,Very Low,120075.0000000000,0.0011438300,8693.1080000000,128768.1080000000,20.9111551033,Relatively Moderate,23.9260247408,Relatively Moderate,0.0000000000,0.0000000000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0289855072,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000255348,0.0000003276,0.0002460797,Very Low,762.9385502884,0.0000564393,428.9386307213,3.2776151707,1195.1547961804,4.3095415029,Very Low,5.9417734791,Very Low,0.0000000000,0.0148900000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,46197606000.0000000000,0.0000058883,0.0000028944,Relatively Low,90.3777476786,0.0002561316,1946.6001040973,2036.9778517759,17.2833380202,Relatively Low,14.4752368977,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,40606220.8832914308,293.0385094863,2227092672.0956783295,530.1707312656,2267699423.1497006416,0.0001804370,0.0000114831,0.0042466231,Very Low,43350.6205845832,0.0199094993,151312.1945288390,13.3209920158,194676.1361054380,26.1722849103,Relatively High,24.9423944801,Relatively High,1.0000000000,0.0312500000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000032387,0.0000018297,0.0000727233,Very Low,104.3268729204,0.0003398069,2582.5325235382,1.0442984855,2687.9036949441,13.4166096589,Relatively Low,15.5570766452,Relatively Low,0.0000000000,0.0001223370,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830848,46198065516.6731948853,0.0052856261,0.0000035243,0.0012426410,Very Low,666.5475081608,0.0000025623,19.4736228040,0.0698561550,686.0909871197,6.2836381633,Very Low,7.5500148235,Very Low,9.0000000000,0.0411033970,42337272.9888006300,137.6534442030,1046166175.9429297447,1088503448.9317302704,0.0015593140,0.0000038734,Very Low,2713.5270992744,0.0000219159,166.5606980512,2880.0877973256,15.2190537663,Relatively Moderate,13.5932751503,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 +1,T06069000802,Hawaii,HI,15,Kauai,County,7,15007,40300,6069000802,8385,992658000.0000000000,147860.5647200878,3.6108521589,18.0705830803,Relatively Low,63.0775787404,63.4969325153,18.6199401875,Relatively Low,59.6420077263,70.5521472393,324935.2155714268,98076.5248682368,0.0296790442,225560.7358958097,1297.9548073803,31.6808724993,Relatively Moderate,48.7278745931,51.8518518519,-0.1330000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,202742385.5800542533,1862.6855876887,14156410466.4337959290,14359152852.0138511658,0.0000357579,0.0000000020,Very Low,507.2650077305,0.0000002606,1.9802850905,509.2452928210,2.6321796000,Very Low,2.5538810410,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0030589604,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0005345855,912658000.0000000000,8385.0000000000,63726000000.0000000000,64638658000.0000000000,0.0167507621,0.0001397988,Very Low,22512.2000000000,0.0001541200,1171.3120000000,23683.5120000000,11.8920653303,Relatively Low,13.0147002820,Relatively Low,0.0000000000,0.0000000000,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0343605913,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000255348,0.0000003276,0.0002460797,Very Low,788.9305592758,0.0000968737,736.2401254130,1.3226671624,1526.4933518512,4.6757862953,Very Low,6.1662913066,Very Low,0.0000000000,0.0148900000,912658000.0000000000,8385.0000000000,63726000000.0000000000,64638658000.0000000000,0.0000058883,0.0000028944,Relatively Low,80.0189118426,0.0003613770,2746.4650635800,2826.4839754226,19.2773661946,Relatively Low,15.4429446232,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,59632790.0585851222,418.9266599156,3183842615.3584799767,51591.3125103788,3243526996.7295761108,0.0001804370,0.0000114831,0.0042466231,Very Low,63663.1136805333,0.0284625391,216315.2971586954,1296.2757495066,281274.6865887354,29.5879096062,Relatively High,26.9708819409,Relatively High,1.0000000000,0.0312500000,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000032387,0.0000018297,0.0000727233,Very Low,92.3692287258,0.0004794348,3643.7043933928,0.3360282071,3736.4096503256,14.9734902768,Relatively Low,16.6070545485,Relatively Low,0.0000000000,0.0000653310,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0089662390,0.0000059784,0.0021079463,Very Low,534.6107152638,0.0000032750,24.8896914625,0.0203625042,559.5207692305,5.8706925202,Very Low,6.7469108145,Very Low,7.0000000000,0.0319693090,198555247.5326173902,978.4678896234,7436355961.1380958557,7634911208.6707134247,0.0015593140,0.0000038734,Very Low,9898.0167648649,0.0001211641,920.8471781755,10818.8639430404,23.6580872265,Relatively High,20.2115884136,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 +2,T06061021322,Hawaii,HI,15,Hawaii,County,1,15001,20100,6061021322,5213,409283000.0000000000,30161527.9142542519,97.0642891247,26.0474557835,Relatively High,89.4815710967,87.4233128834,24.6571275391,Relatively Moderate,83.8106105391,87.4233128834,754552.3595077734,510222.1167381129,0.0320334258,243454.0359926557,876.2067770047,33.3455935266,Relatively Moderate,67.0519519602,65.5270655271,0.9080000000,50.7751980000,Relatively Low,9.3859370029,40.0000000000,2.5387599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0579710120,1082842.5920536572,13.7920666932,104819706.8679994941,105902549.4600531608,0.0000313713,0.0000000025,Very Low,1.9692852387,0.0000000020,0.0151413322,1.9844265710,0.4142077200,Very Low,0.4374499910,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000541,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0099874373,409283000.0000000000,5213.0000000000,39618800000.0000000000,40028083000.0000000000,0.0008505842,0.0000116917,Very Low,509627.8000000000,0.0314233600,238817.5360000000,748445.3360000000,37.5977579168,Very High,44.7882310288,Very High,1.0000000000,0.0312500000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000180224,0.0000000760,0.0002275779,Very Low,230.5075462219,0.0000123856,94.1304164907,214.5030827638,539.1410454765,5.2311349597,Very Low,5.8932581207,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0100000000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000255348,0.0000003276,0.0002460797,Very Low,104.5094165573,0.0000170798,129.8064434247,74.2213962963,308.5372562783,2.7440512545,Very Low,3.9390063490,Very Low,0.0000000000,0.0148900000,409283000.0000000000,5213.0000000000,39618800000.0000000000,40028083000.0000000000,0.0000058883,0.0000013610,Very Low,35.8846142757,0.0001056430,802.8864714520,838.7710857277,12.8581949229,Relatively Low,11.2121138672,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0006245044,0.0000038327,0.0003492485,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,1.0000000000,0.0312500000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000083601,0.0000003102,0.0006212585,Very Low,106.9261414761,0.0000505411,384.1124266061,585.5657605523,1076.6043286345,9.8898625798,Very Low,11.9394659724,Relatively Low,0.0000000000,0.0006781468,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542519,40058244527.9142456055,0.0003985575,0.0000002657,0.0000937001,Very Low,110.6212172132,0.0000009395,7.1398535480,1.9165373923,119.6776081535,3.5109250974,Very Low,4.3917261130,Very Low,4.0000000000,0.0182681760,315888.8587620233,2.2117928286,16809625.4977076985,17125514.3564697206,0.0006654598,0.0000038734,Very Low,3.8401775301,0.0000001565,1.1894532216,5.0296307517,1.8327269938,Very Low,1.7042906890,Very Low,4.0000000000,0.0204021391,407903840.5845158696,5201.9799937840,39535047952.7582778931,39942951793.3427886963,0.0000000070,0.0000040043,Very Low,0.0583395999,0.0004233184,3217.2197865804,3217.2781261802,17.0524727301,Relatively Low,17.9932135371,Relatively Low,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 +3,T06027000800,Hawaii,HI,15,Kauai,County,7,15007,40500,6027000800,5943,1030806000.0000000000,459516.6731830848,6.1500338151,19.0467198618,Relatively Moderate,67.4534981234,69.3251533742,18.7719774304,Relatively Low,60.4118835838,72.0858895706,332959.9571449574,167792.7734322688,0.0217301935,165149.4709508616,17.7127618271,33.1217117362,Relatively Moderate,64.7826443794,63.5327635328,0.7680000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,66594737.2848528028,383.9447225607,2917979891.4611377716,2984574628.7459902763,0.0000063169,0.0000000003,Very Low,29.4350693631,0.0000000083,0.0628428106,29.4979121737,1.0184434918,Very Low,1.0330889632,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,56.0000000000,3.1111111110,0.0000000000,0.0000000000,0.0030589604,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0005860614,1030806000.0000000000,5943.0000000000,45166800000.0000000000,46197606000.0000000000,0.0167507621,0.0001397988,Very Low,120075.0000000000,0.0011438300,8693.1080000000,128768.1080000000,20.9111551033,Relatively Moderate,23.9260247408,Relatively Moderate,0.0000000000,0.0000000000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0289855072,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000255348,0.0000003276,0.0002460797,Very Low,762.9385502884,0.0000564393,428.9386307213,3.2776151707,1195.1547961804,4.3095415029,Very Low,5.9417734791,Very Low,0.0000000000,0.0148900000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,46197606000.0000000000,0.0000058883,0.0000028944,Relatively Low,90.3777476786,0.0002561316,1946.6001040973,2036.9778517759,17.2833380202,Relatively Low,14.4752368977,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,40606220.8832914308,293.0385094863,2227092672.0956783295,530.1707312656,2267699423.1497006416,0.0001804370,0.0000114831,0.0042466231,Very Low,43350.6205845832,0.0199094993,151312.1945288390,13.3209920158,194676.1361054380,26.1722849103,Relatively High,24.9423944801,Relatively High,1.0000000000,0.0312500000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000032387,0.0000018297,0.0000727233,Very Low,104.3268729204,0.0003398069,2582.5325235382,1.0442984855,2687.9036949441,13.4166096589,Relatively Low,15.5570766452,Relatively Low,0.0000000000,0.0001223370,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830848,46198065516.6731948853,0.0052856261,0.0000035243,0.0012426410,Very Low,666.5475081608,0.0000025623,19.4736228040,0.0698561550,686.0909871197,6.2836381633,Very Low,7.5500148235,Very Low,9.0000000000,0.0411033970,42337272.9888006300,137.6534442030,1046166175.9429297447,1088503448.9317302704,0.0015593140,0.0000038734,Very Low,2713.5270992744,0.0000219159,166.5606980512,2880.0877973256,15.2190537663,Relatively Moderate,13.5932751503,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 4,T15001021010,Hawaii,HI,15,Hawaii,County,1,15001,21010,15001021010,7884,737712000.0000000000,8711454.3090733420,58.4401512286,43.1066279987,Very High,99.4459643383,98.1595092025,42.6674572964,Very High,99.2741170486,99.0797546012,3909779.1321200719,2582125.8111252696,0.1746532017,1327364.3330713348,288.9879234675,31.8903618889,Relatively Moderate,51.0956693021,54.4159544160,-0.0020000000,50.7751980000,Relatively Low,9.3859370029,40.0000000000,2.5387599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000478451,0.0000000048,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000541,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0099998852,737712000.0000000000,7884.0000000000,59918400000.0000000000,60656112000.0000000000,0.0008505842,0.0000116917,Very Low,2580741.3999999999,0.1736765400,1319941.7039999999,3900683.1039999998,65.1861714882,Very High,74.2640163391,Very High,1.0000000000,0.0312500000,737712000.0000000000,7884.0000000000,59918400000.0000000000,8711454.3090733420,60664823454.3090744019,0.0000180224,0.0000000760,0.0002275779,Very Low,415.4782459486,0.0000187316,142.3602922696,61.9542156517,619.7927538699,5.4799587665,Very Low,5.9041560145,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0269344664,737712000.0000000000,7884.0000000000,59918400000.0000000000,8711454.3090733420,60664823454.3090744019,0.0000255348,0.0000003276,0.0002460797,Very Low,473.5051910310,0.0000651127,494.8567057547,57.2461948490,1025.6080916347,4.0952789981,Very Low,5.6221049906,Very Low,0.0000000000,0.0148900000,737712000.0000000000,7884.0000000000,59918400000.0000000000,60656112000.0000000000,0.0000058883,0.0000013610,Very Low,64.6802104328,0.0001597715,1214.2637523360,1278.9439627688,14.7995789625,Relatively Low,12.3417814165,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0006245044,0.0000038327,0.0003492485,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,1.0000000000,0.0312500000,737712000.0000000000,7884.0000000000,59918400000.0000000000,8711454.3090733420,60664823454.3090744019,0.0000083601,0.0000003102,0.0006212585,Very Low,192.7289862509,0.0000764370,580.9212298706,169.1270211135,942.7772372349,9.4618177655,Very Low,10.9242145239,Very Low,1.0000000000,0.0004673635,737712000.0000000000,7884.0000000000,59918400000.0000000000,8711454.3090733420,60664823454.3090744019,0.0006900376,0.0000004601,0.0001622266,Very Low,237.9109428670,0.0000016953,12.8843062101,0.6604918534,251.4557409305,4.4968090785,Very Low,5.3796416501,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0006654598,0.0000038734,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,4.0000000000,0.0207448000,737708710.8628113270,7883.9591351862,59918089427.4153671265,60655798138.2781677246,0.0000000070,0.0000040043,Very Low,0.1075487398,0.0006549135,4977.3427848938,4977.4503336337,19.7224171343,Relatively Low,19.9022650650,Relatively Low,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 5,T15001021101,Hawaii,HI,15,Hawaii,County,1,15001,21101,15001021101,3531,365469000.0000000000,1115552.9463470120,41.0551206444,39.6369371498,Very High,99.0514029613,96.6257668712,35.4631324234,Relatively High,97.7453635601,94.4785276074,2244880.4514211570,1569603.2441089998,0.0888473124,675239.5743199890,37.6329921689,35.2805718581,Relatively High,83.0000273575,82.3361823362,2.1180000000,50.7751980000,Relatively Low,9.3859370029,40.0000000000,2.5387599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0679710120,53358423.6905883327,515.5255139327,3917993905.8884677887,3971352329.5790557861,0.0000009778,0.0000000001,Very Low,3.5462107144,0.0000000023,0.0178004814,3.5640111958,0.5034846073,Very Low,0.5625920420,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000541,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0099998512,365469000.0000000000,3531.0000000000,26835600000.0000000000,27201069000.0000000000,0.0008505842,0.0000116917,Very Low,1549795.8000000000,0.0875910700,665692.1319999999,2215487.9320000000,53.9839983966,Very High,68.0399795668,Very High,1.0000000000,0.0312500000,365469000.0000000000,3531.0000000000,26835600000.0000000000,1115552.9463470120,27202184552.9463424683,0.0000180224,0.0000000760,0.0002275779,Very Low,205.8315698678,0.0000083893,63.7587762572,7.9336015953,277.5239477203,4.1923926160,Very Low,4.9971070139,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0289855072,365469000.0000000000,3531.0000000000,26835600000.0000000000,1115552.9463470120,27202184552.9463424683,0.0000255348,0.0000003276,0.0002460797,Very Low,270.4974447523,0.0000335331,254.8514731746,7.9569545004,533.3058724274,3.2931774779,Very Low,5.0015747332,Very Low,0.0000000000,0.0148900000,365469000.0000000000,3531.0000000000,26835600000.0000000000,27201069000.0000000000,0.0000058883,0.0000013610,Very Low,32.0431439731,0.0000715567,543.8312163240,575.8743602971,11.3433526973,Very Low,10.4651653429,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,4828130.5279219840,35.1384012388,267051849.4150594473,0.0000000000,271879979.9429814219,0.0006245044,0.0000038327,0.0003492485,Very Low,17839.8663537918,0.0007968309,6055.9146131274,0.0000000000,23895.7809669192,13.0070200492,Relatively Moderate,13.6546608024,Relatively Moderate,1.0000000000,0.0312500000,365469000.0000000000,3531.0000000000,26835600000.0000000000,1115552.9463470120,27202184552.9463424683,0.0000083601,0.0000003102,0.0006212585,Very Low,95.4796314509,0.0000342338,260.1766695466,21.6577094941,377.3140104915,6.9727783560,Very Low,8.9063071715,Very Low,0.0000000000,0.0003634330,365469000.0000000000,3531.0000000000,26835600000.0000000000,1115552.9463470120,27202184552.9463424683,0.0008889061,0.0000005927,0.0002089802,Very Low,118.0676167774,0.0000007606,5.7804922284,0.0847265791,123.9328355849,3.5520526364,Very Low,4.7010550308,Very Low,13.0000000000,0.0593715740,31437177.7921413518,196.0173546829,1489731895.5901708603,1521169073.3823122978,0.0006654598,0.0000038734,Very Low,1242.0638448472,0.0000450783,342.5948426489,1584.6586874961,12.4708959075,Relatively Moderate,12.2698912376,Relatively Moderate,3.0000000000,0.0188028000,365467633.7354047298,3530.9854379618,26835489328.5099411011,27200956962.2453422546,0.0000000070,0.0000040043,Very Low,0.0482928249,0.0002658574,2020.5164362008,2020.5647290257,14.6032241308,Relatively Low,16.3029908639,Relatively Low,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 6,T15007040603,Hawaii,HI,15,Kauai,County,7,15007,40603,15007040603,2544,509507000.0000000000,3763051.3782403329,15.9289735326,23.8613675670,Relatively Moderate,84.6148558545,84.9693251534,22.2413255033,Relatively Moderate,75.9028856597,83.7423312883,553788.5026946985,159866.0053362669,0.0465200191,353552.1448416797,40370.3525167520,35.0215086434,Relatively Moderate,81.3161710393,79.7720797721,1.9560000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,59268365.9828897715,295.9306212878,2249072721.7871074677,2308341087.7699966431,0.0000020063,0.0000000001,Very Low,8.3203647759,0.0000000014,0.0109218690,8.3312866448,0.6682062552,Very Low,0.7166933897,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,119.0000000000,6.6111111110,1994468.3763317089,1994468.3763317089,0.0030589604,Relatively Moderate,40334.3876510453,40334.3876510453,9.3173396900,Relatively Moderate,10.0118819196,Relatively Moderate,,0.0006288023,509507000.0000000000,2544.0000000000,19334400000.0000000000,19843907000.0000000000,0.0167507621,0.0001397988,Very Low,29888.8000000000,0.0002046000,1554.9600000000,31443.7600000000,13.0703357152,Relatively Low,15.8125293377,Relatively Low,0.0000000000,0.0000000000,509507000.0000000000,2544.0000000000,19334400000.0000000000,3763051.3782403329,19847670051.3782386780,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0289855072,509500026.7867159247,2543.9789504995,19334240023.7962799072,3763051.3782403329,19847503101.9612274170,0.0000255348,0.0000003276,0.0002460797,Very Low,377.1002611632,0.0000241596,183.6127961654,26.8408852286,587.5539425572,3.4012529352,Very Low,4.9584510525,Very Low,0.0000000000,0.0148900000,509507000.0000000000,2544.0000000000,19334400000.0000000000,19843907000.0000000000,0.0000058883,0.0000028944,Relatively Low,44.6719315627,0.0001096414,833.2745523849,877.9464839477,13.0553404852,Relatively Low,11.5613443431,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,119566421.2469792366,677.5008183296,5149006219.3049850464,0.0000000000,5268572640.5519647598,0.0001804370,0.0000114831,0.0042466231,Very Low,127647.4010480262,0.0460304759,349831.6169989206,0.0000000000,477479.0180469467,35.2957296359,Relatively High,35.5664685650,Very High,1.0000000000,0.0312500000,509507000.0000000000,2544.0000000000,19334400000.0000000000,3763051.3782403329,19847670051.3782386780,0.0000032387,0.0000018297,0.0000727233,Very Low,51.5667080334,0.0001454600,1105.4960019992,8.5519178837,1165.6146279163,10.1552327033,Very Low,12.4507973241,Relatively Low,0.0000000000,0.0002990171,509507000.0000000000,2544.0000000000,19334400000.0000000000,3763051.3782403329,19847670051.3782386780,0.0021625099,0.0000014419,0.0005084021,Very Low,329.4612383326,0.0000010968,8.3360081463,0.5720625944,338.3693090733,4.9645617720,Very Low,6.3071150891,Very Low,3.0000000000,0.0137011320,71084897.0818793178,86.3741073938,656443216.1930950880,727528113.2749742270,0.0015593140,0.0000038734,Relatively Low,1518.6837843730,0.0000045839,34.8375621943,1553.5213465673,12.3886737842,Relatively Moderate,11.6999323670,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021 diff --git a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/output.csv index b01e6d146..160164d86 100644 --- a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/output.csv +++ b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/output.csv @@ -1,7 +1,7 @@ GEOID10_TRACT,FEMA Risk Index Expected Annual Loss Score,Expected population loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Expected building loss rate (Natural Hazards Risk Index),Contains agricultural value -06001020100,18.6199401875,0.0000035067,0.0031812618,0.0000661520,True -06007040300,24.6571275391,0.0000000358,0.0000290505,0.0000014426,True -06007040500,18.7719774304,0.0000034603,0.0000385465,0.0000436593,True +06069000802,18.6199401875,0.0000035067,0.0031812618,0.0000661520,True +06061021322,24.6571275391,0.0000000358,0.0000290505,0.0000014426,True +06027000800,18.7719774304,0.0000034603,0.0000385465,0.0000436593,True 15001021010,42.6674572964,0.0000000408,0.0000331733,0.0000018765,True 15001021101,35.4631324234,0.0000002677,0.0000337348,0.0000507987,True 15007040603,22.2413255033,0.0000182039,0.0107280896,0.0002521232,True diff --git a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/transform.csv index ce24d0559..809726014 100644 --- a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/transform.csv +++ b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/data/transform.csv @@ -1,7 +1,7 @@ OID_,NRI_ID,STATE,STATEABBRV,STATEFIPS,COUNTY,COUNTYTYPE,COUNTYFIPS,STCOFIPS,TRACT,GEOID10_TRACT,POPULATION,BUILDVALUE,AGRIVALUE,AREA,RISK_SCORE,RISK_RATNG,RISK_NPCTL,RISK_SPCTL,FEMA Risk Index Expected Annual Loss Score,EAL_RATNG,EAL_NPCTL,EAL_SPCTL,EAL_VALT,EAL_VALB,EAL_VALP,EAL_VALPE,EAL_VALA,SOVI_SCORE,SOVI_RATNG,SOVI_NPCTL,SOVI_SPCTL,SOVI_VALUE,RESL_SCORE,RESL_RATNG,RESL_NPCTL,RESL_SPCTL,RESL_VALUE,AVLN_EVNTS,AVLN_AFREQ,AVLN_EXPB,AVLN_EXPP,AVLN_EXPPE,AVLN_EXPT,AVLN_HLRB,AVLN_HLRP,AVLN_HLRR,AVLN_EALB,AVLN_EALP,AVLN_EALPE,AVLN_EALT,AVLN_EALS,AVLN_EALR,AVLN_RISKS,AVLN_RISKR,CFLD_EVNTS,CFLD_AFREQ,CFLD_EXPB,CFLD_EXPP,CFLD_EXPPE,CFLD_EXPT,CFLD_HLRB,CFLD_HLRP,CFLD_HLRR,CFLD_EALB,CFLD_EALP,CFLD_EALPE,CFLD_EALT,CFLD_EALS,CFLD_EALR,CFLD_RISKS,CFLD_RISKR,CWAV_EVNTS,CWAV_AFREQ,CWAV_EXPB,CWAV_EXPP,CWAV_EXPPE,CWAV_EXPA,CWAV_EXPT,CWAV_HLRB,CWAV_HLRP,CWAV_HLRA,CWAV_HLRR,CWAV_EALB,CWAV_EALP,CWAV_EALPE,CWAV_EALA,CWAV_EALT,CWAV_EALS,CWAV_EALR,CWAV_RISKS,CWAV_RISKR,DRGT_EVNTS,DRGT_AFREQ,DRGT_EXPA,DRGT_EXPT,DRGT_HLRA,DRGT_HLRR,DRGT_EALA,DRGT_EALT,DRGT_EALS,DRGT_EALR,DRGT_RISKS,DRGT_RISKR,ERQK_EVNTS,ERQK_AFREQ,ERQK_EXPB,ERQK_EXPP,ERQK_EXPPE,ERQK_EXPT,ERQK_HLRB,ERQK_HLRP,ERQK_HLRR,ERQK_EALB,ERQK_EALP,ERQK_EALPE,ERQK_EALT,ERQK_EALS,ERQK_EALR,ERQK_RISKS,ERQK_RISKR,HAIL_EVNTS,HAIL_AFREQ,HAIL_EXPB,HAIL_EXPP,HAIL_EXPPE,HAIL_EXPA,HAIL_EXPT,HAIL_HLRB,HAIL_HLRP,HAIL_HLRA,HAIL_HLRR,HAIL_EALB,HAIL_EALP,HAIL_EALPE,HAIL_EALA,HAIL_EALT,HAIL_EALS,HAIL_EALR,HAIL_RISKS,HAIL_RISKR,HWAV_EVNTS,HWAV_AFREQ,HWAV_EXPB,HWAV_EXPP,HWAV_EXPPE,HWAV_EXPA,HWAV_EXPT,HWAV_HLRB,HWAV_HLRP,HWAV_HLRA,HWAV_HLRR,HWAV_EALB,HWAV_EALP,HWAV_EALPE,HWAV_EALA,HWAV_EALT,HWAV_EALS,HWAV_EALR,HWAV_RISKS,HWAV_RISKR,HRCN_EVNTS,HRCN_AFREQ,HRCN_EXPB,HRCN_EXPP,HRCN_EXPPE,HRCN_EXPA,HRCN_EXPT,HRCN_HLRB,HRCN_HLRP,HRCN_HLRA,HRCN_HLRR,HRCN_EALB,HRCN_EALP,HRCN_EALPE,HRCN_EALA,HRCN_EALT,HRCN_EALS,HRCN_EALR,HRCN_RISKS,HRCN_RISKR,ISTM_EVNTS,ISTM_AFREQ,ISTM_EXPB,ISTM_EXPP,ISTM_EXPPE,ISTM_EXPT,ISTM_HLRB,ISTM_HLRP,ISTM_HLRR,ISTM_EALB,ISTM_EALP,ISTM_EALPE,ISTM_EALT,ISTM_EALS,ISTM_EALR,ISTM_RISKS,ISTM_RISKR,LNDS_EVNTS,LNDS_AFREQ,LNDS_EXPB,LNDS_EXPP,LNDS_EXPPE,LNDS_EXPT,LNDS_HLRB,LNDS_HLRP,LNDS_HLRR,LNDS_EALB,LNDS_EALP,LNDS_EALPE,LNDS_EALT,LNDS_EALS,LNDS_EALR,LNDS_RISKS,LNDS_RISKR,LTNG_EVNTS,LTNG_AFREQ,LTNG_EXPB,LTNG_EXPP,LTNG_EXPPE,LTNG_EXPT,LTNG_HLRB,LTNG_HLRP,LTNG_HLRR,LTNG_EALB,LTNG_EALP,LTNG_EALPE,LTNG_EALT,LTNG_EALS,LTNG_EALR,LTNG_RISKS,LTNG_RISKR,RFLD_EVNTS,RFLD_AFREQ,RFLD_EXPB,RFLD_EXPP,RFLD_EXPPE,RFLD_EXPA,RFLD_EXPT,RFLD_HLRB,RFLD_HLRP,RFLD_HLRA,RFLD_HLRR,RFLD_EALB,RFLD_EALP,RFLD_EALPE,RFLD_EALA,RFLD_EALT,RFLD_EALS,RFLD_EALR,RFLD_RISKS,RFLD_RISKR,SWND_EVNTS,SWND_AFREQ,SWND_EXPB,SWND_EXPP,SWND_EXPPE,SWND_EXPA,SWND_EXPT,SWND_HLRB,SWND_HLRP,SWND_HLRA,SWND_HLRR,SWND_EALB,SWND_EALP,SWND_EALPE,SWND_EALA,SWND_EALT,SWND_EALS,SWND_EALR,SWND_RISKS,SWND_RISKR,TRND_EVNTS,TRND_AFREQ,TRND_EXPB,TRND_EXPP,TRND_EXPPE,TRND_EXPA,TRND_EXPT,TRND_HLRB,TRND_HLRP,TRND_HLRA,TRND_HLRR,TRND_EALB,TRND_EALP,TRND_EALPE,TRND_EALA,TRND_EALT,TRND_EALS,TRND_EALR,TRND_RISKS,TRND_RISKR,TSUN_EVNTS,TSUN_AFREQ,TSUN_EXPB,TSUN_EXPP,TSUN_EXPPE,TSUN_EXPT,TSUN_HLRB,TSUN_HLRP,TSUN_HLRR,TSUN_EALB,TSUN_EALP,TSUN_EALPE,TSUN_EALT,TSUN_EALS,TSUN_EALR,TSUN_RISKS,TSUN_RISKR,VLCN_EVNTS,VLCN_AFREQ,VLCN_EXPB,VLCN_EXPP,VLCN_EXPPE,VLCN_EXPT,VLCN_HLRB,VLCN_HLRP,VLCN_HLRR,VLCN_EALB,VLCN_EALP,VLCN_EALPE,VLCN_EALT,VLCN_EALS,VLCN_EALR,VLCN_RISKS,VLCN_RISKR,WFIR_EVNTS,WFIR_AFREQ,WFIR_EXPB,WFIR_EXPP,WFIR_EXPPE,WFIR_EXPA,WFIR_EXPT,WFIR_HLRB,WFIR_HLRP,WFIR_HLRA,WFIR_HLRR,WFIR_EALB,WFIR_EALP,WFIR_EALPE,WFIR_EALA,WFIR_EALT,WFIR_EALS,WFIR_EALR,WFIR_RISKS,WFIR_RISKR,WNTW_EVNTS,WNTW_AFREQ,WNTW_EXPB,WNTW_EXPP,WNTW_EXPPE,WNTW_EXPA,WNTW_EXPT,WNTW_HLRB,WNTW_HLRP,WNTW_HLRA,WNTW_HLRR,WNTW_EALB,WNTW_EALP,WNTW_EALPE,WNTW_EALA,WNTW_EALT,WNTW_EALS,WNTW_EALR,WNTW_RISKS,WNTW_RISKR,NRI_VER,Expected population loss rate (Natural Hazards Risk Index),Expected agricultural loss rate (Natural Hazards Risk Index),Contains agricultural value,Expected building loss rate (Natural Hazards Risk Index) -1,T06001020100,Hawaii,HI,15,Kauai,County,7,15007,40300,06001020100,8385,992658000.0000000000,147860.5647200878,3.6108521589,18.0705830803,Relatively Low,63.0775787404,63.4969325153,18.6199401875,Relatively Low,59.6420077263,70.5521472393,324935.2155714268,98076.5248682368,0.0296790442,225560.7358958097,1297.9548073803,31.6808724993,Relatively Moderate,48.7278745931,51.8518518519,-0.1330000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,202742385.5800542533,1862.6855876887,14156410466.4337959290,14359152852.0138511658,0.0000357579,0.0000000020,Very Low,507.2650077305,0.0000002606,1.9802850905,509.2452928210,2.6321796000,Very Low,2.5538810410,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0030589604,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0005345855,912658000.0000000000,8385.0000000000,63726000000.0000000000,64638658000.0000076294,0.0167507621,0.0001397988,Very Low,22512.2000000000,0.0001541200,1171.3120000000,23683.5120000000,11.8920653303,Relatively Low,13.0147002820,Relatively Low,0.0000000000,0.0000000000,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0343605913,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000255348,0.0000003276,0.0002460797,Very Low,788.9305592758,0.0000968737,736.2401254130,1.3226671624,1526.4933518512,4.6757862953,Very Low,6.1662913066,Very Low,0.0000000000,0.0148900000,912658000.0000000000,8385.0000000000,63726000000.0000000000,64638658000.0000076294,0.0000058883,0.0000028944,Relatively Low,80.0189118426,0.0003613770,2746.4650635800,2826.4839754226,19.2773661946,Relatively Low,15.4429446232,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,59632790.0585851297,418.9266599156,3183842615.3584799767,51591.3125103788,3243526996.7295761108,0.0001804370,0.0000114831,0.0042466231,Very Low,63663.1136805333,0.0284625391,216315.2971586954,1296.2757495066,281274.6865887354,29.5879096062,Relatively High,26.9708819409,Relatively High,1.0000000000,0.0312500000,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000032387,0.0000018297,0.0000727233,Very Low,92.3692287258,0.0004794348,3643.7043933928,0.3360282071,3736.4096503256,14.9734902768,Relatively Low,16.6070545485,Relatively Low,0.0000000000,0.0000653310,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0089662390,0.0000059784,0.0021079463,Very Low,534.6107152638,0.0000032750,24.8896914625,0.0203625042,559.5207692305,5.8706925202,Very Low,6.7469108145,Very Low,7.0000000000,0.0319693090,198555247.5326173902,978.4678896234,7436355961.1380958557,7634911208.6707124710,0.0015593140,0.0000038734,Very Low,9898.0167648649,0.0001211641,920.8471781755,10818.8639430404,23.6580872265,Relatively High,20.2115884136,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000035067,0.0031812618,True,0.0000661520 -2,T06007040300,Hawaii,HI,15,Hawaii,County,1,15001,20100,06007040300,5213,409283000.0000000000,30161527.9142542519,97.0642891247,26.0474557835,Relatively High,89.4815710967,87.4233128834,24.6571275391,Relatively Moderate,83.8106105391,87.4233128834,754552.3595077734,510222.1167381129,0.0320334258,243454.0359926558,876.2067770047,33.3455935266,Relatively Moderate,67.0519519602,65.5270655271,0.9080000000,50.7751980000,Relatively Low,9.3859370029,40.0000000000,2.5387599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0579710120,1082842.5920536572,13.7920666932,104819706.8679994941,105902549.4600531608,0.0000313713,0.0000000025,Very Low,1.9692852387,0.0000000020,0.0151413322,1.9844265710,0.4142077200,Very Low,0.4374499910,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000541,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0099874373,409283000.0000000000,5213.0000000000,39618800000.0000000000,40028083000.0000000000,0.0008505842,0.0000116917,Very Low,509627.8000000000,0.0314233600,238817.5360000000,748445.3360000000,37.5977579168,Very High,44.7882310288,Very High,1.0000000000,0.0312500000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000180224,0.0000000760,0.0002275779,Very Low,230.5075462219,0.0000123856,94.1304164907,214.5030827638,539.1410454765,5.2311349597,Very Low,5.8932581207,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0100000000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000255348,0.0000003276,0.0002460797,Very Low,104.5094165573,0.0000170798,129.8064434247,74.2213962963,308.5372562783,2.7440512545,Very Low,3.9390063490,Very Low,0.0000000000,0.0148900000,409283000.0000000000,5213.0000000000,39618800000.0000000000,40028083000.0000000000,0.0000058883,0.0000013610,Very Low,35.8846142757,0.0001056430,802.8864714520,838.7710857277,12.8581949229,Relatively Low,11.2121138672,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0006245044,0.0000038327,0.0003492485,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,1.0000000000,0.0312500000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000083601,0.0000003102,0.0006212585,Very Low,106.9261414761,0.0000505411,384.1124266061,585.5657605523,1076.6043286345,9.8898625798,Very Low,11.9394659724,Relatively Low,0.0000000000,0.0006781468,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542519,40058244527.9142456055,0.0003985575,0.0000002657,0.0000937001,Very Low,110.6212172132,0.0000009395,7.1398535480,1.9165373923,119.6776081535,3.5109250974,Very Low,4.3917261130,Very Low,4.0000000000,0.0182681760,315888.8587620232,2.2117928286,16809625.4977076985,17125514.3564697206,0.0006654598,0.0000038734,Very Low,3.8401775301,0.0000001565,1.1894532216,5.0296307517,1.8327269938,Very Low,1.7042906890,Very Low,4.0000000000,0.0204021391,407903840.5845158696,5201.9799937840,39535047952.7582778931,39942951793.3427886963,0.0000000070,0.0000040043,Very Low,0.0583395999,0.0004233184,3217.2197865804,3217.2781261802,17.0524727301,Relatively Low,17.9932135371,Relatively Low,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000000358,0.0000290505,True,0.0000014426 -3,T06007040500,Hawaii,HI,15,Kauai,County,7,15007,40500,06007040500,5943,1030806000.0000000000,459516.6731830848,6.1500338151,19.0467198618,Relatively Moderate,67.4534981234,69.3251533742,18.7719774304,Relatively Low,60.4118835838,72.0858895706,332959.9571449574,167792.7734322688,0.0217301935,165149.4709508616,17.7127618271,33.1217117362,Relatively Moderate,64.7826443794,63.5327635328,0.7680000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,66594737.2848528028,383.9447225607,2917979891.4611377716,2984574628.7459902763,0.0000063169,0.0000000003,Very Low,29.4350693631,0.0000000083,0.0628428106,29.4979121737,1.0184434918,Very Low,1.0330889632,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,56.0000000000,3.1111111110,0.0000000000,0.0000000000,0.0030589604,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0005860614,1030806000.0000000000,5943.0000000000,45166800000.0000000000,46197606000.0000000000,0.0167507621,0.0001397988,Very Low,120075.0000000000,0.0011438300,8693.1080000000,128768.1080000000,20.9111551033,Relatively Moderate,23.9260247408,Relatively Moderate,0.0000000000,0.0000000000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0289855072,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000255348,0.0000003276,0.0002460797,Very Low,762.9385502884,0.0000564393,428.9386307213,3.2776151707,1195.1547961804,4.3095415029,Very Low,5.9417734791,Very Low,0.0000000000,0.0148900000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,46197606000.0000000000,0.0000058883,0.0000028944,Relatively Low,90.3777476786,0.0002561316,1946.6001040973,2036.9778517759,17.2833380202,Relatively Low,14.4752368977,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,40606220.8832914308,293.0385094863,2227092672.0956783295,530.1707312656,2267699423.1497006416,0.0001804370,0.0000114831,0.0042466231,Very Low,43350.6205845832,0.0199094993,151312.1945288390,13.3209920158,194676.1361054380,26.1722849103,Relatively High,24.9423944801,Relatively High,1.0000000000,0.0312500000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000032387,0.0000018297,0.0000727233,Very Low,104.3268729204,0.0003398069,2582.5325235382,1.0442984855,2687.9036949441,13.4166096589,Relatively Low,15.5570766452,Relatively Low,0.0000000000,0.0001223370,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830848,46198065516.6731948853,0.0052856261,0.0000035243,0.0012426410,Very Low,666.5475081608,0.0000025623,19.4736228040,0.0698561550,686.0909871197,6.2836381633,Very Low,7.5500148235,Very Low,9.0000000000,0.0411033970,42337272.9888006300,137.6534442030,1046166175.9429298639,1088503448.9317302704,0.0015593140,0.0000038734,Very Low,2713.5270992744,0.0000219159,166.5606980512,2880.0877973256,15.2190537663,Relatively Moderate,13.5932751503,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000034603,0.0000385465,True,0.0000436593 +1,T06069000802,Hawaii,HI,15,Kauai,County,7,15007,40300,06069000802,8385,992658000.0000000000,147860.5647200878,3.6108521589,18.0705830803,Relatively Low,63.0775787404,63.4969325153,18.6199401875,Relatively Low,59.6420077263,70.5521472393,324935.2155714268,98076.5248682368,0.0296790442,225560.7358958097,1297.9548073803,31.6808724993,Relatively Moderate,48.7278745931,51.8518518519,-0.1330000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,202742385.5800542533,1862.6855876887,14156410466.4337959290,14359152852.0138511658,0.0000357579,0.0000000020,Very Low,507.2650077305,0.0000002606,1.9802850905,509.2452928210,2.6321796000,Very Low,2.5538810410,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0030589604,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0005345855,912658000.0000000000,8385.0000000000,63726000000.0000000000,64638658000.0000076294,0.0167507621,0.0001397988,Very Low,22512.2000000000,0.0001541200,1171.3120000000,23683.5120000000,11.8920653303,Relatively Low,13.0147002820,Relatively Low,0.0000000000,0.0000000000,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0343605913,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000255348,0.0000003276,0.0002460797,Very Low,788.9305592758,0.0000968737,736.2401254130,1.3226671624,1526.4933518512,4.6757862953,Very Low,6.1662913066,Very Low,0.0000000000,0.0148900000,912658000.0000000000,8385.0000000000,63726000000.0000000000,64638658000.0000076294,0.0000058883,0.0000028944,Relatively Low,80.0189118426,0.0003613770,2746.4650635800,2826.4839754226,19.2773661946,Relatively Low,15.4429446232,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,59632790.0585851297,418.9266599156,3183842615.3584799767,51591.3125103788,3243526996.7295761108,0.0001804370,0.0000114831,0.0042466231,Very Low,63663.1136805333,0.0284625391,216315.2971586954,1296.2757495066,281274.6865887354,29.5879096062,Relatively High,26.9708819409,Relatively High,1.0000000000,0.0312500000,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0000032387,0.0000018297,0.0000727233,Very Low,92.3692287258,0.0004794348,3643.7043933928,0.3360282071,3736.4096503256,14.9734902768,Relatively Low,16.6070545485,Relatively Low,0.0000000000,0.0000653310,912658000.0000000000,8385.0000000000,63726000000.0000000000,147860.5647200878,64638805860.5647201538,0.0089662390,0.0000059784,0.0021079463,Very Low,534.6107152638,0.0000032750,24.8896914625,0.0203625042,559.5207692305,5.8706925202,Very Low,6.7469108145,Very Low,7.0000000000,0.0319693090,198555247.5326173902,978.4678896234,7436355961.1380958557,7634911208.6707124710,0.0015593140,0.0000038734,Very Low,9898.0167648649,0.0001211641,920.8471781755,10818.8639430404,23.6580872265,Relatively High,20.2115884136,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000035067,0.0031812618,True,0.0000661520 +2,T06061021322,Hawaii,HI,15,Hawaii,County,1,15001,20100,06061021322,5213,409283000.0000000000,30161527.9142542519,97.0642891247,26.0474557835,Relatively High,89.4815710967,87.4233128834,24.6571275391,Relatively Moderate,83.8106105391,87.4233128834,754552.3595077734,510222.1167381129,0.0320334258,243454.0359926558,876.2067770047,33.3455935266,Relatively Moderate,67.0519519602,65.5270655271,0.9080000000,50.7751980000,Relatively Low,9.3859370029,40.0000000000,2.5387599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0579710120,1082842.5920536572,13.7920666932,104819706.8679994941,105902549.4600531608,0.0000313713,0.0000000025,Very Low,1.9692852387,0.0000000020,0.0151413322,1.9844265710,0.4142077200,Very Low,0.4374499910,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000541,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0099874373,409283000.0000000000,5213.0000000000,39618800000.0000000000,40028083000.0000000000,0.0008505842,0.0000116917,Very Low,509627.8000000000,0.0314233600,238817.5360000000,748445.3360000000,37.5977579168,Very High,44.7882310288,Very High,1.0000000000,0.0312500000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000180224,0.0000000760,0.0002275779,Very Low,230.5075462219,0.0000123856,94.1304164907,214.5030827638,539.1410454765,5.2311349597,Very Low,5.8932581207,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0100000000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000255348,0.0000003276,0.0002460797,Very Low,104.5094165573,0.0000170798,129.8064434247,74.2213962963,308.5372562783,2.7440512545,Very Low,3.9390063490,Very Low,0.0000000000,0.0148900000,409283000.0000000000,5213.0000000000,39618800000.0000000000,40028083000.0000000000,0.0000058883,0.0000013610,Very Low,35.8846142757,0.0001056430,802.8864714520,838.7710857277,12.8581949229,Relatively Low,11.2121138672,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0006245044,0.0000038327,0.0003492485,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,1.0000000000,0.0312500000,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542407,40058244527.9142456055,0.0000083601,0.0000003102,0.0006212585,Very Low,106.9261414761,0.0000505411,384.1124266061,585.5657605523,1076.6043286345,9.8898625798,Very Low,11.9394659724,Relatively Low,0.0000000000,0.0006781468,409283000.0000000000,5213.0000000000,39618800000.0000000000,30161527.9142542519,40058244527.9142456055,0.0003985575,0.0000002657,0.0000937001,Very Low,110.6212172132,0.0000009395,7.1398535480,1.9165373923,119.6776081535,3.5109250974,Very Low,4.3917261130,Very Low,4.0000000000,0.0182681760,315888.8587620232,2.2117928286,16809625.4977076985,17125514.3564697206,0.0006654598,0.0000038734,Very Low,3.8401775301,0.0000001565,1.1894532216,5.0296307517,1.8327269938,Very Low,1.7042906890,Very Low,4.0000000000,0.0204021391,407903840.5845158696,5201.9799937840,39535047952.7582778931,39942951793.3427886963,0.0000000070,0.0000040043,Very Low,0.0583395999,0.0004233184,3217.2197865804,3217.2781261802,17.0524727301,Relatively Low,17.9932135371,Relatively Low,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000000358,0.0000290505,True,0.0000014426 +3,T06027000800,Hawaii,HI,15,Kauai,County,7,15007,40500,06027000800,5943,1030806000.0000000000,459516.6731830848,6.1500338151,19.0467198618,Relatively Moderate,67.4534981234,69.3251533742,18.7719774304,Relatively Low,60.4118835838,72.0858895706,332959.9571449574,167792.7734322688,0.0217301935,165149.4709508616,17.7127618271,33.1217117362,Relatively Moderate,64.7826443794,63.5327635328,0.7680000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,66594737.2848528028,383.9447225607,2917979891.4611377716,2984574628.7459902763,0.0000063169,0.0000000003,Very Low,29.4350693631,0.0000000083,0.0628428106,29.4979121737,1.0184434918,Very Low,1.0330889632,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,56.0000000000,3.1111111110,0.0000000000,0.0000000000,0.0030589604,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0005860614,1030806000.0000000000,5943.0000000000,45166800000.0000000000,46197606000.0000000000,0.0167507621,0.0001397988,Very Low,120075.0000000000,0.0011438300,8693.1080000000,128768.1080000000,20.9111551033,Relatively Moderate,23.9260247408,Relatively Moderate,0.0000000000,0.0000000000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0289855072,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000255348,0.0000003276,0.0002460797,Very Low,762.9385502884,0.0000564393,428.9386307213,3.2776151707,1195.1547961804,4.3095415029,Very Low,5.9417734791,Very Low,0.0000000000,0.0148900000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,46197606000.0000000000,0.0000058883,0.0000028944,Relatively Low,90.3777476786,0.0002561316,1946.6001040973,2036.9778517759,17.2833380202,Relatively Low,14.4752368977,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,40606220.8832914308,293.0385094863,2227092672.0956783295,530.1707312656,2267699423.1497006416,0.0001804370,0.0000114831,0.0042466231,Very Low,43350.6205845832,0.0199094993,151312.1945288390,13.3209920158,194676.1361054380,26.1722849103,Relatively High,24.9423944801,Relatively High,1.0000000000,0.0312500000,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830846,46198065516.6731948853,0.0000032387,0.0000018297,0.0000727233,Very Low,104.3268729204,0.0003398069,2582.5325235382,1.0442984855,2687.9036949441,13.4166096589,Relatively Low,15.5570766452,Relatively Low,0.0000000000,0.0001223370,1030806000.0000000000,5943.0000000000,45166800000.0000000000,459516.6731830848,46198065516.6731948853,0.0052856261,0.0000035243,0.0012426410,Very Low,666.5475081608,0.0000025623,19.4736228040,0.0698561550,686.0909871197,6.2836381633,Very Low,7.5500148235,Very Low,9.0000000000,0.0411033970,42337272.9888006300,137.6534442030,1046166175.9429298639,1088503448.9317302704,0.0015593140,0.0000038734,Very Low,2713.5270992744,0.0000219159,166.5606980512,2880.0877973256,15.2190537663,Relatively Moderate,13.5932751503,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000034603,0.0000385465,True,0.0000436593 4,T15001021010,Hawaii,HI,15,Hawaii,County,1,15001,21010,15001021010,7884,737712000.0000000000,8711454.3090733420,58.4401512286,43.1066279987,Very High,99.4459643383,98.1595092025,42.6674572964,Very High,99.2741170486,99.0797546012,3909779.1321200719,2582125.8111252696,0.1746532017,1327364.3330713348,288.9879234675,31.8903618889,Relatively Moderate,51.0956693021,54.4159544160,-0.0020000000,50.7751980000,Relatively Low,9.3859370029,40.0000000000,2.5387599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000478451,0.0000000048,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000541,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0099998852,737712000.0000000000,7884.0000000000,59918400000.0000000000,60656112000.0000000000,0.0008505842,0.0000116917,Very Low,2580741.3999999999,0.1736765400,1319941.7039999999,3900683.1039999998,65.1861714882,Very High,74.2640163391,Very High,1.0000000000,0.0312500000,737712000.0000000000,7884.0000000000,59918400000.0000000000,8711454.3090733420,60664823454.3090744019,0.0000180224,0.0000000760,0.0002275779,Very Low,415.4782459486,0.0000187316,142.3602922696,61.9542156517,619.7927538699,5.4799587665,Very Low,5.9041560145,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0269344664,737712000.0000000000,7884.0000000000,59918400000.0000000000,8711454.3090733420,60664823454.3090744019,0.0000255348,0.0000003276,0.0002460797,Very Low,473.5051910310,0.0000651127,494.8567057547,57.2461948490,1025.6080916347,4.0952789981,Very Low,5.6221049906,Very Low,0.0000000000,0.0148900000,737712000.0000000000,7884.0000000000,59918400000.0000000000,60656112000.0000000000,0.0000058883,0.0000013610,Very Low,64.6802104328,0.0001597715,1214.2637523360,1278.9439627688,14.7995789625,Relatively Low,12.3417814165,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0006245044,0.0000038327,0.0003492485,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,1.0000000000,0.0312500000,737712000.0000000000,7884.0000000000,59918400000.0000000000,8711454.3090733420,60664823454.3090744019,0.0000083601,0.0000003102,0.0006212585,Very Low,192.7289862509,0.0000764370,580.9212298706,169.1270211135,942.7772372349,9.4618177655,Very Low,10.9242145239,Very Low,1.0000000000,0.0004673635,737712000.0000000000,7884.0000000000,59918400000.0000000000,8711454.3090733420,60664823454.3090744019,0.0006900376,0.0000004601,0.0001622266,Very Low,237.9109428670,0.0000016953,12.8843062101,0.6604918534,251.4557409305,4.4968090785,Very Low,5.3796416501,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0006654598,0.0000038734,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,4.0000000000,0.0207448000,737708710.8628113270,7883.9591351862,59918089427.4153594971,60655798138.2781677246,0.0000000070,0.0000040043,Very Low,0.1075487398,0.0006549135,4977.3427848938,4977.4503336337,19.7224171343,Relatively Low,19.9022650650,Relatively Low,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000000408,0.0000331733,True,0.0000018765 5,T15001021101,Hawaii,HI,15,Hawaii,County,1,15001,21101,15001021101,3531,365469000.0000000000,1115552.9463470120,41.0551206444,39.6369371498,Very High,99.0514029613,96.6257668712,35.4631324234,Relatively High,97.7453635601,94.4785276074,2244880.4514211570,1569603.2441089998,0.0888473124,675239.5743199890,37.6329921689,35.2805718581,Relatively High,83.0000273575,82.3361823362,2.1180000000,50.7751980000,Relatively Low,9.3859370029,40.0000000000,2.5387599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0679710120,53358423.6905883327,515.5255139327,3917993905.8884682655,3971352329.5790553093,0.0000009778,0.0000000001,Very Low,3.5462107144,0.0000000023,0.0178004814,3.5640111958,0.5034846073,Very Low,0.5625920420,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000541,No Rating,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,0.0099998512,365469000.0000000000,3531.0000000000,26835600000.0000000000,27201069000.0000000000,0.0008505842,0.0000116917,Very Low,1549795.8000000000,0.0875910700,665692.1319999999,2215487.9320000000,53.9839983966,Very High,68.0399795668,Very High,1.0000000000,0.0312500000,365469000.0000000000,3531.0000000000,26835600000.0000000000,1115552.9463470120,27202184552.9463424683,0.0000180224,0.0000000760,0.0002275779,Very Low,205.8315698678,0.0000083893,63.7587762572,7.9336015953,277.5239477203,4.1923926160,Very Low,4.9971070139,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0289855072,365469000.0000000000,3531.0000000000,26835600000.0000000000,1115552.9463470120,27202184552.9463424683,0.0000255348,0.0000003276,0.0002460797,Very Low,270.4974447523,0.0000335331,254.8514731746,7.9569545004,533.3058724274,3.2931774779,Very Low,5.0015747332,Very Low,0.0000000000,0.0148900000,365469000.0000000000,3531.0000000000,26835600000.0000000000,27201069000.0000000000,0.0000058883,0.0000013610,Very Low,32.0431439731,0.0000715567,543.8312163240,575.8743602971,11.3433526973,Very Low,10.4651653429,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,4828130.5279219840,35.1384012388,267051849.4150594473,0.0000000000,271879979.9429814219,0.0006245044,0.0000038327,0.0003492485,Very Low,17839.8663537918,0.0007968309,6055.9146131274,0.0000000000,23895.7809669192,13.0070200492,Relatively Moderate,13.6546608024,Relatively Moderate,1.0000000000,0.0312500000,365469000.0000000000,3531.0000000000,26835600000.0000000000,1115552.9463470120,27202184552.9463424683,0.0000083601,0.0000003102,0.0006212585,Very Low,95.4796314509,0.0000342338,260.1766695466,21.6577094941,377.3140104915,6.9727783560,Very Low,8.9063071715,Very Low,0.0000000000,0.0003634330,365469000.0000000000,3531.0000000000,26835600000.0000000000,1115552.9463470120,27202184552.9463424683,0.0008889061,0.0000005927,0.0002089802,Very Low,118.0676167774,0.0000007606,5.7804922284,0.0847265791,123.9328355849,3.5520526364,Very Low,4.7010550308,Very Low,13.0000000000,0.0593715740,31437177.7921413518,196.0173546829,1489731895.5901708603,1521169073.3823122978,0.0006654598,0.0000038734,Very Low,1242.0638448472,0.0000450783,342.5948426489,1584.6586874961,12.4708959075,Relatively Moderate,12.2698912376,Relatively Moderate,3.0000000000,0.0188028000,365467633.7354047298,3530.9854379618,26835489328.5099411011,27200956962.2453422546,0.0000000070,0.0000040043,Very Low,0.0482928249,0.0002658574,2020.5164362008,2020.5647290257,14.6032241308,Relatively Low,16.3029908639,Relatively Low,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000002677,0.0000337348,True,0.0000507987 6,T15007040603,Hawaii,HI,15,Kauai,County,7,15007,40603,15007040603,2544,509507000.0000000000,3763051.3782403329,15.9289735326,23.8613675670,Relatively Moderate,84.6148558545,84.9693251534,22.2413255033,Relatively Moderate,75.9028856597,83.7423312883,553788.5026946985,159866.0053362670,0.0465200191,353552.1448416796,40370.3525167520,35.0215086434,Relatively Moderate,81.3161710393,79.7720797721,1.9560000000,52.5091980000,Relatively Low,23.5125676106,100.0000000000,2.6254599000,,,,,,,,,Not Applicable,,,,,,Not Applicable,,Not Applicable,,0.0699710120,59268365.9828897640,295.9306212878,2249072721.7871074677,2308341087.7699966431,0.0000020063,0.0000000001,Very Low,8.3203647759,0.0000000014,0.0109218690,8.3312866448,0.6682062552,Very Low,0.7166933897,Very Low,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000021774,0.0000022062,0.0080465986,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,119.0000000000,6.6111111110,1994468.3763317089,1994468.3763317089,0.0030589604,Relatively Moderate,40334.3876510453,40334.3876510453,9.3173396900,Relatively Moderate,10.0118819196,Relatively Moderate,,0.0006288023,509507000.0000000000,2544.0000000000,19334400000.0000000000,19843907000.0000000000,0.0167507621,0.0001397988,Very Low,29888.8000000000,0.0002046000,1554.9600000000,31443.7600000000,13.0703357152,Relatively Low,15.8125293377,Relatively Low,0.0000000000,0.0000000000,509507000.0000000000,2544.0000000000,19334400000.0000000000,3763051.3782403329,19847670051.3782386780,0.0000180224,0.0000000760,0.0002275779,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000016,0.0000001005,0.0000761839,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,2.0000000000,0.0289855072,509500026.7867159843,2543.9789504995,19334240023.7962799072,3763051.3782403329,19847503101.9612274170,0.0000255348,0.0000003276,0.0002460797,Very Low,377.1002611632,0.0000241596,183.6127961654,26.8408852286,587.5539425572,3.4012529352,Very Low,4.9584510525,Very Low,0.0000000000,0.0148900000,509507000.0000000000,2544.0000000000,19334400000.0000000000,19843907000.0000000000,0.0000058883,0.0000028944,Relatively Low,44.6719315627,0.0001096414,833.2745523849,877.9464839477,13.0553404852,Relatively Low,11.5613443431,Relatively Low,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,,,,,,,,,Insufficient Data,,,,,,Insufficient Data,,Insufficient Data,142.0000000000,5.9166666660,119566421.2469792217,677.5008183296,5149006219.3049850464,0.0000000000,5268572640.5519647598,0.0001804370,0.0000114831,0.0042466231,Very Low,127647.4010480262,0.0460304759,349831.6169989206,0.0000000000,477479.0180469467,35.2957296359,Relatively High,35.5664685650,Very High,1.0000000000,0.0312500000,509507000.0000000000,2544.0000000000,19334400000.0000000000,3763051.3782403329,19847670051.3782386780,0.0000032387,0.0000018297,0.0000727233,Very Low,51.5667080334,0.0001454600,1105.4960019992,8.5519178837,1165.6146279163,10.1552327033,Very Low,12.4507973241,Relatively Low,0.0000000000,0.0002990171,509507000.0000000000,2544.0000000000,19334400000.0000000000,3763051.3782403329,19847670051.3782386780,0.0021625099,0.0000014419,0.0005084021,Very Low,329.4612383326,0.0000010968,8.3360081463,0.5720625944,338.3693090733,4.9645617720,Very Low,6.3071150891,Very Low,3.0000000000,0.0137011320,71084897.0818793178,86.3741073938,656443216.1930950880,727528113.2749742270,0.0015593140,0.0000038734,Relatively Low,1518.6837843730,0.0000045839,34.8375621943,1553.5213465673,12.3886737842,Relatively Moderate,11.6999323670,Relatively Moderate,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0005411070,0.0000037371,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,,,,,,,,,,,Insufficient Data,,,,,,,Insufficient Data,,Insufficient Data,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000851,0.0000001057,0.0000000000,No Rating,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,No Expected Annual Losses,0.0000000000,No Rating,November 2021,0.0000182039,0.0107280896,True,0.0002521232 diff --git a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/test_etl.py index f428565f3..493c0be2e 100644 --- a/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/test_etl.py +++ b/data/data-pipeline/data_pipeline/tests/sources/national_risk_index/test_etl.py @@ -1,9 +1,7 @@ # pylint: disable=protected-access -from unittest import mock import pathlib -import requests -from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.etl.base import ValidGeoLevel from data_pipeline.etl.sources.national_risk_index.etl import ( NationalRiskIndexETL, ) @@ -36,35 +34,6 @@ def setup_method(self, _method, filename=__file__): """ super().setup_method(_method=_method, filename=filename) - def _setup_etl_instance_and_run_extract(self, mock_etl, mock_paths): - with mock.patch("data_pipeline.utils.requests") as requests_mock: - zip_file_fixture_src = ( - self._DATA_DIRECTORY_FOR_TEST / "NRI_Table_CensusTracts.zip" - ) - tmp_path = mock_paths[1] - - # Create mock response. - with open(zip_file_fixture_src, mode="rb") as file: - file_contents = file.read() - response_mock = requests.Response() - response_mock.status_code = 200 - # pylint: disable=protected-access - response_mock._content = file_contents - - # Return text fixture: - requests_mock.get = mock.MagicMock(return_value=response_mock) - - # Instantiate the ETL class. - etl = NationalRiskIndexETL() - - # Monkey-patch the temporary directory to the one used in the test - etl.TMP_PATH = tmp_path - - # Run the extract method. - etl.extract() - - return etl - def test_init(self, mock_etl, mock_paths): """Tests that the mock NationalRiskIndexETL class instance was initiliazed correctly. diff --git a/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/extract.csv new file mode 100644 index 000000000..9af12e04a --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/extract.csv @@ -0,0 +1,16 @@ +GEOID10,SF,CF,P200_PFS,CA_LT20,TractAcres,AcresCrops,PctCrops,PctImperv,PctNatural,PctNat90,ImpOrCrop,LowInAndEd,NatureDep,GEOID10_TRACT +6027000800,California,Inyo County,0.6700000000,1,4374150.0000000000,833.5350000000,0.0190559000,0.2995360000,99.6814000000,0,0,1,0,06027000800 +6069000802,California,San Benito County,0.3700000000,1,738261.0000000000,4498.8200000000,0.6093810000,0.1123740000,99.2782000000,0,0,0,0,06069000802 +6061021322,California,Placer County,0.2500000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,06061021322 +15001021010,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15001021010 +15001021101,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15001021101 +15007040603,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15007040603 +15007040700,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15007040700 +15009030100,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15009030100 +15009030201,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15009030201 +15001021402,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15001021402 +15001021800,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15001021800 +15009030402,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15009030402 +15009030800,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15009030800 +15003010201,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15003010201 +15007040604,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15007040604 diff --git a/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/output.csv new file mode 100644 index 000000000..2a38807cb --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Does the tract have at least 35 acres in it?,Share of the tract's land area that is covered by impervious surface as a percent,Share of the tract's land area that is covered by impervious surface or cropland as a percent,Share of the tract's land area that is covered by cropland as a percent +06027000800,True,0.2995360000,0.3186000000,0.0190559000 +06069000802,True,0.1123740000,0.7218000000,0.6093810000 +06061021322,True,2.9274100000,42.4778000000,39.5504000000 +15001021010,True,2.9274100000,42.4778000000,39.5504000000 +15001021101,True,2.9274100000,42.4778000000,39.5504000000 +15007040603,True,2.9274100000,42.4778000000,39.5504000000 +15007040700,True,2.9274100000,42.4778000000,39.5504000000 +15009030100,True,2.9274100000,42.4778000000,39.5504000000 +15009030201,True,2.9274100000,42.4778000000,39.5504000000 +15001021402,True,2.9274100000,42.4778000000,39.5504000000 +15001021800,True,2.9274100000,42.4778000000,39.5504000000 +15009030402,True,2.9274100000,42.4778000000,39.5504000000 +15009030800,True,2.9274100000,42.4778000000,39.5504000000 +15003010201,True,2.9274100000,42.4778000000,39.5504000000 +15007040604,True,2.9274100000,42.4778000000,39.5504000000 diff --git a/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/transform.csv new file mode 100644 index 000000000..9cb2e054e --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/transform.csv @@ -0,0 +1,16 @@ +GEOID10,SF,CF,P200_PFS,CA_LT20,TractAcres,AcresCrops,Share of the tract's land area that is covered by cropland as a percent,Share of the tract's land area that is covered by impervious surface as a percent,PctNatural,PctNat90,ImpOrCrop,LowInAndEd,NatureDep,GEOID10_TRACT,Does the tract have at least 35 acres in it?,Share of the tract's land area that is covered by impervious surface or cropland as a percent +6027000800,California,Inyo County,0.6700000000,1,4374150.0000000000,833.5350000000,0.0190559000,0.2995360000,99.6814000000,0,0,1,0,06027000800,True,0.3186000000 +6069000802,California,San Benito County,0.3700000000,1,738261.0000000000,4498.8200000000,0.6093810000,0.1123740000,99.2782000000,0,0,0,0,06069000802,True,0.7218000000 +6061021322,California,Placer County,0.2500000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,06061021322,True,42.4778000000 +15001021010,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15001021010,True,42.4778000000 +15001021101,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15001021101,True,42.4778000000 +15007040603,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15007040603,True,42.4778000000 +15007040700,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15007040700,True,42.4778000000 +15009030100,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15009030100,True,42.4778000000 +15009030201,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15009030201,True,42.4778000000 +15001021402,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15001021402,True,42.4778000000 +15001021800,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15001021800,True,42.4778000000 +15009030402,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15009030402,True,42.4778000000 +15009030800,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15009030800,True,42.4778000000 +15003010201,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15003010201,True,42.4778000000 +15007040604,Hawaii,Hawaii County,0.3700000000,1,63993.3000000000,25309.6000000000,39.5504000000,2.9274100000,57.5222000000,0,1,0,0,15007040604,True,42.4778000000 diff --git a/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/usa_conus_nat_dep__compiled_by_TPL.csv.zip b/data/data-pipeline/data_pipeline/tests/sources/nlcd_nature_deprived/data/usa_conus_nat_dep__compiled_by_TPL.csv.zip new file mode 100644 index 0000000000000000000000000000000000000000..9c6c4702d755b3e76e84289f545b1d1df9bea1ae GIT binary patch literal 618 zcmWIWW@Zs#U|`^2com}?dgqP4X9pt#LpK`(gBpVjLuqkhd~$wXX>ojBVo7{TYC$}Z zn_G~XlbRBrR2d%<;G>sZToxL_$-u0!L?QW5r$TaR1vdjD%L`@(1~9R8a$xo$1A*iB zS@$2dJ0PexeMzod>~cSe**^DGckpqon;NBF_dC`kde>fFp2jDAE&uiZ?@qC+jkNJ- zxyo}&Qiro}^PIH{=H$$~*0SN(904@PC_m(P!57m(nqQq5N0no`ru&`)j3n{jp%0hozEON5HPwzxT>~-zHp~ zb9?tDTeH8C0V$Rq7qqTlTHv5DMaWI^oh~ycw&Tj7~bN%~j<3WbU|{OH3?C=>GA~8sDw&D=V$D=~NN@`$)Gu zFS>N1Yg^>ZO<|m@DI%NL1HvSlr92{%?k5x_cD%SP#(5`TgzFBuy&US9fYx!{4gXyHp56FL=TNC4p9R4gNdG%O<* zcW3}W5G)reNDzTJN=W(tx*`Af9s&R(ltSgA_p{+}v^=~zbB|0(@XDlwTmjXR?bA$LE>o&e|}A9)?c;*!Q8#p;FTX>=GOvK5jE z+NdeXd%SyV{k+^-2{qYKO$`m;{nBrjD^*_iGi!U@-l?%SXK{GEzHL5VOLTm`-(#;2 zcX+)&?LRkRaC^RQYkdz#ZGXQ{;Jm+AU2%U8KYm|7TYbOx2YejwhZ9$6b-#`5?hk=~ zc72{*v2J?FTLL@1zJJFvO1>T+Ganx(Pgh@SXJ=hyXJ>17eec|%BV%cEb9Q=TV_jtr z2!FfWAESR4?jN5l;BvjzcOHwcD^+B6y~j^0Pi+pYd1ZRtM|(?kx*vZlXy1N+ryo{+ z?yn@?oXQ4D;BP5XbL>^Ys1mr^-&Zv+?R_WQx8U&##x4ua8$xJ5TOAnvTwJJPO@D z=U|NQnJDgv{WL%#*P71ndrU5mhX>*LxeL$l_vCD@7ePF4rskA2jwWRz&gP@-L1S!o zM2yx0iv>0=dsX$4{Gq1p>&WTdVY#`*6*o<{HP^{oLTpcxFD{Ou%>#=GTCQuBDUz!8 zNbxDPt+&M4>wDdnExb#oEN;XB_w460^^BvesHSGdO8iWfCvVSkW6}I9Msmlo7ni+t zdDMgRY1!&IfxXsaC-lvwri^8F%?UPR>)C0XVac`Y**s}uZcC6uFU|?7+PLJ2cjaNs zBX6@cwa!H5CTlj!aLf~fy5w zMal`+BhLfJLW(MFVklOnZSGk{hig6iy@@xM$b6Eo%f)b-XbxCT%D0NwGzg9)cw6J;@^wosjX|4NARWg&qcccFY(&d`dLlnt=v3ZOzUTo7#BI?6t+xl!U@L%hN=jL#&Y|>X5tT6}g z=_XPsI{?HvjtO&N#F7OWa_8wybr6L%fd-n~j_THuWC#@?d>c`>C4n^_7lqk%@*1%- zJvbX3dJV{DMEfoj{!x6%%ql&2^70#}nPH(nB%IMQ5nd;Xd~IqeybRYv7c5KzLR*pw z6Ay)Tzk}F-BS15AogJhhbw&!dRVPrmgFcV%p8s5K|6Kg)WI^2{aXVhzSceCFUUJM* z(LqqgpqMoaKtDzP8mIOaB!o8r7NR=K1S|;mZ!%J5aKER$Q^<;mg`xlTsx(ms`n>F@ zVr+zv>!#7ZefFY&V0CsmL-PX#NI#r5bYU#ZJLv$USHAiKwb*(C!oO*2GGDMJ0v4WE zxPa)FgQ`iNPjxW1P+*a5P~U~34GJUAGbjJ99(b~h6{|ba6qs`8JV8rE%=6tr(vCqO z1gqH8?WuKq+#5wsj;s&^McbJkundqYIFEcB&*-kk%dw*^T`1-#gno|>#L%(#(hwoi zieQdn(v6hZ9g;&@nra?qgDnE6`Oq^)F@$p<;oBVz_B_xN*iD z#8UgdQK$O?-E-}E8KG=K2^soUbp&^^N&GudQ-2h8V%^uss*Fx-nBx{-hGS-Ocs6i; z2}iQC0__7;Q=}*2Y-wICibKMGgNU?b+WA)!@BwnCORA`f^nm+dNb^K<2txkf3mV%} zxhIO@h^wbkph4w~xj-D$xN^0Cg8JPtTzCTizBrGCQVn7Q+EhqD>uD+Q-u>z1cbT-I z23!bna~Sm*VT4<6CX0LE<-jG8-x|&P;c7|i*KvYu2s;~O##~4kttyP?D^%!Q!VL6j zLILJ*2Ug?tMyf0PQOt^Az1ytz2^qLC{SxWC4{m1Iy&x2mNGJn@1qAynXjm9}v9_K0 z3Hxhm@(GYC%?ZRPni!^dISYtx_yRQz2YIG60VKs5zyi++g2M~;{t=v})z){w6;xhG zoDX+A?}628QyEu4rLenui<1wof$pSCJEN~=g}4)~0k&T!_Jc@l^CMFQ4?38_*M`p1 zCosB(0W2U;f}w*V6Ejw^K*Wt3Nn~QThEmg08}x4`0Cn0Ub_w6^vx@i%;1xQz(%vPr zN|9R&|7jDJWmQMh$zWInk0hqHd%wksED5bBMGGMU?=`LxRbl7*Q|Nd6$gdJ7Zb&K| zR>#{D-~bYJdgW4DCGez#OmrY%6~j_Yt80b67cDgcv|uI#f8#Tf5riFUK$A zuL4E4y@)hht~xXa^Iiy5msJg+GydWT{MP}eD$vg%lb8y4<>Ba)GQj2#>LZCC3WCT` z0du7Itay?=CD<5Gx7Pinz>rHLnoJ=b0|gX6jjrcU;2j=^JgF4Z-XW~$(F9)~oW3k9 zj*sLe5o@&Tp00>&C$BAQ7Pbo^Igtuw(oRbRB@~~Q+1dzlryg>q8l1|h4P}CA1g~){ zJrf-e$cY;x#yj|aqAA7lF=uKP$XQ7~)FH>aqE=s5!V{GT8zuxsusApAAX!tqb5mUm z^NHB5`JN5|d2iee;V_tN%2LX-DYU*0^wm?J(U+l-$WJsz(LI|D;PN1RHVPsIvQ%WG zDqoJ0MKPx@8lW&Qm8+iFsX2q#9ko3Wl?9Esjl7P989iReF5r48SjDi|F@|+sw`xgk zrasfC3lch!SzKV?Kv#Z3vEA=0f{%rV z?n-tln1!H;k_zzCs@a)~E~F)3n%(?D(sGkn{lX^+mY`@o$&o3@!i?3dpB7x*h1?Xa zr%G8ZInfw8i77!Y3QLjr8T<%`WH44~ZPdF;N)nFcuK~*BQ4dCcnv<8Am}G%TeTgMW zRf~@0xCp?B4VywgLyZTIm&)RLl1bZNT@Ce0(DA74@BB*r2t=&n07-IpDk(99jEjwNb}9Vv{ZQrEr1&&p^;J z{Weg8(*kl(ANiB`I41&`#>`<3xIERm3|j$T=ynxwOWuxLb2S>C0&JqB&-e484A1xD zAZ-r@QM96;{?ouOxZV?)tbj~qrbh3kuj`1~!ubar`(Z>S7Vm+8GO>^UfW>&7Lb!rb zApB$BvX(NUBMEm*;G)2xs?sWTZb7TNMGQlo1ca3Jx=Q=41Qh(|Fhu9hN(wd1kAo&Pd%ynG;H z^XS%4kX?f*rD*~3FahLT8w99TP^UitIK`AVH}q}sp_P7NT~pfvdfb3-n+=OhwZ|o- zMwjNw#uk4nA)_@qvxaZO+hJfaKRH7jayk2l->WccW23xfi7itTC79+i)7Nl4SCk}+ zHbl9lU4&GlgTm=Pq()^GCSaqH1tGCRpDkAesNOfeP-2ev-TY8&!M?d1J*fwr(Toub zB^YyJ*ZF5%#6M(OX7ss3qiQOZRjR6(ymK)3?X{&K)-rIhvRI5^?lJa!kTrF)A~+mr zAKY$?6e64}Ku$+RoyECQl6sXvx>)_4saKN;>nq;1YQo)*dHb^dD;u{YmN6E-<<#DZ z{CCQ{k~zlgF~!VZD_K(!XFRz*&J>!LwNGK>iQ!007K} z?VA!CMtpgJem2oo&?ONO(oO0gqh1#usbM1K8M~EaT!iIQt`|iAQYpZ5gfoNEAnozW zst|$R8fo72XK8|hCFfDV)qs^gxbJ#Jx$5+UFNUQP0@)?aaX-ZLtL^O&(y6c(pEP#_ zSC+vsW_9=`aoj$$moz%se2jQX>)ZI6&VT=LVm1k4Q>eZ`@lfW9gMOpfR-DY_;W2uNTI;>G*ZeF$YGS|{mp-oGOQp%3=9dRnWY^>UU+b~1)0 zt%!Atc#rLM09la87(cI!SKFwQN5Uwwt!6NZ$efA>nw^;FMv=@L8H4GeZsR(XoThw4 zpka$H6E`+q4P%5#1MU*k3j*8Giqt=qZGZU7GClBr`fW7XHn6g&L!G5rg6^0q;^mv>zRuJl zSW^es{ovm8fmm!4gv_cICBmKj5N!ZFO;PzA?2R&aWKSYdHHmGkvv%;IK=vL*buM<$y>0d%VvF z9zd`WywaWUtO|%*UAy*D;}%<=L+Fl zHb6-TM96ew7AGi=DdIZFh(u8Jwh6oL)VT5sTRy8)E$wDF4u~qyCUB?@ZRz{Ar)F<_ z1^_|4U%+s!5HJJkAb_V4H~jUclF^!7%}Jnmp+#5eJzbsbG308k$?LY9U?w6t9|VTm zU`<#OCNN=}()D>OX3xBERjWfXc{UvyK-CFh@`Dj_Uyhe%lmwClE(JQ&TLfjkx&`?} z=DL3GCv8Th!>$GlrvAre=@gdSZ`;PK2DNKTjccKZDZ02gN;<70lJXd_VZvY>h?@#9 z`{$fN1P1>iubf}i?)#%(`K^h%!j2O;T0M)F8IzIuU-OH}-Y_Pp#~h{VK?8S`hpZc| z()0?Xn|0i-q%B2rkp&4b;n8_NSx;kk$msCzpeo9b*}pcHa(_>EF$=8Y2r(CmQ-n5n zJe?Q1Ky^_4qE-k@4yh&2!*d%CrX6`nbjjn?(D&Rbk3S| zcHuRP)^YA*`21g$%JN&^hCIpK*F z&iJ*5Ri@TJjvfU!a-vIP2D!^d`<#(56Ag1q1*A=E=x18e^X%v`>5Nfu2sT+osP;ngxCsa%)iFl@EUtQ#BwKQ z5p2R8@YNiHY|JXQ+E~%Cx8lQg`Xm+EjYej^Oe2_g$Og?{IgOam4U$BYt$UCtddrOa z;3Dg>o1-)iV~Csf+I6)GcgyGnXk?KJ2$AI|@o&sJu52A?Sj#)N)_-i+MBkM?Cg3GdUksx!FsRbZR^@eD#em=eDo{FJh`_;8oj=8 zKu4UV`gl6rWq8v>RFH^Y>4Q9GId`e?O9m8K{g5$baGYBlL6Yh4Glo^I4MV$Z@E@#? z&ur9H0NcyPYj~ez)uuA_BJHX+>SMg9DIc&$MMb0Ke6#wf{>`V_{NP!@-x<7Drh#Vs zqt~;he|l1XTfS-M=9NVyDSmT~WQB%FTnKN&PZF%x91(k%2~zAv77MU7GYul<9061Y zn;97x!Z;ZaKjYYAb!u~{m9JjqAB&D0gi$!*V0$KRfS3R7PdCso?;qo`$3>e`zT!r) zjT;S%VAERo;EhD)m^KpQjK~T)^xePLQNDs&bn8ac@Ubh)VacPDq&U$c-W!TO-58?e z=y>b+3Z#HQ0bd}0a0xq?$)YzKe`Tlp8Sb*^)w#r_FQuMtAF&nc&N0)u@zF-6G%Duu zLkSsL5VD(ET-IDk!_#%aDz@NDWQj}>cqRdH*H&gGtZo{i>7k= z=(IROQ;XVuupt|5S8T)Lcf`@)==A<7>PiS6Z5>LoZUc&CmJR6F^oA7fq1@e(XUi`v z6pQ>j@B{pR>~!q^?DUI=Y-~d;0Dwx7{|!5xk)GjyvD3@{v(x{FasNNr={i~(t=p}M z-*1}lm-@J<3sK}TZ?8$U-puMZJ8r_nq?3)x)Tk1~{?p^*0epRYdwxT|s_gn~e0+UAJ|=_Cdwo9g zFSi`}oYk@^p2rd47Lp@8;(4Z1U{&vjTv(q_EdRWmeLm7+wr2 zhn7R_z8xrcm$|&o<$EifOP!RKa+PBKKLfwsV$SJu>A#RCqa9YRsNhg?D3z4KNy1Ej zh0(#NeEPPA=3+J_pI7c`tFTZCkoF7Jf5`r z-P?U4RiZRs|DscFg?lY$`+BEmKDY7qP3L@Nh2w>}@xsc(3$5+xkE4sGjzl4^YTxcGQ^nd<94K`WzL`71SA`n!`? z)#aVpzhZxQIl1DKljQJo&v<=kWcJ0JbVC0xpj6jjz2E2lxcl@>=^NAfBB56}*0Q^_ zJMK>~_ar@zgN@dPPH=0k`ZR0zaVzfGKdX2N>+E~KsJOFb-_YsC_~OoAiiXofJ2~pw#@@xzn(wie6q2-V6_2sAaLV zRJ_lgY~aYd_MZH;XNJqO^=7t%i)F@dpwLC#LflWpR%8gAC$(@bCa-GeM~w=LA2Rxy zy<4iDdt3mKmI9C6L*B>JgK4xwa*4V39-u+ScGY-dlW6109isXq2W_XVK2hpB2F?I} zf^~J->sw+7NWTKmMhf?&Rw#v*y-gsFI&J~sBHL;7CY~bU-6d@0VYf4CgK=VNj*`&M z99L|K_*pmzYiZx3Ooo*-k3<$qs#1eTsOMqCv+Dl%4Y60Fv84L@2H2>5#Mj6CyS#%P zMeYh_M|3oGWo5udO9lldu&Wd}?>vvM>tk}`Mi5DUkt&j7lR{bt%oed9 z6-o+Xkm=dWrD}y1PbtADj;QV8aH3*OBHR04s><9~ge%y6B*OK$aW(0Q@EG@jQ*rRc z;Jx+xM%xr;ilN$03{C~SESFGqN>?z9^&RJ(=v2tvVV<{V-8MriSX0OOrfnupXo0JXcl7AS_fTIWrdcA1&3CLz^w4@*Ki#GWk+7TW6z=s z7|LqgDO{odh0A{m1G*)_wHGtAH`5zToB>9iAP}=9|5HUh4LZ~&RFB$o7S##0G0Ri6&< z`$_0Jpk)EY(uW(l$ALCuvwtg$r*=%M*W{RE8Cbv4=&wVx2`CpbxwZ0epIFYPn%Tnc zfWL`9(niMD%%KHyS1Zj$i1k+iwq$xKlosYPs4M|4t#?n?gjC0}l?U)-okdA1T+rd^ z?|y!2PgWbq#Al^_Rd=bZ_l}5TsGlvd=g>hZS_Mxr^ zhQI>#1t5}>AJoCwC2(Y^EzCK^6w8zw`|*!}f*wic#xGKi#S0q3cg{h_(9>FNk#Dq2 zG7oqHAi>8p733}zhB@*SMh7jq2ib`CC!An|8R|orop#HI;Z{9E5DT;K<{aV^A~0H# zW(L;+n7{(Evm|vF_pjA%%(-QOSLb`kF;|B$6*axfirg-?sez&)s2JqZ1tpRu6@wvWshx3|^LBAv=xdwlc z3PQ{1g_n^H24z#X2CH9s5{#teFUA7%2g1#i)vSjIG4;F1gDd{((uJbO5s}?mere2S7#x$36kqW;-(v!h={FqZt8> zbZdO=D*Ca%0OdI$Owk=JPHAG9k1&%Ch2~;h;OeW2Pawvq>&XM z8--1PUN4-u=7TF~L+@`=Du<_wB3i$b7N*54jIS!S_jFb?8F5${dQ4&3k2O_4=r9eR<~ z!)3_APkFl$b!0}4)G@tbHFDAUy3TU_gmLsT5MbDS5Ojqk(l7Tu9bOYuZUaylsK|C2 zdWE)VlnaeQFnFp369h&H(9T|`OU5iG_L!Kp3KfH;V(4|dU`{_k4R5~-q9So!@$Fi;?yK^v&bymgHqvpopW zBD_)MJiRO>bl4t!vM2%DnyqwN2j$;Gjr@Z60b@0VvA7yy5p}1*Y{0mnZluOR+i(*k zmhOe+xeWl&H>`j^UJL_%DuL>t`HJ*DGzGV5CKLg*(AqpDw)c5Hvbr0;_QE$jm*i>q zKA<#N=6ybUI7m?2Qc5{6ib-y;c2JuU;BXH*MhijVpgnYYcraG_J55KjbTKXiulQ&vJaiS@OGsVT1qhko9qS66 zmW^EHt*z{qjNSDWPdzla031;;0S$Twu#CU1+x}`}QE^0#zvS+n0-9oGGLtOAz{V^N zj31ag!*w@O66q3>|2nlSYSP3C`eB@Uivi$~zh)vHsTC=E@DV0;RnoO+0O~;@&DV@P zx^bL51QPT^IOnBoVnA1QxR^$Il1gU=RiL_5vSU88lhij5&l!YO+n2o@bJDg=(S=ro zelakAHG1+DzEXQ41Vm1hFA&rI90x^%14WAel{i1`lsJrSVnd=nSUs#^+aps#1mb!% zBlf7OW=qX=WR!pEHZ(fQb@e&;p~gWpApZRYv%EqiGL8~THVSTPdg`=2YsB?15qr}3 zAjXO7IG;68Kb361Rje|JY!RVj1(eM=9eRRrV@4r*1V<`y75>1)JzB%!eiWi8c9>I2 zd`tuHQhqWj7pRV;YioQXSY@uGhQ4WR11dqxdO@-jiO?W16ij(BC;teyx$Nh~lGm#818X#4ADd8Fijfi`lcfeLKg_h^^A=FMDn88kjTKd-F zlRdG$!%-0igQDm-gxlSlJj`w*rY*TwM^KR%*3$GOt8^)X+G4VG!R$1Ys>$?x9l%%| zAXQm2HD5fhvdpvo7a1MpNhqEPLNL*Wh$F*4M5;?S#vv`@!*n>DEF-1yLHmb3Z|OiU z_9av+62KD<+;{J2)$LMQ`X><$`YaK*PyGUEAOFB+c7p-I_QnX5WG@7?P}u!*5$pkq zfQ8Bps$}{LGN)e{4~qclq{Z`sgijG~Uq-M?nsBkzYm8M3z~o{gJA+8#q?7RD{@cU^ zDN^}LRi%S4t|Mwe$aF1?1{qY;eGHg$CLiMMkou_8keVy?D|Kc%q&SFmNXHw+ z;*{a2b96!>%1U3f*B;GS(n)}22Vx?w9O1sdicKx>UL z<}2)!$7RqvL0ch=>gSU3DE(s0Bxcy^;zH4HV;|7(~OW5`4Bn94ntvV7~7E9oD6NTpNv$Kj!~tCunV4{l!FME{FYR@ z0jmAMRy496fC@8K!xxc(As(f(#fO>a;QzH2!4UD(b-PDWQ?3YbjS5UU9!raz5kd0Rn5fD+7YV&jOInyPuoq!E9_OAf$LODx?F+JDN4P2lr` z!h@t3gcJ6b>jqg7TFi;y#ifJjL0{!7IFY@=TbQ@bm>{tb)2iY!29-2uGsv=ys``sa z$m~~6BQBvJH~~3{Op}^T;-m+XF0%$Dh~sA@K$4p52?~^RvUnpa9NX=*su8ZzjQK9> z&u&JqsCgp%>^(3pZ~nu*6s0stj+|pRH;9-cE8sAZbl|E?FlkgqYWg(-!45+)$RpV= z;$%E@I2@;TyJ85U<64Mpj{LU(6CTGQwezA14eQELR81u6)MmNHlg5pnJ{#7qTFAX= zeDe#y4MwbtDs4!M3#Jjn8`_@ByYKbG}Boh@&P(mqOXmj^GLlPzoRUM?QfGbr|c?D?+Pn@ z?7$sdioCr>fc8|$I!8_si4HlCx`L>V|1GVf=7xq~3`bp&%219AewR zgnY;;Ax|l4oRfjbmJ;8U^AaHBS>l8Qtr_5!nB;M)N2wN?JdGH%Q6+fO1j>sdDUY5D zUqFxd6*|v-y$#ttzTxHo?;XrL8knxFug%W8P}O*>X?smfq>Tg!$_5x zYG-AU#>ie(j$vzLpC59SGVMJ)NmJNQ|0V(hyf!<8!jITwHY4}Kqtqpq8Ih;oI;6uR z1>21jCB9%kels~vXVQbrah4hL^iCDk)AVfu>2R0gdUKMzEke*WrqW7s!U(cfw1ia0 z|IkYWfHEKDy59GY#qlznGF{L(u+NO)*FZq zD*A-6Y0&tQ0#Z8|Bc(+@!Gj0hU`RzUI_KtJaqQ*T!QV8KLi>Jtqp4irCye#D)=}WzVf|_m@r`X&`w2Ceh#3`HQru^p z@VR)ya1g+@CQa=1T(bt+;yB1g(IFlOB8kgl@xR;q=LSq%@_h*|qyTnzmYRmeUdM9k zKn^L!--VOLC;>4gDE+}v$<&<80V5u$_1n=&(F6z9kn%K>wa%+?tf7aLb}w0UfEjeE z6CM~~oEv~Lw`as0KoeQ;iVL=4b#w4y^$#_Kf1EqTi5Td8$hs|k;)V#34v@dIodsy~ zOZv6+it5EECd*+dq-tVX%0wB2*m6-Lo=Z+g$R9<0)g_MkA!f|LECelx%Z;l``g*%n zDI+Nhv#QJEsX2AZd(v365wSyB9>k(7h3f65or&seA>Rj=7K&u#QbwkwDpafyW+W?- zIhjk#eHH6uNJ zR|TYiCQ6qr&mm|or;5R7sDQRCj%~6^Ws0XTV#c##Dl2iyo3eQ!H(3W~YT0zI`)YNA z2%&c4;zTNyAg{Ea*aou+Krdp+w_;~ON-XQ!sL%o@shBNN$WS+n(-{&kVhEqtOf%6-ckUpvb?sU6=WEr990anz*RziaE^bJ%g zi}oUiq5n0MaZ$rSH=Bwlq0Vne;$;xDX3{V!y2`6e!nS^L&#VqM+*zhgh(X)0$1A+P zk^(n;EcbeOB0X8yz7jg3s8su_Et6TdBzcERDyL9e#Sk&wWk9GfsTPG)u2E)C8S)w) zYZGowjvqlM)el4V!!aqtr?Fty{x_)`$OW``Y(g`zRXf?`Cy3Z5iz#xq(aHw`;Zbe& zBh3&kXc)_Vhum}^nxs=gW+B8jsZZIuo) z1@KM`(f;|G_GI92dJ{U}`GK_WZpnn$ciz=+iAgzmDKp zPij`YIT}O=9#lV?p5~p-OJNGtg$1PU>rf8I%kc z_s8_$>0w)=pLO*Fa91B9KB909?7?^b(dXFTqLFD{MN9CPURl(p(Ii~bU!T;pR@3?(fe43tr0!3RhG2o%d8ZUuttMAC!wDsE5w)L* z)Z#v?NElfN9&UcuPo)euDc+P8P&H*^)Ka(i1?-n>hXQ#27hv`1)B6E5>btDIxnbl^ z70t|tl4!~}4wdI0u}){ocw;>uo3(;156|iq$7HZCSKsf$m9XHp!T}>i6xa7+kbN;l zw8*|#S4NZl^ZEgwkL`V!>d4}{GUW4@0x_w#uUMV30!C-Beqp8 zsZRB_{vRF^Scr^LX3rfqAYqn{DO&N+#0xmPb;aVsN#@wSrVO14n04)AlAl~{FTEnT zSA_O+-uOWX&pDrg2~xXB`G>GG=;Mi%g7z5BjLb#eil#*~wOfAd3YpV2NeAMgs*e5- z=2rF=Bl&~5I~-|Hqoe*6%4;ILj(C3+mJ{d;a9*8&ZAt_U3<9vWnEn(ZwcWY#V1#)) z7m0%X7;bAnTO z;Z>)&z*yK*D4ZOjrcsA0I_@eSW0U$z&j-8F&){mou)JRX;zVLmz(q~7a(mmDeP~8Z z=X5CX$~AT5nGv4L75#ATb*S4a5}fn6sX3mkXPqRXnV}?`?qa^7R_%1VW}L&aB(;Mt zvF(8Vx7AbXS#z^gpo_LE+HaX}BXess-#VBFxJf-W_eFx^nQ{77l%h*0FsspV?4rK_ z-qzP8;_5V6yFQ z>Yr!56|oCi96%q~EwQN!pV%y?I3`1IajZ)jtP;Ag5d>aznP(T+b{I|0g6@6!wFut$ z;QFvXKK;`eE`2ZIkhLi?%>1sQDjBB?n-e<`?92zC=JTJo&L{<$6pm%R0%g;lPzP<4LTbpAjNK6azRSd+W zA1$nd)dKtGTGehc4=uL3)3WU>dN51mMvu=Z0~^zf5w+djkaTh7$G8QtRE507_r~Z^ z7+bh%oqA1&nC%E0UcuEJ!vP@k?dxhI)`n%Ryq*An`?5U6#@%eh!8qMDbCr{G zQ>js@syw@*>+^jfEIT^W+x>amdAO15`+c9%i_`mkyxr1^<@>w8-MagIHuL>{<@5C& z8}svfoAUGhh#^Ktz9IeGb5dAfR< zvg7?>|8Eh-EKl3d2Ln%!Cob;&Y^JI1hpkMlPVebt!|Vqu*V+5wqlqo=;p2nM?#Qx( zw(mRAFW2wELwjniW$o_w(Tn%@ozVB|Tj}@bbcU?%=VGKRkMC<88ZJ+}SG4=*5t>hz z&+92BPfzD4!-?k)Snu~fqRR94R0VgBeU9qP_u&=V&&$a#+SkY9;o|CRawrYWubXZ= zkB+zZua{4++rw4Q{r&Oq#OL7G`+u=Ew6808V=3z^Nr3Z zrmpYf`%3Nh`q%q|a{FKm?`|&cZZ7TZj47b5^wXWOk}|(%I7N!R?M;=9!#b8v=Ve-G;Ntj$562 z^}X+9aiTlNyE?S$#5+3l`7+h+x9>>-cZ$c(9;dU`@ifo$6$_P{iq|Svf9x8Du)2A~ zXg={W^l;;gxi&@Vk>kYdI_{D_bGSAoIf6fTMF8~hE;OG4=_u;zFibb@LG|!^!qza9o+O|iq0`d51ni$)*EYp6 zWzH!!S7c68SOk#WQH9Vj#|o(@ojAw&wm#xNI?EC;;d@|~-88M~W{~aIG}R!9cl|?u z>qy6yGT>}Bdf?Tvwe9g{0%PVcnu~TjQ1E)3%aoD`jR?QB$cA zK0cWZ5P;_(zQ={Nj_%$>k;`&s==*C9wx!`lWpm^3oI9(lh-U@5?qq?pHvp$(mf8YC ze0mI5M3@7wfMr#0tfqH1j`3$wJ)KzPkh4D7U!zYR1jY&@#394+MQ+eomb&+XeJ`Zr z<)c5!ik_#LH^0K0<2jegprvty4S5NF)d>ic$hXMRU_SDR2V*AJk*w)2jJsq;V`sv$ zo`3K>WmK{%X@09iN4_=^7f}-fq2Bw#TK|V{3&^Y1;dIypCkh;p-g2*9U?$P#!Q953--e;ntL{JTaTS9oKZ?q8F z1$n_Z1uy~-bYFgqNv}Ld>0&AqQ&L6@^acEHHREer+JzZCKVi92mue>fTDJya&q%^D z9!Inq#QBE1&?v99qfG4a91JJ9l~T>iN(WO*c$U2X4Lx`-Sf2hP;DMenouIn`(;Yxk z#oaaSpGwA*zq(Zu5O}EcHzi#Bnyf8e2c+4&qbzoky%mli3>VzNDP9v2BK@HRdF_e@ zY^gusgx+)=&)BvB3i{@n~$a0N0CeWFr3>z443D-D?3lrO~h^5%je+7Z%3b+=y)E zsNKM22M}wxXBQe@S)mq%Q;F^|PvVCO#)H4ThizhpC%Dc#_m5k@J)gfHK5<_3XkxG` z%)PrLIl+<_aWf9`f223|7pW|=!t0cZ6kuE>l88eo?rZ|dVabqZNd%{`w}kKDS`s{p zJWf-i@I=QE2VC%{UX06I65-RsFRS!Z@wZbZ0Ot^UnJ44Rq{q=r4FI#Zp$y|3kPg?p zm5_{pU;^Q#1Z{Nl(UieA1KbNBQUC1|L9>oFwX9R{lT00`NLwaK@GD0oWIMIiR!Fdz z;i&tIz5E*~*_U})oSoX59|Ew>B+)2go?0y(fFd*RQG}P{kB#0zCcw-B2nnrW0%Obb3)ZD32+JnXEV*JOF0e91zOlO(hVHpqQq zByd(I#6ah?r~3NT_vRvE$25)sgQd3)h)iy0gs}wc-^VgM=pMEp83vXm7^iP`dw?Gv zaDhuIxUIzC!4Qz54IQ8Q#K)uoVug&44hICpg=@BzZ&!KUFG&jGl{C@$~4t!YY5xf)ZVS>DW(;?f^yZ;W~9 zc#TiXh)-Rj8F(s7nju@Udi9A=-Y8z4y9x4JWxuj7pe%H3_=($OzntC48jjgmhhuqtC`ij zsLViA$qb@sjIzc84hgIuWa}Q=Nf#0=u?18AH=x!UO-rQHEKYAPohYn4Z{2CBsw@bL zn~6@Ug-776W^Z+;AegLGVwmEsP>_DacaCf-#KiVEF8_Y`PK>~V0T)$RPLDGPTYSo| zU}!-;9{U|%pw=O&i^N$`Q7#Kcg=J7`od2AR2W@-^ohgJHC>kY`8nrTiY|1PQIn@-) zk6^$E+U%a9;ps6fXQcH9#V6wtrvJGGqr8FsNtFTQK<;5cNPD0fm{ccH0$#EI%5bdL z2ss=>FBJNiX^A*tXWl0tLrV~qT3E)@(vFLqTWz2Vt4fz`gGL><%aGuaiQ3R1 zvFP?3z(;qYEsP@m`(m|0GfhwrA@&5byZ=_QHJ5hPrJMynoMu52pt>4vRIM~D>p@yH zmN-C$*QBIHQCZ#zL$>y5c~Scorrf zgY0v9!dy#LV#J%A*&k34!Nw{*9{&D@s9W`O4a)Av)b9a3&pR$DalNz>tmqW{{2oBHbe)HZ!RZU*Kqp7uXs` zgbM5vgid%FHX>$2{K=X%Q)GrDvdc!yE)&OEx`B4ExB{l^B4}Aiw9p^E|J3&d#CkqH za4c37fV<*8Jbpu*;gqg%vXQpF0n8|HUEjC^FIJ(jVCxJI8wq%@b8I9!%DWKUNO)a%j#xvEMre_=a5 zzC1fBKu@rzRI90K8%>xS`d}qK-aUpnKZ7Cf78c zA{;|B2erpO(n_dJ}Q|B1oiok$1i7nL&d|53=9heN$JaGZ=tYNV^hGTFzjYZ5U-)Q}~{SSALM zB|8&_K?_;NpqX6jwbhVpW51Jx64`f67;7eseG8*fub%rpJ@>sm_rA~XpYuC^d_T`Q z=dW|V&-Yu~jX(;3 z5(l7(qGb8x$nl7NTq2SyhU@mb{5hSwW&zC7cHkT1*PC$mMP#<&eKKnMG8pSd5iGcn zVG)w4OyalJ?9h!hk8bxD7tGx>`ebBAvu1x-C!eHV(iartVG&he)Es{MF`)r9Z`&3% zwd5s`V>FYl*hnEzRuO<=czzT(2*74znMQhzxJ|7?vDviqkaYVYgtU0gk`&*`w&oMoGCYT0KZS}k2uDN}pz`uc z@40sAM1}77jgfCXT$H{LiVeD3_?Y+D>G2QE3$0HoyFVxrEEWP%9JDHDtDHEc9(PK# zXC35}H}_*a53dvF;@N^|JgtZ6AV1#~JtW+-wR6Shh3zOpK8rFk*a7Ow3eS@CrkivR z|4!)867h6HGF84}JyP3RycLhmINN@Z;BngBt7Wk~6O8d2Z|tI0BP}bY(9~cV%@ib@ zi70W$w*V>TYg@sh?&$)p$IeV-QCnqwjTbCPgU8{78cs;Jh+!tzSv2X4M)y}j1UQuC zM0n=weCPq$+@x5r5!r5LjW2Xpz9DCQ{8-L36R28ri`PR1=R>S>IC6j^D<{v(6vEv_ zw$b57ETfb8I+wCO3aN^kv9%&(Y+F5}FFdv@JudUMz@0sfepT;0dJ;KvP5UAT%Zmm0 zyo|L-#ne!AsRv*o8Gs|9h!^yJ>1l60*e9{#=L%`C8_*e3m10FZ=$OSe5i*MGT+kLu zZ#(i4|26A;B*6NMLs6<Z(Exq{T62DC4BhudNY!N!vtoWS*o|E$axkop8U)#%7|HH2u4USO4b`R zZO)mx)`BDSK5;os4YE3CCpv)FmjkrBdh?YaEg0Je2C%-yZK4xmVAqjXH1_65Wu8i~ z_UAubV=Ra-LDAJ;&jMoKfs|4|-kD2sBsL{{ixEIve%rcemAA81JlH_P#=8@(F15gv z9LI-n3hE(s&`yR&euzq#ZhZF__0HQ)!=rM`?+cyAfC=_>itRw?t>KYj*Ro@sGAB!e16FoIdB)BS6sx@M740ZZ zq$Xr_dK}PCgo2)#ED9*&~`ZQ|1`Nc2HEFWbOa*D9@4_ z5G{)O_LQE~U@9-W)e3@`boHwzRNp)7ogh6|PsHd9-iv}dTkuIQ&RQ$ZRte4`%~IxU zCVU=o(Gm;RIWeId`bZR~>jm7f5B$<|d`jzuB*|bf@(D!@9Hq!&;yiOrD`3n5E+iDR@`ZEzf#dY zS~_&2cCLU{7xGEYgu4488f;0WFraSqeAP17IG^TGD$2MhSGc^1|a`6w>OyDsVAIW zg=rkiH-0_A6-0&eeX6+=m3DYO>*@e@s@Bofk^5X51U8y#A*ftk|HtXd+C|I3xF>qL z)^qFloENTpV3w?D4_NCSpCPW*1cozkJgi$18E2z*j(p;>zgUMZzd-Mr^*Vy|F7+LK9k+il|KR0ltT>O}FoVYZ?Y|(mQnKN(Mbnfu_|VT;Kv=4+KV9E6tZo;Z=9JJ9kwJT`hwP< zlsa(sUL{eTc9^gt5)j*Grhg+Qc+&$%z8K3OREju)sQMOyZB)rP9LXv@kS?Hb0hzc; zE0HNFJZZ~W`?^Ue^!n8PYwL&<6C~26q`Tf8Y`XbmH8@o|WUu@+H>SaO&xR>6Ih-*h z1b%xJCub6KRRbG11M8g}O7;tDbuy?~4mq7WL~1X%$>?>u&n%M--VA)DI>}&a6|%tU z1b@OYySG5hxtp0=r_#HFkYTF#ZDt6&i-56wRO}8}P@|dg$RlPAe=_@)aFx|EuQI6N z`iEEQ@CkiDrv5G)z=O!47Cbr|-`(8QGwIk{1r{=Cf5v4t`|i|@KFv8A3%V5kTrjFF z4eJb>pIHrd$scuHFw?PXV!+dDoF9vo)+Ai>WJSrvCh;m#1SxRWQyzeggiIIZSZFRg zw@M-{H*4r+*G_rJN{{C0BJgM@W_Ub(xl@-BtBEly7XKi7D-a&|15 zXUn_snt6q^d^X`%J$^Js>D+HVq=S5t@e4zq#_diDv#TbN^lRZfrpo5y{o4WV<1(jH z1*vPld>+*D6=zFPriAw(vieC;mq;8EMRC6}qR?u~MxLPJRDLLZIBC<+avW$^N6-R4IaY1>7c7sMMGm;h1!7R^?2uU=_pa4uQ`PY@rJ znR^&(c^zmm+P`Ecye)eca>czNUv(_0o-HHCv}N?5g-B#gz2tN7FAcJ4P>sqmG0`PG z{lUOwQCl>z_VdRG4bjj`>yIWjT7oLb4gCnw9tI;=F=ee6cu+R-C^L>PUo!kk#88+& zrFwGj48n;00EpwC+O$snw^xggZCU60@JI92|8#3{{@Jbdw}{T4%Ky}?^`|oXzGhyy z$v-Inp#9XdwNL!sv-K~;pTkFgC1&kg89&tjvX&onKSh!DiQl70|3duPCiyGT1@eE1 ee=|+?iQi3=pNO0Xzn=tP|100$K4YWrfBykBn{(^{ literal 0 HcmV?d00001 diff --git a/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/extract.csv new file mode 100644 index 000000000..cdf91eb26 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/extract.csv @@ -0,0 +1,16 @@ +TRTID10,state,county,tract,placefp10,cbsa10,metdiv10,ccflag10,FAMILY90,FHH90,POP90SF3,POP90SF4,RUANC90,ITANC90,GEANC90,IRANC90,SCANC90,RUFB90,ITFB90,GEFB90,IRFB90,SCFB90,FB90,NAT90,N10IMM90,AG5UP90,OLANG90,LEP90,AG25UP90,HS90,COL90,CLF90,UNEMP90,DFLABF90,FLABF90,EMPCLF90,PROF90,MANUF90,SEMP90,AG16CV90,VET90,CNI16U90,DIS90,DPOV90,NPOV90,N65POV90,DFMPOV90,NFMPOV90,DWPOV90,NWPOV90,DBPOV90,NBPOV90,DNAPOV90,NNAPOV90,DHPOV90,NHPOV90,DAPOV90,NAPOV90,INCPC90,HU90SP,H30OLD90,OHU90SP,H10YRS90,DMULTI90,MULTI90,HINC90,HINCW90,HINCB90,HINCH90,HINCA90,HH90,HHW90,HHB90,HHH90,HHA90 +6027000800,CA,Inyo County,Census Tract 8,42580,13860,99999,0,947.0000232000,74.0000021900,3473.0000650000,3473.0000650000,37.0000004100,55.0000036300,622.0000106000,362.0000078000,85.0000038300,0.0000000000,2.0000001030,6.0000003420,2.0000000000,6.0000000000,114.0000027000,62.0000010600,34.0000009600,3275.0000600000,283.0000059000,58.0000006200,2628.0000430000,1752.0000340000,226.0000070000,1572.0000260000,128.0000016000,1429.0000340000,692.0000155000,1444.0000240000,269.0000081000,28.0000005800,118.0000038000,2840.0000470000,691.0000141000,2804.0000450000,524.0000085000,3419.0000630000,485.0000113000,114.0000012000,947.0000232000,352.0000117000,3019.0000460000,386.0000059000,15.0000000000,8.0000000000,258.0000152000,87.0000044100,376.0000049000,55.0000017100,34.0000018500,0.0000009240,11282.9890600000,2029.0000420000,765.0000165000,1510.0000340000,960.0000195000,2029.0000420000,164.0000004000,18802.8290100000,19238.2409400000, ,15749.9998600000,15000.0018300000,1520.0000330000,1406.0000270000,0.0000000000,135.0000015000,6.0000008560 +6061021322,CA,Placer County,Census Tract 213.22,62938,40900,99999,1,413.8015522000,36.9504473300,1437.7500650000,1437.7500650000,5.7998258990,51.4048475500,323.0300046000,123.0183659000,58.9943210200,0.0000000000,0.0069602750,12.2533182200,0.0000000000,0.0000000000,75.9738778900,37.8148188500,12.5473476100,1364.6021230000,168.7317567000,17.6124934500,929.3841615000,516.7910383000,76.2496196600,700.1886827000,28.5566857300,533.7939340000,287.1322093000,671.6319973000,103.8683825000,80.0058629500,126.2160115000,1089.1046050000,219.7375810000,1081.3416300000,146.6018800000,1429.0499390000,95.1913104400,16.2047431600,413.8015522000,225.9298114000,1319.3738320000,87.5246539400,7.5682855450,0.0000000000,26.4881058700,0.9588502050,148.2951801000,11.1419056600,24.8093601300,6.7078032490,15350.9551100000,532.3409888000,122.7573153000,504.1733706000,330.6022812000,532.3409888000,37.2781012100,37057.6325400000,37560.5137700000,20087.15489,39771.1722300000,42048.1950700000,492.8297963000,457.7224989000,6.7315500680,48.6243697900,0.0646896060 +6069000802,CA,San Benito County,Census Tract 8.02,99999,41940,99999,0,566.0214233000,12.1359653500,1951.9486760000,1951.9486760000,9.2233333590,158.2529907000,270.8747559000,162.6219330000,84.4663162200,0.0000000000,4.8543863300,0.0000000000,0.0000000000,2.9126317500,173.3015900000,55.8254394500,83.4954452500,1864.5697250000,333.9817810000,66.0196533200,1427.6749700000,640.2935181000,294.6612549000,935.9256520000,61.6507034300,741.7501831000,351.4575500000,874.2749478000,259.7096558000,121.3596573000,123.3014069000,1577.1900640000,384.4673767000,1498.5490080000,130.0975494000,1866.5114790000,66.9905319200,6.3107018470,566.0214233000,209.2240448000,1679.1321730000,49.5147399900,24.2719306900,0.0000000000,39.3205261200,0.0000000000,256.7970276000,18.9321060200,35.9224586500,0.0000000000,22612.9993700000,791.7503662000,190.2919312000,710.1967163000,505.8270264000,791.7503662000,5.3398246770,43749.9997700000,46405.6612800000, ,32115.3843600000,87500.0022700000,711.6530151000,653.8858032000,0.0000000000,89.8061447100,12.6214036900 +15001021010,HI,Hawaii County,Census Tract 210.10,12450,25900,99999,0,771.8966675000,86.6812591600,3130.9272040000,3130.9272040000,26.0043792700,45.0742569000,242.2741241000,138.6900177000,51.1419448900,0.0000000000,0.0000000000,4.3340630530,3.4672505860,0.0000000000,211.9356842000,116.5862961000,49.4083213800,2843.1454120000,355.8265686000,75.4126968400,1971.5653170000,1099.1184080000,332.4226379000,1311.4875030000,83.2140121500,1057.0780030000,588.1323853000,1228.2734910000,259.1769714000,74.5458831800,155.5928650000,2196.9366000000,371.4291992000,2196.9366000000,353.6595459000,3093.6542610000,698.2175903000,46.3744735700,771.8966675000,452.9096069000,1413.3379860000,390.9324951000,15.6026268000,2.1670315270,9.9683456420,7.3679075240,357.9936218000,99.6834487900,1573.2648930000,287.3483887000,10019.0003000000,1394.2680660000,256.5765381000,1128.5900880000,832.1401367000,1394.2680660000,12.1353769300,22281.0001400000,22568.4923400000,15000.00026,22678.5718600000,24593.3011400000,1116.8880620000,606.7688599000,4.3340630530,119.6201401000,455.5100403000 +15001021101,HI,Hawaii County,Census Tract 211.01,99999,25900,99999,0,490.9738464000,84.5782699600,2022.9801700000,2022.9801700000,10.4973030100,48.2875900300,143.0632324000,113.6707916000,53.6862030000,0.0000000000,0.0000000000,10.7972259500,2.3993835450,5.3986129760,280.4279480000,180.5536041000,118.4695587000,1845.4257950000,389.8998108000,63.8835830700,1185.8952700000,673.3269653000,161.6584625000,795.6955362000,69.2821960400,712.0170288000,351.8096008000,726.4133391000,128.9668579000,37.7902908300,146.9622345000,1389.5429400000,210.5458984000,1389.5429400000,255.8342590000,2009.1837150000,644.2344360000,38.6900596600,490.9738464000,303.5220032000,909.0664041000,289.4256287000,6.5983042720,0.0000000000,47.9876670800,34.1912155200,234.5397339000,111.5713272000,1009.2406620000,317.3184509000,8204.9999510000,822.6885986000,87.2775726300,681.1250000000,481.6762390000,822.6885986000,24.2937564800,18360.0001000000,18140.0966400000, ,13000.0004000000,19794.8707300000,669.4279785000,370.7047424000,0.0000000000,53.9861259500,273.8296509000 +15001021402,HI,Hawaii County,Census Tract 214.02,3850,25900,99999,0,816.2897568000,46.7089718600,2908.3037620000,2908.3037620000,9.3842508490,34.3563535200,85.1050386400,49.6372810000,42.1222216500,0.4366300400,0.0000000000,0.0507011120,0.0000000000,0.0000000000,154.3531404000,35.6412766000,100.6419504000,2718.7213800000,400.5848715000,42.0668509000,2029.9287820000,1120.4883020000,389.2195942000,1513.2753420000,90.2473753700,1164.6149540000,732.8806071000,1423.0279690000,398.0990586000,38.5432898100,148.3798876000,2264.6563310000,400.7801185000,2260.1444870000,204.3723986000,2896.0170940000,164.3064289000,42.8245659800,816.2897568000,369.2554536000,823.5514248000,42.8368821100,9.1951896550,0.2450553770,0.6089137490,0.0000000000,231.1957982000,25.7701943800,2046.6653000000,121.1737876000,15523.0524500000,1168.2462790000,424.7533337000,1042.7740610000,613.2432083000,1168.2462790000,233.6237568000,36432.4851700000,35023.9123700000,2500.00003,19986.2886800000,38377.4267300000,1038.3984520000,350.9512153000,0.0591512960,100.2060835000,672.1332075000 +15001021800,HI,Hawaii County,Census Tract 218,99999,25900,99999,0,1029.1142040000,113.6784696000,4267.4235680000,4267.4235680000,6.2395850530,53.9177365400,216.6516714000,128.9012836000,50.9871561900,6.0000000000,0.1063158070,0.1550576070,0.0000000000,5.0000000000,447.7201072000,220.2602014000,108.4859570000,3916.0639380000,732.8903613000,141.4261076000,2614.6461610000,1725.1835680000,326.8660370000,2059.8485030000,80.4418689800,1526.3987780000,994.8898024000,1979.4066340000,257.4833096000,26.3705349100,165.9507309000,3139.4967370000,446.5797471000,3112.4800730000,479.9428353000,4196.1618470000,304.9946221000,35.1246452800,1029.1142040000,599.1987248000,1353.4594670000,88.4248028000,12.0483253700,0.0000000000,29.1300475600,0.0200242130,796.1207250000,80.2921846500,2650.0290710000,198.5235648000,11456.1517100000,1564.6212330000,673.4738505000,1367.9637000000,704.9298707000,1564.6212330000,108.9002704000,31093.0763300000,34891.6831500000, ,36029.4523900000,28993.2036700000,1309.0228300000,454.9163605000,0.0000000000,162.9089448000,789.8354598000 +15003010201,HI,Honolulu County,Census Tract 102.01,12400,26180,99999,0,1066.0000000000,123.0000000000,4656.0000160000,4656.0000160000,27.0000000000,106.0000000000,304.0000000000,147.0000000000,83.0000000000,0.0000000000,0.0000000000,20.0000000000,0.0000000000,0.0000000000,309.0000000000,104.0000000000,102.0000000000,4143.0000140000,719.0000000000,44.0000000000,2719.0000090000,1527.0000000000,528.0000000000,2131.0000070000,117.0000000000,1555.0000000000,895.0000000000,2014.0000070000,545.0000000000,67.0000000000,127.0000000000,3303.0000110000,535.0000000000,3267.0000110000,453.0000000000,4587.0000150000,729.0000000000,52.0000000000,1066.0000000000,633.0000000000,1662.0000060000,204.0000000000,42.0000000000,0.0000000000,43.0000000000,28.0000000000,261.0000000000,18.0000000000,2743.0000000000,497.0000000000,14178.0000500000,1876.0000000000,634.0000000000,1494.0000000000,1037.0000000000,1876.0000000000,447.0000000000,35151.0001200000,36678.3218000000,30000.0001,44583.3334800000,36453.4884900000,1462.0000000000,656.0000000000,9.0000000000,23.0000000000,763.0000000000 +15007040603,HI,Kauai County,Census Tract 406.03,39200,28180,99999,0,588.9533691000,14.8749074900,2288.4115600000,2288.4115600000,4.1835675240,41.8356781000,141.7764587000,88.7846069300,45.5544052100,0.0000000000,4.1835675240,5.1132493020,0.0000000000,0.0000000000,315.6269531000,189.6550751000,98.0814209000,2138.7328030000,491.8016357000,87.8549194300,1520.0296170000,716.3197632000,270.5373840000,1197.8949000000,18.1287937200,877.6195679000,518.2975464000,1179.7661060000,306.7949829000,46.4840850800,99.0111007700,1745.9422750000,233.3501129000,1714.7979380000,137.1280518000,2260.0562680000,153.8623199000,23.7068843800,588.9533691000,321.6698608000,921.7794281000,104.1243515000,0.0000000000,0.0000000000,5.1132493020,0.0000000000,238.9282074000,29.2849750500,1265.2968750000,33.0037002600,14882.0000400000,836.7135620000,238.4633636000,753.0421753000,469.9541016000,836.7135620000,116.6750565000,38942.0014900000,37622.3762200000, ,34318.1815500000,38219.1778500000,761.4093018000,345.8416138000,0.0000000000,55.3160629300,393.2553711000 +15007040604,HI,Kauai County,Census Tract 406.04,57800,28180,99999,0,678.0467656000,17.1250984800,2634.5889580000,2634.5889580000,4.8164320010,48.1643366100,163.2235751000,102.2154066000,52.4456040000,0.0000000000,4.8164319990,5.8867523410,0.0000000000,0.0000000000,363.3731129000,218.3449656000,112.9185931000,2462.2676790000,566.1984698000,101.1450919000,1749.9707180000,824.6804260000,311.4626748000,1379.1053670000,20.8712132900,1010.3806350000,596.7025865000,1358.2341530000,353.2050822000,53.5159359900,113.9889124000,2010.0581130000,268.6499275000,1974.2024500000,157.8719865000,2601.9442500000,177.1377060000,27.2931263100,678.0467656000,370.3301829000,1061.2207750000,119.8756585000,0.0000014800,0.0000009040,5.8867517830,0.0000000055,275.0718744000,33.7150284500,1456.7034330000,37.9963147800,14881.9998700000,963.2866173000,274.5367055000,866.9579964000,541.0460023000,963.2866173000,134.3249464000,38942.0019300000,37622.3794400000,2708.021126,34318.1816500000,38219.1788500000,876.5908071000,398.1584626000,0.0000004130,63.6839504200,452.7447185000 +15007040700,HI,Kauai County,Census Tract 407,24950,28180,99999,0,1639.5124120000,84.3661893400,6497.4160920000,6497.4160920000,0.0261385850,179.0821346000,411.3031126000,164.1830575000,112.0709766000,0.0000000000,0.0000000000,19.9999980900,0.0000000000,0.0000000000,803.9005321000,495.4262798000,170.9395295000,6045.6744670000,1284.0984150000,230.2267010000,4202.3582790000,2302.9328280000,716.3603780000,3341.4274500000,85.2877002200,2471.2365200000,1616.8583390000,3256.1397500000,792.3786741000,256.5087146000,160.2696385000,4873.0529120000,677.1858005000,4858.6607240000,465.8659478000,6483.8447060000,315.4761577000,130.1721194000,1639.5124120000,903.8070090000,2542.4494830000,121.2988364000,18.0560093400,10.9999990500,13.2091077300,0.0672135060,809.4964124000,19.4300633300,3747.7267120000,182.9719543000,14847.6424500000,2182.2980030000,656.0313461000,2089.1407680000,1264.6352900000,2182.2980030000,127.4408560000,42756.8743900000,41907.5748200000,2708.021223,33400.6344500000,42210.6869300000,2068.2044520000,930.0281326000,5.0261381080,162.4411862000,1090.9635380000 +15009030100,HI,Maui County,Census Tract 301,11350,27980,99999,0,383.3068000000,27.2305791200,1910.5015780000,1910.5015780000,6.2592231110,27.4607778700,91.6621148600,27.1932371400,35.6747865500,0.0000000000,0.0035966930,0.0898007360,0.0000000000,8.1204749640,37.2918099000,6.5858333300,8.6301826290,1675.7861590000,177.6883274000,0.2490721380,1213.4786900000,793.3024273000,173.2832380000,864.0971374000,12.1702029000,576.9324621000,348.0594975000,851.9269343000,157.0642045000,28.2470664600,176.1750701000,1347.1787240000,314.6769609000,1347.1232320000,153.7392875000,1890.3938120000,392.8893720000,49.0661406900,383.3068000000,238.4715474000,807.4789838000,151.7785114000,0.0395477110,0.0000000000,20.0771960800,19.9998645800,82.6743149300,0.0311889900,1052.6142140000,211.1110742000,10415.9855900000,772.7004868000,261.4311255000,595.1029364000,362.3008839000,772.7004868000,23.2643179700,26030.6739600000,26529.6239500000,62499.99972,10011.7479600000,27536.6825200000,634.0477989000,310.2452140000,0.0041105070,14.1661638200,316.7386816000 +15009030201,HI,Maui County,Census Tract 302.01,99999,27980,99999,0,370.6344604000,44.2015914900,1578.6282440000,1578.6282440000,14.5508346600,25.8071403500,170.2173004000,68.9105529800,56.8306160000,0.0000000000,0.0000000000,1.9218082430,0.0000000000,0.0000000000,74.4014358500,42.8288688700,32.6707420300,1447.3961910000,143.5865326000,10.1581296900,1008.1257240000,471.1175842000,209.7516479000,834.6138888000,21.9635238600,543.5972290000,359.1036072000,812.6503654000,172.4136658000,95.5413284300,161.4319000000,1135.7887030000,143.0374451000,1135.7887030000,111.7394257000,1568.4701140000,158.1373749000,6.8636012080,370.6344604000,243.5205688000,939.4897130000,125.1920853000,3.0199844840,0.0000000000,20.3162593800,8.5108652110,190.2590179000,18.6689949000,572.1497803000,21.1398906700,13734.0000100000,569.6788940000,110.0921631000,526.5755005000,365.9671936000,569.6788940000,19.2180824300,36271.9983800000,36752.7165200000,29999.99935,38274.6483700000,41103.4484300000,537.2827148000,379.9689636000,1.3727202420,52.9869995100,135.0756683000 +15009030402,HI,Maui County,Census Tract 304.02,65900,27980,99999,0,1576.0000000000,169.0000000000,6064.0000020000,6064.0000020000,14.0000000000,21.0000000000,388.0000000000,130.0000000000,116.0000000000,0.0000000000,6.0000000000,12.0000000000,0.0000000000,0.0000000000,384.0000000000,204.0000000000,142.0000000000,5577.0000020000,733.0000000000,120.0000000000,3752.0000010000,1692.0000000000,664.0000000000,3218.0000010000,94.0000000000,2147.0000000000,1431.0000000000,3124.0000010000,752.0000000000,197.0000000000,253.0000000000,4402.0000010000,742.0000000000,4402.0000010000,325.0000000000,6036.0000020000,397.0000000000,22.0000000000,1576.0000000000,970.0000000000,2603.0000010000,182.0000000000,0.0000000000,0.0000000000,65.0000000000,0.0000000000,496.0000000000,63.0000000000,3305.0000000000,215.0000000000,16362.0000100000,1995.0000000000,159.0000000000,1914.0000000000,1194.0000000000,1995.0000000000,22.0000000000,43032.0000100000,41381.5789600000, ,33000.0000100000,43802.6315900000,1919.0000000000,922.0000000000,0.0000000000,152.0000000000,973.0000000000 +15009030800,HI,Maui County,Census Tract 308,75950,27980,99999,0,566.0331867000,29.0024671100,2380.1187810000,2380.1187810000,17.9996613400,10.0023785700,58.0117214400,83.0014279100,6.0035655440,0.0000246000,0.0000492000,0.0000246000,0.0000000000,0.0000871000,275.9955389000,160.9963087000,63.0011419100,2200.1173260000,563.9967822000,125.9982522000,1366.1198620000,676.0562812000,278.0319260000,1075.1001440000,14.0013287000,774.0661832000,485.0454395000,1061.0988150000,250.0390396000,61.0059311800,72.0103169500,1604.1293560000,165.0293852000,1604.1262590000,126.0096916000,2373.1152960000,158.9950915000,16.9988727100,566.0331867000,349.0062412000,543.0424034000,75.9953928000,19.9996131500,0.0000000000,0.0005046810,0.0000416000,204.9941585000,6.0003820650,1744.0754940000,82.9987536900,13742.8599100000,725.0676672000,157.0406731000,678.0611339000,390.0359396000,725.0676672000,15.0405894400,43750.2909800000,37947.0558900000,56651.51814,40624.8900800000,47291.6931700000,623.0686622000,167.0220174000,0.0003813110,27.9999225900,438.0467044000 diff --git a/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/output.csv new file mode 100644 index 000000000..ec83b70e0 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Individuals in Poverty (percent) (1990),Individuals in Poverty (percent) (2000),Individuals in Poverty (percent) (2010),Persistent Poverty Census Tract +06027000800,0.1418543441,0.1857745998,0.1475304682,False +06061021322,0.0666116053,0.0607935935,0.0947959404,False +06069000802,0.0358907688,0.0632887874,0.0613686534,False +15001021010,0.2256934781,0.2156182598,0.3112706837,True +15001021101,0.3206448625,0.2732381146,0.2703479094,True +15001021402,0.0567353105,0.1106101497,0.0918238994,False +15001021800,0.0726841893,0.1204888825,0.1765701710,False +15003010201,0.1589274030,0.1844549763,0.1866137266,False +15007040603,0.0680789775,0.1103461130,0.0346287033,False +15007040604,0.0680789782,0.1103461036,0.1002400960,False +15007040700,0.0486557239,0.0635433492,0.1525797252,False +15009030100,0.2078346689,0.1729195461,0.0979676915,False +15009030201,0.1008226892,0.1610559432,0.1041162228,False +15009030402,0.0657720344,0.0643312931,0.0270912548,False +15009030800,0.0669984690,0.0322814539,0.0189065700,False diff --git a/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/transform.csv new file mode 100644 index 000000000..9fdb12388 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/data/transform.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,state_x,county_x,tract_x,placefp10_x,cbsa10_x,metdiv10_x,ccflag10_x,FAMILY90,FHH90,POP90SF3,POP90SF4,RUANC90,ITANC90,GEANC90,IRANC90,SCANC90,RUFB90,ITFB90,GEFB90,IRFB90,SCFB90,FB90,NAT90,N10IMM90,AG5UP90,OLANG90,LEP90,AG25UP90,HS90,COL90,CLF90,UNEMP90,DFLABF90,FLABF90,EMPCLF90,PROF90,MANUF90,SEMP90,AG16CV90,VET90,CNI16U90,DIS90,DPOV90,NPOV90,N65POV90,DFMPOV90,NFMPOV90,DWPOV90,NWPOV90,DBPOV90,NBPOV90,DNAPOV90,NNAPOV90,DHPOV90,NHPOV90,DAPOV90,NAPOV90,INCPC90,HU90SP,H30OLD90,OHU90SP,H10YRS90,DMULTI90,MULTI90,HINC90,HINCW90,HINCB90,HINCH90,HINCA90,HH90,HHW90,HHB90,HHH90,HHA90,state_y,county_y,tract_y,placefp10_y,cbsa10_y,metdiv10_y,ccflag10_y,POP00SF3,RUANC00,ITANC00,GEANC00,IRANC00,SCANC00,RUFB00,ITFB00,GEFB00,IRFB00,SCFB00,FB00,NAT00,N10IMM00,AG5UP00,OLANG00,LEP00,AG25UP00,HS00,COL00,AG15UP00,Mar-00,WDS00,CLF00,UNEMP00,DFLABF00,FLABF00,EMPCLF00,PROF00,MANUF00,SEMP00,AG18CV00,VET00,CNI16U00,DIS00,DPOV00,NPOV00,N65POV00,DFMPOV00,NFMPOV00,DWPOV00,NWPOV00,DBPOV00,NBPOV00,DNAPOV00,NNAPOV00,DHPOV00,NHPOV00,DAPOV00,NAPOV00,INCPC00,HU00SP,H30OLD00,OHU00SP,H10YRS00,DMULTI00,MULTI00,HINC00,HINCW00,HINCB00,HINCH00,HINCA00,MHMVAL00,MRENT00,HH00,HHW00,HHB00,HHH00,HHA00,statea,countya,tracta,pnhwht12,pnhblk12,phisp12,pntv12,pasian12,phaw12,pindia12,pchina12,pfilip12,pjapan12,pkorea12,pviet12,p15wht12,p65wht12,p15blk12,p65blk12,p15hsp12,p65hsp12,p15ntv12,p65ntv12,p15asn12,p65asn12,pmex12,pcuban12,ppr12,pruanc12,pitanc12,pgeanc12,piranc12,pscanc12,pfb12,pnat12,p10imm12,prufb12,pitfb12,pgefb12,pirfb12,pscfb12,polang12,plep12,phs12,pcol12,punemp12,pflabf12,pprof12,pmanuf12,psemp12,pvet12,p65pov12,ppov12,pwpov12,pnapov12,pfmpov12,pbpov12,phpov12,papov12,pvac12,pown12,pmulti12,p30old12,p18und12,p60up12,p75up12,pmar12,pwds12,pfhh12,p10yrs12,ageblk12,agentv12,agewht12,agehsp12,india12,filip12,japan12,korea12,viet12,pop12,nhwht12,nhblk12,ntv12,hisp12,asian12,haw12,china12,a15wht12,a65wht12,a15blk12,a65blk12,a15hsp12,a65hsp12,a15ntv12,a65ntv12,ageasn12,a15asn12,a65asn12,mex12,pr12,cuban12,geanc12,iranc12,itanc12,ruanc12,fb12,nat12,itfb12,rufb12,ag5up12,irfb12,gefb12,scanc12,n10imm12,olang12,lep12,scfb12,ag25up12,dfmpov12,hh12,hinc12,hincb12,hincw12,hinch12,incpc12,ag18cv12,vet12,empclf12,dpov12,npov12,dbpov12,nbpov12,dnapov12,nnapov12,dwpov12,nwpov12,dhpov12,nhpov12,hhb12,hhw12,hhh12,hs12,col12,clf12,unemp12,dflabf12,flabf12,prof12,manuf12,semp12,hha12,hinca12,n65pov12,nfmpov12,napov12,dapov12,family12,hu12,vac12,ohu12,own12,rent12,dmulti12,mrent12,mhmval12,multi12,h30old12,h10yrs12,a18und12,a60up12,a75up12,ag15up12,12-Mar,wds12,fhh12,Individuals in Poverty (percent) (1990),Individuals in Poverty (percent) (2000),Individuals in Poverty (percent) (2010),Persistent Poverty Census Tract +06027000800,CA,Inyo County,Census Tract 8,42580,13860,99999,0,947.0000232000,74.0000021900,3473.0000650000,3473.0000650000,37.0000004100,55.0000036300,622.0000106000,362.0000078000,85.0000038300,0.0000000000,2.0000001030,6.0000003420,2.0000000000,6.0000000000,114.0000027000,62.0000010600,34.0000009600,3275.0000600000,283.0000059000,58.0000006200,2628.0000430000,1752.0000340000,226.0000070000,1572.0000260000,128.0000016000,1429.0000340000,692.0000155000,1444.0000240000,269.0000081000,28.0000005800,118.0000038000,2840.0000470000,691.0000141000,2804.0000450000,524.0000085000,3419.0000630000,485.0000113000,114.0000012000,947.0000232000,352.0000117000,3019.0000460000,386.0000059000,15.0000000000,8.0000000000,258.0000152000,87.0000044100,376.0000049000,55.0000017100,34.0000018500,0.0000009240,11282.9890600000,2029.0000420000,765.0000165000,1510.0000340000,960.0000195000,2029.0000420000,164.0000004000,18802.8290100000,19238.2409400000, ,15749.9998600000,15000.0018300000,1520.0000330000,1406.0000270000,0.0000000000,135.0000015000,6.0000008560,CA,Inyo County,Census Tract 8,42580,13860,99999,0,3117.0000890000,26.0000002400,47.0000032500,431.0000158000,294.0000076000,74.0000032200,0.0000000000,0.0000000000,8.0000003420,2.0000000000,0.0000002050,334.0000029000,79.0000007500,191.0000008000,2944.0000850000,503.0000064000,133.0000008000,2216.0000650000,1187.0000340000,363.0000082000,2558.0000730000,1369.0000420000,597.0000171000,1408.0000410000,108.0000034000,1275.0000380000,657.0000202000,1300.0000380000,314.0000119000,76.0000009200,129.0000042000,2410.0000690000,460.0000123000,1930.0000520000,382.0000085000,3079.0000870000,572.0000091000,56.0000019200,820.0000247000,94.0000010300,2107.0000620000,313.0000046000,3.0000001370,3.0000001370,242.0000129000,88.0000031100,629.0000075000,168.0000011000,22.0000008600,0.0000000000,16938.9166400000,1931.0000460000,1129.0000250000,1426.0000380000,965.0000213000,1931.0000460000,149.0000013000,28218.7649100000,28242.2954200000, ,31174.2175600000,33787.87882,69875.9413600000,313.8598744000,1411.0000370000,1084.0000290000,0.0000000000,184.0000021000,11.0000002700,6,27,800,66.5400009200,0.8999999760,20.4699993100,7.3000001910,2.0699999330,0.0000000000,0.0000000000,0.3100000020,1.6100000140,0.1500000060,0.0000000000,0.0000000000,13.2399997700,24.0200004600,55.1699981700,0.0000000000,31.4200000800,4.8299999240,20.9899997700,15.6499996200,32.8400001500,14.9300003100,17.9699993100,0.7400000100,0.5899999740,0.0000000000,1.4500000480,14.5600004200,12.0299997300,3.2799999710,7.9200000760,2.4400000570,3.1500000950,0.0000000000,0.0000000000,0.1500000060,0.0000000000,0.0000000000,10.9899997700,2.9100000860,48.5699996900,15.5799999200,9.0500001910,55.3100013700,25.6700000800,8.8999996190,10.3100004200,11.5600004200,3.1800000670,14.7500000000,13.4399995800,29.0100002300,5.7600002290,0.0000000000,16.4899997700,0.0000000000,28.1800003100,55.1599998500,8.0000000000,69.1699981700,22.9400005300,23.5000000000,9.2799997330,45.7099990800,24.7800006900,16.3600006100,64.4599990800,29,262,2152,662,0,52,5,0,0,3234,2152,29,236,662,67,0,10,285,517,16,0,208,32,55,41,67,22,10,581,19,24,471,389,47,0,256,79,0,0,3020,0,5,106,102,332,88,0,2304,764,1463,35995,-999,35750,36250,21842,2492,288,1348,3118,460,29,0,262,76,2053,276,655,108,10,1093,215,1119,359,1459,132,1206,667,346,120,139,35,26458.0000000000,99,44,0,57,764,2037,574,1463,807,656,2037,546,139000,163,1409,943,742,760,300,2623,1199,650,125,0.1418543441,0.1857745998,0.1475304682,False +06061021322,CA,Placer County,Census Tract 213.22,62938,40900,99999,1,413.8015522000,36.9504473300,1437.7500650000,1437.7500650000,5.7998258990,51.4048475500,323.0300046000,123.0183659000,58.9943210200,0.0000000000,0.0069602750,12.2533182200,0.0000000000,0.0000000000,75.9738778900,37.8148188500,12.5473476100,1364.6021230000,168.7317567000,17.6124934500,929.3841615000,516.7910383000,76.2496196600,700.1886827000,28.5566857300,533.7939340000,287.1322093000,671.6319973000,103.8683825000,80.0058629500,126.2160115000,1089.1046050000,219.7375810000,1081.3416300000,146.6018800000,1429.0499390000,95.1913104400,16.2047431600,413.8015522000,225.9298114000,1319.3738320000,87.5246539400,7.5682855450,0.0000000000,26.4881058700,0.9588502050,148.2951801000,11.1419056600,24.8093601300,6.7078032490,15350.9551100000,532.3409888000,122.7573153000,504.1733706000,330.6022812000,532.3409888000,37.2781012100,37057.6325400000,37560.5137700000,20087.15489,39771.1722300000,42048.1950700000,492.8297963000,457.7224989000,6.7315500680,48.6243697900,0.0646896060,CA,Placer County,Census Tract 213.22,62938,40900,99999,1,1540.0000810000,10.6516208600,76.2431793200,249.4721680000,91.3796920800,28.0305805200,0.0000000000,0.0000000000,6.7273392680,0.0000000000,0.0000000000,75.6825637800,14.0152902600,24.1062984500,1426.1959230000,149.6833038000,26.9093570700,1021.4343260000,398.5948486000,110.4404831000,1182.3298340000,848.7659912000,123.8951645000,778.6895142000,31.3942489600,550.5205688000,334.1245117000,747.2952881000,228.7295380000,90.2584686300,126.1376114000,1113.9353030000,209.6687469000,1009.1008910000,222.5628052000,1540.0000810000,93.6221389800,6.7273392680,462.5045776000,9.5303974150,1286.6036380000,65.0309448200,20.7426300000,0.0000000000,9.5303974150,1.1212232110,167.6228638000,22.4244651800,0.0000000000,0.0000000000,23335.9993700000,572.3844604000,165.9410400000,546.5963135000,365.5187683000,572.3844604000,2.2424464230,56432.0022500000,55077.9998500000,76598.99674,59249.9976100000, ,172800.0014000000,763.9999878000,558.9297485000,490.5351563000,11.2122325900,44.2883186300,0.0000000000,6,61,21322,67.5899963400,2.2000000480,8.9300003050,0.5699999930,15.1099996600,0.0599999990,2.9700000290,1.2999999520,9.1999998090,0.1299999950,1.0199999810,0.2800000010,22.3700008400,12.1599998500,25.4899997700,4.4099998470,48.7900009200,8.3299999240,75.4700012200,0.0000000000,19.0100002300,5.1799998280,7.6900000570,0.0000000000,0.1299999950,2.8099999430,5.3800001140,6.2199997900,6.4299998280,3.5699999330,18.3299999200,8.6599998470,11.0299997300,0.1899999980,0.0000000000,0.3499999940,0.0000000000,0.0900000040,24.3600006100,4.2500000000,21.3999996200,40.7400016800,9.2399997710,56.3199996900,49.7299995400,4.9200000760,9.5900001530,11.2899999600,0.0000000000,9.4799995420,9.3500003810,0.0000000000,7.5599999430,40.2000007600,10.6300001100,2.2699999810,6.1399998660,81.3499984700,8.9200000760,11.0299997300,29.7399997700,14.6099996600,3.5000000000,69.6999969500,12.6800003100,9.2799997330,84.7099990800,204,53,6268,828,275,853,12,95,26,9274,6268,204,53,828,1401,6,121,1402,762,52,9,404,69,40,0,1410,268,73,713,12,0,577,596,499,261,1700,803,0,18,8173,0,32,331,1023,1991,347,8,6004,2381,3029,92617,37021,84167,67404,32077,6499,734,3859,9262,878,204,82,53,0,6256,585,828,88,108,2324,173,1285,2446,4187,387,3386,1907,1919,190,370,343,125840.0938000000,0,180,32,1410,2381,3227,198,3029,2464,565,3227,972,357100,288,356,2566,2758,1355,325,6829,4760,866,221,0.0666116053,0.0607935935,0.0947959404,False +06069000802,CA,San Benito County,Census Tract 8.02,99999,41940,99999,0,566.0214233000,12.1359653500,1951.9486760000,1951.9486760000,9.2233333590,158.2529907000,270.8747559000,162.6219330000,84.4663162200,0.0000000000,4.8543863300,0.0000000000,0.0000000000,2.9126317500,173.3015900000,55.8254394500,83.4954452500,1864.5697250000,333.9817810000,66.0196533200,1427.6749700000,640.2935181000,294.6612549000,935.9256520000,61.6507034300,741.7501831000,351.4575500000,874.2749478000,259.7096558000,121.3596573000,123.3014069000,1577.1900640000,384.4673767000,1498.5490080000,130.0975494000,1866.5114790000,66.9905319200,6.3107018470,566.0214233000,209.2240448000,1679.1321730000,49.5147399900,24.2719306900,0.0000000000,39.3205261200,0.0000000000,256.7970276000,18.9321060200,35.9224586500,0.0000000000,22612.9993700000,791.7503662000,190.2919312000,710.1967163000,505.8270264000,791.7503662000,5.3398246770,43749.9997700000,46405.6612800000, ,32115.3843600000,87500.0022700000,711.6530151000,653.8858032000,0.0000000000,89.8061447100,12.6214036900,CA,San Benito County,Census Tract 8.02,99999,41940,99999,0,2657.7764180000,6.3107018470,240.2921143000,224.2726440000,208.2531586000,73.3012313800,2.4271931650,0.0000000000,7.2815790180,4.8543863300,0.0000000000,252.4280853000,110.6800079000,82.0391235400,2500.4943850000,363.5935364000,83.4954452500,1862.6279300000,609.7108765000,485.9240417000,2128.6484380000,1458.2575680000,298.5447388000,1287.3831790000,50.4856147800,1056.7998050000,536.8950806000,1236.8975830000,491.2638855000,173.7870178000,257.7679138000,2013.1138920000,316.0205383000,1667.9670410000,258.7387695000,2615.5432580000,165.5345612000,15.0485973400,757.7696533000,20.3884220100,1988.8420410000,95.1459655800,12.6214036900,0.0000000000,23.3010540000,1.4563158750,508.2542419000,60.1943893400,39.8059654200,5.8252635000,31026.0005900000,1050.4891360000,239.3212433000,971.8480835000,678.1577148000,1050.4891360000,21.3592987100,70101.9979700000,71048.0004500000,150900.9987,56500.0015600000,73750.00078,403799.9956000000,850.0000062000,970.8772583000,796.1193237000,6.7961406710,127.1849136000,14.0777196900,6,69,802,63.1399993900,0.3499999940,29.7999992400,0.2599999900,0.4799999890,0.0000000000,0.0000000000,0.0900000040,0.3100000020,0.1299999950,0.0000000000,0.0000000000,16.4899997700,17.1800003100,0.0000000000,37.5000000000,18.8600006100,8.6300001140,0.0000000000,0.0000000000,0.0000000000,0.0000000000,27.2299995400,0.0000000000,0.0000000000,0.1299999950,6.1900000570,13.6800003100,8.6300001140,3.0099999900,12.8999996200,2.7899999620,2.0899999140,0.0000000000,0.0000000000,0.0000000000,0.0900000040,0.0000000000,22.0400009200,9.3000001910,42.0299987800,20.2500000000,12.1599998500,55.5699996900,24.9500007600,9.7700004580,21.6599998500,8.0000000000,0.8399999740,6.1399998660,5.3299999240,15.3800001100,2.7599999900,25.0000000000,8.6999998090,16.6700000800,16.3400001500,74.9400024400,0.0000000000,47.1699981700,25.3999996200,22.2199993100,5.9699997900,65.1399993900,14.8599996600,5.0399999620,50.3699989300,8,13,1449,684,0,7,3,0,0,2295,1449,8,6,684,11,0,2,239,249,0,3,129,59,0,0,12,0,0,625,0,0,314,198,142,3,296,64,0,0,2151,2,0,69,48,474,200,0,1580,615,814,78333,-999,86553,44009,33400,1712,137,1034,2265,139,8,2,13,2,1425,76,678,59,3,605,195,664,320,1151,140,916,509,258,101,224,0,-999.0000000000,19,17,2,12,615,973,159,814,610,204,973,1135,521600,0,459,410,583,510,137,1830,1192,272,31,0.0358907688,0.0632887874,0.0613686534,False +15001021010,HI,Hawaii County,Census Tract 210.10,12450,25900,99999,0,771.8966675000,86.6812591600,3130.9272040000,3130.9272040000,26.0043792700,45.0742569000,242.2741241000,138.6900177000,51.1419448900,0.0000000000,0.0000000000,4.3340630530,3.4672505860,0.0000000000,211.9356842000,116.5862961000,49.4083213800,2843.1454120000,355.8265686000,75.4126968400,1971.5653170000,1099.1184080000,332.4226379000,1311.4875030000,83.2140121500,1057.0780030000,588.1323853000,1228.2734910000,259.1769714000,74.5458831800,155.5928650000,2196.9366000000,371.4291992000,2196.9366000000,353.6595459000,3093.6542610000,698.2175903000,46.3744735700,771.8966675000,452.9096069000,1413.3379860000,390.9324951000,15.6026268000,2.1670315270,9.9683456420,7.3679075240,357.9936218000,99.6834487900,1573.2648930000,287.3483887000,10019.0003000000,1394.2680660000,256.5765381000,1128.5900880000,832.1401367000,1394.2680660000,12.1353769300,22281.0001400000,22568.4923400000,15000.00026,22678.5718600000,24593.3011400000,1116.8880620000,606.7688599000,4.3340630530,119.6201401000,455.5100403000,HI,Hawaii County,Census Tract 210.10,12450,25900,99999,0,4751.0001150000,12.1353769300,56.3428230300,321.1540833000,149.0917816000,93.1823577900,0.0000000000,0.0000000000,3.4672505860,0.0000000000,0.0000000000,413.9030457000,235.7730408000,144.7577057000,4499.6245120000,796.1674194000,91.8821411100,3127.8935550000,1404.2364500000,636.2404785000,3694.7888180000,1919.1231690000,733.7568970000,2136.6931150000,183.3308716000,1747.0609130000,1036.2745360000,1953.3623050000,659.2109985000,107.9181747000,421.2709351000,3432.1447750000,563.4282227000,3017.3747560000,751.5265503000,4623.1452500000,996.8345337000,29.9050369300,1164.9962160000,161.6605530000,1540.7595210000,302.0841980000,13.4355964700,0.0000000000,16.0360336300,3.9006569390,531.7895508000,219.7369995000,1502.1862790000,195.8996582000,15289.0003700000,2121.5239260000,377.4969177000,1747.4942630000,1156.3281250000,2121.5239260000,34.6725044300,31499.9995000000,31948.9999800000,28750,18512.0010300000,35000.00137,107099.9963000000,511.9999843000,1753.5620120000,783.5986328000,3.4672505860,133.9225464000,530.4893188000,15,1,21010,35.2299995400,2.0199999810,21.8299999200,0.8600000140,21.4599990800,15.4799995400,0.0000000000,0.8000000120,7.3600001340,1.6399999860,0.0799999980,0.4499999880,3.0699999330,15.8599996600,64.1200027500,0.0000000000,38.2599983200,7.2100000380,32.2599983200,16.1299991600,24.3500003800,8.2799997330,1.9299999480,0.0000000000,14.6300001100,0.9399999980,2.8900001050,5.9899997710,4.7699999810,2.6900000570,5.2500000000,3.3800001140,1.3999999760,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,10.2299995400,0.4399999980,39.6599998500,19.5499992400,12.9399995800,61.9799995400,31.4799995400,5.4899997710,18.2099990800,10.5600004200,1.5000000000,31.1299991600,21.7600002300,64.5199966400,17.5499992400,72.5199966400,51.4900016800,33.1699981700,25.0900001500,70.6600036600,1.9800000190,20.9099998500,25.1800003100,19.1599998500,4.5399999620,45.7000007600,22.7600002300,19.0100002300,63.7400016800,131,62,2282,1414,0,477,106,5,29,6478,2282,131,56,1414,1390,1003,52,70,362,84,0,541,102,20,10,1848,450,153,125,948,0,388,309,187,61,340,219,0,0,6178,0,0,174,91,632,27,0,4511,1510,2457,36901,102083,34554,34167,18671,4847,512,2570,6406,1994,131,95,62,40,2270,494,1408,725,15,1237,408,1789,882,2929,379,2470,1531,809,141,468,594,37287.7929700000,96,265,609,1836,1510,3280,823,2457,1736,721,3280,737,195800,65,686,1566,1631,1241,294,5109,2335,1163,287,0.2256934781,0.2156182598,0.3112706837,True +15001021101,HI,Hawaii County,Census Tract 211.01,99999,25900,99999,0,490.9738464000,84.5782699600,2022.9801700000,2022.9801700000,10.4973030100,48.2875900300,143.0632324000,113.6707916000,53.6862030000,0.0000000000,0.0000000000,10.7972259500,2.3993835450,5.3986129760,280.4279480000,180.5536041000,118.4695587000,1845.4257950000,389.8998108000,63.8835830700,1185.8952700000,673.3269653000,161.6584625000,795.6955362000,69.2821960400,712.0170288000,351.8096008000,726.4133391000,128.9668579000,37.7902908300,146.9622345000,1389.5429400000,210.5458984000,1389.5429400000,255.8342590000,2009.1837150000,644.2344360000,38.6900596600,490.9738464000,303.5220032000,909.0664041000,289.4256287000,6.5983042720,0.0000000000,47.9876670800,34.1912155200,234.5397339000,111.5713272000,1009.2406620000,317.3184509000,8204.9999510000,822.6885986000,87.2775726300,681.1250000000,481.6762390000,822.6885986000,24.2937564800,18360.0001000000,18140.0966400000, ,13000.0004000000,19794.8707300000,669.4279785000,370.7047424000,0.0000000000,53.9861259500,273.8296509000,HI,Hawaii County,Census Tract 211.01,99999,25900,99999,0,2578.4375420000,21.8943748500,50.0871315000,155.6600037000,101.0740356000,16.7956848100,0.0000000000,0.0000000000,10.4973030100,0.0000000000,0.0000000000,257.9337158000,148.7617798000,76.4803466800,2405.3820800000,462.1812439000,77.0802002000,1641.7781980000,845.4827881000,278.3284912000,1978.5916750000,962.4526978000,400.6970520000,1090.8197020000,182.3531494000,957.6539307000,537.1619873000,908.4666138000,233.0401306000,20.6946830700,163.1580811000,1836.7281490000,312.2197876000,1648.6763920000,428.8898010000,2561.9417800000,700.0201416000,36.8905220000,622.6400146000,108.5721054000,908.7665405000,230.3408203000,11.0971489000,11.0971489000,11.0971489000,2.3993835450,310.1203308000,142.1634827000,821.7888794000,188.0516815000,12554.0002000000,1113.9138180000,144.8627777000,934.2599487000,647.2337036000,1113.9138180000,35.6908302300,27919.9990900000,24655.0000000000,8333,18233.0009200000,35092.59367,86700.0020800000,501.0000064000,933.3602295000,460.6816406000,5.9984588620,75.2806549100,248.9360352000,15,1,21101,54.7400016800,0.1299999950,13.7899999600,0.2599999900,17.4899997700,4.2800002100,0.0000000000,1.4700000290,7.4400000570,1.3999999760,0.1299999950,0.0000000000,7.7600002290,27.3500003800,80.0000000000,0.0000000000,32.1800003100,14.8100004200,0.0000000000,0.0000000000,9.0900001530,16.7600002300,2.2699999810,0.0000000000,5.3299999240,0.6700000170,2.9700000290,12.7399997700,12.1899995800,2.9400000570,15.1300001100,9.1599998470,1.3099999430,0.0000000000,0.0000000000,2.7100000380,0.0000000000,0.0000000000,9.7299995420,2.0399999620,29.2900009200,32.0200004600,10.3299999200,42.8600006100,34.1899986300,3.1099998950,38.2799987800,15.5900001500,2.1099998950,27.0300006900,24.8999996200,68.0000000000,11.6700000800,0.0000000000,30.5599994700,23.7099990800,27.2399997700,74.3499984700,0.0000000000,28.4899997700,17.0799999200,38.5900001500,6.3800001140,48.5800018300,23.3500003800,9.4499998090,59.8100013700,5,25,1715,432,0,233,44,4,0,3133,1715,4,8,432,548,134,46,133,469,4,0,139,64,0,0,561,51,94,71,167,0,399,382,93,21,474,287,0,0,2940,0,85,92,41,286,60,0,2414,677,1341,35457,-999,43060,33500,21491,2598,405,1126,3133,847,5,0,25,17,1715,427,432,132,0,943,134,707,773,1230,127,1316,564,385,35,431,146,50551.3710900000,66,79,133,561,677,1843,502,1341,997,344,1843,699,222000,0,525,802,535,1209,200,2672,1298,624,64,0.3206448625,0.2732381146,0.2703479094,True +15001021402,HI,Hawaii County,Census Tract 214.02,3850,25900,99999,0,816.2897568000,46.7089718600,2908.3037620000,2908.3037620000,9.3842508490,34.3563535200,85.1050386400,49.6372810000,42.1222216500,0.4366300400,0.0000000000,0.0507011120,0.0000000000,0.0000000000,154.3531404000,35.6412766000,100.6419504000,2718.7213800000,400.5848715000,42.0668509000,2029.9287820000,1120.4883020000,389.2195942000,1513.2753420000,90.2473753700,1164.6149540000,732.8806071000,1423.0279690000,398.0990586000,38.5432898100,148.3798876000,2264.6563310000,400.7801185000,2260.1444870000,204.3723986000,2896.0170940000,164.3064289000,42.8245659800,816.2897568000,369.2554536000,823.5514248000,42.8368821100,9.1951896550,0.2450553770,0.6089137490,0.0000000000,231.1957982000,25.7701943800,2046.6653000000,121.1737876000,15523.0524500000,1168.2462790000,424.7533337000,1042.7740610000,613.2432083000,1168.2462790000,233.6237568000,36432.4851700000,35023.9123700000,2500.00003,19986.2886800000,38377.4267300000,1038.3984520000,350.9512153000,0.0591512960,100.2060835000,672.1332075000,HI,Hawaii County,Census Tract 214.02,3850,25900,99999,0,3381.8505830000,1.9577749070,48.3774284700,115.8866985000,93.2828779200,36.4310612700,0.0000000000,0.3638583720,5.7721619310,0.0000000000,0.0253505560,282.6050465000,125.8827071000,96.1817516100,3159.6427310000,587.9516835000,95.3819903100,2343.0448720000,1163.6868530000,542.8995190000,2748.0508690000,1427.7453750000,544.9161553000,1707.5037210000,80.2293815600,1373.5711330000,811.6988583000,1627.2742840000,501.5004673000,31.7776957200,320.6619287000,2598.9638020000,399.0852509000,2084.6770590000,316.4326797000,3369.1762350000,372.6650877000,36.2398244600,879.1825342000,42.0022880400,834.3656845000,104.8442249000,9.6353598830,4.8270140890,3.2579476980,0.0000000000,257.8107343000,54.3398767400,1558.9517870000,107.9598858000,22057.7679900000,1474.9353560000,461.2082181000,1293.6710150000,711.8759928000,1474.9353560000,358.6005371000,44010.1419300000,43324.4107200000,55794.0467,43510.7687300000,46409.70582,223090.1061000000,447.0194726000,1277.6085930000,391.2560530000,3.4560823290,53.3338078900,627.7848501000,15,1,21402,20.2800006900,0.1700000020,11.1800003100,0.0000000000,42.0200004600,5.7699999810,0.0000000000,0.2000000030,10.0399999600,21.7900009200,0.0000000000,0.0000000000,6.2500000000,20.8299999200,50.0000000000,0.0000000000,30.0000000000,12.8900003400,0.0000000000,0.0000000000,12.9300003100,29.6700000800,2.8299999240,0.0000000000,3.8499999050,0.2199999990,0.3499999940,4.5700001720,3.1300001140,0.8700000050,11.2299995400,3.5799999240,5.7199997900,0.1000000010,0.0000000000,0.0000000000,0.0000000000,0.1199999970,20.3299999200,2.5000000000,37.2500000000,25.1399993900,5.9899997710,66.2900009200,32.6699981700,2.2000000480,17.5799999200,10.1300001100,2.1400001050,9.1800003050,11.5000000000,0.0000000000,1.7500000000,0.0000000000,5.5799999240,11.1099996600,9.6700000760,53.1800003100,17.5799999200,60.9799995400,23.0900001500,25.5499992400,9.0699996950,45.8300018300,20.2500000000,16.2099990800,51.1599998500,14,7,816,450,0,404,877,0,0,4024,816,7,0,450,1691,232,8,51,170,7,0,135,58,0,0,1702,220,505,114,155,0,184,126,14,9,452,144,0,4,3846,0,0,35,230,782,96,5,2765,913,1382,49063,-999,53500,45294,25021,3090,313,2002,3975,365,14,0,7,0,809,93,448,25,0,420,106,1030,695,2055,123,1667,1105,654,44,352,610,52648.5000000000,85,16,187,1683,913,1530,148,1382,735,647,1530,827,460400,269,933,707,929,1028,365,3229,1480,654,148,0.0567353105,0.1106101497,0.0918238994,False +15001021800,HI,Hawaii County,Census Tract 218,99999,25900,99999,0,1029.1142040000,113.6784696000,4267.4235680000,4267.4235680000,6.2395850530,53.9177365400,216.6516714000,128.9012836000,50.9871561900,6.0000000000,0.1063158070,0.1550576070,0.0000000000,5.0000000000,447.7201072000,220.2602014000,108.4859570000,3916.0639380000,732.8903613000,141.4261076000,2614.6461610000,1725.1835680000,326.8660370000,2059.8485030000,80.4418689800,1526.3987780000,994.8898024000,1979.4066340000,257.4833096000,26.3705349100,165.9507309000,3139.4967370000,446.5797471000,3112.4800730000,479.9428353000,4196.1618470000,304.9946221000,35.1246452800,1029.1142040000,599.1987248000,1353.4594670000,88.4248028000,12.0483253700,0.0000000000,29.1300475600,0.0200242130,796.1207250000,80.2921846500,2650.0290710000,198.5235648000,11456.1517100000,1564.6212330000,673.4738505000,1367.9637000000,704.9298707000,1564.6212330000,108.9002704000,31093.0763300000,34891.6831500000, ,36029.4523900000,28993.2036700000,1309.0228300000,454.9163605000,0.0000000000,162.9089448000,789.8354598000,HI,Hawaii County,Census Tract 218,99999,25900,99999,0,6083.7582190000,42.5401219700,100.2628204000,291.9288304000,171.6701803000,157.2704277000,0.0000000000,2.0988955720,28.2434352500,0.0000000000,20.0000000000,700.2193766000,355.5028186000,246.8417125000,5743.3729480000,1009.5126270000,168.4758261000,3991.0794680000,2101.9089420000,797.0409708000,4842.6058430000,2504.2846360000,926.1391325000,2558.9977570000,121.9585263000,2419.9872150000,1230.3273470000,2437.0392300000,619.1433029000,30.3347234700,415.5754552000,4589.7876850000,591.1840434000,3872.4750500000,680.1646583000,5362.4843550000,646.1197476000,69.0912882200,1290.5175300000,78.9204895500,1384.6919960000,170.5595070000,13.1141102800,0.0532514600,22.1521470200,3.0000000000,824.9101787000,120.8063793000,1800.7153220000,184.9550893000,20169.3576300000,1946.0392300000,826.0422071000,1768.0480750000,1032.9408390000,1946.0392300000,64.1862440100,47766.7945700000,52099.9003000000,28574.27751,48066.4015300000,46427.75726,183195.4901000000,640.1530363000,1748.9796090000,584.2699242000,9.0912882160,174.9509189000,606.5754552000,15,1,21800,19.7700004600,0.3899999860,12.9399995800,0.0799999980,28.2299995400,11.1099996600,0.0000000000,1.1299999950,9.3699998860,7.0100002290,0.0000000000,0.0200000000,10.6599998500,13.9799995400,0.0000000000,0.0000000000,27.7299995400,13.0200004600,100.0000000000,0.0000000000,11.6800003100,22.7600002300,3.6700000760,0.0700000000,5.6799998280,0.0000000000,0.5400000210,3.2000000480,2.2400000100,0.7599999900,7.3800001140,4.1599998470,2.1400001050,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,16.2700004600,0.9900000100,48.9399986300,19.7800006900,10.6700000800,55.4000015300,21.2099990800,1.8799999950,11.8999996200,11.8699998900,2.0299999710,17.6599998500,16.9699993100,0.0000000000,9.9399995800,0.0000000000,14.9700002700,10.3000001900,23.0300006900,73.8300018300,9.0799999240,44.4900016800,29.4599990800,20.9300003100,6.6700000760,49.5699996900,21.6599998500,15.1899995800,43.8600006100,23,5,1173,768,0,556,416,0,1,5934,1173,23,5,768,1675,659,67,125,164,0,0,213,100,5,0,1823,213,415,218,337,4,190,133,32,0,438,247,0,0,5647,0,0,45,127,919,56,0,3978,1238,1865,49659,-999,41579,44700,22489,4186,497,2504,5907,1043,23,0,5,0,1167,198,768,115,0,596,204,1947,787,2764,295,2166,1200,531,47,298,728,53624.0312500000,120,123,186,1805,1238,2423,558,1865,1377,488,2423,883,378200,220,1078,818,1748,1242,396,4543,2252,984,188,0.0726841893,0.1204888825,0.1765701710,False +15003010201,HI,Honolulu County,Census Tract 102.01,12400,26180,99999,0,1066.0000000000,123.0000000000,4656.0000160000,4656.0000160000,27.0000000000,106.0000000000,304.0000000000,147.0000000000,83.0000000000,0.0000000000,0.0000000000,20.0000000000,0.0000000000,0.0000000000,309.0000000000,104.0000000000,102.0000000000,4143.0000140000,719.0000000000,44.0000000000,2719.0000090000,1527.0000000000,528.0000000000,2131.0000070000,117.0000000000,1555.0000000000,895.0000000000,2014.0000070000,545.0000000000,67.0000000000,127.0000000000,3303.0000110000,535.0000000000,3267.0000110000,453.0000000000,4587.0000150000,729.0000000000,52.0000000000,1066.0000000000,633.0000000000,1662.0000060000,204.0000000000,42.0000000000,0.0000000000,43.0000000000,28.0000000000,261.0000000000,18.0000000000,2743.0000000000,497.0000000000,14178.0000500000,1876.0000000000,634.0000000000,1494.0000000000,1037.0000000000,1876.0000000000,447.0000000000,35151.0001200000,36678.3218000000,30000.0001,44583.3334800000,36453.4884900000,1462.0000000000,656.0000000000,9.0000000000,23.0000000000,763.0000000000,HI,Honolulu County,Census Tract 102.01,12400,26180,99999,0,5312.0000000000,42.0000000000,65.0000000000,199.0000000000,127.0000000000,75.0000000000,6.0000000000,0.0000000000,2.0000000000,5.0000000000,2.0000000000,464.0000000000,281.0000000000,141.0000000000,4859.0000000000,1025.0000000000,123.0000000000,3126.0000000000,1506.0000000000,689.0000000000,3917.0000000000,2107.0000000000,652.0000000000,2315.0000000000,262.0000000000,1960.0000000000,1101.0000000000,2053.0000000000,673.0000000000,51.0000000000,250.0000000000,3646.0000000000,430.0000000000,3270.0000000000,655.0000000000,5275.0000000000,973.0000000000,39.0000000000,1186.0000000000,142.0000000000,1243.0000000000,105.0000000000,36.0000000000,7.0000000000,9.0000000000,2.0000000000,381.0000000000,74.0000000000,2149.0000000000,564.0000000000,16156.0000000000,1932.0000000000,876.0000000000,1571.0000000000,1032.0000000000,1932.0000000000,500.0000000000,40300.0000000000,48214.0000000000,61667,37250.0000000000,39419.64286,262400.0000000000,709.0000000000,1584.0000000000,540.0000000000,20.0000000000,70.0000000000,609.0000000000,15,3,10201,26.5300006900,1.3700000050,10.6800003100,0.0000000000,26.7399997700,14.1999998100,0.1299999950,1.4099999670,2.9800000190,2.9600000380,0.3600000140,0.1299999950,13.9799995400,15.1800003100,0.0000000000,1.3700000050,43.1599998500,0.0000000000,-999.0000000000,-999.0000000000,14.6000003800,14.2600002300,1.7400000100,0.0900000040,2.7000000480,0.4699999990,1.3500000240,5.4200000760,3.4900000100,1.6100000140,7.4400000570,3.2200000290,2.4700000290,0.0000000000,0.0599999990,0.0900000040,0.0399999990,0.2399999950,16.8500003800,1.2000000480,38.2999992400,24.8299999200,9.0799999240,55.0999984700,38.9099998500,4.1300001140,13.5600004200,12.3500003800,0.6100000140,18.6599998500,6.8400001530,-999.0000000000,7.9800000190,23.2900009200,5.6100001340,27.2099990800,18.8400001500,52.2700004600,23.2199993100,65.0400009200,30.1499996200,14.4700002700,5.1500000950,48.9599990800,16.4599990800,13.2100000400,67.6600036600,73,0,1416,570,7,159,158,19,7,5337,1416,73,0,570,1427,758,75,198,215,0,1,246,0,0,0,1466,214,209,93,144,5,289,186,72,25,397,172,3,0,4915,2,5,86,132,828,59,13,3290,1166,1611,65469,30417,67500,70865,24202,3708,458,2205,5289,987,73,17,0,0,1404,96,570,32,25,630,147,1260,817,2411,219,2138,1178,858,91,299,454,66324.0859400000,32,93,391,1437,1166,1985,374,1611,842,769,1985,1225,611600,461,1291,1090,1609,772,275,3985,1951,656,154,0.1589274030,0.1844549763,0.1866137266,False +15007040603,HI,Kauai County,Census Tract 406.03,39200,28180,99999,0,588.9533691000,14.8749074900,2288.4115600000,2288.4115600000,4.1835675240,41.8356781000,141.7764587000,88.7846069300,45.5544052100,0.0000000000,4.1835675240,5.1132493020,0.0000000000,0.0000000000,315.6269531000,189.6550751000,98.0814209000,2138.7328030000,491.8016357000,87.8549194300,1520.0296170000,716.3197632000,270.5373840000,1197.8949000000,18.1287937200,877.6195679000,518.2975464000,1179.7661060000,306.7949829000,46.4840850800,99.0111007700,1745.9422750000,233.3501129000,1714.7979380000,137.1280518000,2260.0562680000,153.8623199000,23.7068843800,588.9533691000,321.6698608000,921.7794281000,104.1243515000,0.0000000000,0.0000000000,5.1132493020,0.0000000000,238.9282074000,29.2849750500,1265.2968750000,33.0037002600,14882.0000400000,836.7135620000,238.4633636000,753.0421753000,469.9541016000,836.7135620000,116.6750565000,38942.0014900000,37622.3762200000, ,34318.1815500000,38219.1778500000,761.4093018000,345.8416138000,0.0000000000,55.3160629300,393.2553711000,HI,Kauai County,Census Tract 406.03,39200,28180,99999,0,2512.0000030000,12.5507030500,38.1169509900,121.7883072000,77.1635818500,70.1909713700,0.0000000000,0.0000000000,7.9022946360,0.0000000000,0.0000000000,323.5292358000,237.0688324000,74.8393783600,2365.1103520000,422.5403442000,69.7261276200,1722.2353520000,746.0695801000,355.1384277000,2035.0732420000,1124.4500730000,359.7868347000,1264.3671880000,76.2339019800,1000.8023680000,612.1954346000,1188.1331790000,341.1931763000,19.9881572700,207.3190308000,1902.1287840000,257.5218506000,1584.6424560000,271.9319153000,2498.0547770000,275.6506348000,25.1014061000,661.9334106000,43.2302017200,864.6040039000,92.0384903000,3.7187268730,0.0000000000,11.6210212700,0.9296817180,250.5492249000,43.2302017200,1018.0014650000,79.0229492200,22782.0000300000,1669.2435300000,386.2827454000,917.1310425000,572.2191162000,1669.2435300000,817.1902466000,48053.0011600000,49650.0007600000,43125.00166,38438.0005900000,48353.65708,250600.0029000000,624.9999952000,918.9903564000,396.5092468000,2.3242042060,59.9644699100,364.9000854000,15,7,40603,34.2400016800,0.5000000000,7.1500000950,0.1199999970,42.3899993900,2.5000000000,0.1500000060,1.1900000570,29.2500000000,7.1900000570,0.1500000060,0.0000000000,9.6499996190,32.2099990800,0.0000000000,0.0000000000,13.4399995800,9.6800003050,0.0000000000,0.0000000000,11.8599996600,18.8899993900,0.3100000020,0.0000000000,2.0000000000,1.5000000000,2.9600000380,3.4600000380,4.3800001140,2.1099998950,20.1000003800,10.4200000800,5.6900000570,0.0000000000,0.2300000040,0.0000000000,0.1500000060,0.0000000000,30.1200008400,6.3800001140,29.7399997700,32.7299995400,6.6500000950,63.3300018300,31.6000003800,1.6100000140,13.5600004200,8.6300001140,1.0399999620,3.4600000380,2.0199999810,0.0000000000,2.3299999240,0.0000000000,15.0500001900,1.4099999670,53.7000007600,65.8700027500,52.2099990800,55.1899986300,17.4899997700,30.0499992400,10.8000001900,53.8899993900,18.1299991600,8.1499996190,53.0099983200,13,3,891,186,4,761,187,4,0,2602,891,13,3,186,1103,65,31,86,287,0,0,25,18,0,0,1138,135,215,8,52,0,90,114,77,39,523,271,6,0,2460,4,0,55,148,741,157,0,1974,687,964,67500,-999,82308,45833,35475,2143,185,1364,2599,90,13,0,3,0,889,18,186,28,5,442,58,587,646,1444,96,1178,746,431,22,185,369,62339.4296900000,27,16,16,1137,687,2082,1118,964,635,329,2082,950,650400,1087,1149,511,455,782,281,2251,1213,408,56,0.0680789775,0.1103461130,0.0346287033,False +15007040604,HI,Kauai County,Census Tract 406.04,57800,28180,99999,0,678.0467656000,17.1250984800,2634.5889580000,2634.5889580000,4.8164320010,48.1643366100,163.2235751000,102.2154066000,52.4456040000,0.0000000000,4.8164319990,5.8867523410,0.0000000000,0.0000000000,363.3731129000,218.3449656000,112.9185931000,2462.2676790000,566.1984698000,101.1450919000,1749.9707180000,824.6804260000,311.4626748000,1379.1053670000,20.8712132900,1010.3806350000,596.7025865000,1358.2341530000,353.2050822000,53.5159359900,113.9889124000,2010.0581130000,268.6499275000,1974.2024500000,157.8719865000,2601.9442500000,177.1377060000,27.2931263100,678.0467656000,370.3301829000,1061.2207750000,119.8756585000,0.0000014800,0.0000009040,5.8867517830,0.0000000055,275.0718744000,33.7150284500,1456.7034330000,37.9963147800,14881.9998700000,963.2866173000,274.5367055000,866.9579964000,541.0460023000,963.2866173000,134.3249464000,38942.0019300000,37622.3794400000,2708.021126,34318.1816500000,38219.1788500000,876.5908071000,398.1584626000,0.0000004130,63.6839504200,452.7447185000,HI,Kauai County,Census Tract 406.04,57800,28180,99999,0,2892.0007690000,14.4492981500,43.8830701600,140.2117278000,88.8364418900,80.8090412700,0.0000000000,0.0000001640,9.0977060880,0.0000009040,0.0000001640,372.4708665000,272.9312307000,86.1606489900,2722.8904680000,486.4597859000,80.2738927500,1982.7651850000,858.9306725000,408.8616791000,2342.9272420000,1294.5503190000,414.2132735000,1455.6332330000,87.7661221700,1152.1979950000,704.8047703000,1367.8671030000,392.8069129000,23.0118530200,238.6810128000,2189.8717920000,296.4782494000,1824.3580440000,313.0681749000,2875.9459930000,317.3494345000,28.8985995100,762.0668105000,49.7698076000,995.3962359000,105.9615271000,4.2812743510,0.0000001640,13.3789809200,1.0703183410,288.4508700000,49.7698064500,1171.9987960000,90.9770727900,22781.9989000000,1921.7568180000,444.7173368000,1055.8692320000,658.7810654000,1921.7568180000,940.8098295000,48053.0024700000,49650.0006500000,43124.99753,38437.9995900000,48353.65972,250600.0011000000,624.9999948000,1058.0098580000,456.4908656000,2.6757964510,69.0355465200,420.1000380000,15,7,40604,37.3300018300,0.0000000000,14.1000003800,0.0000000000,29.2700004600,5.7800002100,0.0000000000,0.5899999740,9.2399997710,9.7500000000,0.1500000060,0.0000000000,8.9700002670,15.9499998100,-999.0000000000,-999.0000000000,30.2500000000,14.5000000000,0.0000000000,0.0000000000,15.8000001900,21.1000003800,2.2500000000,0.0000000000,7.5900001530,0.1199999970,2.9300000670,5.5999999050,4.8299999240,3.0799999240,7.5599999430,4.7699999810,1.6000000240,0.0000000000,0.2099999930,0.0000000000,0.1199999970,0.0000000000,12.4099998500,0.9800000190,37.6500015300,24.5799999200,8.5500001910,63.1899986300,33.0600013700,3.5699999330,18.5499992400,11.3999996200,1.0800000430,10.0200004600,7.7899999620,0.0000000000,5.4200000760,-999.0000000000,19.9200000800,9.2899999620,27.3099994700,63.2000007600,29.4699993100,45.0200004600,21.6900005300,22.3700008400,7.3800001140,54.2099990800,19.1299991600,8.1300001140,53.5800018300,0,7,1260,476,0,312,329,5,0,3375,1260,0,0,476,988,195,20,113,201,0,0,144,69,0,0,1057,167,223,76,256,0,189,163,99,4,255,161,7,0,3160,4,0,104,54,392,31,0,2388,849,1174,62065,-999,66250,50179,30569,2640,301,1736,3332,334,0,0,7,0,1245,97,472,94,0,570,119,899,587,1848,158,1440,910,574,62,322,396,64327.2617200000,36,46,96,1033,849,1615,441,1174,742,432,1615,1084,627500,476,727,629,732,755,249,2745,1488,525,69,0.0680789782,0.1103461036,0.1002400960,False +15007040700,HI,Kauai County,Census Tract 407,24950,28180,99999,0,1639.5124120000,84.3661893400,6497.4160920000,6497.4160920000,0.0261385850,179.0821346000,411.3031126000,164.1830575000,112.0709766000,0.0000000000,0.0000000000,19.9999980900,0.0000000000,0.0000000000,803.9005321000,495.4262798000,170.9395295000,6045.6744670000,1284.0984150000,230.2267010000,4202.3582790000,2302.9328280000,716.3603780000,3341.4274500000,85.2877002200,2471.2365200000,1616.8583390000,3256.1397500000,792.3786741000,256.5087146000,160.2696385000,4873.0529120000,677.1858005000,4858.6607240000,465.8659478000,6483.8447060000,315.4761577000,130.1721194000,1639.5124120000,903.8070090000,2542.4494830000,121.2988364000,18.0560093400,10.9999990500,13.2091077300,0.0672135060,809.4964124000,19.4300633300,3747.7267120000,182.9719543000,14847.6424500000,2182.2980030000,656.0313461000,2089.1407680000,1264.6352900000,2182.2980030000,127.4408560000,42756.8743900000,41907.5748200000,2708.021223,33400.6344500000,42210.6869300000,2068.2044520000,930.0281326000,5.0261381080,162.4411862000,1090.9635380000,HI,Kauai County,Census Tract 407,24950,28180,99999,0,7440.9995560000,2.9999997620,210.9999847000,332.9999695000,195.9999847000,60.9999961900,0.0000000000,1.9999998810,2.9999997620,10.9999990500,1.9999998810,873.9999390000,581.9999390000,239.9999847000,7007.9995120000,1212.9998780000,247.9999847000,5041.9995120000,2330.9997560000,928.9999390000,5895.9995120000,3286.9997560000,945.9999390000,3634.9997560000,200.9999847000,2936.9997560000,1749.9998780000,3433.9997560000,1084.9998780000,101.9999924000,344.9999695000,5525.9995120000,844.9999390000,4595.9995120000,725.9999390000,7427.9995570000,471.9999695000,44.9999961900,1947.9998780000,66.9999923700,2175.9997560000,118.9999924000,11.9999990500,1.9999998810,14.9999990500,0.0000000000,782.9999390000,52.9999961900,3172.9997560000,174.9999847000,20804.0001300000,2749.9997560000,628.9999390000,2599.9997560000,1467.9998780000,2749.9997560000,182.9999847000,52005.0017700000,60036.0001000000,29167,29896.0005000000,51689.65767,208200.0016000000,615.0000111000,2605.9997560000,996.9999390000,7.9999995230,199.9999847000,1130.9998780000,15,7,40700,22.9200000800,0.0000000000,15.6499996200,0.0000000000,39.6800003100,4.5000000000,0.9399999980,1.2500000000,16.1599998500,12.4200000800,1.5299999710,0.0000000000,11.1700000800,19.4599990800,-999.0000000000,-999.0000000000,43.8499984700,5.2800002100,-999.0000000000,-999.0000000000,11.2299995400,19.5699996900,1.3400000330,1.1499999760,6.7199997900,0.1400000010,0.9700000290,3.5799999240,1.2100000380,1.0199999810,12.4200000800,8.2200002670,3.0999999050,0.0500000010,0.0000000000,0.0599999990,0.0000000000,0.0000000000,17.7999992400,3.0299999710,37.4900016800,25.4799995400,5.1799998280,62.7799987800,30.3799991600,2.6500000950,11.9300003100,9.5600004200,1.5599999430,15.2600002300,12.5500001900,-999.0000000000,7.4800000190,-999.0000000000,16.2700004600,11.0500001900,16.9099998500,66.0999984700,9.9099998470,41.5299987800,25.9899997700,22.1299991600,6.2800002100,49.0000000000,19.9099998500,9.3100004200,47.7200012200,0,0,1773,1211,73,1250,961,118,0,7737,1773,0,0,1211,3070,348,97,198,345,0,0,531,64,0,0,3331,374,652,104,520,89,277,94,75,11,961,636,0,4,7107,0,5,79,240,1265,215,0,5271,1966,2649,64050,-999,61146,34483,25835,5670,542,3654,7714,1177,0,0,0,0,1769,222,1211,197,0,800,336,1976,1343,3806,197,2931,1840,1110,97,436,1212,82946.1484400000,120,147,366,3312,1966,3188,539,2649,1751,898,3188,954,486600,316,1324,1264,2011,1712,486,5943,2912,1183,183,0.0486557239,0.0635433492,0.1525797252,False +15009030100,HI,Maui County,Census Tract 301,11350,27980,99999,0,383.3068000000,27.2305791200,1910.5015780000,1910.5015780000,6.2592231110,27.4607778700,91.6621148600,27.1932371400,35.6747865500,0.0000000000,0.0035966930,0.0898007360,0.0000000000,8.1204749640,37.2918099000,6.5858333300,8.6301826290,1675.7861590000,177.6883274000,0.2490721380,1213.4786900000,793.3024273000,173.2832380000,864.0971374000,12.1702029000,576.9324621000,348.0594975000,851.9269343000,157.0642045000,28.2470664600,176.1750701000,1347.1787240000,314.6769609000,1347.1232320000,153.7392875000,1890.3938120000,392.8893720000,49.0661406900,383.3068000000,238.4715474000,807.4789838000,151.7785114000,0.0395477110,0.0000000000,20.0771960800,19.9998645800,82.6743149300,0.0311889900,1052.6142140000,211.1110742000,10415.9855900000,772.7004868000,261.4311255000,595.1029364000,362.3008839000,772.7004868000,23.2643179700,26030.6739600000,26529.6239500000,62499.99972,10011.7479600000,27536.6825200000,634.0477989000,310.2452140000,0.0041105070,14.1661638200,316.7386816000,HI,Maui County,Census Tract 301,11350,27980,99999,0,1866.9362440000,6.0427683000,47.7465012100,49.6951799400,40.5015555000,14.6726287000,0.0000000000,0.0233281630,11.2371696700,0.0000000000,6.0544323810,45.4074658200,20.7581653000,0.2993780970,1737.6018730000,257.5202186000,18.1205288500,1144.9066930000,659.1384151000,168.3234863000,1416.6104270000,672.4774532000,267.8818052000,916.8195996000,57.2021774200,684.1633000000,426.9665649000,859.6174226000,247.6905148000,8.0583204110,242.1889594000,1309.3110490000,183.3297054000,1187.5264430000,234.0342152000,1860.8740350000,321.7814935000,11.1399689800,404.3709197000,48.0699844900,482.2535048000,57.6687406900,0.0622084360,0.0000000000,5.0816485730,0.0000000000,76.4937794500,8.0000000000,784.1197518000,187.1127528000,16594.5856500000,882.8553724000,300.2488337000,597.4743423000,289.1446371000,882.8553724000,50.5171108200,38601.3524400000,49277.4119600000,27082.99935,33789.8790400000,32796.112,282034.9806000000,597.3191359000,598.5054464000,230.7045131000,0.0388802740,25.1516330700,222.5093316000,15,9,30100,34.4799995400,0.0000000000,3.5399999620,0.0000000000,20.8999996200,17.7800006900,0.0000000000,0.0000000000,0.6200000050,1.9199999570,0.0000000000,0.0000000000,14.1800003100,23.5300006900,-999.0000000000,-999.0000000000,27.9400005300,0.0000000000,-999.0000000000,-999.0000000000,12.9399995800,15.4200000800,3.1700000760,0.0000000000,0.3600000140,0.2599999900,1.8700000050,3.9500000480,5.2500000000,1.9199999570,5.3600001340,4.1100001340,2.0799999240,0.0000000000,0.0000000000,0.6200000050,0.0000000000,0.0000000000,10.5500001900,0.1099999990,45.0800018300,21.3199996900,10.4399995800,56.5299987800,23.3099994700,3.7899999620,42.5900001500,10.6599998500,0.5699999930,9.8000001910,8.8999996190,-999.0000000000,7.2600002290,-999.0000000000,89.7099990800,16.1700000800,33.9399986300,62.1500015300,10.6700000800,53.5600013700,27.8199996900,28.2399997700,2.5499999520,52.4000015300,15.3500003800,10.6899995800,50.0800018300,0,0,663,68,0,12,37,0,0,1923,663,0,0,68,402,342,0,94,156,0,0,19,0,0,0,402,52,62,61,7,0,76,101,36,5,103,79,0,0,1792,0,12,37,40,189,2,0,1271,496,613,58983,-999,66667,-999,21861,1388,148,871,1919,188,0,0,0,0,663,59,68,61,0,332,15,573,271,910,95,697,394,203,33,371,112,53658.6250000000,11,36,65,402,496,928,315,613,381,232,928,1005,609400,99,497,307,535,543,49,1479,775,227,53,0.2078346689,0.1729195461,0.0979676915,False +15009030201,HI,Maui County,Census Tract 302.01,99999,27980,99999,0,370.6344604000,44.2015914900,1578.6282440000,1578.6282440000,14.5508346600,25.8071403500,170.2173004000,68.9105529800,56.8306160000,0.0000000000,0.0000000000,1.9218082430,0.0000000000,0.0000000000,74.4014358500,42.8288688700,32.6707420300,1447.3961910000,143.5865326000,10.1581296900,1008.1257240000,471.1175842000,209.7516479000,834.6138888000,21.9635238600,543.5972290000,359.1036072000,812.6503654000,172.4136658000,95.5413284300,161.4319000000,1135.7887030000,143.0374451000,1135.7887030000,111.7394257000,1568.4701140000,158.1373749000,6.8636012080,370.6344604000,243.5205688000,939.4897130000,125.1920853000,3.0199844840,0.0000000000,20.3162593800,8.5108652110,190.2590179000,18.6689949000,572.1497803000,21.1398906700,13734.0000100000,569.6788940000,110.0921631000,526.5755005000,365.9671936000,569.6788940000,19.2180824300,36271.9983800000,36752.7165200000,29999.99935,38274.6483700000,41103.4484300000,537.2827148000,379.9689636000,1.3727202420,52.9869995100,135.0756683000,HI,Maui County,Census Tract 302.01,99999,27980,99999,0,2299.8553430000,30.4743881200,48.0452041600,193.2789917000,112.2885056000,88.9522628800,3.2945284840,2.7454402450,22.2380657200,0.0000000000,0.0000000000,154.0191956000,79.8923111000,51.8888206500,2135.1289060000,263.0131836000,2.7454402450,1551.9974370000,586.7006226000,406.0506287000,1811.9906010000,897.4844360000,344.8273010000,1165.4394530000,64.2433013900,904.6225586000,484.8447571000,1101.1961670000,393.4216003000,54.6342620800,271.7985840000,1706.0166020000,161.1573486000,1664.2858890000,289.6439514000,2267.1846030000,365.1435547000,8.5108652110,544.4208374000,40.3579711900,1261.2552490000,189.1608429000,7.6872329710,2.4708962440,9.0599527360,0.0000000000,187.2390289000,21.9635219600,364.8690186000,53.5360870400,22104.0011400000,877.1681519000,139.4683685000,816.2194214000,560.6188965000,877.1681519000,23.3362426800,43381.9986900000,41483.9988900000, ,50370.0014900000,61788.46215,329599.9971000000,787.9999644000,818.1412354000,532.0663452000,0.0000000000,48.3197479200,118.3284760000,15,9,30201,65.4199981700,0.0000000000,7.5100002290,0.0000000000,8.0399999620,5.6700000760,0.8199999930,0.0000000000,0.9200000170,0.6299999950,0.0000000000,0.0000000000,8.5900001530,13.9200000800,-999.0000000000,-999.0000000000,22.5799999200,3.2300000190,-999.0000000000,-999.0000000000,13.8599996600,19.2800006900,2.3199999330,2.7100000380,0.2399999950,1.6000000240,1.7400000100,16.1700000800,8.3299999240,5.2300000190,6.0999999050,3.4900000100,1.1599999670,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.0000000000,6.5599999430,0.9800000190,29.6200008400,34.7999992400,10.4700002700,73.9700012200,46.3400001500,0.0000000000,27.1499996200,8.4899997710,0.0000000000,10.4099998500,7.2500000000,-999.0000000000,7.4600000380,-999.0000000000,63.8699989300,0.0000000000,14.9399995800,67.5100021400,7.0199999810,32.4900016800,16.1299991600,18.5499992400,5.5199999810,46.7000007600,19.6599998500,8.5500001910,63.7000007600,0,0,1351,155,17,19,13,0,0,2065,1351,0,0,155,166,117,0,116,188,0,0,35,5,0,0,166,23,32,48,5,56,334,172,36,33,126,72,0,0,1935,0,0,108,24,127,19,0,1661,456,945,53542,-999,55844,16574,29506,1732,147,1094,2065,215,0,0,0,0,1351,98,155,99,0,725,34,492,578,1222,128,999,739,507,0,297,32,-999.0000000000,0,34,0,166,456,1111,166,945,638,307,1111,1415,651000,78,361,602,333,383,114,1790,836,352,39,0.1008226892,0.1610559432,0.1041162228,False +15009030402,HI,Maui County,Census Tract 304.02,65900,27980,99999,0,1576.0000000000,169.0000000000,6064.0000020000,6064.0000020000,14.0000000000,21.0000000000,388.0000000000,130.0000000000,116.0000000000,0.0000000000,6.0000000000,12.0000000000,0.0000000000,0.0000000000,384.0000000000,204.0000000000,142.0000000000,5577.0000020000,733.0000000000,120.0000000000,3752.0000010000,1692.0000000000,664.0000000000,3218.0000010000,94.0000000000,2147.0000000000,1431.0000000000,3124.0000010000,752.0000000000,197.0000000000,253.0000000000,4402.0000010000,742.0000000000,4402.0000010000,325.0000000000,6036.0000020000,397.0000000000,22.0000000000,1576.0000000000,970.0000000000,2603.0000010000,182.0000000000,0.0000000000,0.0000000000,65.0000000000,0.0000000000,496.0000000000,63.0000000000,3305.0000000000,215.0000000000,16362.0000100000,1995.0000000000,159.0000000000,1914.0000000000,1194.0000000000,1995.0000000000,22.0000000000,43032.0000100000,41381.5789600000, ,33000.0000100000,43802.6315900000,1919.0000000000,922.0000000000,0.0000000000,152.0000000000,973.0000000000,HI,Maui County,Census Tract 304.02,65900,27980,99999,0,7708.0000000000,145.0000000000,154.0000000000,265.0000000000,128.0000000000,80.0000000000,0.0000000000,0.0000000000,19.0000000000,0.0000000000,0.0000000000,401.0000000000,286.0000000000,114.0000000000,7227.0000000000,835.0000000000,59.0000000000,5142.0000000000,1995.0000000000,1386.0000000000,5984.0000000000,3392.0000000000,1147.0000000000,4219.0000000000,167.0000000000,3010.0000000000,2063.0000000000,4052.0000000000,1320.0000000000,157.0000000000,680.0000000000,5595.0000000000,843.0000000000,5027.0000000000,709.0000000000,7679.0000000000,494.0000000000,45.0000000000,2010.0000000000,75.0000000000,2558.0000000000,216.0000000000,0.0000000000,0.0000000000,5.0000000000,0.0000000000,676.0000000000,35.0000000000,2190.0000000000,57.0000000000,24055.0000000000,2655.0000000000,408.0000000000,2558.0000000000,1586.0000000000,2655.0000000000,105.0000000000,62870.0000000000,62614.0000000000, ,61250.0000000000,63383.15217,268200.0000000000,854.0000000000,2564.0000000000,1051.0000000000,0.0000000000,136.0000000000,819.0000000000,15,9,30402,35.0900001500,0.0000000000,11.4700002700,0.1400000010,30.8899993900,6.0799999240,0.0000000000,2.1300001140,5.7300000190,13.0500001900,0.6600000260,0.5299999710,12.7600002300,15.9700002700,-999.0000000000,-999.0000000000,25.8299999200,9.5000000000,0.0000000000,0.0000000000,14.8500003800,14.9200000800,6.1999998090,0.0000000000,3.7799999710,0.0000000000,2.0299999710,5.4000000950,4.1500000950,2.2300000190,8.8900003430,5.7899999620,1.9900000100,0.0000000000,0.0000000000,0.0000000000,0.0000000000,0.3000000120,8.7799997330,0.9399999980,36.0299987800,24.1100006100,4.8499999050,69.0699996900,35.3899993900,4.0999999050,22.3500003800,10.3000001900,0.4000000060,2.7100000380,3.2100000380,0.0000000000,1.1000000240,-999.0000000000,1.3799999950,4.5399999620,9.8999996190,62.7700004600,14.5600004200,45.0099983200,22.4300003100,20.5599994700,5.4000000950,52.9599990800,17.2999992400,8.3599996570,57.4300003100,0,12,2962,968,0,484,1101,56,45,8440,2962,0,12,968,2607,513,180,378,473,0,0,250,92,0,0,2687,399,401,523,319,0,456,350,171,0,750,489,0,0,8016,0,0,188,168,704,75,25,6123,2190,2995,76649,-999,74383,108250,34445,6541,674,4855,8416,228,0,0,12,0,2962,95,944,13,0,1452,163,2206,1476,4952,240,3366,2325,1718,199,1085,809,83576.4062500000,34,24,122,2687,2190,3324,329,2995,1880,1115,3324,1183,619000,484,1496,1720,1893,1735,456,6996,3705,1210,183,0.0657720344,0.0643312931,0.0270912548,False +15009030800,HI,Maui County,Census Tract 308,75950,27980,99999,0,566.0331867000,29.0024671100,2380.1187810000,2380.1187810000,17.9996613400,10.0023785700,58.0117214400,83.0014279100,6.0035655440,0.0000246000,0.0000492000,0.0000246000,0.0000000000,0.0000871000,275.9955389000,160.9963087000,63.0011419100,2200.1173260000,563.9967822000,125.9982522000,1366.1198620000,676.0562812000,278.0319260000,1075.1001440000,14.0013287000,774.0661832000,485.0454395000,1061.0988150000,250.0390396000,61.0059311800,72.0103169500,1604.1293560000,165.0293852000,1604.1262590000,126.0096916000,2373.1152960000,158.9950915000,16.9988727100,566.0331867000,349.0062412000,543.0424034000,75.9953928000,19.9996131500,0.0000000000,0.0005046810,0.0000416000,204.9941585000,6.0003820650,1744.0754940000,82.9987536900,13742.8599100000,725.0676672000,157.0406731000,678.0611339000,390.0359396000,725.0676672000,15.0405894400,43750.2909800000,37947.0558900000,56651.51814,40624.8900800000,47291.6931700000,623.0686622000,167.0220174000,0.0003813110,27.9999225900,438.0467044000,HI,Maui County,Census Tract 308,75950,27980,99999,0,3397.0913250000,8.9994529090,56.9987987200,165.9943966000,99.0022858300,31.0002941900,0.0000000000,0.0000133000,9.0018971200,0.0000246000,0.0000303000,462.0068110000,353.9912157000,111.0084552000,3178.0872860000,619.0195254000,146.9982076000,2248.0878360000,843.0470216000,664.0159825000,2657.0886670000,1519.0407880000,433.0200396000,1833.0353860000,64.9998069100,1267.0530430000,840.0210881000,1768.0355330000,632.9967325000,49.0045779800,222.9974409000,2487.0892080000,299.0167761000,2236.0572610000,322.0206296000,3377.0924080000,109.0174528000,6.0012877820,851.0235416000,15.0024562000,788.0072325000,17.0072817600,6.9994908370,0.0000000000,5.0005032570,0.0000056800,196.0044594000,6.9998778270,1762.0504130000,55.0041171200,25062.7285200000,1094.0658180000,224.0465605000,1050.0563640000,677.0332376000,1094.0658180000,37.0446393900,70804.0627000000,76596.8750700000,31250.15373,39822.4707200000,70216.98222,281596.2980000000,733.9758356000,1051.0558450000,322.0095016000,6.9994283650,61.0009470100,532.0313824000,15,9,30800,16.5400009200,0.0500000010,10.2600002300,0.0900000040,38.5299987800,8.8699998860,0.1599999960,0.5500000120,16.7000007600,10.2100000400,0.4699999990,0.0000000000,9.0000000000,22.0599994700,0.0000000000,0.0000000000,41.9799995400,6.1100001340,16.6700000800,0.0000000000,16.3799991600,12.6499996200,2.0199999810,0.0000000000,6.2800002100,0.3100000020,0.6999999880,4.0300002100,1.6599999670,1.8799999950,10.2299995400,7.7500000000,1.6599999670,0.0000000000,0.0000000000,0.3100000020,0.0000000000,0.1099999990,15.0100002300,2.0799999240,45.0099983200,25.8799991600,9.7799997330,75.7799987800,34.2200012200,1.3899999860,11.1400003400,10.8100004200,0.0599999990,1.8899999860,1.9199999570,0.0000000000,0.3799999950,0.0000000000,2.4400000570,0.9499999880,9.8199996950,83.3499984700,4.5199999810,20.2099990800,27.0200004600,17.2500000000,4.1799998280,57.2999992400,14.1700000800,8.9600000380,67.0299987800,3,6,1056,655,10,1066,652,30,0,6384,1056,3,6,655,2460,566,35,95,233,0,0,275,40,1,0,2546,417,322,129,401,0,257,106,45,20,653,495,0,0,5948,0,20,120,106,893,124,7,4166,1584,1856,90403,-999,75368,84904,28758,4617,499,3241,6347,120,3,0,6,0,1039,20,655,16,0,473,85,1875,1078,3549,347,2411,1827,1109,45,361,654,92883.7890600000,4,6,24,2538,1584,2058,202,1856,1547,309,2058,1568,507100,93,416,1244,1725,1101,267,4897,2806,694,142,0.0669984690,0.0322814539,0.0189065700,False diff --git a/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/test_etl.py new file mode 100644 index 000000000..5d4a98d79 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/persistent_poverty/test_etl.py @@ -0,0 +1,22 @@ +import pathlib + +from data_pipeline.etl.sources.persistent_poverty.etl import ( + PersistentPovertyETL, +) +from data_pipeline.tests.sources.example.test_etl import TestETL + + +class TestPersistentPovertyETL(TestETL): + _ETL_CLASS = PersistentPovertyETL + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "ltdb_std_all_sample/ltdb_std_1990_sample.csv" + _SAMPLE_DATA_ZIP_FILE_NAME = "LTDB_Std_All_Sample.zip" + _EXTRACT_TMP_FOLDER_NAME = "PersistentPovertyETL" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) diff --git a/data/data-pipeline/data_pipeline/tests/sources/test_geo_utils.py b/data/data-pipeline/data_pipeline/tests/sources/test_geo_utils.py new file mode 100644 index 000000000..4f8efa701 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/test_geo_utils.py @@ -0,0 +1,33 @@ +from collections import namedtuple +from pathlib import Path + +import geopandas as gpd +from data_pipeline.etl.sources.geo_utils import add_tracts_for_geometries + + +def test_add_tracts_for_geometries(): + field_names = ["latitude", "longitude", "expected_geoid"] + DataPoint = namedtuple("DataPoint", field_names) + # Pulled the tract IDs from the census geocoder + records = [ + DataPoint(33.75649254612824, -84.39215035031984, "13121011900"), + DataPoint(34.05289139656212, -118.2402117966315, "06037207400"), + DataPoint(42.357500146415475, -71.0563146836545, "25025030300"), + DataPoint(30.368185144529168, -89.0930992763473, "28047003800"), + ] + df = gpd.GeoDataFrame.from_records(records, columns=field_names) + df = gpd.GeoDataFrame( + df, + geometry=gpd.points_from_xy( + x=df["longitude"], + y=df["latitude"], + ), + crs="epsg:4326", + ) + + # Use fixtures for tract data. + tract_data_path = Path(__file__).parent / "data" / "us.geojson" + tract_data = gpd.read_file(tract_data_path) + + enriched_df = add_tracts_for_geometries(df, tract_data=tract_data) + assert (df["expected_geoid"] == enriched_df["GEOID10_TRACT"]).all() diff --git a/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/__init__.py b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/extract.csv b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/extract.csv new file mode 100644 index 000000000..e45a10e63 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/extract.csv @@ -0,0 +1 @@ +"{""type"": ""FeatureCollection"""," ""name"": ""FUDS_Property_Point"""," ""crs"": {""type"": ""name"""," ""properties"": {""name"": ""urn:ogc:def:crs:OGC:1.3:CRS84""}}"," ""features"": [{""type"": ""Feature"""," ""properties"": {""OBJECTID"": 684"," ""CENTROIDLAT"": null"," ""CENTROIDLONG"": null"," ""CLOSESTCITY"": ""NO CITY"""," ""CONGRESSIONALDISTRICT"": ""04"""," ""COUNTY"": ""SACRAMENTO"""," ""CURRENTOWNER"": null"," ""DODFUDSPROPERTYIDPK"": "" """," ""ELIGIBILITY"": ""Eligible"""," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=60970"""," ""EPAREGION"": ""09"""," ""FEATUREDESCRIPTION"": null"," ""FEATURENAME"": ""McClellan AFB Communication Facility Annex"""," ""FUDSINSTALLATIONID"": ""CA99799F528900"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA0082"""," ""HASPROJECTS"": ""No"""," ""LATITUDE"": 38.87444444"," ""LONGITUDE"": -121.39361111"," ""MEDIAID"": null"," ""METADATAID"": null"," ""NOFURTHERACTION"": null"," ""PROJECTREQUIRED"": ""No"""," ""SDSID"": null"," ""SITEELIGIBILITY"": null"," ""STATE"": ""CA"""," ""STATUS"": ""Properties without projects"""," ""STATUSCODE"": ""Not on the NPL"""," ""USACEDISTRICT"": ""spk"""," ""FISCALYEAR"": ""2019"""," ""PROPERTY_HISTORY"": ""The McClellan Communication Facility Annex was used by the U.S. Air Force. In 1983", part of the site was excessed to the GSA, who leased it to the Lincoln School District, Lincoln," CA for school agricultural instruction. The lease terminated October 1984. This portion of the site had no improvements on it when excessed and remains unimproved. The remaining part of this site remains under DoD control and is actively used by the U.S. Air Force.\r\n"""," ""USACEDIVISION"": ""spd""}"," ""geometry"": {""type"": ""Point"""," ""coordinates"": [-121.39361572299998", 38.87463378900003]}}," {""type"": ""Feature"""," ""properties"": {""OBJECTID"": 1538"," ""CENTROIDLAT"": null.1"," ""CENTROIDLONG"": null.1"," ""CLOSESTCITY"": ""KUALOA"""," ""CONGRESSIONALDISTRICT"": ""02"""," ""COUNTY"": ""HONOLULU"""," ""CURRENTOWNER"": ""PRIV: PRIVATE KUALOA RANCH IS THE OWNER\n\n """," ""DODFUDSPROPERTYIDPK"": "" "".1"," ""ELIGIBILITY"": ""Eligible"".1"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62331"""," ""EPAREGION"": ""09"".1"," ""FEATUREDESCRIPTION"": null.1"," ""FEATURENAME"": ""BATTERY AVERY J. COOPER"""," ""FUDSINSTALLATIONID"": ""HI99799F378500"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0040"""," ""HASPROJECTS"": ""Yes"""," ""LATITUDE"": 21.535999"," ""LONGITUDE"": -157.843002"," ""MEDIAID"": null.1"," ""METADATAID"": null.1"," ""NOFURTHERACTION"": null.1"," ""PROJECTREQUIRED"": ""Yes"""," ""SDSID"": null.1"," ""SITEELIGIBILITY"": null.1"," ""STATE"": ""HI"""," ""STATUS"": ""Properties with all projects at site closeout"""," ""STATUSCODE"": ""Not on the NPL"".1"," ""USACEDISTRICT"": ""poh"""," ""FISCALYEAR"": ""2019"".1"," ""PROPERTY_HISTORY"": ""BATTERY AVERY J. COOPER CONSISTED OF 94.09 ACRES AND USED \nFOR A SEACOAST DEFENSE STRUCTURE. THE SITE WAS ACQUIRED \nFROM THE ARMY THROUGH A LEASE AGREEMENT AND IN 1952"," THE \nARMY AND KUALOA RANCH TER MINATED THE AGREEMENT.\n """," ""USACEDIVISION"": ""pod""}"," ""geometry"": {""type"": ""Point"".1"," ""coordinates"": [-157.84301757799997", 21.53619384800004]}}," {""type"": ""Feature"".1"," ""properties"": {""OBJECTID"": 1629"," ""CENTROIDLAT"": null.2"," ""CENTROIDLONG"": null.2"," ""CLOSESTCITY"": ""KAAAWA"""," ""CONGRESSIONALDISTRICT"": ""02"".1"," ""COUNTY"": ""HONOLULU"".1"," ""CURRENTOWNER"": null.1"," ""DODFUDSPROPERTYIDPK"": "" "".2"," ""ELIGIBILITY"": ""Eligible"".2"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54603"""," ""EPAREGION"": ""09"".2"," ""FEATUREDESCRIPTION"": null.2"," ""FEATURENAME"": ""KAAAWA MILITARY RES"""," ""FUDSINSTALLATIONID"": ""HI99799F387500"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0135"""," ""HASPROJECTS"": ""No"".1"," ""LATITUDE"": 21.55333333"," ""LONGITUDE"": -157.85166667"," ""MEDIAID"": null.2"," ""METADATAID"": null.2"," ""NOFURTHERACTION"": null.2"," ""PROJECTREQUIRED"": ""No"".1"," ""SDSID"": null.2"," ""SITEELIGIBILITY"": null.2"," ""STATE"": ""HI"".1"," ""STATUS"": ""Properties without projects"".1"," ""STATUSCODE"": ""Not on the NPL"".2"," ""USACEDISTRICT"": ""poh"".1"," ""FISCALYEAR"": ""2019"".2"," ""PROPERTY_HISTORY"": ""THIS SITE SERVED AS THE CAMP HEADQUARTES FOR THE UNIT JUNGLE TRAINING CENTER. THE ORIGINAL RESERVASTION WAD CONMPRISED OF TWO NONCONTIGUOUS PARCELS CONTAINING 3.67 ACRES AND .1377 ACRES", TWO RIGHT-OF -WAYS, AND AN AREA DESIGNATED FOR ARMY OBERSATION STATION L. THESE LANDS WERE ACQUIRED BY THE GOVERNMENT BY DEED DATED 14 JANUARY 1925 AND DECLARED A MILITARY RESERVATION BY EXCUTIVE ORDER NO. 4679 D ATED 29 JUNE 1927. ON DEC. 20, 1937," AN ADDITIONAL 1.368 ACRES WAS ACQUIRED BY THE GOVERNMENT."""," ""USACEDIVISION"": ""pod""}.1"," ""geometry"": {""type"": ""Point"".2"," ""coordinates"": [-157.85168456999997", 21.553405762000068]}}," {""type"": ""Feature"".2"," ""properties"": {""OBJECTID"": 1719"," ""CENTROIDLAT"": null.3"," ""CENTROIDLONG"": null.3"," ""CLOSESTCITY"": ""LINCOLN"""," ""CONGRESSIONALDISTRICT"": ""04"".1"," ""COUNTY"": ""PLACER"""," ""CURRENTOWNER"": ""PRIV: PRIVATE A private resident currently owns the land and uses it for agriculture purposes."""," ""DODFUDSPROPERTYIDPK"": "" "".3"," ""ELIGIBILITY"": ""Eligible"".3"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=61278"""," ""EPAREGION"": ""09"".3"," ""FEATUREDESCRIPTION"": null.3"," ""FEATURENAME"": ""Lincoln Radio Beacon Annex"""," ""FUDSINSTALLATIONID"": ""CA99799F578400"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA0854"""," ""HASPROJECTS"": ""Yes"".1"," ""LATITUDE"": 38.8975"," ""LONGITUDE"": -121.40027778"," ""MEDIAID"": null.3"," ""METADATAID"": null.3"," ""NOFURTHERACTION"": null.3"," ""PROJECTREQUIRED"": ""Yes"".1"," ""SDSID"": null.3"," ""SITEELIGIBILITY"": null.3"," ""STATE"": ""CA"".1"," ""STATUS"": ""Properties with all projects at site closeout"".1"," ""STATUSCODE"": ""Not on the NPL"".3"," ""USACEDISTRICT"": ""spk"".1"," ""FISCALYEAR"": ""2019"".3"," ""PROPERTY_HISTORY"": ""In 1957", the U.S. Government acquired 0.87 fee acre from a private resident for use by the U.S. Air Force as an off base installation to McClellan AFB, CA. A medium power low frequency homer beacon was used to serve as a navigational aid site for McClellan. The site was declared excess in 1965. In 1966," the 0.87 fee acre was returned back to the private resident. Potential hazards related to Department of Defense activities are not currently identified at this site. """," ""USACEDIVISION"": ""spd""}.1"," ""geometry"": {""type"": ""Point"".3"," ""coordinates"": [-121.40020751999998", 38.897583008000026]}}," {""type"": ""Feature"".3"," ""properties"": {""OBJECTID"": 2093"," ""CENTROIDLAT"": null.4"," ""CENTROIDLONG"": null.4"," ""CLOSESTCITY"": ""KALAHEO"""," ""CONGRESSIONALDISTRICT"": ""02"".2"," ""COUNTY"": ""KAUAI"""," ""CURRENTOWNER"": ""STATE: STATE STATE OF HAWAII """," ""DODFUDSPROPERTYIDPK"": "" "".4"," ""ELIGIBILITY"": ""Eligible"".4"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=58233"""," ""EPAREGION"": ""09"".4"," ""FEATUREDESCRIPTION"": null.4"," ""FEATURENAME"": ""PAPAPAHOLAHOLA COMM SITE"""," ""FUDSINSTALLATIONID"": ""HI99799F401000"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0280"""," ""HASPROJECTS"": ""Yes"".2"," ""LATITUDE"": 21.9764"," ""LONGITUDE"": -159.522003"," ""MEDIAID"": null.4"," ""METADATAID"": null.4"," ""NOFURTHERACTION"": null.4"," ""PROJECTREQUIRED"": ""Yes"".2"," ""SDSID"": null.4"," ""SITEELIGIBILITY"": null.4"," ""STATE"": ""HI"".2"," ""STATUS"": ""Properties with all projects at site closeout"".2"," ""STATUSCODE"": ""Not on the NPL"".4"," ""USACEDISTRICT"": ""poh"".2"," ""FISCALYEAR"": ""2019"".4"," ""PROPERTY_HISTORY"": ""THE SITE WAS AQUIRED AS AN INTERISLAND RAION TELEPHONE AND TELEYPE STATION FROM 1943 TO 1946. IN SEPTEMBER 1953", THE ARMY TRANSFERRED THE SITE TO THE CIVIL AERONAUTICS ADMINISTRATION TO ESTALISH A VF H AIR/GROUND COVERAGE FROM MAKAHUENA POINT TO BARKING SANDS. IN MARCH OF 1967," THE GENERAL SERVICE ADMINISTRATION RELINQUISHED CONTROL OF THE SITE TO THE STATE OF HAWAII VIA QUITCLAIM DEED AND THE ST ATE TURNED IT OVER TO DLNR FOR USE AS A STATE PARK."""," ""USACEDIVISION"": ""pod""}.2"," ""geometry"": {""type"": ""Point"".4"," ""coordinates"": [-159.52191162099996", 21.976623535000044]}}," {""type"": ""Feature"".4"," ""properties"": {""OBJECTID"": 2123"," ""CENTROIDLAT"": null.5"," ""CENTROIDLONG"": null.5"," ""CLOSESTCITY"": ""KALAHEO"".1"," ""CONGRESSIONALDISTRICT"": ""02"".3"," ""COUNTY"": ""KAUAI"".1"," ""CURRENTOWNER"": null.2"," ""DODFUDSPROPERTYIDPK"": "" "".5"," ""ELIGIBILITY"": ""Eligible"".5"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62359"""," ""EPAREGION"": ""09"".5"," ""FEATUREDESCRIPTION"": null.5"," ""FEATURENAME"": ""DIVISION HEADQUARTERS"""," ""FUDSINSTALLATIONID"": ""HI99799F381400"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0071"""," ""HASPROJECTS"": ""No"".2"," ""LATITUDE"": 21.9375"," ""LONGITUDE"": -159.53"," ""MEDIAID"": null.5"," ""METADATAID"": null.5"," ""NOFURTHERACTION"": null.5"," ""PROJECTREQUIRED"": ""No"".2"," ""SDSID"": null.5"," ""SITEELIGIBILITY"": null.5"," ""STATE"": ""HI"".3"," ""STATUS"": ""Properties without projects"".2"," ""STATUSCODE"": ""Not on the NPL"".5"," ""USACEDISTRICT"": ""poh"".3"," ""FISCALYEAR"": ""2019"".5"," ""PROPERTY_HISTORY"": ""NO EVIDENCE OF HAZARDOUS/TOXIC WASTE", EXPLOSIVE ORDNANCE WASTE," UNSAFE OR HAZARDOUS DEBRIS WAS FOUND. """," ""USACEDIVISION"": ""pod""}.3"," ""geometry"": {""type"": ""Point"".5"," ""coordinates"": [-159.52996826199998", 21.93762207000003]}}," {""type"": ""Feature"".5"," ""properties"": {""OBJECTID"": 2217"," ""CENTROIDLAT"": null.6"," ""CENTROIDLONG"": null.6"," ""CLOSESTCITY"": ""KEANAE"""," ""CONGRESSIONALDISTRICT"": ""02"".4"," ""COUNTY"": ""MAUI"""," ""CURRENTOWNER"": null.3"," ""DODFUDSPROPERTYIDPK"": "" "".6"," ""ELIGIBILITY"": ""Eligible"".6"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62430"""," ""EPAREGION"": ""09"".6"," ""FEATUREDESCRIPTION"": null.6"," ""FEATURENAME"": ""MARINE MANEUVER AREA"""," ""FUDSINSTALLATIONID"": ""HI99799F395400"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0217"""," ""HASPROJECTS"": ""No"".3"," ""LATITUDE"": 20.84027778"," ""LONGITUDE"": -156.14277778"," ""MEDIAID"": null.6"," ""METADATAID"": null.6"," ""NOFURTHERACTION"": null.6"," ""PROJECTREQUIRED"": ""No"".3"," ""SDSID"": null.6"," ""SITEELIGIBILITY"": null.6"," ""STATE"": ""HI"".4"," ""STATUS"": ""Properties without projects"".3"," ""STATUSCODE"": ""Not on the NPL"".6"," ""USACEDISTRICT"": ""poh"".4"," ""FISCALYEAR"": ""2019"".6"," ""PROPERTY_HISTORY"": ""SITE WAS USED FOR MARINE MANEUVERS. NO REMNANTS OF STRUCTURES OR DEBRIS WERE OBSERVED. """," ""USACEDIVISION"": ""pod""}.4"," ""geometry"": {""type"": ""Point"".6"," ""coordinates"": [-156.14270019499997", 20.840393066000047]}}," {""type"": ""Feature"".6"," ""properties"": {""OBJECTID"": 4551"," ""CENTROIDLAT"": null.7"," ""CENTROIDLONG"": null.7"," ""CLOSESTCITY"": ""UPOLU POINT"""," ""CONGRESSIONALDISTRICT"": ""02"".5"," ""COUNTY"": ""HAWAII"""," ""CURRENTOWNER"": null.4"," ""DODFUDSPROPERTYIDPK"": "" "".7"," ""ELIGIBILITY"": ""Eligible"".7"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62478"""," ""EPAREGION"": ""09"".7"," ""FEATUREDESCRIPTION"": null.7"," ""FEATURENAME"": ""UPOLU POINT MILITARY RES"""," ""FUDSINSTALLATIONID"": ""HI99799F406300"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0342"""," ""HASPROJECTS"": ""No"".4"," ""LATITUDE"": 20.265"," ""LONGITUDE"": -155.85972222"," ""MEDIAID"": null.7"," ""METADATAID"": null.7"," ""NOFURTHERACTION"": null.7"," ""PROJECTREQUIRED"": ""No"".4"," ""SDSID"": null.7"," ""SITEELIGIBILITY"": null.7"," ""STATE"": ""HI"".5"," ""STATUS"": ""Properties without projects"".4"," ""STATUSCODE"": ""Not on the NPL"".7"," ""USACEDISTRICT"": ""poh"".5"," ""FISCALYEAR"": ""2019"".7"," ""PROPERTY_HISTORY"": ""THE SITE WAS USED FROM JUNE 25", 1927 TO JUNE 30, 1945. THE \nSITE WAS ALSO NAMED SUITER FIELD AND CONSISTED OF A RUNWAY \n(150'x4,000'), AIRCRAFT PARKING, CATAPULT DECK, \nADMINISTRATION BUILDING, QUART ERS, LATRINES, SUPPLY \nBUILDING, COMMISSARY STORES,A GALLEY AND MESS HALL, RADIO \nTRANSMITTER BUILDING, ROCKET STORAGE MAGAZINE, PUBLIC WORKS \nBUILDINGS, DISPENSARY," AND WEATHER STATION.\n """," ""USACEDIVISION"": ""pod""}.5"," ""geometry"": {""type"": ""Point"".7"," ""coordinates"": [-155.85968017599998", 20.26519775400004]}}," {""type"": ""Feature"".7"," ""properties"": {""OBJECTID"": 4622"," ""CENTROIDLAT"": null.8"," ""CENTROIDLONG"": null.8"," ""CLOSESTCITY"": ""MAKAWAO"""," ""CONGRESSIONALDISTRICT"": ""02"".6"," ""COUNTY"": ""MAUI"".1"," ""CURRENTOWNER"": ""PRIV: PRIVATE """," ""DODFUDSPROPERTYIDPK"": "" "".8"," ""ELIGIBILITY"": ""Eligible"".8"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62368"""," ""EPAREGION"": ""09"".8"," ""FEATUREDESCRIPTION"": null.8"," ""FEATURENAME"": ""GUNNERY SITE"""," ""FUDSINSTALLATIONID"": ""HI99799F383800"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0098"""," ""HASPROJECTS"": ""Yes"".3"," ""LATITUDE"": 20.89916667"," ""LONGITUDE"": -156.26027778"," ""MEDIAID"": null.8"," ""METADATAID"": null.8"," ""NOFURTHERACTION"": null.8"," ""PROJECTREQUIRED"": ""Yes"".3"," ""SDSID"": null.8"," ""SITEELIGIBILITY"": null.8"," ""STATE"": ""HI"".6"," ""STATUS"": ""Properties with projects"""," ""STATUSCODE"": ""Not on the NPL"".8"," ""USACEDISTRICT"": ""poh"".6"," ""FISCALYEAR"": ""2019"".8"," ""PROPERTY_HISTORY"": ""The property was a former Marine artillery impact area. A youngster was wounded by unexploded ordnance in the 1940s. The land remains as cattle grazing before and after military use. This property is known or suspected to contain military munitions and unexploded ordnance and therefore may present an explosive hazard."""," ""USACEDIVISION"": ""pod""}.6"," ""geometry"": {""type"": ""Point"".8"," ""coordinates"": [-156.26019287099996", 20.899414062000062]}}," {""type"": ""Feature"".8"," ""properties"": {""OBJECTID"": 4669"," ""CENTROIDLAT"": null.9"," ""CENTROIDLONG"": null.9"," ""CLOSESTCITY"": ""KOLOA"""," ""CONGRESSIONALDISTRICT"": ""02"".7"," ""COUNTY"": ""KAUAI"".2"," ""CURRENTOWNER"": null.5"," ""DODFUDSPROPERTYIDPK"": "" "".9"," ""ELIGIBILITY"": ""Eligible"".9"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62403"""," ""EPAREGION"": ""09"".9"," ""FEATUREDESCRIPTION"": null.9"," ""FEATURENAME"": ""KOLOA ICE PLANT"""," ""FUDSINSTALLATIONID"": ""HI99799F392900"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0191"""," ""HASPROJECTS"": ""No"".5"," ""LATITUDE"": 21.90444444"," ""LONGITUDE"": -159.465"," ""MEDIAID"": null.9"," ""METADATAID"": null.9"," ""NOFURTHERACTION"": null.9"," ""PROJECTREQUIRED"": ""No"".5"," ""SDSID"": null.9"," ""SITEELIGIBILITY"": null.9"," ""STATE"": ""HI"".7"," ""STATUS"": ""Properties without projects"".5"," ""STATUSCODE"": ""Not on the NPL"".9"," ""USACEDISTRICT"": ""poh"".7"," ""FISCALYEAR"": ""2019"".9"," ""PROPERTY_HISTORY"": ""SITE WAS CONSTRUCTED BY US AMRY ENGINEERING DISTRICT IN \nEARLY 1942 FOR THE 72ND QUARTERMASTER DISTRICT. SITE \nCONSISTED OF A CONCRETE ICE PLANT STRUCTURE PAVED PARKING \nLOT AND DRIVEWAY. THE PLANT WAS DEOMLISHED ABOUT 1947/1949. \nNO EVIDENCE OF ANY FORMER USE WAS FOUND DURING THE SITE \nSURVEY ON MARCH 2"," 1993.\n """," ""USACEDIVISION"": ""pod""}.7"," ""geometry"": {""type"": ""Point"".9"," ""coordinates"": [-159.46496581999997", 21.90460205100004]}}," {""type"": ""Feature"".9"," ""properties"": {""OBJECTID"": 4694"," ""CENTROIDLAT"": null.10"," ""CENTROIDLONG"": null.10"," ""CLOSESTCITY"": ""PUNA"""," ""CONGRESSIONALDISTRICT"": ""02"".8"," ""COUNTY"": ""HAWAII"".1"," ""CURRENTOWNER"": null.6"," ""DODFUDSPROPERTYIDPK"": "" "".10"," ""ELIGIBILITY"": ""Eligible"".10"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62396"""," ""EPAREGION"": ""09"".10"," ""FEATUREDESCRIPTION"": null.10"," ""FEATURENAME"": ""KAPOHO TARGET AREA"""," ""FUDSINSTALLATIONID"": ""HI99799F390300"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0165"""," ""HASPROJECTS"": ""No"".6"," ""LATITUDE"": 19.49166667"," ""LONGITUDE"": -154.82527778"," ""MEDIAID"": null.10"," ""METADATAID"": null.10"," ""NOFURTHERACTION"": null.10"," ""PROJECTREQUIRED"": ""No"".6"," ""SDSID"": null.10"," ""SITEELIGIBILITY"": null.10"," ""STATE"": ""HI"".8"," ""STATUS"": ""Properties without projects"".6"," ""STATUSCODE"": ""Not on the NPL"".10"," ""USACEDISTRICT"": ""poh"".8"," ""FISCALYEAR"": ""2019"".10"," ""PROPERTY_HISTORY"": ""THE MILITARY USED THE PROJECT FOR A TARGET AREA; THE ARMY GRANTED THE NAVY PERMISSION TO USE THE TARGET AREA FROM JUNE 13"," 1945 - MAY 1956. """," ""USACEDIVISION"": ""pod""}.8"," ""geometry"": {""type"": ""Point"".10"," ""coordinates"": [-154.82519531299997", 19.49182128900003]}}," {""type"": ""Feature"".10"," ""properties"": {""OBJECTID"": 4735"," ""CENTROIDLAT"": null.11"," ""CENTROIDLONG"": null.11"," ""CLOSESTCITY"": ""POLOLU VALLEY"""," ""CONGRESSIONALDISTRICT"": ""02"".9"," ""COUNTY"": ""HAWAII"".2"," ""CURRENTOWNER"": null.7"," ""DODFUDSPROPERTYIDPK"": "" "".11"," ""ELIGIBILITY"": ""Eligible"".11"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62459"""," ""EPAREGION"": ""09"".11"," ""FEATUREDESCRIPTION"": null.11"," ""FEATURENAME"": ""POLOLU"""," ""FUDSINSTALLATIONID"": ""HI99799F401600"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0286"""," ""HASPROJECTS"": ""No"".7"," ""LATITUDE"": 20.16666667"," ""LONGITUDE"": -155.73333333"," ""MEDIAID"": null.11"," ""METADATAID"": null.11"," ""NOFURTHERACTION"": null.11"," ""PROJECTREQUIRED"": ""No"".7"," ""SDSID"": null.11"," ""SITEELIGIBILITY"": null.11"," ""STATE"": ""HI"".9"," ""STATUS"": ""Properties without projects"".7"," ""STATUSCODE"": ""Not on the NPL"".11"," ""USACEDISTRICT"": ""poh"".9"," ""FISCALYEAR"": ""2019"".11"," ""PROPERTY_HISTORY"": ""SITE WAS USED FOR AMPHIBIOUS AND JUNGLE TRAINING. NO \nEVIDENCE WAS FOUND FOR HAZARDOUS/TOXIC WASTES", OEW," AND \nUNSAFE DEBRIS.\n """," ""USACEDIVISION"": ""pod""}.9"," ""geometry"": {""type"": ""Point"".11"," ""coordinates"": [-155.73327636699997", 20.166809082000043]}}," {""type"": ""Feature"".11"," ""properties"": {""OBJECTID"": 5292"," ""CENTROIDLAT"": null.12"," ""CENTROIDLONG"": null.12"," ""CLOSESTCITY"": ""WAIPIO"""," ""CONGRESSIONALDISTRICT"": ""02"".10"," ""COUNTY"": ""HAWAII"".3"," ""CURRENTOWNER"": null.8"," ""DODFUDSPROPERTYIDPK"": "" "".12"," ""ELIGIBILITY"": ""Eligible"".12"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62349"""," ""EPAREGION"": ""09"".12"," ""FEATUREDESCRIPTION"": null.12"," ""FEATURENAME"": ""WAIPIO BOMBING TARGETS"""," ""FUDSINSTALLATIONID"": ""HI99799F379600"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0052"""," ""HASPROJECTS"": ""No"".8"," ""LATITUDE"": 20.91222222"," ""LONGITUDE"": -156.22083333"," ""MEDIAID"": null.12"," ""METADATAID"": null.12"," ""NOFURTHERACTION"": null.12"," ""PROJECTREQUIRED"": ""No"".8"," ""SDSID"": null.12"," ""SITEELIGIBILITY"": null.12"," ""STATE"": ""HI"".10"," ""STATUS"": ""Properties without projects"".8"," ""STATUSCODE"": ""Not on the NPL"".12"," ""USACEDISTRICT"": ""poh"".10"," ""FISCALYEAR"": ""2019"".12"," ""PROPERTY_HISTORY"": ""THE APPROXIMATELY 60-ACRE PROJECT SITE WAS USED BY THE ARMY OR NAVY FOR AERIAL BOMBING TARGET PRACTICE DURUNG WORLD WAR II. MILITARY PLANES DROPPED BOMBS AIMED AT TARGETS OF WHITE ROCKS SET IN A CIRCULAR PATTERN IN AN AREA RESIDENTS"," IT WAS INDICATED THE MILITARY DID NOT CLEAR THE AREA OF ANY DEBRIS OR ORDNANCE WHEN THE PRACTICE BOMBING ACTIVITIES CEASED. \r\n"""," ""USACEDIVISION"": ""pod""}.10"," ""geometry"": {""type"": ""Point"".12"," ""coordinates"": [-156.22076415999996", 20.91241455100004]}}," {""type"": ""Feature"".12"," ""properties"": {""OBJECTID"": 5310"," ""CENTROIDLAT"": null.13"," ""CENTROIDLONG"": null.13"," ""CLOSESTCITY"": ""ISLAND OF HAWAII"""," ""CONGRESSIONALDISTRICT"": ""02"".11"," ""COUNTY"": ""HAWAII"".4"," ""CURRENTOWNER"": ""PRIV: Estate of Richard Smart AKA Parker Ranch", Estate of Richard Smart AKA Parker Ranch," WH Shipman"""," ""DODFUDSPROPERTYIDPK"": "" "".13"," ""ELIGIBILITY"": ""Eligible"".13"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=53556"""," ""EPAREGION"": ""09"".13"," ""FEATUREDESCRIPTION"": null.13"," ""FEATURENAME"": ""BIG ISLAND BOMBING TARGETS"""," ""FUDSINSTALLATIONID"": ""HI99799FA10000"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0476"""," ""HASPROJECTS"": ""Yes"".4"," ""LATITUDE"": 20.235"," ""LONGITUDE"": -155.89277778"," ""MEDIAID"": null.13"," ""METADATAID"": null.13"," ""NOFURTHERACTION"": null.13"," ""PROJECTREQUIRED"": ""Yes"".4"," ""SDSID"": null.13"," ""SITEELIGIBILITY"": null.13"," ""STATE"": ""HI"".11"," ""STATUS"": ""Properties with projects"".1"," ""STATUSCODE"": ""Not on the NPL"".13"," ""USACEDISTRICT"": ""poh"".11"," ""FISCALYEAR"": ""2019"".13"," ""PROPERTY_HISTORY"": ""The sites were identified in the History of G-3"," Headquarters Army Forces Middle Pacific - Functions and Activities 7 December 1941 to 2 December 1945. No use has been made to the sites since the military occupation. The property is known or suspected to contain military munitions or unexploded ordnance and therefore may present an explosive hazard."""," ""USACEDIVISION"": ""pod""}.11"," ""geometry"": {""type"": ""Point"".13"," ""coordinates"": [-155.89270019499997", 20.23522949200003]}}," {""type"": ""Feature"".13"," ""properties"": {""OBJECTID"": 5832"," ""CENTROIDLAT"": null.14"," ""CENTROIDLONG"": null.14"," ""CLOSESTCITY"": ""NO CITY"".1"," ""CONGRESSIONALDISTRICT"": ""02"".12"," ""COUNTY"": ""MAUI"".2"," ""CURRENTOWNER"": null.9"," ""DODFUDSPROPERTYIDPK"": "" "".14"," ""ELIGIBILITY"": ""Eligible"".14"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54600"""," ""EPAREGION"": ""09"".14"," ""FEATUREDESCRIPTION"": null.14"," ""FEATURENAME"": ""KAILUA RADAR STATION"""," ""FUDSINSTALLATIONID"": ""HI99799F388700"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0147"""," ""HASPROJECTS"": ""No"".9"," ""LATITUDE"": 20.89083333"," ""LONGITUDE"": -156.2075"," ""MEDIAID"": null.14"," ""METADATAID"": null.14"," ""NOFURTHERACTION"": null.14"," ""PROJECTREQUIRED"": ""No"".9"," ""SDSID"": null.14"," ""SITEELIGIBILITY"": null.14"," ""STATE"": ""HI"".12"," ""STATUS"": ""Properties without projects"".9"," ""STATUSCODE"": ""Not on the NPL"".14"," ""USACEDISTRICT"": ""poh"".12"," ""FISCALYEAR"": ""2019"".14"," ""PROPERTY_HISTORY"": ""RECORDS ARE NOT AVAILABLE. PREVIOUS RECORDS SHOW THAT THE KAILUA RADAR STATION FACILITIES WERE CONSTRUCTED BY THE 2ND PLATOON", 581 ST SIGNAL CORPS AIRCRAFT WARNING SYSTEM," HAWAII IN 1942 AND WAS IN US E UNTIL SEPT. 1944 """," ""USACEDIVISION"": ""pod""}.12"," ""geometry"": {""type"": ""Point"".14"," ""coordinates"": [-156.20739746099997", 20.890991211000028]}}," {""type"": ""Feature"".14"," ""properties"": {""OBJECTID"": 6013"," ""CENTROIDLAT"": null.15"," ""CENTROIDLONG"": null.15"," ""CLOSESTCITY"": ""KOLOA"".1"," ""CONGRESSIONALDISTRICT"": ""02"".13"," ""COUNTY"": ""KAUAI"".3"," ""CURRENTOWNER"": null.10"," ""DODFUDSPROPERTYIDPK"": "" "".15"," ""ELIGIBILITY"": ""Eligible"".15"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=56908"""," ""EPAREGION"": ""09"".15"," ""FEATUREDESCRIPTION"": null.15"," ""FEATURENAME"": ""KOLOA BAKERY"""," ""FUDSINSTALLATIONID"": ""HI99799F392800"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0190"""," ""HASPROJECTS"": ""No"".10"," ""LATITUDE"": 21.905"," ""LONGITUDE"": -159.46444444"," ""MEDIAID"": null.15"," ""METADATAID"": null.15"," ""NOFURTHERACTION"": null.15"," ""PROJECTREQUIRED"": ""No"".10"," ""SDSID"": null.15"," ""SITEELIGIBILITY"": null.15"," ""STATE"": ""HI"".13"," ""STATUS"": ""Properties without projects"".10"," ""STATUSCODE"": ""Not on the NPL"".15"," ""USACEDISTRICT"": ""poh"".13"," ""FISCALYEAR"": ""2019"".15"," ""PROPERTY_HISTORY"": ""KOLOA BAKERY WAS ESTABLISHED BY THE ARMY IN MID-1942 AND WAS \nLOCATED ATTHE SOUTHEAST CORNER OF A 7.518-ACRE PARCEL. THE \nBAKERY WAS CONSUTRCTED BY THE U.S. ENGINEERING DISTRICT FOR \nTHE 72ND QUARTRE MASTER DISTRICT ON THE SITE OF A FORMER BALL \nPARK AND ADJACENT TO A 20-TON ICE PLANT. THE BAKERY \nSUPPLIES BETWEEN 15",000-25,000 LOAVES PER DAY AND CONSISTED \nOF A WOOD BUILDING, 500-LOAF OVEN, STOV ES," AND AN \nABOVEGROUND 500-GALLON DIESEL TANK BAKERY LATER CONVERTED \nTO A MARKET/RESTAURANT.\n"""," ""USACEDIVISION"": ""pod""}.13"," ""geometry"": {""type"": ""Point"".15"," ""coordinates"": [-159.46441650399998", 21.905212402000075]}}," {""type"": ""Feature"".15"," ""properties"": {""OBJECTID"": 6015"," ""CENTROIDLAT"": null.16"," ""CENTROIDLONG"": null.16"," ""CLOSESTCITY"": ""KALAHEO"".2"," ""CONGRESSIONALDISTRICT"": ""02"".14"," ""COUNTY"": ""KAUAI"".4"," ""CURRENTOWNER"": null.11"," ""DODFUDSPROPERTYIDPK"": "" "".16"," ""ELIGIBILITY"": ""Eligible"".16"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=56898"""," ""EPAREGION"": ""09"".16"," ""FEATUREDESCRIPTION"": null.16"," ""FEATURENAME"": ""1ST STATION HOSPITAL"""," ""FUDSINSTALLATIONID"": ""HI99799F382500"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0084"""," ""HASPROJECTS"": ""No"".11"," ""LATITUDE"": 21.9225"," ""LONGITUDE"": -159.52111111"," ""MEDIAID"": null.16"," ""METADATAID"": null.16"," ""NOFURTHERACTION"": null.16"," ""PROJECTREQUIRED"": ""No"".11"," ""SDSID"": null.16"," ""SITEELIGIBILITY"": null.16"," ""STATE"": ""HI"".14"," ""STATUS"": ""Properties without projects"".11"," ""STATUSCODE"": ""Not on the NPL"".16"," ""USACEDISTRICT"": ""poh"".14"," ""FISCALYEAR"": ""2019"".16"," ""PROPERTY_HISTORY"": ""SITE WAS COMMANDEERED TWO WEEKS AFATER PEARL HARBOR WAS \nATTAACKED AND LATER A LICENSE WAS GRANTED ON 28 MARCH 1942 \nFROM THE TERRITORY OF HAWAII. A 500-BED HOSPITAL WAS \nESTABLISHED AND THE 165TH DIV ISION WAS ASSIGNED TO OPERATE \nIT. FIVE BUILDINGS WERE CONVERTED IN A MESS HALL", \nAUDITORIUM, SURGICAL WARD, MEDIAL SUPPLIES STORAGE," AND \nPATIENT WARDS. QUARTERS WERE CONSTRCUTRED ALONG THE CAMPUS \n PERIMETER AND SIX-MEN TENTS WERE ERECTED. SITE WAS CLOSED \nIN 6/45 & TERMINATION OF LICENSE WAS 9/3"""," ""USACEDIVISION"": ""pod""}.14"," ""geometry"": {""type"": ""Point"".16"," ""coordinates"": [-159.52111816399997", 21.922607422000056]}}," {""type"": ""Feature"".16"," ""properties"": {""OBJECTID"": 6062"," ""CENTROIDLAT"": null.17"," ""CENTROIDLONG"": null.17"," ""CLOSESTCITY"": ""PUNALUU/KAHANA"""," ""CONGRESSIONALDISTRICT"": ""02"".15"," ""COUNTY"": ""HONOLULU"".2"," ""CURRENTOWNER"": ""STATE: STATE KAHANA IS A STATE OF HAWAII PARK. PUNALUU IS AN AGRICULTURAL COMMUNITY. PRIV: PRIVATE KAHANA IS A STATE OF HAWAII PARK. PUNALUU IS AN AGRICULTURAL COMMUNITY. """," ""DODFUDSPROPERTYIDPK"": "" "".17"," ""ELIGIBILITY"": ""Eligible"".17"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=56893"""," ""EPAREGION"": ""09"".17"," ""FEATUREDESCRIPTION"": null.17"," ""FEATURENAME"": ""PACIFIC JUNGLE COMBAT"""," ""FUDSINSTALLATIONID"": ""HI99799F400400"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""H09HI0274"""," ""HASPROJECTS"": ""Yes"".5"," ""LATITUDE"": 21.55416667"," ""LONGITUDE"": -157.90694444"," ""MEDIAID"": null.17"," ""METADATAID"": null.17"," ""NOFURTHERACTION"": null.17"," ""PROJECTREQUIRED"": ""Yes"".5"," ""SDSID"": null.17"," ""SITEELIGIBILITY"": null.17"," ""STATE"": ""HI"".15"," ""STATUS"": ""Properties with projects"".2"," ""STATUSCODE"": ""Not on the NPL"".17"," ""USACEDISTRICT"": ""poh"".15"," ""FISCALYEAR"": ""2019"".17"," ""PROPERTY_HISTORY"": ""The property", located in two valleys, began being used as a jungle training center in September 1943. The leases were terminated in August 1946 for Kahana Valley and between April 1945 and November 1950 for Punaluu Valley. Kahana Valley is now a state park and Punaluu is an agricultural community. The property is known or suspected to contain military munitions or unexploded ordnance and therefore may present an explosive hazard.\r\rThe real estate instruments evidencing Department of Defense possession of the property could not be found. However, a Tract Register and Audited Real Estate Map of the Pacific Jungle Combat Training Center was\rfound and is the basis for the property information below. \r\rThe property consisted of 2,209.77 acres which included forty-one tracts of land within the Kahana and Punaluu Valleys (Tax Map Key (TMK) 5-2-02 and 5-2-05:various parcels and TMK 5-3-01, 5-3-02, 5-3-04, 5-3-05, 5-3-07 and 5-3-11: various parcels). The Kahana and Punaluu Valleys are now Ahupuaa O Kahana State Park and an agricultural community, respectively.\r\rThe Army acquired 485.25 acres in Kahana Valley by license in November 1944 retroactive to May 1943. In neighboring Punaluu valley, the Army executed leases, licenses, and informal agreements between October 1943 and March 1947, with several instruments retroactive to October 1943, to acquire 1,724.52 acres. The Army established Pacific Jungle Combat Training Center (also known as the Unit Jungle Training Center/Instructors Jungle Training School) on 6 September 1943 for training in basic and advanced jungle warfare. Subjects taught included jungle first aid and evacuation; hand-to-hand combat; construction and passage of wire entanglements; booby traps and demolitions; patrolling and ambushing; hip shooting and infiltration; stream crossing expedients; assault with bayonets; assault of Japanese fortified areas; combat reaction proficiency; and jungle living.\r\rThe Army terminated the licenses for usage of Kahana Valley parcels on 31 August 1946. The Army terminated the leases, licenses.1," and informal permits comprising the various Punaluu Valley parcels beginning in April 1945 and concluding on 30 November 1950. Kahana Valley is presently under the purview of the Hawaii Department of Land and Natural Resources and was set aside as a state park in the 1960s. Punaluu Valley is owned by numerous small landowners and Kamehameha Schools/Bernice Pauahi Bishop Estate lessees engaged in the cultivation of diversified agricultural crops."""," ""USACEDIVISION"": ""pod""}.15"," ""geometry"": {""type"": ""Point"".17"," ""coordinates"": [-157.90679931599996", 21.554199219000054]}}," {""type"": ""Feature"".17"," ""properties"": {""OBJECTID"": 6974"," ""CENTROIDLAT"": null.18"," ""CENTROIDLONG"": null.18"," ""CLOSESTCITY"": ""SAN BENITO"""," ""CONGRESSIONALDISTRICT"": ""20"""," ""COUNTY"": ""SAN BENITO"""," ""CURRENTOWNER"": ""OTHER: OTHER Several local agencies use the site as the Call Mountain Mobile Radio Relay Facility."""," ""DODFUDSPROPERTYIDPK"": "" "".18"," ""ELIGIBILITY"": ""Eligible"".18"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=57284"""," ""EPAREGION"": ""09"".18"," ""FEATUREDESCRIPTION"": null.18"," ""FEATURENAME"": ""Call Mountain Radio Relay Annex"""," ""FUDSINSTALLATIONID"": ""CA99799F570500"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA0764"""," ""HASPROJECTS"": ""Yes"".6"," ""LATITUDE"": 36.61472222"," ""LONGITUDE"": -121.06777778"," ""MEDIAID"": null.18"," ""METADATAID"": null.18"," ""NOFURTHERACTION"": null.18"," ""PROJECTREQUIRED"": ""Yes"".6"," ""SDSID"": null.18"," ""SITEELIGIBILITY"": null.18"," ""STATE"": ""CA"".2"," ""STATUS"": ""Properties with all projects at site closeout"".3"," ""STATUSCODE"": ""Not on the NPL"".18"," ""USACEDISTRICT"": ""spk"".2"," ""FISCALYEAR"": ""2019"".18"," ""PROPERTY_HISTORY"": ""Prior to DoD use", the Site was open grazing land for livestock. Former Call Mountain Radio Relay Annex was established on 2 March 1955 as a radio relay station under the operational control of Mill Valley Air Force Station. The Site consisted of a concrete block radio relay and generator building and an antenna farm consisting of four 60-foot antenna poles on 0.84 acre of land. Documents on file at the National Archives and Records Administration in College Park, Maryland, indicated that the primary electrical power was supplied by the Pacific Gas and Electric Company, which installed 3 miles of pole line in order to provide this service at the Site; therefore, no underground storage tanks were installed. On 14 August 1958, the U.S. Air Force terminated its lease with the property owner. The Site is currently privately owned," and new buildings located on-Site are used as a radio relay and transmitter site for public safety agencies in San Benito County."""," ""USACEDIVISION"": ""spd""}.2"," ""geometry"": {""type"": ""Point"".18"," ""coordinates"": [-121.06768798799999", 36.61480712900004]}}," {""type"": ""Feature"".18"," ""properties"": {""OBJECTID"": 7018"," ""CENTROIDLAT"": null.19"," ""CENTROIDLONG"": null.19"," ""CLOSESTCITY"": ""PANAMINT SPRINGS"""," ""CONGRESSIONALDISTRICT"": ""08"""," ""COUNTY"": ""INYO"""," ""CURRENTOWNER"": null.12"," ""DODFUDSPROPERTYIDPK"": "" "".19"," ""ELIGIBILITY"": ""Eligible"".19"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=60971"""," ""EPAREGION"": ""09"".19"," ""FEATUREDESCRIPTION"": null.19"," ""FEATURENAME"": ""PANAMINT DRY LAKE TEST"""," ""FUDSINSTALLATIONID"": ""CA99799F533000"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA0127"""," ""HASPROJECTS"": ""No"".12"," ""LATITUDE"": 36.33333333"," ""LONGITUDE"": -117.39166667"," ""MEDIAID"": null.19"," ""METADATAID"": null.19"," ""NOFURTHERACTION"": null.19"," ""PROJECTREQUIRED"": ""No"".12"," ""SDSID"": null.19"," ""SITEELIGIBILITY"": null.19"," ""STATE"": ""CA"".3"," ""STATUS"": ""Properties without projects"".12"," ""STATUSCODE"": ""Not on the NPL"".19"," ""USACEDISTRICT"": ""spl"""," ""FISCALYEAR"": ""2019"".19"," ""PROPERTY_HISTORY"": ""THIS SITE WAS USED AS AN EMERGENCY LANDING AREA """," ""USACEDIVISION"": ""spd""}.3"," ""geometry"": {""type"": ""Point"".19"," ""coordinates"": [-117.391601563", 36.33343505900007]}}," {""type"": ""Feature"".19"," ""properties"": {""OBJECTID"": 7046"," ""CENTROIDLAT"": null.20"," ""CENTROIDLONG"": null.20"," ""CLOSESTCITY"": ""KEELER"""," ""CONGRESSIONALDISTRICT"": ""08"".1"," ""COUNTY"": ""INYO"".1"," ""CURRENTOWNER"": null.13"," ""DODFUDSPROPERTYIDPK"": "" "".20"," ""ELIGIBILITY"": ""Ineligible"""," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54232"""," ""EPAREGION"": ""09"".20"," ""FEATUREDESCRIPTION"": null.20"," ""FEATURENAME"": ""KEELER SODA PLANT"""," ""FUDSINSTALLATIONID"": ""CA99799FA02200"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7199"""," ""HASPROJECTS"": ""No"".13"," ""LATITUDE"": 36.46944444"," ""LONGITUDE"": -117.85555556"," ""MEDIAID"": null.20"," ""METADATAID"": null.20"," ""NOFURTHERACTION"": null.20"," ""PROJECTREQUIRED"": ""No"".13"," ""SDSID"": null.20"," ""SITEELIGIBILITY"": null.20"," ""STATE"": ""CA"".4"," ""STATUS"": ""Properties without projects"".13"," ""STATUSCODE"": ""Not on the NPL"".20"," ""USACEDISTRICT"": ""spl"".1"," ""FISCALYEAR"": ""2019"".20"," ""PROPERTY_HISTORY"": ""N/A\r\n"""," ""USACEDIVISION"": ""spd""}.4"," ""geometry"": {""type"": ""Point"".20"," ""coordinates"": [-117.85546874999994", 36.46960449200003]}}," {""type"": ""Feature"".20"," ""properties"": {""OBJECTID"": 7428"," ""CENTROIDLAT"": null.21"," ""CENTROIDLONG"": null.21"," ""CLOSESTCITY"": ""SACRAMENTO"""," ""CONGRESSIONALDISTRICT"": ""04"".2"," ""COUNTY"": ""SACRAMENTO"".1"," ""CURRENTOWNER"": null.14"," ""DODFUDSPROPERTYIDPK"": "" "".21"," ""ELIGIBILITY"": ""Eligible"".20"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=53883"""," ""EPAREGION"": ""09"".21"," ""FEATUREDESCRIPTION"": null.21"," ""FEATURENAME"": ""McClellan AFB Outer Marker"""," ""FUDSINSTALLATIONID"": ""CA99799F523100"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA0010"""," ""HASPROJECTS"": ""No"".14"," ""LATITUDE"": 38.75138889"," ""LONGITUDE"": -121.40027778.1"," ""MEDIAID"": null.21"," ""METADATAID"": null.21"," ""NOFURTHERACTION"": null.21"," ""PROJECTREQUIRED"": ""No"".14"," ""SDSID"": null.21"," ""SITEELIGIBILITY"": null.21"," ""STATE"": ""CA"".5"," ""STATUS"": ""Properties without projects"".14"," ""STATUSCODE"": ""Not on the NPL"".21"," ""USACEDISTRICT"": ""spk"".3"," ""FISCALYEAR"": ""2019"".21"," ""PROPERTY_HISTORY"": ""On 14 April 1952", the Department of Defense (DoD) acquired a total of 0.43 acre, including 0.26 acre in fee and 0.17 acre in easement from private interests. The DoD constructed a communications equipment building and an access road, and installed two electric utility poles and 436 linear feet of chain link fence. The site was used as an instrument landing facility in support of McClellan Air Force Base (AFB). On 25 September 1978, the 0.43 acre was reported as excess to the General Services Administration," who conveyed 0.26 acre in fee and 0.17 acre in easement to Jack Garfield on 22 June 1979. No hazards have been identified related to former Department of Defense activities."""," ""USACEDIVISION"": ""spd""}.5"," ""geometry"": {""type"": ""Point"".21"," ""coordinates"": [-121.40020751999998.1", 38.75158691400003]}}," {""type"": ""Feature"".21"," ""properties"": {""OBJECTID"": 7565"," ""CENTROIDLAT"": null.22"," ""CENTROIDLONG"": null.22"," ""CLOSESTCITY"": ""PINTO PEAK"""," ""CONGRESSIONALDISTRICT"": ""08"".2"," ""COUNTY"": ""INYO"".2"," ""CURRENTOWNER"": null.15"," ""DODFUDSPROPERTYIDPK"": "" "".22"," ""ELIGIBILITY"": ""Ineligible"".1"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=63165"""," ""EPAREGION"": ""09"".22"," ""FEATUREDESCRIPTION"": null.22"," ""FEATURENAME"": ""PINTO PEAK"""," ""FUDSINSTALLATIONID"": ""CA99799FA45600"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7429"""," ""HASPROJECTS"": ""No"".15"," ""LATITUDE"": 36.3875"," ""LONGITUDE"": -117.23527778"," ""MEDIAID"": null.22"," ""METADATAID"": null.22"," ""NOFURTHERACTION"": null.22"," ""PROJECTREQUIRED"": ""No"".15"," ""SDSID"": null.22"," ""SITEELIGIBILITY"": null.22"," ""STATE"": ""CA"".6"," ""STATUS"": ""Properties without projects"".15"," ""STATUSCODE"": ""Not on the NPL"".22"," ""USACEDISTRICT"": ""spl"".2"," ""FISCALYEAR"": ""2019"".22"," ""PROPERTY_HISTORY"": ""N/A\r\n"".1"," ""USACEDIVISION"": ""spd""}.6"," ""geometry"": {""type"": ""Point"".22"," ""coordinates"": [-117.23529052699996", 36.387634277000075]}}," {""type"": ""Feature"".22"," ""properties"": {""OBJECTID"": 7689"," ""CENTROIDLAT"": null.23"," ""CENTROIDLONG"": null.23"," ""CLOSESTCITY"": ""INDEPENDENCE"""," ""CONGRESSIONALDISTRICT"": ""08"".3"," ""COUNTY"": ""INYO"".3"," ""CURRENTOWNER"": ""OTHER: OTHER CITY OF LOS ANGELES AND THE DEPT OF THE INTERIOR (NATIONAL \nPARKS SERVICE).\n """," ""DODFUDSPROPERTYIDPK"": "" "".23"," ""ELIGIBILITY"": ""Eligible"".21"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62560"""," ""EPAREGION"": ""09"".23"," ""FEATUREDESCRIPTION"": null.23"," ""FEATURENAME"": ""CAMP MANZANAR"""," ""FUDSINSTALLATIONID"": ""CA99799F743900"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA0137"""," ""HASPROJECTS"": ""Yes"".7"," ""LATITUDE"": 36.725"," ""LONGITUDE"": -118.15277778"," ""MEDIAID"": null.23"," ""METADATAID"": null.23"," ""NOFURTHERACTION"": null.23"," ""PROJECTREQUIRED"": ""Yes"".7"," ""SDSID"": null.23"," ""SITEELIGIBILITY"": null.23"," ""STATE"": ""CA"".7"," ""STATUS"": ""Properties with all projects at site closeout"".4"," ""STATUSCODE"": ""Not on the NPL"".23"," ""USACEDISTRICT"": ""spl"".3"," ""FISCALYEAR"": ""2019"".23"," ""PROPERTY_HISTORY"": ""In March 1942", the Wartime Civilian Control Administration (WAA), under the direction of the Western Defense Command - Fourth Army, requested the South Pacific Division of the United States Engineer Corps to construct suitable facilities at Manzanar to receive voluntary and forced Japanese American internees from the west coast of the United States. Using Army and Japanese American labor, approximately 825 buildings and structures were constructed. These included 445 barracks, 30 recreation halls, 32 mess halls, male and female latrines, and laundry facilities. Other improvements included an administration building, an auditorium, 37 warehouses, 8 observation towers, 2 sentry houses, police headquarters, and maintenance facilities. Hospital facilities and an orphanage were also provided. All of these facilities were constructed of wood, covered with tar paper, and situated on approximately 670 acres of the site. Other facilities on the remainder of the site included a 600,000 gallon reservoir, irrigation improvements, water and sewage treatment facilities," hog pens and chicken houses."""," ""USACEDIVISION"": ""spd""}.7"," ""geometry"": {""type"": ""Point"".23"," ""coordinates"": [-118.15270996099997", 36.725219727000024]}}," {""type"": ""Feature"".23"," ""properties"": {""OBJECTID"": 7691"," ""CENTROIDLAT"": null.24"," ""CENTROIDLONG"": null.24"," ""CLOSESTCITY"": ""LONE PINE"""," ""CONGRESSIONALDISTRICT"": ""08"".4"," ""COUNTY"": ""INYO"".4"," ""CURRENTOWNER"": ""LOCAL: CITY RESIDENTIAL PRIV: PRIVATE RESIDENTIAL """," ""DODFUDSPROPERTYIDPK"": "" "".24"," ""ELIGIBILITY"": ""Eligible"".22"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=62589"""," ""EPAREGION"": ""09"".24"," ""FEATUREDESCRIPTION"": null.24"," ""FEATURENAME"": ""MT. WHITNEY MILITARY RESERVATION"""," ""FUDSINSTALLATIONID"": ""CA99799F744000"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA0138"""," ""HASPROJECTS"": ""Yes"".8"," ""LATITUDE"": 36.56666667"," ""LONGITUDE"": -118.13888889"," ""MEDIAID"": null.24"," ""METADATAID"": null.24"," ""NOFURTHERACTION"": null.24"," ""PROJECTREQUIRED"": ""Yes"".8"," ""SDSID"": null.24"," ""SITEELIGIBILITY"": null.24"," ""STATE"": ""CA"".8"," ""STATUS"": ""Properties with all projects at site closeout"".5"," ""STATUSCODE"": ""Not on the NPL"".24"," ""USACEDISTRICT"": ""spl"".4"," ""FISCALYEAR"": ""2019"".24"," ""PROPERTY_HISTORY"": ""N/A\r\n"".2"," ""USACEDIVISION"": ""spd""}.8"," ""geometry"": {""type"": ""Point"".24"," ""coordinates"": [-118.13891601599994", 36.56683349600007]}}," {""type"": ""Feature"".24"," ""properties"": {""OBJECTID"": 7831"," ""CENTROIDLAT"": null.25"," ""CENTROIDLONG"": null.25"," ""CLOSESTCITY"": ""DEATH VALLEY NATIONAL PARK"""," ""CONGRESSIONALDISTRICT"": ""08"".5"," ""COUNTY"": ""INYO"".5"," ""CURRENTOWNER"": null.16"," ""DODFUDSPROPERTYIDPK"": "" "".25"," ""ELIGIBILITY"": ""Ineligible"".2"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=63099"""," ""EPAREGION"": ""09"".25"," ""FEATUREDESCRIPTION"": null.25"," ""FEATURENAME"": ""DEATH VALLEY NATIONAL PARK"""," ""FUDSINSTALLATIONID"": ""CA99799FA39000"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7363"""," ""HASPROJECTS"": ""No"".16"," ""LATITUDE"": 36.78333333"," ""LONGITUDE"": -117.31111111"," ""MEDIAID"": null.25"," ""METADATAID"": null.25"," ""NOFURTHERACTION"": null.25"," ""PROJECTREQUIRED"": ""No"".16"," ""SDSID"": null.25"," ""SITEELIGIBILITY"": null.25"," ""STATE"": ""CA"".9"," ""STATUS"": ""Properties without projects"".16"," ""STATUSCODE"": ""Not on the NPL"".25"," ""USACEDISTRICT"": ""spl"".5"," ""FISCALYEAR"": ""2019"".25"," ""PROPERTY_HISTORY"": ""Various aircraft crash sites identified all reside within the boundaries of Death Valley National Park. which consists of 3",336,"000 acres of land. \r\rThe Park area ha been used by the U.S. Armed forces for pracice flighs and maneuvers throughout its history. Records indicate that this practice was intensified during WWII and continues today. Information collected identified a total of 20 crash sites and potentially associated with the Department of Defense within the Park boundaries."""," ""USACEDIVISION"": ""spd""}.9"," ""geometry"": {""type"": ""Point"".25"," ""coordinates"": [-117.311096191", 36.783386230000076]}}," {""type"": ""Feature"".25"," ""properties"": {""OBJECTID"": 7866"," ""CENTROIDLAT"": null.26"," ""CENTROIDLONG"": null.26"," ""CLOSESTCITY"": ""OLANCHA"""," ""CONGRESSIONALDISTRICT"": ""08"".6"," ""COUNTY"": ""INYO"".6"," ""CURRENTOWNER"": null.17"," ""DODFUDSPROPERTYIDPK"": "" "".26"," ""ELIGIBILITY"": ""Eligible"".23"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=63160"""," ""EPAREGION"": ""09"".26"," ""FEATUREDESCRIPTION"": null.26"," ""FEATURENAME"": ""OLANCHA AIRFIELD"""," ""FUDSINSTALLATIONID"": ""CA99799FA45100"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7424"""," ""HASPROJECTS"": ""No"".17"," ""LATITUDE"": 36.28361111"," ""LONGITUDE"": -118.00027778"," ""MEDIAID"": null.26"," ""METADATAID"": null.26"," ""NOFURTHERACTION"": null.26"," ""PROJECTREQUIRED"": ""No"".17"," ""SDSID"": null.26"," ""SITEELIGIBILITY"": null.26"," ""STATE"": ""CA"".10"," ""STATUS"": ""Properties without projects"".17"," ""STATUSCODE"": ""Not on the NPL"".26"," ""USACEDISTRICT"": ""spl"".6"," ""FISCALYEAR"": ""2019"".26"," ""PROPERTY_HISTORY"": "" OLANCHA AIRFIELD WAS ESTABLISHED IN THE EARLY 1930'S ON AN ESTIMATED 100 ACRES OF PRIVATELY OWNED \r\nLAND. THE AIRFIELD "," WAS A DIRT LANDING STRIP. FUEL WAS PUMPED BY HAND FROM 55-GALLON DRUMS. THE AIRFIELD SERVED THE \r\nPUBLIC VISITING THE AREA FOR RECREATION THROUGH THE 1930'S AND 1940S. THE AIRFIELD WAS CLOSED IN 1950 FOLLOWING A PERIOD \r\nOF INFREQUENT USE AND THE SITE IS NOW COMMERCIALLY DEVELOPED. THERE IS NO EVIDENCE OF THE FORMER AIRFIELD AT THE SITE.\r\n"""," ""USACEDIVISION"": ""spd""}.10"," ""geometry"": {""type"": ""Point"".26"," ""coordinates"": [-118.00030517599998", 36.283813477000024]}}," {""type"": ""Feature"".26"," ""properties"": {""OBJECTID"": 7977"," ""CENTROIDLAT"": null.27"," ""CENTROIDLONG"": null.27"," ""CLOSESTCITY"": ""DEATH VALLEY"""," ""CONGRESSIONALDISTRICT"": ""08"".7"," ""COUNTY"": ""INYO"".7"," ""CURRENTOWNER"": null.18"," ""DODFUDSPROPERTYIDPK"": "" "".27"," ""ELIGIBILITY"": ""Eligible"".24"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=63103"""," ""EPAREGION"": ""09"".27"," ""FEATUREDESCRIPTION"": null.27"," ""FEATURENAME"": ""FURNANCE CREEK AIRPORT(OLD AIRPORT)"""," ""FUDSINSTALLATIONID"": ""CA99799FA39400"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7367"""," ""HASPROJECTS"": ""No"".18"," ""LATITUDE"": 36.46111111"," ""LONGITUDE"": -116.8625"," ""MEDIAID"": null.27"," ""METADATAID"": null.27"," ""NOFURTHERACTION"": null.27"," ""PROJECTREQUIRED"": ""No"".18"," ""SDSID"": null.27"," ""SITEELIGIBILITY"": null.27"," ""STATE"": ""CA"".11"," ""STATUS"": ""Properties without projects"".18"," ""STATUSCODE"": ""Not on the NPL"".27"," ""USACEDISTRICT"": ""spl"".7"," ""FISCALYEAR"": ""2019"".27"," ""PROPERTY_HISTORY"": ""N/A\r\n"".3"," ""USACEDIVISION"": ""spd""}.11"," ""geometry"": {""type"": ""Point"".27"," ""coordinates"": [-116.86248779299996", 36.46124267600004]}}," {""type"": ""Feature"".27"," ""properties"": {""OBJECTID"": 8235"," ""CENTROIDLAT"": null.28"," ""CENTROIDLONG"": null.28"," ""CLOSESTCITY"": ""STOVEPIPE WELLS"""," ""CONGRESSIONALDISTRICT"": ""08"".8"," ""COUNTY"": ""INYO"".8"," ""CURRENTOWNER"": null.19"," ""DODFUDSPROPERTYIDPK"": "" "".28"," ""ELIGIBILITY"": ""Ineligible"".3"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=63184"""," ""EPAREGION"": ""09"".28"," ""FEATUREDESCRIPTION"": null.28"," ""FEATURENAME"": ""STOVEPIPE WELLS AIRPORT"""," ""FUDSINSTALLATIONID"": ""CA99799FA47400"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7448"""," ""HASPROJECTS"": ""No"".19"," ""LATITUDE"": 36.60666667"," ""LONGITUDE"": -117.16416667"," ""MEDIAID"": null.28"," ""METADATAID"": null.28"," ""NOFURTHERACTION"": null.28"," ""PROJECTREQUIRED"": ""No"".19"," ""SDSID"": null.28"," ""SITEELIGIBILITY"": null.28"," ""STATE"": ""CA"".12"," ""STATUS"": ""Properties without projects"".19"," ""STATUSCODE"": ""Not on the NPL"".28"," ""USACEDISTRICT"": ""spl"".8"," ""FISCALYEAR"": ""2019"".28"," ""PROPERTY_HISTORY"": ""Information on Stovepipe Wells Airport is scant. The earliest written reference to the airport is a map of the California Arizona Maneuver Area", Map No 238," titled \""General Map\""", December 1942, which shows Stovepipe Wells Airport as an intermediate landing field. Although this 1942 map shows Stovepipe Wells Airport, a later map published in 1944 does not show an airport at Stovepipe Wells. There is no listing for the airport in general aviation directories through 1948. The listing of the airport on a 1942 map and its absence from general airport directories through 1948, suggest that it was an infrequently used dirt strip until 1947, when the Stovepipe Wells Hotel was sold to a Mr. George Putman. Mr. Putman succeeded in constructing two short runways on his property, despite objections from the Director of the Department of the Interior. Since the establishment of Death Valley National Monument in 193 3, the privately owned Stovepipe Wells Hotel has accommodated visitors to the area in competition with Furnace Creek Inn and Ranch, and the airport, for years a dirt landing strip, served to attract visitors who arrived by plane. Stovepipe Wells Airport was privately owned and operated until 1978, when ownership was transferred to the National Park Service," which has since operated the airport. The airport is currently used by the National Park Service and by visitors entering Death Valley National Park at Stovepipe Wells in light planes.\r\n"""," ""USACEDIVISION"": ""spd""}.12"," ""geometry"": {""type"": ""Point"".28"," ""coordinates"": [-117.16418456999997", 36.60681152300003]}}," {""type"": ""Feature"".28"," ""properties"": {""OBJECTID"": 8237"," ""CENTROIDLAT"": null.29"," ""CENTROIDLONG"": null.29"," ""CLOSESTCITY"": ""TELESCOPE PEAK"""," ""CONGRESSIONALDISTRICT"": ""08"".9"," ""COUNTY"": ""INYO"".9"," ""CURRENTOWNER"": null.20"," ""DODFUDSPROPERTYIDPK"": "" "".29"," ""ELIGIBILITY"": ""Ineligible"".4"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=63186"""," ""EPAREGION"": ""09"".29"," ""FEATUREDESCRIPTION"": null.29"," ""FEATURENAME"": ""TELESCOPE PEAK"""," ""FUDSINSTALLATIONID"": ""CA99799FA47600"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7450"""," ""HASPROJECTS"": ""No"".20"," ""LATITUDE"": 36.15833333"," ""LONGITUDE"": -117.06944444"," ""MEDIAID"": null.29"," ""METADATAID"": null.29"," ""NOFURTHERACTION"": null.29"," ""PROJECTREQUIRED"": ""No"".20"," ""SDSID"": null.29"," ""SITEELIGIBILITY"": null.29"," ""STATE"": ""CA"".13"," ""STATUS"": ""Properties without projects"".20"," ""STATUSCODE"": ""Not on the NPL"".29"," ""USACEDISTRICT"": ""spl"".9"," ""FISCALYEAR"": ""2019"".29"," ""PROPERTY_HISTORY"": ""N/A\r\n"".4"," ""USACEDIVISION"": ""spd""}.13"," ""geometry"": {""type"": ""Point"".29"," ""coordinates"": [-117.06939697299998", 36.158386230000076]}}," {""type"": ""Feature"".29"," ""properties"": {""OBJECTID"": 8499"," ""CENTROIDLAT"": null.30"," ""CENTROIDLONG"": null.30"," ""CLOSESTCITY"": ""KEELER"".1"," ""CONGRESSIONALDISTRICT"": ""08"".10"," ""COUNTY"": ""INYO"".10"," ""CURRENTOWNER"": null.21"," ""DODFUDSPROPERTYIDPK"": "" "".30"," ""ELIGIBILITY"": ""Ineligible"".5"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=53990"""," ""EPAREGION"": ""09"".30"," ""FEATUREDESCRIPTION"": null.30"," ""FEATURENAME"": ""KEELER TALC PLANT"""," ""FUDSINSTALLATIONID"": ""CA99799FA02100"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7198"""," ""HASPROJECTS"": ""No"".21"," ""LATITUDE"": 36.4875"," ""LONGITUDE"": -117.87361111"," ""MEDIAID"": null.30"," ""METADATAID"": null.30"," ""NOFURTHERACTION"": null.30"," ""PROJECTREQUIRED"": ""No"".21"," ""SDSID"": null.30"," ""SITEELIGIBILITY"": null.30"," ""STATE"": ""CA"".14"," ""STATUS"": ""Properties without projects"".21"," ""STATUSCODE"": ""Not on the NPL"".30"," ""USACEDISTRICT"": ""spl"".10"," ""FISCALYEAR"": ""2019"".30"," ""PROPERTY_HISTORY"": ""N/A\r\n"".5"," ""USACEDIVISION"": ""spd""}.14"," ""geometry"": {""type"": ""Point"".30"," ""coordinates"": [-117.873596191", 36.487609863000046]}}," {""type"": ""Feature"".30"," ""properties"": {""OBJECTID"": 8500"," ""CENTROIDLAT"": null.31"," ""CENTROIDLONG"": null.31"," ""CLOSESTCITY"": ""SE OF INDEPENDENCE"""," ""CONGRESSIONALDISTRICT"": ""08"".11"," ""COUNTY"": ""KERN"""," ""CURRENTOWNER"": null.22"," ""DODFUDSPROPERTYIDPK"": "" "".31"," ""ELIGIBILITY"": ""Ineligible"".6"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=53989"""," ""EPAREGION"": ""09"".31"," ""FEATUREDESCRIPTION"": null.31"," ""FEATURENAME"": ""DEATH VALLEY SALT PLANT"""," ""FUDSINSTALLATIONID"": ""CA99799FA02400"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7201"""," ""HASPROJECTS"": ""No"".22"," ""LATITUDE"": 36.28333333"," ""LONGITUDE"": -116.82972222"," ""MEDIAID"": null.31"," ""METADATAID"": null.31"," ""NOFURTHERACTION"": null.31"," ""PROJECTREQUIRED"": ""No"".22"," ""SDSID"": null.31"," ""SITEELIGIBILITY"": null.31"," ""STATE"": ""CA"".15"," ""STATUS"": ""Properties without projects"".22"," ""STATUSCODE"": ""Not on the NPL"".31"," ""USACEDISTRICT"": ""spl"".11"," ""FISCALYEAR"": ""2019"".31"," ""PROPERTY_HISTORY"": ""N/A\r\n"".6"," ""USACEDIVISION"": ""spd""}.15"," ""geometry"": {""type"": ""Point"".31"," ""coordinates"": [-116.82971191399997", 36.283386230000076]}}," {""type"": ""Feature"".31"," ""properties"": {""OBJECTID"": 8557"," ""CENTROIDLAT"": null.32"," ""CENTROIDLONG"": null.32"," ""CLOSESTCITY"": ""BALLARAT DRY LAKE"""," ""CONGRESSIONALDISTRICT"": ""08"".12"," ""COUNTY"": ""INYO"".11"," ""CURRENTOWNER"": null.23"," ""DODFUDSPROPERTYIDPK"": "" "".32"," ""ELIGIBILITY"": ""Eligible"".25"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=53852"""," ""EPAREGION"": ""09"".32"," ""FEATUREDESCRIPTION"": null.32"," ""FEATURENAME"": ""PANAMINT FLAT DRY LAKE"""," ""FUDSINSTALLATIONID"": ""CA99799F535900"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA0231"""," ""HASPROJECTS"": ""No"".23"," ""LATITUDE"": 35.95833333"," ""LONGITUDE"": -117.21666667"," ""MEDIAID"": null.32"," ""METADATAID"": null.32"," ""NOFURTHERACTION"": null.32"," ""PROJECTREQUIRED"": ""No"".23"," ""SDSID"": null.32"," ""SITEELIGIBILITY"": null.32"," ""STATE"": ""CA"".16"," ""STATUS"": ""Properties without projects"".23"," ""STATUSCODE"": ""Not on the NPL"".32"," ""USACEDISTRICT"": ""spl"".12"," ""FISCALYEAR"": ""2019"".32"," ""PROPERTY_HISTORY"": ""THIS SITE WAS AN EMERGENCY LANDING SITE FOR X-15 AIRCRAFT. """," ""USACEDIVISION"": ""spd""}.16"," ""geometry"": {""type"": ""Point"".32"," ""coordinates"": [-117.21667480499997", 35.95843505900007]}}," {""type"": ""Feature"".32"," ""properties"": {""OBJECTID"": 8624"," ""CENTROIDLAT"": null.33"," ""CENTROIDLONG"": null.33"," ""CLOSESTCITY"": ""LONE PINE"".1"," ""CONGRESSIONALDISTRICT"": ""08"".13"," ""COUNTY"": ""INYO"".12"," ""CURRENTOWNER"": null.24"," ""DODFUDSPROPERTYIDPK"": "" "".33"," ""ELIGIBILITY"": ""Ineligible"".7"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54233"""," ""EPAREGION"": ""09"".33"," ""FEATUREDESCRIPTION"": null.33"," ""FEATURENAME"": ""LONE PINE AIRPORT"""," ""FUDSINSTALLATIONID"": ""CA99799FA02000"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7197"""," ""HASPROJECTS"": ""No"".24"," ""LATITUDE"": 36.59472222"," ""LONGITUDE"": -118.05"," ""MEDIAID"": null.33"," ""METADATAID"": null.33"," ""NOFURTHERACTION"": null.33"," ""PROJECTREQUIRED"": ""No"".24"," ""SDSID"": null.33"," ""SITEELIGIBILITY"": null.33"," ""STATE"": ""CA"".17"," ""STATUS"": ""Properties without projects"".24"," ""STATUSCODE"": ""Not on the NPL"".33"," ""USACEDISTRICT"": ""spl"".13"," ""FISCALYEAR"": ""2019"".33"," ""PROPERTY_HISTORY"": ""THE DEPARTMENT OF THE DEFENSE (DOD) IS NOT KNOWN TO HAVE ACQUIRED NOR HAVE ANY CONTROLLING INTEREST IN LONE PINE AIRPORT. THE DOD IS NOT KNOW TO HAVE CONSTRUCTED ANY FACILITIES AT EHT AIRPORT.\r\n\r\n\r\n"""," ""USACEDIVISION"": ""spd""}.17"," ""geometry"": {""type"": ""Point"".33"," ""coordinates"": [-118.04998779299996", 36.59478759800004]}}," {""type"": ""Feature"".33"," ""properties"": {""OBJECTID"": 8742"," ""CENTROIDLAT"": null.34"," ""CENTROIDLONG"": null.34"," ""CLOSESTCITY"": ""PANAMINT MOUNTAINS"""," ""CONGRESSIONALDISTRICT"": ""08"".14"," ""COUNTY"": ""INYO"".13"," ""CURRENTOWNER"": null.25"," ""DODFUDSPROPERTYIDPK"": "" "".34"," ""ELIGIBILITY"": ""Ineligible"".8"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=53467"""," ""EPAREGION"": ""09"".34"," ""FEATUREDESCRIPTION"": null.34"," ""FEATURENAME"": ""PANAMINT BOMBING & AERIAL GUNNERY RANGE"""," ""FUDSINSTALLATIONID"": ""CA99799FA33400"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7314"""," ""HASPROJECTS"": ""No"".25"," ""LATITUDE"": 36.27777778"," ""LONGITUDE"": -117.03583333"," ""MEDIAID"": null.34"," ""METADATAID"": null.34"," ""NOFURTHERACTION"": null.34"," ""PROJECTREQUIRED"": ""No"".25"," ""SDSID"": null.34"," ""SITEELIGIBILITY"": null.34"," ""STATE"": ""CA"".18"," ""STATUS"": ""Properties without projects"".25"," ""STATUSCODE"": ""Not on the NPL"".34"," ""USACEDISTRICT"": ""spl"".14"," ""FISCALYEAR"": ""2019"".34"," ""PROPERTY_HISTORY"": ""N/A\r\n"".7"," ""USACEDIVISION"": ""spd""}.18"," ""geometry"": {""type"": ""Point"".34"," ""coordinates"": [-117.03576660199997", 36.27801513700007]}}," {""type"": ""Feature"".34"," ""properties"": {""OBJECTID"": 9012"," ""CENTROIDLAT"": null.35"," ""CENTROIDLONG"": null.35"," ""CLOSESTCITY"": ""7 MILES E OF TECOPA"""," ""CONGRESSIONALDISTRICT"": ""08"".15"," ""COUNTY"": ""INYO"".14"," ""CURRENTOWNER"": null.26"," ""DODFUDSPROPERTYIDPK"": "" "".35"," ""ELIGIBILITY"": ""Ineligible"".9"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=53984"""," ""EPAREGION"": ""09"".35"," ""FEATUREDESCRIPTION"": null.35"," ""FEATURENAME"": ""SHOSHONE LEAD MINES"""," ""FUDSINSTALLATIONID"": ""CA99799FA03200"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7209"""," ""HASPROJECTS"": ""No"".26"," ""LATITUDE"": 35.83361111"," ""LONGITUDE"": -116.10027778"," ""MEDIAID"": null.35"," ""METADATAID"": null.35"," ""NOFURTHERACTION"": null.35"," ""PROJECTREQUIRED"": ""No"".26"," ""SDSID"": null.35"," ""SITEELIGIBILITY"": null.35"," ""STATE"": ""CA"".19"," ""STATUS"": ""Properties without projects"".26"," ""STATUSCODE"": ""Not on the NPL"".35"," ""USACEDISTRICT"": ""spl"".15"," ""FISCALYEAR"": ""2019"".35"," ""PROPERTY_HISTORY"": ""DEVELOPMENT OF THE SHOSHONE LEAD MINES BEGAN IN THE EARLY 1900S. THE PROPERTY HAS BEEN UNDER PRIVATE CONTROL FROM 1907 TO THE PRESENT DAY THROUGH PATENTED MINING CLAIMS. THE SHOSHONE MINE SITE COMPRISES 18 PATENTED AND 41 UNPATENTED CLAIMS AND SEVERAL MILL SITES ABOUT SEVEN MILES EAST OF TECOPA", INYO COUNTY, CALIFORNIA. THE INDIVIDUAL MINES INCLUDE THE ALEXANDER, APEX CONSTRUCTION, BLACK PRINCE, COLUMBIA NO. 2, GRANT, GUNSIGHT, MABEL, NOONDAY, ORO FINO, RAINBOW, AND WAR EAGLE MINES. TECOPA CONSOLIDATED MINING OWNED AND FIRST OPERATED SHOSHONE MINES FROM 1907 TO 1938. THE PROPERTY WAS PURCHASED BY SHOSHONE MINES INC, IN 1940, BY THE FINLEY COMPANY (SHOSHONE DIVISION) IN MAY 1945, AND BY THE ANACONDA COPPER MINING COMPANY IN JUNE 1947. THE MINES WERE CLOSED AFTER 1956 WHEN EXPLORATION FAILED TO DEVELOP FURTHER HIGH-GRADE RESERVES. THE CURRENT OWNERS OF THE MINES ARE LISTED BY THE INYO COUNTY ASSESSORS OFFICE AS MARSHFIELD DEVELOPMENT INC., BOX 2182, SALEM," OREGON 97308.\r\n"""," ""USACEDIVISION"": ""spd""}.19"," ""geometry"": {""type"": ""Point"".35"," ""coordinates"": [-116.10028076199995", 35.83380127000004]}}," {""type"": ""Feature"".35"," ""properties"": {""OBJECTID"": 9035"," ""CENTROIDLAT"": null.36"," ""CENTROIDLONG"": null.36"," ""CLOSESTCITY"": ""CHINA LAKE NAVAL WEAPONS CENTER"""," ""CONGRESSIONALDISTRICT"": ""08"".16"," ""COUNTY"": ""INYO"".15"," ""CURRENTOWNER"": null.27"," ""DODFUDSPROPERTYIDPK"": "" "".36"," ""ELIGIBILITY"": ""Eligible"".26"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=53986"""," ""EPAREGION"": ""09"".36"," ""FEATUREDESCRIPTION"": null.36"," ""FEATURENAME"": ""NAVAL ORDNANCE TEST STATION"""," ""FUDSINSTALLATIONID"": ""CA99799FA03300"""," ""FUDSUNIQUEPROPERTYNUMBER"": ""J09CA7210"""," ""HASPROJECTS"": ""Yes"".9"," ""LATITUDE"": 36.1441"," ""LONGITUDE"": -117.864998"," ""MEDIAID"": null.36"," ""METADATAID"": null.36"," ""NOFURTHERACTION"": null.36"," ""PROJECTREQUIRED"": ""Yes"".9"," ""SDSID"": null.36"," ""SITEELIGIBILITY"": null.36"," ""STATE"": ""CA"".20"," ""STATUS"": ""Properties with all projects at site closeout"".6"," ""STATUSCODE"": ""Not on the NPL"".36"," ""USACEDISTRICT"": ""spl"".16"," ""FISCALYEAR"": ""2019"".36"," ""PROPERTY_HISTORY"": ""N/A\r\n\r\n"""," ""USACEDIVISION"": ""spd""}.20"," ""geometry"": {""type"": ""Point"".36"," ""coordinates"": [-117.86499023399995", 36.14422607400007]}}," {""type"": ""Feature"".36"," ""properties"": {""OBJECTID"": 51"," ""CENTROIDLAT"": null.37"," ""CENTROIDLONG"": null.37"," ""CLOSESTCITY"": null"," ""CONGRESSIONALDISTRICT"": ""15"""," ""COUNTY"": null"," ""CURRENTOWNER"": null.28"," ""DODFUDSPROPERTYIDPK"": "" "".37"," ""ELIGIBILITY"": ""Eligible"".27"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"""," ""EPAREGION"": ""06"""," ""FEATUREDESCRIPTION"": null.37"," ""FEATURENAME"": ""NEIL", ET AL," PROPERTIES"""," ""FUDSINSTALLATIONID"": null"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"""," ""HASPROJECTS"": ""Yes"".10"," ""LATITUDE"": 19.497857096442765"," ""LONGITUDE"": -155.10320912843935"," ""MEDIAID"": null.37"," ""METADATAID"": null.37"," ""NOFURTHERACTION"": null.37"," ""PROJECTREQUIRED"": ""No"".27"," ""SDSID"": null.37"," ""SITEELIGIBILITY"": null.37"," ""STATE"": ""CA"".21"," ""STATUS"": ""Properties with projects"".3"," ""STATUSCODE"": ""Not on the NPL"".37"," ""USACEDISTRICT"": ""swf"""," ""FISCALYEAR"": ""2019"".37"," ""PROPERTY_HISTORY"": null"," ""USACEDIVISION"": ""swd""}"," ""geometry"": {""type"": ""Point"".37"," ""coordinates"": [-155.10320912843935", 19.497857096442765]}}," {""type"": ""Feature"".37"," ""properties"": {""OBJECTID"": 52"," ""CENTROIDLAT"": null.38"," ""CENTROIDLONG"": null.38"," ""CLOSESTCITY"": null.1"," ""CONGRESSIONALDISTRICT"": ""15"".1"," ""COUNTY"": null.1"," ""CURRENTOWNER"": null.29"," ""DODFUDSPROPERTYIDPK"": "" "".38"," ""ELIGIBILITY"": ""Ineligible"".10"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".1"," ""EPAREGION"": ""06"".1"," ""FEATUREDESCRIPTION"": null.38"," ""FEATURENAME"": ""NEIL.1", ET AL.1," PROPERTIES"".1"," ""FUDSINSTALLATIONID"": null.1"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".1"," ""HASPROJECTS"": ""Yes"".11"," ""LATITUDE"": 19.497857096442765.1"," ""LONGITUDE"": -155.10320912843935.1"," ""MEDIAID"": null.38"," ""METADATAID"": null.38"," ""NOFURTHERACTION"": null.38"," ""PROJECTREQUIRED"": ""No"".28"," ""SDSID"": null.38"," ""SITEELIGIBILITY"": null.38"," ""STATE"": ""CA"".22"," ""STATUS"": ""Properties with projects"".4"," ""STATUSCODE"": ""Not on the NPL"".38"," ""USACEDISTRICT"": ""swf"".1"," ""FISCALYEAR"": ""2019"".38"," ""PROPERTY_HISTORY"": null.1"," ""USACEDIVISION"": ""swd""}.1"," ""geometry"": {""type"": ""Point"".38"," ""coordinates"": [-155.10320912843935.1", 19.497857096442765]}}.1," {""type"": ""Feature"".38"," ""properties"": {""OBJECTID"": 53"," ""CENTROIDLAT"": null.39"," ""CENTROIDLONG"": null.39"," ""CLOSESTCITY"": null.2"," ""CONGRESSIONALDISTRICT"": ""15"".2"," ""COUNTY"": null.2"," ""CURRENTOWNER"": null.30"," ""DODFUDSPROPERTYIDPK"": "" "".39"," ""ELIGIBILITY"": ""Ineligible"".11"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".2"," ""EPAREGION"": ""06"".2"," ""FEATUREDESCRIPTION"": null.39"," ""FEATURENAME"": ""NEIL.2", ET AL.2," PROPERTIES"".2"," ""FUDSINSTALLATIONID"": null.2"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".2"," ""HASPROJECTS"": ""No"".27"," ""LATITUDE"": 19.497857096442765.2"," ""LONGITUDE"": -155.10320912843935.2"," ""MEDIAID"": null.39"," ""METADATAID"": null.39"," ""NOFURTHERACTION"": null.39"," ""PROJECTREQUIRED"": ""No"".29"," ""SDSID"": null.39"," ""SITEELIGIBILITY"": null.39"," ""STATE"": ""CA"".23"," ""STATUS"": ""Properties without projects"".27"," ""STATUSCODE"": ""Not on the NPL"".39"," ""USACEDISTRICT"": ""swf"".2"," ""FISCALYEAR"": ""2019"".39"," ""PROPERTY_HISTORY"": null.2"," ""USACEDIVISION"": ""swd""}.2"," ""geometry"": {""type"": ""Point"".39"," ""coordinates"": [-155.10320912843935.2", 19.497857096442765]}}.2," {""type"": ""Feature"".39"," ""properties"": {""OBJECTID"": 54"," ""CENTROIDLAT"": null.40"," ""CENTROIDLONG"": null.40"," ""CLOSESTCITY"": null.3"," ""CONGRESSIONALDISTRICT"": ""15"".3"," ""COUNTY"": null.3"," ""CURRENTOWNER"": null.31"," ""DODFUDSPROPERTYIDPK"": "" "".40"," ""ELIGIBILITY"": ""Eligible"".28"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".3"," ""EPAREGION"": ""06"".3"," ""FEATUREDESCRIPTION"": null.40"," ""FEATURENAME"": ""NEIL.3", ET AL.3," PROPERTIES"".3"," ""FUDSINSTALLATIONID"": null.3"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".3"," ""HASPROJECTS"": ""Yes"".12"," ""LATITUDE"": 19.516632121497878"," ""LONGITUDE"": -155.91378674587037"," ""MEDIAID"": null.40"," ""METADATAID"": null.40"," ""NOFURTHERACTION"": null.40"," ""PROJECTREQUIRED"": ""No"".30"," ""SDSID"": null.40"," ""SITEELIGIBILITY"": null.40"," ""STATE"": ""CA"".24"," ""STATUS"": ""Properties with projects"".5"," ""STATUSCODE"": ""Not on the NPL"".40"," ""USACEDISTRICT"": ""swf"".3"," ""FISCALYEAR"": ""2019"".40"," ""PROPERTY_HISTORY"": null.3"," ""USACEDIVISION"": ""swd""}.3"," ""geometry"": {""type"": ""Point"".40"," ""coordinates"": [-155.91378674587037", 19.516632121497878]}}," {""type"": ""Feature"".40"," ""properties"": {""OBJECTID"": 55"," ""CENTROIDLAT"": null.41"," ""CENTROIDLONG"": null.41"," ""CLOSESTCITY"": null.4"," ""CONGRESSIONALDISTRICT"": ""15"".4"," ""COUNTY"": null.4"," ""CURRENTOWNER"": null.32"," ""DODFUDSPROPERTYIDPK"": "" "".41"," ""ELIGIBILITY"": ""Ineligible"".12"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".4"," ""EPAREGION"": ""06"".4"," ""FEATUREDESCRIPTION"": null.41"," ""FEATURENAME"": ""NEIL.4", ET AL.4," PROPERTIES"".4"," ""FUDSINSTALLATIONID"": null.4"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".4"," ""HASPROJECTS"": ""Yes"".13"," ""LATITUDE"": 19.516632121497878.1"," ""LONGITUDE"": -155.91378674587037.1"," ""MEDIAID"": null.41"," ""METADATAID"": null.41"," ""NOFURTHERACTION"": null.41"," ""PROJECTREQUIRED"": ""No"".31"," ""SDSID"": null.41"," ""SITEELIGIBILITY"": null.41"," ""STATE"": ""CA"".25"," ""STATUS"": ""Properties with projects"".6"," ""STATUSCODE"": ""Not on the NPL"".41"," ""USACEDISTRICT"": ""swf"".4"," ""FISCALYEAR"": ""2019"".41"," ""PROPERTY_HISTORY"": null.4"," ""USACEDIVISION"": ""swd""}.4"," ""geometry"": {""type"": ""Point"".41"," ""coordinates"": [-155.91378674587037.1", 19.516632121497878]}}.1," {""type"": ""Feature"".41"," ""properties"": {""OBJECTID"": 56"," ""CENTROIDLAT"": null.42"," ""CENTROIDLONG"": null.42"," ""CLOSESTCITY"": null.5"," ""CONGRESSIONALDISTRICT"": ""15"".5"," ""COUNTY"": null.5"," ""CURRENTOWNER"": null.33"," ""DODFUDSPROPERTYIDPK"": "" "".42"," ""ELIGIBILITY"": ""Ineligible"".13"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".5"," ""EPAREGION"": ""06"".5"," ""FEATUREDESCRIPTION"": null.42"," ""FEATURENAME"": ""NEIL.5", ET AL.5," PROPERTIES"".5"," ""FUDSINSTALLATIONID"": null.5"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".5"," ""HASPROJECTS"": ""No"".28"," ""LATITUDE"": 19.516632121497878.2"," ""LONGITUDE"": -155.91378674587037.2"," ""MEDIAID"": null.42"," ""METADATAID"": null.42"," ""NOFURTHERACTION"": null.42"," ""PROJECTREQUIRED"": ""No"".32"," ""SDSID"": null.42"," ""SITEELIGIBILITY"": null.42"," ""STATE"": ""CA"".26"," ""STATUS"": ""Properties without projects"".28"," ""STATUSCODE"": ""Not on the NPL"".42"," ""USACEDISTRICT"": ""swf"".5"," ""FISCALYEAR"": ""2019"".42"," ""PROPERTY_HISTORY"": null.5"," ""USACEDIVISION"": ""swd""}.5"," ""geometry"": {""type"": ""Point"".42"," ""coordinates"": [-155.91378674587037.2", 19.516632121497878]}}.2," {""type"": ""Feature"".42"," ""properties"": {""OBJECTID"": 57"," ""CENTROIDLAT"": null.43"," ""CENTROIDLONG"": null.43"," ""CLOSESTCITY"": null.6"," ""CONGRESSIONALDISTRICT"": ""15"".6"," ""COUNTY"": null.6"," ""CURRENTOWNER"": null.34"," ""DODFUDSPROPERTYIDPK"": "" "".43"," ""ELIGIBILITY"": ""Eligible"".29"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".6"," ""EPAREGION"": ""06"".6"," ""FEATUREDESCRIPTION"": null.43"," ""FEATURENAME"": ""NEIL.6", ET AL.6," PROPERTIES"".6"," ""FUDSINSTALLATIONID"": null.6"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".6"," ""HASPROJECTS"": ""Yes"".14"," ""LATITUDE"": 20.825377142028497"," ""LONGITUDE"": -156.3306524489697"," ""MEDIAID"": null.43"," ""METADATAID"": null.43"," ""NOFURTHERACTION"": null.43"," ""PROJECTREQUIRED"": ""No"".33"," ""SDSID"": null.43"," ""SITEELIGIBILITY"": null.43"," ""STATE"": ""CA"".27"," ""STATUS"": ""Properties with projects"".7"," ""STATUSCODE"": ""Not on the NPL"".43"," ""USACEDISTRICT"": ""swf"".6"," ""FISCALYEAR"": ""2019"".43"," ""PROPERTY_HISTORY"": null.6"," ""USACEDIVISION"": ""swd""}.6"," ""geometry"": {""type"": ""Point"".43"," ""coordinates"": [-156.3306524489697", 20.825377142028497]}}," {""type"": ""Feature"".43"," ""properties"": {""OBJECTID"": 58"," ""CENTROIDLAT"": null.44"," ""CENTROIDLONG"": null.44"," ""CLOSESTCITY"": null.7"," ""CONGRESSIONALDISTRICT"": ""15"".7"," ""COUNTY"": null.7"," ""CURRENTOWNER"": null.35"," ""DODFUDSPROPERTYIDPK"": "" "".44"," ""ELIGIBILITY"": ""Ineligible"".14"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".7"," ""EPAREGION"": ""06"".7"," ""FEATUREDESCRIPTION"": null.44"," ""FEATURENAME"": ""NEIL.7", ET AL.7," PROPERTIES"".7"," ""FUDSINSTALLATIONID"": null.7"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".7"," ""HASPROJECTS"": ""Yes"".15"," ""LATITUDE"": 20.825377142028497.1"," ""LONGITUDE"": -156.3306524489697.1"," ""MEDIAID"": null.44"," ""METADATAID"": null.44"," ""NOFURTHERACTION"": null.44"," ""PROJECTREQUIRED"": ""No"".34"," ""SDSID"": null.44"," ""SITEELIGIBILITY"": null.44"," ""STATE"": ""CA"".28"," ""STATUS"": ""Properties with projects"".8"," ""STATUSCODE"": ""Not on the NPL"".44"," ""USACEDISTRICT"": ""swf"".7"," ""FISCALYEAR"": ""2019"".44"," ""PROPERTY_HISTORY"": null.7"," ""USACEDIVISION"": ""swd""}.7"," ""geometry"": {""type"": ""Point"".44"," ""coordinates"": [-156.3306524489697.1", 20.825377142028497]}}.1," {""type"": ""Feature"".44"," ""properties"": {""OBJECTID"": 59"," ""CENTROIDLAT"": null.45"," ""CENTROIDLONG"": null.45"," ""CLOSESTCITY"": null.8"," ""CONGRESSIONALDISTRICT"": ""15"".8"," ""COUNTY"": null.8"," ""CURRENTOWNER"": null.36"," ""DODFUDSPROPERTYIDPK"": "" "".45"," ""ELIGIBILITY"": ""Ineligible"".15"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".8"," ""EPAREGION"": ""06"".8"," ""FEATUREDESCRIPTION"": null.45"," ""FEATURENAME"": ""NEIL.8", ET AL.8," PROPERTIES"".8"," ""FUDSINSTALLATIONID"": null.8"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".8"," ""HASPROJECTS"": ""No"".29"," ""LATITUDE"": 20.825377142028497.2"," ""LONGITUDE"": -156.3306524489697.2"," ""MEDIAID"": null.45"," ""METADATAID"": null.45"," ""NOFURTHERACTION"": null.45"," ""PROJECTREQUIRED"": ""No"".35"," ""SDSID"": null.45"," ""SITEELIGIBILITY"": null.45"," ""STATE"": ""CA"".29"," ""STATUS"": ""Properties without projects"".29"," ""STATUSCODE"": ""Not on the NPL"".45"," ""USACEDISTRICT"": ""swf"".8"," ""FISCALYEAR"": ""2019"".45"," ""PROPERTY_HISTORY"": null.8"," ""USACEDIVISION"": ""swd""}.8"," ""geometry"": {""type"": ""Point"".45"," ""coordinates"": [-156.3306524489697.2", 20.825377142028497]}}.2," {""type"": ""Feature"".45"," ""properties"": {""OBJECTID"": 60"," ""CENTROIDLAT"": null.46"," ""CENTROIDLONG"": null.46"," ""CLOSESTCITY"": null.9"," ""CONGRESSIONALDISTRICT"": ""15"".9"," ""COUNTY"": null.9"," ""CURRENTOWNER"": null.37"," ""DODFUDSPROPERTYIDPK"": "" "".46"," ""ELIGIBILITY"": ""Eligible"".30"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".9"," ""EPAREGION"": ""06"".9"," ""FEATUREDESCRIPTION"": null.46"," ""FEATURENAME"": ""NEIL.9", ET AL.9," PROPERTIES"".9"," ""FUDSINSTALLATIONID"": null.9"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".9"," ""HASPROJECTS"": ""Yes"".16"," ""LATITUDE"": 20.917074254751412"," ""LONGITUDE"": -156.5429023670438"," ""MEDIAID"": null.46"," ""METADATAID"": null.46"," ""NOFURTHERACTION"": null.46"," ""PROJECTREQUIRED"": ""No"".36"," ""SDSID"": null.46"," ""SITEELIGIBILITY"": null.46"," ""STATE"": ""CA"".30"," ""STATUS"": ""Properties with projects"".9"," ""STATUSCODE"": ""Not on the NPL"".46"," ""USACEDISTRICT"": ""swf"".9"," ""FISCALYEAR"": ""2019"".46"," ""PROPERTY_HISTORY"": null.9"," ""USACEDIVISION"": ""swd""}.9"," ""geometry"": {""type"": ""Point"".46"," ""coordinates"": [-156.5429023670438", 20.917074254751412]}}," {""type"": ""Feature"".46"," ""properties"": {""OBJECTID"": 61"," ""CENTROIDLAT"": null.47"," ""CENTROIDLONG"": null.47"," ""CLOSESTCITY"": null.10"," ""CONGRESSIONALDISTRICT"": ""15"".10"," ""COUNTY"": null.10"," ""CURRENTOWNER"": null.38"," ""DODFUDSPROPERTYIDPK"": "" "".47"," ""ELIGIBILITY"": ""Ineligible"".16"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".10"," ""EPAREGION"": ""06"".10"," ""FEATUREDESCRIPTION"": null.47"," ""FEATURENAME"": ""NEIL.10", ET AL.10," PROPERTIES"".10"," ""FUDSINSTALLATIONID"": null.10"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".10"," ""HASPROJECTS"": ""Yes"".17"," ""LATITUDE"": 20.917074254751412.1"," ""LONGITUDE"": -156.5429023670438.1"," ""MEDIAID"": null.47"," ""METADATAID"": null.47"," ""NOFURTHERACTION"": null.47"," ""PROJECTREQUIRED"": ""No"".37"," ""SDSID"": null.47"," ""SITEELIGIBILITY"": null.47"," ""STATE"": ""CA"".31"," ""STATUS"": ""Properties with projects"".10"," ""STATUSCODE"": ""Not on the NPL"".47"," ""USACEDISTRICT"": ""swf"".10"," ""FISCALYEAR"": ""2019"".47"," ""PROPERTY_HISTORY"": null.10"," ""USACEDIVISION"": ""swd""}.10"," ""geometry"": {""type"": ""Point"".47"," ""coordinates"": [-156.5429023670438.1", 20.917074254751412]}}.1," {""type"": ""Feature"".47"," ""properties"": {""OBJECTID"": 62"," ""CENTROIDLAT"": null.48"," ""CENTROIDLONG"": null.48"," ""CLOSESTCITY"": null.11"," ""CONGRESSIONALDISTRICT"": ""15"".11"," ""COUNTY"": null.11"," ""CURRENTOWNER"": null.39"," ""DODFUDSPROPERTYIDPK"": "" "".48"," ""ELIGIBILITY"": ""Ineligible"".17"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".11"," ""EPAREGION"": ""06"".11"," ""FEATUREDESCRIPTION"": null.48"," ""FEATURENAME"": ""NEIL.11", ET AL.11," PROPERTIES"".11"," ""FUDSINSTALLATIONID"": null.11"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".11"," ""HASPROJECTS"": ""No"".30"," ""LATITUDE"": 20.917074254751412.2"," ""LONGITUDE"": -156.5429023670438.2"," ""MEDIAID"": null.48"," ""METADATAID"": null.48"," ""NOFURTHERACTION"": null.48"," ""PROJECTREQUIRED"": ""No"".38"," ""SDSID"": null.48"," ""SITEELIGIBILITY"": null.48"," ""STATE"": ""CA"".32"," ""STATUS"": ""Properties without projects"".30"," ""STATUSCODE"": ""Not on the NPL"".48"," ""USACEDISTRICT"": ""swf"".11"," ""FISCALYEAR"": ""2019"".48"," ""PROPERTY_HISTORY"": null.11"," ""USACEDIVISION"": ""swd""}.11"," ""geometry"": {""type"": ""Point"".48"," ""coordinates"": [-156.5429023670438.2", 20.917074254751412]}}.2," {""type"": ""Feature"".48"," ""properties"": {""OBJECTID"": 63"," ""CENTROIDLAT"": null.49"," ""CENTROIDLONG"": null.49"," ""CLOSESTCITY"": null.12"," ""CONGRESSIONALDISTRICT"": ""15"".12"," ""COUNTY"": null.12"," ""CURRENTOWNER"": null.40"," ""DODFUDSPROPERTYIDPK"": "" "".49"," ""ELIGIBILITY"": ""Eligible"".31"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".12"," ""EPAREGION"": ""06"".12"," ""FEATUREDESCRIPTION"": null.49"," ""FEATURENAME"": ""NEIL.12", ET AL.12," PROPERTIES"".12"," ""FUDSINSTALLATIONID"": null.12"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".12"," ""HASPROJECTS"": ""Yes"".18"," ""LATITUDE"": 21.907546119100093"," ""LONGITUDE"": -159.48416820625405"," ""MEDIAID"": null.49"," ""METADATAID"": null.49"," ""NOFURTHERACTION"": null.49"," ""PROJECTREQUIRED"": ""No"".39"," ""SDSID"": null.49"," ""SITEELIGIBILITY"": null.49"," ""STATE"": ""CA"".33"," ""STATUS"": ""Properties with projects"".11"," ""STATUSCODE"": ""Not on the NPL"".49"," ""USACEDISTRICT"": ""swf"".12"," ""FISCALYEAR"": ""2019"".49"," ""PROPERTY_HISTORY"": null.12"," ""USACEDIVISION"": ""swd""}.12"," ""geometry"": {""type"": ""Point"".49"," ""coordinates"": [-159.48416820625405", 21.907546119100093]}}," {""type"": ""Feature"".49"," ""properties"": {""OBJECTID"": 64"," ""CENTROIDLAT"": null.50"," ""CENTROIDLONG"": null.50"," ""CLOSESTCITY"": null.13"," ""CONGRESSIONALDISTRICT"": ""15"".13"," ""COUNTY"": null.13"," ""CURRENTOWNER"": null.41"," ""DODFUDSPROPERTYIDPK"": "" "".50"," ""ELIGIBILITY"": ""Ineligible"".18"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".13"," ""EPAREGION"": ""06"".13"," ""FEATUREDESCRIPTION"": null.50"," ""FEATURENAME"": ""NEIL.13", ET AL.13," PROPERTIES"".13"," ""FUDSINSTALLATIONID"": null.13"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".13"," ""HASPROJECTS"": ""Yes"".19"," ""LATITUDE"": 21.907546119100093.1"," ""LONGITUDE"": -159.48416820625405.1"," ""MEDIAID"": null.50"," ""METADATAID"": null.50"," ""NOFURTHERACTION"": null.50"," ""PROJECTREQUIRED"": ""No"".40"," ""SDSID"": null.50"," ""SITEELIGIBILITY"": null.50"," ""STATE"": ""CA"".34"," ""STATUS"": ""Properties with projects"".12"," ""STATUSCODE"": ""Not on the NPL"".50"," ""USACEDISTRICT"": ""swf"".13"," ""FISCALYEAR"": ""2019"".50"," ""PROPERTY_HISTORY"": null.13"," ""USACEDIVISION"": ""swd""}.13"," ""geometry"": {""type"": ""Point"".50"," ""coordinates"": [-159.48416820625405.1", 21.907546119100093]}}.1," {""type"": ""Feature"".50"," ""properties"": {""OBJECTID"": 65"," ""CENTROIDLAT"": null.51"," ""CENTROIDLONG"": null.51"," ""CLOSESTCITY"": null.14"," ""CONGRESSIONALDISTRICT"": ""15"".14"," ""COUNTY"": null.14"," ""CURRENTOWNER"": null.42"," ""DODFUDSPROPERTYIDPK"": "" "".51"," ""ELIGIBILITY"": ""Ineligible"".19"," ""EMSMGMTACTIONPLANLINK"": ""https://fudsportal.usace.army.mil/ems/inventory/map?id=54113"".14"," ""EPAREGION"": ""06"".14"," ""FEATUREDESCRIPTION"": null.51"," ""FEATURENAME"": ""NEIL.14", ET AL.14," PROPERTIES"".14"," ""FUDSINSTALLATIONID"": null.14"," ""FUDSUNIQUEPROPERTYNUMBER"": ""K06TX1120"".14"," ""HASPROJECTS"": ""No"".31"," ""LATITUDE"": 21.907546119100093.2"," ""LONGITUDE"": -159.48416820625405.2"," ""MEDIAID"": null.51"," ""METADATAID"": null.51"," ""NOFURTHERACTION"": null.51"," ""PROJECTREQUIRED"": ""No"".41"," ""SDSID"": null.51"," ""SITEELIGIBILITY"": null.51"," ""STATE"": ""CA"".35"," ""STATUS"": ""Properties without projects"".31"," ""STATUSCODE"": ""Not on the NPL"".51"," ""USACEDISTRICT"": ""swf"".14"," ""FISCALYEAR"": ""2019"".51"," ""PROPERTY_HISTORY"": null.14"," ""USACEDIVISION"": ""swd""}.14"," ""geometry"": {""type"": ""Point"".51"," ""coordinates"": [-159.48416820625405.2", 21.907546119100093]}}]} diff --git a/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/fuds.geojson b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/fuds.geojson new file mode 100644 index 000000000..8a7a12251 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/fuds.geojson @@ -0,0 +1 @@ +{"type": "FeatureCollection", "name": "FUDS_Property_Point", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"OBJECTID": 684, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "NO CITY", "CONGRESSIONALDISTRICT": "04", "COUNTY": "SACRAMENTO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=60970", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "McClellan AFB Communication Facility Annex", "FUDSINSTALLATIONID": "CA99799F528900", "FUDSUNIQUEPROPERTYNUMBER": "J09CA0082", "HASPROJECTS": "No", "LATITUDE": 38.87444444, "LONGITUDE": -121.39361111, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spk", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "The McClellan Communication Facility Annex was used by the U.S. Air Force. In 1983, part of the site was excessed to the GSA, who leased it to the Lincoln School District, Lincoln, CA for school agricultural instruction. The lease terminated October 1984. This portion of the site had no improvements on it when excessed and remains unimproved. The remaining part of this site remains under DoD control and is actively used by the U.S. Air Force.\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-121.39361572299998, 38.87463378900003]}}, {"type": "Feature", "properties": {"OBJECTID": 1538, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KUALOA", "CONGRESSIONALDISTRICT": "02", "COUNTY": "HONOLULU", "CURRENTOWNER": "PRIV: PRIVATE KUALOA RANCH IS THE OWNER\n\n ", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62331", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "BATTERY AVERY J. COOPER", "FUDSINSTALLATIONID": "HI99799F378500", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0040", "HASPROJECTS": "Yes", "LATITUDE": 21.535999, "LONGITUDE": -157.843002, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties with all projects at site closeout", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "BATTERY AVERY J. COOPER CONSISTED OF 94.09 ACRES AND USED \nFOR A SEACOAST DEFENSE STRUCTURE. THE SITE WAS ACQUIRED \nFROM THE ARMY THROUGH A LEASE AGREEMENT AND IN 1952, THE \nARMY AND KUALOA RANCH TER MINATED THE AGREEMENT.\n ", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-157.84301757799997, 21.53619384800004]}}, {"type": "Feature", "properties": {"OBJECTID": 1629, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KAAAWA", "CONGRESSIONALDISTRICT": "02", "COUNTY": "HONOLULU", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54603", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "KAAAWA MILITARY RES", "FUDSINSTALLATIONID": "HI99799F387500", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0135", "HASPROJECTS": "No", "LATITUDE": 21.55333333, "LONGITUDE": -157.85166667, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "THIS SITE SERVED AS THE CAMP HEADQUARTES FOR THE UNIT JUNGLE TRAINING CENTER. THE ORIGINAL RESERVASTION WAD CONMPRISED OF TWO NONCONTIGUOUS PARCELS CONTAINING 3.67 ACRES AND .1377 ACRES, TWO RIGHT-OF -WAYS, AND AN AREA DESIGNATED FOR ARMY OBERSATION STATION L. THESE LANDS WERE ACQUIRED BY THE GOVERNMENT BY DEED DATED 14 JANUARY 1925 AND DECLARED A MILITARY RESERVATION BY EXCUTIVE ORDER NO. 4679 D ATED 29 JUNE 1927. ON DEC. 20, 1937, AN ADDITIONAL 1.368 ACRES WAS ACQUIRED BY THE GOVERNMENT.", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-157.85168456999997, 21.553405762000068]}}, {"type": "Feature", "properties": {"OBJECTID": 1719, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "LINCOLN", "CONGRESSIONALDISTRICT": "04", "COUNTY": "PLACER", "CURRENTOWNER": "PRIV: PRIVATE A private resident currently owns the land and uses it for agriculture purposes.", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=61278", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "Lincoln Radio Beacon Annex", "FUDSINSTALLATIONID": "CA99799F578400", "FUDSUNIQUEPROPERTYNUMBER": "J09CA0854", "HASPROJECTS": "Yes", "LATITUDE": 38.8975, "LONGITUDE": -121.40027778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with all projects at site closeout", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spk", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "In 1957, the U.S. Government acquired 0.87 fee acre from a private resident for use by the U.S. Air Force as an off base installation to McClellan AFB, CA. A medium power low frequency homer beacon was used to serve as a navigational aid site for McClellan. The site was declared excess in 1965. In 1966, the 0.87 fee acre was returned back to the private resident. Potential hazards related to Department of Defense activities are not currently identified at this site. ", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-121.40020751999998, 38.897583008000026]}}, {"type": "Feature", "properties": {"OBJECTID": 2093, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KALAHEO", "CONGRESSIONALDISTRICT": "02", "COUNTY": "KAUAI", "CURRENTOWNER": "STATE: STATE STATE OF HAWAII ", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=58233", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "PAPAPAHOLAHOLA COMM SITE", "FUDSINSTALLATIONID": "HI99799F401000", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0280", "HASPROJECTS": "Yes", "LATITUDE": 21.9764, "LONGITUDE": -159.522003, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties with all projects at site closeout", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "THE SITE WAS AQUIRED AS AN INTERISLAND RAION TELEPHONE AND TELEYPE STATION FROM 1943 TO 1946. IN SEPTEMBER 1953, THE ARMY TRANSFERRED THE SITE TO THE CIVIL AERONAUTICS ADMINISTRATION TO ESTALISH A VF H AIR/GROUND COVERAGE FROM MAKAHUENA POINT TO BARKING SANDS. IN MARCH OF 1967, THE GENERAL SERVICE ADMINISTRATION RELINQUISHED CONTROL OF THE SITE TO THE STATE OF HAWAII VIA QUITCLAIM DEED AND THE ST ATE TURNED IT OVER TO DLNR FOR USE AS A STATE PARK.", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-159.52191162099996, 21.976623535000044]}}, {"type": "Feature", "properties": {"OBJECTID": 2123, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KALAHEO", "CONGRESSIONALDISTRICT": "02", "COUNTY": "KAUAI", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62359", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "DIVISION HEADQUARTERS", "FUDSINSTALLATIONID": "HI99799F381400", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0071", "HASPROJECTS": "No", "LATITUDE": 21.9375, "LONGITUDE": -159.53, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "NO EVIDENCE OF HAZARDOUS/TOXIC WASTE, EXPLOSIVE ORDNANCE WASTE, UNSAFE OR HAZARDOUS DEBRIS WAS FOUND. ", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-159.52996826199998, 21.93762207000003]}}, {"type": "Feature", "properties": {"OBJECTID": 2217, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KEANAE", "CONGRESSIONALDISTRICT": "02", "COUNTY": "MAUI", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62430", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "MARINE MANEUVER AREA", "FUDSINSTALLATIONID": "HI99799F395400", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0217", "HASPROJECTS": "No", "LATITUDE": 20.84027778, "LONGITUDE": -156.14277778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "SITE WAS USED FOR MARINE MANEUVERS. NO REMNANTS OF STRUCTURES OR DEBRIS WERE OBSERVED. ", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-156.14270019499997, 20.840393066000047]}}, {"type": "Feature", "properties": {"OBJECTID": 4551, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "UPOLU POINT", "CONGRESSIONALDISTRICT": "02", "COUNTY": "HAWAII", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62478", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "UPOLU POINT MILITARY RES", "FUDSINSTALLATIONID": "HI99799F406300", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0342", "HASPROJECTS": "No", "LATITUDE": 20.265, "LONGITUDE": -155.85972222, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "THE SITE WAS USED FROM JUNE 25, 1927 TO JUNE 30, 1945. THE \nSITE WAS ALSO NAMED SUITER FIELD AND CONSISTED OF A RUNWAY \n(150'x4,000'), AIRCRAFT PARKING, CATAPULT DECK, \nADMINISTRATION BUILDING, QUART ERS, LATRINES, SUPPLY \nBUILDING, COMMISSARY STORES,A GALLEY AND MESS HALL, RADIO \nTRANSMITTER BUILDING, ROCKET STORAGE MAGAZINE, PUBLIC WORKS \nBUILDINGS, DISPENSARY, AND WEATHER STATION.\n ", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-155.85968017599998, 20.26519775400004]}}, {"type": "Feature", "properties": {"OBJECTID": 4622, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "MAKAWAO", "CONGRESSIONALDISTRICT": "02", "COUNTY": "MAUI", "CURRENTOWNER": "PRIV: PRIVATE ", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62368", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "GUNNERY SITE", "FUDSINSTALLATIONID": "HI99799F383800", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0098", "HASPROJECTS": "Yes", "LATITUDE": 20.89916667, "LONGITUDE": -156.26027778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "The property was a former Marine artillery impact area. A youngster was wounded by unexploded ordnance in the 1940s. The land remains as cattle grazing before and after military use. This property is known or suspected to contain military munitions and unexploded ordnance and therefore may present an explosive hazard.", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-156.26019287099996, 20.899414062000062]}}, {"type": "Feature", "properties": {"OBJECTID": 4669, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KOLOA", "CONGRESSIONALDISTRICT": "02", "COUNTY": "KAUAI", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62403", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "KOLOA ICE PLANT", "FUDSINSTALLATIONID": "HI99799F392900", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0191", "HASPROJECTS": "No", "LATITUDE": 21.90444444, "LONGITUDE": -159.465, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "SITE WAS CONSTRUCTED BY US AMRY ENGINEERING DISTRICT IN \nEARLY 1942 FOR THE 72ND QUARTERMASTER DISTRICT. SITE \nCONSISTED OF A CONCRETE ICE PLANT STRUCTURE PAVED PARKING \nLOT AND DRIVEWAY. THE PLANT WAS DEOMLISHED ABOUT 1947/1949. \nNO EVIDENCE OF ANY FORMER USE WAS FOUND DURING THE SITE \nSURVEY ON MARCH 2, 1993.\n ", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-159.46496581999997, 21.90460205100004]}}, {"type": "Feature", "properties": {"OBJECTID": 4694, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "PUNA", "CONGRESSIONALDISTRICT": "02", "COUNTY": "HAWAII", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62396", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "KAPOHO TARGET AREA", "FUDSINSTALLATIONID": "HI99799F390300", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0165", "HASPROJECTS": "No", "LATITUDE": 19.49166667, "LONGITUDE": -154.82527778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "THE MILITARY USED THE PROJECT FOR A TARGET AREA; THE ARMY GRANTED THE NAVY PERMISSION TO USE THE TARGET AREA FROM JUNE 13, 1945 - MAY 1956. ", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-154.82519531299997, 19.49182128900003]}}, {"type": "Feature", "properties": {"OBJECTID": 4735, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "POLOLU VALLEY", "CONGRESSIONALDISTRICT": "02", "COUNTY": "HAWAII", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62459", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "POLOLU", "FUDSINSTALLATIONID": "HI99799F401600", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0286", "HASPROJECTS": "No", "LATITUDE": 20.16666667, "LONGITUDE": -155.73333333, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "SITE WAS USED FOR AMPHIBIOUS AND JUNGLE TRAINING. NO \nEVIDENCE WAS FOUND FOR HAZARDOUS/TOXIC WASTES, OEW, AND \nUNSAFE DEBRIS.\n ", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-155.73327636699997, 20.166809082000043]}}, {"type": "Feature", "properties": {"OBJECTID": 5292, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "WAIPIO", "CONGRESSIONALDISTRICT": "02", "COUNTY": "HAWAII", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62349", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "WAIPIO BOMBING TARGETS", "FUDSINSTALLATIONID": "HI99799F379600", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0052", "HASPROJECTS": "No", "LATITUDE": 20.91222222, "LONGITUDE": -156.22083333, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "THE APPROXIMATELY 60-ACRE PROJECT SITE WAS USED BY THE ARMY OR NAVY FOR AERIAL BOMBING TARGET PRACTICE DURUNG WORLD WAR II. MILITARY PLANES DROPPED BOMBS AIMED AT TARGETS OF WHITE ROCKS SET IN A CIRCULAR PATTERN IN AN AREA RESIDENTS, IT WAS INDICATED THE MILITARY DID NOT CLEAR THE AREA OF ANY DEBRIS OR ORDNANCE WHEN THE PRACTICE BOMBING ACTIVITIES CEASED. \r\n", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-156.22076415999996, 20.91241455100004]}}, {"type": "Feature", "properties": {"OBJECTID": 5310, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "ISLAND OF HAWAII", "CONGRESSIONALDISTRICT": "02", "COUNTY": "HAWAII", "CURRENTOWNER": "PRIV: Estate of Richard Smart AKA Parker Ranch, Estate of Richard Smart AKA Parker Ranch, WH Shipman", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=53556", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "BIG ISLAND BOMBING TARGETS", "FUDSINSTALLATIONID": "HI99799FA10000", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0476", "HASPROJECTS": "Yes", "LATITUDE": 20.235, "LONGITUDE": -155.89277778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "The sites were identified in the History of G-3, Headquarters Army Forces Middle Pacific - Functions and Activities 7 December 1941 to 2 December 1945. No use has been made to the sites since the military occupation. The property is known or suspected to contain military munitions or unexploded ordnance and therefore may present an explosive hazard.", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-155.89270019499997, 20.23522949200003]}}, {"type": "Feature", "properties": {"OBJECTID": 5832, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "NO CITY", "CONGRESSIONALDISTRICT": "02", "COUNTY": "MAUI", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54600", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "KAILUA RADAR STATION", "FUDSINSTALLATIONID": "HI99799F388700", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0147", "HASPROJECTS": "No", "LATITUDE": 20.89083333, "LONGITUDE": -156.2075, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "RECORDS ARE NOT AVAILABLE. PREVIOUS RECORDS SHOW THAT THE KAILUA RADAR STATION FACILITIES WERE CONSTRUCTED BY THE 2ND PLATOON, 581 ST SIGNAL CORPS AIRCRAFT WARNING SYSTEM, HAWAII IN 1942 AND WAS IN US E UNTIL SEPT. 1944 ", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-156.20739746099997, 20.890991211000028]}}, {"type": "Feature", "properties": {"OBJECTID": 6013, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KOLOA", "CONGRESSIONALDISTRICT": "02", "COUNTY": "KAUAI", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=56908", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "KOLOA BAKERY", "FUDSINSTALLATIONID": "HI99799F392800", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0190", "HASPROJECTS": "No", "LATITUDE": 21.905, "LONGITUDE": -159.46444444, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "KOLOA BAKERY WAS ESTABLISHED BY THE ARMY IN MID-1942 AND WAS \nLOCATED ATTHE SOUTHEAST CORNER OF A 7.518-ACRE PARCEL. THE \nBAKERY WAS CONSUTRCTED BY THE U.S. ENGINEERING DISTRICT FOR \nTHE 72ND QUARTRE MASTER DISTRICT ON THE SITE OF A FORMER BALL \nPARK AND ADJACENT TO A 20-TON ICE PLANT. THE BAKERY \nSUPPLIES BETWEEN 15,000-25,000 LOAVES PER DAY AND CONSISTED \nOF A WOOD BUILDING, 500-LOAF OVEN, STOV ES, AND AN \nABOVEGROUND 500-GALLON DIESEL TANK BAKERY LATER CONVERTED \nTO A MARKET/RESTAURANT.\n", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-159.46441650399998, 21.905212402000075]}}, {"type": "Feature", "properties": {"OBJECTID": 6015, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KALAHEO", "CONGRESSIONALDISTRICT": "02", "COUNTY": "KAUAI", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=56898", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "1ST STATION HOSPITAL", "FUDSINSTALLATIONID": "HI99799F382500", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0084", "HASPROJECTS": "No", "LATITUDE": 21.9225, "LONGITUDE": -159.52111111, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "SITE WAS COMMANDEERED TWO WEEKS AFATER PEARL HARBOR WAS \nATTAACKED AND LATER A LICENSE WAS GRANTED ON 28 MARCH 1942 \nFROM THE TERRITORY OF HAWAII. A 500-BED HOSPITAL WAS \nESTABLISHED AND THE 165TH DIV ISION WAS ASSIGNED TO OPERATE \nIT. FIVE BUILDINGS WERE CONVERTED IN A MESS HALL, \nAUDITORIUM, SURGICAL WARD, MEDIAL SUPPLIES STORAGE, AND \nPATIENT WARDS. QUARTERS WERE CONSTRCUTRED ALONG THE CAMPUS \n PERIMETER AND SIX-MEN TENTS WERE ERECTED. SITE WAS CLOSED \nIN 6/45 & TERMINATION OF LICENSE WAS 9/3", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-159.52111816399997, 21.922607422000056]}}, {"type": "Feature", "properties": {"OBJECTID": 6062, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "PUNALUU/KAHANA", "CONGRESSIONALDISTRICT": "02", "COUNTY": "HONOLULU", "CURRENTOWNER": "STATE: STATE KAHANA IS A STATE OF HAWAII PARK. PUNALUU IS AN AGRICULTURAL COMMUNITY. PRIV: PRIVATE KAHANA IS A STATE OF HAWAII PARK. PUNALUU IS AN AGRICULTURAL COMMUNITY. ", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=56893", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "PACIFIC JUNGLE COMBAT", "FUDSINSTALLATIONID": "HI99799F400400", "FUDSUNIQUEPROPERTYNUMBER": "H09HI0274", "HASPROJECTS": "Yes", "LATITUDE": 21.55416667, "LONGITUDE": -157.90694444, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "HI", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "poh", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "The property, located in two valleys, began being used as a jungle training center in September 1943. The leases were terminated in August 1946 for Kahana Valley and between April 1945 and November 1950 for Punaluu Valley. Kahana Valley is now a state park and Punaluu is an agricultural community. The property is known or suspected to contain military munitions or unexploded ordnance and therefore may present an explosive hazard.\r\rThe real estate instruments evidencing Department of Defense possession of the property could not be found. However, a Tract Register and Audited Real Estate Map of the Pacific Jungle Combat Training Center was\rfound and is the basis for the property information below. \r\rThe property consisted of 2,209.77 acres which included forty-one tracts of land within the Kahana and Punaluu Valleys (Tax Map Key (TMK) 5-2-02 and 5-2-05:various parcels and TMK 5-3-01, 5-3-02, 5-3-04, 5-3-05, 5-3-07 and 5-3-11: various parcels). The Kahana and Punaluu Valleys are now Ahupuaa O Kahana State Park and an agricultural community, respectively.\r\rThe Army acquired 485.25 acres in Kahana Valley by license in November 1944 retroactive to May 1943. In neighboring Punaluu valley, the Army executed leases, licenses, and informal agreements between October 1943 and March 1947, with several instruments retroactive to October 1943, to acquire 1,724.52 acres. The Army established Pacific Jungle Combat Training Center (also known as the Unit Jungle Training Center/Instructors Jungle Training School) on 6 September 1943 for training in basic and advanced jungle warfare. Subjects taught included jungle first aid and evacuation; hand-to-hand combat; construction and passage of wire entanglements; booby traps and demolitions; patrolling and ambushing; hip shooting and infiltration; stream crossing expedients; assault with bayonets; assault of Japanese fortified areas; combat reaction proficiency; and jungle living.\r\rThe Army terminated the licenses for usage of Kahana Valley parcels on 31 August 1946. The Army terminated the leases, licenses, and informal permits comprising the various Punaluu Valley parcels beginning in April 1945 and concluding on 30 November 1950. Kahana Valley is presently under the purview of the Hawaii Department of Land and Natural Resources and was set aside as a state park in the 1960s. Punaluu Valley is owned by numerous small landowners and Kamehameha Schools/Bernice Pauahi Bishop Estate lessees engaged in the cultivation of diversified agricultural crops.", "USACEDIVISION": "pod"}, "geometry": {"type": "Point", "coordinates": [-157.90679931599996, 21.554199219000054]}}, {"type": "Feature", "properties": {"OBJECTID": 6974, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "SAN BENITO", "CONGRESSIONALDISTRICT": "20", "COUNTY": "SAN BENITO", "CURRENTOWNER": "OTHER: OTHER Several local agencies use the site as the Call Mountain Mobile Radio Relay Facility.", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=57284", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "Call Mountain Radio Relay Annex", "FUDSINSTALLATIONID": "CA99799F570500", "FUDSUNIQUEPROPERTYNUMBER": "J09CA0764", "HASPROJECTS": "Yes", "LATITUDE": 36.61472222, "LONGITUDE": -121.06777778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with all projects at site closeout", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spk", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "Prior to DoD use, the Site was open grazing land for livestock. Former Call Mountain Radio Relay Annex was established on 2 March 1955 as a radio relay station under the operational control of Mill Valley Air Force Station. The Site consisted of a concrete block radio relay and generator building and an antenna farm consisting of four 60-foot antenna poles on 0.84 acre of land. Documents on file at the National Archives and Records Administration in College Park, Maryland, indicated that the primary electrical power was supplied by the Pacific Gas and Electric Company, which installed 3 miles of pole line in order to provide this service at the Site; therefore, no underground storage tanks were installed. On 14 August 1958, the U.S. Air Force terminated its lease with the property owner. The Site is currently privately owned, and new buildings located on-Site are used as a radio relay and transmitter site for public safety agencies in San Benito County.", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-121.06768798799999, 36.61480712900004]}}, {"type": "Feature", "properties": {"OBJECTID": 7018, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "PANAMINT SPRINGS", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=60971", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "PANAMINT DRY LAKE TEST", "FUDSINSTALLATIONID": "CA99799F533000", "FUDSUNIQUEPROPERTYNUMBER": "J09CA0127", "HASPROJECTS": "No", "LATITUDE": 36.33333333, "LONGITUDE": -117.39166667, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "THIS SITE WAS USED AS AN EMERGENCY LANDING AREA ", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.391601563, 36.33343505900007]}}, {"type": "Feature", "properties": {"OBJECTID": 7046, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KEELER", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54232", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "KEELER SODA PLANT", "FUDSINSTALLATIONID": "CA99799FA02200", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7199", "HASPROJECTS": "No", "LATITUDE": 36.46944444, "LONGITUDE": -117.85555556, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.85546874999994, 36.46960449200003]}}, {"type": "Feature", "properties": {"OBJECTID": 7428, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "SACRAMENTO", "CONGRESSIONALDISTRICT": "04", "COUNTY": "SACRAMENTO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=53883", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "McClellan AFB Outer Marker", "FUDSINSTALLATIONID": "CA99799F523100", "FUDSUNIQUEPROPERTYNUMBER": "J09CA0010", "HASPROJECTS": "No", "LATITUDE": 38.75138889, "LONGITUDE": -121.40027778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spk", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "On 14 April 1952, the Department of Defense (DoD) acquired a total of 0.43 acre, including 0.26 acre in fee and 0.17 acre in easement from private interests. The DoD constructed a communications equipment building and an access road, and installed two electric utility poles and 436 linear feet of chain link fence. The site was used as an instrument landing facility in support of McClellan Air Force Base (AFB). On 25 September 1978, the 0.43 acre was reported as excess to the General Services Administration, who conveyed 0.26 acre in fee and 0.17 acre in easement to Jack Garfield on 22 June 1979. No hazards have been identified related to former Department of Defense activities.", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-121.40020751999998, 38.75158691400003]}}, {"type": "Feature", "properties": {"OBJECTID": 7565, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "PINTO PEAK", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=63165", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "PINTO PEAK", "FUDSINSTALLATIONID": "CA99799FA45600", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7429", "HASPROJECTS": "No", "LATITUDE": 36.3875, "LONGITUDE": -117.23527778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.23529052699996, 36.387634277000075]}}, {"type": "Feature", "properties": {"OBJECTID": 7689, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "INDEPENDENCE", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": "OTHER: OTHER CITY OF LOS ANGELES AND THE DEPT OF THE INTERIOR (NATIONAL \nPARKS SERVICE).\n ", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62560", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "CAMP MANZANAR", "FUDSINSTALLATIONID": "CA99799F743900", "FUDSUNIQUEPROPERTYNUMBER": "J09CA0137", "HASPROJECTS": "Yes", "LATITUDE": 36.725, "LONGITUDE": -118.15277778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with all projects at site closeout", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "In March 1942, the Wartime Civilian Control Administration (WAA), under the direction of the Western Defense Command - Fourth Army, requested the South Pacific Division of the United States Engineer Corps to construct suitable facilities at Manzanar to receive voluntary and forced Japanese American internees from the west coast of the United States. Using Army and Japanese American labor, approximately 825 buildings and structures were constructed. These included 445 barracks, 30 recreation halls, 32 mess halls, male and female latrines, and laundry facilities. Other improvements included an administration building, an auditorium, 37 warehouses, 8 observation towers, 2 sentry houses, police headquarters, and maintenance facilities. Hospital facilities and an orphanage were also provided. All of these facilities were constructed of wood, covered with tar paper, and situated on approximately 670 acres of the site. Other facilities on the remainder of the site included a 600,000 gallon reservoir, irrigation improvements, water and sewage treatment facilities, hog pens and chicken houses.", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-118.15270996099997, 36.725219727000024]}}, {"type": "Feature", "properties": {"OBJECTID": 7691, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "LONE PINE", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": "LOCAL: CITY RESIDENTIAL PRIV: PRIVATE RESIDENTIAL ", "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=62589", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "MT. WHITNEY MILITARY RESERVATION", "FUDSINSTALLATIONID": "CA99799F744000", "FUDSUNIQUEPROPERTYNUMBER": "J09CA0138", "HASPROJECTS": "Yes", "LATITUDE": 36.56666667, "LONGITUDE": -118.13888889, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with all projects at site closeout", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-118.13891601599994, 36.56683349600007]}}, {"type": "Feature", "properties": {"OBJECTID": 7831, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "DEATH VALLEY NATIONAL PARK", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=63099", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "DEATH VALLEY NATIONAL PARK", "FUDSINSTALLATIONID": "CA99799FA39000", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7363", "HASPROJECTS": "No", "LATITUDE": 36.78333333, "LONGITUDE": -117.31111111, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "Various aircraft crash sites identified all reside within the boundaries of Death Valley National Park. which consists of 3,336,000 acres of land. \r\rThe Park area ha been used by the U.S. Armed forces for pracice flighs and maneuvers throughout its history. Records indicate that this practice was intensified during WWII and continues today. Information collected identified a total of 20 crash sites and potentially associated with the Department of Defense within the Park boundaries.", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.311096191, 36.783386230000076]}}, {"type": "Feature", "properties": {"OBJECTID": 7866, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "OLANCHA", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=63160", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "OLANCHA AIRFIELD", "FUDSINSTALLATIONID": "CA99799FA45100", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7424", "HASPROJECTS": "No", "LATITUDE": 36.28361111, "LONGITUDE": -118.00027778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": " OLANCHA AIRFIELD WAS ESTABLISHED IN THE EARLY 1930'S ON AN ESTIMATED 100 ACRES OF PRIVATELY OWNED \r\nLAND. THE AIRFIELD , WAS A DIRT LANDING STRIP. FUEL WAS PUMPED BY HAND FROM 55-GALLON DRUMS. THE AIRFIELD SERVED THE \r\nPUBLIC VISITING THE AREA FOR RECREATION THROUGH THE 1930'S AND 1940S. THE AIRFIELD WAS CLOSED IN 1950 FOLLOWING A PERIOD \r\nOF INFREQUENT USE AND THE SITE IS NOW COMMERCIALLY DEVELOPED. THERE IS NO EVIDENCE OF THE FORMER AIRFIELD AT THE SITE.\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-118.00030517599998, 36.283813477000024]}}, {"type": "Feature", "properties": {"OBJECTID": 7977, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "DEATH VALLEY", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=63103", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "FURNANCE CREEK AIRPORT(OLD AIRPORT)", "FUDSINSTALLATIONID": "CA99799FA39400", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7367", "HASPROJECTS": "No", "LATITUDE": 36.46111111, "LONGITUDE": -116.8625, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-116.86248779299996, 36.46124267600004]}}, {"type": "Feature", "properties": {"OBJECTID": 8235, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "STOVEPIPE WELLS", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=63184", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "STOVEPIPE WELLS AIRPORT", "FUDSINSTALLATIONID": "CA99799FA47400", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7448", "HASPROJECTS": "No", "LATITUDE": 36.60666667, "LONGITUDE": -117.16416667, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "Information on Stovepipe Wells Airport is scant. The earliest written reference to the airport is a map of the California Arizona Maneuver Area, Map No 238, titled \"General Map\", December 1942, which shows Stovepipe Wells Airport as an intermediate landing field. Although this 1942 map shows Stovepipe Wells Airport, a later map published in 1944 does not show an airport at Stovepipe Wells. There is no listing for the airport in general aviation directories through 1948. The listing of the airport on a 1942 map and its absence from general airport directories through 1948, suggest that it was an infrequently used dirt strip until 1947, when the Stovepipe Wells Hotel was sold to a Mr. George Putman. Mr. Putman succeeded in constructing two short runways on his property, despite objections from the Director of the Department of the Interior. Since the establishment of Death Valley National Monument in 193 3, the privately owned Stovepipe Wells Hotel has accommodated visitors to the area in competition with Furnace Creek Inn and Ranch, and the airport, for years a dirt landing strip, served to attract visitors who arrived by plane. Stovepipe Wells Airport was privately owned and operated until 1978, when ownership was transferred to the National Park Service, which has since operated the airport. The airport is currently used by the National Park Service and by visitors entering Death Valley National Park at Stovepipe Wells in light planes.\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.16418456999997, 36.60681152300003]}}, {"type": "Feature", "properties": {"OBJECTID": 8237, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "TELESCOPE PEAK", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=63186", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "TELESCOPE PEAK", "FUDSINSTALLATIONID": "CA99799FA47600", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7450", "HASPROJECTS": "No", "LATITUDE": 36.15833333, "LONGITUDE": -117.06944444, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.06939697299998, 36.158386230000076]}}, {"type": "Feature", "properties": {"OBJECTID": 8499, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "KEELER", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=53990", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "KEELER TALC PLANT", "FUDSINSTALLATIONID": "CA99799FA02100", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7198", "HASPROJECTS": "No", "LATITUDE": 36.4875, "LONGITUDE": -117.87361111, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.873596191, 36.487609863000046]}}, {"type": "Feature", "properties": {"OBJECTID": 8500, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "SE OF INDEPENDENCE", "CONGRESSIONALDISTRICT": "08", "COUNTY": "KERN", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=53989", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "DEATH VALLEY SALT PLANT", "FUDSINSTALLATIONID": "CA99799FA02400", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7201", "HASPROJECTS": "No", "LATITUDE": 36.28333333, "LONGITUDE": -116.82972222, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-116.82971191399997, 36.283386230000076]}}, {"type": "Feature", "properties": {"OBJECTID": 8557, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "BALLARAT DRY LAKE", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=53852", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "PANAMINT FLAT DRY LAKE", "FUDSINSTALLATIONID": "CA99799F535900", "FUDSUNIQUEPROPERTYNUMBER": "J09CA0231", "HASPROJECTS": "No", "LATITUDE": 35.95833333, "LONGITUDE": -117.21666667, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "THIS SITE WAS AN EMERGENCY LANDING SITE FOR X-15 AIRCRAFT. ", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.21667480499997, 35.95843505900007]}}, {"type": "Feature", "properties": {"OBJECTID": 8624, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "LONE PINE", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54233", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "LONE PINE AIRPORT", "FUDSINSTALLATIONID": "CA99799FA02000", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7197", "HASPROJECTS": "No", "LATITUDE": 36.59472222, "LONGITUDE": -118.05, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "THE DEPARTMENT OF THE DEFENSE (DOD) IS NOT KNOWN TO HAVE ACQUIRED NOR HAVE ANY CONTROLLING INTEREST IN LONE PINE AIRPORT. THE DOD IS NOT KNOW TO HAVE CONSTRUCTED ANY FACILITIES AT EHT AIRPORT.\r\n\r\n\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-118.04998779299996, 36.59478759800004]}}, {"type": "Feature", "properties": {"OBJECTID": 8742, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "PANAMINT MOUNTAINS", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=53467", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "PANAMINT BOMBING & AERIAL GUNNERY RANGE", "FUDSINSTALLATIONID": "CA99799FA33400", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7314", "HASPROJECTS": "No", "LATITUDE": 36.27777778, "LONGITUDE": -117.03583333, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.03576660199997, 36.27801513700007]}}, {"type": "Feature", "properties": {"OBJECTID": 9012, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "7 MILES E OF TECOPA", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=53984", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "SHOSHONE LEAD MINES", "FUDSINSTALLATIONID": "CA99799FA03200", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7209", "HASPROJECTS": "No", "LATITUDE": 35.83361111, "LONGITUDE": -116.10027778, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "DEVELOPMENT OF THE SHOSHONE LEAD MINES BEGAN IN THE EARLY 1900S. THE PROPERTY HAS BEEN UNDER PRIVATE CONTROL FROM 1907 TO THE PRESENT DAY THROUGH PATENTED MINING CLAIMS. THE SHOSHONE MINE SITE COMPRISES 18 PATENTED AND 41 UNPATENTED CLAIMS AND SEVERAL MILL SITES ABOUT SEVEN MILES EAST OF TECOPA, INYO COUNTY, CALIFORNIA. THE INDIVIDUAL MINES INCLUDE THE ALEXANDER, APEX CONSTRUCTION, BLACK PRINCE, COLUMBIA NO. 2, GRANT, GUNSIGHT, MABEL, NOONDAY, ORO FINO, RAINBOW, AND WAR EAGLE MINES. TECOPA CONSOLIDATED MINING OWNED AND FIRST OPERATED SHOSHONE MINES FROM 1907 TO 1938. THE PROPERTY WAS PURCHASED BY SHOSHONE MINES INC, IN 1940, BY THE FINLEY COMPANY (SHOSHONE DIVISION) IN MAY 1945, AND BY THE ANACONDA COPPER MINING COMPANY IN JUNE 1947. THE MINES WERE CLOSED AFTER 1956 WHEN EXPLORATION FAILED TO DEVELOP FURTHER HIGH-GRADE RESERVES. THE CURRENT OWNERS OF THE MINES ARE LISTED BY THE INYO COUNTY ASSESSORS OFFICE AS MARSHFIELD DEVELOPMENT INC., BOX 2182, SALEM, OREGON 97308.\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-116.10028076199995, 35.83380127000004]}}, {"type": "Feature", "properties": {"OBJECTID": 9035, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": "CHINA LAKE NAVAL WEAPONS CENTER", "CONGRESSIONALDISTRICT": "08", "COUNTY": "INYO", "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=53986", "EPAREGION": "09", "FEATUREDESCRIPTION": null, "FEATURENAME": "NAVAL ORDNANCE TEST STATION", "FUDSINSTALLATIONID": "CA99799FA03300", "FUDSUNIQUEPROPERTYNUMBER": "J09CA7210", "HASPROJECTS": "Yes", "LATITUDE": 36.1441, "LONGITUDE": -117.864998, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "Yes", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with all projects at site closeout", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "spl", "FISCALYEAR": "2019", "PROPERTY_HISTORY": "N/A\r\n\r\n", "USACEDIVISION": "spd"}, "geometry": {"type": "Point", "coordinates": [-117.86499023399995, 36.14422607400007]}}, {"type": "Feature", "properties": {"OBJECTID": 51, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 19.497857096442765, "LONGITUDE": -155.10320912843935, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-155.10320912843935, 19.497857096442765]}}, {"type": "Feature", "properties": {"OBJECTID": 52, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 19.497857096442765, "LONGITUDE": -155.10320912843935, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-155.10320912843935, 19.497857096442765]}}, {"type": "Feature", "properties": {"OBJECTID": 53, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "No", "LATITUDE": 19.497857096442765, "LONGITUDE": -155.10320912843935, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-155.10320912843935, 19.497857096442765]}}, {"type": "Feature", "properties": {"OBJECTID": 54, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 19.516632121497878, "LONGITUDE": -155.91378674587037, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-155.91378674587037, 19.516632121497878]}}, {"type": "Feature", "properties": {"OBJECTID": 55, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 19.516632121497878, "LONGITUDE": -155.91378674587037, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-155.91378674587037, 19.516632121497878]}}, {"type": "Feature", "properties": {"OBJECTID": 56, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "No", "LATITUDE": 19.516632121497878, "LONGITUDE": -155.91378674587037, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-155.91378674587037, 19.516632121497878]}}, {"type": "Feature", "properties": {"OBJECTID": 57, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 20.825377142028497, "LONGITUDE": -156.3306524489697, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-156.3306524489697, 20.825377142028497]}}, {"type": "Feature", "properties": {"OBJECTID": 58, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 20.825377142028497, "LONGITUDE": -156.3306524489697, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-156.3306524489697, 20.825377142028497]}}, {"type": "Feature", "properties": {"OBJECTID": 59, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "No", "LATITUDE": 20.825377142028497, "LONGITUDE": -156.3306524489697, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-156.3306524489697, 20.825377142028497]}}, {"type": "Feature", "properties": {"OBJECTID": 60, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 20.917074254751412, "LONGITUDE": -156.5429023670438, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-156.5429023670438, 20.917074254751412]}}, {"type": "Feature", "properties": {"OBJECTID": 61, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 20.917074254751412, "LONGITUDE": -156.5429023670438, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-156.5429023670438, 20.917074254751412]}}, {"type": "Feature", "properties": {"OBJECTID": 62, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "No", "LATITUDE": 20.917074254751412, "LONGITUDE": -156.5429023670438, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-156.5429023670438, 20.917074254751412]}}, {"type": "Feature", "properties": {"OBJECTID": 63, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Eligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 21.907546119100093, "LONGITUDE": -159.48416820625405, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-159.48416820625405, 21.907546119100093]}}, {"type": "Feature", "properties": {"OBJECTID": 64, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "Yes", "LATITUDE": 21.907546119100093, "LONGITUDE": -159.48416820625405, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties with projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-159.48416820625405, 21.907546119100093]}}, {"type": "Feature", "properties": {"OBJECTID": 65, "CENTROIDLAT": null, "CENTROIDLONG": null, "CLOSESTCITY": null, "CONGRESSIONALDISTRICT": "15", "COUNTY": null, "CURRENTOWNER": null, "DODFUDSPROPERTYIDPK": " ", "ELIGIBILITY": "Ineligible", "EMSMGMTACTIONPLANLINK": "https://fudsportal.usace.army.mil/ems/inventory/map?id=54113", "EPAREGION": "06", "FEATUREDESCRIPTION": null, "FEATURENAME": "NEIL, ET AL, PROPERTIES", "FUDSINSTALLATIONID": null, "FUDSUNIQUEPROPERTYNUMBER": "K06TX1120", "HASPROJECTS": "No", "LATITUDE": 21.907546119100093, "LONGITUDE": -159.48416820625405, "MEDIAID": null, "METADATAID": null, "NOFURTHERACTION": null, "PROJECTREQUIRED": "No", "SDSID": null, "SITEELIGIBILITY": null, "STATE": "CA", "STATUS": "Properties without projects", "STATUSCODE": "Not on the NPL", "USACEDISTRICT": "swf", "FISCALYEAR": "2019", "PROPERTY_HISTORY": null, "USACEDIVISION": "swd"}, "geometry": {"type": "Point", "coordinates": [-159.48416820625405, 21.907546119100093]}}]} diff --git a/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/output.csv b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/output.csv new file mode 100644 index 000000000..38b5685cc --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/output.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Count of eligible Formerly Used Defense Site (FUDS) properties centroids,Count of ineligible Formerly Used Defense Site (FUDS) properties centroids,Is there at least one Formerly Used Defense Site (FUDS) in the tract? +06027000800,3,14,True +06061021322,1,2,True +06069000802,1,0,True +15001021010,1,2,True +15001021101,0,1,False +15001021402,1,2,True +15001021800,1,2,True +15003010201,2,1,True +15007040603,0,2,False +15007040604,1,2,True +15007040700,1,2,True +15009030100,0,1,False +15009030201,1,2,True +15009030402,1,2,True +15009030800,1,2,True diff --git a/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/transform.csv b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/transform.csv new file mode 100644 index 000000000..38b5685cc --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/data/transform.csv @@ -0,0 +1,16 @@ +GEOID10_TRACT,Count of eligible Formerly Used Defense Site (FUDS) properties centroids,Count of ineligible Formerly Used Defense Site (FUDS) properties centroids,Is there at least one Formerly Used Defense Site (FUDS) in the tract? +06027000800,3,14,True +06061021322,1,2,True +06069000802,1,0,True +15001021010,1,2,True +15001021101,0,1,False +15001021402,1,2,True +15001021800,1,2,True +15003010201,2,1,True +15007040603,0,2,False +15007040604,1,2,True +15007040700,1,2,True +15009030100,0,1,False +15009030201,1,2,True +15009030402,1,2,True +15009030800,1,2,True diff --git a/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/test_etl.py b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/test_etl.py new file mode 100644 index 000000000..58e755662 --- /dev/null +++ b/data/data-pipeline/data_pipeline/tests/sources/us_army_fuds/test_etl.py @@ -0,0 +1,192 @@ +# pylint: disable=protected-access +import pathlib +from unittest import mock + +from data_pipeline.etl.base import ValidGeoLevel +from data_pipeline.etl.sources.us_army_fuds.etl import USArmyFUDS +from data_pipeline.tests.sources.example.test_etl import TestETL +from data_pipeline.utils import get_module_logger + +logger = get_module_logger(__name__) + + +def _fake_add_tracts_for_geometries(df): + """The actual geojoin is too slow for tests. Use precomputed results.""" + lookups = { + (-121.39361572299998, 38.87463378900003): "06061021322", + (-121.40020751999998, 38.897583008000026): "06061021322", + (-121.40020751999998, 38.75158691400003): "06061021322", + (-157.84301757799997, 21.53619384800004): "15003010201", + (-157.85168456999997, 21.553405762000068): "15003010201", + (-157.90679931599996, 21.554199219000054): "15003010201", + (-159.52191162099996, 21.976623535000044): "15007040700", + (-159.52996826199998, 21.93762207000003): "15007040700", + (-159.52111816399997, 21.922607422000056): "15007040700", + (-156.14270019499997, 20.840393066000047): "15009030100", + (-155.85968017599998, 20.26519775400004): "15001021800", + (-155.73327636699997, 20.166809082000043): "15001021800", + (-155.89270019499997, 20.23522949200003): "15001021800", + (-156.26019287099996, 20.899414062000062): "15009030201", + (-156.22076415999996, 20.91241455100004): "15009030201", + (-156.20739746099997, 20.890991211000028): "15009030201", + (-159.46496581999997, 21.90460205100004): "15007040603", + (-159.46441650399998, 21.905212402000075): "15007040603", + (-154.82519531299997, 19.49182128900003): "15001021101", + (-121.06768798799999, 36.61480712900004): "06069000802", + (-117.391601563, 36.33343505900007): "06027000800", + (-117.85546874999994, 36.46960449200003): "06027000800", + (-117.23529052699996, 36.387634277000075): "06027000800", + (-118.15270996099997, 36.725219727000024): "06027000800", + (-118.13891601599994, 36.56683349600007): "06027000800", + (-117.311096191, 36.783386230000076): "06027000800", + (-118.00030517599998, 36.283813477000024): "06027000800", + (-116.86248779299996, 36.46124267600004): "06027000800", + (-117.16418456999997, 36.60681152300003): "06027000800", + (-117.06939697299998, 36.158386230000076): "06027000800", + (-117.873596191, 36.487609863000046): "06027000800", + (-116.82971191399997, 36.283386230000076): "06027000800", + (-117.21667480499997, 35.95843505900007): "06027000800", + (-118.04998779299996, 36.59478759800004): "06027000800", + (-117.03576660199997, 36.27801513700007): "06027000800", + (-116.10028076199995, 35.83380127000004): "06027000800", + (-117.86499023399995, 36.14422607400007): "06027000800", + (-155.10320912843935, 19.497857096442765): "15001021010", + (-155.91378674587037, 19.516632121497878): "15001021402", + (-156.3306524489697, 20.825377142028497): "15009030402", + (-156.5429023670438, 20.917074254751412): "15009030800", + (-159.48416820625405, 21.907546119100093): "15007040604", + } + df["GEOID10_TRACT"] = df.geometry.apply( + lambda point: lookups[(point.x, point.y)] + ) + return df + + +class TestUSArmyFUDSETL(TestETL): + """Tests the FUDS ETL. + + This uses pytest-snapshot. + To update individual snapshots: $ poetry run pytest + data_pipeline/tests/sources/us_army_fuds/test_etl.py::TestClassNameETL:: + --snapshot-update + """ + + _ETL_CLASS = USArmyFUDS + + _SAMPLE_DATA_PATH = pathlib.Path(__file__).parents[0] / "data" + _SAMPLE_DATA_FILE_NAME = "fuds.geojson" + _SAMPLE_DATA_ZIP_FILE_NAME = "fuds.geojson" + _EXTRACT_TMP_FOLDER_NAME = "USArmyFUDS" + + def setup_method(self, _method, filename=__file__): + """Invoke `setup_method` from Parent, but using the current file name. + + This code can be copied identically between all child classes. + """ + super().setup_method(_method=_method, filename=filename) + + def test_init(self, mock_etl, mock_paths): + """Tests that the mock NationalRiskIndexETL class instance was + initiliazed correctly. + + Validates the following conditions: + - self.DATA_PATH points to the "data" folder in the temp directory + - self.TMP_PATH points to the "data/tmp" folder in the temp directory + - self.INPUT_PATH points to the correct path in the temp directory + - self.OUTPUT_PATH points to the correct path in the temp directory + """ + # setup + etl = self._get_instance_of_etl_class() + # validation + assert etl.GEOID_FIELD_NAME == "GEOID10" + assert etl.GEOID_TRACT_FIELD_NAME == "GEOID10_TRACT" + assert etl.NAME == "us_army_fuds" + assert etl.GEO_LEVEL == ValidGeoLevel.CENSUS_TRACT + assert etl.COLUMNS_TO_KEEP == [ + etl.GEOID_TRACT_FIELD_NAME, + etl.ELIGIBLE_FUDS_COUNT_FIELD_NAME, + etl.INELIGIBLE_FUDS_COUNT_FIELD_NAME, + etl.ELIGIBLE_FUDS_BINARY_FIELD_NAME, + ] + + def test_get_output_file_path(self, mock_etl, mock_paths): + """Tests the right file name is returned.""" + etl = self._get_instance_of_etl_class() + data_path, tmp_path = mock_paths + + output_file_path = etl._get_output_file_path() + expected_output_file_path = ( + data_path / "dataset" / self._ETL_CLASS.NAME / "usa.csv" + ) + assert output_file_path == expected_output_file_path + + def test_fixtures_contain_shared_tract_ids_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.us_army_fuds.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + return super().test_fixtures_contain_shared_tract_ids_base( + mock_etl, mock_paths + ) + + def test_transform_base(self, snapshot, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.us_army_fuds.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + super().test_transform_base( + snapshot=snapshot, mock_etl=mock_etl, mock_paths=mock_paths + ) + + def test_transform_sets_output_df_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.us_army_fuds.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + super().test_transform_sets_output_df_base( + mock_etl=mock_etl, mock_paths=mock_paths + ) + + def test_validate_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.us_army_fuds.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + super().test_validate_base(mock_etl=mock_etl, mock_paths=mock_paths) + + def test_full_etl_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.us_army_fuds.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + return super().test_full_etl_base(mock_etl, mock_paths) + + def test_get_data_frame_base(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.us_army_fuds.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + return super().test_get_data_frame_base(mock_etl, mock_paths) + + def test_tracts_without_fuds_not_in_results(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.us_army_fuds.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + etl = self._setup_etl_instance_and_run_extract( + mock_etl=mock_etl, mock_paths=mock_paths + ) + etl.transform() + etl.validate() + etl.load() + df = etl.get_data_frame() + assert len(df[etl.GEOID_TRACT_FIELD_NAME]) == len( + self._FIXTURES_SHARED_TRACT_IDS + ) + + def test_tract_id_lengths(self, mock_etl, mock_paths): + with mock.patch( + "data_pipeline.etl.sources.us_army_fuds.etl.add_tracts_for_geometries", + new=_fake_add_tracts_for_geometries, + ): + return super().test_tract_id_lengths(mock_etl, mock_paths) diff --git a/data/data-pipeline/data_pipeline/tests/test_etl.py b/data/data-pipeline/data_pipeline/tests/test_etl.py index 8af3e91c4..cbe45cf37 100644 --- a/data/data-pipeline/data_pipeline/tests/test_etl.py +++ b/data/data-pipeline/data_pipeline/tests/test_etl.py @@ -1,6 +1,7 @@ # pylint: disable=protected-access import pytest -from data_pipeline.etl import constants, runner +from data_pipeline.etl import constants +from data_pipeline.etl import runner def test_get_datasets_to_run(): diff --git a/data/data-pipeline/data_pipeline/tile/generate.py b/data/data-pipeline/data_pipeline/tile/generate.py index 82e9404e1..ec03ad3ce 100644 --- a/data/data-pipeline/data_pipeline/tile/generate.py +++ b/data/data-pipeline/data_pipeline/tile/generate.py @@ -2,7 +2,8 @@ from pathlib import Path from subprocess import call -from data_pipeline.utils import get_module_logger, remove_all_from_dir +from data_pipeline.utils import get_module_logger +from data_pipeline.utils import remove_all_from_dir logger = get_module_logger(__name__) @@ -41,6 +42,7 @@ def _generate_score_tiles() -> None: logger.info("Generating USA High mbtiles file") cmd = "tippecanoe " cmd += f"--minimum-zoom={USA_HIGH_MIN_ZOOM} --maximum-zoom={USA_HIGH_MAX_ZOOM} --layer=blocks " + cmd += "--no-feature-limit --no-tile-size-limit " cmd += f"--output={high_tile_path}/usa_high.mbtiles " cmd += str(score_geojson_dir / "usa-high.json") call(cmd, shell=True) @@ -49,7 +51,7 @@ def _generate_score_tiles() -> None: logger.info("Generating USA High mvt folders and files") cmd = "tippecanoe " cmd += f"--minimum-zoom={USA_HIGH_MIN_ZOOM} --maximum-zoom={USA_HIGH_MAX_ZOOM} --no-tile-compression " - cmd += "--drop-densest-as-needed " + cmd += "--no-feature-limit --no-tile-size-limit " cmd += f"--output-to-directory={high_tile_path} --layer=blocks " cmd += str(score_geojson_dir / "usa-high.json") call(cmd, shell=True) diff --git a/data/data-pipeline/data_pipeline/utils.py b/data/data-pipeline/data_pipeline/utils.py index 0ec626165..55289475b 100644 --- a/data/data-pipeline/data_pipeline/utils.py +++ b/data/data-pipeline/data_pipeline/utils.py @@ -1,26 +1,24 @@ -from typing import List, Union import datetime import json import logging import os -import sys import shutil +import sys import uuid import zipfile from pathlib import Path -from marshmallow import ValidationError -import urllib3 +from typing import List +from typing import Union + import requests +import urllib3 import yaml -from marshmallow_dataclass import class_schema - from data_pipeline.config import settings -from data_pipeline.content.schemas.download_schemas import ( - CSVConfig, - CodebookConfig, - ExcelConfig, -) - +from data_pipeline.content.schemas.download_schemas import CodebookConfig +from data_pipeline.content.schemas.download_schemas import CSVConfig +from data_pipeline.content.schemas.download_schemas import ExcelConfig +from marshmallow import ValidationError +from marshmallow_dataclass import class_schema ## zlib is not available on all systems try: @@ -149,7 +147,9 @@ def download_file_from_url( os.mkdir(download_file_name.parent) logger.info(f"Downloading {file_url}") - response = requests.get(file_url, verify=verify) + response = requests.get( + file_url, verify=verify, timeout=settings.REQUESTS_DEFAULT_TIMOUT + ) if response.status_code == 200: file_contents = response.content else: @@ -1409,6 +1409,8 @@ def get_excel_column_name(index: int) -> str: "ALI", "ALJ", "ALK", + "ALL", + "ALM", ] return excel_column_names[index] diff --git a/data/data-pipeline/poetry.lock b/data/data-pipeline/poetry.lock index a26dac7b4..eaa14e4d2 100644 --- a/data/data-pipeline/poetry.lock +++ b/data/data-pipeline/poetry.lock @@ -22,8 +22,8 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] +doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] trio = ["trio (>=0.16)"] [[package]] @@ -46,8 +46,8 @@ python-versions = ">=3.6" argon2-cffi-bindings = "*" [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] +dev = ["pre-commit", "cogapp", "tomli", "coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "sphinx-notfound-page", "furo"] +docs = ["sphinx", "sphinx-notfound-page", "furo"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] [[package]] @@ -62,7 +62,7 @@ python-versions = ">=3.6" cffi = ">=1.0.1" [package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] +dev = ["pytest", "cogapp", "pre-commit", "wheel"] tests = ["pytest"] [[package]] @@ -95,10 +95,10 @@ optional = false python-versions = ">=3.5" [package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "babel" @@ -174,7 +174,7 @@ webencodings = "*" [package.extras] css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["Sphinx (==4.3.2)", "black (==22.3.0)", "build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "mypy (==0.961)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)"] +dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "Sphinx (==4.3.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)", "black (==22.3.0)", "mypy (==0.961)"] [[package]] name = "censusdata" @@ -241,7 +241,7 @@ python-versions = "*" click = ">=4.0" [package.extras] -dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] +dev = ["pytest (>=3.6)", "pytest-cov", "wheel", "coveralls"] [[package]] name = "cligj" @@ -274,8 +274,8 @@ optional = false python-versions = ">=3.6" [package.extras] -docs = ["jaraco.packaging (>=8.2)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "types-backports"] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "types-backports", "pytest-black (>=0.3.7)", "pytest-mypy"] [[package]] name = "cycler" @@ -341,23 +341,23 @@ packaging = "*" toml = "*" [package.extras] -conda = ["pyyaml"] pipenv = ["pipenv"] +conda = ["pyyaml"] [[package]] name = "dynaconf" -version = "3.1.9" +version = "3.1.11" description = "The dynamic configurator for your Python Project" category = "main" optional = false python-versions = ">=3.7" [package.extras] -all = ["configobj", "hvac", "redis", "ruamel.yaml"] +all = ["redis", "ruamel.yaml", "configobj", "hvac"] configobj = ["configobj"] ini = ["configobj"] redis = ["redis"] -test = ["codecov", "configobj", "django", "flake8", "flake8-debugger", "flake8-print", "flake8-todo", "flask (>=0.12)", "hvac", "pep8-naming", "pytest", "pytest-cov", "pytest-mock", "pytest-xdist", "python-dotenv", "radon", "redis", "toml"] +test = ["pytest", "pytest-cov", "pytest-xdist", "pytest-mock", "flake8", "pep8-naming", "flake8-debugger", "flake8-print", "flake8-todo", "radon", "flask (>=0.12)", "django", "python-dotenv", "toml", "codecov", "redis", "hvac", "configobj"] toml = ["toml"] vault = ["hvac"] yaml = ["ruamel.yaml"] @@ -387,7 +387,7 @@ optional = false python-versions = "*" [package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] [[package]] name = "filelock" @@ -419,10 +419,10 @@ munch = "*" six = ">=1.7" [package.extras] -all = ["boto3 (>=1.2.4)", "mock", "pytest (>=3)", "pytest-cov", "shapely"] +all = ["boto3 (>=1.2.4)", "pytest-cov", "shapely", "pytest (>=3)", "mock"] calc = ["shapely"] s3 = ["boto3 (>=1.2.4)"] -test = ["boto3 (>=1.2.4)", "mock", "pytest (>=3)", "pytest-cov"] +test = ["pytest (>=3)", "pytest-cov", "boto3 (>=1.2.4)", "mock"] [[package]] name = "flake8" @@ -446,9 +446,9 @@ optional = false python-versions = ">=3.7" [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=14.0.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "zopfli (>=0.1.4)", "lz4 (>=1.7.4.2)", "matplotlib", "sympy", "skia-pathops (>=0.5.0)", "uharfbuzz (>=0.23.0)", "brotlicffi (>=0.8.0)", "scipy", "brotli (>=1.0.1)", "munkres", "unicodedata2 (>=14.0.0)", "xattr"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] +interpolatable = ["scipy", "munkres"] lxml = ["lxml (>=4.0,<5)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] @@ -457,7 +457,7 @@ symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=14.0.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +woff = ["zopfli (>=0.1.4)", "brotlicffi (>=0.8.0)", "brotli (>=1.0.1)"] [[package]] name = "geopandas" @@ -494,9 +494,9 @@ python-versions = ">=3.7" zipp = ">=0.5" [package.extras] -docs = ["jaraco.packaging (>=9)", "rst.linker (>=1.9)", "sphinx"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "importlib-resources" @@ -510,8 +510,8 @@ python-versions = ">=3.7" zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [[package]] name = "iniconfig" @@ -556,7 +556,7 @@ tornado = ">=6.1" traitlets = ">=5.1.0" [package.extras] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest-cov", "pytest-timeout", "pytest (>=6.0)"] [[package]] name = "ipython" @@ -585,10 +585,10 @@ doc = ["Sphinx (>=1.3)"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] +notebook = ["notebook", "ipywidgets"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["ipykernel", "nbformat", "nose (>=0.10.1)", "numpy (>=1.17)", "pygments", "requests", "testpath"] +test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] [[package]] name = "ipython-genutils" @@ -625,10 +625,10 @@ optional = false python-versions = ">=3.6.1,<4.0" [package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] plugins = ["setuptools"] -requirements_deprecated_finder = ["pip-api", "pipreqs"] [[package]] name = "jedi" @@ -730,7 +730,7 @@ tornado = ">=6.0" traitlets = "*" [package.extras] -doc = ["ipykernel", "myst-parser", "sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +doc = ["ipykernel", "myst-parser", "sphinx-rtd-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt"] test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] [[package]] @@ -791,7 +791,7 @@ tornado = "*" traitlets = ">=4.1" [package.extras] -test = ["mock", "nbformat", "nose", "pip", "requests"] +test = ["mock", "requests", "pip", "nose", "nbformat"] [[package]] name = "jupyter-core" @@ -848,7 +848,7 @@ tornado = "*" traitlets = "*" [package.extras] -test = ["jupyter-contrib-core", "mock", "nose", "requests", "selenium"] +test = ["mock", "selenium", "requests", "nose", "jupyter-contrib-core"] [[package]] name = "jupyter-server" @@ -877,11 +877,11 @@ traitlets = ">=5.1" websocket-client = "*" [package.extras] -test = ["coverage", "ipykernel", "pre-commit", "pytest (>=6.0)", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "requests"] +test = ["coverage", "ipykernel", "pre-commit", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "pytest (>=6.0)", "requests"] [[package]] name = "jupyterlab" -version = "3.4.7" +version = "3.4.4" description = "JupyterLab computational environment" category = "dev" optional = false @@ -896,11 +896,10 @@ jupyterlab-server = ">=2.10,<3.0" nbclassic = "*" notebook = "<7" packaging = "*" -tomli = "*" tornado = ">=6.1.0" [package.extras] -test = ["check-manifest", "coverage", "jupyterlab-server", "pre-commit", "pytest (>=6.0)", "pytest-check-links (>=0.5)", "pytest-console-scripts", "pytest-cov", "requests", "requests-cache", "virtualenv"] +test = ["check-manifest", "coverage", "jupyterlab-server", "pre-commit", "pytest (>=6.0)", "pytest-cov", "pytest-console-scripts", "pytest-check-links (>=0.5)", "requests", "requests-cache", "virtualenv"] ui-tests = ["build"] [[package]] @@ -931,7 +930,7 @@ requests = "*" [package.extras] openapi = ["openapi-core (>=0.14.2)", "ruamel-yaml"] -test = ["codecov", "ipykernel", "jupyter-server", "openapi-core (>=0.14.2)", "openapi-spec-validator (<0.5)", "pytest (>=5.3.2)", "pytest-console-scripts", "pytest-cov", "ruamel-yaml", "strict-rfc3339"] +test = ["codecov", "ipykernel", "jupyter-server", "openapi-core (>=0.14.2)", "openapi-spec-validator (<0.5)", "pytest-console-scripts", "pytest-cov", "pytest (>=5.3.2)", "ruamel-yaml", "strict-rfc3339"] [[package]] name = "jupyterlab-widgets" @@ -1004,9 +1003,9 @@ python-versions = ">=3.7" packaging = ">=17.0" [package.extras] -dev = ["flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "mypy (==0.961)", "pre-commit (>=2.4,<3.0)", "pytest", "pytz", "simplejson", "tox"] -docs = ["alabaster (==0.7.12)", "autodocsumm (==0.2.8)", "sphinx (==4.5.0)", "sphinx-issues (==3.0.1)", "sphinx-version-warning (==1.1.2)"] -lint = ["flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "mypy (==0.961)", "pre-commit (>=2.4,<3.0)"] +dev = ["pytest", "pytz", "simplejson", "mypy (==0.961)", "flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "pre-commit (>=2.4,<3.0)", "tox"] +docs = ["sphinx (==4.5.0)", "sphinx-issues (==3.0.1)", "alabaster (==0.7.12)", "sphinx-version-warning (==1.1.2)", "autodocsumm (==0.2.8)"] +lint = ["mypy (==0.961)", "flake8 (==4.0.1)", "flake8-bugbear (==22.6.22)", "pre-commit (>=2.4,<3.0)"] tests = ["pytest", "pytz", "simplejson"] [[package]] @@ -1022,7 +1021,7 @@ marshmallow = ">=3.13.0,<4.0" typing-inspect = ">=0.7.1" [package.extras] -dev = ["marshmallow-enum", "pre-commit (>=2.17,<3.0)", "pytest (>=5.4)", "pytest-mypy-plugins (>=1.2.0)", "sphinx", "typeguard", "typing-extensions (>=3.7.2)"] +dev = ["marshmallow-enum", "typeguard", "pre-commit (>=2.17,<3.0)", "sphinx", "pytest (>=5.4)", "pytest-mypy-plugins (>=1.2.0)", "typing-extensions (>=3.7.2)"] docs = ["sphinx"] enum = ["marshmallow-enum"] lint = ["pre-commit (>=2.17,<3.0)"] @@ -1098,7 +1097,7 @@ python-versions = "*" six = "*" [package.extras] -testing = ["astroid (>=1.5.3,<1.6.0)", "astroid (>=2.0)", "coverage", "pylint (>=1.7.2,<1.8.0)", "pylint (>=2.3.1,<2.4.0)", "pytest"] +testing = ["pytest", "coverage", "astroid (>=1.5.3,<1.6.0)", "pylint (>=1.7.2,<1.8.0)", "astroid (>=2.0)", "pylint (>=2.3.1,<2.4.0)"] yaml = ["PyYAML (>=5.1.0)"] [[package]] @@ -1165,9 +1164,9 @@ tornado = ">=6.1" traitlets = ">=4.2.1" [package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-tornasync", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] +test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium (==4.1.5)", "pytest-cov", "pytest-tornasync", "requests-unixsocket"] [[package]] name = "nbclient" @@ -1184,7 +1183,7 @@ nest-asyncio = "*" traitlets = ">=5.2.2" [package.extras] -sphinx = ["Sphinx (>=1.7)", "autodoc-traits", "mock", "moto", "myst-parser", "sphinx-book-theme"] +sphinx = ["autodoc-traits", "mock", "moto", "myst-parser", "Sphinx (>=1.7)", "sphinx-book-theme"] test = ["black", "check-manifest", "flake8", "ipykernel", "ipython (<8.0.0)", "ipywidgets (<8.0.0)", "mypy", "pip (>=18.1)", "pre-commit", "pytest (>=4.1)", "pytest-asyncio", "pytest-cov (>=2.6.1)", "setuptools (>=60.0)", "testpath", "twine (>=1.11.0)", "xmltodict"] [[package]] @@ -1215,8 +1214,8 @@ tinycss2 = "*" traitlets = ">=5.0" [package.extras] -all = ["ipykernel", "ipython", "ipywidgets (>=7)", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx (==5.0.2)", "sphinx-rtd-theme", "tornado (>=6.1)"] -docs = ["ipython", "nbsphinx (>=0.2.12)", "sphinx (==5.0.2)", "sphinx-rtd-theme"] +all = ["ipykernel", "ipython", "ipywidgets (>=7)", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx-rtd-theme", "sphinx (==5.0.2)", "tornado (>=6.1)"] +docs = ["ipython", "nbsphinx (>=0.2.12)", "sphinx-rtd-theme", "sphinx (==5.0.2)"] qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] @@ -1238,7 +1237,7 @@ jupyter-core = "*" traitlets = ">=5.1" [package.extras] -test = ["check-manifest", "pre-commit", "pytest", "testpath"] +test = ["check-manifest", "testpath", "pytest", "pre-commit"] [[package]] name = "nest-asyncio" @@ -1274,9 +1273,9 @@ tornado = ">=6.1" traitlets = ">=4.2.1" [package.extras] -docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] json-logging = ["json-logging"] -test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium", "testpath"] +test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium", "pytest-cov", "requests-unixsocket"] [[package]] name = "notebook-shim" @@ -1290,7 +1289,7 @@ python-versions = ">=3.7" jupyter-server = ">=1.8,<2.0" [package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] +test = ["pytest", "pytest-tornasync", "pytest-console-scripts"] [[package]] name = "numpy" @@ -1383,15 +1382,15 @@ tenacity = "*" tqdm = ">=4.32.2" [package.extras] -all = ["azure-datalake-store (>=0.0.30)", "azure-storage-blob (>=12.1.0)", "black (>=19.3b0)", "boto3", "gcsfs (>=0.2.0)", "pyarrow (>=2.0)", "requests (>=2.21.0)"] +all = ["boto3", "azure-datalake-store (>=0.0.30)", "azure-storage-blob (>=12.1.0)", "requests (>=2.21.0)", "gcsfs (>=0.2.0)", "pyarrow (>=2.0)", "black (>=19.3b0)"] azure = ["azure-datalake-store (>=0.0.30)", "azure-storage-blob (>=12.1.0)", "requests (>=2.21.0)"] black = ["black (>=19.3b0)"] -dev = ["attrs (>=17.4.0)", "azure-datalake-store (>=0.0.30)", "azure-storage-blob (>=12.1.0)", "black (>=19.3b0)", "boto3", "botocore", "bumpversion", "check-manifest", "codecov", "coverage", "flake8", "gcsfs (>=0.2.0)", "google-compute-engine", "ipython (>=5.0)", "ipywidgets", "moto", "notebook", "pip (>=18.1)", "pre-commit", "pyarrow (>=2.0)", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "pytest-env (>=0.6.2)", "pytest-mock (>=1.10)", "recommonmark", "requests (>=2.21.0)", "setuptools (>=38.6.0)", "tox", "twine (>=1.11.0)", "wheel (>=0.31.0)"] +dev = ["boto3", "botocore", "codecov", "coverage", "google-compute-engine", "ipython (>=5.0)", "ipywidgets", "notebook", "moto", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "pytest-mock (>=1.10)", "pytest-env (>=0.6.2)", "requests (>=2.21.0)", "check-manifest", "attrs (>=17.4.0)", "pre-commit", "flake8", "tox", "bumpversion", "recommonmark", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "azure-datalake-store (>=0.0.30)", "azure-storage-blob (>=12.1.0)", "gcsfs (>=0.2.0)", "pyarrow (>=2.0)", "black (>=19.3b0)"] gcs = ["gcsfs (>=0.2.0)"] github = ["PyGithub (>=1.55)"] hdfs = ["pyarrow (>=2.0)"] s3 = ["boto3"] -test = ["attrs (>=17.4.0)", "azure-datalake-store (>=0.0.30)", "azure-storage-blob (>=12.1.0)", "black (>=19.3b0)", "boto3", "botocore", "bumpversion", "check-manifest", "codecov", "coverage", "flake8", "gcsfs (>=0.2.0)", "google-compute-engine", "ipython (>=5.0)", "ipywidgets", "moto", "notebook", "pip (>=18.1)", "pre-commit", "pyarrow (>=2.0)", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "pytest-env (>=0.6.2)", "pytest-mock (>=1.10)", "recommonmark", "requests (>=2.21.0)", "setuptools (>=38.6.0)", "tox", "twine (>=1.11.0)", "wheel (>=0.31.0)"] +test = ["boto3", "botocore", "codecov", "coverage", "google-compute-engine", "ipython (>=5.0)", "ipywidgets", "notebook", "moto", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "pytest-mock (>=1.10)", "pytest-env (>=0.6.2)", "requests (>=2.21.0)", "check-manifest", "attrs (>=17.4.0)", "pre-commit", "flake8", "tox", "bumpversion", "recommonmark", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "azure-datalake-store (>=0.0.30)", "azure-storage-blob (>=12.1.0)", "gcsfs (>=0.2.0)", "pyarrow (>=2.0)", "black (>=19.3b0)"] [[package]] name = "parso" @@ -1457,8 +1456,8 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -1469,8 +1468,8 @@ optional = false python-versions = ">=3.6" [package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +testing = ["pytest-benchmark", "pytest"] +dev = ["tox", "pre-commit"] [[package]] name = "prometheus-client" @@ -1503,7 +1502,7 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] +test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"] [[package]] name = "ptyprocess" @@ -1611,7 +1610,7 @@ optional = false python-versions = ">=3.6.8" [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pyproj" @@ -1665,7 +1664,7 @@ python-versions = ">=3.7" pytest = ">=5.0" [package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] +dev = ["pre-commit", "tox", "pytest-asyncio"] [[package]] name = "pytest-snapshot" @@ -1767,7 +1766,7 @@ python-versions = ">=3.7" packaging = "*" [package.extras] -test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] +test = ["pytest-qt", "pytest-cov (>=3.0.0)", "pytest (>=6,!=7.0.0,!=7.0.1)"] [[package]] name = "requests" @@ -1834,7 +1833,7 @@ requests = "*" "ruamel.yaml" = ">=0.17.21" [package.extras] -github = ["jinja2 (>=3.1.0)", "pygithub (>=1.43.3)"] +github = ["pygithub (>=1.43.3)", "jinja2 (>=3.1.0)"] gitlab = ["python-gitlab (>=1.3.0)"] [[package]] @@ -1871,7 +1870,7 @@ optional = false python-versions = ">=2.7" [package.extras] -dev = ["Django (>=1.11)", "check-manifest", "colorama (<=0.4.1)", "coverage", "flake8", "nose2", "readme-renderer (<25.0)", "tox", "wheel", "zest.releaser"] +dev = ["Django (>=1.11)", "nose2", "tox", "check-manifest", "coverage", "flake8", "wheel", "zest.releaser", "readme-renderer (<25.0)", "colorama (<=0.4.1)"] doc = ["sphinx", "sphinx-rtd-theme"] [[package]] @@ -1912,7 +1911,7 @@ optional = false python-versions = ">=3.6" [package.extras] -all = ["numpy", "pytest", "pytest-cov"] +all = ["pytest", "pytest-cov", "numpy"] test = ["pytest", "pytest-cov"] vectorized = ["numpy"] @@ -1965,7 +1964,7 @@ pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} tornado = ">=6.1.0" [package.extras] -test = ["pre-commit", "pytest (>=6.0)", "pytest-timeout"] +test = ["pre-commit", "pytest-timeout", "pytest (>=6.0)"] [[package]] name = "textwrap3" @@ -1988,7 +1987,7 @@ webencodings = ">=0.4" [package.extras] doc = ["sphinx", "sphinx-rtd-theme"] -test = ["coverage", "pytest", "pytest-cov", "pytest-flake8", "pytest-isort"] +test = ["pytest", "pytest-cov", "pytest-flake8", "pytest-isort", "coverage"] [[package]] name = "toml" @@ -2042,7 +2041,7 @@ virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2, [package.extras] docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] -testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)"] +testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)", "psutil (>=5.6.1)", "pathlib2 (>=2.3.3)"] [[package]] name = "tox-poetry" @@ -2058,7 +2057,7 @@ toml = "*" tox = {version = ">=3.7.0", markers = "python_version >= \"3\""} [package.extras] -test = ["coverage", "pycodestyle", "pylint", "pytest"] +test = ["pylint", "pycodestyle", "pytest", "coverage"] [[package]] name = "tqdm" @@ -2135,8 +2134,8 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)"] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -2229,13 +2228,13 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx"] -testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "d5b56483e4f46d1d9dec9fb27989b795adc4ecd73ffb5f5d7d6ed84cc830f578" +content-hash = "cce5b3c288e39755f35abc18f40731dfd61c7507bc1a8177894235cea06bd514" [metadata.files] ansiwrap = [] @@ -2243,7 +2242,10 @@ anyio = [ {file = "anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"}, {file = "anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"}, ] -appnope = [] +appnope = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] argon2-cffi = [ {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, @@ -2282,34 +2284,34 @@ backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -beautifulsoup4 = [] -black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, +beautifulsoup4 = [ + {file = "beautifulsoup4-4.11.1-py3-none-any.whl", hash = "sha256:58d5c3d29f5a36ffeb94f02f0d786cd53014cf9b3b3951d42e0080d8a9498d30"}, + {file = "beautifulsoup4-4.11.1.tar.gz", hash = "sha256:ad9aa55b65ef2808eb405f46cf74df7fcb7044d5cbc26487f96eb2ef2e436693"}, +] +black = [] +bleach = [ + {file = "bleach-5.0.1-py3-none-any.whl", hash = "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a"}, + {file = "bleach-5.0.1.tar.gz", hash = "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"}, ] -bleach = [] censusdata = [] -certifi = [] +certifi = [ + {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, + {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, +] cffi = [] charset-normalizer = [] click = [] -click-plugins = [ - {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, - {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, -] +click-plugins = [] cligj = [ {file = "cligj-0.7.2-py3-none-any.whl", hash = "sha256:c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df"}, {file = "cligj-0.7.2.tar.gz", hash = "sha256:a4bc13d623356b373c2c27c53dbd9c68cae5d526270bfa71f6c6fa69669c6b27"}, ] -colorama = [] -configparser = [ - {file = "configparser-5.2.0-py3-none-any.whl", hash = "sha256:e8b39238fb6f0153a069aa253d349467c3c4737934f253ef6abac5fe0eca1e5d"}, - {file = "configparser-5.2.0.tar.gz", hash = "sha256:1b35798fdf1713f1c3139016cfcbc461f09edbf099d1fb658d4b7479fcaa3daa"}, -] -cycler = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, +colorama = [ + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] +configparser = [] +cycler = [] debugpy = [] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, @@ -2321,164 +2323,124 @@ defusedxml = [ ] dill = [] distlib = [] -dparse = [ - {file = "dparse-0.6.2-py3-none-any.whl", hash = "sha256:8097076f1dd26c377f30d4745e6ec18fef42f3bf493933b842ac5bafad8c345f"}, - {file = "dparse-0.6.2.tar.gz", hash = "sha256:d45255bda21f998bc7ddf2afd5e62505ba6134756ba2d42a84c56b0826614dfe"}, -] +dparse = [] dynaconf = [] entrypoints = [ {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, ] -et-xmlfile = [ - {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, - {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, -] +et-xmlfile = [] fastjsonschema = [] filelock = [] -fiona = [] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -fonttools = [ - {file = "fonttools-4.35.0-py3-none-any.whl", hash = "sha256:0292e391c1b46f2308bda20ea2a2dd5253725e7e2d3a1928b631338eb318eb22"}, - {file = "fonttools-4.35.0.zip", hash = "sha256:1cfb335c0abdeb6231191dc4f9d7ce1173e2ac94b335c617e045b96f9c974aea"}, -] -geopandas = [ - {file = "geopandas-0.11.1-py3-none-any.whl", hash = "sha256:f3344937f3866e52996c7e505d56dae78be117dc840cd1c23507da0b33c0af71"}, - {file = "geopandas-0.11.1.tar.gz", hash = "sha256:f0f0c8d0423d30cf81de2056d853145c4362739350a7f8f2d72cc7409ef1eca1"}, -] +fiona = [ + {file = "Fiona-1.8.21-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:39c656421e25b4d0d73d0b6acdcbf9848e71f3d9b74f44c27d2d516d463409ae"}, + {file = "Fiona-1.8.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43b1d2e45506e56cf3a9f59ba5d6f7981f3f75f4725d1e6cb9a33ba856371ebd"}, + {file = "Fiona-1.8.21-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:315e186cb880a8128e110312eb92f5956bbc54d7152af999d3483b463758d6f9"}, + {file = "Fiona-1.8.21-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fb2407623c4f44732a33b3f056f8c58c54152b51f0324bf8f10945e711eb549"}, + {file = "Fiona-1.8.21-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:b69054ed810eb7339d7effa88589afca48003206d7627d0b0b149715fc3fde41"}, + {file = "Fiona-1.8.21-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:11532ccfda1073d3f5f558e4bb78d45b268e8680fd6e14993a394c564ddbd069"}, + {file = "Fiona-1.8.21-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3789523c811809a6e2e170cf9c437631f959f4c7a868f024081612d30afab468"}, + {file = "Fiona-1.8.21-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:085f18d943097ac3396f3f9664ac1ae04ad0ff272f54829f03442187f01b6116"}, + {file = "Fiona-1.8.21-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:388acc9fa07ba7858d508dfe826d4b04d813818bced16c4049de19cc7ca322ef"}, + {file = "Fiona-1.8.21-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40b4eaf5b88407421d6c9e707520abd2ff16d7cd43efb59cd398aa41d2de332c"}, + {file = "Fiona-1.8.21.tar.gz", hash = "sha256:3a0edca2a7a070db405d71187214a43d2333a57b4097544a3fcc282066a58bfc"}, +] +flake8 = [] +fonttools = [] +geopandas = [] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] -importlib-metadata = [ - {file = "importlib_metadata-4.12.0-py3-none-any.whl", hash = "sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23"}, - {file = "importlib_metadata-4.12.0.tar.gz", hash = "sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670"}, -] +importlib-metadata = [] importlib-resources = [] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -ipdb = [ - {file = "ipdb-0.13.9.tar.gz", hash = "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5"}, -] +iniconfig = [] +ipdb = [] ipykernel = [] ipython = [] ipython-genutils = [ {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, ] -ipywidgets = [ - {file = "ipywidgets-8.0.2-py3-none-any.whl", hash = "sha256:1dc3dd4ee19ded045ea7c86eb273033d238d8e43f9e7872c52d092683f263891"}, - {file = "ipywidgets-8.0.2.tar.gz", hash = "sha256:08cb75c6e0a96836147cbfdc55580ae04d13e05d26ffbc377b4e1c68baa28b1f"}, -] -isort = [ - {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, - {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, -] +ipywidgets = [] +isort = [] jedi = [ {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, ] -jellyfish = [ - {file = "jellyfish-0.6.1.tar.gz", hash = "sha256:5104e45a2b804b48a46a92a5e6d6e86830fe60ae83b1da32c867402c8f4c2094"}, -] -jinja2 = [] -json5 = [ - {file = "json5-0.9.9-py2.py3-none-any.whl", hash = "sha256:1ff8351ee2ae80fd89d64210d9522db7e157516a7b12c72089ded6964527283f"}, - {file = "json5-0.9.9.tar.gz", hash = "sha256:2ace77117c068c5f1f23f97e530a0d49bc09a46039521b6daa74aa39524e02a2"}, +jellyfish = [] +jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, ] -jsonschema = [ - {file = "jsonschema-4.10.0-py3-none-any.whl", hash = "sha256:92128509e5b700bf0f1fd08a7d018252b16a1454465dfa6b899558eeae584241"}, - {file = "jsonschema-4.10.0.tar.gz", hash = "sha256:8ff7b44c6a99c6bfd55ca9ac45261c649cefd40aaba1124c29aaef1bcb378d84"}, +json5 = [] +jsonschema = [] +jupyter = [] +jupyter-client = [ + {file = "jupyter_client-7.3.4-py3-none-any.whl", hash = "sha256:17d74b0d0a7b24f1c8c527b24fcf4607c56bee542ffe8e3418e50b21e514b621"}, + {file = "jupyter_client-7.3.4.tar.gz", hash = "sha256:aa9a6c32054b290374f95f73bb0cae91455c58dfb84f65c8591912b8f65e6d56"}, ] -jupyter = [ - {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, - {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, - {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"}, -] -jupyter-client = [] jupyter-console = [] jupyter-contrib-core = [] -jupyter-contrib-nbextensions = [ - {file = "jupyter_contrib_nbextensions-0.5.1-py2.py3-none-any.whl", hash = "sha256:2c071f0aa208c569666f656bdc0f66906ca493cf9f06f46db6350db11030ff40"}, - {file = "jupyter_contrib_nbextensions-0.5.1.tar.gz", hash = "sha256:eecd28ecc2fc410226c0a3d4932ed2fac4860ccf8d9e9b1b29548835a35b22ab"}, -] +jupyter-contrib-nbextensions = [] jupyter-core = [] -jupyter-highlight-selected-word = [ - {file = "jupyter_highlight_selected_word-0.2.0-py2.py3-none-any.whl", hash = "sha256:9545dfa9cb057eebe3a5795604dcd3a5294ea18637e553f61a0b67c1b5903c58"}, - {file = "jupyter_highlight_selected_word-0.2.0.tar.gz", hash = "sha256:9fa740424859a807950ca08d2bfd28a35154cd32dd6d50ac4e0950022adc0e7b"}, -] -jupyter-latex-envs = [ - {file = "jupyter_latex_envs-1.4.6.tar.gz", hash = "sha256:070a31eb2dc488bba983915879a7c2939247bf5c3b669b398bdb36a9b5343872"}, -] +jupyter-highlight-selected-word = [] +jupyter-latex-envs = [] jupyter-nbextensions-configurator = [] -jupyter-server = [ - {file = "jupyter_server-1.18.1-py3-none-any.whl", hash = "sha256:022759b09c96a4e2feb95de59ce4283e04e17782efe197b91d23a47521609b77"}, - {file = "jupyter_server-1.18.1.tar.gz", hash = "sha256:2b72fc595bccae292260aad8157a0ead8da2c703ec6ae1bb7b36dbad0e267ea7"}, -] -jupyterlab = [ - {file = "jupyterlab-3.4.7-py3-none-any.whl", hash = "sha256:30c64bc0aa0ba09959ab6fd5c74f08a6ae64656b46a29e2522142a5fda0dc486"}, - {file = "jupyterlab-3.4.7.tar.gz", hash = "sha256:4dc48ab0980e3af2e921dff26e0013dd03b104b1b67f0d85b67448e16e25311e"}, -] -jupyterlab-pygments = [] -jupyterlab-server = [ - {file = "jupyterlab_server-2.15.0-py3-none-any.whl", hash = "sha256:0e327d7a346874fd8e94c1bcbd69906d18a8558df8f13115c5afd183c3107756"}, - {file = "jupyterlab_server-2.15.0.tar.gz", hash = "sha256:a91c515e0e7971a8f7c3c9834b748857f7dac502f93604bf283987991fd987ef"}, -] -jupyterlab-widgets = [ - {file = "jupyterlab_widgets-3.0.2-py3-none-any.whl", hash = "sha256:98303a281f4004670cdcea2ef4aecba19c580adc297664c593f967025625c8c5"}, - {file = "jupyterlab_widgets-3.0.2.tar.gz", hash = "sha256:47ab54cd165aa0cb3bcef1232d77471580cd2c36bbe2153fc5ba31e26ad87320"}, -] +jupyter-server = [] +jupyterlab = [] +jupyterlab-pygments = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] +jupyterlab-server = [] +jupyterlab-widgets = [] kiwisolver = [] -lazy-object-proxy = [ - {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb8c5fd1684d60a9902c60ebe276da1f2281a318ca16c1d0a96db28f62e9166b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a57d51ed2997e97f3b8e3500c984db50a554bb5db56c50b5dab1b41339b37e36"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd45683c3caddf83abbb1249b653a266e7069a09f486daa8863fb0e7496a9fdb"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8561da8b3dd22d696244d6d0d5330618c993a215070f473b699e00cf1f3f6443"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fccdf7c2c5821a8cbd0a9440a456f5050492f2270bd54e94360cac663398739b"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win32.whl", hash = "sha256:898322f8d078f2654d275124a8dd19b079080ae977033b713f677afcfc88e2b9"}, - {file = "lazy_object_proxy-1.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:85b232e791f2229a4f55840ed54706110c80c0a210d076eee093f2b2e33e1bfd"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:46ff647e76f106bb444b4533bb4153c7370cdf52efc62ccfc1a28bdb3cc95442"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12f3bb77efe1367b2515f8cb4790a11cffae889148ad33adad07b9b55e0ab22c"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c19814163728941bb871240d45c4c30d33b8a2e85972c44d4e63dd7107faba44"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:e40f2013d96d30217a51eeb1db28c9ac41e9d0ee915ef9d00da639c5b63f01a1"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:2052837718516a94940867e16b1bb10edb069ab475c3ad84fd1e1a6dd2c0fcfc"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win32.whl", hash = "sha256:6a24357267aa976abab660b1d47a34aaf07259a0c3859a34e536f1ee6e76b5bb"}, - {file = "lazy_object_proxy-1.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:6aff3fe5de0831867092e017cf67e2750c6a1c7d88d84d2481bd84a2e019ec35"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6a6e94c7b02641d1311228a102607ecd576f70734dc3d5e22610111aeacba8a0"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4ce15276a1a14549d7e81c243b887293904ad2d94ad767f42df91e75fd7b5b6"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e368b7f7eac182a59ff1f81d5f3802161932a41dc1b1cc45c1f757dc876b5d2c"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6ecbb350991d6434e1388bee761ece3260e5228952b1f0c46ffc800eb313ff42"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:553b0f0d8dbf21890dd66edd771f9b1b5f51bd912fa5f26de4449bfc5af5e029"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win32.whl", hash = "sha256:c7a683c37a8a24f6428c28c561c80d5f4fd316ddcf0c7cab999b15ab3f5c5c69"}, - {file = "lazy_object_proxy-1.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:df2631f9d67259dc9620d831384ed7732a198eb434eadf69aea95ad18c587a28"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:07fa44286cda977bd4803b656ffc1c9b7e3bc7dff7d34263446aec8f8c96f88a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dca6244e4121c74cc20542c2ca39e5c4a5027c81d112bfb893cf0790f96f57e"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91ba172fc5b03978764d1df5144b4ba4ab13290d7bab7a50f12d8117f8630c38"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:043651b6cb706eee4f91854da4a089816a6606c1428fd391573ef8cb642ae4f7"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b9e89b87c707dd769c4ea91f7a31538888aad05c116a59820f28d59b3ebfe25a"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win32.whl", hash = "sha256:9d166602b525bf54ac994cf833c385bfcc341b364e3ee71e3bf5a1336e677b55"}, - {file = "lazy_object_proxy-1.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f3953eb575b45480db6568306893f0bd9d8dfeeebd46812aa09ca9579595148"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dd7ed7429dbb6c494aa9bc4e09d94b778a3579be699f9d67da7e6804c422d3de"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70ed0c2b380eb6248abdef3cd425fc52f0abd92d2b07ce26359fcbc399f636ad"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7096a5e0c1115ec82641afbdd70451a144558ea5cf564a896294e346eb611be1"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f769457a639403073968d118bc70110e7dce294688009f5c24ab78800ae56dc8"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:39b0e26725c5023757fc1ab2a89ef9d7ab23b84f9251e28f9cc114d5b59c1b09"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win32.whl", hash = "sha256:2130db8ed69a48a3440103d4a520b89d8a9405f1b06e2cc81640509e8bf6548f"}, - {file = "lazy_object_proxy-1.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:677ea950bef409b47e51e733283544ac3d660b709cfce7b187f5ace137960d61"}, - {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, -] -liccheck = [ - {file = "liccheck-0.6.5-py2.py3-none-any.whl", hash = "sha256:10846e587127d08609a973570eb3b8ee8cfe32a4689c8fd76d6dc74c29013c7a"}, - {file = "liccheck-0.6.5.tar.gz", hash = "sha256:d4009f1876eb7e4228ecf495e36573ef5b8a226d4cd91235138e417f990a67e8"}, -] +lazy-object-proxy = [] +liccheck = [] lxml = [] -markupsafe = [] +markupsafe = [ + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"}, + {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"}, + {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"}, + {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"}, + {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"}, + {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"}, +] marshmallow = [] marshmallow-dataclass = [] marshmallow-enum = [] @@ -2487,60 +2449,38 @@ matplotlib-inline = [ {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, ] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] -mistune = [ - {file = "mistune-2.0.4-py2.py3-none-any.whl", hash = "sha256:182cc5ee6f8ed1b807de6b7bb50155df7b66495412836b9a74c8fbdfc75fe36d"}, - {file = "mistune-2.0.4.tar.gz", hash = "sha256:9ee0a66053e2267aba772c71e06891fa8f1af6d4b01d5e84e267b4570d4d9808"}, -] +mccabe = [] +mistune = [] munch = [ {file = "munch-2.5.0-py2.py3-none-any.whl", hash = "sha256:6f44af89a2ce4ed04ff8de41f70b226b984db10a91dcc7b9ac2efc1c77022fdd"}, {file = "munch-2.5.0.tar.gz", hash = "sha256:2d735f6f24d4dba3417fa448cae40c6e896ec1fdab6cdb5e6510999758a4dbd2"}, ] -mypy = [ - {file = "mypy-0.910-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a155d80ea6cee511a3694b108c4494a39f42de11ee4e61e72bc424c490e46457"}, - {file = "mypy-0.910-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b94e4b785e304a04ea0828759172a15add27088520dc7e49ceade7834275bedb"}, - {file = "mypy-0.910-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:088cd9c7904b4ad80bec811053272986611b84221835e079be5bcad029e79dd9"}, - {file = "mypy-0.910-cp35-cp35m-win_amd64.whl", hash = "sha256:adaeee09bfde366d2c13fe6093a7df5df83c9a2ba98638c7d76b010694db760e"}, - {file = "mypy-0.910-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ecd2c3fe726758037234c93df7e98deb257fd15c24c9180dacf1ef829da5f921"}, - {file = "mypy-0.910-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d9dd839eb0dc1bbe866a288ba3c1afc33a202015d2ad83b31e875b5905a079b6"}, - {file = "mypy-0.910-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:3e382b29f8e0ccf19a2df2b29a167591245df90c0b5a2542249873b5c1d78212"}, - {file = "mypy-0.910-cp36-cp36m-win_amd64.whl", hash = "sha256:53fd2eb27a8ee2892614370896956af2ff61254c275aaee4c230ae771cadd885"}, - {file = "mypy-0.910-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b6fb13123aeef4a3abbcfd7e71773ff3ff1526a7d3dc538f3929a49b42be03f0"}, - {file = "mypy-0.910-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e4dab234478e3bd3ce83bac4193b2ecd9cf94e720ddd95ce69840273bf44f6de"}, - {file = "mypy-0.910-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:7df1ead20c81371ccd6091fa3e2878559b5c4d4caadaf1a484cf88d93ca06703"}, - {file = "mypy-0.910-cp37-cp37m-win_amd64.whl", hash = "sha256:0aadfb2d3935988ec3815952e44058a3100499f5be5b28c34ac9d79f002a4a9a"}, - {file = "mypy-0.910-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ec4e0cd079db280b6bdabdc807047ff3e199f334050db5cbb91ba3e959a67504"}, - {file = "mypy-0.910-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:119bed3832d961f3a880787bf621634ba042cb8dc850a7429f643508eeac97b9"}, - {file = "mypy-0.910-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:866c41f28cee548475f146aa4d39a51cf3b6a84246969f3759cb3e9c742fc072"}, - {file = "mypy-0.910-cp38-cp38-win_amd64.whl", hash = "sha256:ceb6e0a6e27fb364fb3853389607cf7eb3a126ad335790fa1e14ed02fba50811"}, - {file = "mypy-0.910-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a85e280d4d217150ce8cb1a6dddffd14e753a4e0c3cf90baabb32cefa41b59e"}, - {file = "mypy-0.910-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:42c266ced41b65ed40a282c575705325fa7991af370036d3f134518336636f5b"}, - {file = "mypy-0.910-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3c4b8ca36877fc75339253721f69603a9c7fdb5d4d5a95a1a1b899d8b86a4de2"}, - {file = "mypy-0.910-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:c0df2d30ed496a08de5daed2a9ea807d07c21ae0ab23acf541ab88c24b26ab97"}, - {file = "mypy-0.910-cp39-cp39-win_amd64.whl", hash = "sha256:c6c2602dffb74867498f86e6129fd52a2770c48b7cd3ece77ada4fa38f94eba8"}, - {file = "mypy-0.910-py3-none-any.whl", hash = "sha256:ef565033fa5a958e62796867b1df10c40263ea9ded87164d67572834e57a174d"}, - {file = "mypy-0.910.tar.gz", hash = "sha256:704098302473cb31a218f1775a873b376b30b4c18229421e9e9dc8916fd16150"}, -] +mypy = [] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] -nb-black = [] -nbclassic = [ - {file = "nbclassic-0.4.3-py3-none-any.whl", hash = "sha256:4b01076effdac53e775cd1b6a4e891663568b32621468e205b502a23b2921899"}, - {file = "nbclassic-0.4.3.tar.gz", hash = "sha256:f03111b2cebaa69b88370a7b23b19b2b37c9bb71767f1828cdfd7a047eae8edd"}, +nb-black = [ + {file = "nb_black-1.0.7.tar.gz", hash = "sha256:1ca52e3a46675f6a0a6d79ac73a1f8f951bef60f919eced56173e76ab1b6d62b"}, +] +nbclassic = [] +nbclient = [ + {file = "nbclient-0.6.6-py3-none-any.whl", hash = "sha256:09bae4ea2df79fa6bc50aeb8278d8b79d2036792824337fa6eee834afae17312"}, + {file = "nbclient-0.6.6.tar.gz", hash = "sha256:0df76a7961d99a681b4796c74a1f2553b9f998851acc01896dce064ad19a9027"}, ] -nbclient = [] -nbconvert = [ - {file = "nbconvert-7.0.0-py3-none-any.whl", hash = "sha256:26843ae233167e8aae31c20e3e1d91f431f04c9f34363bbe2dd0d247f772641c"}, - {file = "nbconvert-7.0.0.tar.gz", hash = "sha256:fd1e361da30e30e4c5a5ae89f7cae95ca2a4d4407389672473312249a7ba0060"}, +nbconvert = [] +nbformat = [ + {file = "nbformat-5.4.0-py3-none-any.whl", hash = "sha256:0d6072aaec95dddc39735c144ee8bbc6589c383fb462e4058abc855348152dad"}, + {file = "nbformat-5.4.0.tar.gz", hash = "sha256:44ba5ca6acb80c5d5a500f1e5b83ede8cbe364d5a495c4c8cf60aaf1ba656501"}, +] +nest-asyncio = [ + {file = "nest_asyncio-1.5.5-py3-none-any.whl", hash = "sha256:b98e3ec1b246135e4642eceffa5a6c23a3ab12c82ff816a92c612d68205813b2"}, + {file = "nest_asyncio-1.5.5.tar.gz", hash = "sha256:e442291cd942698be619823a17a86a5759eabe1f8613084790de189fe9e16d65"}, +] +notebook = [ + {file = "notebook-6.4.12-py3-none-any.whl", hash = "sha256:8c07a3bb7640e371f8a609bdbb2366a1976c6a2589da8ef917f761a61e3ad8b1"}, + {file = "notebook-6.4.12.tar.gz", hash = "sha256:6268c9ec9048cff7a45405c990c29ac9ca40b0bc3ec29263d218c5e01f2b4e86"}, ] -nbformat = [] -nest-asyncio = [] -notebook = [] notebook-shim = [ {file = "notebook_shim-0.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"}, {file = "notebook_shim-0.1.0.tar.gz", hash = "sha256:7897e47a36d92248925a2143e3596f19c60597708f7bef50d81fcd31d7263e85"}, @@ -2551,7 +2491,29 @@ packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] -pandas = [] +pandas = [ + {file = "pandas-1.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d51674ed8e2551ef7773820ef5dab9322be0828629f2cbf8d1fc31a0c4fed640"}, + {file = "pandas-1.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:16ad23db55efcc93fa878f7837267973b61ea85d244fc5ff0ccbcfa5638706c5"}, + {file = "pandas-1.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:958a0588149190c22cdebbc0797e01972950c927a11a900fe6c2296f207b1d6f"}, + {file = "pandas-1.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e48fbb64165cda451c06a0f9e4c7a16b534fcabd32546d531b3c240ce2844112"}, + {file = "pandas-1.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f803320c9da732cc79210d7e8cc5c8019aad512589c910c66529eb1b1818230"}, + {file = "pandas-1.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:2893e923472a5e090c2d5e8db83e8f907364ec048572084c7d10ef93546be6d1"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:24ea75f47bbd5574675dae21d51779a4948715416413b30614c1e8b480909f81"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ebc990bd34f4ac3c73a2724c2dcc9ee7bf1ce6cf08e87bb25c6ad33507e318"}, + {file = "pandas-1.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d6c0106415ff1a10c326c49bc5dd9ea8b9897a6ca0c8688eb9c30ddec49535ef"}, + {file = "pandas-1.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78b00429161ccb0da252229bcda8010b445c4bf924e721265bec5a6e96a92e92"}, + {file = "pandas-1.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dfbf16b1ea4f4d0ee11084d9c026340514d1d30270eaa82a9f1297b6c8ecbf0"}, + {file = "pandas-1.4.3-cp38-cp38-win32.whl", hash = "sha256:48350592665ea3cbcd07efc8c12ff12d89be09cd47231c7925e3b8afada9d50d"}, + {file = "pandas-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:605d572126eb4ab2eadf5c59d5d69f0608df2bf7bcad5c5880a47a20a0699e3e"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a3924692160e3d847e18702bb048dc38e0e13411d2b503fecb1adf0fcf950ba4"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07238a58d7cbc8a004855ade7b75bbd22c0db4b0ffccc721556bab8a095515f6"}, + {file = "pandas-1.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:755679c49460bd0d2f837ab99f0a26948e68fa0718b7e42afbabd074d945bf84"}, + {file = "pandas-1.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41fc406e374590a3d492325b889a2686b31e7a7780bec83db2512988550dadbf"}, + {file = "pandas-1.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d9382f72a4f0e93909feece6fef5500e838ce1c355a581b3d8f259839f2ea76"}, + {file = "pandas-1.4.3-cp39-cp39-win32.whl", hash = "sha256:0daf876dba6c622154b2e6741f29e87161f844e64f84801554f879d27ba63c0d"}, + {file = "pandas-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:721a3dd2f06ef942f83a819c0f3f6a648b2830b191a72bbe9451bcd49c3bd42e"}, + {file = "pandas-1.4.3.tar.gz", hash = "sha256:2ff7788468e75917574f080cd4681b27e1a7bf36461fe968b49a87b5a54d007c"}, +] pandas-vet = [] pandocfilters = [ {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, @@ -2562,10 +2524,7 @@ parso = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] +pathspec = [] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, @@ -2577,13 +2536,46 @@ pickleshare = [ pillow = [] pkgutil-resolve-name = [] platformdirs = [] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +pluggy = [] +prometheus-client = [ + {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, + {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, ] -prometheus-client = [] prompt-toolkit = [] -psutil = [] +psutil = [ + {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87"}, + {file = "psutil-5.9.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af"}, + {file = "psutil-5.9.1-cp27-cp27m-win32.whl", hash = "sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc"}, + {file = "psutil-5.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2"}, + {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0"}, + {file = "psutil-5.9.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22"}, + {file = "psutil-5.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9"}, + {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8"}, + {file = "psutil-5.9.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de"}, + {file = "psutil-5.9.1-cp310-cp310-win32.whl", hash = "sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329"}, + {file = "psutil-5.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021"}, + {file = "psutil-5.9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237"}, + {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453"}, + {file = "psutil-5.9.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685"}, + {file = "psutil-5.9.1-cp36-cp36m-win32.whl", hash = "sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36"}, + {file = "psutil-5.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d"}, + {file = "psutil-5.9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc"}, + {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676"}, + {file = "psutil-5.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4"}, + {file = "psutil-5.9.1-cp37-cp37m-win32.whl", hash = "sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b"}, + {file = "psutil-5.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680"}, + {file = "psutil-5.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1"}, + {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4"}, + {file = "psutil-5.9.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b"}, + {file = "psutil-5.9.1-cp38-cp38-win32.whl", hash = "sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689"}, + {file = "psutil-5.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0"}, + {file = "psutil-5.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81"}, + {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e"}, + {file = "psutil-5.9.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537"}, + {file = "psutil-5.9.1-cp39-cp39-win32.whl", hash = "sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574"}, + {file = "psutil-5.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5"}, + {file = "psutil-5.9.1.tar.gz", hash = "sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954"}, +] ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -2592,61 +2584,45 @@ py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] +pycodestyle = [] pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -pydantic = [ - {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, - {file = "pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, - {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, - {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, - {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, - {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, - {file = "pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, - {file = "pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, - {file = "pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, - {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, - {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, - {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, - {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, - {file = "pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, - {file = "pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, - {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, - {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, - {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, - {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, - {file = "pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, - {file = "pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, - {file = "pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, - {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, - {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, - {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, - {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, - {file = "pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, - {file = "pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, - {file = "pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, - {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, - {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, - {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, - {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, - {file = "pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, - {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, - {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] +pydantic = [] +pyflakes = [] pygments = [] pylint = [] pypandoc = [] -pyparsing = [] -pyproj = [] +pyparsing = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] +pyproj = [ + {file = "pyproj-3.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:473961faef7a9fd723c5d432f65220ea6ab3854e606bf84b4d409a75a4261c78"}, + {file = "pyproj-3.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fef9c1e339f25c57f6ae0558b5ab1bbdf7994529a30d8d7504fc6302ea51c03"}, + {file = "pyproj-3.3.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:140fa649fedd04f680a39f8ad339799a55cb1c49f6a84e1b32b97e49646647aa"}, + {file = "pyproj-3.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b59c08aea13ee428cf8a919212d55c036cc94784805ed77c8f31a4d1f541058c"}, + {file = "pyproj-3.3.1-cp310-cp310-win32.whl", hash = "sha256:1adc9ccd1bf04998493b6a2e87e60656c75ab790653b36cfe351e9ef214828ed"}, + {file = "pyproj-3.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:42eea10afc750fccd1c5c4ba56de29ab791ab4d83c1f7db72705566282ac5396"}, + {file = "pyproj-3.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:531ea36519fa7b581466d4b6ab32f66ae4dadd9499d726352f71ee5e19c3d1c5"}, + {file = "pyproj-3.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67025e37598a6bbed2c9c6c9e4c911f6dd39315d3e1148ead935a5c4d64309d5"}, + {file = "pyproj-3.3.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aed1a3c0cd4182425f91b48d5db39f459bc2fe0d88017ead6425a1bc85faee33"}, + {file = "pyproj-3.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cc4771403db54494e1e55bca8e6d33cde322f8cf0ed39f1557ff109c66d2cd1"}, + {file = "pyproj-3.3.1-cp38-cp38-win32.whl", hash = "sha256:c99f7b5757a28040a2dd4a28c9805fdf13eef79a796f4a566ab5cb362d10630d"}, + {file = "pyproj-3.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:5dac03d4338a4c8bd0f69144c527474f517b4cbd7d2d8c532cd8937799723248"}, + {file = "pyproj-3.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56b0f9ee2c5b2520b18db30a393a7b86130cf527ddbb8c96e7f3c837474a9d79"}, + {file = "pyproj-3.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f92d8f6514516124abb714dce912b20867831162cfff9fae2678ef07b6fcf0f"}, + {file = "pyproj-3.3.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ef1bfbe2dcc558c7a98e2f1836abdcd630390f3160724a6f4f5c818b2be0ad5"}, + {file = "pyproj-3.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ca5f32b56210429b367ca4f9a57ffe67975c487af82e179a24370879a3daf68"}, + {file = "pyproj-3.3.1-cp39-cp39-win32.whl", hash = "sha256:aba199704c824fb84ab64927e7bc9ef71e603e483130ec0f7e09e97259b8f61f"}, + {file = "pyproj-3.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:120d45ed73144c65e9677dc73ba8a531c495d179dd9f9f0471ac5acc02d7ac4b"}, + {file = "pyproj-3.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:52efb681647dfac185cc655a709bc0caaf910031a0390f816f5fc8ce150cbedc"}, + {file = "pyproj-3.3.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ab0d6e38fda7c13726afacaf62e9f9dd858089d67910471758afd9cb24e0ecd"}, + {file = "pyproj-3.3.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45487942c19c5a8b09c91964ea3201f4e094518e34743cae373889a36e3d9260"}, + {file = "pyproj-3.3.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:797ad5655d484feac14b0fbb4a4efeaac0cf780a223046e2465494c767fd1c3b"}, + {file = "pyproj-3.3.1.tar.gz", hash = "sha256:b3d8e14d91cc95fb3dbc03a9d0588ac58326803eefa5bbb0978d109de3304fbe"}, +] pyrsistent = [ {file = "pyrsistent-0.18.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1"}, {file = "pyrsistent-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26"}, @@ -2670,10 +2646,7 @@ pyrsistent = [ {file = "pyrsistent-0.18.1-cp39-cp39-win_amd64.whl", hash = "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07"}, {file = "pyrsistent-0.18.1.tar.gz", hash = "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96"}, ] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] +pytest = [] pytest-mock = [] pytest-snapshot = [] python-dateutil = [ @@ -2681,47 +2654,31 @@ python-dateutil = [ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] pytz = [] -pywin32 = [] -pywinpty = [] -pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +pywin32 = [ + {file = "pywin32-304-cp310-cp310-win32.whl", hash = "sha256:3c7bacf5e24298c86314f03fa20e16558a4e4138fc34615d7de4070c23e65af3"}, + {file = "pywin32-304-cp310-cp310-win_amd64.whl", hash = "sha256:4f32145913a2447736dad62495199a8e280a77a0ca662daa2332acf849f0be48"}, + {file = "pywin32-304-cp310-cp310-win_arm64.whl", hash = "sha256:d3ee45adff48e0551d1aa60d2ec066fec006083b791f5c3527c40cd8aefac71f"}, + {file = "pywin32-304-cp311-cp311-win32.whl", hash = "sha256:30c53d6ce44c12a316a06c153ea74152d3b1342610f1b99d40ba2795e5af0269"}, + {file = "pywin32-304-cp311-cp311-win_amd64.whl", hash = "sha256:7ffa0c0fa4ae4077e8b8aa73800540ef8c24530057768c3ac57c609f99a14fd4"}, + {file = "pywin32-304-cp311-cp311-win_arm64.whl", hash = "sha256:cbbe34dad39bdbaa2889a424d28752f1b4971939b14b1bb48cbf0182a3bcfc43"}, + {file = "pywin32-304-cp36-cp36m-win32.whl", hash = "sha256:be253e7b14bc601718f014d2832e4c18a5b023cbe72db826da63df76b77507a1"}, + {file = "pywin32-304-cp36-cp36m-win_amd64.whl", hash = "sha256:de9827c23321dcf43d2f288f09f3b6d772fee11e809015bdae9e69fe13213988"}, + {file = "pywin32-304-cp37-cp37m-win32.whl", hash = "sha256:f64c0377cf01b61bd5e76c25e1480ca8ab3b73f0c4add50538d332afdf8f69c5"}, + {file = "pywin32-304-cp37-cp37m-win_amd64.whl", hash = "sha256:bb2ea2aa81e96eee6a6b79d87e1d1648d3f8b87f9a64499e0b92b30d141e76df"}, + {file = "pywin32-304-cp38-cp38-win32.whl", hash = "sha256:94037b5259701988954931333aafd39cf897e990852115656b014ce72e052e96"}, + {file = "pywin32-304-cp38-cp38-win_amd64.whl", hash = "sha256:ead865a2e179b30fb717831f73cf4373401fc62fbc3455a0889a7ddac848f83e"}, + {file = "pywin32-304-cp39-cp39-win32.whl", hash = "sha256:25746d841201fd9f96b648a248f731c1dec851c9a08b8e33da8b56148e4c65cc"}, + {file = "pywin32-304-cp39-cp39-win_amd64.whl", hash = "sha256:d24a3382f013b21aa24a5cfbfad5a2cd9926610c0affde3e8ab5b3d7dbcf4ac9"}, ] +pywinpty = [] +pyyaml = [] pyzmq = [] qtconsole = [] qtpy = [] -requests = [] +requests = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] rtree = [ {file = "Rtree-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:757bbf9ca38c241e34812a646f16ffda2cabd535bcd815041b83fe091df7a85c"}, {file = "Rtree-1.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fe3954a51d691d3938cbac42ac97f4acacbea8ea622a375df901318a5c4ab0e9"}, @@ -2754,49 +2711,9 @@ rtree = [ {file = "Rtree-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc6e7384684a260eb2f04fcac64ca5ffe28876132a11d1a883db2a5db8becb64"}, {file = "Rtree-1.0.0.tar.gz", hash = "sha256:d0483482121346b093b9a42518d40f921adf445915b7aea307eb26768c839682"}, ] -"ruamel.yaml" = [ - {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, - {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, -] -"ruamel.yaml.clib" = [ - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, - {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, -] -safety = [ - {file = "safety-2.3.1-py3-none-any.whl", hash = "sha256:8f098d12b607db2756886280e85c28ece8db1bba4f45fc5f981f4663217bd619"}, - {file = "safety-2.3.1.tar.gz", hash = "sha256:6e6fcb7d4e8321098cf289f59b65051cafd3467f089c6e57c9f894ae32c23b71"}, -] +"ruamel.yaml" = [] +"ruamel.yaml.clib" = [] +safety = [] scipy = [] seaborn = [] semantic-version = [] @@ -2804,46 +2721,8 @@ send2trash = [ {file = "Send2Trash-1.8.0-py3-none-any.whl", hash = "sha256:f20eaadfdb517eaca5ce077640cb261c7d2698385a6a0f072a4a5447fd49fa08"}, {file = "Send2Trash-1.8.0.tar.gz", hash = "sha256:d2c24762fd3759860a0aff155e45871447ea58d2be6bdd39b5c8f966a0c99c2d"}, ] -setuptools-scm = [ - {file = "setuptools_scm-6.4.2-py3-none-any.whl", hash = "sha256:acea13255093849de7ccb11af9e1fb8bde7067783450cee9ef7a93139bddf6d4"}, - {file = "setuptools_scm-6.4.2.tar.gz", hash = "sha256:6833ac65c6ed9711a4d5d2266f8024cfa07c533a0e55f4c12f6eff280a5a9e30"}, -] -shapely = [ - {file = "Shapely-1.8.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c9e3400b716c51ba43eea1678c28272580114e009b6c78cdd00c44df3e325fa"}, - {file = "Shapely-1.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ce0b5c5f7acbccf98b3460eecaa40e9b18272b2a734f74fcddf1d7696e047e95"}, - {file = "Shapely-1.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3a40bf497b57a6625b83996aed10ce2233bca0e5471b8af771b186d681433ac5"}, - {file = "Shapely-1.8.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6bdc7728f1e5df430d8c588661f79f1eed4a2728c8b689e12707cfec217f68f8"}, - {file = "Shapely-1.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a60861b5ca2c488ebcdc706eca94d325c26d1567921c74acc83df5e6913590c7"}, - {file = "Shapely-1.8.2-cp310-cp310-win32.whl", hash = "sha256:840be3f27a1152851c54b968f2e12d718c9f13b7acd51c482e58a70f60f29e31"}, - {file = "Shapely-1.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:c60f3758212ec480675b820b13035dda8af8f7cc560d2cc67999b2717fb8faef"}, - {file = "Shapely-1.8.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:56413f7d32c70b63f239eb0865b24c0c61029e38757de456cc4ab3c416559a0b"}, - {file = "Shapely-1.8.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:256bdf8080bb7bb504d47b2c76919ecebab9708cc1b26266b3ec32b42448f642"}, - {file = "Shapely-1.8.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0a0d7752b145343838bd36ed09382d85f5befe426832d7384c5b051c147acbd"}, - {file = "Shapely-1.8.2-cp36-cp36m-win32.whl", hash = "sha256:62056e64b12b6d483d79f8e34bf058d2fe734d51c9227c1713705399434eff3b"}, - {file = "Shapely-1.8.2-cp36-cp36m-win_amd64.whl", hash = "sha256:8e3ed52a081da58eb4a885c157c594876633dbd4eb283f13ba5bf39c82322d76"}, - {file = "Shapely-1.8.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7c8eda45085ccdd7f9805ea4a93fdd5eb0b6039a61d5f0cefb960487e6dc17a1"}, - {file = "Shapely-1.8.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:beee3949ddf381735049cfa6532fb234d5d20a5be910c4f2fb7c7295fd7960e3"}, - {file = "Shapely-1.8.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e07b0bd2a0e61a8afd4d1c1bd23f3550b711f01274ffb53de99358fd781eefd8"}, - {file = "Shapely-1.8.2-cp37-cp37m-win32.whl", hash = "sha256:78966332a89813b237de357a03f612fd451a871fe6e26c12b6b71645fe8eee39"}, - {file = "Shapely-1.8.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8fe641f1f61b3d43dd61b5a85d2ef023e6e19bf8f204a5160a1cb1ec645cbc09"}, - {file = "Shapely-1.8.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cec89a5617c0137f4678282e983c3d63bf838fb00cdf318cc555b4d8409f7130"}, - {file = "Shapely-1.8.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:68c8e18dc9dc8a198c3addc8c9596f64137101f566f04b96ecfca0b214cb8b12"}, - {file = "Shapely-1.8.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f12695662c3ad1e6031b3de98f191963d0f09de6d1a4988acd907405644032ba"}, - {file = "Shapely-1.8.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:15a856fbb588ad5d042784e00918c662902776452008c771ecba2ff615cd197a"}, - {file = "Shapely-1.8.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d74de394684d66e25e780b0359fda85be7766af85940fa2dfad728b1a815c71f"}, - {file = "Shapely-1.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f3fac625690f01f35af665649e993f15f924e740b5c0ac0376900655815521"}, - {file = "Shapely-1.8.2-cp38-cp38-win32.whl", hash = "sha256:1d95842cc6bbbeab673061b63e70b07be9a375c15a60f4098f8fbd29f43af1b4"}, - {file = "Shapely-1.8.2-cp38-cp38-win_amd64.whl", hash = "sha256:a58e1f362f2091743e5e13212f5d5d16251a4bb63dd0ed587c652d3be9620d3a"}, - {file = "Shapely-1.8.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5254240eefc44139ab0d128faf671635d8bdd9c23955ee063d4d6b8f20073ae0"}, - {file = "Shapely-1.8.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:75042e8039c79dd01f102bb288beace9dc2f49fc44a2dea875f9b697aa8cd30d"}, - {file = "Shapely-1.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c0fd457ce477b1dced507a72f1e2084c9191bfcb8a1e09886990ebd02acf024"}, - {file = "Shapely-1.8.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6fcb28836ae93809de1dde73c03c9c24bab0ba2b2bf419ddb2aeb72c96d110e9"}, - {file = "Shapely-1.8.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:44d2832c1b706bf43101fda92831a083467cc4b4923a7ed17319ab599c1025d8"}, - {file = "Shapely-1.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:137f1369630408024a62ff79a437a5657e6c5b76b9cd352dde704b425acdb298"}, - {file = "Shapely-1.8.2-cp39-cp39-win32.whl", hash = "sha256:2e02da2e988e74d61f15c720f9f613fab51942aae2dfeacdcb78eadece00e1f3"}, - {file = "Shapely-1.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:3423299254deec075e79fb7dc7909d702104e4167149de7f45510c3a6342eeea"}, - {file = "Shapely-1.8.2.tar.gz", hash = "sha256:572af9d5006fd5e3213e37ee548912b0341fb26724d6dc8a4e3950c10197ebb6"}, -] +setuptools-scm = [] +shapely = [] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -2852,43 +2731,37 @@ sniffio = [ {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, ] -soupsieve = [] +soupsieve = [ + {file = "soupsieve-2.3.2.post1-py3-none-any.whl", hash = "sha256:3b2503d3c7084a42b1ebd08116e5f81aadfaea95863628c80a3b774a11b7c759"}, + {file = "soupsieve-2.3.2.post1.tar.gz", hash = "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d"}, +] tenacity = [] -terminado = [] -textwrap3 = [] -tinycss2 = [] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +terminado = [ + {file = "terminado-0.15.0-py3-none-any.whl", hash = "sha256:0d5f126fbfdb5887b25ae7d9d07b0d716b1cc0ccaacc71c1f3c14d228e065197"}, + {file = "terminado-0.15.0.tar.gz", hash = "sha256:ab4eeedccfcc1e6134bfee86106af90852c69d602884ea3a1e8ca6d4486e9bfe"}, ] -tomli = [ - {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, +textwrap3 = [] +tinycss2 = [ + {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"}, + {file = "tinycss2-1.1.1.tar.gz", hash = "sha256:b2e44dd8883c360c35dd0d1b5aad0b610e5156c2cb3b33434634e539ead9d8bf"}, ] +toml = [] +tomli = [] tomlkit = [] tornado = [] tox = [] -tox-poetry = [ - {file = "tox-poetry-0.4.1.tar.gz", hash = "sha256:2395808e1ce487b5894c10f2202e14702bfa6d6909c0d1e525170d14809ac7ef"}, - {file = "tox_poetry-0.4.1-py2.py3-none-any.whl", hash = "sha256:11d9cd4e51d4cd9484b3ba63f2650ab4cfb4096e5f0682ecf561ddfc3c8e8c92"}, +tox-poetry = [] +tqdm = [] +traitlets = [ + {file = "traitlets-5.3.0-py3-none-any.whl", hash = "sha256:65fa18961659635933100db8ca120ef6220555286949774b9cfc106f941d1c7a"}, + {file = "traitlets-5.3.0.tar.gz", hash = "sha256:0bb9f1f9f017aa8ec187d8b1b2a7a6626a2a1d877116baba52a129bfa124f8e2"}, ] -tqdm = [ - {file = "tqdm-4.62.0-py2.py3-none-any.whl", hash = "sha256:706dea48ee05ba16e936ee91cb3791cd2ea6da348a0e50b46863ff4363ff4340"}, - {file = "tqdm-4.62.0.tar.gz", hash = "sha256:3642d483b558eec80d3c831e23953582c34d7e4540db86d9e5ed9dad238dabc6"}, -] -traitlets = [] types-requests = [] types-urllib3 = [] typing-extensions = [] -typing-inspect = [ - {file = "typing_inspect-0.7.1-py2-none-any.whl", hash = "sha256:b1f56c0783ef0f25fb064a01be6e5407e54cf4a4bf4f3ba3fe51e0bd6dcea9e5"}, - {file = "typing_inspect-0.7.1-py3-none-any.whl", hash = "sha256:3cd7d4563e997719a710a3bfe7ffb544c6b72069b6812a02e9b414a8fa3aaa6b"}, - {file = "typing_inspect-0.7.1.tar.gz", hash = "sha256:047d4097d9b17f46531bf6f014356111a1b6fb821a24fe7ac909853ca2a782aa"}, -] +typing-inspect = [] urllib3 = [] -us = [ - {file = "us-2.0.2.tar.gz", hash = "sha256:cb11ad0d43deff3a1c3690c74f0c731cff5b862c73339df2edd91133e1496fbc"}, -] +us = [] virtualenv = [] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, @@ -2902,13 +2775,7 @@ websocket-client = [ {file = "websocket-client-1.3.3.tar.gz", hash = "sha256:d58c5f284d6a9bf8379dab423259fe8f85b70d5fa5d2916d5791a84594b122b1"}, {file = "websocket_client-1.3.3-py3-none-any.whl", hash = "sha256:5d55652dc1d0b3c734f044337d929aaf83f4f9138816ec680c1aefefb4dc4877"}, ] -widgetsnbextension = [ - {file = "widgetsnbextension-4.0.2-py3-none-any.whl", hash = "sha256:966bd61443926b6adcc0abef9f499c48bdeda181c333b0f49842d7385d440579"}, - {file = "widgetsnbextension-4.0.2.tar.gz", hash = "sha256:07f0e8582f920b24316cef16490f1aeb498f2c875d48980540e5c5dbf0ff5e2d"}, -] +widgetsnbextension = [] wrapt = [] -xlsxwriter = [ - {file = "XlsxWriter-2.0.0-py2.py3-none-any.whl", hash = "sha256:51fbb1d727d8391ddf240ce665710d6b205944dc84842c7b8452ac40226eeb71"}, - {file = "XlsxWriter-2.0.0.tar.gz", hash = "sha256:80ce4aadc638dea452f6e28f70b6223b9b5b5740ff9c57ef6387af115e129bbb"}, -] +xlsxwriter = [] zipp = [] diff --git a/data/data-pipeline/pyproject.toml b/data/data-pipeline/pyproject.toml index 5e2b6d5cb..fa45b4749 100644 --- a/data/data-pipeline/pyproject.toml +++ b/data/data-pipeline/pyproject.toml @@ -59,7 +59,7 @@ pytest-snapshot = "^0.8.1" nb-black = "^1.0.7" seaborn = "^0.11.2" papermill = "^2.3.4" -jupyterlab = "^3.4.4" +jupyterlab = "3.4.4" [build-system] build-backend = "poetry.core.masonry.api" @@ -93,6 +93,8 @@ disable = [ "R0801", # Disables duplicate code. There are a couple places we have similar code and # unfortunately you can't disable this rule for individual lines or files, it's a # known bug. https://github.com/PyCQA/pylint/issues/214# + "C0411", # Disables wrong-import-order. Import order is now enforced by isort as a + # pre-commit hook. ] [tool.pylint.FORMAT] @@ -141,4 +143,4 @@ authorized_licenses = [ "zpl 2.1", "gpl v3", "historical permission notice and disclaimer (hpnd)", -] \ No newline at end of file +] diff --git a/data/data-pipeline/pytest.ini b/data/data-pipeline/pytest.ini index 7022c5f70..17099dfd4 100644 --- a/data/data-pipeline/pytest.ini +++ b/data/data-pipeline/pytest.ini @@ -1,2 +1,4 @@ [pytest] norecursedirs = .git data +markers = + smoketest: marks a test as depending on the full score output diff --git a/data/data-pipeline/settings.toml b/data/data-pipeline/settings.toml index ce67e23e2..d6e88d767 100644 --- a/data/data-pipeline/settings.toml +++ b/data/data-pipeline/settings.toml @@ -1,6 +1,7 @@ [default] AWS_JUSTICE40_DATASOURCES_URL = "https://justice40-data.s3.amazonaws.com/data-sources" AWS_JUSTICE40_DATAPIPELINE_URL = "https://justice40-data.s3.amazonaws.com/data-pipeline" +DATASOURCE_RETRIEVAL_FROM_AWS = true [development] diff --git a/data/data-pipeline/tox.ini b/data/data-pipeline/tox.ini index 422935cbe..558b57690 100644 --- a/data/data-pipeline/tox.ini +++ b/data/data-pipeline/tox.ini @@ -15,7 +15,8 @@ commands = black data_pipeline [testenv:checkdeps] # checks the dependencies for security vulnerabilities and open source licenses allowlist_externals = bash -commands = safety check --ignore 44715 # known issue: https://github.com/pyupio/safety/issues/364 +commands = pip install -U wheel + safety check --ignore 51457 --ignore 44715 # known issue: https://github.com/pyupio/safety/issues/364 bash scripts/run-liccheck.sh [testenv:pytest] diff --git a/docker-compose.yml b/docker-compose.yml index 9e5d6c228..b3f109c7e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,8 +14,9 @@ services: environment: ENV_FOR_DYNACONF: development PYTHONUNBUFFERED: 1 + TZ: America/Los_Angeles - # The score_server serves the data-pipeline volume as a URL + # The score_server serves the data-pipeline volume as a URL j40_score_server: image: j40_score_server container_name: j40_score_server_1 @@ -24,24 +25,28 @@ services: - ./data/data-pipeline/data_pipeline/data/score:/data/data-pipeline/data_pipeline/data/score ports: - 5000:8080 - + environment: + TZ: America/Los_Angeles + + #The j40_website service runs the web app / map / site j40_website: image: j40_website container_name: j40_website_1 build: ./client environment: - # See the client readme for more info on environment variables: + # See the client readme for more info on environment variables: # https://github.com/usds/justice40-tool/blob/main/client/README.md DATA_SOURCE: local - - # If you want the map to render a MapBox base map (as opposed to the - # open source one from CartoDB), please create your own API TOKEN from + + # If you want the map to render a MapBox base map (as opposed to the + # open source one from CartoDB), please create your own API TOKEN from # your MapBox account and add the token here: MAPBOX_STYLES_READ_TOKEN: "" + TZ: America/Los_Angeles volumes: - ./client/src:/client/src - ports: + ports: - 8000:6000 depends_on: - "j40_score_server" diff --git a/docs/architecture/architecture-mmd.svg b/docs/architecture/architecture-mmd.svg index 52352c634..5fa10e080 100644 --- a/docs/architecture/architecture-mmd.svg +++ b/docs/architecture/architecture-mmd.svg @@ -1 +1 @@ -
Other Clients
Hosted by Geoplatform.gov
Data Pipeline (Justice40 Repo)
Justice40 Client
Data Selection (vision)
Community
ETL
Score Generation
API (S3 Access)
API (S3 Access)
API (S3 Access)
API (S3 Access)
Data Scientists
Third Party Apps
Justice40 Visualization Library (MapLibre)
Justice40 Static Site Frontend (Gatsby)
Approved Datasets
Normalized CSVs
Full CSV with Data and Score
GeoJSON
Uncompressed MVT Tiles
Intake
Evolution
Voting
Community Input
\ No newline at end of file +
Other Clients
Hosted by Geoplatform.gov
Data Pipeline (Justice40 Repo)
Justice40 Client
Data Selection (vision)
Community
ETL
Score Generation
API (S3 Access)
API (S3 Access)
API (S3 Access)
API (S3 Access)
Data Scientists
Third Party Apps
Justice40 Visualization Library (MapLibre)
Justice40 Static Site Frontend (Gatsby)
Approved Datasets
Normalized CSVs
Full CSV with Data and Score
GeoJSON
Uncompressed MVT Tiles
Intake
Evolution
Voting
Community Input
diff --git a/docs/architecture/architecture.mmd b/docs/architecture/architecture.mmd index 123fbd60a..2e147bc85 100644 --- a/docs/architecture/architecture.mmd +++ b/docs/architecture/architecture.mmd @@ -9,7 +9,7 @@ graph LR input --> Voting Intake --> Evolution --> Voting end - + subgraph s["Hosted by Geoplatform.gov"] subgraph dp["Data Pipeline (Justice40 Repo)"] Voting --> a["Approved Datasets"] @@ -28,4 +28,4 @@ graph LR ScoreCSV --"API (S3 Access)" --> DS["Data Scientists"] GeoJSON -- "API (S3 Access)" --> 3["Third Party Apps"] MVT -- "API (S3 Access)" --> 3["Third Party Apps"] - end \ No newline at end of file + end diff --git a/docs/architecture/geodata-pipeline-arch-mmd.svg b/docs/architecture/geodata-pipeline-arch-mmd.svg index ba8435761..ffcd7f620 100644 --- a/docs/architecture/geodata-pipeline-arch-mmd.svg +++ b/docs/architecture/geodata-pipeline-arch-mmd.svg @@ -1 +1 @@ -
development
production
Census Data ETL
ETL and Score Generation
Option 1
Option 2
XYZ URL
XYZ URL
Tileserver-GL
Locally stored tiles
Compressed high and low .mbtile files (S3)
Uncompressed MVT high and low directories (S3)
TIGER GeoJSON State Files(S3)
Create GeoJSON from Shapefile with ogr2ogr
Combine Census State Files with Geopandas
National Census GeoJSON (S3)
Normalized CSV (S3)
ETL for Dataset 1
Normalized CSV (S3)
ETL for Dataset 2
Generate Score (score-run)
Downloadable zip
Full CSV (S3)
Dataset 1
Dataset 2
Gatsby+MapLibre
Census TIGER Data Shapefiles (hosted by Census)
Combine with ogr2ogr + Create GeoJSON (score-geo)
GeoJSON files (high and low zoom) (S3)
Create and Send Tiles using Tippecanoe
\ No newline at end of file +
development
production
Census Data ETL
ETL and Score Generation
Option 1
Option 2
XYZ URL
XYZ URL
Tileserver-GL
Locally stored tiles
Compressed high and low .mbtile files (S3)
Uncompressed MVT high and low directories (S3)
TIGER GeoJSON State Files(S3)
Create GeoJSON from Shapefile with ogr2ogr
Combine Census State Files with Geopandas
National Census GeoJSON (S3)
Normalized CSV (S3)
ETL for Dataset 1
Normalized CSV (S3)
ETL for Dataset 2
Generate Score (score-run)
Downloadable zip
Full CSV (S3)
Dataset 1
Dataset 2
Gatsby+MapLibre
Census TIGER Data Shapefiles (hosted by Census)
Combine with ogr2ogr + Create GeoJSON (score-geo)
GeoJSON files (high and low zoom) (S3)
Create and Send Tiles using Tippecanoe
diff --git a/docs/architecture/geodata-pipeline-arch.mmd b/docs/architecture/geodata-pipeline-arch.mmd index f70364284..5e347b76e 100644 --- a/docs/architecture/geodata-pipeline-arch.mmd +++ b/docs/architecture/geodata-pipeline-arch.mmd @@ -17,7 +17,7 @@ graph TD TS3("TIGER GeoJSON State Files(S3)")-->CombineCensus["Combine Census State Files with Geopandas"] CombineCensus-->NCS3("National Census GeoJSON (S3)") end - + CSV("Full CSV (S3)")-->CGJ NCS3-->CGJ CGJ["Combine with ogr2ogr + Create GeoJSON (score-geo)"]-->GeoJSON @@ -31,6 +31,6 @@ graph TD Local("Locally stored tiles")--"Option 1"-->TS Compressed("Compressed high and low .mbtile files (S3)")--"Option 2"-->TS[/Tileserver-GL/] end - + TS--"XYZ URL"-->Client Uncompressed--"XYZ URL"-->Client["Gatsby+MapLibre"] diff --git a/docs/decisions/0002-files/AccessibilityComparison.tsv b/docs/decisions/0002-files/AccessibilityComparison.tsv index b7df10c86..60f4d1023 100644 --- a/docs/decisions/0002-files/AccessibilityComparison.tsv +++ b/docs/decisions/0002-files/AccessibilityComparison.tsv @@ -9,4 +9,4 @@ OpenStreetMap embed 1 0 The zoom controls' disabled state cannot be programmati MapBox GL JS API 1 0 The web map's semantic structure as a distinct piece of content cannot be programmatically determined. 1 0 Control to display attribution and feedback links is not keyboard accessible. [Github PR] 1 1 1 ChromeVox "Map" "MapBox logo link" NVDA "clickable map graphic" "MapBox logo link" 0 1 tab stop without focus indicator. [Github PR] 0 2/2 targets are too small. 0 1 0 Mapbox logo link opens in a new tab without warning. 0 The "map component" (, which acts as a control to both zoom and pan the map display) is missing role. [Github PR] Control to display attribution and feedback links is missing name and role. [Github PR] 6 Leaflet JS API 1 0 The web map's semantic structure as a distinct piece of content cannot be programmatically determined. [Github issue] The zoom controls' disabled state cannot be programmatically determined. [Github issue] 0 Some map labels (i.e. regional/districts) do not meet the minimum contrast ratio (uses OpenStreetMap tiles). 1 1 1 1 ChromeVox "Zoom in zoom out Leaflet map data copyright OpenStreetMap contributors" "Zoom in button" "Zoom out button" "Leaflet link" "OpenStreetMap link" NVDA "clickable Zoom in zoom out Leaflet map data copyright OpenStreetMap contributors zoom in button zoom in zoom out button Zoom out clickable Leaflet link a JS library for interactive maps map data copyright OpenStreetMap link contributors" "Zoom in button zoom in" "Zoom out button zoom out" "clickable Leaflet link a JS library for interactive maps" "OpenStreetMap link" 0 1 tab stop without focus indicator. 4 tab stops where focus indicators aren't persistently visible. [Github issue] 0 2/2 targets are too small. 0 1 1 0 The "map component" (
, which acts as a control to both zoom and pan the map display) is missing name and role. [Github issue] 7 MapBox Studio embed 1 0 The "Zoom out" control's disabled state cannot be programmatically determined. [Github PR] 1 0 Control to display attribution and feedback links is not keyboard accessible. [Github PR] 1 1 1 ChromeVox "Map" "Search edit text" "Zoom in button" "Zoom out button" "Reset bearing to north button" "MapBox logo link" NVDA "MapBox Studio frame clickable map graphic" "Search edit blank" "Zoom in button zoom in" "Zoom out button zoom out" "Reset bearing to north button reset bearing to north" "MapBox logo link" 0 1 tab stop without focus indicator. [Github PR] 0 7/7 targets are too small. 1 1 0 Mapbox logo link opens in a new tab without warning. 0 The "map component" (, which acts as a control to both zoom and pan the map display) is missing role. [Github PR] Control to display attribution and feedback links is missing name and role. [Github PR] 7 -Bing Maps embed 1 0 Scale bars/rulers are missing contextual information (alternatively should be hidden from ATs). 0 Some map labels (i.e. bodies of water, district labels) do not meet the minimum contrast ratio. 1 1 1 1 ChromeVox "Bing Maps interact to see more" "Current level 1 zoom in button" "Bing Maps link" "Terms link" NVDA "Bing Maps frame clickable Bing Maps interact to see more" "Current level 1 zoom in button zoom in" "Bing Maps link" "Terms link terms" 1 0 3/3 targets are too small. 1 1 0 Both the Bing Maps logo and the "Terms" link open in new windows without warning. 0 The "map component" (
, which acts as a control to both zoom and pan the map display) is missing role. 8 \ No newline at end of file +Bing Maps embed 1 0 Scale bars/rulers are missing contextual information (alternatively should be hidden from ATs). 0 Some map labels (i.e. bodies of water, district labels) do not meet the minimum contrast ratio. 1 1 1 1 ChromeVox "Bing Maps interact to see more" "Current level 1 zoom in button" "Bing Maps link" "Terms link" NVDA "Bing Maps frame clickable Bing Maps interact to see more" "Current level 1 zoom in button zoom in" "Bing Maps link" "Terms link terms" 1 0 3/3 targets are too small. 1 1 0 Both the Bing Maps logo and the "Terms" link open in new windows without warning. 0 The "map component" (
, which acts as a control to both zoom and pan the map display) is missing role. 8 diff --git a/docs/decisions/0002-files/Highways.csv b/docs/decisions/0002-files/Highways.csv index 8fd16e44a..419b782a2 100644 --- a/docs/decisions/0002-files/Highways.csv +++ b/docs/decisions/0002-files/Highways.csv @@ -2,4 +2,4 @@ Style Loaded,300.22,1195.81,331.85,4460.74,225.97,577.28 Map Idle,1039.56,1195.63,1184.71,126.85,3837.53,2146.08 DOM Interactive,126.88,137.59,193.75,131.33,154.01,262.01 -DOM complete,132.70,138.13,193.89,240.13,176.06,353.36 \ No newline at end of file +DOM complete,132.70,138.13,193.89,240.13,176.06,353.36 diff --git a/docs/decisions/0002-files/Maryland.csv b/docs/decisions/0002-files/Maryland.csv index df1b029a5..6478ff69f 100644 --- a/docs/decisions/0002-files/Maryland.csv +++ b/docs/decisions/0002-files/Maryland.csv @@ -2,4 +2,4 @@ Style Loaded,408.89,383.19,439.83,1782.45,147.41,0.00 Map Idle,207.23,1263.27,1318.54,120.00,1970.86,1659.42 DOM Interactive,146.15,108.78,171.48,124.38,143.74,269.40 -DOM complete,146.45,109.33,171.69,160.65,166.53,374.69 \ No newline at end of file +DOM complete,146.45,109.33,171.69,160.65,166.53,374.69 diff --git a/docs/decisions/0003-files/adr_process-mmd.svg b/docs/decisions/0003-files/adr_process-mmd.svg index 94919c88e..d6caf5bfa 100644 --- a/docs/decisions/0003-files/adr_process-mmd.svg +++ b/docs/decisions/0003-files/adr_process-mmd.svg @@ -1 +1 @@ -
ADR Pull Request Written
Emailed
Yes
No
Yes
No
Accepted
Rejected
Draft
Proposed
Consensus
Merged
Concerns Addressed?
Discussion
Voting Outcome
Update other Issues
Close
\ No newline at end of file +
ADR Pull Request Written
Emailed
Yes
No
Yes
No
Accepted
Rejected
Draft
Proposed
Consensus
Merged
Concerns Addressed?
Discussion
Voting Outcome
Update other Issues
Close
diff --git a/docs/decisions/0003-files/adr_process.mmd b/docs/decisions/0003-files/adr_process.mmd index 255b14ad9..c62728d9f 100644 --- a/docs/decisions/0003-files/adr_process.mmd +++ b/docs/decisions/0003-files/adr_process.mmd @@ -5,8 +5,8 @@ graph TB C --> |No| A{Concerns Addressed?} A --> |Yes| Merged A --> |No| Discussion - Discussion --> O{Voting Outcome} + Discussion --> O{Voting Outcome} O --> |Accepted| Merged O --> |Rejected| Merged Merged --> U[Update other Issues] - U-->Close \ No newline at end of file + U-->Close diff --git a/docs/decisions/0004-client-side-framework.md b/docs/decisions/0004-client-side-framework.md index 1491e851a..c3f63590b 100644 --- a/docs/decisions/0004-client-side-framework.md +++ b/docs/decisions/0004-client-side-framework.md @@ -5,7 +5,7 @@ - Date: 2021-05-19 - Tags: front-end, client -Technical Story: https://github.com/usds/justice40-tool/issues/44 +Technical Story: https://github.com/usds/justice40-tool/issues/44 ## Context and Problem Statement @@ -38,7 +38,7 @@ We need to decide what framework to use for our front end client. ## Decision Outcome -Chosen option: Gatsby, because it seems to hit the balance between being simple and static-site focused and having capabilities for scaling up features and eventually evolving to a full stack application should we need it. +Chosen option: Gatsby, because it seems to hit the balance between being simple and static-site focused and having capabilities for scaling up features and eventually evolving to a full stack application should we need it. ### Positive Consequences diff --git a/docs/decisions/0005-hosting.md b/docs/decisions/0005-hosting.md index 577694895..490d72fe6 100644 --- a/docs/decisions/0005-hosting.md +++ b/docs/decisions/0005-hosting.md @@ -5,7 +5,7 @@ - Date: 2021-05-18 - Tags: Hosting, Server, Geoplatform -Technical Story: https://github.com/usds/justice40-tool/issues/18 + https://github.com/usds/justice40-tool/issues/36 +Technical Story: https://github.com/usds/justice40-tool/issues/18 + https://github.com/usds/justice40-tool/issues/36 ## Context and Problem Statement We need a host for our data pipeline and front end website/app. @@ -15,7 +15,7 @@ We need a host for our data pipeline and front end website/app. - **Speed of launch** - We have a mandate to launch an initial version of our tool by July 27, and we want to get an informational site up much sooner. - **Support for continuous integration and delivery** - We need our hosting provider to support a modern software development lifecycle that includes continuous integration and delivery, such as integration with our Github repository and CI/CD tool such as Github Actions. - **Ease of implementation** - Ideally we can choose a platform that some of the team has experience with, that doesn't have a steep learning curve, and/or that has good support. -- **Commitment to open source and process** - Any code used for servers, data processing, or front end hosting must be able to be open source, so there cannot be limitations with regard to where/how code is hosted and shared. +- **Commitment to open source and process** - Any code used for servers, data processing, or front end hosting must be able to be open source, so there cannot be limitations with regard to where/how code is hosted and shared. ## Considered Options @@ -25,7 +25,7 @@ We need a host for our data pipeline and front end website/app. ## Decision Outcome -We will use Geoplatform.gov for hosting our data pipeline, tile server, and front end client. They have a set of shared service offerings that will enable us to have an open data pipeline from data source to tile API, enabling contributions to data processing at any point as well as enabling data access for users at any point (e.g. whether a user wants to access raw data or GeoJSON or tile format). The diagram below illustrates the proposed system architecture and hosting: +We will use Geoplatform.gov for hosting our data pipeline, tile server, and front end client. They have a set of shared service offerings that will enable us to have an open data pipeline from data source to tile API, enabling contributions to data processing at any point as well as enabling data access for users at any point (e.g. whether a user wants to access raw data or GeoJSON or tile format). The diagram below illustrates the proposed system architecture and hosting: ![diagram](https://raw.githubusercontent.com/usds/justice40-tool/main/docs/architecture/architecture-mmd.svg) @@ -34,11 +34,11 @@ We will use Geoplatform.gov for hosting our data pipeline, tile server, and fron - No need to stand up our own servers for data processing or vending tiles - No need to find separate static site hosting for our front end - Help advance shared geo services for government -- Code for data transformations can live on an open Github repo and be collaborated on by the community +- Code for data transformations can live on an open Github repo and be collaborated on by the community ### Negative Consequences -- Possible delays or additional work: Some features and offerings we may want to use are still a work in progress on Geoplatform's side, so we may have to help build these out or wait for their release. +- Possible delays or additional work: Some features and offerings we may want to use are still a work in progress on Geoplatform's side, so we may have to help build these out or wait for their release. ## Pros and Cons of Other Options @@ -56,4 +56,3 @@ Cons: - Would not have the flexibility to easily run serverless functions if we needed to ## Links - diff --git a/docs/decisions/0006-files/adr_diagram-mmd.svg b/docs/decisions/0006-files/adr_diagram-mmd.svg index a5a66f45e..0b957603c 100644 --- a/docs/decisions/0006-files/adr_diagram-mmd.svg +++ b/docs/decisions/0006-files/adr_diagram-mmd.svg @@ -1 +1 @@ -
Create Issue with ADR Template
Yes - Maintainer Adds Ready for Discussion label
No - Iterate
Discuss in Ticket + wait for comment period to expire
Yes
No
Yes
No
Accepted - add label
Rejected - add label
Start
Draft
Ready for Discussion?
In Discussion
Consensus
Pull Request
Concerns Addressed?
In Person Discussion
Voting Outcome
Standard PR Process
Close
\ No newline at end of file +
Create Issue with ADR Template
Yes - Maintainer Adds Ready for Discussion label
No - Iterate
Discuss in Ticket + wait for comment period to expire
Yes
No
Yes
No
Accepted - add label
Rejected - add label
Start
Draft
Ready for Discussion?
In Discussion
Consensus
Pull Request
Concerns Addressed?
In Person Discussion
Voting Outcome
Standard PR Process
Close
diff --git a/docs/decisions/0006-files/adr_diagram.mmd b/docs/decisions/0006-files/adr_diagram.mmd index 66d810a88..2288d7fbf 100644 --- a/docs/decisions/0006-files/adr_diagram.mmd +++ b/docs/decisions/0006-files/adr_diagram.mmd @@ -8,8 +8,8 @@ graph TB C --> |No| A{Concerns Addressed?} A --> |Yes| PR A --> |No| IP["In Person Discussion"] - IP --> O{Voting Outcome} + IP --> O{Voting Outcome} O --> |Accepted - add label | PR O --> |Rejected - add label | PR PR --> PRP["Standard PR Process"] - PRP --> Close \ No newline at end of file + PRP --> Close diff --git a/docs/glossary.md b/docs/glossary.md index 37d41d880..176bcf731 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -1,8 +1,8 @@ # Glossary -This glossary is intended to be a helpful guide to terms and acronyms we use across the Justice40 project and in our open source community. We'll try to keep this list update to date and in alphabetical order for ease of use. If you see an error, please help leave this repo better than you found it by submitting a pull request with the fix :) +This glossary is intended to be a helpful guide to terms and acronyms we use across the Justice40 project and in our open source community. We'll try to keep this list update to date and in alphabetical order for ease of use. If you see an error, please help leave this repo better than you found it by submitting a pull request with the fix :) -If you don't see the term you're looking for here, please submit an issue to this repo with the term in question and why you think it should be added. +If you don't see the term you're looking for here, please submit an issue to this repo with the term in question and why you think it should be added. Know a term and its definition that you don't see here? Make a pull request with the term, definition, and reason for inclusion and a team member will review shortly. diff --git a/docs/operations/METHODOLOGY_CHANGE_PROCESS.md b/docs/operations/METHODOLOGY_CHANGE_PROCESS.md index aa57f31cb..5b229c9e3 100644 --- a/docs/operations/METHODOLOGY_CHANGE_PROCESS.md +++ b/docs/operations/METHODOLOGY_CHANGE_PROCESS.md @@ -19,4 +19,4 @@ The methodology for Justice40 will continue to evolve. The steps outlined below 16. In the frontend, display new indicators in sidepanel 17. Update copy on methodology page 18. Update copy on .pdf in download package -19. Update technical support document (if necessary - TSD will include the final .pdf from download package) \ No newline at end of file +19. Update technical support document (if necessary - TSD will include the final .pdf from download package)