Source code for openclimate.Targets

from dataclasses import dataclass
import pandas as pd
from typing import List, Dict, Union, Tuple, Any

from .utils import explode_dict_columns
from .utils import filter_overviews

from .ActorOverview import ActorOverview
from .Base import Base


[docs]@dataclass class Targets(Base): def _get_target(self, overview: Dict[Any, Any]) -> pd.DataFrame: """retreive targets from overview dictionary Args: overview (Dict): dictionary of overview Returns: pd.DataFrame """ data = overview["targets"] if data: columns_tmp = [ "actor_id", "target_type", "baseline_year", "baseline_value", "target_year", "target_value", "target_unit", "datasource_id", "datasource_name", "datasource_publisher", "datasource_published", "datasource_URL", "initiative_initiative_id", "initiative_name", "initiative_description", "initiative_URL", ] df = ( pd.DataFrame(data) .sort_values(by=["target_year"]) .assign(actor_id=overview["actor_id"]) ) columns = [col for col in columns_tmp if col in df.columns] return ( explode_dict_columns(df) .loc[:, columns] .rename({"initiative_initiative_id": "initiative_id"}) .reset_index(drop=True) ) return None
[docs] def targets( self, actor_id: Union[str, List[str], Tuple[str]], ignore_warnings: bool = False, *args, **kwargs ) -> pd.DataFrame: """retreive actor targets Args: actor_id (Union[str, List[str], Tuple[str]], optional): actor code ignore_warnings (bool): ignore warning messages Returns: pd.DataFrame: """ try: actor_id = [actor_id] if isinstance(actor_id, str) else actor_id overviews = ActorOverview().overview(actor_id=actor_id, ignore_warnings=ignore_warnings) except Exception: print(f"Something went wrong, check that {actor_id} is an actor") else: overviews = filter_overviews(overviews, 'targets', ignore_warnings) overviews = [overview for overview in overviews if 'targets' in overview.keys()] df_list = [self._get_target(overview) for overview in overviews if overview] return pd.concat(df_list)