From 9c16442bd657e5b53619efb9aa67f9f4e988c8f2 Mon Sep 17 00:00:00 2001 From: Daniela Date: Tue, 14 Jan 2025 15:49:04 +0000 Subject: [PATCH 01/11] merge main --- ...ingle_timeseries_forecasting_model_test.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 samples/snippets/limit_single_timeseries_forecasting_model_test.py diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py new file mode 100644 index 0000000000..7fa1f727b6 --- /dev/null +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -0,0 +1,36 @@ +# Copyright 2024 Google LLC +# +# Licensed under the Apache License, Version 2.0 (t +# you may not use this file except in compliance wi +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in +# distributed under the License is distributed on a +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eit +# See the License for the specific language governi +# limitations under the License. + + +def test_limit_single_timeseries(random_model_id: str) -> None: + # your_model_id = random_model_id + + # [START bigquery_dataframes_bqml_limit_forecast_visualize] + import bigframes.pandas as bpd + + df = bpd.read_gbq("bigquery-public-data.new_york.citibike_trips") + + features = bpd.DataFrame( + { + "num_trips": df.starttime, + "date": df["starttime"].dt.date, + } + ) + date = df["starttime"].dt.date + df.groupby([date]) + num_trips = features.groupby(["date"]).count() + # [END bigquery_dataframes_bqml_limit_forecast_visualize] + assert df is not None + assert features is not None + assert num_trips is not None From fa41486b3bdcb8dd479992de1e174c141e15b44b Mon Sep 17 00:00:00 2001 From: Daniela Date: Tue, 14 Jan 2025 17:27:04 +0000 Subject: [PATCH 02/11] temp snippet --- ...ingle_timeseries_forecasting_model_test.py | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index 7fa1f727b6..2ed343925a 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -14,7 +14,7 @@ def test_limit_single_timeseries(random_model_id: str) -> None: - # your_model_id = random_model_id + your_model_id = random_model_id # [START bigquery_dataframes_bqml_limit_forecast_visualize] import bigframes.pandas as bpd @@ -31,6 +31,32 @@ def test_limit_single_timeseries(random_model_id: str) -> None: df.groupby([date]) num_trips = features.groupby(["date"]).count() # [END bigquery_dataframes_bqml_limit_forecast_visualize] + + # [START bigquery_dataframes_bqml_limit_forecast_create] + from bigframes.ml import forecasting + import bigframes.pandas as bpd + + df = bpd.read_gbq("bigquery-public-data.new_york.citibike_trips") + + features = bpd.DataFrame( + { + "num_trips": df.starttime, + "date": df["starttime"].dt.date, + } + ) + num_trips = features.groupby(["date"], as_index=False).count() + model = forecasting.ARIMAPlus() + + X = num_trips["date"].to_frame() + y = num_trips["num_trips"].to_frame() + + model.fit(X, y) + + model.to_gbq( + your_model_id, # For example: "bqml_tutorial.nyc_citibike_arima_model", + replace=True, + ) + # [END bigquery_dataframes_bqml_limit_forecast_create assert df is not None assert features is not None assert num_trips is not None From 239cdbedb36d9dd1f998bb059b4f234ca6fc711f Mon Sep 17 00:00:00 2001 From: Daniela Date: Wed, 29 Jan 2025 19:44:18 +0000 Subject: [PATCH 03/11] fix typo --- demo.ipynb | 26 +++++++++++++++++++ ...ingle_timeseries_forecasting_model_test.py | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 demo.ipynb diff --git a/demo.ipynb b/demo.ipynb new file mode 100644 index 0000000000..a6ecd4ff45 --- /dev/null +++ b/demo.ipynb @@ -0,0 +1,26 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import bigframes.pandas as bpd\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "env", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.9.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index 2ed343925a..0e8bbbf154 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -56,7 +56,7 @@ def test_limit_single_timeseries(random_model_id: str) -> None: your_model_id, # For example: "bqml_tutorial.nyc_citibike_arima_model", replace=True, ) - # [END bigquery_dataframes_bqml_limit_forecast_create + # [END bigquery_dataframes_bqml_limit_forecast_create] assert df is not None assert features is not None assert num_trips is not None From 31c1e30968ff795bc35a9b6e3c2e0e7fa925dd70 Mon Sep 17 00:00:00 2001 From: rey-esp Date: Thu, 30 Jan 2025 10:16:23 -0600 Subject: [PATCH 04/11] Delete demo.ipynb --- demo.ipynb | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 demo.ipynb diff --git a/demo.ipynb b/demo.ipynb deleted file mode 100644 index a6ecd4ff45..0000000000 --- a/demo.ipynb +++ /dev/null @@ -1,26 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import bigframes.pandas as bpd\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "env", - "language": "python", - "name": "python3" - }, - "language_info": { - "name": "python", - "version": "3.9.19" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From cec581fdb826111d22908f504dd646e4c963f3d0 Mon Sep 17 00:00:00 2001 From: rey-esp Date: Thu, 30 Jan 2025 13:29:20 -0600 Subject: [PATCH 05/11] Update samples/snippets/limit_single_timeseries_forecasting_model_test.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Sweña (Swast) --- .../snippets/limit_single_timeseries_forecasting_model_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index 0e8bbbf154..38354fe670 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -27,7 +27,6 @@ def test_limit_single_timeseries(random_model_id: str) -> None: "date": df["starttime"].dt.date, } ) - date = df["starttime"].dt.date df.groupby([date]) num_trips = features.groupby(["date"]).count() # [END bigquery_dataframes_bqml_limit_forecast_visualize] From 582746dfac1172e57065e18a2b2a9c9f93fd0312 Mon Sep 17 00:00:00 2001 From: rey-esp Date: Thu, 30 Jan 2025 13:31:53 -0600 Subject: [PATCH 06/11] Update samples/snippets/limit_single_timeseries_forecasting_model_test.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Sweña (Swast) --- .../limit_single_timeseries_forecasting_model_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index 38354fe670..37e7dfd47c 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -46,8 +46,8 @@ def test_limit_single_timeseries(random_model_id: str) -> None: num_trips = features.groupby(["date"], as_index=False).count() model = forecasting.ARIMAPlus() - X = num_trips["date"].to_frame() - y = num_trips["num_trips"].to_frame() + X = num_trips[["date"]] + y = num_trips[["num_trips"]] model.fit(X, y) From 2293f133369344d47343db9610881e411da05596 Mon Sep 17 00:00:00 2001 From: rey-esp Date: Thu, 30 Jan 2025 13:32:07 -0600 Subject: [PATCH 07/11] Update samples/snippets/limit_single_timeseries_forecasting_model_test.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Sweña (Swast) --- .../snippets/limit_single_timeseries_forecasting_model_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index 37e7dfd47c..da5afed735 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -27,7 +27,6 @@ def test_limit_single_timeseries(random_model_id: str) -> None: "date": df["starttime"].dt.date, } ) - df.groupby([date]) num_trips = features.groupby(["date"]).count() # [END bigquery_dataframes_bqml_limit_forecast_visualize] From 2f533d653e2aac35c44aa5957263d7c2b28d1c4d Mon Sep 17 00:00:00 2001 From: rey-esp Date: Thu, 30 Jan 2025 13:33:11 -0600 Subject: [PATCH 08/11] Update samples/snippets/limit_single_timeseries_forecasting_model_test.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Sweña (Swast) --- .../snippets/limit_single_timeseries_forecasting_model_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index da5afed735..1b795be547 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -38,11 +38,12 @@ def test_limit_single_timeseries(random_model_id: str) -> None: features = bpd.DataFrame( { + "start_station_id": df["start_station_id"], "num_trips": df.starttime, "date": df["starttime"].dt.date, } ) - num_trips = features.groupby(["date"], as_index=False).count() + num_trips = features.groupby(["date", "start_station_id"], as_index=False).count() model = forecasting.ARIMAPlus() X = num_trips[["date"]] From 336109fee95dd77360de52235bcb2ef74af0c16f Mon Sep 17 00:00:00 2001 From: rey-esp Date: Thu, 30 Jan 2025 16:22:16 -0600 Subject: [PATCH 09/11] Update samples/snippets/limit_single_timeseries_forecasting_model_test.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tim Sweña (Swast) --- .../snippets/limit_single_timeseries_forecasting_model_test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index 1b795be547..f190b26264 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -48,8 +48,9 @@ def test_limit_single_timeseries(random_model_id: str) -> None: X = num_trips[["date"]] y = num_trips[["num_trips"]] + id_col = num_trips[["start_station_id"]] - model.fit(X, y) + model.fit(X, y, id_col=id_col) model.to_gbq( your_model_id, # For example: "bqml_tutorial.nyc_citibike_arima_model", From 2417408b90c9d176b481bc3185b78ba9a57a7e6d Mon Sep 17 00:00:00 2001 From: Daniela Date: Mon, 10 Feb 2025 21:45:57 +0000 Subject: [PATCH 10/11] add plot line for visualization --- .../snippets/limit_single_timeseries_forecasting_model_test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index f190b26264..6bdefd78f6 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -28,6 +28,8 @@ def test_limit_single_timeseries(random_model_id: str) -> None: } ) num_trips = features.groupby(["date"]).count() + + num_trips.plot.bar() # [END bigquery_dataframes_bqml_limit_forecast_visualize] # [START bigquery_dataframes_bqml_limit_forecast_create] From f1968056cd4cbc1677531509f97d277a289a62e4 Mon Sep 17 00:00:00 2001 From: rey-esp Date: Tue, 11 Feb 2025 11:26:44 -0600 Subject: [PATCH 11/11] change bar chart to line chart --- .../snippets/limit_single_timeseries_forecasting_model_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/limit_single_timeseries_forecasting_model_test.py b/samples/snippets/limit_single_timeseries_forecasting_model_test.py index 6bdefd78f6..6a9f14e383 100644 --- a/samples/snippets/limit_single_timeseries_forecasting_model_test.py +++ b/samples/snippets/limit_single_timeseries_forecasting_model_test.py @@ -29,7 +29,7 @@ def test_limit_single_timeseries(random_model_id: str) -> None: ) num_trips = features.groupby(["date"]).count() - num_trips.plot.bar() + num_trips.plot.line() # [END bigquery_dataframes_bqml_limit_forecast_visualize] # [START bigquery_dataframes_bqml_limit_forecast_create]