From 8a98e7b679aaa8b6d071d368dec98706fb46669a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Swe=C3=B1a?= Date: Tue, 7 Apr 2026 19:34:05 +0000 Subject: [PATCH 1/5] docs: notebook to query pandas DataFrame with `%%bqsql` magics notebook --- .../dataframes/magics_with_local_data.ipynb | 1579 +++++++++++++++++ 1 file changed, 1579 insertions(+) create mode 100644 packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb diff --git a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb new file mode 100644 index 000000000000..a6bdcaf5541c --- /dev/null +++ b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb @@ -0,0 +1,1579 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "c5f9e86e", + "metadata": {}, + "outputs": [], + "source": [ + "# Copyright 2026 Google LLC\n", + "#\n", + "# Licensed under the Apache License, Version 2.0 (the \"License\");\n", + "# you may not use this file except in compliance with the License.\n", + "# You may obtain a copy of the License at\n", + "#\n", + "# https://www.apache.org/licenses/LICENSE-2.0\n", + "#\n", + "# Unless required by applicable law or agreed to in writing, software\n", + "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", + "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + "# See the License for the specific language governing permissions and\n", + "# limitations under the License." + ] + }, + { + "cell_type": "markdown", + "id": "71383fa0", + "metadata": {}, + "source": [ + "# Query local DataFrames with SQL\n", + "\n", + "https://www.ers.usda.gov/data-products/wheat-data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d00aeb28", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: python-calamine in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (0.6.2)\n", + "Requirement already satisfied: pandas in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (2.3.3)\n", + "Requirement already satisfied: bigframes in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (2.39.0)\n", + "Requirement already satisfied: numpy>=1.26.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2.4.4)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2026.1.post1)\n", + "Requirement already satisfied: tzdata>=2022.7 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2026.1)\n", + "Requirement already satisfied: cloudpickle>=2.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (3.1.2)\n", + "Requirement already satisfied: fsspec>=2023.3.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2026.1.0)\n", + "Requirement already satisfied: gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2026.1.0)\n", + "Requirement already satisfied: geopandas>=0.12.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.1.3)\n", + "Requirement already satisfied: google-auth<3.0,>=2.15.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2.49.1)\n", + "Requirement already satisfied: google-cloud-bigquery>=3.36.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-cloud-bigquery[bqstorage,pandas]>=3.36.0->bigframes) (3.41.0)\n", + "Requirement already satisfied: google-cloud-bigquery-storage<3.0.0,>=2.30.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2.37.0)\n", + "Requirement already satisfied: google-cloud-functions>=1.12.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.23.0)\n", + "Requirement already satisfied: google-cloud-bigquery-connection>=1.12.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.21.0)\n", + "Requirement already satisfied: google-cloud-resource-manager>=1.10.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.17.0)\n", + "Requirement already satisfied: google-cloud-storage>=2.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (3.10.1)\n", + "Requirement already satisfied: google-crc32c<2.0.0,>=1.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.8.0)\n", + "Requirement already satisfied: grpc-google-iam-v1>=0.14.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (0.14.4)\n", + "Requirement already satisfied: pandas-gbq>=0.26.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (0.34.1)\n", + "Requirement already satisfied: pyarrow>=15.0.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (23.0.1)\n", + "Requirement already satisfied: pydata-google-auth>=1.8.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.9.1)\n", + "Requirement already satisfied: requests>=2.27.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2.33.1)\n", + "Requirement already satisfied: shapely>=1.8.5 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2.1.2)\n", + "Requirement already satisfied: tabulate>=0.9 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (0.10.0)\n", + "Requirement already satisfied: humanize>=4.6.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (4.15.0)\n", + "Requirement already satisfied: matplotlib>=3.7.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (3.10.8)\n", + "Requirement already satisfied: db-dtypes>=1.4.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.5.1)\n", + "Requirement already satisfied: pyiceberg>=0.7.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (0.11.1)\n", + "Requirement already satisfied: atpublic<6,>=2.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (5.1)\n", + "Requirement already satisfied: toolz<2,>=0.11 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.1.0)\n", + "Requirement already satisfied: typing-extensions<5,>=4.5.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (4.15.0)\n", + "Requirement already satisfied: rich<14,>=12.4.4 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (13.9.4)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-auth<3.0,>=2.15.0->bigframes) (0.4.2)\n", + "Requirement already satisfied: cryptography>=38.0.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-auth<3.0,>=2.15.0->bigframes) (46.0.6)\n", + "Requirement already satisfied: google-api-core<3.0.0,>=2.11.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-api-core[grpc]<3.0.0,>=2.11.0->google-cloud-bigquery-storage<3.0.0,>=2.30.0->bigframes) (2.30.2)\n", + "Requirement already satisfied: grpcio<2.0.0,>=1.33.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-cloud-bigquery-storage<3.0.0,>=2.30.0->bigframes) (1.80.0)\n", + "Requirement already satisfied: proto-plus<2.0.0,>=1.22.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-cloud-bigquery-storage<3.0.0,>=2.30.0->bigframes) (1.27.2)\n", + "Requirement already satisfied: protobuf<8.0.0,>=4.25.8 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-cloud-bigquery-storage<3.0.0,>=2.30.0->bigframes) (6.33.6)\n", + "Requirement already satisfied: googleapis-common-protos<2.0.0,>=1.63.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-api-core<3.0.0,>=2.11.0->google-api-core[grpc]<3.0.0,>=2.11.0->google-cloud-bigquery-storage<3.0.0,>=2.30.0->bigframes) (1.74.0)\n", + "Requirement already satisfied: grpcio-status<2.0.0,>=1.33.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-api-core[grpc]<3.0.0,>=2.11.0->google-cloud-bigquery-storage<3.0.0,>=2.30.0->bigframes) (1.80.0)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\n", + "Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from requests>=2.27.1->bigframes) (3.4.7)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from requests>=2.27.1->bigframes) (3.11)\n", + "Requirement already satisfied: urllib3<3,>=1.26 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from requests>=2.27.1->bigframes) (2.6.3)\n", + "Requirement already satisfied: certifi>=2023.5.7 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from requests>=2.27.1->bigframes) (2026.2.25)\n", + "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from rich<14,>=12.4.4->bigframes) (4.0.0)\n", + "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from rich<14,>=12.4.4->bigframes) (2.20.0)\n", + "Requirement already satisfied: cffi>=2.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from cryptography>=38.0.3->google-auth<3.0,>=2.15.0->bigframes) (2.0.0)\n", + "Requirement already satisfied: pycparser in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from cffi>=2.0.0->cryptography>=38.0.3->google-auth<3.0,>=2.15.0->bigframes) (3.0)\n", + "Requirement already satisfied: packaging>=24.2.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from db-dtypes>=1.4.2->bigframes) (26.0)\n", + "Requirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (3.13.5)\n", + "Requirement already satisfied: decorator>4.1.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (5.2.1)\n", + "Requirement already satisfied: google-auth-oauthlib in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (1.3.1)\n", + "Requirement already satisfied: google-cloud-storage-control in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (1.11.0)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.5.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (2.6.1)\n", + "Requirement already satisfied: aiosignal>=1.4.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (1.4.0)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (26.1.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (1.8.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (6.7.1)\n", + "Requirement already satisfied: propcache>=0.2.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (0.4.1)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from aiohttp!=4.0.0a0,!=4.0.0a1->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (1.23.0)\n", + "Requirement already satisfied: pyogrio>=0.7.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from geopandas>=0.12.2->bigframes) (0.12.1)\n", + "Requirement already satisfied: pyproj>=3.5.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from geopandas>=0.12.2->bigframes) (3.7.2)\n", + "Requirement already satisfied: google-cloud-core<3.0.0,>=2.4.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-cloud-bigquery>=3.36.0->google-cloud-bigquery[bqstorage,pandas]>=3.36.0->bigframes) (2.5.1)\n", + "Requirement already satisfied: google-resumable-media<3.0.0,>=2.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-cloud-bigquery>=3.36.0->google-cloud-bigquery[bqstorage,pandas]>=3.36.0->bigframes) (2.8.2)\n", + "Requirement already satisfied: mdurl~=0.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from markdown-it-py>=2.2.0->rich<14,>=12.4.4->bigframes) (0.1.2)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from matplotlib>=3.7.1->bigframes) (1.3.3)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from matplotlib>=3.7.1->bigframes) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from matplotlib>=3.7.1->bigframes) (4.62.1)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from matplotlib>=3.7.1->bigframes) (1.5.0)\n", + "Requirement already satisfied: pillow>=8 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from matplotlib>=3.7.1->bigframes) (12.2.0)\n", + "Requirement already satisfied: pyparsing>=3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from matplotlib>=3.7.1->bigframes) (3.3.2)\n", + "Requirement already satisfied: setuptools in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas-gbq>=0.26.1->bigframes) (82.0.1)\n", + "Requirement already satisfied: psutil>=5.9.8 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas-gbq>=0.26.1->bigframes) (7.2.2)\n", + "Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from google-auth-oauthlib->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (2.0.0)\n", + "Requirement already satisfied: pyasn1<0.7.0,>=0.6.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyasn1-modules>=0.2.1->google-auth<3.0,>=2.15.0->bigframes) (0.6.3)\n", + "Requirement already satisfied: mmh3<6.0.0,>=4.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyiceberg>=0.7.1->bigframes) (5.2.1)\n", + "Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyiceberg>=0.7.1->bigframes) (8.3.2)\n", + "Requirement already satisfied: strictyaml<2.0.0,>=1.7.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyiceberg>=0.7.1->bigframes) (1.7.3)\n", + "Requirement already satisfied: pydantic!=2.12.0,!=2.12.1,!=2.4.0,!=2.4.1,<3.0,>=2.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyiceberg>=0.7.1->bigframes) (2.12.5)\n", + "Requirement already satisfied: tenacity<10.0.0,>=8.2.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyiceberg>=0.7.1->bigframes) (9.1.4)\n", + "Requirement already satisfied: pyroaring<2.0.0,>=1.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyiceberg>=0.7.1->bigframes) (1.0.4)\n", + "Requirement already satisfied: cachetools<7.0,>=5.5 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyiceberg>=0.7.1->bigframes) (6.2.6)\n", + "Requirement already satisfied: zstandard<1.0.0,>=0.13.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pyiceberg>=0.7.1->bigframes) (0.25.0)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pydantic!=2.12.0,!=2.12.1,!=2.4.0,!=2.4.1,<3.0,>=2.0->pyiceberg>=0.7.1->bigframes) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.41.5 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pydantic!=2.12.0,!=2.12.1,!=2.4.0,!=2.4.1,<3.0,>=2.0->pyiceberg>=0.7.1->bigframes) (2.41.5)\n", + "Requirement already satisfied: typing-inspection>=0.4.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pydantic!=2.12.0,!=2.12.1,!=2.4.0,!=2.4.1,<3.0,>=2.0->pyiceberg>=0.7.1->bigframes) (0.4.2)\n", + "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (3.3.1)\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m25.3\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m26.0.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install python-calamine pandas bigframes" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "56babb3f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2026-04-09 17:26:58-- https://www.ers.usda.gov/media/5706/wheat-data-all-years.xlsx?v=19753\n", + "Resolving www.ers.usda.gov (www.ers.usda.gov)... 20.141.137.224\n", + "Connecting to www.ers.usda.gov (www.ers.usda.gov)|20.141.137.224|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 972455 (950K) [application/vnd.openxmlformats-officedocument.spreadsheetml.sheet]\n", + "Saving to: ‘/tmp/wheat-data.xlsx’\n", + "\n", + "/tmp/wheat-data.xls 100%[===================>] 949.66K 1.97MB/s in 0.5s \n", + "\n", + "2026-04-09 17:26:59 (1.97 MB/s) - ‘/tmp/wheat-data.xlsx’ saved [972455/972455]\n", + "\n" + ] + } + ], + "source": [ + "!wget -O /tmp/wheat-data.xlsx 'https://www.ers.usda.gov/media/5706/wheat-data-all-years.xlsx?v=19753'" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "469a1b8e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Marketing year 1/Type 2/Beginning stocksProductionImportsTotal supply 3/ 4/Food useSeed useFeed and residual useTotal domestic use 4/ExportsTotal disappearance 4/Ending stocks
01950/51All wheat496.01019.0111526.0580.0--109.0689.0345.01034.0492.0
11951/52All wheat492.0988.0301510.0585.0--110.0695.0485.01180.0330.0
21952/53All wheat330.01306.0241660.0578.0--78.0656.0332.0988.0672.0
31953/54All wheat672.01173.061851.0556.0--87.0643.0214.0857.0994.0
41954/55All wheat994.0984.031981.0552.0--53.0605.0267.0872.01109.0
..........................................
2872/ Hard Red Winter, Hard Red Spring, Soft Red ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2883/ Includes flour and selected other products ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2894/ Totals may not add due to rounding.<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
290Source: USDA, Economic Research Service, based...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
291Updated: March 13, 2026<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
\n", + "

292 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " Marketing year 1/ Type 2/ \\\n", + "0 1950/51 All wheat \n", + "1 1951/52 All wheat \n", + "2 1952/53 All wheat \n", + "3 1953/54 All wheat \n", + "4 1954/55 All wheat \n", + ".. ... ... \n", + "287 2/ Hard Red Winter, Hard Red Spring, Soft Red ... \n", + "288 3/ Includes flour and selected other products ... \n", + "289 4/ Totals may not add due to rounding. \n", + "290 Source: USDA, Economic Research Service, based... \n", + "291 Updated: March 13, 2026 \n", + "\n", + " Beginning stocks Production Imports Total supply 3/ 4/ Food use \\\n", + "0 496.0 1019.0 11 1526.0 580.0 \n", + "1 492.0 988.0 30 1510.0 585.0 \n", + "2 330.0 1306.0 24 1660.0 578.0 \n", + "3 672.0 1173.0 6 1851.0 556.0 \n", + "4 994.0 984.0 3 1981.0 552.0 \n", + ".. ... ... ... ... ... \n", + "287 \n", + "288 \n", + "289 \n", + "290 \n", + "291 \n", + "\n", + " Seed use Feed and residual use Total domestic use 4/ Exports \\\n", + "0 -- 109.0 689.0 345.0 \n", + "1 -- 110.0 695.0 485.0 \n", + "2 -- 78.0 656.0 332.0 \n", + "3 -- 87.0 643.0 214.0 \n", + "4 -- 53.0 605.0 267.0 \n", + ".. ... ... ... ... \n", + "287 \n", + "288 \n", + "289 \n", + "290 \n", + "291 \n", + "\n", + " Total disappearance 4/ Ending stocks \n", + "0 1034.0 492.0 \n", + "1 1180.0 330.0 \n", + "2 988.0 672.0 \n", + "3 857.0 994.0 \n", + "4 872.0 1109.0 \n", + ".. ... ... \n", + "287 \n", + "288 \n", + "289 \n", + "290 \n", + "291 \n", + "\n", + "[292 rows x 13 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_excel(\n", + " \"/tmp/wheat-data.xlsx\",\n", + " sheet_name=\"Table06\",\n", + " header=1,\n", + "\n", + " # Requires that the python-calamine project is also installed.\n", + " engine=\"calamine\",\n", + "\n", + " # Recommended so that string columns don't contain NaN, which can confuse\n", + " # parquet serialization, which we use to read these data in BigQuery SQL.\n", + " dtype_backend=\"pyarrow\",\n", + ")\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "a06b58d9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Marketing year 1Type 2Beginning stocksProductionImportsTotal supply 3 4Food useSeed useFeed and residual useTotal domestic use 4ExportsTotal disappearance 4Ending stocks
rowindex
01950/51All wheat496.01019.0111526.0580.0--109.0689.0345.01034.0492.0
11951/52All wheat492.0988.0301510.0585.0--110.0695.0485.01180.0330.0
21952/53All wheat330.01306.0241660.0578.0--78.0656.0332.0988.0672.0
31953/54All wheat672.01173.061851.0556.0--87.0643.0214.0857.0994.0
41954/55All wheat994.0984.031981.0552.0--53.0605.0267.0872.01109.0
..........................................
2872/ Hard Red Winter, Hard Red Spring, Soft Red ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2883/ Includes flour and selected other products ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2894/ Totals may not add due to rounding.<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
290Source: USDA, Economic Research Service, based...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
291Updated: March 13, 2026<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
\n", + "

292 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " Marketing year 1 Type 2 \\\n", + "rowindex \n", + "0 1950/51 All wheat \n", + "1 1951/52 All wheat \n", + "2 1952/53 All wheat \n", + "3 1953/54 All wheat \n", + "4 1954/55 All wheat \n", + "... ... ... \n", + "287 2/ Hard Red Winter, Hard Red Spring, Soft Red ... \n", + "288 3/ Includes flour and selected other products ... \n", + "289 4/ Totals may not add due to rounding. \n", + "290 Source: USDA, Economic Research Service, based... \n", + "291 Updated: March 13, 2026 \n", + "\n", + " Beginning stocks Production Imports Total supply 3 4 Food use \\\n", + "rowindex \n", + "0 496.0 1019.0 11 1526.0 580.0 \n", + "1 492.0 988.0 30 1510.0 585.0 \n", + "2 330.0 1306.0 24 1660.0 578.0 \n", + "3 672.0 1173.0 6 1851.0 556.0 \n", + "4 994.0 984.0 3 1981.0 552.0 \n", + "... ... ... ... ... ... \n", + "287 \n", + "288 \n", + "289 \n", + "290 \n", + "291 \n", + "\n", + " Seed use Feed and residual use Total domestic use 4 Exports \\\n", + "rowindex \n", + "0 -- 109.0 689.0 345.0 \n", + "1 -- 110.0 695.0 485.0 \n", + "2 -- 78.0 656.0 332.0 \n", + "3 -- 87.0 643.0 214.0 \n", + "4 -- 53.0 605.0 267.0 \n", + "... ... ... ... ... \n", + "287 \n", + "288 \n", + "289 \n", + "290 \n", + "291 \n", + "\n", + " Total disappearance 4 Ending stocks \n", + "rowindex \n", + "0 1034.0 492.0 \n", + "1 1180.0 330.0 \n", + "2 988.0 672.0 \n", + "3 857.0 994.0 \n", + "4 872.0 1109.0 \n", + "... ... ... \n", + "287 \n", + "288 \n", + "289 \n", + "290 \n", + "291 \n", + "\n", + "[292 rows x 13 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# To aid in SQL authoring, rename the columns to avoid problematic special\n", + "# characters. Note: BigQuery supports some special characters, but not \"/\".\n", + "# https://docs.cloud.google.com/bigquery/docs/schemas#flexible-column-names\n", + "df_renamed = df.rename(\n", + " columns={\n", + " column: column.replace(\"/\", \"\")\n", + " for column in df.columns\n", + " }\n", + ")\n", + "\n", + "# Also, give a name to the index so that it can be included.\n", + "df_renamed.index.name = \"rowindex\"\n", + "df_renamed\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "04363cc5", + "metadata": {}, + "outputs": [], + "source": [ + "import bigframes.pandas as bpd\n", + "\n", + "# TODO(developer): Follow the instructions at\n", + "# https://docs.cloud.google.com/bigquery/docs/sandbox and set the project to the\n", + "# ID of the project you created.\n", + "bpd.options.bigquery.project = \"swena-bq-sandbox\"" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "3b9a46d7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Load job f629ac7a-132f-4f8b-80c6-143b87f9f6f4 is DONE. Open Job" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + " Query processed 33.4 kB in a moment of slot time.\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Start yearSeed userowindexType 2Beginning stocksProductionImportsTotal supply 3 4Food useFeed and residual useTotal domestic use 4ExportsTotal disappearance 4Ending stocks
01950<NA>0All wheat496.01019.0111526.0580.0109.0689.0345.01034.0492.0
11951<NA>1All wheat492.0988.0301510.0585.0110.0695.0485.01180.0330.0
21952<NA>2All wheat330.01306.0241660.0578.078.0656.0332.0988.0672.0
31953<NA>3All wheat672.01173.061851.0556.087.0643.0214.0857.0994.0
41954<NA>4All wheat994.0984.031981.0552.053.0605.0267.0872.01109.0
51955<NA>5All wheat1109.0937.0102056.0553.051.0604.0322.0926.01130.0
61956<NA>6All wheat1130.01005.082143.0541.057.0598.0541.01139.01004.0
71957<NA>7All wheat1004.0956.0101970.0547.043.0590.0418.01008.0962.0
81958<NA>8All wheat962.01457.082427.0561.048.0609.0450.01059.01368.0
91959<NA>9All wheat1368.01118.072493.0558.049.0607.0502.01109.01384.0
\n", + "

10 rows × 14 columns

\n", + "
[292 rows x 14 columns in total]" + ], + "text/plain": [ + " Start year Seed use rowindex Type 2 Beginning stocks Production \\\n", + "0 1950 0 All wheat 496.0 1019.0 \n", + "1 1951 1 All wheat 492.0 988.0 \n", + "2 1952 2 All wheat 330.0 1306.0 \n", + "3 1953 3 All wheat 672.0 1173.0 \n", + "4 1954 4 All wheat 994.0 984.0 \n", + "5 1955 5 All wheat 1109.0 937.0 \n", + "6 1956 6 All wheat 1130.0 1005.0 \n", + "7 1957 7 All wheat 1004.0 956.0 \n", + "8 1958 8 All wheat 962.0 1457.0 \n", + "9 1959 9 All wheat 1368.0 1118.0 \n", + "\n", + " Imports Total supply 3 4 Food use Feed and residual use \\\n", + "0 11 1526.0 580.0 109.0 \n", + "1 30 1510.0 585.0 110.0 \n", + "2 24 1660.0 578.0 78.0 \n", + "3 6 1851.0 556.0 87.0 \n", + "4 3 1981.0 552.0 53.0 \n", + "5 10 2056.0 553.0 51.0 \n", + "6 8 2143.0 541.0 57.0 \n", + "7 10 1970.0 547.0 43.0 \n", + "8 8 2427.0 561.0 48.0 \n", + "9 7 2493.0 558.0 49.0 \n", + "\n", + " Total domestic use 4 Exports Total disappearance 4 Ending stocks \n", + "0 689.0 345.0 1034.0 492.0 \n", + "1 695.0 485.0 1180.0 330.0 \n", + "2 656.0 332.0 988.0 672.0 \n", + "3 643.0 214.0 857.0 994.0 \n", + "4 605.0 267.0 872.0 1109.0 \n", + "5 604.0 322.0 926.0 1130.0 \n", + "6 598.0 541.0 1139.0 1004.0 \n", + "7 590.0 418.0 1008.0 962.0 \n", + "8 609.0 450.0 1059.0 1368.0 \n", + "9 607.0 502.0 1109.0 1384.0 \n", + "...\n", + "\n", + "[292 rows x 14 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%bqsql df_with_year\n", + "SELECT\n", + " REGEXP_EXTRACT(LTRIM(`Marketing year 1`), r'^([0-9]+)/[0-9]') AS `Start year`,\n", + " SAFE_CAST(`Seed use` AS FLOAT64) AS `Seed use`,\n", + " * EXCEPT (`Marketing year 1`, `Seed use`)\n", + "FROM {df_renamed}\n", + "ORDER BY rowindex ASC" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "0a3c3e22", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Query processed 19.0 kB in a moment of slot time.\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rowindexStart yearSeed proportionFood proportionFeed proportionExports proportion
001950<NA>0.5609280.1054160.333656
111951<NA>0.4957630.093220.411017
221952<NA>0.585020.0789470.336032
331953<NA>0.6487750.1015170.249708
441954<NA>0.6330280.060780.306193
551955<NA>0.5971920.0550760.347732
661956<NA>0.4749780.0500440.474978
771957<NA>0.5426590.0426590.414683
881958<NA>0.5297450.0453260.424929
991959<NA>0.5031560.0441840.45266
\n", + "

10 rows × 6 columns

\n", + "
[76 rows x 6 columns in total]" + ], + "text/plain": [ + " rowindex Start year Seed proportion Food proportion Feed proportion \\\n", + "0 0 1950 0.560928 0.105416 \n", + "1 1 1951 0.495763 0.09322 \n", + "2 2 1952 0.58502 0.078947 \n", + "3 3 1953 0.648775 0.101517 \n", + "4 4 1954 0.633028 0.06078 \n", + "5 5 1955 0.597192 0.055076 \n", + "6 6 1956 0.474978 0.050044 \n", + "7 7 1957 0.542659 0.042659 \n", + "8 8 1958 0.529745 0.045326 \n", + "9 9 1959 0.503156 0.044184 \n", + "\n", + " Exports proportion \n", + "0 0.333656 \n", + "1 0.411017 \n", + "2 0.336032 \n", + "3 0.249708 \n", + "4 0.306193 \n", + "5 0.347732 \n", + "6 0.474978 \n", + "7 0.414683 \n", + "8 0.424929 \n", + "9 0.45266 \n", + "...\n", + "\n", + "[76 rows x 6 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%bqsql use_proportions\n", + "SELECT\n", + " `rowindex`,\n", + " `Start year`,\n", + " `Seed use` / `Total disappearance 4` AS `Seed proportion`,\n", + " `Food use` / `Total disappearance 4` AS `Food proportion`,\n", + " `Feed and residual use` / `Total disappearance 4` AS `Feed proportion`,\n", + " `Exports` / `Total disappearance 4` AS `Exports proportion`\n", + "FROM {df_with_year}\n", + "WHERE TRIM(`Type 2`) = 'All wheat'\n", + "ORDER BY `rowindex` ASC;" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "8a158619", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Query processed 0 Bytes in a moment of slot time.\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGwCAYAAAB7MGXBAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAnwJJREFUeJzs3XecXFX9+P/XvdNne8nupm9COkhCCAkBBQLBCIogFlA/QihRxCgYReCjEGIBROpXERQV8PNDqVKEiEAklBgIpEFIr7tJtvfd6fee3x93ZnYn22a2ZDbJ+/l47CPJzC1nJrNz3/ec93kfTSmlEEIIIYRIEz3dDRBCCCHEsU2CESGEEEKklQQjQgghhEgrCUaEEEIIkVYSjAghhBAirSQYEUIIIURaSTAihBBCiLSyp7sByTBNk4MHD5KVlYWmaelujhBCCCGSoJSipaWFESNGoOvd938cEcHIwYMHGT16dLqbIYQQQog+KC8vZ9SoUd0+f0QEI1lZWYD1YrKzs9PcGiGEEEIko7m5mdGjR8ev4905IoKR2NBMdna2BCNCCCHEEaa3FAtJYBVCCCFEWkkwIoQQQoi0kmBECCGEEGl1ROSMCCHE0cowDMLhcLqbIUSfOBwObDZbv48jwYgQQqSBUorKykoaGxvT3RQh+iU3N5eSkpJ+1QGTYEQIIdIgFogUFRXh9XqloKM44iil8Pl8VFdXAzB8+PA+H0uCESGEOMwMw4gHIgUFBelujhB95vF4AKiurqaoqKjPQzaSwCqEEIdZLEfE6/WmuSVC9F/sc9yf3CcJRoQQIk1kaEYcDQbicyzBiBBCCCHSSnJGhBBiCKkuq6GptuWwnCunMIuiMcMOy7mE6IkEI0IIMURUl9WwcMp1hAOHp+6Iw+3gsa0PHBEBiaZpPP/881x00UXpbsqgW7lyJfPmzaOhoYHc3Nx0N+ewkGEaIYQYIppqWw5bIAIQDoRT6oWpqanhu9/9LmPGjMHlclFSUsKCBQtYtWrVILby6HbWWWdx/fXXJzx22mmnUVFRQU5OTnoalQbSMyKEECIpX/7ylwmFQjz++OOMHz+eqqoqVqxYQV1dXbqb1iehUAin0znkzu10OikpKTnMLUov6RkRQgjRq8bGRt555x1+/etfM2/ePMaOHcvs2bO5+eab+eIXv5iw3dVXX82wYcPIzs7m7LPPZuPGjQnHevHFF5k5cyZut5vx48ezbNkyIpFI/PkdO3Zwxhln4Ha7mTZtGq+//nqv7TvrrLNYvHgxixcvJicnh8LCQm655RaUUvFtSktL+cUvfsFll11GdnY23/72twF47rnnOP7443G5XJSWlnLPPfckHDu239e//nUyMjIYOXIkDz74YMI2ZWVlXHjhhWRmZpKdnc3XvvY1qqqq4s/fdtttzJgxgz/96U+MGzcOt9vNwoULeeutt3jggQfQNA1N09i7dy8rV65E07SE6rzJtPH222/nyiuvJCsrizFjxvDHP/6x1/dtqJBgRAghRK8yMzPJzMzkhRdeIBgMdrvdV7/6Vaqrq/nXv/7F2rVrmTlzJueccw719fUAvPPOO1x22WVcd911bN68mT/84Q889thj/OpXvwLANE0uvvhinE4n77//Pg8//DA33nhjUm18/PHHsdvtrFmzhgceeIB7772XP/3pTwnb3H333UyfPp3169dzyy23sHbtWr72ta9x6aWX8vHHH3Pbbbdxyy238NhjjyXs95vf/Ca+30033cR1110XD5JM0+TCCy+kvr6et956i9dff53du3dzySWXJBxj586dPPfcc/zjH/9gw4YNPPDAA8ydO5dFixZRUVFBRUUFo0eP7vS6km3jPffcw6xZs1i/fj3XXnst3/3ud9m2bVtS7126yTCNEEKIXtntdh577DEWLVrEww8/zMyZMznzzDO59NJLOfHEEwF49913WbNmDdXV1bhcLsC6+L/wwgs8++yzfPvb32bZsmXcdNNNXH755QCMHz+eX/ziF/zkJz9h6dKlvPHGG2zdupV///vfjBgxAoDbb7+d8847r9c2jh49mvvuuw9N05g8eTIff/wx9913H4sWLYpvc/bZZ/OjH/0o/u9vfvObnHPOOdxyyy0ATJo0ic2bN/Ob3/yGhQsXxrc7/fTTuemmm+LbrFq1ivvuu49zzz2XFStW8PHHH7Nnz554MPHXv/6V448/ng8++IBTTjkFsIZm/vrXvzJsWHvCsNPpxOv19jgsc++99ybVxvPPP59rr70WgBtvvJH77ruPN998k8mTJ/f63qWb9IwIIYRIype//GUOHjzISy+9xOc+9zlWrlzJzJkz43foGzdupLW1lYKCgnhPSmZmJnv27GHXrl3xbX7+858nPB/rGfD5fGzZsoXRo0fHAxGAuXPnJtW+U089NaEA19y5c9mxYweGYcQfmzVrVsI+W7Zs4fTTT0947PTTT++036FtmDt3Llu2bIkfY/To0Qm9GtOmTSM3Nze+DcDYsWMTApFkJdvGWFAI1uyjkpKS+LoxQ13KPSNvv/02v/nNb1i7di0VFRUpTbVatWoVZ555JieccAIbNmxI9dRCCCHSzO12c+6553Luuedyyy23cPXVV7N06VIWLlxIa2srw4cPZ+XKlZ32i01RbW1tZdmyZVx88cVdHnuwZWRkDPo50nVuh8OR8G9N0zBNc1DPOVBSDkba2tqYPn06V155ZZcfpu40NjZy2WWXcc455yQk9QghhDhyTZs2jRdeeAGAmTNnUllZid1up7S0tMvtZ86cybZt25gwYUKXz0+dOpXy8nIqKiriq8C+9957SbXl/fffT/j3e++9x8SJE3tcvG3q1KmdpiavWrWKSZMmJex3aBvee+89pk6dmtDm8vLyeO/I5s2baWxsZNq0aT222el0JvRu9KeNR7KUg5HzzjsvqbG7Q11zzTV84xvfwGazxT+4Qgghjgx1dXV89atf5corr+TEE08kKyuLDz/8kLvuuosLL7wQgPnz5zN37lwuuugi7rrrLiZNmsTBgwd55ZVX+NKXvsSsWbO49dZb+cIXvsCYMWP4yle+gq7rbNy4kU2bNvHLX/6S+fPnM2nSJC6//HJ+85vf0NzczE9/+tOk2lhWVsaSJUv4zne+w7p16/jtb3/badbJoX70ox9xyimn8Itf/IJLLrmE1atX87vf/Y7f//73CdutWrWKu+66i4suuojXX3+dZ555hldeeSX+uj/1qU/xzW9+k/vvv59IJMK1117LmWee2WlY6FClpaW8//777N27l8zMTPLz8/vcxiPZYckZefTRR9m9ezdLly5NavtgMEhzc3PCjxBCHO1yCrNwuB29bzhAHG4HOYVZSW2bmZnJnDlzuO+++zjjjDM44YQTuOWWW1i0aBG/+93vAGtYYPny5ZxxxhlcccUVTJo0iUsvvZR9+/ZRXFwMwIIFC3j55Zd57bXXOOWUUzj11FO57777GDt2LAC6rvP888/j9/uZPXs2V199dXymTW8uu+yy+H7f+973uO666+LTd7szc+ZMnn76aZ588klOOOEEbr31Vn7+858nJIaCFRB8+OGHnHTSSfzyl7/k3nvvZcGCBfHX/eKLL5KXl8cZZ5zB/PnzGT9+PE899VSvbf7xj3+MzWZj2rRpDBs2jLKysj638UimqY6TsFPdOYnyvDt27ODTn/4077zzDpMmTeK2227jhRde6DFn5LbbbmPZsmWdHm9qaiI7O7uvzRVCiCEhEAiwZ8+eeL2JjmRtmr4566yzmDFjBvfff/+AH7u0tJTrr7++U6VUYenp89zc3ExOTk6v1+9BndprGAbf+MY3WLZsGZMmTUp6v5tvvpklS5bE/93c3Nzl3GshhDjaFI0ZdtQECEIka1CDkZaWFj788EPWr1/P4sWLAas4jFIKu93Oa6+9xtlnn91pP5fLFZ+jLoQQQoij26AGI9nZ2Xz88ccJj/3+97/nP//5D88++yzjxo0bzNMLIYQ4RnQ1nXig7N27d9COLSwpByOtra3s3Lkz/u89e/awYcMG8vPzGTNmDDfffDMHDhzgr3/9K7quc8IJJyTsX1RUhNvt7vS4EEIIIY5NKQcjH374IfPmzYv/O5bbcfnll/PYY49RUVHRZTawEEIIIURX+jWb5nBJNhtXCCGOBD3NPhDiSDMQs2lkbRohhBBCpJUEI0IIIYRIq0GdTSOEECI1FfXNNLb6D8u5cjM9DM8f2kPfK1euZN68eTQ0NMQX2zuaJVMY9GgkwYgQQgwRFfXNfGnpY4QiPS+cNlCcdhvPL1uYdECycOFCHn/88U6P79ixo9uF70T3uqpi/uMf/5jvf//76WtUmsgwjRBCDBGNrf7DFogAhCJGyr0wn/vc56ioqEj4ORJrRoXD4bSdOxQKdftcZmYmBQUFh7E1Q4MEI0IIIZLmcrkoKSlJ+IktY//WW28xe/ZsXC4Xw4cP56abbiISicT3DQaD/OAHP4jXm/r0pz/NBx98kHD85cuXM2nSJDweD/PmzUuq4JimaTz00EOcd955eDwexo8fz7PPPht/fu/evWiaxlNPPcWZZ56J2+3miSeewDRNfv7znzNq1ChcLhczZszg1Vdf7bTfk08+yWmnnRavkfXWW28lnL+3133WWWexePFirr/+egoLC1mwYAGlpaUAfOlLX0LTtPi/b7vtNmbMmBHfN9k2/uMf/2DevHl4vV6mT5/O6tWre33fhhIJRoQQQvTbgQMHOP/88znllFPYuHEjDz30EH/+85/55S9/Gd/mJz/5Cc899xyPP/4469atY8KECSxYsID6+noAysvLufjii7ngggvYsGEDV199NTfddFNS57/lllv48pe/zMaNG/nmN7/JpZdeypYtWxK2uemmm7juuuvYsmULCxYs4IEHHuCee+7h7rvv5qOPPmLBggV88YtfZMeOHQn73XDDDfzoRz9i/fr1zJ07lwsuuIC6urqkXzfA448/jtPpZNWqVTz88MPxIOzRRx+loqKiU1AWk2wbf/rTn/LjH/+YDRs2MGnSJL7+9a8nBERDnQQjQgghkvbyyy+TmZkZ//nqV78KWEt9jB49mt/97ndMmTKFiy66iGXLlnHPPfdgmiZtbW089NBD/OY3v+G8885j2rRpPPLII3g8Hv785z8D8NBDD3Hcccdxzz33MHnyZL75zW+ycOHCpNr11a9+lauvvppJkybxi1/8glmzZvHb3/42YZvrr7+eiy++mHHjxjF8+HDuvvtubrzxRi699FImT57Mr3/96y5X/l28eDFf/vKXmTp1Kg899BA5OTnxNvf2umMmTpzIXXfdxeTJk5k8eTLDhlmLIebm5lJSUhL/96GSbeOPf/xjPv/5zzNp0iSWLVvGvn37EqqlD3WSwCqEECJp8+bN46GHHor/OyMjA4AtW7Ywd+5cNE2LP3f66afT2trK/v37aWxsJBwOc/rpp8efdzgczJ49O96DsWXLFubMmZNwvrlz5ybVrkO3mzt3bqcZKbNmzYr/vbm5mYMHDya0J9bmjRs3dntsu93OrFmzEtrc0+seM2YMACeffHJSr6OjVNp44oknxv8+fPhwAKqrq5kyZUrK500HCUaEEEIkLSMj44idORMLnI7GczscjvjfY4FRx56ZoU6GaYQQQvTb1KlTWb16NR1XGFm1ahVZWVmMGjWK4447Lp4zERMOh/nggw+YNm1a/Bhr1qxJOO57772X1PkP3e69995j6tSp3W6fnZ3NiBEjEtoTa3OsPV0dOxKJsHbt2vixe3vdPXE4HBhG97OnUmnjkU6CESGEEP127bXXUl5ezve//322bt3Kiy++yNKlS1myZAm6rpORkcF3v/tdbrjhBl599VU2b97MokWL8Pl8XHXVVQBcc8017NixgxtuuIFt27bxt7/9jcceeyyp8z/zzDP85S9/Yfv27SxdupQ1a9awePHiHve54YYb+PWvf81TTz3Ftm3buOmmm9iwYQPXXXddwnYPPvggzz//PFu3buV7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hq985Svous7GjRvZtGkTv/zlL5k/fz5z587loosu4q677mLSpEkcPHiQV155hS996UvMmjWL6667joULFzJr1ixOP/10nnjiCT755BPGjx/f6/l//vOfU1BQQHFxMT/96U8pLCzkoosu6nb7iRMncuGFF7Jo0SL+8Ic/kJWVxU033cTIkSO58MIL49s5HA6+//3v8//+3//DbrezePFiTj31VGbPng1YibNf+9rXOOmkk5g/fz7//Oc/+cc//sEbb7zRY3vHjh2Lpmm8/PLLnH/++Xg8HjIzM/vUxqOB9IwIIYTotwULFvDyyy/z2muvccopp3Dqqady3333MXbsWMAaOli+fDlnnHEGV1xxBZMmTeLSSy9l3759FBcXA3DJJZdwyy238JOf/ISTTz6Zffv28d3vfjep8995551cd911nHzyyVRWVvLPf/4z3vvQnUcffZSTTz6ZL3zhC8ydOxelFMuXL08Y9vB6vdx444184xvf4PTTTyczM5Onnnoq/vxFF13EAw88wN13383xxx/PH/7wBx599FHOOuusHs89cuTIeNJvcXExixcv7nMbjwaaOgIGlpqbm8nJyaGpqYns7Ox0N0cIIfolEAiwZ88exo0bh9vtjj8+1CuwDkXdVTIdCI899hjXX389jY2NA3rco013n2dI/votwzRCCDFElHhyefYzS2RtGnHMkWBECCGGkBJPrgQI4pgjOSNCCCGOWGeddRZKqUGZHrxw4UIZojlMUg5G3n77bS644AJGjBiBpmkJVeC68o9//INzzz03vhbB3Llz+fe//93X9gohhBDiKJNyMNLW1sb06dN58MEHk9r+7bff5txzz2X58uWsXbuWefPmccEFF7B+/fqUGyuEEEKIo0/KOSPnnXce5513XtLb33///Qn/vv3223nxxRf55z//yUknnZTq6YUQQghxlDnsCaymadLS0hJfJKgrwWCQYDAY/3dzc/PhaJoQQggh0uCwJ7DefffdtLa28rWvfa3bbe644w5ycnLiP6NHjz6MLRRCCCHE4XRYg5G//e1vLFu2jKeffpqioqJut7v55ptpamqK/5SXlx/GVgohhBDicDpswzRPPvkkV199Nc888wzz58/vcVuXy4XL5TpMLRNCiKFDGQfBbDg8J9Pz0GwjDs+5xGG3d+9exo0bx/r165kxY0a6m9OjwxKM/P3v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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "use_proportions.set_index('Start year')[['Seed proportion', 'Food proportion', 'Feed proportion', 'Exports proportion']].plot.area(stacked=True, ylim=(0, 1.5), colormap='viridis')" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "ec316f8f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "bigframes.dataframe.DataFrame" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(use_proportions)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "6bf0e0b2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rowindexStart yearSeed proportionFood proportionFeed proportionExports proportion
001950<NA>0.5609280.1054160.333656
111951<NA>0.4957630.093220.411017
221952<NA>0.585020.0789470.336032
331953<NA>0.6487750.1015170.249708
441954<NA>0.6330280.060780.306193
.....................
7125620210.030160.5077690.046140.415931
7226220220.0364410.5179070.0402430.405409
7326820230.0341870.529680.0471750.388957
7427420240.0310250.4922910.057310.419374
7528020250.0301750.4767770.0493050.443743
\n", + "

76 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " rowindex Start year Seed proportion Food proportion Feed proportion \\\n", + "0 0 1950 0.560928 0.105416 \n", + "1 1 1951 0.495763 0.09322 \n", + "2 2 1952 0.58502 0.078947 \n", + "3 3 1953 0.648775 0.101517 \n", + "4 4 1954 0.633028 0.06078 \n", + ".. ... ... ... ... ... \n", + "71 256 2021 0.03016 0.507769 0.04614 \n", + "72 262 2022 0.036441 0.517907 0.040243 \n", + "73 268 2023 0.034187 0.52968 0.047175 \n", + "74 274 2024 0.031025 0.492291 0.05731 \n", + "75 280 2025 0.030175 0.476777 0.049305 \n", + "\n", + " Exports proportion \n", + "0 0.333656 \n", + "1 0.411017 \n", + "2 0.336032 \n", + "3 0.249708 \n", + "4 0.306193 \n", + ".. ... \n", + "71 0.415931 \n", + "72 0.405409 \n", + "73 0.388957 \n", + "74 0.419374 \n", + "75 0.443743 \n", + "\n", + "[76 rows x 6 columns]" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pandas_result = use_proportions.to_pandas()\n", + "pandas_result" + ] + }, + { + "cell_type": "markdown", + "id": "7d8aa895", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.14.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 1209cd024db172d5917660d1d206d1498e5a157f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Swe=C3=B1a?= Date: Thu, 7 May 2026 19:20:15 +0000 Subject: [PATCH 2/5] staging --- .../dataframes/magics_with_local_data.ipynb | 740 +----------------- 1 file changed, 42 insertions(+), 698 deletions(-) diff --git a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb index a6bdcaf5541c..449f908c2db3 100644 --- a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb +++ b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb @@ -43,12 +43,10 @@ "output_type": "stream", "text": [ "Requirement already satisfied: python-calamine in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (0.6.2)\n", - "Requirement already satisfied: pandas in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (2.3.3)\n", + "Requirement already satisfied: pandas in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (3.0.2)\n", "Requirement already satisfied: bigframes in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (2.39.0)\n", - "Requirement already satisfied: numpy>=1.26.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2.4.4)\n", + "Requirement already satisfied: numpy>=2.3.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2.4.4)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2.9.0.post0)\n", - "Requirement already satisfied: pytz>=2020.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2026.1.post1)\n", - "Requirement already satisfied: tzdata>=2022.7 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2026.1)\n", "Requirement already satisfied: cloudpickle>=2.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (3.1.2)\n", "Requirement already satisfied: fsspec>=2023.3.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2026.1.0)\n", "Requirement already satisfied: gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2026.1.0)\n", @@ -73,6 +71,7 @@ "Requirement already satisfied: db-dtypes>=1.4.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.5.1)\n", "Requirement already satisfied: pyiceberg>=0.7.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (0.11.1)\n", "Requirement already satisfied: atpublic<6,>=2.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (5.1)\n", + "Requirement already satisfied: pytz>=2022.7 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2026.1.post1)\n", "Requirement already satisfied: toolz<2,>=0.11 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.1.0)\n", "Requirement already satisfied: typing-extensions<5,>=4.5.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (4.15.0)\n", "Requirement already satisfied: rich<14,>=12.4.4 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (13.9.4)\n", @@ -94,6 +93,10 @@ "Requirement already satisfied: cffi>=2.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from cryptography>=38.0.3->google-auth<3.0,>=2.15.0->bigframes) (2.0.0)\n", "Requirement already satisfied: pycparser in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from cffi>=2.0.0->cryptography>=38.0.3->google-auth<3.0,>=2.15.0->bigframes) (3.0)\n", "Requirement already satisfied: packaging>=24.2.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from db-dtypes>=1.4.2->bigframes) (26.0)\n", + "\u001b[33mWARNING: Cache entry deserialization failed, entry ignored\u001b[0m\u001b[33m\n", + "\u001b[0mCollecting pandas\n", + " Using cached pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (91 kB)\n", + "Requirement already satisfied: tzdata>=2022.7 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2026.1)\n", "Requirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (3.13.5)\n", "Requirement already satisfied: decorator>4.1.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (5.2.1)\n", "Requirement already satisfied: google-auth-oauthlib in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (1.3.1)\n", @@ -132,9 +135,13 @@ "Requirement already satisfied: pydantic-core==2.41.5 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pydantic!=2.12.0,!=2.12.1,!=2.4.0,!=2.4.1,<3.0,>=2.0->pyiceberg>=0.7.1->bigframes) (2.41.5)\n", "Requirement already satisfied: typing-inspection>=0.4.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pydantic!=2.12.0,!=2.12.1,!=2.4.0,!=2.4.1,<3.0,>=2.0->pyiceberg>=0.7.1->bigframes) (0.4.2)\n", "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (3.3.1)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m25.3\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m26.0.1\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", + "Using cached pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (12.3 MB)\n", + "Installing collected packages: pandas\n", + " Attempting uninstall: pandas\n", + " Found existing installation: pandas 3.0.2\n", + " Uninstalling pandas-3.0.2:\n", + " Successfully uninstalled pandas-3.0.2\n", + "Successfully installed pandas-2.3.3\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } @@ -153,16 +160,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "--2026-04-09 17:26:58-- https://www.ers.usda.gov/media/5706/wheat-data-all-years.xlsx?v=19753\n", + "--2026-05-07 17:55:50-- https://www.ers.usda.gov/media/5706/wheat-data-all-years.xlsx?v=19753\n", "Resolving www.ers.usda.gov (www.ers.usda.gov)... 20.141.137.224\n", "Connecting to www.ers.usda.gov (www.ers.usda.gov)|20.141.137.224|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", - "Length: 972455 (950K) [application/vnd.openxmlformats-officedocument.spreadsheetml.sheet]\n", + "Length: 814596 (796K) [application/vnd.openxmlformats-officedocument.spreadsheetml.sheet]\n", "Saving to: ‘/tmp/wheat-data.xlsx’\n", "\n", - "/tmp/wheat-data.xls 100%[===================>] 949.66K 1.97MB/s in 0.5s \n", + "/tmp/wheat-data.xls 100%[===================>] 795.50K 2.32MB/s in 0.3s \n", "\n", - "2026-04-09 17:26:59 (1.97 MB/s) - ‘/tmp/wheat-data.xlsx’ saved [972455/972455]\n", + "2026-05-07 17:55:51 (2.32 MB/s) - ‘/tmp/wheat-data.xlsx’ saved [814596/814596]\n", "\n" ] } @@ -173,7 +180,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "id": "469a1b8e", "metadata": {}, "outputs": [ @@ -376,7 +383,7 @@ " \n", " \n", " 291\n", - " Updated: March 13, 2026\n", + " Updated: April 10, 2026\n", " <NA>\n", " <NA>\n", " <NA>\n", @@ -407,7 +414,7 @@ "288 3/ Includes flour and selected other products ... \n", "289 4/ Totals may not add due to rounding. \n", "290 Source: USDA, Economic Research Service, based... \n", - "291 Updated: March 13, 2026 \n", + "291 Updated: April 10, 2026 \n", "\n", " Beginning stocks Production Imports Total supply 3/ 4/ Food use \\\n", "0 496.0 1019.0 11 1526.0 580.0 \n", @@ -451,7 +458,7 @@ "[292 rows x 13 columns]" ] }, - "execution_count": 9, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -476,7 +483,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 5, "id": "a06b58d9", "metadata": {}, "outputs": [ @@ -695,7 +702,7 @@ " \n", " \n", " 291\n", - " Updated: March 13, 2026\n", + " Updated: April 10, 2026\n", " <NA>\n", " <NA>\n", " <NA>\n", @@ -727,7 +734,7 @@ "288 3/ Includes flour and selected other products ... \n", "289 4/ Totals may not add due to rounding. \n", "290 Source: USDA, Economic Research Service, based... \n", - "291 Updated: March 13, 2026 \n", + "291 Updated: April 10, 2026 \n", "\n", " Beginning stocks Production Imports Total supply 3 4 Food use \\\n", "rowindex \n", @@ -774,7 +781,7 @@ "[292 rows x 13 columns]" ] }, - "execution_count": 23, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -797,7 +804,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "04363cc5", "metadata": {}, "outputs": [], @@ -812,292 +819,16 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 7, "id": "3b9a46d7", "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "Load job f629ac7a-132f-4f8b-80c6-143b87f9f6f4 is DONE. Open Job" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - " Query processed 33.4 kB in a moment of slot time.\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Start yearSeed userowindexType 2Beginning stocksProductionImportsTotal supply 3 4Food useFeed and residual useTotal domestic use 4ExportsTotal disappearance 4Ending stocks
01950<NA>0All wheat496.01019.0111526.0580.0109.0689.0345.01034.0492.0
11951<NA>1All wheat492.0988.0301510.0585.0110.0695.0485.01180.0330.0
21952<NA>2All wheat330.01306.0241660.0578.078.0656.0332.0988.0672.0
31953<NA>3All wheat672.01173.061851.0556.087.0643.0214.0857.0994.0
41954<NA>4All wheat994.0984.031981.0552.053.0605.0267.0872.01109.0
51955<NA>5All wheat1109.0937.0102056.0553.051.0604.0322.0926.01130.0
61956<NA>6All wheat1130.01005.082143.0541.057.0598.0541.01139.01004.0
71957<NA>7All wheat1004.0956.0101970.0547.043.0590.0418.01008.0962.0
81958<NA>8All wheat962.01457.082427.0561.048.0609.0450.01059.01368.0
91959<NA>9All wheat1368.01118.072493.0558.049.0607.0502.01109.01384.0
\n", - "

