diff --git a/safegraph/delphi_safegraph/__init__.py b/safegraph/delphi_safegraph/__init__.py index fc2d5818d..70cd6a34d 100644 --- a/safegraph/delphi_safegraph/__init__.py +++ b/safegraph/delphi_safegraph/__init__.py @@ -8,5 +8,4 @@ from __future__ import absolute_import -from . import geo from . import process diff --git a/safegraph/delphi_safegraph/geo.py b/safegraph/delphi_safegraph/geo.py deleted file mode 100644 index e1b2d8859..000000000 --- a/safegraph/delphi_safegraph/geo.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -"""Geo location constants for constructing Safegraph indicator.""" - -# https://code.activestate.com/recipes/577775-state-fips-codes-dict/ -STATE_TO_FIPS = { - "AS": "60", # American Samoa - "GU": "66", # Guam - "MP": "69", # Northern Mariana Islands - "VI": "78", # Virgin Islands - "WA": "53", - "DE": "10", - "DC": "11", - "WI": "55", - "WV": "54", - "HI": "15", - "FL": "12", - "WY": "56", - "PR": "72", - "NJ": "34", - "NM": "35", - "TX": "48", - "LA": "22", - "NC": "37", - "ND": "38", - "NE": "31", - "TN": "47", - "NY": "36", - "PA": "42", - "AK": "02", - "NV": "32", - "NH": "33", - "VA": "51", - "CO": "08", - "CA": "06", - "AL": "01", - "AR": "05", - "VT": "50", - "IL": "17", - "GA": "13", - "IN": "18", - "IA": "19", - "MA": "25", - "AZ": "04", - "ID": "16", - "CT": "09", - "ME": "23", - "MD": "24", - "OK": "40", - "OH": "39", - "UT": "49", - "MO": "29", - "MN": "27", - "MI": "26", - "RI": "44", - "KS": "20", - "MT": "30", - "MS": "28", - "SC": "45", - "KY": "21", - "OR": "41", - "SD": "46", -} - -FIPS_TO_STATE = {v: k.lower() for k, v in STATE_TO_FIPS.items()} - -VALID_GEO_RESOLUTIONS = ('county', 'state') diff --git a/safegraph/delphi_safegraph/process.py b/safegraph/delphi_safegraph/process.py index f51b1faff..358e3f7ec 100644 --- a/safegraph/delphi_safegraph/process.py +++ b/safegraph/delphi_safegraph/process.py @@ -6,8 +6,9 @@ import pandas as pd import covidcast -from .constants import HOME_DWELL, COMPLETELY_HOME, FULL_TIME_WORK, PART_TIME_WORK -from .geo import FIPS_TO_STATE, VALID_GEO_RESOLUTIONS +from delphi_utils import GeoMapper + +from .constants import HOME_DWELL, COMPLETELY_HOME, FULL_TIME_WORK, PART_TIME_WORK, GEO_RESOLUTIONS # Magic number for modular arithmetic; CBG -> FIPS MOD = 10000000 @@ -176,11 +177,16 @@ def aggregate(df, signal_names, geo_resolution='county'): if geo_resolution == 'county': df['geo_id'] = df['county_fips'] elif geo_resolution == 'state': - df['geo_id'] = df['county_fips'].apply(lambda x: - FIPS_TO_STATE[x[:2]]) + gmpr = GeoMapper() + df = gmpr.add_geocode(df, + from_col='county_fips', + from_code='fips', + new_code='state_id', + new_col='geo_id', + dropna=False) else: raise ValueError( - f'`geo_resolution` must be one of {VALID_GEO_RESOLUTIONS}.') + f'`geo_resolution` must be one of {GEO_RESOLUTIONS}.') # Aggregation and signal creation grouped_df = df.groupby(['geo_id'])[signal_names]