def generate_area_summary( latest_values: dict, model_output: Optional[CANPyseirLocationOutput], ) -> CovidActNowAreaSummary: fips = latest_values[CommonFields.FIPS] state = latest_values[CommonFields.STATE] state_intervention = get_can_projection.get_intervention_for_state(state) actuals = _generate_actuals(latest_values, state_intervention) projections = None if model_output: projections = _generate_api_for_projections(model_output) return CovidActNowAreaSummary( population=latest_values[CommonFields.POPULATION], stateName=us_state_abbrev.ABBREV_US_STATE[state], countyName=latest_values.get(CommonFields.COUNTY), fips=fips, lat=latest_values.get(CommonFields.LATITUDE), long=latest_values.get(CommonFields.LONGITUDE), actuals=actuals, # TODO(chris): change this to reflect latest time data updated? lastUpdatedDate=datetime.utcnow(), projections=projections, )
def build_timeseries_for_fips( intervention, us_latest, us_timeseries, model_output_dir, fips, ) -> Optional[CovidActNowAreaTimeseries]: fips_latest = us_latest.get_record_for_fips(fips) if intervention is Intervention.SELECTED_INTERVENTION: state = fips_latest[CommonFields.STATE] intervention = get_can_projection.get_intervention_for_state(state) model_output = CANPyseirLocationOutput.load_from_model_output_if_exists( fips, intervention, model_output_dir) if not model_output and intervention is not Intervention.OBSERVED_INTERVENTION: # All model output is currently tied to a specific intervention. However, # we want to generate results for areas that don't have a fit result, but we're not # duplicating non-model outputs. return None try: area_summary = api.generate_area_summary(fips_latest, model_output) fips_timeseries = us_timeseries.get_subset(None, fips=fips) area_timeseries = api.generate_area_timeseries(area_summary, fips_timeseries, model_output) except Exception: logger.error(f"failed to run output", fips=fips) return None return area_timeseries
def generate_api_for_state_projection_row(projection_row) -> CovidActNowStateSummary: state_abbrev = US_STATE_ABBREV[projection_row[rc.STATE_FULL_NAME]] projections = _generate_api_for_projections(projection_row) state_intervention = get_can_projection.get_intervention_for_state(state_abbrev) state_actuals = combined_datasets.build_us_latest_with_all_fields().get_record_for_state(state_abbrev) state_result = CovidActNowStateSummary( population=state_actuals[CommonFields.POPULATION], lat=projection_row[rc.LATITUDE], long=projection_row[rc.LONGITUDE], actuals=_generate_actuals(state_actuals, state_intervention), stateName=projection_row[rc.STATE_FULL_NAME], fips=projection_row[rc.FIPS], lastUpdatedDate=_format_date(projection_row[rc.LAST_UPDATED]), projections=projections, ) return state_result
def generate_state_timeseries( projection_row, intervention, input_dir ) -> CovidActNowStateTimeseries: state = US_STATE_ABBREV[projection_row[rc.STATE_FULL_NAME]] fips = projection_row[rc.FIPS] raw_dataseries = get_can_projection.get_can_raw_data( input_dir, state, fips, AggregationLevel.STATE, intervention ) # join in state testing data onto the timeseries # left join '%m/%d/%y', so the left join gracefully handles # missing state testing data (i.e. NE) testing_df = get_testing_timeseries_by_state(state) new_df = pd.DataFrame(raw_dataseries).merge(testing_df, on="date", how="left") can_dataseries = new_df.to_dict(orient="records") timeseries = [] for data_series in can_dataseries: timeseries.append(_generate_state_timeseries_row(data_series)) projections = _generate_api_for_projections(projection_row) if len(timeseries) < 1: raise Exception(f"State time series empty for {intervention.name}") state_intervention = get_can_projection.get_intervention_for_state(state) actuals_ts = combined_datasets.build_us_timeseries_with_all_fields() actual_latest = combined_datasets.build_us_latest_with_all_fields() state_latest = actual_latest.get_record_for_state(state) return CovidActNowStateTimeseries( population=state_latest[CommonFields.POPULATION], lat=projection_row[rc.LATITUDE], long=projection_row[rc.LONGITUDE], actuals=_generate_actuals( state_latest, state_intervention ), stateName=projection_row[rc.STATE_FULL_NAME], fips=projection_row[rc.FIPS], lastUpdatedDate=_format_date(projection_row[rc.LAST_UPDATED]), projections=projections, timeseries=timeseries, actuals_timeseries=_generate_actuals_timeseries( actuals_ts.get_records_for_state(state), state_intervention ), )
def generate_county_timeseries(projection_row, intervention, input_dir): state_abbrev = US_STATE_ABBREV[projection_row[rc.STATE_FULL_NAME]] fips = projection_row[rc.FIPS] raw_dataseries = get_can_projection.get_can_raw_data( input_dir, state_abbrev, fips, AggregationLevel.COUNTY, intervention ) testing_df = get_testing_timeseries_by_fips(fips) new_df = pd.DataFrame(raw_dataseries).merge(testing_df, on="date", how="left") can_dataseries = new_df.to_dict(orient="records") timeseries = [] for data_series in can_dataseries: timeseries.append(_generate_county_timeseries_row(data_series)) if len(timeseries) < 1: raise Exception(f"County time series empty for {intervention.name}") projections = _generate_api_for_projections(projection_row) state_intervention = get_can_projection.get_intervention_for_state(state_abbrev) actuals_ts = combined_datasets.build_us_timeseries_with_all_fields() actual_latest = combined_datasets.build_us_latest_with_all_fields() fips_latest = actual_latest.get_record_for_fips(fips) return CovidActNowCountyTimeseries( population=fips_latest[CommonFields.POPULATION], lat=projection_row[rc.LATITUDE], long=projection_row[rc.LONGITUDE], actuals=_generate_actuals( fips_latest, state_intervention ), stateName=projection_row[rc.STATE_FULL_NAME], countyName=projection_row[rc.COUNTY], fips=projection_row[rc.FIPS], lastUpdatedDate=_format_date(projection_row[rc.LAST_UPDATED]), projections=projections, timeseries=timeseries, actuals_timeseries=_generate_actuals_timeseries( actuals_ts.get_records_for_fips(fips), state_intervention ), )
def build_timeseries_for_region( regional_input: RegionalInput, ) -> Optional[RegionSummaryWithTimeseries]: intervention = regional_input.intervention if intervention is Intervention.SELECTED_INTERVENTION: intervention = get_can_projection.get_intervention_for_state( regional_input.state) try: metrics_timeseries, metrics_latest = generate_metrics_and_latest( regional_input.timeseries, regional_input.rt_data, regional_input.icu_data, ) region_summary = api.generate_region_summary(regional_input.latest, metrics_latest, None) region_timeseries = api.generate_region_timeseries( region_summary, regional_input.timeseries, metrics_timeseries, None) except Exception: logger.exception(f"Failed to build timeseries for fips.") return None return region_timeseries