Source code for kaxanuk.attribution_analysis.entities.strategy_weights
import dataclasses
import pandas as pd
# from pandas import DataFrame
# from kaxanuk.attribution_analysis.exceptions import ReturnsTimeSeriesError
[docs]
@dataclasses.dataclass(slots=True, init=True) # frozen=True,
class DailyWeights:
file_route: str
file_extension: str = '.csv'
data: pd.DataFrame = None
# daily_weights: DataFrame
def __init__(
self,
file_route: str,
file_extension: str
):
self.file_route = file_route
self.file_extension = file_extension
if self.file_extension == '.csv':
data = self.read_csv()
self.data = data
# def __post_init__(self):
# if not isinstance(self.daily_weights, DataFrame):
# raise ReturnsTimeSeriesError("PortfolioDailyWeights must be a pandas DataFrame")
[docs]
def read_csv(self) -> pd.DataFrame:
"""
Reads the CSV file and returns a DataFrame.
Returns
-------
DataFrame
The data read from the CSV file.
"""
data = pd.read_csv(
self.file_route,
index_col = 0,
).T
try:
data.index = pd.to_datetime(data.index)
except (ValueError, TypeError):
data.index = pd.to_datetime(data.index, format='%d/%m/%Y')
return data