10 rows × 14 columns

\n", - "
[292 rows x 14 columns in total]" - ], - "text/plain": [ - " Start year Seed use rowindex Type 2 Beginning stocks Production \\\n", - "0 1950 0 All wheat 496.0 1019.0 \n", - "1 1951 1 All wheat 492.0 988.0 \n", - "2 1952 2 All wheat 330.0 1306.0 \n", - "3 1953 3 All wheat 672.0 1173.0 \n", - "4 1954 4 All wheat 994.0 984.0 \n", - "5 1955 5 All wheat 1109.0 937.0 \n", - "6 1956 6 All wheat 1130.0 1005.0 \n", - "7 1957 7 All wheat 1004.0 956.0 \n", - "8 1958 8 All wheat 962.0 1457.0 \n", - "9 1959 9 All wheat 1368.0 1118.0 \n", - "\n", - " Imports Total supply 3 4 Food use Feed and residual use \\\n", - "0 11 1526.0 580.0 109.0 \n", - "1 30 1510.0 585.0 110.0 \n", - "2 24 1660.0 578.0 78.0 \n", - "3 6 1851.0 556.0 87.0 \n", - "4 3 1981.0 552.0 53.0 \n", - "5 10 2056.0 553.0 51.0 \n", - "6 8 2143.0 541.0 57.0 \n", - "7 10 1970.0 547.0 43.0 \n", - "8 8 2427.0 561.0 48.0 \n", - "9 7 2493.0 558.0 49.0 \n", - "\n", - " Total domestic use 4 Exports Total disappearance 4 Ending stocks \n", - "0 689.0 345.0 1034.0 492.0 \n", - "1 695.0 485.0 1180.0 330.0 \n", - "2 656.0 332.0 988.0 672.0 \n", - "3 643.0 214.0 857.0 994.0 \n", - "4 605.0 267.0 872.0 1109.0 \n", - "5 604.0 322.0 926.0 1130.0 \n", - "6 598.0 541.0 1139.0 1004.0 \n", - "7 590.0 418.0 1008.0 962.0 \n", - "8 609.0 450.0 1059.0 1368.0 \n", - "9 607.0 502.0 1109.0 1384.0 \n", - "...\n", - "\n", - "[292 rows x 14 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" + "name": "stderr", + "output_type": "stream", + "text": [ + "UsageError: Cell magic `%%bqsql` not found.\n" + ] } ], "source": [ @@ -1112,182 +843,10 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "id": "0a3c3e22", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " Query processed 19.0 kB in a moment of slot time.\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
rowindexStart yearSeed proportionFood proportionFeed proportionExports proportion
001950<NA>0.5609280.1054160.333656
111951<NA>0.4957630.093220.411017
221952<NA>0.585020.0789470.336032
331953<NA>0.6487750.1015170.249708
441954<NA>0.6330280.060780.306193
551955<NA>0.5971920.0550760.347732
661956<NA>0.4749780.0500440.474978
771957<NA>0.5426590.0426590.414683
881958<NA>0.5297450.0453260.424929
991959<NA>0.5031560.0441840.45266
\n", - "

10 rows × 6 columns

\n", - "
[76 rows x 6 columns in total]" - ], - "text/plain": [ - " rowindex Start year Seed proportion Food proportion Feed proportion \\\n", - "0 0 1950 0.560928 0.105416 \n", - "1 1 1951 0.495763 0.09322 \n", - "2 2 1952 0.58502 0.078947 \n", - "3 3 1953 0.648775 0.101517 \n", - "4 4 1954 0.633028 0.06078 \n", - "5 5 1955 0.597192 0.055076 \n", - "6 6 1956 0.474978 0.050044 \n", - "7 7 1957 0.542659 0.042659 \n", - "8 8 1958 0.529745 0.045326 \n", - "9 9 1959 0.503156 0.044184 \n", - "\n", - " Exports proportion \n", - "0 0.333656 \n", - "1 0.411017 \n", - "2 0.336032 \n", - "3 0.249708 \n", - "4 0.306193 \n", - "5 0.347732 \n", - "6 0.474978 \n", - "7 0.414683 \n", - "8 0.424929 \n", - "9 0.45266 \n", - "...\n", - "\n", - "[76 rows x 6 columns]" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "%%bqsql use_proportions\n", "SELECT\n", @@ -1304,245 +863,30 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "id": "8a158619", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " Query processed 0 Bytes in a moment of slot time.\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGwCAYAAAB7MGXBAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAnwJJREFUeJzs3XecXFX9+P/XvdNne8nupm9COkhCCAkBBQLBCIogFlA/QihRxCgYReCjEGIBROpXERQV8PNDqVKEiEAklBgIpEFIr7tJtvfd6fee3x93ZnYn22a2ZDbJ+/l47CPJzC1nJrNz3/ec93kfTSmlEEIIIYRIEz3dDRBCCCHEsU2CESGEEEKklQQjQgghhEgrCUaEEEIIkVYSjAghhBAirSQYEUIIIURaSTAihBBCiLSyp7sByTBNk4MHD5KVlYWmaelujhBCCCGSoJSipaWFESNGoOvd938cEcHIwYMHGT16dLqbIYQQQog+KC8vZ9SoUd0+f0QEI1lZWYD1YrKzs9PcGiGEEEIko7m5mdGjR8ev4905IoKR2NBMdna2BCNCCCHEEaa3FAtJYBVCCCFEWkkwIoQQQoi0kmBECCGEEGl1ROSMCCHE0cowDMLhcLqbIUSfOBwObDZbv48jwYgQQqSBUorKykoaGxvT3RQh+iU3N5eSkpJ+1QGTYEQIIdIgFogUFRXh9XqloKM44iil8Pl8VFdXAzB8+PA+H0uCESGEOMwMw4gHIgUFBelujhB95vF4AKiurqaoqKjPQzaSwCqEEIdZLEfE6/WmuSVC9F/sc9yf3CcJRoQQIk1kaEYcDQbicyzBiBBCCCHSSnJGhBBiCKkuq6GptuWwnCunMIuiMcMOy7mE6IkEI0IIMURUl9WwcMp1hAOHp+6Iw+3gsa0PHBEBiaZpPP/881x00UXpbsqgW7lyJfPmzaOhoYHc3Nx0N+ewkGEaIYQYIppqWw5bIAIQDoRT6oWpqanhu9/9LmPGjMHlclFSUsKCBQtYtWrVILby6HbWWWdx/fXXJzx22mmnUVFRQU5OTnoalQbSMyKEECIpX/7ylwmFQjz++OOMHz+eqqoqVqxYQV1dXbqb1iehUAin0znkzu10OikpKTnMLUov6RkRQgjRq8bGRt555x1+/etfM2/ePMaOHcvs2bO5+eab+eIXv5iw3dVXX82wYcPIzs7m7LPPZuPGjQnHevHFF5k5cyZut5vx48ezbNkyIpFI/PkdO3Zwxhln4Ha7mTZtGq+//nqv7TvrrLNYvHgxixcvJicnh8LCQm655RaUUvFtSktL+cUvfsFll11GdnY23/72twF47rnnOP7443G5XJSWlnLPPfckHDu239e//nUyMjIYOXIkDz74YMI2ZWVlXHjhhWRmZpKdnc3XvvY1qqqq4s/fdtttzJgxgz/96U+MGzcOt9vNwoULeeutt3jggQfQNA1N09i7dy8rV65E07SE6rzJtPH222/nyiuvJCsrizFjxvDHP/6x1/dtqJBgRAghRK8yMzPJzMzkhRdeIBgMdrvdV7/6Vaqrq/nXv/7F2rVrmTlzJueccw719fUAvPPOO1x22WVcd911bN68mT/84Q889thj/OpXvwLANE0uvvhinE4n77//Pg8//DA33nhjUm18/PHHsdvtrFmzhgceeIB7772XP/3pTwnb3H333UyfPp3169dzyy23sHbtWr72ta9x6aWX8vHHH3Pbbbdxyy238NhjjyXs95vf/Ca+30033cR1110XD5JM0+TCCy+kvr6et956i9dff53du3dzySWXJBxj586dPPfcc/zjH/9gw4YNPPDAA8ydO5dFixZRUVFBRUUFo0eP7vS6km3jPffcw6xZs1i/fj3XXnst3/3ud9m2bVtS7126yTCNEEKIXtntdh577DEWLVrEww8/zMyZMznzzDO59NJLOfHEEwF49913WbNmDdXV1bhcLsC6+L/wwgs8++yzfPvb32bZsmXcdNNNXH755QCMHz+eX/ziF/zkJz9h6dKlvPHGG2zdupV///vfjBgxAoDbb7+d8847r9c2jh49mvvuuw9N05g8eTIff/wx9913H4sWLYpvc/bZZ/OjH/0o/u9vfvObnHPOOdxyyy0ATJo0ic2bN/Ob3/yGhQsXxrc7/fTTuemmm+LbrFq1ivvuu49zzz2XFStW8PHHH7Nnz554MPHXv/6V448/ng8++IBTTjkFsIZm/vrXvzJsWHvCsNPpxOv19jgsc++99ybVxvPPP59rr70WgBtvvJH77ruPN998k8mTJ/f63qWb9IwIIYRIype//GUOHjzISy+9xOc+9zlWrlzJzJkz43foGzdupLW1lYKCgnhPSmZmJnv27GHXrl3xbX7+858nPB/rGfD5fGzZsoXRo0fHAxGAuXPnJtW+U089NaEA19y5c9mxYweGYcQfmzVrVsI+W7Zs4fTTT0947PTTT++036FtmDt3Llu2bIkfY/To0Qm9GtOmTSM3Nze+DcDYsWMTApFkJdvGWFAI1uyjkpKS+LoxQ13KPSNvv/02v/nNb1i7di0VFRUpTbVatWoVZ555JieccAIbNmxI9dRCCCHSzO12c+6553Luuedyyy23cPXVV7N06VIWLlxIa2srw4cPZ+XKlZ32i01RbW1tZdmyZVx88cVdHnuwZWRkDPo50nVuh8OR8G9N0zBNc1DPOVBSDkba2tqYPn06V155ZZcfpu40NjZy2WWXcc455yQk9QghhDhyTZs2jRdeeAGAmTNnUllZid1up7S0tMvtZ86cybZt25gwYUKXz0+dOpXy8nIqKiriq8C+9957SbXl/fffT/j3e++9x8SJE3tcvG3q1KmdpiavWrWKSZMmJex3aBvee+89pk6dmtDm8vLyeO/I5s2baWxsZNq0aT222el0JvRu9KeNR7KUg5HzzjsvqbG7Q11zzTV84xvfwGazxT+4Qgghjgx1dXV89atf5corr+TEE08kKyuLDz/8kLvuuosLL7wQgPnz5zN37lwuuugi7rrrLiZNmsTBgwd55ZVX+NKXvsSsWbO49dZb+cIXvsCYMWP4yle+gq7rbNy4kU2bNvHLX/6S+fPnM2nSJC6//HJ+85vf0NzczE9/+tOk2lhWVsaSJUv4zne+w7p16/jtb3/badbJoX70ox9xyimn8Itf/IJLLrmE1atX87vf/Y7f//73CdutWrWKu+66i4suuojXX3+dZ555hldeeSX+uj/1qU/xzW9+k/vvv59IJMK1117LmWee2WlY6FClpaW8//777N27l8zMTPLz8/vcxiPZYckZefTRR9m9ezdLly5NavtgMEhzc3PCjxBCHO1yCrNwuB29bzhAHG4HOYVZSW2bmZnJnDlzuO+++zjjjDM44YQTuOWWW1i0aBG/+93vAGtYYPny5ZxxxhlcccUVTJo0iUsvvZR9+/ZRXFwMwIIFC3j55Zd57bXXOOWUUzj11FO57777GDt2LAC6rvP888/j9/uZPXs2V199dXymTW8uu+yy+H7f+973uO666+LTd7szc+ZMnn76aZ588klOOOEEbr31Vn7+858nJIaCFRB8+OGHnHTSSfzyl7/k3nvvZcGCBfHX/eKLL5KXl8cZZ5zB/PnzGT9+PE899VSvbf7xj3+MzWZj2rRpDBs2jLKysj638UimqY6TsFPdOYnyvDt27ODTn/4077zzDpMmTeK2227jhRde6DFn5LbbbmPZsmWdHm9qaiI7O7uvzRVCiCEhEAiwZ8+eeL2JjmRtmr4566yzmDFjBvfff/+AH7u0tJTrr7++U6VUYenp89zc3ExOTk6v1+9BndprGAbf+MY3WLZsGZMmTUp6v5tvvpklS5bE/93c3Nzl3GshhDjaFI0ZdtQECEIka1CDkZaWFj788EPWr1/P4sWLAas4jFIKu93Oa6+9xtlnn91pP5fLFZ+jLoQQQoij26AGI9nZ2Xz88ccJj/3+97/nP//5D88++yzjxo0bzNMLIYQ4RnQ1nXig7N27d9COLSwpByOtra3s3Lkz/u89e/awYcMG8vPzGTNmDDfffDMHDhzgr3/9K7quc8IJJyTsX1RUhNvt7vS4EEIIIY5NKQcjH374IfPmzYv/O5bbcfnll/PYY49RUVHRZTawEEIIIURX+jWb5nBJNhtXCCGOBD3NPhDiSDMQs2lkbRohhBBCpJUEI0IIIYRIq0GdTSOEECI1FfXNNLb6D8u5cjM9DM8f2kPfK1euZN68eTQ0NMQX2zuaJVMY9GgkwYgQQgwRFfXNfGnpY4QiPS+cNlCcdhvPL1uYdECycOFCHn/88U6P79ixo9uF70T3uqpi/uMf/5jvf//76WtUmsgwjRBCDBGNrf7DFogAhCJGyr0wn/vc56ioqEj4ORJrRoXD4bSdOxQKdftcZmYmBQUFh7E1Q4MEI0IIIZLmcrkoKSlJ+IktY//WW28xe/ZsXC4Xw4cP56abbiISicT3DQaD/OAHP4jXm/r0pz/NBx98kHD85cuXM2nSJDweD/PmzUuq4JimaTz00EOcd955eDwexo8fz7PPPht/fu/evWiaxlNPPcWZZ56J2+3miSeewDRNfv7znzNq1ChcLhczZszg1Vdf7bTfk08+yWmnnRavkfXWW28lnL+3133WWWexePFirr/+egoLC1mwYAGlpaUAfOlLX0LTtPi/b7vtNmbMmBHfN9k2/uMf/2DevHl4vV6mT5/O6tWre33fhhIJRoQQQvTbgQMHOP/88znllFPYuHEjDz30EH/+85/55S9/Gd/mJz/5Cc899xyPP/4469atY8KECSxYsID6+noAysvLufjii7ngggvYsGEDV199NTfddFNS57/lllv48pe/zMaNG/nmN7/JpZdeypYtWxK2uemmm7juuuvYsmULCxYs4IEHHuCee+7h7rvv5qOPPmLBggV88YtfZMeOHQn73XDDDfzoRz9i/fr1zJ07lwsuuIC6urqkXzfA448/jtPpZNWqVTz88MPxIOzRRx+loqKiU1AWk2wbf/rTn/LjH/+YDRs2MGnSJL7+9a8nBERDnQQjQgghkvbyyy+TmZkZ//nqV78KWEt9jB49mt/97ndMmTKFiy66iGXLlnHPPfdgmiZtbW089NBD/OY3v+G8885j2rRpPPLII3g8Hv785z8D8NBDD3Hcccdxzz33MHnyZL75zW+ycOHCpNr11a9+lauvvppJkybxi1/8glmzZvHb3/42YZvrr7+eiy++mHHjxjF8+HDuvvtubrzxRi699FImT57Mr3/96y5X/l28eDFf/vKXmTp1Kg899BA5OTnxNvf2umMmTpzIXXfdxeTJk5k8eTLDhlmLIebm5lJSUhL/96GSbeOPf/xjPv/5zzNp0iSWLVvGvn37EqqlD3WSwCqEECJp8+bN46GHHor/OyMjA4AtW7Ywd+5cNE2LP3f66afT2trK/v37aWxsJBwOc/rpp8efdzgczJ49O96DsWXLFubMmZNwvrlz5ybVrkO3mzt3bqcZKbNmzYr/vbm5mYMHDya0J9bmjRs3dntsu93OrFmzEtrc0+seM2YMACeffHJSr6OjVNp44oknxv8+fPhwAKqrq5kyZUrK500HCUaEEEIkLSMj44idORMLnI7GczscjvjfY4FRx56ZoU6GaYQQQvTb1KlTWb16NR1XGFm1ahVZWVmMGjWK4447Lp4zERMOh/nggw+YNm1a/Bhr1qxJOO57772X1PkP3e69995j6tSp3W6fnZ3NiBEjEtoTa3OsPV0dOxKJsHbt2vixe3vdPXE4HBhG97OnUmnjkU6CESGEEP127bXXUl5ezve//322bt3Kiy++yNKlS1myZAm6rpORkcF3v/tdbrjhBl599VU2b97MokWL8Pl8XHXVVQBcc8017NixgxtuuIFt27bxt7/9jcceeyyp8z/zzDP85S9/Yfv27SxdupQ1a9awePHiHve54YYb+PWvf81TTz3Ftm3buOmmm9iwYQPXXXddwnYPPvggzz//PFu3buV7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hq985Svous7GjRvZtGkTv/zlL5k/fz5z587loosu4q677mLSpEkcPHiQV155hS996UvMmjWL6667joULFzJr1ixOP/10nnjiCT755BPGjx/f6/l//vOfU1BQQHFxMT/96U8pLCzkoosu6nb7iRMncuGFF7Jo0SL+8Ic/kJWVxU033cTIkSO58MIL49s5HA6+//3v8//+3//DbrezePFiTj31VGbPng1YibNf+9rXOOmkk5g/fz7//Oc/+cc//sEbb7zRY3vHjh2Lpmm8/PLLnH/++Xg8HjIzM/vUxqOB9IwIIYTotwULFvDyyy/z2muvccopp3Dqqady3333MXbsWMAaOli+fDlnnHEGV1xxBZMmTeLSSy9l3759FBcXA3DJJZdwyy238JOf/ISTTz6Zffv28d3vfjep8995551cd911nHzyyVRWVvLPf/4z3vvQnUcffZSTTz6ZL3zhC8ydOxelFMuXL08Y9vB6vdx444184xvf4PTTTyczM5Onnnoq/vxFF13EAw88wN13383xxx/PH/7wBx599FHOOuusHs89cuTIeNJvcXExixcv7nMbjwaaOgIGlpqbm8nJyaGpqYns7Ox0N0cIIfolEAiwZ88exo0bh9vtjj8+1CuwDkXdVTIdCI899hjXX389jY2NA3rco013n2dI/votwzRCCDFElHhyefYzS2RtGnHMkWBECCGGkBJPrgQI4pgjOSNCCCGOWGeddRZKqUGZHrxw4UIZojlMUg5G3n77bS644AJGjBiBpmkJVeC68o9//INzzz03vhbB3Llz+fe//93X9gohhBDiKJNyMNLW1sb06dN58MEHk9r+7bff5txzz2X58uWsXbuWefPmccEFF7B+/fqUGyuEEEKIo0/KOSPnnXce5513XtLb33///Qn/vv3223nxxRf55z//yUknnZTq6YUQQghxlDnsCaymadLS0hJfJKgrwWCQYDAY/3dzc/PhaJoQQggh0uCwJ7DefffdtLa28rWvfa3bbe644w5ycnLiP6NHjz6MLRRCCCHE4XRYg5G//e1vLFu2jKeffpqioqJut7v55ptpamqK/5SXlx/GVgohhBDicDpswzRPPvkkV199Nc888wzz58/vcVuXy4XL5TpMLRNCiKFDGQfBbDg8J9Pz0GwjDs+5xGG3d+9exo0bx/r165kxY0a6m9OjwxKM/P3v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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "use_proportions.set_index('Start year')[['Seed proportion', 'Food proportion', 'Feed proportion', 'Exports proportion']].plot.area(stacked=True, ylim=(0, 1.5), colormap='viridis')" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": null, "id": "ec316f8f", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "bigframes.dataframe.DataFrame" - ] - }, - "execution_count": 44, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "type(use_proportions)" ] }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "id": "6bf0e0b2", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
rowindexStart yearSeed proportionFood proportionFeed proportionExports proportion
001950<NA>0.5609280.1054160.333656
111951<NA>0.4957630.093220.411017
221952<NA>0.585020.0789470.336032
331953<NA>0.6487750.1015170.249708
441954<NA>0.6330280.060780.306193
.....................
7125620210.030160.5077690.046140.415931
7226220220.0364410.5179070.0402430.405409
7326820230.0341870.529680.0471750.388957
7427420240.0310250.4922910.057310.419374
7528020250.0301750.4767770.0493050.443743
\n", - "

76 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " rowindex Start year Seed proportion Food proportion Feed proportion \\\n", - "0 0 1950 0.560928 0.105416 \n", - "1 1 1951 0.495763 0.09322 \n", - "2 2 1952 0.58502 0.078947 \n", - "3 3 1953 0.648775 0.101517 \n", - "4 4 1954 0.633028 0.06078 \n", - ".. ... ... ... ... ... \n", - "71 256 2021 0.03016 0.507769 0.04614 \n", - "72 262 2022 0.036441 0.517907 0.040243 \n", - "73 268 2023 0.034187 0.52968 0.047175 \n", - "74 274 2024 0.031025 0.492291 0.05731 \n", - "75 280 2025 0.030175 0.476777 0.049305 \n", - "\n", - " Exports proportion \n", - "0 0.333656 \n", - "1 0.411017 \n", - "2 0.336032 \n", - "3 0.249708 \n", - "4 0.306193 \n", - ".. ... \n", - "71 0.415931 \n", - "72 0.405409 \n", - "73 0.388957 \n", - "74 0.419374 \n", - "75 0.443743 \n", - "\n", - "[76 rows x 6 columns]" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "pandas_result = use_proportions.to_pandas()\n", "pandas_result" @@ -1557,7 +901,7 @@ ], "metadata": { "kernelspec": { - "display_name": "venv", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, From c344b7bb6ef68bec9057cf6cc38bd62af15d469f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Swe=C3=B1a?= Date: Wed, 20 May 2026 22:00:34 +0000 Subject: [PATCH 3/5] draft --- .../dataframes/magics_with_local_data.ipynb | 860 +++++++++++++++++- 1 file changed, 857 insertions(+), 3 deletions(-) diff --git a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb index 449f908c2db3..a008b011f1dc 100644 --- a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb +++ b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb @@ -27,9 +27,57 @@ "id": "71383fa0", "metadata": {}, "source": [ - "# Query local DataFrames with SQL\n", + "# Query `*.xlsx` files with SQL for free\\* using Pandas and BigQuery DataFrames\n", "\n", - "https://www.ers.usda.gov/data-products/wheat-data\n" + "In this tutorial, you'll use SQL query the [USDA wheat data](https://www.ers.usda.gov/data-products/wheat-data), which is distributed as files in the [Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML file format](https://learn.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/2c5dee00-eff2-4b22-92b6-0738acd4475e). Because of open source packages like Jupyter, Pandas, and BigQuery DataFrames (aka BigFrames) and the [BigQuery sandbox](https://docs.cloud.google.com/bigquery/docs/sandbox), you should be able to follow all of the steps in this guide for free\\* and without a credit card. \n", + "\n", + "_\\*See the [BigQuery sandbox](https://docs.cloud.google.com/bigquery/docs/sandbox) documentation for limitations._\n", + "\n", + "BigQuery DataFrames aka BigFrames is an open source Python library offered by Google. BigFrames scales Python data processing by transpiling common Python data science APIs to BigQuery SQL. You can read more about BigFrames in the [official introduction to BigFrames](https://dataframes.bigquery.dev/user_guide/index.html) and can refer to the [public git repository for BigFrames](https://github.com/googleapis/google-cloud-python/tree/main/packages/bigframes).\n", + "\n", + "Last year, Google introduced [SQL cells in Colab Enterprise notebooks](https://docs.cloud.google.com/colab/docs/sql-cells), which was a collaboration across several teams, including the BigQuery DataFrames team. Now, with the [%%bqsql cell magics](https://dataframes.bigquery.dev/notebooks/getting_started/magics.html) available in BigQuery DataFrames (aka BigFrames), this same functionality is available to all Jupyter notebook users, whether you're in Colab, Jupyter Lab, or a notebook in VS Code. These magics use BigQuery to query a table or even a local pandas DataFrame.\n", + "\n", + "\n", + "# Getting Started\n", + "\n", + "To get started,\n", + "\n", + "1. Enable the [BigQuery sandbox](https://docs.cloud.google.com/bigquery/docs/sandbox). Make note of your Google Cloud project ID.\n", + "\n", + "2. Set up a local Python development environment (see: [Setting up a Python development environment](https://docs.cloud.google.com/python/docs/setup)) for Google Cloud.\n", + "\n", + "3. Create and activate a venv to isolate Python dependencies. \\\n", + " \\\n", + "On Linux or macOS, use these commands (update to your preferred Python version): \\\n", + "\n", + "\n", + "\n", + "```\n", + "python3.12 -m venv ~/venv\n", + ". ~/venv/bin/activate\n", + "```\n", + "\n", + "\n", + "4. Install the Jupyter, bigframes, and python-calamine packages \\\n", + "\n", + "\n", + "\n", + "```\n", + "pip install --upgrade jupyterlab bigframes python-calamine\n", + "```\n", + "\n", + "\n", + "5. Start Jupyter Lab.\n", + "\n", + "\n", + "```\n", + "jupyter lab\n", + "```\n", + "\n", + "\n", + "6. Open a web browser to the URL listed in the output. It will be something like http://localhost:8888/lab?token=somesupersecretvaluehere .\n", + "\n", + "7. Create a new notebook using the Jupyter Lab UI.\n" ] }, { @@ -150,6 +198,812 @@ "%pip install python-calamine pandas bigframes" ] }, + { + "cell_type": "markdown", + "id": "5ba39d0d", + "metadata": {}, + "source": [ + "## Accessing the data\n", + "\n", + "In this tutorial, you'll analyze the [USDA wheat data](https://www.ers.usda.gov/data-products/wheat-data). Use the requests package to download the data to a temporary file." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "fb1dfdc2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "import tempfile\n", + "\n", + "import requests\n", + "\n", + "url = \"https://www.ers.usda.gov/media/5706/wheat-data-all-years.xlsx?v=52690\"\n", + "\n", + "tmp = tempfile.NamedTemporaryFile(delete=True)\n", + "\n", + "with requests.get(url, stream=True) as r:\n", + " r.raise_for_status()\n", + " for chunk in r.iter_content(chunk_size=8192):\n", + " tmp.write(chunk)\n", + "\n", + "tmp.flush()\n", + "tmp.seek(0)" + ] + }, + { + "cell_type": "markdown", + "id": "50f896bb", + "metadata": {}, + "source": [ + "\n", + "When working with SQL, use the pyarrow dtype_backend for more consistent handling of NULL values. The Table05 sheet provides annual data:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "8a8a137b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Marketing year 1/Time periodBeginning stocksProductionImports 2/Total supply 3/Food useSeed useFeed and residual useTotal domestic use 3/Exports 2/Total disappearance 3/Ending stocks
01950/51MY Jun-May496.01019.011.01526.0580.0--109.0689.0345.01034.0492.0
11951/52MY Jun-May492.0988.030.01510.0585.0--110.0695.0485.01180.0330.0
21952/53MY Jun-May330.01306.024.01660.0578.0--78.0656.0332.0988.0672.0
31953/54MY Jun-May672.01173.06.01851.0556.0--87.0643.0214.0857.0994.0
41954/55MY Jun-May994.0984.03.01981.0552.0--53.0605.0267.0872.01109.0
..........................................
2811/ June–May. Latest data may be preliminary or...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2822/ Includes flour and selected other products ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2833/ Totals may not add due to rounding.<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
284Source: USDA, Economic Research Service, based...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
285Updated: May 12, 2026<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
\n", + "

286 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " Marketing year 1/ Time period \\\n", + "0 1950/51 MY Jun-May \n", + "1 1951/52 MY Jun-May \n", + "2 1952/53 MY Jun-May \n", + "3 1953/54 MY Jun-May \n", + "4 1954/55 MY Jun-May \n", + ".. ... ... \n", + "281 1/ June–May. Latest data may be preliminary or... \n", + "282 2/ Includes flour and selected other products ... \n", + "283 3/ Totals may not add due to rounding. \n", + "284 Source: USDA, Economic Research Service, based... \n", + "285 Updated: May 12, 2026 \n", + "\n", + " Beginning stocks Production Imports 2/ Total supply 3/ Food use \\\n", + "0 496.0 1019.0 11.0 1526.0 580.0 \n", + "1 492.0 988.0 30.0 1510.0 585.0 \n", + "2 330.0 1306.0 24.0 1660.0 578.0 \n", + "3 672.0 1173.0 6.0 1851.0 556.0 \n", + "4 994.0 984.0 3.0 1981.0 552.0 \n", + ".. ... ... ... ... ... \n", + "281 \n", + "282 \n", + "283 \n", + "284 \n", + "285 \n", + "\n", + " Seed use Feed and residual use Total domestic use 3/ Exports 2/ \\\n", + "0 -- 109.0 689.0 345.0 \n", + "1 -- 110.0 695.0 485.0 \n", + "2 -- 78.0 656.0 332.0 \n", + "3 -- 87.0 643.0 214.0 \n", + "4 -- 53.0 605.0 267.0 \n", + ".. ... ... ... ... \n", + "281 \n", + "282 \n", + "283 \n", + "284 \n", + "285 \n", + "\n", + " Total disappearance 3/ Ending stocks \n", + "0 1034.0 492.0 \n", + "1 1180.0 330.0 \n", + "2 988.0 672.0 \n", + "3 857.0 994.0 \n", + "4 872.0 1109.0 \n", + ".. ... ... \n", + "281 \n", + "282 \n", + "283 \n", + "284 \n", + "285 \n", + "\n", + "[286 rows x 13 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "import pandas as pd\n", + "\n", + "df = pd.read_excel(\n", + " tmp,\n", + " sheet_name=\"Table05\",\n", + " dtype_backend=\"pyarrow\",\n", + " engine=\"calamine\",\n", + " header=1, # Skip the first row.\n", + ")\n", + "tmp.close()\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "1a7ec573", + "metadata": {}, + "source": [ + "Rename the columns to be more SQL-friendly. BigQuery supports [flexible column names](https://docs.cloud.google.com/bigquery/docs/schemas#flexible-column-names), which allows most unicode characters, but some special characters such as \"\\\" and \"/\" aren't allowed." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d5674020", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Marketing year 1Time periodBeginning stocksProductionImports 2Total supply 3Food useSeed useFeed and residual useTotal domestic use 3Exports 2Total disappearance 3Ending stocks
01950/51MY Jun-May496.01019.011.01526.0580.0--109.0689.0345.01034.0492.0
11951/52MY Jun-May492.0988.030.01510.0585.0--110.0695.0485.01180.0330.0
21952/53MY Jun-May330.01306.024.01660.0578.0--78.0656.0332.0988.0672.0
31953/54MY Jun-May672.01173.06.01851.0556.0--87.0643.0214.0857.0994.0
41954/55MY Jun-May994.0984.03.01981.0552.0--53.0605.0267.0872.01109.0
..........................................
2811/ June–May. Latest data may be preliminary or...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2822/ Includes flour and selected other products ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2833/ Totals may not add due to rounding.<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
284Source: USDA, Economic Research Service, based...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
285Updated: May 12, 2026<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
\n", + "

286 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " Marketing year 1 Time period \\\n", + "0 1950/51 MY Jun-May \n", + "1 1951/52 MY Jun-May \n", + "2 1952/53 MY Jun-May \n", + "3 1953/54 MY Jun-May \n", + "4 1954/55 MY Jun-May \n", + ".. ... ... \n", + "281 1/ June–May. Latest data may be preliminary or... \n", + "282 2/ Includes flour and selected other products ... \n", + "283 3/ Totals may not add due to rounding. \n", + "284 Source: USDA, Economic Research Service, based... \n", + "285 Updated: May 12, 2026 \n", + "\n", + " Beginning stocks Production Imports 2 Total supply 3 Food use \\\n", + "0 496.0 1019.0 11.0 1526.0 580.0 \n", + "1 492.0 988.0 30.0 1510.0 585.0 \n", + "2 330.0 1306.0 24.0 1660.0 578.0 \n", + "3 672.0 1173.0 6.0 1851.0 556.0 \n", + "4 994.0 984.0 3.0 1981.0 552.0 \n", + ".. ... ... ... ... ... \n", + "281 \n", + "282 \n", + "283 \n", + "284 \n", + "285 \n", + "\n", + " Seed use Feed and residual use Total domestic use 3 Exports 2 \\\n", + "0 -- 109.0 689.0 345.0 \n", + "1 -- 110.0 695.0 485.0 \n", + "2 -- 78.0 656.0 332.0 \n", + "3 -- 87.0 643.0 214.0 \n", + "4 -- 53.0 605.0 267.0 \n", + ".. ... ... ... ... \n", + "281 \n", + "282 \n", + "283 \n", + "284 \n", + "285 \n", + "\n", + " Total disappearance 3 Ending stocks \n", + "0 1034.0 492.0 \n", + "1 1180.0 330.0 \n", + "2 988.0 672.0 \n", + "3 857.0 994.0 \n", + "4 872.0 1109.0 \n", + ".. ... ... \n", + "281 \n", + "282 \n", + "283 \n", + "284 \n", + "285 \n", + "\n", + "[286 rows x 13 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns = [name.replace(\"/\", \"\") for name in df.columns]\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "5b169a83", + "metadata": {}, + "source": [ + "\n", + "\n", + "```\n", + "```\n", + "\n", + "\n", + "You can use pandas syntax to filter rows.\n", + "\n", + "\n", + "```\n", + "full_rows = df[~df['Beginning stocks'].isna()]\n", + "full_rows\n", + "```\n", + "\n", + "\n", + "\n", + "# Using BigQuery SQL magics (%%bqsql)\n", + "\n", + "The BigQuery DataFrames (aka BigFrames) library provides a %%bqsql magic, which can query local pandas or BigFrames DataFrames, as well as anything supported by the BigQuery query engine, such as parquet / iceberg, CSV files in GCS, and BigQuery tables. To enable the magic, use the %load_ext magic.\n", + "\n", + "\n", + "```\n", + "%load_ext bigframes\n", + "```\n", + "\n", + "\n", + "To ensure the correct Google Cloud project is billed for query usage, including free tier usage, configure the project ID used by the magics. If not set, the default project is discovered from your environment, such as the one associated with your application default credentials.\n", + "\n", + "\n", + "```\n", + "import bigframes.pandas as bpd\n", + "\n", + "bpd.options.bigquery.project = \"your-project-id\"\n", + "```\n", + "\n", + "\n", + "Now that the extension is loaded, you can use the %%bqsql magics to query the DataFrame created in the previous steps.\n", + "\n", + "\n", + "```\n", + "%%bqsql\n", + "SELECT * FROM {full_rows}\n", + "```\n", + "\n", + "\n", + "You should see the results from full_rows.\n", + "\n", + "\n", + "# Transforming the data with SQL\n", + "\n", + "The %%bqsql magics take a destination variable argument, which saves the results as a BigFrames DataFrame. This can be used to incrementally apply operations in both SQL and Python.\n", + "\n", + "First, limit the data to yearly data and save the results to the \"yearly\" variable.\n", + "\n", + "\n", + "```\n", + "%%bqsql yearly\n", + "SELECT *\n", + "FROM {full_rows}\n", + "WHERE STARTS_WITH(`Time period`, 'MY')\n", + "```\n", + "\n", + "\n", + "The \"Marketing year 1\" column isn't as useful as it could be because it is still a string. Transform it to a time series using SQL.\n", + "\n", + "\n", + "```\n", + "%%bqsql timeseries\n", + "SELECT\n", + " * EXCEPT (`Marketing year 1`),\n", + " TIMESTAMP(CONCAT(\n", + " REGEXP_EXTRACT(`Marketing year 1`, r'([0-9]+)\\/'),\n", + " '-01-01')) AS `year`\n", + "FROM {yearly}\n", + "```\n", + "\n", + "\n", + "\n", + "# Visualizing the data\n", + "\n", + "BigFrames supports most pandas operations, including several visualization methods. By setting a timestamp column to the index of the DataFrame, visualization becomes easier to understand.\n", + "\n", + "\n", + "```\n", + "timeseries.set_index('year').sort_index().plot.line()\n", + "```\n", + "\n", + "\n", + "Alternatively, convert the DataFrame to pandas for further integration with other libraries.\n", + "\n", + "\n", + "```\n", + "pddf = timeseries.set_index('year').sort_index().to_pandas()\n", + "pddf\n", + "```\n", + "\n", + "\n", + "\n", + "# Conclusion\n", + "\n", + "By leveraging BigFrames, you can combine the best of both worlds: the expressive power of SQL and the versatile ecosystem of Python. This approach not only improves readability but also provides the opportunity to scale your data processing to handle massive datasets directly in BigQuery by swapping out a pandas DataFrame in these examples with a BigQuery DataFrame.\n", + "\n", + "\n", + "# Next Steps\n", + "\n", + "Another way to use BigQuery features on pandas DataFrames is through the BigQuery pandas extension. For example, call any of the community BigQuery functions in [BigQuery Utils](https://github.com/GoogleCloudPlatform/bigquery-utils/tree/master/udfs#bigquery-udfs), [BigFunctions](https://unytics.io/bigfunctions/bigfunctions/#function-categories), [CARTO Analytics Toolbox for BigQuery](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery), and more by using the DataFrame.bigquery.sql_scalar(...) accessor.\n", + "\n", + "\n", + "```\n", + "import bigframes.pandas as bpd # registers the bigquery accessor\n", + "import pandas as pd\n", + "\n", + "data = {\n", + " 'text1': [\n", + " 'apple',\n", + " 'banana',\n", + " 'orange',\n", + " 'grape',\n", + " 'strawberry',\n", + " 'blueberry',\n", + " 'raspberry',\n", + " 'pineapple'\n", + " ],\n", + " 'text2': [\n", + " 'aple',\n", + " 'bandana',\n", + " 'orenge',\n", + " 'grpe',\n", + " 'straaawberry',\n", + " 'bluebery',\n", + " 'rasery',\n", + " 'pinapple'\n", + " ]\n", + "}\n", + "\n", + "df = pd.DataFrame(data)\n", + "\n", + "bpd.options.bigquery.project = \"your-project-id\"\n", + "\n", + "df.bigquery.sql_scalar(\"bqutil.fn.cw_editdistance({text1}, {text2})\")\n", + "```\n", + "\n", + "\n", + "BigQuery sandbox offers powerful, scalable analytics, but some features aren't supported, such as BigQuery Machine Learning. Connect a billing account to your project to use powerful features such as the AI.FORECAST function, which can predict time series data using Google's foundational models.\n", + "\n", + "The BigFrames team would love to hear from you. If you would like to reach out, please send an email to: [bigframes-feedback@google.com](mailto:bigframes-feedback@google.com) or by filing an issue at the[ open source BigFrames repository](https://github.com/googleapis/google-cloud-python/issues). To receive updates about BigFrames, subscribe to the [BigFrames email list](https://docs.google.com/forms/d/10EnDyYdYUW9HvelHYuBRC8L3GdGVl3rX0aroinbRZyc/edit?resourcekey=0-QUsnpzF91gm9hsp04rSA6Q)." + ] + }, { "cell_type": "code", "execution_count": 3, @@ -901,7 +1755,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "venv", "language": "python", "name": "python3" }, From ed592da0e75b4e07e51a09344fb2f97f5b43b8d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Swe=C3=B1a?= Date: Fri, 29 May 2026 17:12:30 +0000 Subject: [PATCH 4/5] split notebook cells --- .../dataframes/magics_with_local_data.ipynb | 990 +++--------------- 1 file changed, 162 insertions(+), 828 deletions(-) diff --git a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb index a008b011f1dc..26ce7f3525d5 100644 --- a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb +++ b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb @@ -853,54 +853,87 @@ }, { "cell_type": "markdown", - "id": "5b169a83", + "id": "b50c5798", "metadata": {}, "source": [ - "\n", - "\n", - "```\n", - "```\n", - "\n", - "\n", - "You can use pandas syntax to filter rows.\n", - "\n", - "\n", - "```\n", + "You can use pandas syntax to filter rows.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1dbad481", + "metadata": {}, + "outputs": [], + "source": [ "full_rows = df[~df['Beginning stocks'].isna()]\n", - "full_rows\n", - "```\n", - "\n", - "\n", - "\n", + "full_rows\n" + ] + }, + { + "cell_type": "markdown", + "id": "e914ce69", + "metadata": {}, + "source": [ "# Using BigQuery SQL magics (%%bqsql)\n", "\n", - "The BigQuery DataFrames (aka BigFrames) library provides a %%bqsql magic, which can query local pandas or BigFrames DataFrames, as well as anything supported by the BigQuery query engine, such as parquet / iceberg, CSV files in GCS, and BigQuery tables. To enable the magic, use the %load_ext magic.\n", - "\n", - "\n", - "```\n", - "%load_ext bigframes\n", - "```\n", - "\n", - "\n", - "To ensure the correct Google Cloud project is billed for query usage, including free tier usage, configure the project ID used by the magics. If not set, the default project is discovered from your environment, such as the one associated with your application default credentials.\n", - "\n", - "\n", - "```\n", + "The BigQuery DataFrames (aka BigFrames) library provides a %%bqsql magic, which can query local pandas or BigFrames DataFrames, as well as anything supported by the BigQuery query engine, such as parquet / iceberg, CSV files in GCS, and BigQuery tables. To enable the magic, use the %load_ext magic.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d837a5e", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext bigframes\n" + ] + }, + { + "cell_type": "markdown", + "id": "315a53b5", + "metadata": {}, + "source": [ + "To ensure the correct Google Cloud project is billed for query usage, including free tier usage, configure the project ID used by the magics. If not set, the default project is discovered from your environment, such as the one associated with your application default credentials.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ffe5757c", + "metadata": {}, + "outputs": [], + "source": [ "import bigframes.pandas as bpd\n", "\n", - "bpd.options.bigquery.project = \"your-project-id\"\n", - "```\n", - "\n", - "\n", - "Now that the extension is loaded, you can use the %%bqsql magics to query the DataFrame created in the previous steps.\n", - "\n", - "\n", - "```\n", + "bpd.options.bigquery.project = \"your-project-id\"\n" + ] + }, + { + "cell_type": "markdown", + "id": "fe174ed2", + "metadata": {}, + "source": [ + "Now that the extension is loaded, you can use the %%bqsql magics to query the DataFrame created in the previous steps.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fbbf52d6", + "metadata": {}, + "outputs": [], + "source": [ "%%bqsql\n", - "SELECT * FROM {full_rows}\n", - "```\n", - "\n", - "\n", + "SELECT * FROM {full_rows}\n" + ] + }, + { + "cell_type": "markdown", + "id": "2fcd5284", + "metadata": {}, + "source": [ "You should see the results from full_rows.\n", "\n", "\n", @@ -908,52 +941,90 @@ "\n", "The %%bqsql magics take a destination variable argument, which saves the results as a BigFrames DataFrame. This can be used to incrementally apply operations in both SQL and Python.\n", "\n", - "First, limit the data to yearly data and save the results to the \"yearly\" variable.\n", - "\n", - "\n", - "```\n", + "First, limit the data to yearly data and save the results to the \"yearly\" variable.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75fe0e10", + "metadata": {}, + "outputs": [], + "source": [ "%%bqsql yearly\n", "SELECT *\n", "FROM {full_rows}\n", - "WHERE STARTS_WITH(`Time period`, 'MY')\n", - "```\n", - "\n", - "\n", - "The \"Marketing year 1\" column isn't as useful as it could be because it is still a string. Transform it to a time series using SQL.\n", - "\n", - "\n", - "```\n", + "WHERE STARTS_WITH(`Time period`, 'MY')\n" + ] + }, + { + "cell_type": "markdown", + "id": "19a70e9e", + "metadata": {}, + "source": [ + "The \"Marketing year 1\" column isn't as useful as it could be because it is still a string. Transform it to a time series using SQL.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8fbb5224", + "metadata": {}, + "outputs": [], + "source": [ "%%bqsql timeseries\n", "SELECT\n", " * EXCEPT (`Marketing year 1`),\n", " TIMESTAMP(CONCAT(\n", " REGEXP_EXTRACT(`Marketing year 1`, r'([0-9]+)\\/'),\n", " '-01-01')) AS `year`\n", - "FROM {yearly}\n", - "```\n", - "\n", - "\n", - "\n", + "FROM {yearly}\n" + ] + }, + { + "cell_type": "markdown", + "id": "76ba8a7d", + "metadata": {}, + "source": [ "# Visualizing the data\n", "\n", - "BigFrames supports most pandas operations, including several visualization methods. By setting a timestamp column to the index of the DataFrame, visualization becomes easier to understand.\n", - "\n", - "\n", - "```\n", - "timeseries.set_index('year').sort_index().plot.line()\n", - "```\n", - "\n", - "\n", - "Alternatively, convert the DataFrame to pandas for further integration with other libraries.\n", - "\n", - "\n", - "```\n", + "BigFrames supports most pandas operations, including several visualization methods. By setting a timestamp column to the index of the DataFrame, visualization becomes easier to understand.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d3ff4eec", + "metadata": {}, + "outputs": [], + "source": [ + "timeseries.set_index('year').sort_index().plot.line()\n" + ] + }, + { + "cell_type": "markdown", + "id": "4b15e937", + "metadata": {}, + "source": [ + "Alternatively, convert the DataFrame to pandas for further integration with other libraries.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "97757974", + "metadata": {}, + "outputs": [], + "source": [ "pddf = timeseries.set_index('year').sort_index().to_pandas()\n", - "pddf\n", - "```\n", - "\n", - "\n", - "\n", + "pddf\n" + ] + }, + { + "cell_type": "markdown", + "id": "9c1242ab", + "metadata": {}, + "source": [ "# Conclusion\n", "\n", "By leveraging BigFrames, you can combine the best of both worlds: the expressive power of SQL and the versatile ecosystem of Python. This approach not only improves readability but also provides the opportunity to scale your data processing to handle massive datasets directly in BigQuery by swapping out a pandas DataFrame in these examples with a BigQuery DataFrame.\n", @@ -961,12 +1032,19 @@ "\n", "# Next Steps\n", "\n", - "Another way to use BigQuery features on pandas DataFrames is through the BigQuery pandas extension. For example, call any of the community BigQuery functions in [BigQuery Utils](https://github.com/GoogleCloudPlatform/bigquery-utils/tree/master/udfs#bigquery-udfs), [BigFunctions](https://unytics.io/bigfunctions/bigfunctions/#function-categories), [CARTO Analytics Toolbox for BigQuery](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery), and more by using the DataFrame.bigquery.sql_scalar(...) accessor.\n", - "\n", + "Another way to use BigQuery features on pandas DataFrames is through the BigQuery pandas extension. For example, call any of the community BigQuery functions in [BigQuery Utils](https://github.com/GoogleCloudPlatform/bigquery-utils/tree/master/udfs#bigquery-udfs), [BigFunctions](https://unytics.io/bigfunctions/bigfunctions/#function-categories), [CARTO Analytics Toolbox for BigQuery](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery), and more by using the DataFrame.bigquery.sql_scalar(...) accessor.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4209f930", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", "\n", - "```\n", "import bigframes.pandas as bpd # registers the bigquery accessor\n", - "import pandas as pd\n", "\n", "data = {\n", " 'text1': [\n", @@ -995,762 +1073,18 @@ "\n", "bpd.options.bigquery.project = \"your-project-id\"\n", "\n", - "df.bigquery.sql_scalar(\"bqutil.fn.cw_editdistance({text1}, {text2})\")\n", - "```\n", - "\n", - "\n", - "BigQuery sandbox offers powerful, scalable analytics, but some features aren't supported, such as BigQuery Machine Learning. Connect a billing account to your project to use powerful features such as the AI.FORECAST function, which can predict time series data using Google's foundational models.\n", - "\n", - "The BigFrames team would love to hear from you. If you would like to reach out, please send an email to: [bigframes-feedback@google.com](mailto:bigframes-feedback@google.com) or by filing an issue at the[ open source BigFrames repository](https://github.com/googleapis/google-cloud-python/issues). To receive updates about BigFrames, subscribe to the [BigFrames email list](https://docs.google.com/forms/d/10EnDyYdYUW9HvelHYuBRC8L3GdGVl3rX0aroinbRZyc/edit?resourcekey=0-QUsnpzF91gm9hsp04rSA6Q)." + "df.bigquery.sql_scalar(\"bqutil.fn.cw_editdistance({text1}, {text2})\")\n" ] }, { - "cell_type": "code", - "execution_count": 3, - "id": "56babb3f", + "cell_type": "markdown", + "id": "6a7928bd", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "--2026-05-07 17:55:50-- https://www.ers.usda.gov/media/5706/wheat-data-all-years.xlsx?v=19753\n", - "Resolving www.ers.usda.gov (www.ers.usda.gov)... 20.141.137.224\n", - "Connecting to www.ers.usda.gov (www.ers.usda.gov)|20.141.137.224|:443... connected.\n", - "HTTP request sent, awaiting response... 200 OK\n", - "Length: 814596 (796K) [application/vnd.openxmlformats-officedocument.spreadsheetml.sheet]\n", - "Saving to: ‘/tmp/wheat-data.xlsx’\n", - "\n", - "/tmp/wheat-data.xls 100%[===================>] 795.50K 2.32MB/s in 0.3s \n", - "\n", - "2026-05-07 17:55:51 (2.32 MB/s) - ‘/tmp/wheat-data.xlsx’ saved [814596/814596]\n", - "\n" - ] - } - ], "source": [ - "!wget -O /tmp/wheat-data.xlsx 'https://www.ers.usda.gov/media/5706/wheat-data-all-years.xlsx?v=19753'" + "BigQuery sandbox offers powerful, scalable analytics, but some features aren't supported, such as BigQuery Machine Learning. Connect a billing account to your project to use powerful features such as the AI.FORECAST function, which can predict time series data using Google's foundational models.\n", + "\n", + "The BigFrames team would love to hear from you. If you would like to reach out, please send an email to: [bigframes-feedback@google.com](mailto:bigframes-feedback@google.com) or by filing an issue at the[ open source BigFrames repository](https://github.com/googleapis/google-cloud-python/issues). To receive updates about BigFrames, subscribe to the [BigFrames email list](https://docs.google.com/forms/d/10EnDyYdYUW9HvelHYuBRC8L3GdGVl3rX0aroinbRZyc/edit?resourcekey=0-QUsnpzF91gm9hsp04rSA6Q)." ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "469a1b8e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Marketing year 1/Type 2/Beginning stocksProductionImportsTotal supply 3/ 4/Food useSeed useFeed and residual useTotal domestic use 4/ExportsTotal disappearance 4/Ending stocks
01950/51All wheat496.01019.0111526.0580.0--109.0689.0345.01034.0492.0
11951/52All wheat492.0988.0301510.0585.0--110.0695.0485.01180.0330.0
21952/53All wheat330.01306.0241660.0578.0--78.0656.0332.0988.0672.0
31953/54All wheat672.01173.061851.0556.0--87.0643.0214.0857.0994.0
41954/55All wheat994.0984.031981.0552.0--53.0605.0267.0872.01109.0
..........................................
2872/ Hard Red Winter, Hard Red Spring, Soft Red ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2883/ Includes flour and selected other products ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2894/ Totals may not add due to rounding.<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
290Source: USDA, Economic Research Service, based...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
291Updated: April 10, 2026<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
\n", - "

292 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " Marketing year 1/ Type 2/ \\\n", - "0 1950/51 All wheat \n", - "1 1951/52 All wheat \n", - "2 1952/53 All wheat \n", - "3 1953/54 All wheat \n", - "4 1954/55 All wheat \n", - ".. ... ... \n", - "287 2/ Hard Red Winter, Hard Red Spring, Soft Red ... \n", - "288 3/ Includes flour and selected other products ... \n", - "289 4/ Totals may not add due to rounding. \n", - "290 Source: USDA, Economic Research Service, based... \n", - "291 Updated: April 10, 2026 \n", - "\n", - " Beginning stocks Production Imports Total supply 3/ 4/ Food use \\\n", - "0 496.0 1019.0 11 1526.0 580.0 \n", - "1 492.0 988.0 30 1510.0 585.0 \n", - "2 330.0 1306.0 24 1660.0 578.0 \n", - "3 672.0 1173.0 6 1851.0 556.0 \n", - "4 994.0 984.0 3 1981.0 552.0 \n", - ".. ... ... ... ... ... \n", - "287 \n", - "288 \n", - "289 \n", - "290 \n", - "291 \n", - "\n", - " Seed use Feed and residual use Total domestic use 4/ Exports \\\n", - "0 -- 109.0 689.0 345.0 \n", - "1 -- 110.0 695.0 485.0 \n", - "2 -- 78.0 656.0 332.0 \n", - "3 -- 87.0 643.0 214.0 \n", - "4 -- 53.0 605.0 267.0 \n", - ".. ... ... ... ... \n", - "287 \n", - "288 \n", - "289 \n", - "290 \n", - "291 \n", - "\n", - " Total disappearance 4/ Ending stocks \n", - "0 1034.0 492.0 \n", - "1 1180.0 330.0 \n", - "2 988.0 672.0 \n", - "3 857.0 994.0 \n", - "4 872.0 1109.0 \n", - ".. ... ... \n", - "287 \n", - "288 \n", - "289 \n", - "290 \n", - "291 \n", - "\n", - "[292 rows x 13 columns]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "df = pd.read_excel(\n", - " \"/tmp/wheat-data.xlsx\",\n", - " sheet_name=\"Table06\",\n", - " header=1,\n", - "\n", - " # Requires that the python-calamine project is also installed.\n", - " engine=\"calamine\",\n", - "\n", - " # Recommended so that string columns don't contain NaN, which can confuse\n", - " # parquet serialization, which we use to read these data in BigQuery SQL.\n", - " dtype_backend=\"pyarrow\",\n", - ")\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "a06b58d9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Marketing year 1Type 2Beginning stocksProductionImportsTotal supply 3 4Food useSeed useFeed and residual useTotal domestic use 4ExportsTotal disappearance 4Ending stocks
rowindex
01950/51All wheat496.01019.0111526.0580.0--109.0689.0345.01034.0492.0
11951/52All wheat492.0988.0301510.0585.0--110.0695.0485.01180.0330.0
21952/53All wheat330.01306.0241660.0578.0--78.0656.0332.0988.0672.0
31953/54All wheat672.01173.061851.0556.0--87.0643.0214.0857.0994.0
41954/55All wheat994.0984.031981.0552.0--53.0605.0267.0872.01109.0
..........................................
2872/ Hard Red Winter, Hard Red Spring, Soft Red ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2883/ Includes flour and selected other products ...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
2894/ Totals may not add due to rounding.<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
290Source: USDA, Economic Research Service, based...<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
291Updated: April 10, 2026<NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA><NA>
\n", - "

292 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " Marketing year 1 Type 2 \\\n", - "rowindex \n", - "0 1950/51 All wheat \n", - "1 1951/52 All wheat \n", - "2 1952/53 All wheat \n", - "3 1953/54 All wheat \n", - "4 1954/55 All wheat \n", - "... ... ... \n", - "287 2/ Hard Red Winter, Hard Red Spring, Soft Red ... \n", - "288 3/ Includes flour and selected other products ... \n", - "289 4/ Totals may not add due to rounding. \n", - "290 Source: USDA, Economic Research Service, based... \n", - "291 Updated: April 10, 2026 \n", - "\n", - " Beginning stocks Production Imports Total supply 3 4 Food use \\\n", - "rowindex \n", - "0 496.0 1019.0 11 1526.0 580.0 \n", - "1 492.0 988.0 30 1510.0 585.0 \n", - "2 330.0 1306.0 24 1660.0 578.0 \n", - "3 672.0 1173.0 6 1851.0 556.0 \n", - "4 994.0 984.0 3 1981.0 552.0 \n", - "... ... ... ... ... ... \n", - "287 \n", - "288 \n", - "289 \n", - "290 \n", - "291 \n", - "\n", - " Seed use Feed and residual use Total domestic use 4 Exports \\\n", - "rowindex \n", - "0 -- 109.0 689.0 345.0 \n", - "1 -- 110.0 695.0 485.0 \n", - "2 -- 78.0 656.0 332.0 \n", - "3 -- 87.0 643.0 214.0 \n", - "4 -- 53.0 605.0 267.0 \n", - "... ... ... ... ... \n", - "287 \n", - "288 \n", - "289 \n", - "290 \n", - "291 \n", - "\n", - " Total disappearance 4 Ending stocks \n", - "rowindex \n", - "0 1034.0 492.0 \n", - "1 1180.0 330.0 \n", - "2 988.0 672.0 \n", - "3 857.0 994.0 \n", - "4 872.0 1109.0 \n", - "... ... ... \n", - "287 \n", - "288 \n", - "289 \n", - "290 \n", - "291 \n", - "\n", - "[292 rows x 13 columns]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# To aid in SQL authoring, rename the columns to avoid problematic special\n", - "# characters. Note: BigQuery supports some special characters, but not \"/\".\n", - "# https://docs.cloud.google.com/bigquery/docs/schemas#flexible-column-names\n", - "df_renamed = df.rename(\n", - " columns={\n", - " column: column.replace(\"/\", \"\")\n", - " for column in df.columns\n", - " }\n", - ")\n", - "\n", - "# Also, give a name to the index so that it can be included.\n", - "df_renamed.index.name = \"rowindex\"\n", - "df_renamed\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "04363cc5", - "metadata": {}, - "outputs": [], - "source": [ - "import bigframes.pandas as bpd\n", - "\n", - "# TODO(developer): Follow the instructions at\n", - "# https://docs.cloud.google.com/bigquery/docs/sandbox and set the project to the\n", - "# ID of the project you created.\n", - "bpd.options.bigquery.project = \"swena-bq-sandbox\"" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "3b9a46d7", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "UsageError: Cell magic `%%bqsql` not found.\n" - ] - } - ], - "source": [ - "%%bqsql df_with_year\n", - "SELECT\n", - " REGEXP_EXTRACT(LTRIM(`Marketing year 1`), r'^([0-9]+)/[0-9]') AS `Start year`,\n", - " SAFE_CAST(`Seed use` AS FLOAT64) AS `Seed use`,\n", - " * EXCEPT (`Marketing year 1`, `Seed use`)\n", - "FROM {df_renamed}\n", - "ORDER BY rowindex ASC" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0a3c3e22", - "metadata": {}, - "outputs": [], - "source": [ - "%%bqsql use_proportions\n", - "SELECT\n", - " `rowindex`,\n", - " `Start year`,\n", - " `Seed use` / `Total disappearance 4` AS `Seed proportion`,\n", - " `Food use` / `Total disappearance 4` AS `Food proportion`,\n", - " `Feed and residual use` / `Total disappearance 4` AS `Feed proportion`,\n", - " `Exports` / `Total disappearance 4` AS `Exports proportion`\n", - "FROM {df_with_year}\n", - "WHERE TRIM(`Type 2`) = 'All wheat'\n", - "ORDER BY `rowindex` ASC;" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8a158619", - "metadata": {}, - "outputs": [], - "source": [ - "use_proportions.set_index('Start year')[['Seed proportion', 'Food proportion', 'Feed proportion', 'Exports proportion']].plot.area(stacked=True, ylim=(0, 1.5), colormap='viridis')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ec316f8f", - "metadata": {}, - "outputs": [], - "source": [ - "type(use_proportions)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6bf0e0b2", - "metadata": {}, - "outputs": [], - "source": [ - "pandas_result = use_proportions.to_pandas()\n", - "pandas_result" - ] - }, - { - "cell_type": "markdown", - "id": "7d8aa895", - "metadata": {}, - "source": [] } ], "metadata": { From 9d7351bd4912ffb88ecf94b576e3240628a859c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Swe=C3=B1a?= Date: Fri, 29 May 2026 17:22:00 +0000 Subject: [PATCH 5/5] rewrite to focus on chaining --- .../dataframes/magics_with_local_data.ipynb | 1799 +++++++++++++++-- 1 file changed, 1632 insertions(+), 167 deletions(-) diff --git a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb index 26ce7f3525d5..02fb98f247bf 100644 --- a/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb +++ b/packages/bigframes/notebooks/dataframes/magics_with_local_data.ipynb @@ -27,15 +27,18 @@ "id": "71383fa0", "metadata": {}, "source": [ - "# Query `*.xlsx` files with SQL for free\\* using Pandas and BigQuery DataFrames\n", + "# Interoperate SQL and Python for Scalable Analytics with BigQuery DataFrames\n", "\n", - "In this tutorial, you'll use SQL query the [USDA wheat data](https://www.ers.usda.gov/data-products/wheat-data), which is distributed as files in the [Excel (.xlsx) Extensions to the Office Open XML SpreadsheetML file format](https://learn.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/2c5dee00-eff2-4b22-92b6-0738acd4475e). Because of open source packages like Jupyter, Pandas, and BigQuery DataFrames (aka BigFrames) and the [BigQuery sandbox](https://docs.cloud.google.com/bigquery/docs/sandbox), you should be able to follow all of the steps in this guide for free\\* and without a credit card. \n", + "In this tutorial, you will learn how to seamlessly chain data processing across SQL and Python code cells using BigQuery DataFrames (BigFrames) and the `%%bqsql` IPython magic. \n", "\n", - "_\\*See the [BigQuery sandbox](https://docs.cloud.google.com/bigquery/docs/sandbox) documentation for limitations._\n", + "While we begin by loading a local Excel dataset into a local Pandas DataFrame, the main focus is on how you can transition between Pandas' Python-centric API and BigQuery's SQL-centric engine. This hybrid workflow combines the best of both worlds: the expressive power of SQL for complex transformations and the versatile Python ecosystem for visualization and further analysis.\n", + "\n", + "Thanks to open-source packages like Jupyter, Pandas, BigFrames, and the [BigQuery sandbox](https://docs.cloud.google.com/bigquery/docs/sandbox), you can follow all steps in this guide for free\\* and without a credit card.\n", "\n", - "BigQuery DataFrames aka BigFrames is an open source Python library offered by Google. BigFrames scales Python data processing by transpiling common Python data science APIs to BigQuery SQL. You can read more about BigFrames in the [official introduction to BigFrames](https://dataframes.bigquery.dev/user_guide/index.html) and can refer to the [public git repository for BigFrames](https://github.com/googleapis/google-cloud-python/tree/main/packages/bigframes).\n", + "_\\*See the [BigQuery sandbox](https://docs.cloud.google.com/bigquery/docs/sandbox) documentation for limitations._\n", "\n", - "Last year, Google introduced [SQL cells in Colab Enterprise notebooks](https://docs.cloud.google.com/colab/docs/sql-cells), which was a collaboration across several teams, including the BigQuery DataFrames team. Now, with the [%%bqsql cell magics](https://dataframes.bigquery.dev/notebooks/getting_started/magics.html) available in BigQuery DataFrames (aka BigFrames), this same functionality is available to all Jupyter notebook users, whether you're in Colab, Jupyter Lab, or a notebook in VS Code. These magics use BigQuery to query a table or even a local pandas DataFrame.\n", + "### The %%bqsql Magic\n", + "Last year, Google introduced [SQL cells in Colab Enterprise notebooks](https://docs.cloud.google.com/colab/docs/sql-cells). Now, with the [%%bqsql cell magics](https://dataframes.bigquery.dev/notebooks/getting_started/magics.html) in BigQuery DataFrames, this same powerful interoperability is available to all Jupyter users, whether you're in Colab, JupyterLab, or VS Code. These magics allow you to write SQL queries that run directly on local pandas DataFrames, BigFrames DataFrames, or external BigQuery tables.\n", "\n", "\n", "# Getting Started\n", @@ -49,6 +52,7 @@ "3. Create and activate a venv to isolate Python dependencies. \\\n", " \\\n", "On Linux or macOS, use these commands (update to your preferred Python version): \\\n", + " \\\n", "\n", "\n", "\n", @@ -91,10 +95,12 @@ "output_type": "stream", "text": [ "Requirement already satisfied: python-calamine in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (0.6.2)\n", - "Requirement already satisfied: pandas in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (3.0.2)\n", + "Requirement already satisfied: pandas in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (2.3.3)\n", "Requirement already satisfied: bigframes in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (2.39.0)\n", - "Requirement already satisfied: numpy>=2.3.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2.4.4)\n", + "Requirement already satisfied: numpy>=1.26.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2.4.4)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2.9.0.post0)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2026.1.post1)\n", + "Requirement already satisfied: tzdata>=2022.7 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2026.1)\n", "Requirement already satisfied: cloudpickle>=2.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (3.1.2)\n", "Requirement already satisfied: fsspec>=2023.3.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2026.1.0)\n", "Requirement already satisfied: gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2026.1.0)\n", @@ -119,7 +125,6 @@ "Requirement already satisfied: db-dtypes>=1.4.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.5.1)\n", "Requirement already satisfied: pyiceberg>=0.7.1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (0.11.1)\n", "Requirement already satisfied: atpublic<6,>=2.3 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (5.1)\n", - "Requirement already satisfied: pytz>=2022.7 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (2026.1.post1)\n", "Requirement already satisfied: toolz<2,>=0.11 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (1.1.0)\n", "Requirement already satisfied: typing-extensions<5,>=4.5.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (4.15.0)\n", "Requirement already satisfied: rich<14,>=12.4.4 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from bigframes) (13.9.4)\n", @@ -141,10 +146,6 @@ "Requirement already satisfied: cffi>=2.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from cryptography>=38.0.3->google-auth<3.0,>=2.15.0->bigframes) (2.0.0)\n", "Requirement already satisfied: pycparser in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from cffi>=2.0.0->cryptography>=38.0.3->google-auth<3.0,>=2.15.0->bigframes) (3.0)\n", "Requirement already satisfied: packaging>=24.2.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from db-dtypes>=1.4.2->bigframes) (26.0)\n", - "\u001b[33mWARNING: Cache entry deserialization failed, entry ignored\u001b[0m\u001b[33m\n", - "\u001b[0mCollecting pandas\n", - " Using cached pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (91 kB)\n", - "Requirement already satisfied: tzdata>=2022.7 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pandas) (2026.1)\n", "Requirement already satisfied: aiohttp!=4.0.0a0,!=4.0.0a1 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (3.13.5)\n", "Requirement already satisfied: decorator>4.1.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (5.2.1)\n", "Requirement already satisfied: google-auth-oauthlib in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (1.3.1)\n", @@ -183,13 +184,6 @@ "Requirement already satisfied: pydantic-core==2.41.5 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pydantic!=2.12.0,!=2.12.1,!=2.4.0,!=2.4.1,<3.0,>=2.0->pyiceberg>=0.7.1->bigframes) (2.41.5)\n", "Requirement already satisfied: typing-inspection>=0.4.2 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from pydantic!=2.12.0,!=2.12.1,!=2.4.0,!=2.4.1,<3.0,>=2.0->pyiceberg>=0.7.1->bigframes) (0.4.2)\n", "Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/google/home/swast/src/github.com/googleapis/google-cloud-python/packages/bigframes/venv/lib/python3.14/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib->gcsfs!=2025.5.0,!=2026.2.0,!=2026.3.0,>=2023.3.0->bigframes) (3.3.1)\n", - "Using cached pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (12.3 MB)\n", - "Installing collected packages: pandas\n", - " Attempting uninstall: pandas\n", - " Found existing installation: pandas 3.0.2\n", - " Uninstalling pandas-3.0.2:\n", - " Successfully uninstalled pandas-3.0.2\n", - "Successfully installed pandas-2.3.3\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } @@ -203,14 +197,14 @@ "id": "5ba39d0d", "metadata": {}, "source": [ - "## Accessing the data\n", + "## Starting with Local Data: Accessing the Dataset\n", "\n", - "In this tutorial, you'll analyze the [USDA wheat data](https://www.ers.usda.gov/data-products/wheat-data). Use the requests package to download the data to a temporary file." + "We'll start by downloading a local dataset. In this tutorial, you'll analyze the [USDA wheat data](https://www.ers.usda.gov/data-products/wheat-data). We use the standard `requests` package to download the data to a temporary file, mimicking a typical local data analysis workflow.\n" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "id": "fb1dfdc2", "metadata": {}, "outputs": [ @@ -220,7 +214,7 @@ "0" ] }, - "execution_count": 1, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -249,13 +243,12 @@ "id": "50f896bb", "metadata": {}, "source": [ - "\n", - "When working with SQL, use the pyarrow dtype_backend for more consistent handling of NULL values. The Table05 sheet provides annual data:" + "When preparing local Pandas data for SQL processing, using the `pyarrow` `dtype_backend` is highly recommended. This ensures more consistent handling of NULL values and seamless schema mapping when we hand off the data to the BigQuery SQL engine. We will read the 'Table05' sheet, which contains annual wheat supply and disappearance data:\n" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "id": "8a8a137b", "metadata": {}, "outputs": [ @@ -533,7 +526,7 @@ "[286 rows x 13 columns]" ] }, - "execution_count": 2, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -558,12 +551,14 @@ "id": "1a7ec573", "metadata": {}, "source": [ - "Rename the columns to be more SQL-friendly. BigQuery supports [flexible column names](https://docs.cloud.google.com/bigquery/docs/schemas#flexible-column-names), which allows most unicode characters, but some special characters such as \"\\\" and \"/\" aren't allowed." + "### Preparing Data for SQL: Column Normalization\n", + "\n", + "Before querying the local DataFrame with SQL, we need to ensure column names are SQL-friendly. BigQuery supports [flexible column names](https://docs.cloud.google.com/bigquery/docs/schemas#flexible-column-names), allowing most unicode characters, but special characters like \"/\" and \"\\\" must be removed or replaced.\n" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "id": "d5674020", "metadata": {}, "outputs": [ @@ -841,7 +836,7 @@ "[286 rows x 13 columns]" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -856,15 +851,283 @@ "id": "b50c5798", "metadata": {}, "source": [ - "You can use pandas syntax to filter rows.\n" + "### Python Processing: Filtering with Pandas\n", + "\n", + "First, we will perform a basic filter using standard Python/Pandas syntax to remove rows with missing data. This represents the initial Python-only stage of our processing chain.\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "1dbad481", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Marketing year 1Time periodBeginning stocksProductionImports 2Total supply 3Food useSeed useFeed and residual useTotal domestic use 3Exports 2Total disappearance 3Ending stocks
01950/51MY Jun-May496.01019.011.01526.0580.0--109.0689.0345.01034.0492.0
11951/52MY Jun-May492.0988.030.01510.0585.0--110.0695.0485.01180.0330.0
21952/53MY Jun-May330.01306.024.01660.0578.0--78.0656.0332.0988.0672.0
31953/54MY Jun-May672.01173.06.01851.0556.0--87.0643.0214.0857.0994.0
41954/55MY Jun-May994.0984.03.01981.0552.0--53.0605.0267.0872.01109.0
..........................................
2752025/26MY Jun-May854.7341984.537125.02964.271960.059.7100.01119.7910.02029.7934.571
2762025/26Q1 Jun-Aug854.7341984.53730.5932869.864241.0912.653239.522483.266252.58735.8462134.018
2772025/26Q2 Sep-Nov2134.0180.030.0782164.096245.5839.658-54.047231.191255.802486.9931677.103
2782025/26Q3 Dec-Feb1677.1030.032.3631709.466230.9751.75-24.747207.978201.291409.2691300.197
2792026/27MY Jun-May934.5711561.322140.02635.893960.05980.01099.0775.01874.0761.893
\n", + "

280 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " Marketing year 1 Time period Beginning stocks Production Imports 2 \\\n", + "0 1950/51 MY Jun-May 496.0 1019.0 11.0 \n", + "1 1951/52 MY Jun-May 492.0 988.0 30.0 \n", + "2 1952/53 MY Jun-May 330.0 1306.0 24.0 \n", + "3 1953/54 MY Jun-May 672.0 1173.0 6.0 \n", + "4 1954/55 MY Jun-May 994.0 984.0 3.0 \n", + ".. ... ... ... ... ... \n", + "275 2025/26 MY Jun-May 854.734 1984.537 125.0 \n", + "276 2025/26 Q1 Jun-Aug 854.734 1984.537 30.593 \n", + "277 2025/26 Q2 Sep-Nov 2134.018 0.0 30.078 \n", + "278 2025/26 Q3 Dec-Feb 1677.103 0.0 32.363 \n", + "279 2026/27 MY Jun-May 934.571 1561.322 140.0 \n", + "\n", + " Total supply 3 Food use Seed use Feed and residual use \\\n", + "0 1526.0 580.0 -- 109.0 \n", + "1 1510.0 585.0 -- 110.0 \n", + "2 1660.0 578.0 -- 78.0 \n", + "3 1851.0 556.0 -- 87.0 \n", + "4 1981.0 552.0 -- 53.0 \n", + ".. ... ... ... ... \n", + "275 2964.271 960.0 59.7 100.0 \n", + "276 2869.864 241.091 2.653 239.522 \n", + "277 2164.096 245.58 39.658 -54.047 \n", + "278 1709.466 230.975 1.75 -24.747 \n", + "279 2635.893 960.0 59 80.0 \n", + "\n", + " Total domestic use 3 Exports 2 Total disappearance 3 Ending stocks \n", + "0 689.0 345.0 1034.0 492.0 \n", + "1 695.0 485.0 1180.0 330.0 \n", + "2 656.0 332.0 988.0 672.0 \n", + "3 643.0 214.0 857.0 994.0 \n", + "4 605.0 267.0 872.0 1109.0 \n", + ".. ... ... ... ... \n", + "275 1119.7 910.0 2029.7 934.571 \n", + "276 483.266 252.58 735.846 2134.018 \n", + "277 231.191 255.802 486.993 1677.103 \n", + "278 207.978 201.291 409.269 1300.197 \n", + "279 1099.0 775.0 1874.0 761.893 \n", + "\n", + "[280 rows x 13 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "full_rows = df[~df['Beginning stocks'].isna()]\n", "full_rows\n" @@ -875,17 +1138,28 @@ "id": "e914ce69", "metadata": {}, "source": [ - "# Using BigQuery SQL magics (%%bqsql)\n", + "# Handing Off to SQL: BigQuery SQL Magics (%%bqsql)\n", "\n", - "The BigQuery DataFrames (aka BigFrames) library provides a %%bqsql magic, which can query local pandas or BigFrames DataFrames, as well as anything supported by the BigQuery query engine, such as parquet / iceberg, CSV files in GCS, and BigQuery tables. To enable the magic, use the %load_ext magic.\n" + "The BigQuery DataFrames library provides the `%%bqsql` magic, which acts as the bridge between your Python and SQL environments. It allows the BigQuery query engine to directly reference and query your local Pandas DataFrames (by implicitly uploading them as temporary tables) as well as actual BigQuery tables and external tables in GCS (Parquet, Iceberg, CSV).\n", + "\n", + "To enable this integration in your notebook, load the `bigframes` extension:\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "3d837a5e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The bigframes extension is already loaded. To reload it, use:\n", + " %reload_ext bigframes\n" + ] + } + ], "source": [ "%load_ext bigframes\n" ] @@ -895,19 +1169,19 @@ "id": "315a53b5", "metadata": {}, "source": [ - "To ensure the correct Google Cloud project is billed for query usage, including free tier usage, configure the project ID used by the magics. If not set, the default project is discovered from your environment, such as the one associated with your application default credentials.\n" + "To ensure the correct Google Cloud project is billed for query usage, including free tier usage, configure the project ID used by the magics. Even in the free sandbox tier, a project ID is required to allocate query resources. If you don't set it explicitly, BigFrames will try to discover it from your environment (e.g., your Application Default Credentials).\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "ffe5757c", "metadata": {}, "outputs": [], "source": [ "import bigframes.pandas as bpd\n", "\n", - "bpd.options.bigquery.project = \"your-project-id\"\n" + "bpd.options.bigquery.project = \"bigframes-dev\" # Your project ID here.\n" ] }, { @@ -915,165 +1189,1349 @@ "id": "fe174ed2", "metadata": {}, "source": [ - "Now that the extension is loaded, you can use the %%bqsql magics to query the DataFrame created in the previous steps.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fbbf52d6", - "metadata": {}, - "outputs": [], - "source": [ - "%%bqsql\n", - "SELECT * FROM {full_rows}\n" - ] - }, - { - "cell_type": "markdown", - "id": "2fcd5284", - "metadata": {}, - "source": [ - "You should see the results from full_rows.\n", - "\n", - "\n", - "# Transforming the data with SQL\n", - "\n", - "The %%bqsql magics take a destination variable argument, which saves the results as a BigFrames DataFrame. This can be used to incrementally apply operations in both SQL and Python.\n", - "\n", - "First, limit the data to yearly data and save the results to the \"yearly\" variable.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "75fe0e10", - "metadata": {}, - "outputs": [], - "source": [ - "%%bqsql yearly\n", - "SELECT *\n", - "FROM {full_rows}\n", - "WHERE STARTS_WITH(`Time period`, 'MY')\n" - ] - }, - { - "cell_type": "markdown", - "id": "19a70e9e", - "metadata": {}, - "source": [ - "The \"Marketing year 1\" column isn't as useful as it could be because it is still a string. Transform it to a time series using SQL.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8fbb5224", - "metadata": {}, - "outputs": [], - "source": [ - "%%bqsql timeseries\n", - "SELECT\n", - " * EXCEPT (`Marketing year 1`),\n", - " TIMESTAMP(CONCAT(\n", - " REGEXP_EXTRACT(`Marketing year 1`, r'([0-9]+)\\/'),\n", - " '-01-01')) AS `year`\n", - "FROM {yearly}\n" - ] - }, - { - "cell_type": "markdown", - "id": "76ba8a7d", - "metadata": {}, - "source": [ - "# Visualizing the data\n", + "### Querying Local Pandas DataFrames with SQL\n", "\n", - "BigFrames supports most pandas operations, including several visualization methods. By setting a timestamp column to the index of the DataFrame, visualization becomes easier to understand.\n" + "With the project configured, you can now run SQL queries directly against your local Pandas DataFrame (`full_rows`) as if it were a table in BigQuery. Simply reference the variable name inside braces `{full_rows}` in your SQL query.\n" ] }, { "cell_type": "code", - "execution_count": null, - "id": "d3ff4eec", + "execution_count": 9, + "id": "fbbf52d6", "metadata": {}, - "outputs": [], - "source": [ - "timeseries.set_index('year').sort_index().plot.line()\n" - ] - }, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Query processed 0 Bytes in a moment of slot time. [Job bigframes-dev:US.e2808469-66b2-4468-abe5-12336bb4edad details]\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Load job ea85f7c0-dfd6-4c5c-b212-b1a758bc8d4e is DONE. Open Job" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + " Query processed 30.0 kB in a moment of slot time.\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Marketing year 1Time periodBeginning stocksProductionImports 2Total supply 3Food useSeed useFeed and residual useTotal domestic use 3Exports 2Total disappearance 3Ending stocks
02019/20Q2 Sep-Nov2345.5250.022.4822368.007246.96137.2849.561293.806233.426527.2321840.775
11983/84Q2 Sep-Nov3233.10.00.933234.03163.175100.515338.615359.715698.332535.7
21998/99Q2 Sep-Nov2385.3150.023.9292409.244240.74554.775-73.717221.803291.76513.5631895.681
32000/01Q2 Sep-Nov2352.670.025.1192377.789252.99349.816-24.454278.355293.309571.6641806.125
42023/24Q2 Sep-Nov1767.1210.036.7591803.88244.11941.107-57.453227.773155.028382.8011421.079
51993/94Q2 Sep-Nov2132.6070.030.1212162.728225.30660.908-38.467247.747329.247576.9941585.734
62013/14Q2 Sep-Nov1869.6370.048.0251917.662249.352.659-167.967133.992308.819442.8111474.851
71985/86Q2 Sep-Nov3203.50.05.0663208.566185.576365.867314.437250.729565.1662643.4
81989/90Q2 Sep-Nov1918.0460.07.1061925.152191.65670.257-87.837174.076328.586502.6621422.49
92005/06Q2 Sep-Nov1923.2910.020.3381943.629238.40150.157-60.612227.946286.259514.2051429.424
\n", + "

10 rows × 13 columns

\n", + "
[280 rows x 13 columns in total]" + ], + "text/plain": [ + " Marketing year 1 Time period Beginning stocks Production Imports 2 \\\n", + "0 2019/20 Q2 Sep-Nov 2345.525 0.0 22.482 \n", + "1 1983/84 Q2 Sep-Nov 3233.1 0.0 0.93 \n", + "2 1998/99 Q2 Sep-Nov 2385.315 0.0 23.929 \n", + "3 2000/01 Q2 Sep-Nov 2352.67 0.0 25.119 \n", + "4 2023/24 Q2 Sep-Nov 1767.121 0.0 36.759 \n", + "5 1993/94 Q2 Sep-Nov 2132.607 0.0 30.121 \n", + "6 2013/14 Q2 Sep-Nov 1869.637 0.0 48.025 \n", + "7 1985/86 Q2 Sep-Nov 3203.5 0.0 5.066 \n", + "8 1989/90 Q2 Sep-Nov 1918.046 0.0 7.106 \n", + "9 2005/06 Q2 Sep-Nov 1923.291 0.0 20.338 \n", + "\n", + " Total supply 3 Food use Seed use Feed and residual use \\\n", + "0 2368.007 246.961 37.284 9.561 \n", + "1 3234.03 163.1 75 100.515 \n", + "2 2409.244 240.745 54.775 -73.717 \n", + "3 2377.789 252.993 49.816 -24.454 \n", + "4 1803.88 244.119 41.107 -57.453 \n", + "5 2162.728 225.306 60.908 -38.467 \n", + "6 1917.662 249.3 52.659 -167.967 \n", + "7 3208.566 185.57 63 65.867 \n", + "8 1925.152 191.656 70.257 -87.837 \n", + "9 1943.629 238.401 50.157 -60.612 \n", + "\n", + " Total domestic use 3 Exports 2 Total disappearance 3 Ending stocks \n", + "0 293.806 233.426 527.232 1840.775 \n", + "1 338.615 359.715 698.33 2535.7 \n", + "2 221.803 291.76 513.563 1895.681 \n", + "3 278.355 293.309 571.664 1806.125 \n", + "4 227.773 155.028 382.801 1421.079 \n", + "5 247.747 329.247 576.994 1585.734 \n", + "6 133.992 308.819 442.811 1474.851 \n", + "7 314.437 250.729 565.166 2643.4 \n", + "8 174.076 328.586 502.662 1422.49 \n", + "9 227.946 286.259 514.205 1429.424 \n", + "...\n", + "\n", + "[280 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%bqsql\n", + "SELECT * FROM {full_rows}\n" + ] + }, + { + "cell_type": "markdown", + "id": "2fcd5284", + "metadata": {}, + "source": [ + "You should see the results from full_rows.\n", + "\n", + "\n", + "# Chaining SQL and Python: Saving SQL Results\n", + "\n", + "The true power of the `%%bqsql` magic lies in **chaining**. By providing a **destination variable name** as an argument to `%%bqsql` (e.g., `%%bqsql destination_var`), the query result is not just displayed; it is **saved as a remote BigQuery DataFrame (BigFrames DataFrame)**. \n", + "\n", + "This DataFrame lives on the BigQuery engine but behaves like a Pandas DataFrame in Python. You can immediately use it in subsequent Python cells, or reference it again in another SQL cell. This allows you to build a multi-step, hybrid processing pipeline.\n", + "\n", + "First, let's filter the data to only yearly entries using SQL, and save the result into a new BigFrames DataFrame named `yearly`:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "75fe0e10", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Query processed 0 Bytes in a moment of slot time. [Job bigframes-dev:US.0d27848b-fd9c-4f53-a27b-d2c1b403fe6d details]\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Load job 93ba32c2-afcf-4478-9f0b-b7675fc56dcb is DONE. Open Job" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + " Query processed 30.0 kB in a moment of slot time.\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Marketing year 1Time periodBeginning stocksProductionImports 2Total supply 3Food useSeed useFeed and residual useTotal domestic use 3Exports 2Total disappearance 3Ending stocks
01955/56MY Jun-May1109.0937.010.02056.0553.0--51.0604.0322.0926.01130.0
11957/58MY Jun-May1004.0956.010.01970.0547.0--43.0590.0418.01008.0962.0
21954/55MY Jun-May994.0984.03.01981.0552.0--53.0605.0267.0872.01109.0
31951/52MY Jun-May492.0988.030.01510.0585.0--110.0695.0485.01180.0330.0
41956/57MY Jun-May1130.01005.08.02143.0541.0--57.0598.0541.01139.01004.0
51950/51MY Jun-May496.01019.011.01526.0580.0--109.0689.0345.01034.0492.0
61962/63MY Jun-May1420.61092.05.32517.9502.761.434.7598.8649.41248.21269.7
71959/60MY Jun-May1368.01118.07.02493.0558.0--49.0607.0502.01109.01384.0
81963/64MY Jun-May1269.71146.84.02420.5487.964.928.6581.4845.61427.0993.5
91953/54MY Jun-May672.01173.06.01851.0556.0--87.0643.0214.0857.0994.0
\n", + "

10 rows × 13 columns

\n", + "
[77 rows x 13 columns in total]" + ], + "text/plain": [ + " Marketing year 1 Time period Beginning stocks Production Imports 2 \\\n", + "0 1955/56 MY Jun-May 1109.0 937.0 10.0 \n", + "1 1957/58 MY Jun-May 1004.0 956.0 10.0 \n", + "2 1954/55 MY Jun-May 994.0 984.0 3.0 \n", + "3 1951/52 MY Jun-May 492.0 988.0 30.0 \n", + "4 1956/57 MY Jun-May 1130.0 1005.0 8.0 \n", + "5 1950/51 MY Jun-May 496.0 1019.0 11.0 \n", + "6 1962/63 MY Jun-May 1420.6 1092.0 5.3 \n", + "7 1959/60 MY Jun-May 1368.0 1118.0 7.0 \n", + "8 1963/64 MY Jun-May 1269.7 1146.8 4.0 \n", + "9 1953/54 MY Jun-May 672.0 1173.0 6.0 \n", + "\n", + " Total supply 3 Food use Seed use Feed and residual use \\\n", + "0 2056.0 553.0 -- 51.0 \n", + "1 1970.0 547.0 -- 43.0 \n", + "2 1981.0 552.0 -- 53.0 \n", + "3 1510.0 585.0 -- 110.0 \n", + "4 2143.0 541.0 -- 57.0 \n", + "5 1526.0 580.0 -- 109.0 \n", + "6 2517.9 502.7 61.4 34.7 \n", + "7 2493.0 558.0 -- 49.0 \n", + "8 2420.5 487.9 64.9 28.6 \n", + "9 1851.0 556.0 -- 87.0 \n", + "\n", + " Total domestic use 3 Exports 2 Total disappearance 3 Ending stocks \n", + "0 604.0 322.0 926.0 1130.0 \n", + "1 590.0 418.0 1008.0 962.0 \n", + "2 605.0 267.0 872.0 1109.0 \n", + "3 695.0 485.0 1180.0 330.0 \n", + "4 598.0 541.0 1139.0 1004.0 \n", + "5 689.0 345.0 1034.0 492.0 \n", + "6 598.8 649.4 1248.2 1269.7 \n", + "7 607.0 502.0 1109.0 1384.0 \n", + "8 581.4 845.6 1427.0 993.5 \n", + "9 643.0 214.0 857.0 994.0 \n", + "...\n", + "\n", + "[77 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%bqsql yearly\n", + "SELECT *\n", + "FROM {full_rows}\n", + "WHERE STARTS_WITH(`Time period`, 'MY')\n" + ] + }, + { + "cell_type": "markdown", + "id": "19a70e9e", + "metadata": {}, + "source": [ + "### Chaining Step 2: Complex SQL Transformation on the BigFrames DataFrame\n", + "\n", + "Now, we can chain another SQL operation. We will reference the `yearly` BigFrames DataFrame we just created, extract the year using SQL regular expressions, cast it to a timestamp, and save the results into a new BigFrames DataFrame named `timeseries`.\n", + "\n", + "Notice how we are building a chain: Local Pandas -> [SQL filter] -> BigFrames `yearly` -> [SQL transform] -> BigFrames `timeseries`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "8fbb5224", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Query processed 0 Bytes in a moment of slot time. [Job bigframes-dev:US.3a239f28-2717-4d1e-bc60-7e56c09e6210 details]\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Load job a4a47d4e-31a8-44fb-b527-8c41ebec4d4a is DONE. Open Job" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + " Query processed 8.3 kB in a moment of slot time.\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Time periodBeginning stocksProductionImports 2Total supply 3Food useSeed useFeed and residual useTotal domestic use 3Exports 2Total disappearance 3Ending stocksyear
0MY Jun-May492.0988.030.01510.0585.0--110.0695.0485.01180.0330.01951-01-01 00:00:00+00:00
1MY Jun-May1130.01005.08.02143.0541.0--57.0598.0541.01139.01004.01956-01-01 00:00:00+00:00
2MY Jun-May496.01019.011.01526.0580.0--109.0689.0345.01034.0492.01950-01-01 00:00:00+00:00
3MY Jun-May330.01306.024.01660.0578.0--78.0656.0332.0988.0672.01952-01-01 00:00:00+00:00
4MY Jun-May1368.01118.07.02493.0558.0--49.0607.0502.01109.01384.01959-01-01 00:00:00+00:00
5MY Jun-May1004.0956.010.01970.0547.0--43.0590.0418.01008.0962.01957-01-01 00:00:00+00:00
6MY Jun-May994.0984.03.01981.0552.0--53.0605.0267.0872.01109.01954-01-01 00:00:00+00:00
7MY Jun-May1109.0937.010.02056.0553.0--51.0604.0322.0926.01130.01955-01-01 00:00:00+00:00
8MY Jun-May962.01457.08.02427.0561.0--48.0609.0450.01059.01368.01958-01-01 00:00:00+00:00
9MY Jun-May672.01173.06.01851.0556.0--87.0643.0214.0857.0994.01953-01-01 00:00:00+00:00
\n", + "

10 rows × 13 columns

\n", + "
[77 rows x 13 columns in total]" + ], + "text/plain": [ + " Time period Beginning stocks Production Imports 2 Total supply 3 \\\n", + "0 MY Jun-May 492.0 988.0 30.0 1510.0 \n", + "1 MY Jun-May 1130.0 1005.0 8.0 2143.0 \n", + "2 MY Jun-May 496.0 1019.0 11.0 1526.0 \n", + "3 MY Jun-May 330.0 1306.0 24.0 1660.0 \n", + "4 MY Jun-May 1368.0 1118.0 7.0 2493.0 \n", + "5 MY Jun-May 1004.0 956.0 10.0 1970.0 \n", + "6 MY Jun-May 994.0 984.0 3.0 1981.0 \n", + "7 MY Jun-May 1109.0 937.0 10.0 2056.0 \n", + "8 MY Jun-May 962.0 1457.0 8.0 2427.0 \n", + "9 MY Jun-May 672.0 1173.0 6.0 1851.0 \n", + "\n", + " Food use Seed use Feed and residual use Total domestic use 3 Exports 2 \\\n", + "0 585.0 -- 110.0 695.0 485.0 \n", + "1 541.0 -- 57.0 598.0 541.0 \n", + "2 580.0 -- 109.0 689.0 345.0 \n", + "3 578.0 -- 78.0 656.0 332.0 \n", + "4 558.0 -- 49.0 607.0 502.0 \n", + "5 547.0 -- 43.0 590.0 418.0 \n", + "6 552.0 -- 53.0 605.0 267.0 \n", + "7 553.0 -- 51.0 604.0 322.0 \n", + "8 561.0 -- 48.0 609.0 450.0 \n", + "9 556.0 -- 87.0 643.0 214.0 \n", + "\n", + " Total disappearance 3 Ending stocks year \n", + "0 1180.0 330.0 1951-01-01 00:00:00+00:00 \n", + "1 1139.0 1004.0 1956-01-01 00:00:00+00:00 \n", + "2 1034.0 492.0 1950-01-01 00:00:00+00:00 \n", + "3 988.0 672.0 1952-01-01 00:00:00+00:00 \n", + "4 1109.0 1384.0 1959-01-01 00:00:00+00:00 \n", + "5 1008.0 962.0 1957-01-01 00:00:00+00:00 \n", + "6 872.0 1109.0 1954-01-01 00:00:00+00:00 \n", + "7 926.0 1130.0 1955-01-01 00:00:00+00:00 \n", + "8 1059.0 1368.0 1958-01-01 00:00:00+00:00 \n", + "9 857.0 994.0 1953-01-01 00:00:00+00:00 \n", + "...\n", + "\n", + "[77 rows x 13 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%bqsql timeseries\n", + "SELECT\n", + " * EXCEPT (`Marketing year 1`),\n", + " TIMESTAMP(CONCAT(\n", + " REGEXP_EXTRACT(`Marketing year 1`, r'([0-9]+)\\/'),\n", + " '-01-01')) AS `year`\n", + "FROM {yearly}\n" + ] + }, { "cell_type": "markdown", - "id": "4b15e937", + "id": "76ba8a7d", "metadata": {}, "source": [ - "Alternatively, convert the DataFrame to pandas for further integration with other libraries.\n" + "# Chaining Back to Python: Visualizing BigFrames Data\n", + "\n", + "Now that we've completed our heavy SQL transformations, we can easily chain back to Python for visualization. Because BigFrames DataFrames implement the Pandas API, we can call standard visualization methods (like `.plot.line()`) directly on the remote `timeseries` DataFrame without downloading the full dataset first. The computations happen in BigQuery, and only the summarized chart data is sent back to the notebook.\n" ] }, { "cell_type": "code", - "execution_count": null, - "id": "97757974", + "execution_count": 12, + "id": "d3ff4eec", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Query processed 8.8 kB in a moment of slot time.\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Load job 6c270b53-5804-4d1b-a469-f6e86d471667 is DONE. Open Job" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "pddf = timeseries.set_index('year').sort_index().to_pandas()\n", - "pddf\n" + "timeseries.set_index('year').sort_index().plot.line()\n" ] }, { "cell_type": "markdown", - "id": "9c1242ab", + "id": "4b15e937", "metadata": {}, "source": [ - "# Conclusion\n", - "\n", - "By leveraging BigFrames, you can combine the best of both worlds: the expressive power of SQL and the versatile ecosystem of Python. This approach not only improves readability but also provides the opportunity to scale your data processing to handle massive datasets directly in BigQuery by swapping out a pandas DataFrame in these examples with a BigQuery DataFrame.\n", - "\n", - "\n", - "# Next Steps\n", + "### Downloading to Local Pandas (Optional Handoff)\n", "\n", - "Another way to use BigQuery features on pandas DataFrames is through the BigQuery pandas extension. For example, call any of the community BigQuery functions in [BigQuery Utils](https://github.com/GoogleCloudPlatform/bigquery-utils/tree/master/udfs#bigquery-udfs), [BigFunctions](https://unytics.io/bigfunctions/bigfunctions/#function-categories), [CARTO Analytics Toolbox for BigQuery](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery), and more by using the DataFrame.bigquery.sql_scalar(...) accessor.\n" + "If you need to use local Python libraries that are not supported by BigFrames (such as custom plotting libraries or local ML frameworks), you can explicitly download the final transformed remote DataFrame into a standard local Pandas DataFrame using `.to_pandas()`:\n" ] }, { "cell_type": "code", - "execution_count": null, - "id": "4209f930", + "execution_count": 13, + "id": "97757974", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Time periodBeginning stocksProductionImports 2Total supply 3Food useSeed useFeed and residual useTotal domestic use 3Exports 2Total disappearance 3Ending stocks
year
1950-01-01 00:00:00+00:00MY Jun-May496.01019.011.01526.0580.0--109.0689.0345.01034.0492.0
1951-01-01 00:00:00+00:00MY Jun-May492.0988.030.01510.0585.0--110.0695.0485.01180.0330.0
1952-01-01 00:00:00+00:00MY Jun-May330.01306.024.01660.0578.0--78.0656.0332.0988.0672.0
1953-01-01 00:00:00+00:00MY Jun-May672.01173.06.01851.0556.0--87.0643.0214.0857.0994.0
1954-01-01 00:00:00+00:00MY Jun-May994.0984.03.01981.0552.0--53.0605.0267.0872.01109.0
.......................................
2022-01-01 00:00:00+00:00MY Jun-May674.4311649.713121.5852445.729971.67768.36975.5031115.549760.6121876.161569.568
2023-01-01 00:00:00+00:00MY Jun-May569.5681803.942137.7982511.308961.30362.04685.6171108.966705.9081814.874696.434
2024-01-01 00:00:00+00:00MY Jun-May696.4341978.697148.9542824.085969.49361.1112.8631143.456825.8951969.351854.734
2025-01-01 00:00:00+00:00MY Jun-May854.7341984.537125.02964.271960.059.7100.01119.7910.02029.7934.571
2026-01-01 00:00:00+00:00MY Jun-May934.5711561.322140.02635.893960.05980.01099.0775.01874.0761.893
\n", + "

77 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " Time period Beginning stocks Production \\\n", + "year \n", + "1950-01-01 00:00:00+00:00 MY Jun-May 496.0 1019.0 \n", + "1951-01-01 00:00:00+00:00 MY Jun-May 492.0 988.0 \n", + "1952-01-01 00:00:00+00:00 MY Jun-May 330.0 1306.0 \n", + "1953-01-01 00:00:00+00:00 MY Jun-May 672.0 1173.0 \n", + "1954-01-01 00:00:00+00:00 MY Jun-May 994.0 984.0 \n", + "... ... ... ... \n", + "2022-01-01 00:00:00+00:00 MY Jun-May 674.431 1649.713 \n", + "2023-01-01 00:00:00+00:00 MY Jun-May 569.568 1803.942 \n", + "2024-01-01 00:00:00+00:00 MY Jun-May 696.434 1978.697 \n", + "2025-01-01 00:00:00+00:00 MY Jun-May 854.734 1984.537 \n", + "2026-01-01 00:00:00+00:00 MY Jun-May 934.571 1561.322 \n", + "\n", + " Imports 2 Total supply 3 Food use Seed use \\\n", + "year \n", + "1950-01-01 00:00:00+00:00 11.0 1526.0 580.0 -- \n", + "1951-01-01 00:00:00+00:00 30.0 1510.0 585.0 -- \n", + "1952-01-01 00:00:00+00:00 24.0 1660.0 578.0 -- \n", + "1953-01-01 00:00:00+00:00 6.0 1851.0 556.0 -- \n", + "1954-01-01 00:00:00+00:00 3.0 1981.0 552.0 -- \n", + "... ... ... ... ... \n", + "2022-01-01 00:00:00+00:00 121.585 2445.729 971.677 68.369 \n", + "2023-01-01 00:00:00+00:00 137.798 2511.308 961.303 62.046 \n", + "2024-01-01 00:00:00+00:00 148.954 2824.085 969.493 61.1 \n", + "2025-01-01 00:00:00+00:00 125.0 2964.271 960.0 59.7 \n", + "2026-01-01 00:00:00+00:00 140.0 2635.893 960.0 59 \n", + "\n", + " Feed and residual use Total domestic use 3 \\\n", + "year \n", + "1950-01-01 00:00:00+00:00 109.0 689.0 \n", + "1951-01-01 00:00:00+00:00 110.0 695.0 \n", + "1952-01-01 00:00:00+00:00 78.0 656.0 \n", + "1953-01-01 00:00:00+00:00 87.0 643.0 \n", + "1954-01-01 00:00:00+00:00 53.0 605.0 \n", + "... ... ... \n", + "2022-01-01 00:00:00+00:00 75.503 1115.549 \n", + "2023-01-01 00:00:00+00:00 85.617 1108.966 \n", + "2024-01-01 00:00:00+00:00 112.863 1143.456 \n", + "2025-01-01 00:00:00+00:00 100.0 1119.7 \n", + "2026-01-01 00:00:00+00:00 80.0 1099.0 \n", + "\n", + " Exports 2 Total disappearance 3 Ending stocks \n", + "year \n", + "1950-01-01 00:00:00+00:00 345.0 1034.0 492.0 \n", + "1951-01-01 00:00:00+00:00 485.0 1180.0 330.0 \n", + "1952-01-01 00:00:00+00:00 332.0 988.0 672.0 \n", + "1953-01-01 00:00:00+00:00 214.0 857.0 994.0 \n", + "1954-01-01 00:00:00+00:00 267.0 872.0 1109.0 \n", + "... ... ... ... \n", + "2022-01-01 00:00:00+00:00 760.612 1876.161 569.568 \n", + "2023-01-01 00:00:00+00:00 705.908 1814.874 696.434 \n", + "2024-01-01 00:00:00+00:00 825.895 1969.351 854.734 \n", + "2025-01-01 00:00:00+00:00 910.0 2029.7 934.571 \n", + "2026-01-01 00:00:00+00:00 775.0 1874.0 761.893 \n", + "\n", + "[77 rows x 12 columns]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "import pandas as pd\n", + "pddf = timeseries.set_index('year').sort_index().to_pandas()\n", + "pddf\n" + ] + }, + { + "cell_type": "markdown", + "id": "9c1242ab", + "metadata": {}, + "source": [ + "# Conclusion: The Power of Hybrid Chaining\n", + "\n", + "By leveraging BigQuery DataFrames and the `%%bqsql` magic, you have built a powerful, interoperable pipeline that seamlessly transitions between SQL and Python:\n", + "\n", + "```mermaid\n", + "graph LR\n", + " A[\"Local Excel File\"] --> B[\"Local Pandas DF (Python)\"]\n", + " B -->|%%bqsql| C[\"yearly remote DF (SQL)\"]\n", + " C -->|%%bqsql| D[\"timeseries remote DF (SQL)\"]\n", + " D -->|Plot / Analysis| E[\"Python Visualization\"]\n", + " D -->|.to_pandas| F[\"Local Pandas DF (Optional)\"]\n", + " \n", + " style B fill:#ffd166,stroke:#333,stroke-width:2px,color:black\n", + " style C fill:#06d6a0,stroke:#333,stroke-width:2px,color:black\n", + " style D fill:#06d6a0,stroke:#333,stroke-width:2px,color:black\n", + " style E fill:#ffd166,stroke:#333,stroke-width:2px,color:black\n", + "```\n", "\n", - "import bigframes.pandas as bpd # registers the bigquery accessor\n", + "This hybrid approach offers several key benefits:\n", + "- **Optimal Tool Selection**: Use SQL for what it does best (complex queries, window functions, regex extractions on large sets) and Python for what it does best (visualization, statistical analysis, ML, orchestrating workflow).\n", + "- **Improved Readability**: Instead of massive, unreadable SQL queries with dozens of CTEs, or long, complex Pandas method chains, you can split your pipeline into logical steps, alternating between SQL and Python.\n", + "- **Seamless Scaling**: The exact same `%%bqsql` code can scale from a tiny local Pandas DataFrame to billions of rows in a production BigQuery table. You only need to swap the initial local Pandas DataFrame with a BigQuery DataFrame reference.\n", "\n", - "data = {\n", - " 'text1': [\n", - " 'apple',\n", - " 'banana',\n", - " 'orange',\n", - " 'grape',\n", - " 'strawberry',\n", - " 'blueberry',\n", - " 'raspberry',\n", - " 'pineapple'\n", - " ],\n", - " 'text2': [\n", - " 'aple',\n", - " 'bandana',\n", - " 'orenge',\n", - " 'grpe',\n", - " 'straaawberry',\n", - " 'bluebery',\n", - " 'rasery',\n", - " 'pinapple'\n", - " ]\n", - "}\n", "\n", - "df = pd.DataFrame(data)\n", + "# Next Steps\n", "\n", - "bpd.options.bigquery.project = \"your-project-id\"\n", + "In addition to the `%%bqsql` cell magic, BigFrames also registers a **BigQuery Accessor** on standard Pandas DataFrames, allowing you to run SQL scalar functions directly on local pandas data. \n", "\n", - "df.bigquery.sql_scalar(\"bqutil.fn.cw_editdistance({text1}, {text2})\")\n" + "For example, you can call powerful Google Cloud community UDFs from [BigQuery Utils](https://github.com/GoogleCloudPlatform/bigquery-utils/tree/master/udfs#bigquery-udfs), [BigFunctions](https://unytics.io/bigfunctions/bigfunctions/#function-categories), or [CARTO Analytics Toolbox for BigQuery](https://docs.carto.com/data-and-analysis/analytics-toolbox-for-bigquery) using `df.bigquery.sql_scalar(...)`:\n" ] }, { @@ -1081,9 +2539,16 @@ "id": "6a7928bd", "metadata": {}, "source": [ - "BigQuery sandbox offers powerful, scalable analytics, but some features aren't supported, such as BigQuery Machine Learning. Connect a billing account to your project to use powerful features such as the AI.FORECAST function, which can predict time series data using Google's foundational models.\n", + "### Scaling Up: Advanced BigQuery Features\n", + "\n", + "While the BigQuery sandbox offers a powerful environment to test these hybrid Python-SQL workflows for free, some advanced features like BigQuery Machine Learning (BQML) are restricted. By connecting a billing account to your Google Cloud project, you can unlock advanced capabilities such as `ML.FORECAST` (or the `AI.FORECAST` function) to predict time-series data using Google's state-of-the-art foundational models directly from your SQL/Python chain.\n", + "\n", + "### Feedback & Community\n", "\n", - "The BigFrames team would love to hear from you. If you would like to reach out, please send an email to: [bigframes-feedback@google.com](mailto:bigframes-feedback@google.com) or by filing an issue at the[ open source BigFrames repository](https://github.com/googleapis/google-cloud-python/issues). To receive updates about BigFrames, subscribe to the [BigFrames email list](https://docs.google.com/forms/d/10EnDyYdYUW9HvelHYuBRC8L3GdGVl3rX0aroinbRZyc/edit?resourcekey=0-QUsnpzF91gm9hsp04rSA6Q)." + "The BigFrames team would love to hear your feedback on the hybrid Python-SQL experience:\n", + "* **Email**: [bigframes-feedback@google.com](mailto:bigframes-feedback@google.com)\n", + "* **Issues**: File bug reports or feature requests on the [open-source BigFrames repository](https://github.com/googleapis/google-cloud-python/issues).\n", + "* **Updates**: To receive news and updates, subscribe to the [BigFrames email list](https://docs.google.com/forms/d/10EnDyYdYUW9HvelHYuBRC8L3GdGVl3rX0aroinbRZyc/edit?resourcekey=0-QUsnpzF91gm9hsp04rSA6Q).\n" ] } ],