1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-06 04:20:57 +08:00

add DataHandlerDL

This commit is contained in:
bxdd
2021-03-25 01:29:59 +08:00
parent 419629e4d2
commit 1ca3c6a61c

View File

@@ -217,3 +217,61 @@ class StaticDataLoader(DataLoader):
join=self.join,
)
self._data.sort_index(inplace=True)
class DataHandlerDL(DataLoader):
'''DataHandlerDL
DataHandler-based (D)ata (L)oader
It is designed to load multiple data from data handler
- If you just want to load data from single datahandler, you can write them in single data handler
'''
def __init__(self, handler_config:dict, fetch_config:dict = {}, is_group=False):
"""
Parameters
----------
handler_config : dict
handler_config will be used to describe the handlers
.. code-block::
<handler_config> := {
"group_name1": <handler>
"group_name2": <handler>
}
or
<handler_config> := <handler>
<handler> := DataHandler Instance | DataHandler Config
fetch_config : dict
fetch_config will be used to describe the different arguments of fetch method, such as squeeze, data_key, etc.
is_group: bool
is_group will be used to describe whether the key of handler_config is group
"""
if self.is_group:
self.handlers = {
grp: init_instance_by_config(config, accept_types=DataHandler)
for grp, config in handler_config.items()
}
else:
self.handlers = init_instance_by_config(handler_config, accept_types=DataHandler)
self.is_group = is_group
self.fetch_config = fetch_config
def load(self, instruments=None, start_time=None, end_time=None) -> pd.DataFrame:
if instruments is not None:
LOG.warning(f"instruments[{instruments}] is ignored")
if self.is_group:
df = pd.concat(
{
grp: dh.fetch(slice(start_time, end_time), col_set=DataHandler.CS_RAW, **fetch_config)
for grp, dh in self.handlers.items()
},
axis=1,
)
else:
df = self.handler.fetch(slice(start_time, end_time), col_set=DataHandler.CS_RAW, **fetch_config)
return df