Source code for oasislmf.preparation.correlations
"""
This file defines the functions that maps the supported perils with the correlation settings. This data is usually
obtained from the model_settings.
"""
from typing import Optional
import pandas as pd
[docs]
def map_data(data: Optional[dict], logger) -> Optional[pd.DataFrame]:
"""
Maps data from the model settings to to have Peril ID, peril_correlation_group, and damage_correlation_value.
Args:
data: (dict) the data loaded from the model settings
Returns: (pd.DataFrame) the mapped data
"""
if data is not None:
supported_perils = data.get("lookup_settings", {}).get("supported_perils", [])
correlations_legacy = data.get("correlation_settings", [])
correlation_settings = data.get("model_settings", {}).get("correlation_settings", correlations_legacy)
for supported_peril in supported_perils: # supported_perils is expected to be a list of dict
supported_peril["peril_correlation_group"] = supported_peril.get("peril_correlation_group", 0)
supported_perils_df = pd.DataFrame(supported_perils)
correlation_settings_df = pd.DataFrame(correlation_settings)
if len(correlation_settings_df) > 0:
# correlations_settings are defined
if "damage_correlation_value" not in correlation_settings_df.columns:
logger.info("Correlation settings: No `damage_correlation_value` found")
correlation_settings_df["damage_correlation_value"] = 0
if "hazard_correlation_value" not in correlation_settings_df.columns:
logger.info("Correlation settings: No `hazard_correlation_value` found")
correlation_settings_df["hazard_correlation_value"] = 0
# merge allows duplicates of the "peril_correlation_group" in the supported perils
# merge does not allow duplicates of the "peril_correlation_group" in the correlation settings
if len(supported_perils_df) > 0 and len(correlation_settings_df) > 0:
mapped_data = pd.merge(supported_perils_df, correlation_settings_df, on="peril_correlation_group")
return mapped_data