Files
OpenBB/openbb_sdk/extensions/qa/openbb_qa/qa_helpers.py
Theodore Aptekarev e5a9a7f427 Update folder structure for the SDK v4 (#5212)
* Move openbb_provider

* Add lock file for provider core

* Move sdk core

* Move openbb-provider readme text to the correct location

* Move data providers code

* Remove decoupling leftovers

* Lower the supported python version to 3.8

* Move sdk extensions

* Rename provider imports

* Update openbb pyproject toml

* Fix import statements after the move

* Update lock files

* Change ignored path for the static assets

* Add obb mascot

* Fix providers not being available in the openbb package

* Remove providers extension in favor of the coverage router in sdk core

* username is optional

* linting

* Change openbb_sdk_core to openbb_core

* Bump ruff pre-commit to latest version

* Bump ruff to latest in github actions

* Make ruff and pylint lint only the code in diff in GHA

* Attempt to fix broken linting action

* Attempt to fix the broken linting action II

* Lint code with pre-commit

* Revert all changes to github actions

* Revert to using ruff 0.0.256

* Use dot for local imports

* Re-commit lost forex pairs

* Fix fmp's typo that made it to the openbb data points

* Add other_investing_activities field that has a typo in fmp's api

---------

Co-authored-by: montezdesousa <montezdesousa@gmail.com>
Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com>
2023-07-12 18:43:30 +02:00

47 lines
1.5 KiB
Python

"""Helper functions for QA"""
from io import BytesIO
from urllib.request import urlopen
from zipfile import ZipFile
import pandas as pd
# ruff: ignore=S310
def get_fama_raw(start_date: str, end_date: str) -> pd.DataFrame:
"""Gets base Fama French data to calculate risk
Returns
-------
pd.DataFrame
A data with fama french model information
"""
with urlopen( # nosec # noqa: S310
"https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_Factors_CSV.zip"
) as url:
# Download Zipfile and create pandas DataFrame
with ZipFile(BytesIO(url.read())) as zipfile:
with zipfile.open("F-F_Research_Data_Factors.CSV") as zip_open:
df = pd.read_csv(
zip_open,
header=0,
names=["Date", "MKT-RF", "SMB", "HML", "RF"],
skiprows=3,
)
df = df[df["Date"].apply(lambda x: len(str(x).strip()) == 6)]
df["Date"] = df["Date"].astype(str) + "01"
df["Date"] = pd.to_datetime(df["Date"], format="%Y%m%d")
df["MKT-RF"] = pd.to_numeric(df["MKT-RF"], downcast="float")
df["SMB"] = pd.to_numeric(df["SMB"], downcast="float")
df["HML"] = pd.to_numeric(df["HML"], downcast="float")
df["RF"] = pd.to_numeric(df["RF"], downcast="float")
df["MKT-RF"] = df["MKT-RF"] / 100
df["SMB"] = df["SMB"] / 100
df["HML"] = df["HML"] / 100
df["RF"] = df["RF"] / 100
df = df.set_index("Date")
df = df.loc[start_date:end_date] # type: ignore
return df