Source code for tempor.datasources.prediction.temporal.plugin_uci_diabetes
"""Module defining the UCI diabetes data source."""importtimeimporttracebackimporturllib.errorfrompathlibimportPathfromtypingimportAny,Tuple,castimportrequestsfromtempor.coreimportpluginsfromtempor.dataimportdatasetfromtempor.data.clv2convimportclairvoyance2_dataset_to_tempor_datasetfromtempor.datasourcesimportdatasourcefromtempor.logimportloggerfromtempor.models.clairvoyance2.datasets.uciimportuci_diabetesfromtempor.models.clairvoyance2.preprocessing.convenienceimportTemporalTargetsExtractorfrom...datasourceimportmonkeypatch_ssl_error_workaround
[docs]@plugins.register_plugin(name="uci_diabetes",category="prediction.temporal",plugin_type="datasource")classUCIDiabetesDataSource(datasource.TemporalPredictionDataSource):def__init__(self,make_regular:bool=False,use_int_index:bool=True,targets:Tuple[str,...]=("hypoglycemic_symptoms",),**kwargs:Any,)->None:"""UCI diabetes data source. See: https://archive.ics.uci.edu/ml/machine-learning-databases/diabetes Args: make_regular (bool, optional): Whether to reindex the dataset to have regular timesteps. Defaults to `False`. use_int_index (bool, optional): Whether to use integer index. Defaults to `True`. targets (Tuple[str, ...], optional): The target feature(s). Defaults to ``("hypoglycemic_symptoms",)``. **kwargs (Any): Any additional keyword arguments will be passed to parent constructor. """super().__init__(**kwargs)self.make_regular=make_regularself.use_int_index=use_int_indexself.targets=targets
[docs]defload(self,**kwargs:Any)->dataset.TemporalPredictionDataset:# noqa: D102download_retries=3download_pause_sec=5forretryinrange(download_retries):# NOTE: Connection to archive.ics.uci.edu tends to be flaky, attempt download retries.# TODO: May wish to exclude this from tests / download files from a more stable location /# make tests resilient to internet connection failures.try:clv_dataset=self._load()excepturllib.error.URLErrorasex:# pragma: no coverif"SSL"instr(ex)or"ssl"instr(ex):withmonkeypatch_ssl_error_workaround():clv_dataset=self._load()else:raiseexcept(# pylint: disable=duplicate-exceptrequests.exceptions.RequestException,urllib.error.URLError,)asex:# pragma: no coverifretry+1==download_retries:logger.error(f"Failed to download UCI diabetes dataset after {download_retries} retries.")raiselogger.debug(f"Caught exception and will retry ({retry+1}/{download_retries}): "f"{ex}\n{traceback.format_exc()}")time.sleep(download_pause_sec)clv_dataset=TemporalTargetsExtractor(params={"targets":self.targets}).fit_transform(clv_dataset# pyright: ignore)data=clairvoyance2_dataset_to_tempor_dataset(clv_dataset)data=cast(dataset.TemporalPredictionDataset,data)returndata