Iowa Liquor Sales Forecast

+

This repository contains the functions created to generate a sales forecasting +model that predicts sales based on the historical data of liquor purchases from +the state of Iowa.

+

The created model consists of a multivariate ARIMA model that includes +relevant features such as moving averages of key columns from the dataset, +lag columns and weather forecast information.

+

All data used to train the model was obtained from the library +of BigQuery public datasets.

+

All the datasets and models created are stored inside BigQuery. +Therefore, to run this solution and generate the sales forecasts, +you need to register an account in Google Cloud. +Then you have to create a new project, +enable the BigQuery service +to your account and configure your credentials.

+
+
+

Forecast Results

+

A report with the latest forecast results can be found at: +Iowa Liquor Sales Forecast Report

+
+
+

Code Walkthrough

+

You can find a step-by-step walkthrough of the entire solution, including +the data extraction, feature engineering, and transformation, model training +and evaluation, as well as forecasting future sales at: +notebooks/Walkthrough.ipynb

+
+
+

Pipelines

+

The pipelines folder contains scripts that can be used as +entrypoints to perform several tasks related to the solution.

+
+
+

Additional Information

+
+

Docker Container

+

The Dockerfile defines the Docker container configuration to +replicate the environment used to develop and run the forecasting model. +By using this Docker container, you can ensure that the code runs consistently +across different environments.

+

To build and run the Docker container, you can use the following commands:

+
    +
  • Build the Docker image:

    +
    docker build -t iowa-liquor-sales-forecast .
    +
    +
    +
  • +
  • Run the Docker container:

    +
    docker run -it --rm iowa-liquor-sales-forecast
    +
    +
    +
  • +
+
+
+

Environment Variables

+

The solution relies on a few environment variables that need to be set up for proper operation. +These include:

+
    +
  • GOOGLE_APPLICATION_CREDENTIALS: Path to the JSON file that contains your Google Cloud service account credentials.

  • +
  • PROJECT_ID: The ID of your Google Cloud project.

  • +
  • DATASET_ID: The ID of the BigQuery dataset where the data is stored.

  • +
+

You can set these environment variables in your shell or define them in a .env file, +which will be automatically loaded when running the Docker container or scripts.

+
+
+

Testing

+

The repository includes a suite of tests to ensure that the code behaves as expected. +You can run the tests using pytest:

+
# Run tests
+pytest tests/
+
+
+
+
+

Continuous Integration (CI)

+

This repository is set up with a Continuous Integration (CI) pipeline using GitHub Actions. +The CI pipeline is configured to run the tests automatically whenever code is pushed to the +repository or a pull request is created. This helps to ensure that new changes do not break existing +functionality. It also contains a pipeline that recreates the documentation +for the project and generates a new release of the documentation on GitHub +Pages.

+

Here’s the list of currently available pipelines for the project:

+
    +
  • deploy-docs.yml: deploy +documentation to GitHub Pages.

  • +
  • test-code.yml: run the unit-tests +from the tests directory and generate a test coverage report +for the project.

  • +
+
+
+
+

License

+

This project is licensed under the MIT License. See the LICENSE file for more details.

+
+
+

Codebase Static Test Results

+

The iowa_forecast package received the following pylint scores:

+
    +
  • iowa_forecast/__init__.py: 10.0

  • +
  • iowa_forecast/models_configs.py: 10.0

  • +
  • iowa_forecast/ml_train.py: 10.0

  • +
  • iowa_forecast/plots.py: 9.8

  • +
  • iowa_forecast/utils.py: 8.99

  • +
  • iowa_forecast/load_data.py: 9.31

  • +
  • iowa_forecast/ml_eval.py: 8.41

  • +
  • Average Score: 9.50

  • +
+

Modules

