Ejemplo n.º 1
0
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,
    )
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
        ),
    )
Ejemplo n.º 5
0
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
        ),
    )
Ejemplo n.º 6
0
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