From 18d1ce0df56eae30bcb699593d3b133fcbf6f470 Mon Sep 17 00:00:00 2001 From: montezdesousa <79287829+montezdesousa@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:49:18 +0000 Subject: [PATCH] Add missing qa functions `capm`, `beta`, `cusum`, `acf`, `qqplot`, `hist`, `line` (#3499) --- .../common/quantitative_analysis/qa_view.py | 48 +++++++++++++++++-- .../miscellaneous/library/trail_map.csv | 15 ++++-- .../stocks/quantitative_analysis/beta_view.py | 3 +- .../quantitative_analysis/test_qa_view.py | 4 +- 4 files changed, 59 insertions(+), 11 deletions(-) diff --git a/openbb_terminal/common/quantitative_analysis/qa_view.py b/openbb_terminal/common/quantitative_analysis/qa_view.py index 554227ac0bd..286567123d1 100644 --- a/openbb_terminal/common/quantitative_analysis/qa_view.py +++ b/openbb_terminal/common/quantitative_analysis/qa_view.py @@ -80,9 +80,9 @@ def display_summary(data: pd.DataFrame, export: str = "") -> None: @log_start_end(log=logger) def display_hist( - symbol: str, data: pd.DataFrame, target: str, + symbol: str = "", bins: int = 15, external_axes: Optional[List[plt.Axes]] = None, ) -> None: @@ -90,16 +90,22 @@ def display_hist( Parameters ---------- - symbol : str - Name of dataset data : pd.DataFrame Dataframe to look at target : str Data column to get histogram of the dataframe + symbol : str + Name of dataset bins : int Number of bins in histogram external_axes : Optional[List[plt.Axes]], optional External axes (1 axis is expected in the list), by default None + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> df = openbb.stocks.load("AAPL") + >>> openbb.qa.hist(data=df, target="Adj Close") """ data = data[target] @@ -171,6 +177,12 @@ def display_cdf( Format to export data external_axes : Optional[List[plt.Axes]], optional External axes (1 axis is expected in the list), by default None + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> df = openbb.stocks.load("AAPL") + >>> openbb.qa.cdf(data=df, target="Adj Close") """ data = data[target] start = data.index[0] @@ -276,6 +288,12 @@ def display_bw( Flag to indicate yearly accumulation external_axes : Optional[List[plt.Axes]], optional External axes (1 axis is expected in the list), by default None + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> df = openbb.stocks.load("AAPL") + >>> openbb.qa.bw(data=df, target="Adj Close") """ data = data[target] start = data.index[0] @@ -372,6 +390,12 @@ def display_acf( Max number of lags to look at external_axes : Optional[List[plt.Axes]], optional External axes (4 axes are expected in the list), by default None + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> df = openbb.stocks.load("AAPL") + >>> openbb.qa.acf(data=df, target="Adj Close") """ data = data[target] start = data.index[0] @@ -453,6 +477,12 @@ def display_qqplot( Stock ticker external_axes : Optional[List[plt.Axes]], optional External axes (1 axis is expected in the list), by default None + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> df = openbb.stocks.load("AAPL") + >>> openbb.qa.qqplot(data=df, target="Adj Close") """ # Statsmodels has a UserWarning for marker kwarg-- which we don't use warnings.filterwarnings(category=UserWarning, action="ignore") @@ -511,6 +541,12 @@ def display_cusum( Drift parameter external_axes : Optional[List[plt.Axes]], optional External axes (2 axes are expected in the list), by default None + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> df = openbb.stocks.load("AAPL") + >>> openbb.qa.cusum(data=df, target="Adj Close") """ target_series = data[target].values @@ -926,6 +962,12 @@ def display_line( Format to export data external_axes : Optional[List[plt.Axes]], optional External axes (1 axis is expected in the list), by default None + + Examples + -------- + >>> from openbb_terminal.sdk import openbb + >>> df = openbb.stocks.load("AAPL") + >>> openbb.qa.line(data=df["Adj Close"]) """ # This plot has 1 axis if external_axes is None: diff --git a/openbb_terminal/miscellaneous/library/trail_map.csv b/openbb_terminal/miscellaneous/library/trail_map.csv index 010f1ebdf72..f2b207053c2 100644 --- a/openbb_terminal/miscellaneous/library/trail_map.csv +++ b/openbb_terminal/miscellaneous/library/trail_map.csv @@ -46,6 +46,12 @@ qa.sortino,openbb_terminal.common.quantitative_analysis.qa_model.get_sortino,ope qa.summary,openbb_terminal.common.quantitative_analysis.qa_model.get_summary,openbb_terminal.common.quantitative_analysis.qa_view.display_summary qa.unitroot,openbb_terminal.common.quantitative_analysis.qa_model.get_unitroot,openbb_terminal.common.quantitative_analysis.qa_view.display_unitroot qa.var,openbb_terminal.common.quantitative_analysis.qa_model.get_var,openbb_terminal.common.quantitative_analysis.qa_view.display_var +qa.cusum,openbb_terminal.common.quantitative_analysis.qa_view.display_cusum, +qa.acf,openbb_terminal.common.quantitative_analysis.qa_view.display_acf, +qa.qqplot,openbb_terminal.common.quantitative_analysis.qa_view.display_qqplot, +qa.cdf,openbb_terminal.common.quantitative_analysis.qa_view.display_cdf, +qa.hist,openbb_terminal.common.quantitative_analysis.qa_view.display_hist, +qa.line,openbb_terminal.common.quantitative_analysis.qa_view.display_line, qa.kurtosis,openbb_terminal.common.quantitative_analysis.rolling_model.get_kurtosis,openbb_terminal.common.quantitative_analysis.rolling_view.display_kurtosis qa.quantile,openbb_terminal.common.quantitative_analysis.rolling_model.get_quantile,openbb_terminal.common.quantitative_analysis.rolling_view.display_quantile qa.rolling,openbb_terminal.common.quantitative_analysis.rolling_model.get_rolling_avg,openbb_terminal.common.quantitative_analysis.rolling_view.display_mean_std @@ -463,16 +469,17 @@ stocks.options.screen.check_presets,openbb_terminal.stocks.options.screen.syncre stocks.options.grhist,openbb_terminal.stocks.options.screen.syncretism_model.get_historical_greeks,openbb_terminal.stocks.options.screen.syncretism_view.view_historical_greeks stocks.options.screen.screener_output,openbb_terminal.stocks.options.screen.syncretism_model.get_screener_output,openbb_terminal.stocks.options.screen.syncretism_view.view_screener_output stocks.options.hist_tr,openbb_terminal.stocks.options.tradier_model.get_historical_options,openbb_terminal.stocks.options.tradier_view.display_historical -stocks.options.chains,openbb_terminal.stocks.options.options_sdk_helper.get_full_option_chain +stocks.options.chains,openbb_terminal.stocks.options.options_sdk_helper.get_full_option_chain, stocks.options.last_price,openbb_terminal.stocks.options.tradier_model.last_price, -stocks.options.expirations,openbb_terminal.stocks.options.options_sdk_helper.get_option_expirations +stocks.options.expirations,openbb_terminal.stocks.options.options_sdk_helper.get_option_expirations, stocks.options.process_chains,openbb_terminal.stocks.options.tradier_model.process_chains, stocks.options.generate_data,openbb_terminal.stocks.options.yfinance_model.generate_data, stocks.options.dte,openbb_terminal.stocks.options.yfinance_model.get_dte, stocks.options.vsurf,openbb_terminal.stocks.options.yfinance_model.get_iv_surface,openbb_terminal.stocks.options.yfinance_view.display_vol_surface -stocks.qa.capm_information,openbb_terminal.stocks.quantitative_analysis.factors_model.capm_information, +stocks.qa.capm,openbb_terminal.stocks.quantitative_analysis.factors_model.capm_information, stocks.qa.fama_raw,openbb_terminal.stocks.quantitative_analysis.factors_model.get_fama_raw, stocks.qa.historical_5,openbb_terminal.stocks.quantitative_analysis.factors_model.get_historical_5, +stocks.qa.beta,openbb_terminal.stocks.quantitative_analysis.beta_model.beta_model,openbb_terminal.stocks.quantitative_analysis.beta_view.beta_view stocks.screener.screener_data,openbb_terminal.stocks.screener.finviz_model.get_screener_data,openbb_terminal.stocks.screener.finviz_view.screener stocks.screener.historical,openbb_terminal.stocks.screener.yahoofinance_model.historical,openbb_terminal.stocks.screener.yahoofinance_view.historical stocks.sia.filter_stocks,openbb_terminal.stocks.sector_industry_analysis.financedatabase_model.filter_stocks, @@ -547,4 +554,4 @@ keys.shroom,openbb_terminal.keys_model.set_shroom_key, futures.search,openbb_terminal.futures.yfinance_model.get_search_futures, futures.historical,openbb_terminal.futures.yfinance_model.get_historical_futures,openbb_terminal.futures.yfinance_view.display_historical futures.curve,openbb_terminal.futures.yfinance_model.get_curve_futures,openbb_terminal.futures.yfinance_view.display_curve -economy.get_groups,openbb_terminal.economy.finviz_model.get_groups +economy.get_groups,openbb_terminal.economy.finviz_model.get_groups, diff --git a/openbb_terminal/stocks/quantitative_analysis/beta_view.py b/openbb_terminal/stocks/quantitative_analysis/beta_view.py index d2775865b2f..5375609551d 100644 --- a/openbb_terminal/stocks/quantitative_analysis/beta_view.py +++ b/openbb_terminal/stocks/quantitative_analysis/beta_view.py @@ -48,7 +48,7 @@ def beta_view( return raise e - fig, ax = plt.subplots() + _, ax = plt.subplots() ax.scatter(rr, sr) # plot returns ax.plot(ax.get_xlim(), [x * beta + alpha for x in ax.get_xlim()]) # plot lin reg ax.set( @@ -58,7 +58,6 @@ def beta_view( ) beta_text = f"Raw Beta={round(beta, 2)}\nAlpha={round(alpha, 2)}" ax.text(0.9, 0.1, beta_text, horizontalalignment="right", transform=ax.transAxes) - fig.show() console.print() df = pd.DataFrame({"sr": sr, "rr": rr}) diff --git a/tests/openbb_terminal/common/quantitative_analysis/test_qa_view.py b/tests/openbb_terminal/common/quantitative_analysis/test_qa_view.py index 2b320364faf..d420830dce1 100644 --- a/tests/openbb_terminal/common/quantitative_analysis/test_qa_view.py +++ b/tests/openbb_terminal/common/quantitative_analysis/test_qa_view.py @@ -25,12 +25,12 @@ def test_display_summary(): @pytest.mark.parametrize("df_use, external", [(df, None), (df2, None), (df, [1, 2])]) def test_display_hist(df_use, external): - qa_view.display_hist("Data", df_use, "col2", 2, external) + qa_view.display_hist(df_use, "col2", "Data", 2, external) def test_display_hist_fail(): with pytest.raises(Exception): - qa_view.display_hist("Data", df, "col1", 2, [MagicMock()]) + qa_view.display_hist(df, "col1", "Data", 2, [MagicMock()]) @pytest.mark.parametrize("external", [None, [1, 2]])