diff --git a/objects.inv b/objects.inv index 1b00f98086d7949e8f2fc50f3e05c863967920c5..aea5c7441045b35345792aa7224bcf7fceb18949 100644 GIT binary patch delta 1469 zcmV;u1w#7e3bhQ7ihoUS<2Dez^H&IH4!Z~0-Rq(#kUHLlfuw8L*|vuO1T9fEcPUaK zsU+^N?~v4|za*ztaxpA&-g}(kkQ_=(J`3dd+s~%F)B2>es@6WA*ARFjq-9^!q3cXfYT^O2T@}p;&}|`IfXh&3QQDB zNfFIz;)WI-SkAAZhG!Rzq)&-RiiE9o|1@vGx{|$Ze1E-|-Ca-IgVl>T(Yniv19Io+ zjF#W$^KXm$=?$J=FRt&V_tVAFif2k@RGIBy`gnf(eTn~BOuyo{a(PekeY{_3NW94W zK{UOyU2oz3Va<2(|1JG~7k@J@P5%wUS$FIc-Uei!V362ITQ^X{(sOQx4V_~G{)U8C zTgQJ{Zh!lWH%uF;SOi5O5piWQfRd(X9;_#cbHjN58FkhjGwN-M>SM*$z9?{)Z=5KZ z;tT>r&T*ij+979)PHnH^2^J8lMCKwMN{C{aBv!0&N|_7$)X=yrF^60&-iG*MEh7e2 zhq$bYkSZmd{Y&c?BbOC`kZTG%R=Q$>#u$zPCV$qKmCzYyMW~zun2AKbUV_9ivnav? zO9b(89NNU6Ia$G7HT(n}F@5on+B|HUU)Lrb z0LZb%GCIY1nxz$;F3x>puh8m1z24UJRcXK8393ib<38C}qj~)diU-uEo3qx$3;>QOvRJPnGVH+Uxe zr`af(uQx~6yEP1(h7*hYyKZn)D>&hR0v3G~*xM*9dYyBlPtsaY=s}?cg(YZGGA=#i zy=7eZPLLCZiCpFy_zYbuzX5%S*vAuUC4VMtV8V!jRK+%HvQ1_m5lquhssam!RE2-X z=)GZB8{T;2q--du;MB~s;DgNkR=GD|2nOeF1TA6*3rkeVzVu|@N-`^=#}+rnKB{9K zDV7;MPI4tjKlJE!HktmpoHmoNH^?XBZ$bu!8BTvkR6H>yMM{MUo`_=pOUAJnHGizb z+IrgH_^WJ1RiWCIMWtbtIbTX-nJwj+c*eqMm8M@xJX%vxpA8jJ+3KS+vwzWA$~9E2 z5tn&fOnJvVdqn6Eezt?Jo@C-k+*G5zqp7J3E(EviF_(}S#D=yEg@v&Q8lb`r%;`xg zOhYgY3)9&i8a2n?9?p(m0Ipm1VSgtAa(ziDxudP4u9Z1^3|zPMx^|qt`+*7EeF02 z9sc4}mJ(K@t{3`>?7zW2@>aa6C;X}R&?*{UeOw;aY*!^ar3E}5*d?-USbui-g>mOE zwtm0xGWtYTcyo<1mQfA|$|>71V4b%d&3s!-GYZcl zV*8HlZUi0@wjc%dO`{Dd`j|6C?LnfuHY}z6)&9Gh{T%xb%nJk4WoyHC delta 1259 zcmVFKn@lvBQ) z@QhfRXY-+UL{53+EzO=_IUQHV5cz>waH=Tf2NFdkRi5mzyY7%2N4I|pi*NQpn3|9v zmn5MMcnX%6oPU`E>#aCHygfrW)&*u`<6#8BbjXvszRngC8IToBQ#AQ8awd!kVW%)0 z!(OZmVs|{>63Q*IKo(`!U4c?lP>~lB7gbt9&s6UWrk0dU!bW+_ip11&V)`V(5tcN= zr8nyjH#Ohf-JzgVp;c`ijxq~1@)kCwL&YxK`*@fE$7$vw)Cv3{e>!He}@ zSdlxs^d9CP=KK)*-_!07u{UQzhbIgtJ&-57jG_HuHi@*beFM=n8*?*k@f;)YHzc&# zJN)xv+kd}kN0kclA+bPA#gm;I#)^ zd$4a6m?cqjt2Z~f%Amw^6-%0HHBSpEX5ZE9_U3Bw_j=LxO0bgm&L3PrO*JEbf+|Ig za8jpJ_)_VEE#XZbsDY|kPkdv4f~^o+(|<(7OcY7!%>fsBjmT+uN5Zcj1l)Z{=3_GWtUNI zX8LL;9CGnW)mq2Ab;?;+x0XjuF)EQ)iJVGQtDN$cS$af=!NZciC$15?CBUZX$A2cz z2SFeHFWQl({Z=8!*khCJ!?MGHNBG0f`c*No98Ja#CFwsC9(j7KD}v8kkDavt=7e{c zvs+hQ6$djs5c~N)suuilzw@^Tp9MV4@mRYk#T97E%h>#M&=lKawYD~}=jC4SOgwhB zp8L6ktxm(kmRYLl4OKyHJk)iEomSNZvXuT_0F`=QhX<| z9zrNpBBK&jDytUE($4`!u#9(IG(YE^wD#*uyd^+OQP?!N6GB^@K_l+F3ZPI1=4Wg6 Vg9QOi`w#@xzqs~K&i@#6?&_{$Y~=s| diff --git a/searchindex.js b/searchindex.js index 232b19b..1003d0d 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["api_reference/index", "api_reference/iowa_forecast/index", "api_reference/iowa_forecast/load_data", "api_reference/iowa_forecast/ml_eval", "api_reference/iowa_forecast/ml_train", "api_reference/iowa_forecast/models_configs", "api_reference/iowa_forecast/plots", "api_reference/iowa_forecast/utils", "docs/html/_static/scripts/furo.js.LICENSE", "index", "installation"], "filenames": ["api_reference/index.rst", "api_reference/iowa_forecast/index.rst", "api_reference/iowa_forecast/load_data.rst", "api_reference/iowa_forecast/ml_eval.rst", "api_reference/iowa_forecast/ml_train.rst", "api_reference/iowa_forecast/models_configs.rst", "api_reference/iowa_forecast/plots.rst", "api_reference/iowa_forecast/utils.rst", "docs/html/_static/scripts/furo.js.LICENSE.txt", "index.rst", "installation.rst"], "titles": ["API Reference", "iowa_forecast", "load_data", "ml_eval", "ml_train", "models_configs", "plots", "utils", "<no title>", "Iowa Liquor Sales Forecast", "Installation"], "terms": {"thi": [0, 2, 3, 4, 5, 6, 7, 10], "page": [0, 9, 10], "give": 0, "an": [0, 2, 3, 4, 5, 10], "overview": 0, "all": [0, 4, 5, 6, 7, 10], "public": [0, 2], "panda": [0, 2, 3, 6, 7], "object": [0, 2, 7], "function": [0, 5, 7], "method": 0, "expos": 0, "namespac": 0, "ar": [0, 2, 3, 4, 5, 7, 10], "The": [0, 2, 3, 4, 5, 6, 7, 10], "packag": [0, 10], "contain": [0, 2, 3, 4, 5, 6, 7, 10], "follow": [0, 2, 3, 5, 10], "modul": [0, 2, 3, 4, 5, 6, 7], "load_data": [0, 1], "bigqueri": [0, 2, 3, 4, 7, 10], "data": [0, 2, 3, 4, 6, 10], "load": [0, 2, 7], "featur": [0, 2, 4], "engin": [0, 2, 6], "ml_eval": [0, 1], "model": [0, 2, 3, 4, 5, 7, 10], "evalu": [0, 3, 4], "forecast": [0, 2, 3, 4, 6, 10], "ml_train": [0, 1], "train": [0, 2, 3, 4, 5, 10], "execut": [0, 3, 4, 10], "plot": [0, 1], "time": [0, 2, 3, 4, 6, 7], "seri": [0, 2, 3, 4, 6], "date": [0, 2, 3, 4, 6], "handl": [0, 2, 4, 5, 6], "util": [0, 1, 2, 3, 10], "gener": [0, 2, 3, 4, 6, 7, 10], "provid": [2, 3, 4, 5, 6, 7, 10], "process": [2, 4, 5], "prepar": [2, 6], "us": [2, 3, 4, 5, 6, 7, 10], "googl": [2, 3, 4], "includ": [2, 3, 4, 5, 6], "creat": [2, 3, 4, 7, 10], "dataset": [2, 4, 7, 10], "offset": [2, 7], "item": [2, 3, 4, 7], "filter": [2, 3, 6, 7], "date_offset": [2, 7], "dateoffset": [2, 7], "base": [2, 3, 4, 5, 7], "given": [2, 4, 7], "frequenc": [2, 7], "valu": [2, 3, 4, 5, 6, 7], "get_item_names_filt": 2, "where": [2, 3, 4, 5, 7, 10], "claus": 2, "compon": [2, 3, 4, 7], "from": [2, 3, 4, 5, 7], "column": [2, 3, 4, 6], "item_nam": [2, 3, 4, 7], "get_min_datapoints_filt": 2, "have": [2, 6, 10], "least": 2, "min_siz": 2, "observ": 2, "get_training_data": 2, "retriev": [2, 3, 7, 10], "view": 2, "get_year_weather_queri": 2, "sql": [2, 3, 4], "queri": [2, 3, 4], "weather": 2, "specif": [2, 5, 7], "year": [2, 7], "state": 2, "get_weather_queri": 2, "rang": [2, 3, 5], "create_forecast_features_queri": 2, "join": 2, "tabl": [2, 3, 4, 7], "create_future_data": 2, "futur": [2, 4], "test": [2, 3, 4], "create_future_feature_t": 2, "save": 2, "result": [2, 3], "multipl": [2, 3], "i": [2, 3, 4, 6, 7, 10], "design": [2, 3, 4, 6], "work": [2, 3, 4], "requir": [2, 3, 4, 5, 6], "valid": [0, 2, 3, 4, 5, 7, 10], "client": [2, 3, 4, 7], "instanc": [2, 3, 4], "focu": 2, "variou": [2, 3, 5], "busi": [2, 3], "context": [2, 3], "iowa_forecast": [2, 3, 4, 5, 6, 7, 9], "n": [6, 7], "int": [2, 3, 4, 7], "freq": [2, 7], "str": [2, 3, 4, 5, 6, 7], "sourc": [2, 3, 4, 5, 6, 7], "paramet": [0, 2, 3, 4, 5, 6, 7], "number": [2, 3, 4, 7], "unit": [], "dai": [2, 3, 4, 7], "week": 7, "month": 7, "type": [2, 3, 4, 5, 6, 7, 10], "option": [2, 3, 4, 6, 7], "return": [2, 3, 4, 5, 6, 7], "pd": [2, 3, 6, 7], "A": [2, 3, 4, 5, 7, 8], "specifi": [2, 3, 4, 5, 6, 7], "rais": [2, 4, 6, 7], "valueerror": [2, 6, 7], "If": [2, 3, 4, 6, 7, 10], "one": [2, 3, 7, 10], "items_list": [2, 3, 4], "list": [2, 3, 4, 5, 7, 10], "name": [2, 3, 4, 5, 6, 7], "add": [2, 6, 10], "can": [2, 3, 5, 6, 10], "print": [2, 5, 7], "five": 2, "o": [2, 6], "clock": 2, "vodka": [2, 7], "firebal": 2, "cinnamon": 2, "whiskei": 2, "black": 2, "velvet": 2, "OR": 2, "minimum": 2, "table_nam": [2, 3, 7], "bqmlforecast": [2, 3, 4, 7], "training_data": [2, 3, 4], "start_dat": [2, 6], "none": [2, 3, 4, 6, 7], "end_dat": [2, 3], "min_datapoints_r": 2, "float": [2, 3, 4], "0": [2, 3, 4, 7], "75": 2, "base_t": 2, "iowa_liquor_sal": 2, "sale": [2, 4, 10], "datafram": [2, 3, 6, 7], "construct": [2, 4, 7], "condit": 2, "default": [2, 3, 4, 5, 6, 7], "store": [2, 4, 10], "start": [2, 6, 10], "yyyi": 2, "mm": 2, "dd": 2, "format": [2, 6], "determin": 2, "wai": 2, "end": [2, 3], "equal": [2, 4], "todai": 2, "": [2, 3, 7, 10], "calcul": 2, "fraction": 2, "between": [2, 4], "each": [2, 3, 4, 7], "should": [2, 3, 4, 5, 7], "point": [2, 6, 10], "consid": [2, 4], "singl": 2, "extract": [2, 7], "ia": 2, "which": [2, 3, 4, 5, 6], "code": [2, 4], "string": [2, 3, 4, 7], "dataset_id": [2, 7], "forecast_tables_pattern": 2, "forecast_": 2, "connect": [2, 7], "servic": [2, 7, 10], "id": [2, 7], "locat": [2, 7], "pattern": [2, 5, 7], "match": [2, 7], "select": [2, 3, 4, 10], "cast": 2, "t1": 2, "forecast_timestamp": 2, "AS": 2, "total_amount_sold": [2, 4], "t2": 2, "forecast_valu": 2, "temp": 2, "t3": 2, "rainfal": 2, "t4": 2, "snowfal": 2, "fw": 2, "temperatur": 2, "forecast_temp": 2, "inner": 2, "forecast_rainfal": 2, "ON": 2, "AND": 2, "forecast_snowfal": 2, "left": 2, "future_weather_data": 2, "comprehens": 2, "train_table_nam": [2, 3, 4], "test_table_nam": [2, 4], "test_data": [2, 3, 4], "forecast_table_nam": [2, 3], "forecast_data": [2, 3], "horizon": [2, 3, 4], "7": [2, 3, 4], "It": [2, 3, 5, 6], "inform": [2, 4, 7], "lag": 2, "model_nam": [2, 4], "confidence_level": [2, 3, 4, 6], "9": [2, 4, 10], "confid": [2, 3, 4], "level": [2, 3, 4], "arima_model": [2, 4], "table_base_nam": 2, "set": [3, 4, 5, 6, 10], "explain": 3, "well": 3, "aggreg": 3, "across": 3, "evaluate_model": 3, "arima_plus_xreg": [3, 4, 5], "perform": [3, 4], "metric": [3, 4], "get_data": 3, "create_queri": 3, "get_train_data": 3, "get_actual_data": 3, "actual": [3, 6, 10], "get_predict": 3, "predict": 3, "evaluate_predict": 3, "against": [3, 7], "comparison": 3, "multi_evaluate_predict": 3, "dictionari": [3, 5, 6, 7], "explain_model": 3, "explan": 3, "primarili": 3, "intend": [3, 4, 5], "perform_aggreg": 3, "bool": [3, 4, 6], "true": [3, 4, 5, 6], "arima_plus_xreg_model": [3, 4], "actual_table_nam": 3, "period": 3, "maximum": [3, 4], "step": [3, 4, 10], "ahead": 3, "whether": [3, 4, 6], "date_filt": 3, "order_bi": 3, "databas": 3, "order": 3, "For": [3, 10], "exampl": 3, "you": [3, 4, 6, 10], "want": [3, 6], "sort": 3, "8": 3, "tupl": [3, 5, 7], "compar": [3, 6], "two": [3, 7], "dict": [3, 5, 6, 7], "kei": [3, 5, 6, 7, 10], "sub": 3, "train_df": 3, "eval_df": 3, "ml": 3, "explain_forecast": 3, "http": [3, 8, 10], "cloud": [3, 4], "com": [3, 8, 10], "doc": 3, "refer": [3, 9, 10], "standard": [3, 5], "bigqueryml": 3, "syntax": 3, "manag": [0, 4, 5], "retri": 4, "create_model_queri": 4, "its": [4, 7], "associ": 4, "execute_query_with_retri": 4, "logic": 4, "case": [4, 7], "failur": 4, "create_models_for_item": 4, "train_arima_model": 4, "arima": [4, 5, 7], "correspond": [4, 7], "holidai": 4, "effect": 4, "chang": [4, 6], "clean": 4, "timestamp_col": 4, "time_series_data_col": 4, "holiday_region": 4, "u": [4, 7], "auto_arima": 4, "adjust_step_chang": 4, "clean_spikes_and_dip": 4, "tailor": 4, "repres": 4, "timestamp": [4, 6], "region": 4, "enabl": [4, 6, 10], "adjust": 4, "spike": 4, "dip": 4, "max_retri": 4, "3": [4, 6, 10], "fail": [4, 7], "automat": 4, "up": [4, 10], "increas": 4, "delai": 4, "attempt": 4, "except": [4, 7], "linearli": 4, "120": 4, "second": 4, "multipli": 4, "current": [4, 10], "my_dataset": [4, 7], "my_tabl": [4, 7], "max_item": 4, "see": [4, 6], "section": [4, 6], "more": 4, "Not": 4, "account": [4, 10], "bill": 4, "re": 4, "limit": 4, "smaller": 4, "than": [4, 7], "4": [4, 6], "run": 4, "might": 4, "incur": 4, "charg": 4, "model_metrics_table_nam": 4, "arima_model_metr": 4, "time_series_timestamp_col": 4, "time_series_id_col": 4, "These": [4, 5, 10], "liquor": [4, 10], "identifi": 4, "convert_to_datetim": 6, "df": 6, "col": 6, "filter_by_d": 6, "datetim": 6, "done": 6, "origin": 6, "appli": 6, "plot_historical_and_forecast": 6, "input_timeseri": 6, "timestamp_col_nam": 6, "data_col_nam": 6, "forecast_output": 6, "forecast_col_nam": 6, "actual_col_nam": 6, "titl": 6, "plot_start_d": 6, "show_peak": 6, "matplotlib": 6, "plot_kwarg": 6, "histor": 6, "visual": 6, "peak": 6, "highlight": 6, "support": 6, "both": 6, "plotli": 6, "line": 6, "differ": [6, 7], "color": 6, "map": 6, "lower_bound": 6, "upper_bound": 6, "ad": 6, "avail": [4, 6], "either": 6, "addit": [4, 5, 6], "detail": 6, "keyword": [4, 6], "argument": [4, 6, 7], "custom": 6, "neither": 6, "nor": 6, "allow": [4, 6], "librari": 6, "get": [6, 7], "prettier": 6, "howev": 6, "instal": [6, 9], "By": [5, 6], "also": 6, "project": [6, 7], "txt": [6, 10], "file": [6, 10], "2023": 6, "01": 6, "02": 6, "10": 6, "15": 6, "sampl": 6, "normalize_item_nam": 7, "convert": [6, 7], "lower": 7, "replac": [7, 10], "space": 7, "underscor": 7, "normal": 7, "tito": 7, "handmad": 7, "titos_handmade_vodka": 7, "uniqu": 7, "split_table_name_info": 7, "ani": [4, 5, 7, 10], "insid": [7, 10], "thei": [5, 7], "my_project": 7, "create_bigquery_table_from_panda": 7, "table_id": 7, "if_exist": 7, "append": 7, "behavior": 7, "when": 7, "alreadi": [7, 10], "exist": [7, 10], "column1": 7, "1": [6, 7, 8], "2": [6, 7, 8], "column2": 7, "b": 7, "create_dataset_if_not_found": 7, "project_id": 7, "dataset_nam": 7, "doe": 7, "infer": 7, "attibut": 7, "other": [5, 7], "error": [5, 7, 10], "new_dataset": 7, "check": [5, 7], "list_tables_with_pattern": 7, "table_pattern": 7, "fulli": 7, "qualifi": 7, "them": 7, "interact": 7, "fnmatch": 7, "ensur": [5, 7, 10], "compat": 7, "sales_": 7, "sales_2021": 7, "sales_2022": 7, "gumshoej": 8, "v5": 8, "patch": 8, "pradyunsg": 8, "simpl": 8, "framework": 8, "agnost": 8, "scrollspi": 8, "script": [8, 10], "2019": 8, "chri": 8, "ferdinandi": 8, "mit": 8, "licens": 8, "github": [8, 10], "cferdinandi": 8, "gumsho": 8, "api": [9, 10], "index": 9, "search": 9, "here": 10, "rst": [], "your": 10, "iowa": 10, "guid": 10, "instruct": 10, "how": 10, "befor": [5, 10], "begin": 10, "www": [], "org": [], "download": 10, "releas": [], "390": [], "higher": 10, "sdk": 10, "gcloud": 10, "configur": [0, 5, 10], "container": 10, "environ": 10, "git": 10, "scm": [], "clone": 10, "repositori": 10, "sever": 10, "To": 10, "pip": 10, "bash": 10, "r": 10, "storag": 10, "go": 10, "consol": 10, "new": 10, "navig": 10, "authent": 10, "iam": 10, "admin": [], "serviceaccount": [], "In": 10, "click": 10, "ve": 10, "tab": 10, "choos": 10, "json": 10, "button": 10, "google_application_credenti": 10, "variabl": [5, 10], "path": 10, "export": 10, "prefer": 10, "consist": [5, 10], "build": 10, "imag": 10, "root": 10, "directori": 10, "t": [4, 10], "rm": 10, "e": [6, 7, 10], "v": 10, "pwd": 10, "app": 10, "credenti": 10, "mount": 10, "onc": 10, "haven": 10, "yourusernam": [], "cd": 10, "pipelin": 10, "train_model_and_forecast_sal": 10, "py": 10, "make": 10, "sure": 10, "correctli": [5, 10], "encount": 10, "issu": 10, "dure": [4, 10], "some": [5, 10], "common": [5, 10], "solut": 10, "miss": 10, "via": [5, 10], "verifi": 10, "system": 10, "ha": 10, "enough": 10, "resourc": 10, "alloc": 10, "further": 10, "assist": [6, 10], "document": 10, "html": [], "content": [], "models_config": [0, 1], "class": 0, "machin": 5, "learn": 5, "focus": 5, "deriv": 5, "abstractbasemodelconfig": 5, "abc": 5, "abstract": 5, "basemodelconfig": 5, "subclass": 5, "defin": 5, "supported_paramet": 5, "expect": 5, "choic": 5, "arimaconfig": 5, "inherit": 5, "arima_plu": 5, "adher": 5, "arima_plus_xreg_config": 5, "extend": 5, "exogen": 5, "xreg_featur": 5, "setup": 5, "pass": 5, "leverag": 5, "develop": 5, "fall": 5, "within": 5, "reduc": 5, "likelihood": 5, "runtim": 5, "config": 5, "model_typ": 5, "xreg_config": 5, "feature1": 5, "feature2": 5, "non_negative_forecast": 5, "attribut": 5, "properti": 5, "must": 5, "implement": 5, "kwarg": [4, 5, 6], "unpack": 5, "restrict": 5, "erik": 10, "ingwersen": 10, "ei": 10, "include_test_on_model_train": 4, "union": 4, "being": 4, "include_test_on_arima_model_train": 4, "uni": 4, "variat": 4, "onli": 4, "shouldn": 4, "therefor": 4, "do": 4, "so": 4, "caus": 4, "turn": 4, "use_test_data_on_train": 4, "relat": 6, "oper": 6, "offer": 6, "flexibl": 6, "particularli": 6, "element": 6, "take": 6, "chain": 6, "pipe": 6, "dtype": 6, "m8": 6, "plot_seri": 6, "x_data": 6, "y_data": 6, "label": 6, "linestyl": 6, "marker": 6, "style": 6, "arrai": 6, "like": 6, "x": 6, "axi": 6, "y": 6, "legend": 6, "g": [6, 7], "solid": 6, "dash": 6, "scatter": 6, "20": 6, "red": 6, "parse_combined_str": 7, "combin": 7, "pars": 7, "2y3m2w1d": 7, "invalid": 7, "create_date_offset_from_part": 7, "individu": 7, "arg": 7, "ignor": 7}, "objects": {"iowa_forecast": [[2, 0, 0, "-", "load_data"], [3, 0, 0, "-", "ml_eval"], [4, 0, 0, "-", "ml_train"], [5, 0, 0, "-", "models_configs"], [6, 0, 0, "-", "plots"], [7, 0, 0, "-", "utils"]], "iowa_forecast.load_data": [[2, 1, 1, "", "create_forecast_features_query"], [2, 1, 1, "", "create_future_data"], [2, 1, 1, "", "create_future_feature_table"], [2, 1, 1, "", "create_future_feature_tables"], [2, 1, 1, "", "get_item_names_filter"], [2, 1, 1, "", "get_min_datapoints_filter"], [2, 1, 1, "", "get_training_data"], [2, 1, 1, "", "get_weather_query"], [2, 1, 1, "", "get_year_weather_query"]], "iowa_forecast.ml_eval": [[3, 1, 1, "", "create_query"], [3, 1, 1, "", "evaluate_models"], [3, 1, 1, "", "evaluate_predictions"], [3, 1, 1, "", "explain_model"], [3, 1, 1, "", "get_actual_data"], [3, 1, 1, "", "get_data"], [3, 1, 1, "", "get_predictions"], [3, 1, 1, "", "get_train_data"], [3, 1, 1, "", "multi_evaluate_predictions"]], "iowa_forecast.ml_train": [[4, 1, 1, "", "create_model_query"], [4, 1, 1, "", "create_models_for_items"], [4, 1, 1, "", "execute_query_with_retries"], [4, 1, 1, "", "include_test_on_arima_model_train"], [4, 1, 1, "", "include_test_on_model_train"], [4, 1, 1, "", "train_arima_models"]], "iowa_forecast.models_configs": [[5, 2, 1, "", "ARIMAConfig"], [5, 2, 1, "", "ARIMA_PLUS_XREG_Config"], [5, 2, 1, "", "AbstractBaseModelConfig"], [5, 2, 1, "", "BaseModelConfig"]], "iowa_forecast.models_configs.ARIMAConfig": [[5, 3, 1, "", "SUPPORTED_PARAMETERS"]], "iowa_forecast.models_configs.ARIMA_PLUS_XREG_Config": [[5, 3, 1, "", "SUPPORTED_PARAMETERS"]], "iowa_forecast.models_configs.AbstractBaseModelConfig": [[5, 3, 1, "", "SUPPORTED_PARAMETERS"]], "iowa_forecast.models_configs.BaseModelConfig": [[5, 3, 1, "", "SUPPORTED_PARAMETERS"]], "iowa_forecast.plots": [[6, 1, 1, "", "convert_to_datetime"], [6, 1, 1, "", "filter_by_date"], [6, 1, 1, "", "plot_historical_and_forecast"], [6, 1, 1, "", "plot_series"]], "iowa_forecast.utils": [[7, 1, 1, "", "create_bigquery_table_from_pandas"], [7, 1, 1, "", "create_dataset_if_not_found"], [7, 1, 1, "", "create_date_offset_from_parts"], [7, 1, 1, "", "date_offset"], [7, 1, 1, "", "list_tables_with_pattern"], [7, 1, 1, "", "normalize_item_name"], [7, 1, 1, "", "parse_combined_string"], [7, 1, 1, "", "split_table_name_info"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:property"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "property", "Python property"]}, "titleterms": {"api": 0, "refer": 0, "iowa_forecast": [0, 1], "load_data": 2, "function": [2, 3, 4, 6], "note": [2, 3, 4, 6, 7], "exampl": [2, 4, 5, 6, 7], "ml_eval": 3, "ml_train": 4, "plot": 6, "util": 7, "iowa": 9, "liquor": 9, "sale": 9, "forecast": 9, "modul": 9, "content": 9, "indic": 9, "tabl": 9, "instal": 10, "requir": 10, "python": 10, "depend": 10, "googl": 10, "cloud": 10, "setup": 10, "docker": 10, "option": 10, "run": 10, "project": 10, "troubleshoot": 10, "models_config": 5, "class": 5, "usag": 5}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 58}, "alltitles": {"API Reference": [[0, "api-reference"]], "iowa_forecast": [[0, "iowa-forecast"], [1, "iowa-forecast"]], "load_data": [[2, "module-iowa_forecast.load_data"]], "Functions": [[2, "functions"], [3, "functions"], [4, "functions"], [6, "functions"]], "Notes": [[2, null], [2, null], [3, null], [4, null], [4, null], [4, null], [6, null], [6, null], [6, null], [7, null], [7, null], [7, null]], "Examples": [[2, null], [2, null], [4, null], [6, null], [6, null], [6, null], [7, null], [7, null], [7, null], [7, null], [7, null]], "ml_eval": [[3, "module-iowa_forecast.ml_eval"]], "ml_train": [[4, "module-iowa_forecast.ml_train"]], "models_configs": [[5, "module-iowa_forecast.models_configs"]], "Classes": [[5, "classes"]], "Usage": [[5, "usage"]], "Example": [[5, null]], "plots": [[6, "module-iowa_forecast.plots"]], "utils": [[7, "module-iowa_forecast.utils"]], "Iowa Liquor Sales Forecast": [[9, "iowa-liquor-sales-forecast"]], "Modules": [[9, "modules"]], "Contents:": [[9, null]], "Indices and tables": [[9, "indices-and-tables"]], "Installation": [[10, "installation"]], "Requirements": [[10, "requirements"]], "Python Dependencies": [[10, "python-dependencies"]], "Google Cloud Setup": [[10, "google-cloud-setup"]], "Docker Setup (Optional)": [[10, "docker-setup-optional"]], "Running the Project": [[10, "running-the-project"]], "Troubleshooting": [[10, "troubleshooting"]]}, "indexentries": {"create_forecast_features_query() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.create_forecast_features_query"]], "create_future_data() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.create_future_data"]], "create_future_feature_table() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.create_future_feature_table"]], "create_future_feature_tables() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.create_future_feature_tables"]], "get_item_names_filter() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_item_names_filter"]], "get_min_datapoints_filter() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_min_datapoints_filter"]], "get_training_data() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_training_data"]], "get_weather_query() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_weather_query"]], "get_year_weather_query() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_year_weather_query"]], "iowa_forecast.load_data": [[2, "module-iowa_forecast.load_data"]], "module": [[2, "module-iowa_forecast.load_data"], [3, "module-iowa_forecast.ml_eval"], [4, "module-iowa_forecast.ml_train"], [5, "module-iowa_forecast.models_configs"], [6, "module-iowa_forecast.plots"], [7, "module-iowa_forecast.utils"]], "create_query() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.create_query"]], "evaluate_models() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.evaluate_models"]], "evaluate_predictions() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.evaluate_predictions"]], "explain_model() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.explain_model"]], "get_actual_data() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.get_actual_data"]], "get_data() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.get_data"]], "get_predictions() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.get_predictions"]], "get_train_data() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.get_train_data"]], "iowa_forecast.ml_eval": [[3, "module-iowa_forecast.ml_eval"]], "multi_evaluate_predictions() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.multi_evaluate_predictions"]], "create_model_query() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.create_model_query"]], "create_models_for_items() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.create_models_for_items"]], "execute_query_with_retries() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.execute_query_with_retries"]], "include_test_on_arima_model_train() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.include_test_on_arima_model_train"]], "include_test_on_model_train() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.include_test_on_model_train"]], "iowa_forecast.ml_train": [[4, "module-iowa_forecast.ml_train"]], "train_arima_models() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.train_arima_models"]], "arimaconfig (class in iowa_forecast.models_configs)": [[5, "iowa_forecast.models_configs.ARIMAConfig"]], "arima_plus_xreg_config (class in iowa_forecast.models_configs)": [[5, "iowa_forecast.models_configs.ARIMA_PLUS_XREG_Config"]], "abstractbasemodelconfig (class in iowa_forecast.models_configs)": [[5, "iowa_forecast.models_configs.AbstractBaseModelConfig"]], "basemodelconfig (class in iowa_forecast.models_configs)": [[5, "iowa_forecast.models_configs.BaseModelConfig"]], "supported_parameters (iowa_forecast.models_configs.arimaconfig property)": [[5, "iowa_forecast.models_configs.ARIMAConfig.SUPPORTED_PARAMETERS"]], "supported_parameters (iowa_forecast.models_configs.arima_plus_xreg_config property)": [[5, "iowa_forecast.models_configs.ARIMA_PLUS_XREG_Config.SUPPORTED_PARAMETERS"]], "supported_parameters (iowa_forecast.models_configs.abstractbasemodelconfig property)": [[5, "iowa_forecast.models_configs.AbstractBaseModelConfig.SUPPORTED_PARAMETERS"]], "supported_parameters (iowa_forecast.models_configs.basemodelconfig property)": [[5, "iowa_forecast.models_configs.BaseModelConfig.SUPPORTED_PARAMETERS"]], "iowa_forecast.models_configs": [[5, "module-iowa_forecast.models_configs"]], "convert_to_datetime() (in module iowa_forecast.plots)": [[6, "iowa_forecast.plots.convert_to_datetime"]], "filter_by_date() (in module iowa_forecast.plots)": [[6, "iowa_forecast.plots.filter_by_date"]], "iowa_forecast.plots": [[6, "module-iowa_forecast.plots"]], "plot_historical_and_forecast() (in module iowa_forecast.plots)": [[6, "iowa_forecast.plots.plot_historical_and_forecast"]], "plot_series() (in module iowa_forecast.plots)": [[6, "iowa_forecast.plots.plot_series"]], "create_bigquery_table_from_pandas() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.create_bigquery_table_from_pandas"]], "create_dataset_if_not_found() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.create_dataset_if_not_found"]], "create_date_offset_from_parts() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.create_date_offset_from_parts"]], "date_offset() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.date_offset"]], "iowa_forecast.utils": [[7, "module-iowa_forecast.utils"]], "list_tables_with_pattern() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.list_tables_with_pattern"]], "normalize_item_name() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.normalize_item_name"]], "parse_combined_string() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.parse_combined_string"]], "split_table_name_info() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.split_table_name_info"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["api_reference/index", "api_reference/iowa_forecast/index", "api_reference/iowa_forecast/load_data", "api_reference/iowa_forecast/ml_eval", "api_reference/iowa_forecast/ml_train", "api_reference/iowa_forecast/models_configs", "api_reference/iowa_forecast/plots", "api_reference/iowa_forecast/utils", "docs/html/_static/scripts/furo.js.LICENSE", "index", "installation"], "filenames": ["api_reference/index.rst", "api_reference/iowa_forecast/index.rst", "api_reference/iowa_forecast/load_data.rst", "api_reference/iowa_forecast/ml_eval.rst", "api_reference/iowa_forecast/ml_train.rst", "api_reference/iowa_forecast/models_configs.rst", "api_reference/iowa_forecast/plots.rst", "api_reference/iowa_forecast/utils.rst", "docs/html/_static/scripts/furo.js.LICENSE.txt", "index.rst", "installation.rst"], "titles": ["API Reference", "iowa_forecast", "load_data", "ml_eval", "ml_train", "models_configs", "plots", "utils", "<no title>", "Iowa Liquor Sales Forecast", "Installation"], "terms": {"thi": [0, 2, 3, 4, 5, 6, 7, 9, 10], "page": [0, 9, 10], "give": 0, "an": [0, 2, 3, 4, 5, 9, 10], "overview": 0, "all": [0, 4, 5, 6, 7, 9, 10], "public": [0, 2, 9], "panda": [0, 2, 3, 6, 7], "object": [0, 2, 7], "function": [0, 5, 7, 9], "method": 0, "expos": 0, "namespac": 0, "ar": [0, 2, 3, 4, 5, 7, 9, 10], "The": [0, 2, 3, 4, 5, 6, 7, 9, 10], "packag": [0, 9, 10], "contain": [0, 2, 3, 4, 5, 6, 7, 10], "follow": [0, 2, 3, 5, 9, 10], "modul": [0, 2, 3, 4, 5, 6, 7], "load_data": [0, 1, 9], "bigqueri": [0, 2, 3, 4, 7, 9, 10], "data": [0, 2, 3, 4, 6, 9, 10], "load": [0, 2, 7, 9], "featur": [0, 2, 4, 9], "engin": [0, 2, 6, 9], "ml_eval": [0, 1, 9], "model": [0, 2, 3, 4, 5, 7, 9, 10], "evalu": [0, 3, 4, 9], "forecast": [0, 2, 3, 4, 6, 10], "ml_train": [0, 1, 9], "train": [0, 2, 3, 4, 5, 9, 10], "execut": [0, 3, 4, 10], "plot": [0, 1, 9], "time": [0, 2, 3, 4, 6, 7], "seri": [0, 2, 3, 4, 6], "date": [0, 2, 3, 4, 6], "handl": [0, 2, 4, 5, 6], "util": [0, 1, 2, 3, 9, 10], "gener": [0, 2, 3, 4, 6, 7, 9, 10], "provid": [2, 3, 4, 5, 6, 7, 10], "process": [2, 4, 5], "prepar": [2, 6], "us": [2, 3, 4, 5, 6, 7, 9, 10], "googl": [2, 3, 4, 9], "includ": [2, 3, 4, 5, 6, 9], "creat": [2, 3, 4, 7, 9, 10], "dataset": [2, 4, 7, 9, 10], "offset": [2, 7], "item": [2, 3, 4, 7], "filter": [2, 3, 6, 7], "date_offset": [2, 7], "dateoffset": [2, 7], "base": [2, 3, 4, 5, 7, 9], "given": [2, 4, 7], "frequenc": [2, 7], "valu": [2, 3, 4, 5, 6, 7], "get_item_names_filt": 2, "where": [2, 3, 4, 5, 7, 9, 10], "claus": 2, "compon": [2, 3, 4, 7], "from": [2, 3, 4, 5, 7, 9], "column": [2, 3, 4, 6, 9], "item_nam": [2, 3, 4, 7], "get_min_datapoints_filt": 2, "have": [2, 6, 9, 10], "least": 2, "min_siz": 2, "observ": 2, "get_training_data": 2, "retriev": [2, 3, 7, 10], "view": 2, "get_year_weather_queri": 2, "sql": [2, 3, 4], "queri": [2, 3, 4], "weather": [2, 9], "specif": [2, 5, 7], "year": [2, 7], "state": [2, 9], "get_weather_queri": 2, "rang": [2, 3, 5], "create_forecast_features_queri": 2, "join": 2, "tabl": [2, 3, 4, 7], "create_future_data": 2, "futur": [2, 4, 9], "test": [2, 3, 4], "create_future_feature_t": 2, "save": 2, "result": [2, 3], "multipl": [2, 3], "i": [2, 3, 4, 6, 7, 9, 10], "design": [2, 3, 4, 6], "work": [2, 3, 4], "requir": [2, 3, 4, 5, 6], "valid": [0, 2, 3, 4, 5, 7, 10], "client": [2, 3, 4, 7], "instanc": [2, 3, 4], "focu": 2, "variou": [2, 3, 5], "busi": [2, 3], "context": [2, 3], "iowa_forecast": [2, 3, 4, 5, 6, 7, 9], "n": [6, 7], "int": [2, 3, 4, 7], "freq": [2, 7], "str": [2, 3, 4, 5, 6, 7], "sourc": [2, 3, 4, 5, 6, 7], "paramet": [0, 2, 3, 4, 5, 6, 7], "number": [2, 3, 4, 7], "unit": 9, "dai": [2, 3, 4, 7], "week": 7, "month": 7, "type": [2, 3, 4, 5, 6, 7, 10], "option": [2, 3, 4, 6, 7], "return": [2, 3, 4, 5, 6, 7], "pd": [2, 3, 6, 7], "A": [2, 3, 4, 5, 7, 8, 9], "specifi": [2, 3, 4, 5, 6, 7], "rais": [2, 4, 6, 7], "valueerror": [2, 6, 7], "If": [2, 3, 4, 6, 7, 10], "one": [2, 3, 7, 10], "items_list": [2, 3, 4], "list": [2, 3, 4, 5, 7, 9, 10], "name": [2, 3, 4, 5, 6, 7], "add": [2, 6, 10], "can": [2, 3, 5, 6, 9, 10], "print": [2, 5, 7], "five": 2, "o": [2, 6], "clock": 2, "vodka": [2, 7], "firebal": 2, "cinnamon": 2, "whiskei": 2, "black": 2, "velvet": 2, "OR": 2, "minimum": 2, "table_nam": [2, 3, 7], "bqmlforecast": [2, 3, 4, 7], "training_data": [2, 3, 4], "start_dat": [2, 6], "none": [2, 3, 4, 6, 7], "end_dat": [2, 3], "min_datapoints_r": 2, "float": [2, 3, 4], "0": [2, 3, 4, 7, 9], "75": 2, "base_t": 2, "iowa_liquor_sal": 2, "sale": [2, 4, 10], "datafram": [2, 3, 6, 7], "construct": [2, 4, 7], "condit": 2, "default": [2, 3, 4, 5, 6, 7], "store": [2, 4, 9, 10], "start": [2, 6, 10], "yyyi": 2, "mm": 2, "dd": 2, "format": [2, 6], "determin": 2, "wai": 2, "end": [2, 3], "equal": [2, 4], "todai": 2, "": [2, 3, 7, 9, 10], "calcul": 2, "fraction": 2, "between": [2, 4], "each": [2, 3, 4, 7], "should": [2, 3, 4, 5, 7], "point": [2, 6, 10], "consid": [2, 4], "singl": 2, "extract": [2, 7, 9], "ia": 2, "which": [2, 3, 4, 5, 6, 9], "code": [2, 4], "string": [2, 3, 4, 7], "dataset_id": [2, 7, 9], "forecast_tables_pattern": 2, "forecast_": 2, "connect": [2, 7], "servic": [2, 7, 9, 10], "id": [2, 7, 9], "locat": [2, 7], "pattern": [2, 5, 7], "match": [2, 7], "select": [2, 3, 4, 10], "cast": 2, "t1": 2, "forecast_timestamp": 2, "AS": 2, "total_amount_sold": [2, 4], "t2": 2, "forecast_valu": 2, "temp": 2, "t3": 2, "rainfal": 2, "t4": 2, "snowfal": 2, "fw": 2, "temperatur": 2, "forecast_temp": 2, "inner": 2, "forecast_rainfal": 2, "ON": 2, "AND": 2, "forecast_snowfal": 2, "left": 2, "future_weather_data": 2, "comprehens": 2, "train_table_nam": [2, 3, 4], "test_table_nam": [2, 4], "test_data": [2, 3, 4], "forecast_table_nam": [2, 3], "forecast_data": [2, 3], "horizon": [2, 3, 4], "7": [2, 3, 4], "It": [2, 3, 5, 6, 9], "inform": [2, 4, 7], "lag": [2, 9], "model_nam": [2, 4], "confidence_level": [2, 3, 4, 6], "9": [2, 4, 9, 10], "confid": [2, 3, 4], "level": [2, 3, 4], "arima_model": [2, 4], "table_base_nam": 2, "set": [3, 4, 5, 6, 9, 10], "explain": 3, "well": [3, 9], "aggreg": 3, "across": [3, 9], "evaluate_model": 3, "arima_plus_xreg": [3, 4, 5], "perform": [3, 4, 9], "metric": [3, 4], "get_data": 3, "create_queri": 3, "get_train_data": 3, "get_actual_data": 3, "actual": [3, 6, 10], "get_predict": 3, "predict": [3, 9], "evaluate_predict": 3, "against": [3, 7], "comparison": 3, "multi_evaluate_predict": 3, "dictionari": [3, 5, 6, 7], "explain_model": 3, "explan": 3, "primarili": 3, "intend": [3, 4, 5], "perform_aggreg": 3, "bool": [3, 4, 6], "true": [3, 4, 5, 6], "arima_plus_xreg_model": [3, 4], "actual_table_nam": 3, "period": 3, "maximum": [3, 4], "step": [3, 4, 9, 10], "ahead": 3, "whether": [3, 4, 6], "date_filt": 3, "order_bi": 3, "databas": 3, "order": 3, "For": [3, 10], "exampl": 3, "you": [3, 4, 6, 9, 10], "want": [3, 6], "sort": 3, "8": [3, 9], "tupl": [3, 5, 7], "compar": [3, 6], "two": [3, 7], "dict": [3, 5, 6, 7], "kei": [3, 5, 6, 7, 9, 10], "sub": 3, "train_df": 3, "eval_df": 3, "ml": 3, "explain_forecast": 3, "http": [3, 8, 10], "cloud": [3, 4, 9], "com": [3, 8, 10], "doc": [3, 9], "refer": [3, 9, 10], "standard": [3, 5], "bigqueryml": 3, "syntax": 3, "manag": [0, 4, 5], "retri": 4, "create_model_queri": 4, "its": [4, 7], "associ": 4, "execute_query_with_retri": 4, "logic": 4, "case": [4, 7], "failur": 4, "create_models_for_item": 4, "train_arima_model": 4, "arima": [4, 5, 7, 9], "correspond": [4, 7], "holidai": 4, "effect": 4, "chang": [4, 6, 9], "clean": 4, "timestamp_col": 4, "time_series_data_col": 4, "holiday_region": 4, "u": [4, 7], "auto_arima": 4, "adjust_step_chang": 4, "clean_spikes_and_dip": 4, "tailor": 4, "repres": 4, "timestamp": [4, 6], "region": 4, "enabl": [4, 6, 9, 10], "adjust": 4, "spike": 4, "dip": 4, "max_retri": 4, "3": [4, 6, 10], "fail": [4, 7], "automat": [4, 9], "up": [4, 9, 10], "increas": 4, "delai": 4, "attempt": 4, "except": [4, 7], "linearli": 4, "120": 4, "second": 4, "multipli": 4, "current": [4, 9, 10], "my_dataset": [4, 7], "my_tabl": [4, 7], "max_item": 4, "see": [4, 6, 9], "section": [4, 6], "more": [4, 9], "Not": 4, "account": [4, 9, 10], "bill": 4, "re": 4, "limit": 4, "smaller": 4, "than": [4, 7], "4": [4, 6], "run": [4, 9], "might": 4, "incur": 4, "charg": 4, "model_metrics_table_nam": 4, "arima_model_metr": 4, "time_series_timestamp_col": 4, "time_series_id_col": 4, "These": [4, 5, 9, 10], "liquor": [4, 10], "identifi": 4, "convert_to_datetim": 6, "df": 6, "col": 6, "filter_by_d": 6, "datetim": 6, "done": 6, "origin": 6, "appli": 6, "plot_historical_and_forecast": 6, "input_timeseri": 6, "timestamp_col_nam": 6, "data_col_nam": 6, "forecast_output": 6, "forecast_col_nam": 6, "actual_col_nam": 6, "titl": 6, "plot_start_d": 6, "show_peak": 6, "matplotlib": 6, "plot_kwarg": 6, "histor": [6, 9], "visual": 6, "peak": 6, "highlight": 6, "support": 6, "both": 6, "plotli": 6, "line": 6, "differ": [6, 7, 9], "color": 6, "map": 6, "lower_bound": 6, "upper_bound": 6, "ad": 6, "avail": [4, 6, 9], "either": 6, "addit": [4, 5, 6], "detail": [6, 9], "keyword": [4, 6], "argument": [4, 6, 7], "custom": 6, "neither": 6, "nor": 6, "allow": [4, 6], "librari": [6, 9], "get": [6, 7], "prettier": 6, "howev": 6, "instal": [6, 9], "By": [5, 6, 9], "also": [6, 9], "project": [6, 7, 9], "txt": [6, 10], "file": [6, 9, 10], "2023": 6, "01": 6, "02": 6, "10": [6, 9], "15": 6, "sampl": 6, "normalize_item_nam": 7, "convert": [6, 7], "lower": 7, "replac": [7, 10], "space": 7, "underscor": 7, "normal": 7, "tito": 7, "handmad": 7, "titos_handmade_vodka": 7, "uniqu": 7, "split_table_name_info": 7, "ani": [4, 5, 7, 10], "insid": [7, 9, 10], "thei": [5, 7], "my_project": 7, "create_bigquery_table_from_panda": 7, "table_id": 7, "if_exist": 7, "append": 7, "behavior": 7, "when": [7, 9], "alreadi": [7, 10], "exist": [7, 9, 10], "column1": 7, "1": [6, 7, 8], "2": [6, 7, 8], "column2": 7, "b": 7, "create_dataset_if_not_found": 7, "project_id": [7, 9], "dataset_nam": 7, "doe": 7, "infer": 7, "attibut": 7, "other": [5, 7], "error": [5, 7, 10], "new_dataset": 7, "check": [5, 7], "list_tables_with_pattern": 7, "table_pattern": 7, "fulli": 7, "qualifi": 7, "them": [7, 9], "interact": 7, "fnmatch": 7, "ensur": [5, 7, 9, 10], "compat": 7, "sales_": 7, "sales_2021": 7, "sales_2022": 7, "gumshoej": 8, "v5": 8, "patch": 8, "pradyunsg": 8, "simpl": 8, "framework": 8, "agnost": 8, "scrollspi": 8, "script": [8, 9, 10], "2019": 8, "chri": 8, "ferdinandi": 8, "mit": [8, 9], "licens": 8, "github": [8, 9, 10], "cferdinandi": 8, "gumsho": 8, "api": [9, 10], "index": 9, "search": 9, "here": [9, 10], "rst": [], "your": [9, 10], "iowa": 10, "guid": 10, "instruct": 10, "how": 10, "befor": [5, 10], "begin": 10, "www": [], "org": [], "download": 10, "releas": 9, "390": [], "higher": 10, "sdk": 10, "gcloud": 10, "configur": [0, 5, 9, 10], "container": 10, "environ": 10, "git": 10, "scm": [], "clone": 10, "repositori": [9, 10], "sever": [9, 10], "To": [9, 10], "pip": 10, "bash": 10, "r": 10, "storag": 10, "go": 10, "consol": 10, "new": [9, 10], "navig": 10, "authent": 10, "iam": 10, "admin": [], "serviceaccount": [], "In": 10, "click": 10, "ve": 10, "tab": 10, "choos": 10, "json": [9, 10], "button": 10, "google_application_credenti": [9, 10], "variabl": [5, 10], "path": [9, 10], "export": 10, "prefer": 10, "consist": [5, 9, 10], "build": [9, 10], "imag": [9, 10], "root": 10, "directori": [9, 10], "t": [4, 9, 10], "rm": [9, 10], "e": [6, 7, 10], "v": 10, "pwd": 10, "app": 10, "credenti": [9, 10], "mount": 10, "onc": 10, "haven": 10, "yourusernam": [], "cd": 10, "pipelin": 10, "train_model_and_forecast_sal": 10, "py": [9, 10], "make": 10, "sure": 10, "correctli": [5, 10], "encount": 10, "issu": 10, "dure": [4, 10], "some": [5, 10], "common": [5, 10], "solut": [9, 10], "miss": 10, "via": [5, 10], "verifi": 10, "system": 10, "ha": 10, "enough": 10, "resourc": 10, "alloc": 10, "further": 10, "assist": [6, 10], "document": [9, 10], "html": [], "content": [], "models_config": [0, 1, 9], "class": 0, "machin": 5, "learn": 5, "focus": 5, "deriv": 5, "abstractbasemodelconfig": 5, "abc": 5, "abstract": 5, "basemodelconfig": 5, "subclass": 5, "defin": [5, 9], "supported_paramet": 5, "expect": [5, 9], "choic": 5, "arimaconfig": 5, "inherit": 5, "arima_plu": 5, "adher": 5, "arima_plus_xreg_config": 5, "extend": 5, "exogen": 5, "xreg_featur": 5, "setup": 5, "pass": 5, "leverag": 5, "develop": [5, 9], "fall": 5, "within": 5, "reduc": 5, "likelihood": 5, "runtim": 5, "config": 5, "model_typ": 5, "xreg_config": 5, "feature1": 5, "feature2": 5, "non_negative_forecast": 5, "attribut": 5, "properti": 5, "must": 5, "implement": 5, "kwarg": [4, 5, 6], "unpack": 5, "restrict": 5, "erik": 10, "ingwersen": 10, "ei": 10, "include_test_on_model_train": 4, "union": 4, "being": 4, "include_test_on_arima_model_train": 4, "uni": 4, "variat": 4, "onli": 4, "shouldn": 4, "therefor": [4, 9], "do": [4, 9], "so": 4, "caus": 4, "turn": 4, "use_test_data_on_train": 4, "relat": [6, 9], "oper": [6, 9], "offer": 6, "flexibl": 6, "particularli": 6, "element": 6, "take": 6, "chain": 6, "pipe": 6, "dtype": 6, "m8": 6, "plot_seri": 6, "x_data": 6, "y_data": 6, "label": 6, "linestyl": 6, "marker": 6, "style": 6, "arrai": 6, "like": 6, "x": 6, "axi": 6, "y": 6, "legend": 6, "g": [6, 7], "solid": 6, "dash": 6, "scatter": 6, "20": 6, "red": 6, "parse_combined_str": 7, "combin": 7, "pars": 7, "2y3m2w1d": 7, "invalid": 7, "create_date_offset_from_part": 7, "individu": 7, "arg": 7, "ignor": 7, "purchas": 9, "multivari": 9, "relev": 9, "move": 9, "averag": 9, "wa": 9, "obtain": 9, "need": 9, "regist": 9, "Then": 9, "report": 9, "latest": 9, "found": 9, "find": 9, "entir": 9, "transform": 9, "notebook": 9, "ipynb": 9, "folder": 9, "entrypoint": 9, "task": 9, "dockerfil": 9, "replic": 9, "command": 9, "reli": 9, "few": 9, "proper": 9, "shell": 9, "env": 9, "suit": 9, "behav": 9, "pytest": 9, "action": 9, "whenev": 9, "push": 9, "pull": 9, "request": 9, "help": 9, "break": 9, "recreat": 9, "deploi": 9, "yml": 9, "coverag": 9, "under": 9, "receiv": 9, "pylint": 9, "score": 9, "__init__": 9, "99": 9, "31": 9, "41": 9, "50": 9}, "objects": {"iowa_forecast": [[2, 0, 0, "-", "load_data"], [3, 0, 0, "-", "ml_eval"], [4, 0, 0, "-", "ml_train"], [5, 0, 0, "-", "models_configs"], [6, 0, 0, "-", "plots"], [7, 0, 0, "-", "utils"]], "iowa_forecast.load_data": [[2, 1, 1, "", "create_forecast_features_query"], [2, 1, 1, "", "create_future_data"], [2, 1, 1, "", "create_future_feature_table"], [2, 1, 1, "", "create_future_feature_tables"], [2, 1, 1, "", "get_item_names_filter"], [2, 1, 1, "", "get_min_datapoints_filter"], [2, 1, 1, "", "get_training_data"], [2, 1, 1, "", "get_weather_query"], [2, 1, 1, "", "get_year_weather_query"]], "iowa_forecast.ml_eval": [[3, 1, 1, "", "create_query"], [3, 1, 1, "", "evaluate_models"], [3, 1, 1, "", "evaluate_predictions"], [3, 1, 1, "", "explain_model"], [3, 1, 1, "", "get_actual_data"], [3, 1, 1, "", "get_data"], [3, 1, 1, "", "get_predictions"], [3, 1, 1, "", "get_train_data"], [3, 1, 1, "", "multi_evaluate_predictions"]], "iowa_forecast.ml_train": [[4, 1, 1, "", "create_model_query"], [4, 1, 1, "", "create_models_for_items"], [4, 1, 1, "", "execute_query_with_retries"], [4, 1, 1, "", "include_test_on_arima_model_train"], [4, 1, 1, "", "include_test_on_model_train"], [4, 1, 1, "", "train_arima_models"]], "iowa_forecast.models_configs": [[5, 2, 1, "", "ARIMAConfig"], [5, 2, 1, "", "ARIMA_PLUS_XREG_Config"], [5, 2, 1, "", "AbstractBaseModelConfig"], [5, 2, 1, "", "BaseModelConfig"]], "iowa_forecast.models_configs.ARIMAConfig": [[5, 3, 1, "", "SUPPORTED_PARAMETERS"]], "iowa_forecast.models_configs.ARIMA_PLUS_XREG_Config": [[5, 3, 1, "", "SUPPORTED_PARAMETERS"]], "iowa_forecast.models_configs.AbstractBaseModelConfig": [[5, 3, 1, "", "SUPPORTED_PARAMETERS"]], "iowa_forecast.models_configs.BaseModelConfig": [[5, 3, 1, "", "SUPPORTED_PARAMETERS"]], "iowa_forecast.plots": [[6, 1, 1, "", "convert_to_datetime"], [6, 1, 1, "", "filter_by_date"], [6, 1, 1, "", "plot_historical_and_forecast"], [6, 1, 1, "", "plot_series"]], "iowa_forecast.utils": [[7, 1, 1, "", "create_bigquery_table_from_pandas"], [7, 1, 1, "", "create_dataset_if_not_found"], [7, 1, 1, "", "create_date_offset_from_parts"], [7, 1, 1, "", "date_offset"], [7, 1, 1, "", "list_tables_with_pattern"], [7, 1, 1, "", "normalize_item_name"], [7, 1, 1, "", "parse_combined_string"], [7, 1, 1, "", "split_table_name_info"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:property"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "property", "Python property"]}, "titleterms": {"api": 0, "refer": 0, "iowa_forecast": [0, 1], "load_data": 2, "function": [2, 3, 4, 6], "note": [2, 3, 4, 6, 7], "exampl": [2, 4, 5, 6, 7], "ml_eval": 3, "ml_train": 4, "plot": 6, "util": 7, "iowa": 9, "liquor": 9, "sale": 9, "forecast": 9, "modul": 9, "content": 9, "indic": 9, "tabl": 9, "instal": 10, "requir": 10, "python": 10, "depend": 10, "googl": 10, "cloud": 10, "setup": 10, "docker": [9, 10], "option": 10, "run": 10, "project": 10, "troubleshoot": 10, "models_config": 5, "class": 5, "usag": 5, "result": 9, "code": 9, "walkthrough": 9, "pipelin": 9, "addit": 9, "inform": 9, "contain": 9, "environ": 9, "variabl": 9, "test": 9, "continu": 9, "integr": 9, "ci": 9, "licens": 9, "codebas": 9, "static": 9}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 58}, "alltitles": {"API Reference": [[0, "api-reference"]], "iowa_forecast": [[0, "iowa-forecast"], [1, "iowa-forecast"]], "load_data": [[2, "module-iowa_forecast.load_data"]], "Functions": [[2, "functions"], [3, "functions"], [4, "functions"], [6, "functions"]], "Notes": [[2, null], [2, null], [3, null], [4, null], [4, null], [4, null], [6, null], [6, null], [6, null], [7, null], [7, null], [7, null]], "Examples": [[2, null], [2, null], [4, null], [6, null], [6, null], [6, null], [7, null], [7, null], [7, null], [7, null], [7, null]], "ml_eval": [[3, "module-iowa_forecast.ml_eval"]], "ml_train": [[4, "module-iowa_forecast.ml_train"]], "models_configs": [[5, "module-iowa_forecast.models_configs"]], "Classes": [[5, "classes"]], "Usage": [[5, "usage"]], "Example": [[5, null]], "plots": [[6, "module-iowa_forecast.plots"]], "utils": [[7, "module-iowa_forecast.utils"]], "Iowa Liquor Sales Forecast": [[9, "iowa-liquor-sales-forecast"]], "Forecast Results": [[9, "forecast-results"]], "Code Walkthrough": [[9, "code-walkthrough"]], "Pipelines": [[9, "pipelines"]], "Additional Information": [[9, "additional-information"]], "Docker Container": [[9, "docker-container"]], "Environment Variables": [[9, "environment-variables"]], "Testing": [[9, "testing"]], "Continuous Integration (CI)": [[9, "continuous-integration-ci"]], "License": [[9, "license"]], "Codebase Static Test Results": [[9, "codebase-static-test-results"]], "Modules": [[9, "modules"]], "Contents:": [[9, null]], "Indices and tables": [[9, "indices-and-tables"]], "Installation": [[10, "installation"]], "Requirements": [[10, "requirements"]], "Python Dependencies": [[10, "python-dependencies"]], "Google Cloud Setup": [[10, "google-cloud-setup"]], "Docker Setup (Optional)": [[10, "docker-setup-optional"]], "Running the Project": [[10, "running-the-project"]], "Troubleshooting": [[10, "troubleshooting"]]}, "indexentries": {"create_forecast_features_query() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.create_forecast_features_query"]], "create_future_data() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.create_future_data"]], "create_future_feature_table() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.create_future_feature_table"]], "create_future_feature_tables() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.create_future_feature_tables"]], "get_item_names_filter() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_item_names_filter"]], "get_min_datapoints_filter() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_min_datapoints_filter"]], "get_training_data() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_training_data"]], "get_weather_query() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_weather_query"]], "get_year_weather_query() (in module iowa_forecast.load_data)": [[2, "iowa_forecast.load_data.get_year_weather_query"]], "iowa_forecast.load_data": [[2, "module-iowa_forecast.load_data"]], "module": [[2, "module-iowa_forecast.load_data"], [3, "module-iowa_forecast.ml_eval"], [4, "module-iowa_forecast.ml_train"], [5, "module-iowa_forecast.models_configs"], [6, "module-iowa_forecast.plots"], [7, "module-iowa_forecast.utils"]], "create_query() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.create_query"]], "evaluate_models() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.evaluate_models"]], "evaluate_predictions() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.evaluate_predictions"]], "explain_model() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.explain_model"]], "get_actual_data() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.get_actual_data"]], "get_data() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.get_data"]], "get_predictions() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.get_predictions"]], "get_train_data() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.get_train_data"]], "iowa_forecast.ml_eval": [[3, "module-iowa_forecast.ml_eval"]], "multi_evaluate_predictions() (in module iowa_forecast.ml_eval)": [[3, "iowa_forecast.ml_eval.multi_evaluate_predictions"]], "create_model_query() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.create_model_query"]], "create_models_for_items() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.create_models_for_items"]], "execute_query_with_retries() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.execute_query_with_retries"]], "include_test_on_arima_model_train() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.include_test_on_arima_model_train"]], "include_test_on_model_train() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.include_test_on_model_train"]], "iowa_forecast.ml_train": [[4, "module-iowa_forecast.ml_train"]], "train_arima_models() (in module iowa_forecast.ml_train)": [[4, "iowa_forecast.ml_train.train_arima_models"]], "arimaconfig (class in iowa_forecast.models_configs)": [[5, "iowa_forecast.models_configs.ARIMAConfig"]], "arima_plus_xreg_config (class in iowa_forecast.models_configs)": [[5, "iowa_forecast.models_configs.ARIMA_PLUS_XREG_Config"]], "abstractbasemodelconfig (class in iowa_forecast.models_configs)": [[5, "iowa_forecast.models_configs.AbstractBaseModelConfig"]], "basemodelconfig (class in iowa_forecast.models_configs)": [[5, "iowa_forecast.models_configs.BaseModelConfig"]], "supported_parameters (iowa_forecast.models_configs.arimaconfig property)": [[5, "iowa_forecast.models_configs.ARIMAConfig.SUPPORTED_PARAMETERS"]], "supported_parameters (iowa_forecast.models_configs.arima_plus_xreg_config property)": [[5, "iowa_forecast.models_configs.ARIMA_PLUS_XREG_Config.SUPPORTED_PARAMETERS"]], "supported_parameters (iowa_forecast.models_configs.abstractbasemodelconfig property)": [[5, "iowa_forecast.models_configs.AbstractBaseModelConfig.SUPPORTED_PARAMETERS"]], "supported_parameters (iowa_forecast.models_configs.basemodelconfig property)": [[5, "iowa_forecast.models_configs.BaseModelConfig.SUPPORTED_PARAMETERS"]], "iowa_forecast.models_configs": [[5, "module-iowa_forecast.models_configs"]], "convert_to_datetime() (in module iowa_forecast.plots)": [[6, "iowa_forecast.plots.convert_to_datetime"]], "filter_by_date() (in module iowa_forecast.plots)": [[6, "iowa_forecast.plots.filter_by_date"]], "iowa_forecast.plots": [[6, "module-iowa_forecast.plots"]], "plot_historical_and_forecast() (in module iowa_forecast.plots)": [[6, "iowa_forecast.plots.plot_historical_and_forecast"]], "plot_series() (in module iowa_forecast.plots)": [[6, "iowa_forecast.plots.plot_series"]], "create_bigquery_table_from_pandas() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.create_bigquery_table_from_pandas"]], "create_dataset_if_not_found() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.create_dataset_if_not_found"]], "create_date_offset_from_parts() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.create_date_offset_from_parts"]], "date_offset() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.date_offset"]], "iowa_forecast.utils": [[7, "module-iowa_forecast.utils"]], "list_tables_with_pattern() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.list_tables_with_pattern"]], "normalize_item_name() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.normalize_item_name"]], "parse_combined_string() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.parse_combined_string"]], "split_table_name_info() (in module iowa_forecast.utils)": [[7, "iowa_forecast.utils.split_table_name_info"]]}}) \ No newline at end of file