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/3] 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/3] 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/3] 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" },