mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-13 04:41:24 +00:00
* 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>
47 lines
1.5 KiB
Python
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
|