Source code for bhf_smarthealth.enrich.lsoa_ahah_enrich

"""This module enriches LSOA data with AHAH environmental data"""

import pandas as pd
import logging

from pathlib import Path
from bhf_smarthealth.utils import data_io, df_utils

from bhf_smarthealth.config import (
    DEFAULT_AHAH_AGG_DICT as agg_dict,
    DEFAULT_AHAH_TIME_PERIOD as time_period,
    DEFAULT_REMOVE_AHAH_COLUMNS as remove_columns,
    DEFAULT_RENAME_AHAH_COLUMNS as rename_columns,
    DEFAULT_AHAH_FIELDS as ahah_field_subset,
    DEFAULT_AHAH_MERGE_COL as merge_column,
)

logger = logging.getLogger(__name__)


[docs] def enrich_LSOA_out( lsoa_data: pd.DataFrame, ahah_data: pd.DataFrame, out_path: Path | str ) -> None: """Enrich derived LSOA data with AHAH data Parameters ---------- lsoa_data : pd.DataFrame DataFrame containing the intraday LSOA data to be processed ahah_data : pd.DataFrame DataFrame containing reference AHAH (Access to Health Assets and Hazards) data out_path : Path | str Path to write output file to. File format will be determined from filename extension Raises ------ TypeError Raised if reference AHAH data is not a DataFrame TypeError Raised if LSOA data is not a DataFrame """ if not isinstance(ahah_data, pd.DataFrame): raise TypeError("Reference AHAH data must be a pd.DataFrame instance") if not isinstance(lsoa_data, pd.DataFrame): raise TypeError("LSOA data must be a pd.DataFrame instance.") if lsoa_data.empty: logger.warning( "No valid LSOA data to enrich. Writing empty 'Environmental' file.." ) data_io.save_dataframe_ouput(df=lsoa_data, file_out_path=out_path) return logger.info( f"Loaded intraday LSOA data with shape: {lsoa_data.shape}. Combining with reference AHAH data" ) # calculate modal lsoa lsoa_modal_df = df_utils.apply_agg_over_interval( lsoa_data, agg_dict=agg_dict, time_period=time_period, ID_col="sheffield_id" ) lsoa_modal_df = df_utils.rename_columns(df=lsoa_modal_df, col_names=rename_columns) # merge with reference dataset lsoa_ahah_df = ( lsoa_modal_df.reset_index() .merge( ahah_data[ahah_field_subset], how="inner", left_on=merge_column, right_on=["LSOA21CD"], ) .set_index(["sheffield_id", "timestamp"]) ) lsoa_ahah_df = df_utils.remove_columns(df=lsoa_ahah_df, col_names=remove_columns) data_io.save_dataframe_ouput(df=lsoa_ahah_df, file_out_path=out_path) logger.info( f"Processed DataFrame saved to {out_path} with columns: {lsoa_ahah_df.columns} and shape: {lsoa_ahah_df.shape}" )