From a244976fcefd498803f103649d627408c8ee614f Mon Sep 17 00:00:00 2001 From: khider <11758571+khider@users.noreply.github.com> Date: Tue, 23 Jun 2026 17:20:05 -0700 Subject: [PATCH 1/3] paper draft --- examples/tutorial-noaa.ipynb | 5949 ------------------------------- examples/tutorial-pangaea.ipynb | 1368 ------- paper.bib | 55 + paper.md | 83 + 4 files changed, 138 insertions(+), 7317 deletions(-) delete mode 100644 examples/tutorial-noaa.ipynb delete mode 100644 examples/tutorial-pangaea.ipynb create mode 100644 paper.bib create mode 100644 paper.md diff --git a/examples/tutorial-noaa.ipynb b/examples/tutorial-noaa.ipynb deleted file mode 100644 index 013bc1f1..00000000 --- a/examples/tutorial-noaa.ipynb +++ /dev/null @@ -1,5949 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "38da3038", - "metadata": {}, - "source": [ - "## Getting Started with PyleoTUPS: Automated Paleoclimate Data Extraction\n", - "\n", - "**PyleoTUPS** is a Python package designed to streamline paleoclimate data workflows. It automates the extraction and processing of datasets from major repositories like NOAA NCEI.\n", - "\n", - "Key features include:\n", - "* **Automated Extraction:** Parses complex text files and templates automatically.\n", - "* **Metadata Preservation:** Keeps study-level metadata (authors, location) linked to the data tables.\n", - "* **FAIR Compliance:** Supports standards like LiPD and NOAA PaST vocabularies.\n", - "\n", - "In this tutorial, we will cover:\n", - "1. **Searching** for studies using the NOAA API.\n", - "2. **Browsing** search results (Metadata, Sites, Publications).\n", - "3. **Extracting** data into pandas DataFrames." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7549ae17", - "metadata": {}, - "outputs": [], - "source": [ - "import pyleotups as pt\n", - "\n", - "# Initialize a NOAA Dataset manager\n", - "# This object will act as your session, storing search results and processing data.\n", - "dataset = pt.NOAADataset()" - ] - }, - { - "cell_type": "markdown", - "id": "1fec6d34", - "metadata": {}, - "source": [ - "### Step 1: Searching for Studies\n", - "\n", - "The primary entry point for finding data is the `search_studies()` method. This connects directly to the NOAA NCEI Paleo Search API." - ] - }, - { - "cell_type": "markdown", - "id": "0bad858c", - "metadata": {}, - "source": [ - "```Note\n", - "Given parameter's are based on the endpoints by NCEI-NOAA and it's description can be found at https://www.ncei.noaa.gov/access/paleo-search/api\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "1dffa662", - "metadata": {}, - "source": [ - "### 1.1 Search by Identifier\n", - "If you know the specific ID of a study, you can fetch it directly. \n", - "*Note: When an ID is provided, all other search parameters (like location or author) are ignored.*" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d0d664a8", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:41:47,812][INFO] - search_studies: Limit defaulted to 100 (PyleoTUPS).\n", - "[2026-03-24 12:41:47,814][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&NOAAStudyId=18316&limit=100\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 1/1 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
StudyIDXMLIDStudyNameDataTypeEarliestYearBPMostRecentYearBPEarliestYearCEMostRecentYearCECoverage [S, N, W, E]StudyNotesScienceKeywordsInvestigatorsPublicationsSitesFunding
01831616019WAIS Divide Core 1,200 Year Atmospheric CO2 an...ICE CORES1217117331939(-79.47, -79.47, -112.13, -112.13)CO2 concentration and Stable Isotopic Composit...[carbon cycle]Thomas Bauska, Fortunat Joos, Alan Mix, Raphae...[{'Author': 'Ahn, J., E. J. Brook, L. Mitchell...[[{'DataTableID': '28694', 'DataTableName': 'W...[{'fundingAgency': 'US National Science Founda...
\n", - "" - ], - "text/plain": [ - " StudyID XMLID StudyName \\\n", - "0 18316 16019 WAIS Divide Core 1,200 Year Atmospheric CO2 an... \n", - "\n", - " DataType EarliestYearBP MostRecentYearBP EarliestYearCE \\\n", - "0 ICE CORES 1217 11 733 \n", - "\n", - " MostRecentYearCE Coverage [S, N, W, E] \\\n", - "0 1939 (-79.47, -79.47, -112.13, -112.13) \n", - "\n", - " StudyNotes ScienceKeywords \\\n", - "0 CO2 concentration and Stable Isotopic Composit... [carbon cycle] \n", - "\n", - " Investigators \\\n", - "0 Thomas Bauska, Fortunat Joos, Alan Mix, Raphae... \n", - "\n", - " Publications \\\n", - "0 [{'Author': 'Ahn, J., E. J. Brook, L. Mitchell... \n", - "\n", - " Sites \\\n", - "0 [[{'DataTableID': '28694', 'DataTableName': 'W... \n", - "\n", - " Funding \n", - "0 [{'fundingAgency': 'US National Science Founda... " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Fetch a specific study by its NOAA ID\n", - "# This fills the 'dataset' object with the result.\n", - "dataset.search_studies(noaa_id=18316)\n", - "\n", - "# View a summary of the result\n", - "dataset.get_summary()" - ] - }, - { - "cell_type": "markdown", - "id": "422b6d05", - "metadata": {}, - "source": [ - "### Search by Metadata\n", - "\n", - "For broader discovery, you can search using a combination of parameters. `PyleoTUPS` supports lists for fields like investigators, keywords, and locations.\n", - "\n", - "**Key Parameters:**\n", - "* **Geography:** `min_lat`, `max_lat`, `min_lon`, `max_lon`.\n", - "* **Investigators:** Provide a list of names. \n", - " * *Convention:* NOAA expects `\"LastName, Initials\"` (e.g., `\"Wahl, E.R.\"`). Searching by just `\"LastName\"` often works but is less precise.\n", - " * *Logic:* By default, multiple items are treated as **OR** (match *any*). Use `investigators_and_or=\"AND\"` to match *all*.\n", - "* **Species:** Requires strict **4-letter codes** (e.g., `\"PIPO\"`. Find Species list [here](https://www.ncei.noaa.gov/access/paleo-search/study/params.json) ) .\n", - "* **Time:** `earliest_year`, `latest_year`.\n", - "* **Keywords:** Hierarchies are supported (e.g., `\"earth science>paleoclimate\"`)." - ] - }, - { - "cell_type": "markdown", - "id": "0ce900dc", - "metadata": {}, - "source": [ - "##### Efficient Use of `investigator` as a search parameter" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7185f905", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:41:48,799][INFO] - search_studies: Limit defaulted to 100 (PyleoTUPS).\n", - "[2026-03-24 12:41:48,801][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "--- Searching for Wahl OR Vose ---\n", - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&limit=100&investigators=Wahl%2C+E.R.%7CVose%2C+R.S.&investigatorsAndOr=or\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 24/24 [00:00<00:00, 2378.51it/s]\n", - "[2026-03-24 12:41:49,974][INFO] - Retrieved 24 studies.\n", - "[2026-03-24 12:41:49,991][INFO] - search_studies: Limit defaulted to 100 (PyleoTUPS).\n", - "[2026-03-24 12:41:49,995][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found 24 studies.\n", - "\n", - "--- Searching for Wahl AND Vose ---\n", - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&limit=100&investigators=Wahl%2C+E.R.%7CVose%2C+R.S.&investigatorsAndOr=and\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 2/2 [00:00<00:00, 1000.19it/s]\n", - "[2026-03-24 12:41:50,765][INFO] - Retrieved 2 studies.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found 2 studies.\n" - ] - } - ], - "source": [ - "# Clear previous results\n", - "dataset = pt.NOAADataset()\n", - "\n", - "# Example 1: \"OR\" Logic (Default)\n", - "# Find studies by EITHER Wahl OR Vose\n", - "print(\"--- Searching for Wahl OR Vose ---\")\n", - "search_by_investigator_or = dataset.search_studies(\n", - " investigators=[\"Wahl, E.R.\", \"Vose, R.S.\"],\n", - ")\n", - "print(f\"Found {len(search_by_investigator_or)} studies.\")\n", - "\n", - "# Example 2: \"AND\" Logic\n", - "# Find studies co-authored by BOTH Wahl AND Vose\n", - "# Note: We must specify the `investigators_and_or` parameter\n", - "print(\"\\n--- Searching for Wahl AND Vose ---\")\n", - "search_by_investigator_and = dataset.search_studies(\n", - " investigators=[\"Wahl, E.R.\", \"Vose, R.S.\"],\n", - " investigators_and_or=\"AND\",\n", - ")\n", - "print(f\"Found {len(search_by_investigator_and)} studies.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9be00897", - "metadata": {}, - "outputs": [], - "source": [ - "dataset = pt.NOAADataset()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5d25a388", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:41:50,808][INFO] - search_studies: Limit defaulted to 100 (PyleoTUPS).\n", - "[2026-03-24 12:41:50,809][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n", - "[2026-03-24 12:41:51,435][WARNING] - No studies found for investigator(s): E.R., Wahl. NOAA expects 'LastName, Initials'. Try variations like:\n", - " - 'LastName, Initials'\n", - " - 'LastName'\n", - " - 'Initials'\n", - "[2026-03-24 12:41:51,438][INFO] - Retrieved 0 studies.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&limit=100&investigators=E.R.%2C+Wahl\n", - "Found 0 studies.\n" - ] - } - ], - "source": [ - "search_incorrect_investigator_usage = dataset.search_studies(investigators=[\"E.R., Wahl\"])\n", - "\n", - "print(f\"Found {len(search_incorrect_investigator_usage)} studies.\")" - ] - }, - { - "cell_type": "markdown", - "id": "7855c0c3", - "metadata": {}, - "source": [ - "##### Efficient Use of Geographic search parameter\n", - "\n", - "You can search for studies within a specific geographic region using latitude and longitude bounds.\n", - "\n", - "**Parameters:**\n", - "* `min_lat`, `max_lat`: Latitude range (Strict Valid: -90 to 90).\n", - "* `min_lon`, `max_lon`: Longitude range (Strict Valid: -180 to 180).\n", - "\n", - "**Important Notes:**\n", - "1. **Integer Precision:** Decimal values (e.g., `23.5`) will be cast to integers (e.g., `23`) due to NOAA's API requiremnets.\n", - "2. **Bounding Box:** The search returns studies that fall *anywhere* within the box defined by these coordinates." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "05c8398d", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:41:51,498][INFO] - search_studies: Limit defaulted to 100 (PyleoTUPS).\n", - "[2026-03-24 12:41:51,501][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&limit=100&minLat=-10&maxLat=10&minLon=120&maxLon=150\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 100/100 [00:00<00:00, 2330.91it/s]\n", - "[2026-03-24 12:41:53,526][WARNING] - Retrieved 100 studies, which is the specified limit. Consider increasing the limit parameter to fetch more studies.\n", - "[2026-03-24 12:41:53,527][INFO] - Retrieved 100 studies.\n" - ] - }, - { - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
StudyIDXMLIDStudyNameDataTypeEarliestYearBPMostRecentYearBPEarliestYearCEMostRecentYearCECoverage [S, N, W, E]StudyNotesScienceKeywordsInvestigatorsPublicationsSitesFunding
01043791011,000 Year Ensemble Reconstructions of Tempera...CLIMATE RECONSTRUCTIONS950.0-45.01000.01995.0(0.0, 90.0, -180.0, 180.0)Calibration ensemble reconstructions of existi...[carbon cycle, sensitivity, Air Temperature Re...David Frank, Jan Esper, Christoph Raible, Ulf ...[{'Author': 'Frank, D.C., J. Esper, C.C. Raibl...[[{'DataTableID': '19235', 'DataTableName': 'F...[{'fundingAgency': 'Swiss National Science Fou...
142679837541006-year reconstruction of Rossby wavenumber-5CLIMATE RECONSTRUCTIONS950.0-55.01000.02005.0(0.0, 90.0, -180.0, 180.0)None[Atmospheric and Oceanic Circulation Patterns ...Ellie Broadman, Valerie Trouet, Kai Kornhuber[{'Author': 'Broadman, Ellie, Kai Kornhuber, I...[[{'DataTableID': '56946', 'DataTableName': 'W...[{'fundingAgency': 'US National Science Founda...
212203102672000 Year Precipitation-Based Southern Oscilla...CLIMATE RECONSTRUCTIONS1900.0-5.050.01955.0(-90.0, 90.0, -180.0, 180.0)Reconstruction of a precipitation-based Southe...[Atmospheric and Oceanic Circulation Patterns ...Hong Yan, Liguang Sun, Yuhong Wang, Wen Huang,...[{'Author': 'Yan, H., L. Sun, Y. Wang, W. Huan...[[{'DataTableID': '20526', 'DataTableName': 'S...[{'fundingAgency': 'National Natural Science F...
322315203882000 Year Tropical Rainfall ReconstructionsCLIMATE RECONSTRUCTIONS2000.0-50.0-50.02000.0(-30.0, 30.0, -180.0, 180.0)Composite reconstruction of low latitude rainf...[Precipitation Reconstruction]Franziska Lechleitner, Sebastian Breitenbach, ...[{'Author': 'Franziska A. Lechleitner, Sebasti...[[{'DataTableID': '33444', 'DataTableName': 'L...[{'fundingAgency': 'European Union', 'fundingG...
412894109589400 Year Cosmogenic Isotope Data and Solar Ac...CLIMATE FORCING9389.0-27.0-7439.01977.0(-90.0, 90.0, -180.0, 180.0)Records of common production rate of cosmogeni...[Solar Forcing Reconstruction]Friedhelm Steinhilber, Jose Abreu, Jürg Beer, ...[{'Author': 'Steinhilber, F., J.A. Abreu, J. B...[[{'DataTableID': '21230', 'DataTableName': 'T...[{'fundingAgency': 'Swiss National Science Fou...
................................................
955495620Global Lake-Level Variations from 18,000 to 0 ...LAKE LEVELS20000.00.0-18050.01950.0(-45.5, 78.49, -163.25, 176.73)Lake status determined at 1000-year intervals ...[hydrology, trends]Frances Alayne Street-Perrott, None Marchand, ...[{'Author': 'Street-Perrott, F.A., D.S. Marcha...[[{'DataTableID': '9005', 'DataTableName': 'Mo...[]
963669477952Global Marine Fossil 14C Data during the last ...PALEOCEANOGRAPHY52119.00.0-50169.01950.0(-80.0, 90.0, -180.0, 180.0)NoneNonePatrick Rafter, William Gray, Sophia Hines, An...[{'Author': 'Rafter, Patrick A., William R. Gr...[[{'DataTableID': '49382', 'DataTableName': 'G...[{'fundingAgency': 'US National Science Founda...
9759832681Global Network for Isotopes in Precipitation(G...OTHER COLLECTIONS-7.0-41.01957.01991.0(-90.0, 90.0, -180.0, 180.0)NoneKazimierz Rozanski, Luis Araguás-Araguás, Robe...[][[{'DataTableID': '32472', 'DataTableName': 'G...[]
983157273252Global Ocean 25,000 Year Atmosphere-Ocean CO2 ...PALEOCLIMATIC MODELING25000.00.0-23050.01950.0(-80.0, 90.0, -180.0, 180.0)Transient simulation of ocean carbonate chemis...[carbon cycle]Jun Shao, Lowell Stott, William Gray, Rosanna ...[{'Author': 'Jun Shao, Lowell D. Stott, Willia...[[{'DataTableID': '44097', 'DataTableName': 'S...[{'fundingAgency': 'US National Science Founda...
991242310466Global Ocean Glacial Export Production DataPALEOCEANOGRAPHY100000.018000.0-98050.0-16050.0(-90.0, 90.0, -180.0, 180.0)Tables and Table Notes \\nTable S1. Change i...[biogeochemical cycles]Karen Kohfeld, Corinne Le Quéré, Sandy Harriso...[{'Author': 'Kohfeld, K.E., C. Le Quéré, S.P. ...[[{'DataTableID': '20776', 'DataTableName': 'K...[]
\n", - "

100 rows × 15 columns

\n", - "
" - ], - "text/plain": [ - " StudyID XMLID StudyName \\\n", - "0 10437 9101 1,000 Year Ensemble Reconstructions of Tempera... \n", - "1 42679 83754 1006-year reconstruction of Rossby wavenumber-5 \n", - "2 12203 10267 2000 Year Precipitation-Based Southern Oscilla... \n", - "3 22315 20388 2000 Year Tropical Rainfall Reconstructions \n", - "4 12894 10958 9400 Year Cosmogenic Isotope Data and Solar Ac... \n", - ".. ... ... ... \n", - "95 5495 620 Global Lake-Level Variations from 18,000 to 0 ... \n", - "96 36694 77952 Global Marine Fossil 14C Data during the last ... \n", - "97 5983 2681 Global Network for Isotopes in Precipitation(G... \n", - "98 31572 73252 Global Ocean 25,000 Year Atmosphere-Ocean CO2 ... \n", - "99 12423 10466 Global Ocean Glacial Export Production Data \n", - "\n", - " DataType EarliestYearBP MostRecentYearBP EarliestYearCE \\\n", - "0 CLIMATE RECONSTRUCTIONS 950.0 -45.0 1000.0 \n", - "1 CLIMATE RECONSTRUCTIONS 950.0 -55.0 1000.0 \n", - "2 CLIMATE RECONSTRUCTIONS 1900.0 -5.0 50.0 \n", - "3 CLIMATE RECONSTRUCTIONS 2000.0 -50.0 -50.0 \n", - "4 CLIMATE FORCING 9389.0 -27.0 -7439.0 \n", - ".. ... ... ... ... \n", - "95 LAKE LEVELS 20000.0 0.0 -18050.0 \n", - "96 PALEOCEANOGRAPHY 52119.0 0.0 -50169.0 \n", - "97 OTHER COLLECTIONS -7.0 -41.0 1957.0 \n", - "98 PALEOCLIMATIC MODELING 25000.0 0.0 -23050.0 \n", - "99 PALEOCEANOGRAPHY 100000.0 18000.0 -98050.0 \n", - "\n", - " MostRecentYearCE Coverage [S, N, W, E] \\\n", - "0 1995.0 (0.0, 90.0, -180.0, 180.0) \n", - "1 2005.0 (0.0, 90.0, -180.0, 180.0) \n", - "2 1955.0 (-90.0, 90.0, -180.0, 180.0) \n", - "3 2000.0 (-30.0, 30.0, -180.0, 180.0) \n", - "4 1977.0 (-90.0, 90.0, -180.0, 180.0) \n", - ".. ... ... \n", - "95 1950.0 (-45.5, 78.49, -163.25, 176.73) \n", - "96 1950.0 (-80.0, 90.0, -180.0, 180.0) \n", - "97 1991.0 (-90.0, 90.0, -180.0, 180.0) \n", - "98 1950.0 (-80.0, 90.0, -180.0, 180.0) \n", - "99 -16050.0 (-90.0, 90.0, -180.0, 180.0) \n", - "\n", - " StudyNotes \\\n", - "0 Calibration ensemble reconstructions of existi... \n", - "1 None \n", - "2 Reconstruction of a precipitation-based Southe... \n", - "3 Composite reconstruction of low latitude rainf... \n", - "4 Records of common production rate of cosmogeni... \n", - ".. ... \n", - "95 Lake status determined at 1000-year intervals ... \n", - "96 None \n", - "97 \n", - "98 Transient simulation of ocean carbonate chemis... \n", - "99 Tables and Table Notes \\nTable S1. Change i... \n", - "\n", - " ScienceKeywords \\\n", - "0 [carbon cycle, sensitivity, Air Temperature Re... \n", - "1 [Atmospheric and Oceanic Circulation Patterns ... \n", - "2 [Atmospheric and Oceanic Circulation Patterns ... \n", - "3 [Precipitation Reconstruction] \n", - "4 [Solar Forcing Reconstruction] \n", - ".. ... \n", - "95 [hydrology, trends] \n", - "96 None \n", - "97 None \n", - "98 [carbon cycle] \n", - "99 [biogeochemical cycles] \n", - "\n", - " Investigators \\\n", - "0 David Frank, Jan Esper, Christoph Raible, Ulf ... \n", - "1 Ellie Broadman, Valerie Trouet, Kai Kornhuber \n", - "2 Hong Yan, Liguang Sun, Yuhong Wang, Wen Huang,... \n", - "3 Franziska Lechleitner, Sebastian Breitenbach, ... \n", - "4 Friedhelm Steinhilber, Jose Abreu, Jürg Beer, ... \n", - ".. ... \n", - "95 Frances Alayne Street-Perrott, None Marchand, ... \n", - "96 Patrick Rafter, William Gray, Sophia Hines, An... \n", - "97 Kazimierz Rozanski, Luis Araguás-Araguás, Robe... \n", - "98 Jun Shao, Lowell Stott, William Gray, Rosanna ... \n", - "99 Karen Kohfeld, Corinne Le Quéré, Sandy Harriso... \n", - "\n", - " Publications \\\n", - "0 [{'Author': 'Frank, D.C., J. Esper, C.C. Raibl... \n", - "1 [{'Author': 'Broadman, Ellie, Kai Kornhuber, I... \n", - "2 [{'Author': 'Yan, H., L. Sun, Y. Wang, W. Huan... \n", - "3 [{'Author': 'Franziska A. Lechleitner, Sebasti... \n", - "4 [{'Author': 'Steinhilber, F., J.A. Abreu, J. B... \n", - ".. ... \n", - "95 [{'Author': 'Street-Perrott, F.A., D.S. Marcha... \n", - "96 [{'Author': 'Rafter, Patrick A., William R. Gr... \n", - "97 [] \n", - "98 [{'Author': 'Jun Shao, Lowell D. Stott, Willia... \n", - "99 [{'Author': 'Kohfeld, K.E., C. Le Quéré, S.P. ... \n", - "\n", - " Sites \\\n", - "0 [[{'DataTableID': '19235', 'DataTableName': 'F... \n", - "1 [[{'DataTableID': '56946', 'DataTableName': 'W... \n", - "2 [[{'DataTableID': '20526', 'DataTableName': 'S... \n", - "3 [[{'DataTableID': '33444', 'DataTableName': 'L... \n", - "4 [[{'DataTableID': '21230', 'DataTableName': 'T... \n", - ".. ... \n", - "95 [[{'DataTableID': '9005', 'DataTableName': 'Mo... \n", - "96 [[{'DataTableID': '49382', 'DataTableName': 'G... \n", - "97 [[{'DataTableID': '32472', 'DataTableName': 'G... \n", - "98 [[{'DataTableID': '44097', 'DataTableName': 'S... \n", - "99 [[{'DataTableID': '20776', 'DataTableName': 'K... \n", - "\n", - " Funding \n", - "0 [{'fundingAgency': 'Swiss National Science Fou... \n", - "1 [{'fundingAgency': 'US National Science Founda... \n", - "2 [{'fundingAgency': 'National Natural Science F... \n", - "3 [{'fundingAgency': 'European Union', 'fundingG... \n", - "4 [{'fundingAgency': 'Swiss National Science Fou... \n", - ".. ... \n", - "95 [] \n", - "96 [{'fundingAgency': 'US National Science Founda... \n", - "97 [] \n", - "98 [{'fundingAgency': 'US National Science Founda... \n", - "99 [] \n", - "\n", - "[100 rows x 15 columns]" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Search for studies in a specific region (e.g., Tropical Pacific)\n", - "# Latitude: 10S to 10N (-10 to 10)\n", - "# Longitude: 120E to 150E (120 to 150)\n", - "dataset = pt.NOAADataset()\n", - "\n", - "dataset.search_studies(\n", - " min_lat=-10, max_lat=10,\n", - " min_lon=120, max_lon=150,\n", - " limit = 100\n", - ")\n", - "\n", - "# View the location data in the summary\n", - "dataset.get_summary()" - ] - }, - { - "cell_type": "markdown", - "id": "7154070d", - "metadata": {}, - "source": [ - "```Note\n", - "PyleoTUPS retrieves and presents the first 100 response from NOAA. You can adjust the ```limit``` parameter to include more results" - ] - }, - { - "cell_type": "markdown", - "id": "e3f9a904", - "metadata": {}, - "source": [ - "## Step 2: Browsing Search Results\n" - ] - }, - { - "cell_type": "markdown", - "id": "b159ad0c", - "metadata": {}, - "source": [ - "\n", - "Once you have performed a search, the `dataset` object holds the results. You can browse these results at three levels of granularity:\n", - "1. **Study Level (`get_summary`)**: High-level metadata (Authors, Titles, Date).\n", - "2. **Site/Table Level (`get_sites`)**: Detailed information about specific sites and the data tables available for them. **This is where you find the IDs needed to extract data.**\n", - "3. **Publication Level (`get_publications`)**: Citation information for the studies." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3bc1b0f6", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:41:53,910][INFO] - search_studies: Limit defaulted to 100 (PyleoTUPS).\n", - "[2026-03-24 12:41:53,912][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&NOAAStudyId=18316&limit=100\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 1/1 [00:00<00:00, 1000.79it/s]\n", - "[2026-03-24 12:41:54,527][INFO] - Retrieved 1 studies.\n" - ] - }, - { - "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", - "
StudyIDXMLIDStudyNameDataTypeEarliestYearBPMostRecentYearBPEarliestYearCEMostRecentYearCECoverage [S, N, W, E]StudyNotesScienceKeywordsInvestigatorsPublicationsSitesFunding
01831616019WAIS Divide Core 1,200 Year Atmospheric CO2 an...ICE CORES1217117331939(-79.47, -79.47, -112.13, -112.13)CO2 concentration and Stable Isotopic Composit...[carbon cycle]Thomas Bauska, Fortunat Joos, Alan Mix, Raphae...[{'Author': 'Ahn, J., E. J. Brook, L. Mitchell...[[{'DataTableID': '28694', 'DataTableName': 'W...[{'fundingAgency': 'US National Science Founda...
\n", - "
" - ], - "text/plain": [ - " StudyID XMLID StudyName \\\n", - "0 18316 16019 WAIS Divide Core 1,200 Year Atmospheric CO2 an... \n", - "\n", - " DataType EarliestYearBP MostRecentYearBP EarliestYearCE \\\n", - "0 ICE CORES 1217 11 733 \n", - "\n", - " MostRecentYearCE Coverage [S, N, W, E] \\\n", - "0 1939 (-79.47, -79.47, -112.13, -112.13) \n", - "\n", - " StudyNotes ScienceKeywords \\\n", - "0 CO2 concentration and Stable Isotopic Composit... [carbon cycle] \n", - "\n", - " Investigators \\\n", - "0 Thomas Bauska, Fortunat Joos, Alan Mix, Raphae... \n", - "\n", - " Publications \\\n", - "0 [{'Author': 'Ahn, J., E. J. Brook, L. Mitchell... \n", - "\n", - " Sites \\\n", - "0 [[{'DataTableID': '28694', 'DataTableName': 'W... \n", - "\n", - " Funding \n", - "0 [{'fundingAgency': 'US National Science Founda... " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# 1. View the high-level summary of the studies found\n", - "\n", - "dataset = pt.NOAADataset()\n", - "dataset.search_studies(noaa_id=18316)\n", - "\n", - "summary_df = dataset.get_summary()\n", - "\n", - "display(summary_df)\n" - ] - }, - { - "cell_type": "markdown", - "id": "6febec5d", - "metadata": {}, - "source": [ - "### Detailed Site & Data Table Information\n", - "The `get_sites()` method flattens the hierarchy, providing a row for every data file (or \"Data Table\") associated with a study.\n", - "\n", - "**Why is this important?**\n", - "To extract specific data later, you will need the `dataTableID`. This ID is unique to each file and allows PyleoTUPS to link metadata back to the data.\n", - "\n", - "* **SiteName:** The name of the specific location (e.g., a specific ice core or lake).\n", - "* **DataTableID:** The unique identifier for the data file.\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d33c4a63", - "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", - "
DataTableIDDataTableNameTimeUnitFileURLVariablesFileDescriptionTotalFilesAvailableSiteIDSiteNameLocationNameLatitudeLongitudeMinElevationMaxElevationStudyIDStudyName
028694WAIS2015d13CO2CEhttps://www.ncei.noaa.gov/pub/data/paleo/iceco...[Core_ID, depth_top_m, depth_bot_m, depth_m, a...NOAA Template File122909WAIS Divide WDC05AContinent>Antarctica-79.47-112.131759175918316WAIS Divide Core 1,200 Year Atmospheric CO2 an...
128803WAIS2015CO2CEhttps://www.ncei.noaa.gov/pub/data/paleo/iceco...[Core_ID, depth_m, age_AD, co2_ppm, co2_1s_ppm...NOAA Template File122909WAIS Divide WDC05AContinent>Antarctica-79.47-112.131759175918316WAIS Divide Core 1,200 Year Atmospheric CO2 an...
228804WAIS2015CO2fluxCEhttps://www.ncei.noaa.gov/pub/data/paleo/iceco...[age_AD, Fal_15.9, Fal_84.1, Fal_median, Fao_1...NOAA Template File122909WAIS Divide WDC05AContinent>Antarctica-79.47-112.131759175918316WAIS Divide Core 1,200 Year Atmospheric CO2 an...
\n", - "
" - ], - "text/plain": [ - " DataTableID DataTableName TimeUnit \\\n", - "0 28694 WAIS2015d13CO2 CE \n", - "1 28803 WAIS2015CO2 CE \n", - "2 28804 WAIS2015CO2flux CE \n", - "\n", - " FileURL \\\n", - "0 https://www.ncei.noaa.gov/pub/data/paleo/iceco... \n", - "1 https://www.ncei.noaa.gov/pub/data/paleo/iceco... \n", - "2 https://www.ncei.noaa.gov/pub/data/paleo/iceco... \n", - "\n", - " Variables FileDescription \\\n", - "0 [Core_ID, depth_top_m, depth_bot_m, depth_m, a... NOAA Template File \n", - "1 [Core_ID, depth_m, age_AD, co2_ppm, co2_1s_ppm... NOAA Template File \n", - "2 [age_AD, Fal_15.9, Fal_84.1, Fal_median, Fao_1... NOAA Template File \n", - "\n", - " TotalFilesAvailable SiteID SiteName LocationName \\\n", - "0 1 22909 WAIS Divide WDC05A Continent>Antarctica \n", - "1 1 22909 WAIS Divide WDC05A Continent>Antarctica \n", - "2 1 22909 WAIS Divide WDC05A Continent>Antarctica \n", - "\n", - " Latitude Longitude MinElevation MaxElevation StudyID \\\n", - "0 -79.47 -112.13 1759 1759 18316 \n", - "1 -79.47 -112.13 1759 1759 18316 \n", - "2 -79.47 -112.13 1759 1759 18316 \n", - "\n", - " StudyName \n", - "0 WAIS Divide Core 1,200 Year Atmospheric CO2 an... \n", - "1 WAIS Divide Core 1,200 Year Atmospheric CO2 an... \n", - "2 WAIS Divide Core 1,200 Year Atmospheric CO2 an... " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# 2. View detailed site and data table information\n", - "sites_df = dataset.get_sites()\n", - "\n", - "# Display columns relevant for data extraction\n", - "# Note the 'dataTableID' column - we will use this in Step 3.\n", - "display(sites_df)" - ] - }, - { - "cell_type": "markdown", - "id": "69b63cde", - "metadata": {}, - "source": [ - "### Retrieving Citations\n", - "The `get_publications()` method returns:\n", - "1. A **BibTeX** object (compatible with reference managers).\n", - "2. A **DataFrame** of publication details (DOIs, years, journals).\n", - "\n", - "**Parameters:**\n", - "* `save=True`: Saves a `.bib` file to your disk.\n", - "* `verbose=True`: Prints the BibTeX entries to the console." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bf654960", - "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", - "
AuthorTitleJournalYearVolumeNumberPagesTypeDOIURLCitationKeyStudyIDStudyName
0Ahn, J., E. J. Brook, L. Mitchell, J. Rosen, J...Atmospheric CO2 over the last 1000 years: A hi...Global Biogeochemical Cycles2012262NaNpublication10.1029/2011GB004247http://dx.doi.org/10.1029/2011GB004247Rubino_Atmospheric_2012_1831618316WAIS Divide Core 1,200 Year Atmospheric CO2 an...
1Thomas K. Bauska, Fortunat Joos, Alan C. Mix, ...Links between atmospheric carbon dioxide, the ...Nature Geoscience201585383-387publication10.1038/NGEO2422http://dx.doi.org/10.1038/NGEO2422Brook_Links_2015_1831618316WAIS Divide Core 1,200 Year Atmospheric CO2 an...
\n", - "
" - ], - "text/plain": [ - " Author \\\n", - "0 Ahn, J., E. J. Brook, L. Mitchell, J. Rosen, J... \n", - "1 Thomas K. Bauska, Fortunat Joos, Alan C. Mix, ... \n", - "\n", - " Title \\\n", - "0 Atmospheric CO2 over the last 1000 years: A hi... \n", - "1 Links between atmospheric carbon dioxide, the ... \n", - "\n", - " Journal Year Volume Number Pages Type \\\n", - "0 Global Biogeochemical Cycles 2012 26 2 NaN publication \n", - "1 Nature Geoscience 2015 8 5 383-387 publication \n", - "\n", - " DOI URL \\\n", - "0 10.1029/2011GB004247 http://dx.doi.org/10.1029/2011GB004247 \n", - "1 10.1038/NGEO2422 http://dx.doi.org/10.1038/NGEO2422 \n", - "\n", - " CitationKey StudyID \\\n", - "0 Rubino_Atmospheric_2012_18316 18316 \n", - "1 Brook_Links_2015_18316 18316 \n", - "\n", - " StudyName \n", - "0 WAIS Divide Core 1,200 Year Atmospheric CO2 an... \n", - "1 WAIS Divide Core 1,200 Year Atmospheric CO2 an... " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# 3. Get citation data\n", - "# Returns a tuple: (BibTeX_Database, DataFrame)\n", - "bib_db, pubs_df = dataset.get_publications(save=False, verbose=False)\n", - "\n", - "# Display the publication metadata\n", - "display(pubs_df)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6e91d3dc", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:41:54,639][WARNING] - No path specified. Saving BibTeX to: bibtex_20260324_1241.bib\n" - ] - }, - { - "data": { - "text/plain": [ - "(BibliographyData(\n", - " entries=OrderedCaseInsensitiveDict([\n", - " ('Rubino_Atmospheric_2012_18316', Entry('article',\n", - " fields=[\n", - " ('author', 'Ahn, J., E. J. Brook, L. Mitchell, J. Rosen, J. R. McConnell, K. Taylor, D. Etheridge, M. Rubino'),\n", - " ('title', 'Atmospheric CO2 over the last 1000 years: A high-resolution record from the West Antarctic Ice Sheet (WAIS) Divide ice core'),\n", - " ('journal', 'Global Biogeochemical Cycles'),\n", - " ('year', '2012'),\n", - " ('doi', '10.1029/2011GB004247'),\n", - " ('url', 'http://dx.doi.org/10.1029/2011GB004247')])), \n", - " ('Brook_Links_2015_18316', Entry('article',\n", - " fields=[\n", - " ('author', 'Thomas K. Bauska, Fortunat Joos, Alan C. Mix, Raphael Roth, Jinho Ahn, and Edward J. Brook'),\n", - " ('title', 'Links between atmospheric carbon dioxide, the land carbon reservoir and climate over the past millennium'),\n", - " ('journal', 'Nature Geoscience'),\n", - " ('year', '2015'),\n", - " ('doi', '10.1038/NGEO2422'),\n", - " ('url', 'http://dx.doi.org/10.1038/NGEO2422')]))]),\n", - " \n", - " preamble=[]),\n", - " Author \\\n", - " 0 Ahn, J., E. J. Brook, L. Mitchell, J. Rosen, J... \n", - " 1 Thomas K. Bauska, Fortunat Joos, Alan C. Mix, ... \n", - " \n", - " Title \\\n", - " 0 Atmospheric CO2 over the last 1000 years: A hi... \n", - " 1 Links between atmospheric carbon dioxide, the ... \n", - " \n", - " Journal Year Volume Number Pages Type \\\n", - " 0 Global Biogeochemical Cycles 2012 26 2 NaN publication \n", - " 1 Nature Geoscience 2015 8 5 383-387 publication \n", - " \n", - " DOI URL \\\n", - " 0 10.1029/2011GB004247 http://dx.doi.org/10.1029/2011GB004247 \n", - " 1 10.1038/NGEO2422 http://dx.doi.org/10.1038/NGEO2422 \n", - " \n", - " CitationKey StudyID \\\n", - " 0 Rubino_Atmospheric_2012_18316 18316 \n", - " 1 Brook_Links_2015_18316 18316 \n", - " \n", - " StudyName \n", - " 0 WAIS Divide Core 1,200 Year Atmospheric CO2 an... \n", - " 1 WAIS Divide Core 1,200 Year Atmospheric CO2 an... )" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# save the BibTeX database to a .bib file. File will be saved in the directory where the notebook/script is run.\n", - "dataset.get_publications(save=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8d1912e2", - "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", - "
StudyIDDataTypeSiteIDSiteNameLocationNameLatitudeLongitudeMinElevationMaxElevation
012402OTHER COLLECTIONS22723GlobalGeographic Region>Global-9090NoneNone
18610ICE CORES20633ACT2Continent>North America>Greenland66.0119-45.15824102410
28610ICE CORES22899ACT1Continent>North America>Greenland66.0039-46.551124102410
38610ICE CORES22900ACT3Continent>North America>Greenland65.995-43.606924102410
48610ICE CORES22901ACT4Continent>North America>Greenland65.9811-42.788924102410
56177ICE CORES20633ACT2Continent>North America>Greenland66.0119-45.15824102410
616279PALEOLIMNOLOGY55837Lake HaukadalsvatnContinent>Europe>Northern Europe>Iceland65.055846-21.6257573838
716279PALEOLIMNOLOGY55838Lake HvítárvatnContinent>Europe>Northern Europe>Iceland64.613723-19.8437693838
823930TREE RING57630Brooks Range UplandContinent>North America>United States Of Ameri...68.375-149.295910910
923931TREE RING57631Inigok RiparianContinent>North America>United States Of Ameri...69.99-153.043535
1023932TREE RING57632Inigok UplandContinent>North America>United States Of Ameri...69.99-153.043838
1123933TREE RING57633Itkillik UplandContinent>North America>United States Of Ameri...68.641-149.614739739
1222053TREE RING57178Kuparuk RiparianContinent>North America>United States Of Ameri...68.662-149.43717717
1322054TREE RING57179Kuparuk UplandContinent>North America>United States Of Ameri...68.662-149.428720720
\n", - "
" - ], - "text/plain": [ - " StudyID DataType SiteID SiteName \\\n", - "0 12402 OTHER COLLECTIONS 22723 Global \n", - "1 8610 ICE CORES 20633 ACT2 \n", - "2 8610 ICE CORES 22899 ACT1 \n", - "3 8610 ICE CORES 22900 ACT3 \n", - "4 8610 ICE CORES 22901 ACT4 \n", - "5 6177 ICE CORES 20633 ACT2 \n", - "6 16279 PALEOLIMNOLOGY 55837 Lake Haukadalsvatn \n", - "7 16279 PALEOLIMNOLOGY 55838 Lake Hvítárvatn \n", - "8 23930 TREE RING 57630 Brooks Range Upland \n", - "9 23931 TREE RING 57631 Inigok Riparian \n", - "10 23932 TREE RING 57632 Inigok Upland \n", - "11 23933 TREE RING 57633 Itkillik Upland \n", - "12 22053 TREE RING 57178 Kuparuk Riparian \n", - "13 22054 TREE RING 57179 Kuparuk Upland \n", - "\n", - " LocationName Latitude Longitude \\\n", - "0 Geographic Region>Global -90 90 \n", - "1 Continent>North America>Greenland 66.0119 -45.158 \n", - "2 Continent>North America>Greenland 66.0039 -46.5511 \n", - "3 Continent>North America>Greenland 65.995 -43.6069 \n", - "4 Continent>North America>Greenland 65.9811 -42.7889 \n", - "5 Continent>North America>Greenland 66.0119 -45.158 \n", - "6 Continent>Europe>Northern Europe>Iceland 65.055846 -21.625757 \n", - "7 Continent>Europe>Northern Europe>Iceland 64.613723 -19.843769 \n", - "8 Continent>North America>United States Of Ameri... 68.375 -149.295 \n", - "9 Continent>North America>United States Of Ameri... 69.99 -153.04 \n", - "10 Continent>North America>United States Of Ameri... 69.99 -153.04 \n", - "11 Continent>North America>United States Of Ameri... 68.641 -149.614 \n", - "12 Continent>North America>United States Of Ameri... 68.662 -149.43 \n", - "13 Continent>North America>United States Of Ameri... 68.662 -149.428 \n", - "\n", - " MinElevation MaxElevation \n", - "0 None None \n", - "1 2410 2410 \n", - "2 2410 2410 \n", - "3 2410 2410 \n", - "4 2410 2410 \n", - "5 2410 2410 \n", - "6 38 38 \n", - "7 38 38 \n", - "8 910 910 \n", - "9 35 35 \n", - "10 38 38 \n", - "11 739 739 \n", - "12 717 717 \n", - "13 720 720 " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dataset.get_geo()" - ] - }, - { - "cell_type": "markdown", - "id": "30bfdb9d", - "metadata": {}, - "source": [ - "## Step 3: Extracting Data\n" - ] - }, - { - "cell_type": "markdown", - "id": "cf1de586", - "metadata": {}, - "source": [ - "\n", - "This is the core function of PyleoTUPS. Once you have identified the data you want (from the `get_sites()` step above), you can extract it into a pandas DataFrame.\n", - "\n", - "### Method A: By DataTableID (Recommended)\n", - "**Why?** When you fetch by ID, PyleoTUPS automatically links the data back to its parent Study and Site. The resulting DataFrame will contain rich metadata in its `.attrs` dictionary.\n", - "\n", - "* **Input:** A string ID or a list of IDs (e.g., `[\"28694\", \"28803\"]`).\n", - "* **Output:** A list of one or more pandas DataFrames." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d7302473", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:41:54,705][INFO] - search_studies: Limit defaulted to 100 (PyleoTUPS).\n", - "[2026-03-24 12:41:54,706][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&NOAAStudyId=18316&limit=100\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 1/1 [00:00<00:00, 491.54it/s]\n", - "[2026-03-24 12:41:55,514][INFO] - Retrieved 1 studies.\n" - ] - }, - { - "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", - "
DataTableIDDataTableNameTimeUnitFileURLVariablesFileDescriptionTotalFilesAvailableSiteIDSiteNameLocationNameLatitudeLongitudeMinElevationMaxElevationStudyIDStudyName
028694WAIS2015d13CO2CEhttps://www.ncei.noaa.gov/pub/data/paleo/iceco...[Core_ID, depth_top_m, depth_bot_m, depth_m, a...NOAA Template File122909WAIS Divide WDC05AContinent>Antarctica-79.47-112.131759175918316WAIS Divide Core 1,200 Year Atmospheric CO2 an...
128803WAIS2015CO2CEhttps://www.ncei.noaa.gov/pub/data/paleo/iceco...[Core_ID, depth_m, age_AD, co2_ppm, co2_1s_ppm...NOAA Template File122909WAIS Divide WDC05AContinent>Antarctica-79.47-112.131759175918316WAIS Divide Core 1,200 Year Atmospheric CO2 an...
228804WAIS2015CO2fluxCEhttps://www.ncei.noaa.gov/pub/data/paleo/iceco...[age_AD, Fal_15.9, Fal_84.1, Fal_median, Fao_1...NOAA Template File122909WAIS Divide WDC05AContinent>Antarctica-79.47-112.131759175918316WAIS Divide Core 1,200 Year Atmospheric CO2 an...
\n", - "
" - ], - "text/plain": [ - " DataTableID DataTableName TimeUnit \\\n", - "0 28694 WAIS2015d13CO2 CE \n", - "1 28803 WAIS2015CO2 CE \n", - "2 28804 WAIS2015CO2flux CE \n", - "\n", - " FileURL \\\n", - "0 https://www.ncei.noaa.gov/pub/data/paleo/iceco... \n", - "1 https://www.ncei.noaa.gov/pub/data/paleo/iceco... \n", - "2 https://www.ncei.noaa.gov/pub/data/paleo/iceco... \n", - "\n", - " Variables FileDescription \\\n", - "0 [Core_ID, depth_top_m, depth_bot_m, depth_m, a... NOAA Template File \n", - "1 [Core_ID, depth_m, age_AD, co2_ppm, co2_1s_ppm... NOAA Template File \n", - "2 [age_AD, Fal_15.9, Fal_84.1, Fal_median, Fao_1... NOAA Template File \n", - "\n", - " TotalFilesAvailable SiteID SiteName LocationName \\\n", - "0 1 22909 WAIS Divide WDC05A Continent>Antarctica \n", - "1 1 22909 WAIS Divide WDC05A Continent>Antarctica \n", - "2 1 22909 WAIS Divide WDC05A Continent>Antarctica \n", - "\n", - " Latitude Longitude MinElevation MaxElevation StudyID \\\n", - "0 -79.47 -112.13 1759 1759 18316 \n", - "1 -79.47 -112.13 1759 1759 18316 \n", - "2 -79.47 -112.13 1759 1759 18316 \n", - "\n", - " StudyName \n", - "0 WAIS Divide Core 1,200 Year Atmospheric CO2 an... \n", - "1 WAIS Divide Core 1,200 Year Atmospheric CO2 an... \n", - "2 WAIS Divide Core 1,200 Year Atmospheric CO2 an... " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# 1. View the high-level summary of the studies found\n", - "\n", - "dataset = pt.NOAADataset()\n", - "dataset.search_studies(noaa_id=18316)\n", - "\n", - "dataset.get_sites()\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aba45464", - "metadata": {}, - "outputs": [], - "source": [ - "dfs = dataset.get_data(dataTableIDs=[\"28694\", \"28803\", \"28804\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fcb90269", - "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", - "
Core_IDdepth_top_mdepth_bot_mdepth_mage_ADd13C_CO2
0WDC05A84.4184.5984.501916.37-6.868
1WDC05A94.8295.0094.911871.58-6.569
2WDC05A100.34100.54100.441847.24-6.542
3WDC05A106.06106.24106.151822.16-6.419
4WDC05A109.02109.12109.071809.02-6.420
\n", - "
" - ], - "text/plain": [ - " Core_ID depth_top_m depth_bot_m depth_m age_AD d13C_CO2\n", - "0 WDC05A 84.41 84.59 84.50 1916.37 -6.868\n", - "1 WDC05A 94.82 95.00 94.91 1871.58 -6.569\n", - "2 WDC05A 100.34 100.54 100.44 1847.24 -6.542\n", - "3 WDC05A 106.06 106.24 106.15 1822.16 -6.419\n", - "4 WDC05A 109.02 109.12 109.07 1809.02 -6.420" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'variables': ['Core_ID', 'depth_top_m', 'depth_bot_m', 'depth_m', 'age_AD', 'd13C_CO2'], 'NOAAStudyId': '18316', 'StudyName': 'WAIS Divide Core 1,200 Year Atmospheric CO2 and CO2 Stable Isotope Data'}\n" - ] - }, - { - "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", - "
Core_IDdepth_mage_ADco2_ppmco2_1s_ppmnum_reps
0WDC05A78.9731939.7311.61.66
1WDC05A80.0951934.8307.10.212
2WDC05A80.5951933306.51.35
3WDC05A82.5881924.5303.90.36
4WDC05A84.641915.8298.81.24
\n", - "
" - ], - "text/plain": [ - " Core_ID depth_m age_AD co2_ppm co2_1s_ppm num_reps\n", - "0 WDC05A 78.973 1939.7 311.6 1.6 6\n", - "1 WDC05A 80.095 1934.8 307.1 0.2 12\n", - "2 WDC05A 80.595 1933 306.5 1.3 5\n", - "3 WDC05A 82.588 1924.5 303.9 0.3 6\n", - "4 WDC05A 84.64 1915.8 298.8 1.2 4" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'variables': ['Core_ID', 'depth_m', 'age_AD', 'co2_ppm', 'co2_1s_ppm', 'num_reps'], 'NOAAStudyId': '18316', 'StudyName': 'WAIS Divide Core 1,200 Year Atmospheric CO2 and CO2 Stable Isotope Data'}\n" - ] - }, - { - "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", - "
age_ADFal_15.9Fal_84.1Fal_medianFao_15.9Fao_84.1Fao_mediandel_lc_stocks_15.9del_lc_stocks_84.1del_lc_stocks_mediandel_oc_stocks_15.9del_oc_stocks_84.1del_oc_stocks_median
0755-0.00769060.05312750.0203811-0.06871700.0604406-0.0027614-0.00769060.05312750.0203811-0.06871700.0604406-0.0027614
1756-0.00045630.06903730.0312458-0.08011520.0490091-0.0142406-0.00852620.12244100.0515803-0.14819700.1136900-0.0178154
27570.00475170.08229630.0399637-0.08950570.0418756-0.0238649-0.00325090.20513000.0920047-0.23886100.1500030-0.0407658
37580.00910250.09434220.0479293-0.09895520.0355697-0.02998250.00748080.29945900.1400970-0.33920900.1874460-0.0676734
47590.01288800.10578000.0545621-0.10788400.0312313-0.03619030.02016560.40320800.1931260-0.44266200.2180520-0.1107660
\n", - "
" - ], - "text/plain": [ - " age_AD Fal_15.9 Fal_84.1 Fal_median Fao_15.9 Fao_84.1 Fao_median \\\n", - "0 755 -0.0076906 0.0531275 0.0203811 -0.0687170 0.0604406 -0.0027614 \n", - "1 756 -0.0004563 0.0690373 0.0312458 -0.0801152 0.0490091 -0.0142406 \n", - "2 757 0.0047517 0.0822963 0.0399637 -0.0895057 0.0418756 -0.0238649 \n", - "3 758 0.0091025 0.0943422 0.0479293 -0.0989552 0.0355697 -0.0299825 \n", - "4 759 0.0128880 0.1057800 0.0545621 -0.1078840 0.0312313 -0.0361903 \n", - "\n", - " del_lc_stocks_15.9 del_lc_stocks_84.1 del_lc_stocks_median \\\n", - "0 -0.0076906 0.0531275 0.0203811 \n", - "1 -0.0085262 0.1224410 0.0515803 \n", - "2 -0.0032509 0.2051300 0.0920047 \n", - "3 0.0074808 0.2994590 0.1400970 \n", - "4 0.0201656 0.4032080 0.1931260 \n", - "\n", - " del_oc_stocks_15.9 del_oc_stocks_84.1 del_oc_stocks_median \n", - "0 -0.0687170 0.0604406 -0.0027614 \n", - "1 -0.1481970 0.1136900 -0.0178154 \n", - "2 -0.2388610 0.1500030 -0.0407658 \n", - "3 -0.3392090 0.1874460 -0.0676734 \n", - "4 -0.4426620 0.2180520 -0.1107660 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'variables': ['age_AD', 'Fal_15.9', 'Fal_84.1', 'Fal_median', 'Fao_15.9', 'Fao_84.1', 'Fao_median', 'del_lc_stocks_15.9', 'del_lc_stocks_84.1', 'del_lc_stocks_median', 'del_oc_stocks_15.9', 'del_oc_stocks_84.1', 'del_oc_stocks_median'], 'NOAAStudyId': '18316', 'StudyName': 'WAIS Divide Core 1,200 Year Atmospheric CO2 and CO2 Stable Isotope Data'}\n" - ] - } - ], - "source": [ - "for df in dfs:\n", - " display(df.head())\n", - " print(df.attrs)" - ] - }, - { - "cell_type": "markdown", - "id": "bdace4cd", - "metadata": {}, - "source": [ - "NOAA has templated as well as non-templated data tables. The templated tables follow a standard format and include metadata in the table itself, while non-templated tables may have varying formats. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d0681c79", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:41:59,610][INFO] - search_studies: Limit defaulted to 100 (PyleoTUPS).\n", - "[2026-03-24 12:41:59,613][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&NOAAStudyId=9957&limit=100\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 1/1 [00:00<00:00, 486.47it/s]\n", - "[2026-03-24 12:42:30,274][INFO] - Retrieved 1 studies.\n" - ] - }, - { - "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", - "
StudyIDXMLIDStudyNameDataTypeEarliestYearBPMostRecentYearBPEarliestYearCEMostRecentYearCECoverage [S, N, W, E]StudyNotesScienceKeywordsInvestigatorsPublicationsSitesFunding
0995788508.2k Event Speleothem Oxygen Isotope DataSPELEOTHEMS85667678-6616-5728(-13.2167, 25.28, -44.05, 108.08)Oxygen isotope data from six stalagmites in Ch...[abrupt climate change, Intertropical Converge...Hai Cheng, Dominik Fleitmann, R. Lawrence Edwa...[{'Author': 'Cheng, H., D. Fleitmann, R.L. Edw...[[{'DataTableID': '18801', 'DataTableName': 'D...[{'fundingAgency': 'Comer Science and Educatio...
\n", - "
" - ], - "text/plain": [ - " StudyID XMLID StudyName DataType \\\n", - "0 9957 8850 8.2k Event Speleothem Oxygen Isotope Data SPELEOTHEMS \n", - "\n", - " EarliestYearBP MostRecentYearBP EarliestYearCE MostRecentYearCE \\\n", - "0 8566 7678 -6616 -5728 \n", - "\n", - " Coverage [S, N, W, E] \\\n", - "0 (-13.2167, 25.28, -44.05, 108.08) \n", - "\n", - " StudyNotes \\\n", - "0 Oxygen isotope data from six stalagmites in Ch... \n", - "\n", - " ScienceKeywords \\\n", - "0 [abrupt climate change, Intertropical Converge... \n", - "\n", - " Investigators \\\n", - "0 Hai Cheng, Dominik Fleitmann, R. Lawrence Edwa... \n", - "\n", - " Publications \\\n", - "0 [{'Author': 'Cheng, H., D. Fleitmann, R.L. Edw... \n", - "\n", - " Sites \\\n", - "0 [[{'DataTableID': '18801', 'DataTableName': 'D... \n", - "\n", - " Funding \n", - "0 [{'fundingAgency': 'Comer Science and Educatio... " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "speleo8k_ds = pt.NOAADataset()\n", - "speleo8k_ds.search_studies(noaa_id=9957)\n", - "speleo8k_ds.get_summary()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "00a6a24b", - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
DataTableIDDataTableNameTimeUnitFileURLVariablesFileDescriptionTotalFilesAvailableSiteIDSiteNameLocationNameLatitudeLongitudeMinElevationMaxElevationStudyIDStudyName
018801D4 Donggecal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[age, depth, delta 18O]Speleothem26554Dongge CaveContinent>Asia>Eastern Asia>China25.28108.0868068099578.2k Event Speleothem Oxygen Isotope Data
118801D4 Donggecal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[]Speleothem26554Dongge CaveContinent>Asia>Eastern Asia>China25.28108.0868068099578.2k Event Speleothem Oxygen Isotope Data
218802DA Donggecal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[age, depth, delta 18O]Speleothem26554Dongge CaveContinent>Asia>Eastern Asia>China25.28108.0868068099578.2k Event Speleothem Oxygen Isotope Data
318802DA Donggecal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[]Speleothem26554Dongge CaveContinent>Asia>Eastern Asia>China25.28108.0868068099578.2k Event Speleothem Oxygen Isotope Data
418806Q5 Qunfcal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[age, depth, delta 18O]Speleothem214640Qunf CaveContinent>Asia>Western Asia>Middle East>Oman17.1754.365065099578.2k Event Speleothem Oxygen Isotope Data
518806Q5 Qunfcal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[]Speleothem214640Qunf CaveContinent>Asia>Western Asia>Middle East>Oman17.1754.365065099578.2k Event Speleothem Oxygen Isotope Data
618803H14cal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[age, depth, delta 18O]Speleothem231383Hoti CaveContinent>Asia>Western Asia>Middle East>Oman23.0857.3580080099578.2k Event Speleothem Oxygen Isotope Data
718803H14cal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[]Speleothem231383Hoti CaveContinent>Asia>Western Asia>Middle East>Oman23.0857.3580080099578.2k Event Speleothem Oxygen Isotope Data
818804PAD07cal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[age, depth, delta 18O]Speleothem231568Padre CaveContinent>South America>Brazil-13.2167-44.0565080099578.2k Event Speleothem Oxygen Isotope Data
918804PAD07cal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[]Speleothem231568Padre CaveContinent>South America>Brazil-13.2167-44.0565080099578.2k Event Speleothem Oxygen Isotope Data
1018805PX5cal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[age, depth, delta 18O]Speleothem231569Paixão CaveContinent>South America>Brazil-12.65-41.0565080099578.2k Event Speleothem Oxygen Isotope Data
1118805PX5cal yr BPhttps://www.ncei.noaa.gov/pub/data/paleo/spele...[]Speleothem231569Paixão CaveContinent>South America>Brazil-12.65-41.0565080099578.2k Event Speleothem Oxygen Isotope Data
\n", - "
" - ], - "text/plain": [ - " DataTableID DataTableName TimeUnit \\\n", - "0 18801 D4 Dongge cal yr BP \n", - "1 18801 D4 Dongge cal yr BP \n", - "2 18802 DA Dongge cal yr BP \n", - "3 18802 DA Dongge cal yr BP \n", - "4 18806 Q5 Qunf cal yr BP \n", - "5 18806 Q5 Qunf cal yr BP \n", - "6 18803 H14 cal yr BP \n", - "7 18803 H14 cal yr BP \n", - "8 18804 PAD07 cal yr BP \n", - "9 18804 PAD07 cal yr BP \n", - "10 18805 PX5 cal yr BP \n", - "11 18805 PX5 cal yr BP \n", - "\n", - " FileURL \\\n", - "0 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "1 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "2 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "3 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "4 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "5 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "6 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "7 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "8 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "9 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "10 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "11 https://www.ncei.noaa.gov/pub/data/paleo/spele... \n", - "\n", - " Variables FileDescription TotalFilesAvailable SiteID \\\n", - "0 [age, depth, delta 18O] Speleothem 2 6554 \n", - "1 [] Speleothem 2 6554 \n", - "2 [age, depth, delta 18O] Speleothem 2 6554 \n", - "3 [] Speleothem 2 6554 \n", - "4 [age, depth, delta 18O] Speleothem 2 14640 \n", - "5 [] Speleothem 2 14640 \n", - "6 [age, depth, delta 18O] Speleothem 2 31383 \n", - "7 [] Speleothem 2 31383 \n", - "8 [age, depth, delta 18O] Speleothem 2 31568 \n", - "9 [] Speleothem 2 31568 \n", - "10 [age, depth, delta 18O] Speleothem 2 31569 \n", - "11 [] Speleothem 2 31569 \n", - "\n", - " SiteName LocationName Latitude \\\n", - "0 Dongge Cave Continent>Asia>Eastern Asia>China 25.28 \n", - "1 Dongge Cave Continent>Asia>Eastern Asia>China 25.28 \n", - "2 Dongge Cave Continent>Asia>Eastern Asia>China 25.28 \n", - "3 Dongge Cave Continent>Asia>Eastern Asia>China 25.28 \n", - "4 Qunf Cave Continent>Asia>Western Asia>Middle East>Oman 17.17 \n", - "5 Qunf Cave Continent>Asia>Western Asia>Middle East>Oman 17.17 \n", - "6 Hoti Cave Continent>Asia>Western Asia>Middle East>Oman 23.08 \n", - "7 Hoti Cave Continent>Asia>Western Asia>Middle East>Oman 23.08 \n", - "8 Padre Cave Continent>South America>Brazil -13.2167 \n", - "9 Padre Cave Continent>South America>Brazil -13.2167 \n", - "10 Paixão Cave Continent>South America>Brazil -12.65 \n", - "11 Paixão Cave Continent>South America>Brazil -12.65 \n", - "\n", - " Longitude MinElevation MaxElevation StudyID \\\n", - "0 108.08 680 680 9957 \n", - "1 108.08 680 680 9957 \n", - "2 108.08 680 680 9957 \n", - "3 108.08 680 680 9957 \n", - "4 54.3 650 650 9957 \n", - "5 54.3 650 650 9957 \n", - "6 57.35 800 800 9957 \n", - "7 57.35 800 800 9957 \n", - "8 -44.05 650 800 9957 \n", - "9 -44.05 650 800 9957 \n", - "10 -41.05 650 800 9957 \n", - "11 -41.05 650 800 9957 \n", - "\n", - " StudyName \n", - "0 8.2k Event Speleothem Oxygen Isotope Data \n", - "1 8.2k Event Speleothem Oxygen Isotope Data \n", - "2 8.2k Event Speleothem Oxygen Isotope Data \n", - "3 8.2k Event Speleothem Oxygen Isotope Data \n", - "4 8.2k Event Speleothem Oxygen Isotope Data \n", - "5 8.2k Event Speleothem Oxygen Isotope Data \n", - "6 8.2k Event Speleothem Oxygen Isotope Data \n", - "7 8.2k Event Speleothem Oxygen Isotope Data \n", - "8 8.2k Event Speleothem Oxygen Isotope Data \n", - "9 8.2k Event Speleothem Oxygen Isotope Data \n", - "10 8.2k Event Speleothem Oxygen Isotope Data \n", - "11 8.2k Event Speleothem Oxygen Isotope Data " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "speleo8k_ds.get_sites()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "feeab859", - "metadata": {}, - "outputs": [], - "source": [ - "speleo8k_ds_df = speleo8k_ds.get_data(dataTableIDs= [\"18803\"])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6fafd533", - "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", - "
Sample NumberDepth to top (mm)238U (ppb)(ppb)232Th (ppt)(ppt)230Th/232Th (atomic x 10-6)d234U* measured230Th/238U activityAge (yr) uncorrectedAge (yr) correctedd234U initial correctedAge (yr BP)* corrected
0D4-41402356±0.562±56700 ±600-26 ±1.80.06977 ±0.000468101 ±588091 ±58-26.6 ±1.98035 ±58
1D4-9 n1404388±0.189±45000 ±200-23.9 ±1.20.07009 ±0.000148120 ±198108 ±21-24.5 ±1.28052 ±21
2D4-11410497.2±0.8468±61240 ±20-26.3 ±1.50.07063 ±0.000358206 ±448157 ±54-26.9 ±1.68101 ±54
3D4-8 n1425493.8±0.1191±53020 ±80-28.8 ±0.50.07065 ±0.000168232 ±208212 ±24-29.5 ±0.58156 ±24
4D4-10 n1447370.5±0.1143±53100 ±100-13.2 ±0.70.07259 ±0.000178326 ±218306 ±25-13.5 ±0.78250 ±25
\n", - "
" - ], - "text/plain": [ - " Sample Number Depth to top (mm) 238U (ppb) (ppb) 232Th (ppt) (ppt) \\\n", - "0 D4-4 1402 356 ±0.5 62 ±5 \n", - "1 D4-9 n 1404 388 ±0.1 89 ±4 \n", - "2 D4-1 1410 497.2 ±0.8 468 ±6 \n", - "3 D4-8 n 1425 493.8 ±0.1 191 ±5 \n", - "4 D4-10 n 1447 370.5 ±0.1 143 ±5 \n", - "\n", - " 230Th/232Th (atomic x 10-6) d234U* measured 230Th/238U activity \\\n", - "0 6700 ±600 -26 ±1.8 0.06977 ±0.00046 \n", - "1 5000 ±200 -23.9 ±1.2 0.07009 ±0.00014 \n", - "2 1240 ±20 -26.3 ±1.5 0.07063 ±0.00035 \n", - "3 3020 ±80 -28.8 ±0.5 0.07065 ±0.00016 \n", - "4 3100 ±100 -13.2 ±0.7 0.07259 ±0.00017 \n", - "\n", - " Age (yr) uncorrected Age (yr) corrected d234U initial corrected \\\n", - "0 8101 ±58 8091 ±58 -26.6 ±1.9 \n", - "1 8120 ±19 8108 ±21 -24.5 ±1.2 \n", - "2 8206 ±44 8157 ±54 -26.9 ±1.6 \n", - "3 8232 ±20 8212 ±24 -29.5 ±0.5 \n", - "4 8326 ±21 8306 ±25 -13.5 ±0.7 \n", - "\n", - " Age (yr BP)* corrected \n", - "0 8035 ±58 \n", - "1 8052 ±21 \n", - "2 8101 ±54 \n", - "3 8156 ±24 \n", - "4 8250 ±25 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
Sample NumberDepth to top (mm)238U (ppb)(ppb)232Th (ppt)(ppt)230Th/232Th (atomic x 10-6)d234U* measured230Th/238U activityAge (yr) uncorrectedAge (yr) correctedd234U initial correctedAge (yr BP)* corrected
0DA5-13858.5586.3±0.8570±51140 ±10-69.9 ±1.70.06679 ±0.000338126 ±448073 ±56-71.5 ±1.78018 ±56
1DA5-6859545.6±0.7200±102900 ±200-72.9 ±1.10.06594 ±0.000488046 ±618025 ±63-74.5 ±1.27970 ±63
2DA5-5865.1615.3±0.8590±101150 ±30-75.3 ±1.20.06705 ±0.000518209 ±668156 ±75-77.1 ±1.28101 ±75
3DA-17 n865.5752.3±0.1689±51210 ±10-74.8 ±0.70.06703 ±0.000158201 ±208151 ±32-76.5 ±0.78096 ±32
4DA5-4871.2516.2±0.8340±101710 ±60-75.6 ±1.30.06747 ±0.000718265 ±918229 ±94-77.3 ±1.48174 ±94
\n", - "
" - ], - "text/plain": [ - " Sample Number Depth to top (mm) 238U (ppb) (ppb) 232Th (ppt) (ppt) \\\n", - "0 DA5-13 858.5 586.3 ±0.8 570 ±5 \n", - "1 DA5-6 859 545.6 ±0.7 200 ±10 \n", - "2 DA5-5 865.1 615.3 ±0.8 590 ±10 \n", - "3 DA-17 n 865.5 752.3 ±0.1 689 ±5 \n", - "4 DA5-4 871.2 516.2 ±0.8 340 ±10 \n", - "\n", - " 230Th/232Th (atomic x 10-6) d234U* measured 230Th/238U activity \\\n", - "0 1140 ±10 -69.9 ±1.7 0.06679 ±0.00033 \n", - "1 2900 ±200 -72.9 ±1.1 0.06594 ±0.00048 \n", - "2 1150 ±30 -75.3 ±1.2 0.06705 ±0.00051 \n", - "3 1210 ±10 -74.8 ±0.7 0.06703 ±0.00015 \n", - "4 1710 ±60 -75.6 ±1.3 0.06747 ±0.00071 \n", - "\n", - " Age (yr) uncorrected Age (yr) corrected d234U initial corrected \\\n", - "0 8126 ±44 8073 ±56 -71.5 ±1.7 \n", - "1 8046 ±61 8025 ±63 -74.5 ±1.2 \n", - "2 8209 ±66 8156 ±75 -77.1 ±1.2 \n", - "3 8201 ±20 8151 ±32 -76.5 ±0.7 \n", - "4 8265 ±91 8229 ±94 -77.3 ±1.4 \n", - "\n", - " Age (yr BP)* corrected \n", - "0 8018 ±56 \n", - "1 7970 ±63 \n", - "2 8101 ±75 \n", - "3 8096 ±32 \n", - "4 8174 ±94 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
Sample NumberDepth to top (mm)238U (ppb)(ppb)232Th (ppt)(ppt)230Th/232Th (atomic x 10-6)d234U* measured230Th/238U activityAge (yr) uncorrectedAge (yr) correctedd234U initial correctedAge (yr BP)* corrected
0Q5-15 n2659.6±0.8250±102800 ±100-83.1 ±1.60.06592 ±0.000278138 ±378125 ±38-85.1 ±1.68069 ±38
1Q5-14 n7646±0.7290±102500 ±100-75.9 ±1.40.06692 ±0.000268197 ±368183 ±36-77.7 ±1.48127 ±36
2Q5-19 n11.5739.4±0.7870±10950 ±10-71 ±1.40.06763 ±0.000138242 ±218205 ±28-72.7 ±1.48149 ±28
3Q5-6 n17492.1±0.1295±41840 ±20-79.3 ±0.40.06695 ±0.000158234 ±198215 ±21-81.2 ±0.48159 ±21
4Q5-10 n26593±0.9970±10681 ±9-84.9 ±1.80.06758 ±0.000228368 ±338316 ±42-86.9 ±1.88260 ±42
\n", - "
" - ], - "text/plain": [ - " Sample Number Depth to top (mm) 238U (ppb) (ppb) 232Th (ppt) (ppt) \\\n", - "0 Q5-15 n 2 659.6 ±0.8 250 ±10 \n", - "1 Q5-14 n 7 646 ±0.7 290 ±10 \n", - "2 Q5-19 n 11.5 739.4 ±0.7 870 ±10 \n", - "3 Q5-6 n 17 492.1 ±0.1 295 ±4 \n", - "4 Q5-10 n 26 593 ±0.9 970 ±10 \n", - "\n", - " 230Th/232Th (atomic x 10-6) d234U* measured 230Th/238U activity \\\n", - "0 2800 ±100 -83.1 ±1.6 0.06592 ±0.00027 \n", - "1 2500 ±100 -75.9 ±1.4 0.06692 ±0.00026 \n", - "2 950 ±10 -71 ±1.4 0.06763 ±0.00013 \n", - "3 1840 ±20 -79.3 ±0.4 0.06695 ±0.00015 \n", - "4 681 ±9 -84.9 ±1.8 0.06758 ±0.00022 \n", - "\n", - " Age (yr) uncorrected Age (yr) corrected d234U initial corrected \\\n", - "0 8138 ±37 8125 ±38 -85.1 ±1.6 \n", - "1 8197 ±36 8183 ±36 -77.7 ±1.4 \n", - "2 8242 ±21 8205 ±28 -72.7 ±1.4 \n", - "3 8234 ±19 8215 ±21 -81.2 ±0.4 \n", - "4 8368 ±33 8316 ±42 -86.9 ±1.8 \n", - "\n", - " Age (yr BP)* corrected \n", - "0 8069 ±38 \n", - "1 8127 ±36 \n", - "2 8149 ±28 \n", - "3 8159 ±21 \n", - "4 8260 ±42 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
Sample NumberDepth to top (mm)238U (ppb)(ppb)232Th (ppt)(ppt)230Th/232Th (atomic x 10-6)d234U* measured230Th/238U activityAge (yr) uncorrectedAge (yr) correctedd234U initial correctedAge (yr BP)* corrected
0PX-6 n911884±2217±524500 ±6001363 ±20.17128 ±0.000288150 ±178149 ±171394.4 ±2.58091 ±17
1PX-7 n941382±1136±328900 ±7001381 ±20.17287 ±0.000288162 ±168161 ±161413.3 ±2.38103 ±16
2PX-8 n971610±2232±519900 ±4001392 ±20.17435 ±0.000298194 ±178192 ±171425 ±2.58134 ±17
3PX-9 n100.52094±382±274600 ±22001405 ±30.17617 ±0.000328238 ±188237 ±181437.9 ±2.78179 ±18
4PX-11 n1042456±3110±365200 ±17001408 ±30.17715 ±0.000338275 ±198274 ±191441.2 ±2.68216 ±19
\n", - "
" - ], - "text/plain": [ - " Sample Number Depth to top (mm) 238U (ppb) (ppb) 232Th (ppt) (ppt) \\\n", - "0 PX-6 n 91 1884 ±2 217 ±5 \n", - "1 PX-7 n 94 1382 ±1 136 ±3 \n", - "2 PX-8 n 97 1610 ±2 232 ±5 \n", - "3 PX-9 n 100.5 2094 ±3 82 ±2 \n", - "4 PX-11 n 104 2456 ±3 110 ±3 \n", - "\n", - " 230Th/232Th (atomic x 10-6) d234U* measured 230Th/238U activity \\\n", - "0 24500 ±600 1363 ±2 0.17128 ±0.00028 \n", - "1 28900 ±700 1381 ±2 0.17287 ±0.00028 \n", - "2 19900 ±400 1392 ±2 0.17435 ±0.00029 \n", - "3 74600 ±2200 1405 ±3 0.17617 ±0.00032 \n", - "4 65200 ±1700 1408 ±3 0.17715 ±0.00033 \n", - "\n", - " Age (yr) uncorrected Age (yr) corrected d234U initial corrected \\\n", - "0 8150 ±17 8149 ±17 1394.4 ±2.5 \n", - "1 8162 ±16 8161 ±16 1413.3 ±2.3 \n", - "2 8194 ±17 8192 ±17 1425 ±2.5 \n", - "3 8238 ±18 8237 ±18 1437.9 ±2.7 \n", - "4 8275 ±19 8274 ±19 1441.2 ±2.6 \n", - "\n", - " Age (yr BP)* corrected \n", - "0 8091 ±17 \n", - "1 8103 ±16 \n", - "2 8134 ±17 \n", - "3 8179 ±18 \n", - "4 8216 ±19 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
Sample NumberDepth to top (mm)238U (ppb)(ppb)232Th (ppt)(ppt)230Th/232Th (atomic x 10-6)d234U* measured230Th/238U activityAge (yr) uncorrectedAge (yr) correctedd234U initial correctedAge (yr BP)* corrected
0H14-10 n160.91696.1±0.5584±85300 ±100599.9 ±0.40.11026 ±0.000347764 ±257758 ±25613.2 ±0.47702 ±25
1H14-9 n166.31786.9±0.5796±84100 ±40596.4 ±0.60.11066 ±0.000327812 ±237804 ±24609.7 ±0.67748 ±24
2H14-8 n201.21700.4±0.5285±811100 ±300605.9 ±0.60.11253 ±0.000367899 ±267896 ±26619.6 ±0.67840 ±26
3H14-7 n215.91896.2±0.5118±930000 ±2200602.2 ±0.40.11268 ±0.000347929 ±257928 ±25615.9 ±0.47872 ±25
4H14-6 n238.31616±0.4222±713800 ±400606 ±0.50.11434 ±0.000338029 ±248027 ±24619.9 ±0.57971 ±24
\n", - "
" - ], - "text/plain": [ - " Sample Number Depth to top (mm) 238U (ppb) (ppb) 232Th (ppt) (ppt) \\\n", - "0 H14-10 n 160.9 1696.1 ±0.5 584 ±8 \n", - "1 H14-9 n 166.3 1786.9 ±0.5 796 ±8 \n", - "2 H14-8 n 201.2 1700.4 ±0.5 285 ±8 \n", - "3 H14-7 n 215.9 1896.2 ±0.5 118 ±9 \n", - "4 H14-6 n 238.3 1616 ±0.4 222 ±7 \n", - "\n", - " 230Th/232Th (atomic x 10-6) d234U* measured 230Th/238U activity \\\n", - "0 5300 ±100 599.9 ±0.4 0.11026 ±0.00034 \n", - "1 4100 ±40 596.4 ±0.6 0.11066 ±0.00032 \n", - "2 11100 ±300 605.9 ±0.6 0.11253 ±0.00036 \n", - "3 30000 ±2200 602.2 ±0.4 0.11268 ±0.00034 \n", - "4 13800 ±400 606 ±0.5 0.11434 ±0.00033 \n", - "\n", - " Age (yr) uncorrected Age (yr) corrected d234U initial corrected \\\n", - "0 7764 ±25 7758 ±25 613.2 ±0.4 \n", - "1 7812 ±23 7804 ±24 609.7 ±0.6 \n", - "2 7899 ±26 7896 ±26 619.6 ±0.6 \n", - "3 7929 ±25 7928 ±25 615.9 ±0.4 \n", - "4 8029 ±24 8027 ±24 619.9 ±0.5 \n", - "\n", - " Age (yr BP)* corrected \n", - "0 7702 ±25 \n", - "1 7748 ±24 \n", - "2 7840 ±26 \n", - "3 7872 ±25 \n", - "4 7971 ±24 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
Sample NumberDepth to top (mm)238U (ppb)(ppb)232Th (ppt)(ppt)230Th/232Th (atomic x 10-6)d234U* measured230Th/238U activityAge (yr) uncorrectedAge (yr) correctedd234U initial correctedAge (yr BP)* corrected
0B2-8131652.9±0.8440±203100 ±100905.3 ±2.00.12761 ±0.000667514 ±417503 ±41924.7 ±2.17448 ±41
1B2-16 n166782.9±0.1113±514600 ±700865.9 ±0.80.12802 ±0.000237704 ±157701 ±15885 ±0.87645 ±15
2B2-71901080±2290±107600 ±300770.2 ±2.10.12296 ±0.000467804 ±327800 ±32787.3 ±2.17745 ±32
3B2-15 n211789.6±0.1104±415700 ±600790.6 ±0.90.12538 ±0.000227869 ±157867 ±15808.3 ±0.97811 ±15
4B2-6-II237979±1130±1016500 ±1500879.1 ±1.50.13355 ±0.000567988 ±367986 ±36899.2 ±1.67931 ±36
\n", - "
" - ], - "text/plain": [ - " Sample Number Depth to top (mm) 238U (ppb) (ppb) 232Th (ppt) (ppt) \\\n", - "0 B2-8 131 652.9 ±0.8 440 ±20 \n", - "1 B2-16 n 166 782.9 ±0.1 113 ±5 \n", - "2 B2-7 190 1080 ±2 290 ±10 \n", - "3 B2-15 n 211 789.6 ±0.1 104 ±4 \n", - "4 B2-6-II 237 979 ±1 130 ±10 \n", - "\n", - " 230Th/232Th (atomic x 10-6) d234U* measured 230Th/238U activity \\\n", - "0 3100 ±100 905.3 ±2.0 0.12761 ±0.00066 \n", - "1 14600 ±700 865.9 ±0.8 0.12802 ±0.00023 \n", - "2 7600 ±300 770.2 ±2.1 0.12296 ±0.00046 \n", - "3 15700 ±600 790.6 ±0.9 0.12538 ±0.00022 \n", - "4 16500 ±1500 879.1 ±1.5 0.13355 ±0.00056 \n", - "\n", - " Age (yr) uncorrected Age (yr) corrected d234U initial corrected \\\n", - "0 7514 ±41 7503 ±41 924.7 ±2.1 \n", - "1 7704 ±15 7701 ±15 885 ±0.8 \n", - "2 7804 ±32 7800 ±32 787.3 ±2.1 \n", - "3 7869 ±15 7867 ±15 808.3 ±0.9 \n", - "4 7988 ±36 7986 ±36 899.2 ±1.6 \n", - "\n", - " Age (yr BP)* corrected \n", - "0 7448 ±41 \n", - "1 7645 ±15 \n", - "2 7745 ±32 \n", - "3 7811 ±15 \n", - "4 7931 ±36 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
DepthAged18O
013957992-8.96
113967999-9.2
213978007-8.91
313988014-8.84
414008027-8.91
\n", - "
" - ], - "text/plain": [ - " Depth Age d18O\n", - "0 1395 7992 -8.96\n", - "1 1396 7999 -9.2\n", - "2 1397 8007 -8.91\n", - "3 1398 8014 -8.84\n", - "4 1400 8027 -8.91" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
DepthAged18O
0858.57990-8.79
1858.87996-8.64
28598000-8.72
3859.38006-8.65
4859.58009-8.81
\n", - "
" - ], - "text/plain": [ - " Depth Age d18O\n", - "0 858.5 7990 -8.79\n", - "1 858.8 7996 -8.64\n", - "2 859 8000 -8.72\n", - "3 859.3 8006 -8.65\n", - "4 859.5 8009 -8.81" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
DepthAged18O
008030-1.89
118050-1.85
238088-1.55
34.58108-1.8
478127-1.86
\n", - "
" - ], - "text/plain": [ - " Depth Age d18O\n", - "0 0 8030 -1.89\n", - "1 1 8050 -1.85\n", - "2 3 8088 -1.55\n", - "3 4.5 8108 -1.8\n", - "4 7 8127 -1.86" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
DepthAged18O
0153.87678-4.08
1154.37680-4.08
2154.87682-4.23
3155.37684-4.1
4155.87687-4.15
\n", - "
" - ], - "text/plain": [ - " Depth Age d18O\n", - "0 153.8 7678 -4.08\n", - "1 154.3 7680 -4.08\n", - "2 154.8 7682 -4.23\n", - "3 155.3 7684 -4.1\n", - "4 155.8 7687 -4.15" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
DepthAged18O
0908087-5.07
190.58089-5.37
2918091-5.49
391.58093-5.57
4928095-4.79
\n", - "
" - ], - "text/plain": [ - " Depth Age d18O\n", - "0 90 8087 -5.07\n", - "1 90.5 8089 -5.37\n", - "2 91 8091 -5.49\n", - "3 91.5 8093 -5.57\n", - "4 92 8095 -4.79" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - }, - { - "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", - "
DepthAged18O
01997782-6.151
1200.57789-6.372
22027797-6.474
3203.57804-6.387
42057811-5.71
\n", - "
" - ], - "text/plain": [ - " Depth Age d18O\n", - "0 199 7782 -6.151\n", - "1 200.5 7789 -6.372\n", - "2 202 7797 -6.474\n", - "3 203.5 7804 -6.387\n", - "4 205 7811 -5.71" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'NOAAStudyId': '9957', 'StudyName': '8.2k Event Speleothem Oxygen Isotope Data'}\n" - ] - } - ], - "source": [ - "for df in speleo8k_ds_df:\n", - " display(df.head())\n", - " print(df.attrs)" - ] - }, - { - "cell_type": "markdown", - "id": "39c260bc", - "metadata": {}, - "source": [ - "### Method B: By Direct File URL\n", - "If you have a direct link to a NOAA text file (e.g., from an external paper or email), you can fetch it directly without searching first.\n", - "\n", - "**Limitation:** Unless the URL is already known to the `dataset` object (via a previous search), PyleoTUPS **cannot** attach study-level metadata (like Study Name or Site Location) to the DataFrame. You will get the data, but `df.attrs` may be empty or limited to the file header." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4b504a33", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:42:32,114][WARNING] - Attached 'https://www.ncei.noaa.gov/pub/data/paleo/climate_forcing/trace_gases/mcelwain1995co2.txt' is not linked to any parent study; can not add metadata.\n" - ] - } - ], - "source": [ - "dataset = pt.NOAADataset()\n", - "df_data_by_url = dataset.get_data(file_urls=\"https://www.ncei.noaa.gov/pub/data/paleo/climate_forcing/trace_gases/mcelwain1995co2.txt\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "c05d1b52", - "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", - "
SpeciesAgeStomatal Density (mm2) MeanStomatal Density (mm2) s.d.Stomatal Density (mm2) ns.e.Stomatal Dens. (by vol., mm3)Stomatal Index MeanStomatal Index s.d.ns.e._1RCO2
0Aglaophyton major (Kid. and Lang)Lower Devonian4.53.9n=230.823.02.261.1n=190.2512
1Sawdonia ornata (Daws.) HueberLower Devonian4.31.9n=380.323.63.051.0n=130.2812
2Juncus effusus L.Recent309.172.8n=5010.3416.212.42.3n=500.41
3Psilotum nudum (L.) Beauv.Recent40.116.8n=1451.489.715.55.6n=920.61
4Swillingtonia denticulata Scott and Chal.Carboniferous787.8158.9n=1837.5n/a19.74.3n=141.161.5
\n", - "
" - ], - "text/plain": [ - " Species Age \\\n", - "0 Aglaophyton major (Kid. and Lang) Lower Devonian \n", - "1 Sawdonia ornata (Daws.) Hueber Lower Devonian \n", - "2 Juncus effusus L. Recent \n", - "3 Psilotum nudum (L.) Beauv. Recent \n", - "4 Swillingtonia denticulata Scott and Chal. Carboniferous \n", - "\n", - " Stomatal Density (mm2) Mean Stomatal Density (mm2) s.d. \\\n", - "0 4.5 3.9 \n", - "1 4.3 1.9 \n", - "2 309.1 72.8 \n", - "3 40.1 16.8 \n", - "4 787.8 158.9 \n", - "\n", - " Stomatal Density (mm2) n s.e. Stomatal Dens. (by vol., mm3) \\\n", - "0 n=23 0.82 3.0 \n", - "1 n=38 0.32 3.6 \n", - "2 n=50 10.3 416.2 \n", - "3 n=145 1.4 89.7 \n", - "4 n=18 37.5 n/a \n", - "\n", - " Stomatal Index Mean Stomatal Index s.d. n s.e._1 RCO2 \n", - "0 2.26 1.1 n=19 0.25 12 \n", - "1 3.05 1.0 n=13 0.28 12 \n", - "2 12.4 2.3 n=50 0.4 1 \n", - "3 15.5 5.6 n=92 0.6 1 \n", - "4 19.7 4.3 n=14 1.16 1.5 " - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{}\n" - ] - } - ], - "source": [ - "for df in df_data_by_url:\n", - " display(df.head())\n", - " print(df.attrs) # will have empty attrs" - ] - }, - { - "cell_type": "markdown", - "id": "58d2a48f", - "metadata": {}, - "source": [ - "```Note\n", - "Only a certain .txt files are supported by pyleotups currently. \n", - "\n", - "Files which are written as per NOAA Template, or have a NOAA Header can be processed by PyleoTups's parser.\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "24cb35c2", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:42:33,338][WARNING] - Attached 'https://www.ncei.noaa.gov/pub/data/paleo/reconstructions/climate12k/temperature/version1.0.0/Temp12k_directory_LiPD_files/AdelaideTarn.Jara.2015.lpd' is not linked to any parent study; can not add metadata.\n" - ] - }, - { - "ename": "UnsupportedFileTypeError", - "evalue": "pyleotups works with .txt files only. File type 'lpd' is proprietary.", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mUnsupportedFileTypeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[20]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m 1\u001b[39m error_ds = pt.NOAADataset()\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m \u001b[43merror_ds\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile_urls\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mhttps://www.ncei.noaa.gov/pub/data/paleo/reconstructions/climate12k/temperature/version1.0.0/Temp12k_directory_LiPD_files/AdelaideTarn.Jara.2015.lpd\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[36mFile \u001b[39m\u001b[32m~\\OneDrive\\Desktop\\pyelotups\\pyleotups\\core\\NOAADataset.py:1014\u001b[39m, in \u001b[36mNOAADataset.get_data\u001b[39m\u001b[34m(self, dataTableIDs, file_urls)\u001b[39m\n\u001b[32m 1012\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m mapping:\n\u001b[32m 1013\u001b[39m log.warning(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mAttached \u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00murl\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m is not linked to any parent study; can not add metadata.\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m-> \u001b[39m\u001b[32m1014\u001b[39m dfs.extend(\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_process_file\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[32m 1015\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 1016\u001b[39m mapping_details = \u001b[38;5;28mself\u001b[39m.data_table_index.get(mapping)\n", - "\u001b[36mFile \u001b[39m\u001b[32m~\\OneDrive\\Desktop\\pyelotups\\pyleotups\\core\\NOAADataset.py:841\u001b[39m, in \u001b[36mNOAADataset._process_file\u001b[39m\u001b[34m(self, file_url, mapping)\u001b[39m\n\u001b[32m 839\u001b[39m file_type = file_url.split(\u001b[33m'\u001b[39m\u001b[33m.\u001b[39m\u001b[33m'\u001b[39m)[-\u001b[32m1\u001b[39m].lower()\n\u001b[32m 840\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m file_type \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m._PROPRIETARY_TYPES:\n\u001b[32m--> \u001b[39m\u001b[32m841\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m UnsupportedFileTypeError(\n\u001b[32m 842\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mpyleotups works with .txt files only. File type \u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile_type\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m is proprietary.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 843\u001b[39m )\n\u001b[32m 844\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m file_type != \u001b[33m'\u001b[39m\u001b[33mtxt\u001b[39m\u001b[33m'\u001b[39m:\n\u001b[32m 845\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m UnsupportedFileTypeError(\n\u001b[32m 846\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mInvalid file type \u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile_type\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m. Only .txt files are supported.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 847\u001b[39m )\n", - "\u001b[31mUnsupportedFileTypeError\u001b[39m: pyleotups works with .txt files only. File type 'lpd' is proprietary." - ] - } - ], - "source": [ - "error_ds = pt.NOAADataset()\n", - "error_ds.get_data(file_urls = [\"https://www.ncei.noaa.gov/pub/data/paleo/reconstructions/climate12k/temperature/version1.0.0/Temp12k_directory_LiPD_files/AdelaideTarn.Jara.2015.lpd\"])\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dc2ea8b3", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:42:40,758][WARNING] - Attached 'https://www.ncei.noaa.gov/pub/data/paleo/contributions_by_author/frank1999/frank1999.xls' is not linked to any parent study; can not add metadata.\n" - ] - }, - { - "ename": "UnsupportedFileTypeError", - "evalue": "Invalid file type 'xls'. Only .txt files are supported.", - "output_type": "error", - "traceback": [ - "\u001b[31m---------------------------------------------------------------------------\u001b[39m", - "\u001b[31mUnsupportedFileTypeError\u001b[39m Traceback (most recent call last)", - "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[21]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43merror_ds\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile_urls\u001b[49m\u001b[43m \u001b[49m\u001b[43m=\u001b[49m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mhttps://www.ncei.noaa.gov/pub/data/paleo/contributions_by_author/frank1999/frank1999.xls\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[36mFile \u001b[39m\u001b[32m~\\OneDrive\\Desktop\\pyelotups\\pyleotups\\core\\NOAADataset.py:1014\u001b[39m, in \u001b[36mNOAADataset.get_data\u001b[39m\u001b[34m(self, dataTableIDs, file_urls)\u001b[39m\n\u001b[32m 1012\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m mapping:\n\u001b[32m 1013\u001b[39m log.warning(\u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mAttached \u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00murl\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m is not linked to any parent study; can not add metadata.\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m-> \u001b[39m\u001b[32m1014\u001b[39m dfs.extend(\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_process_file\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[32m 1015\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 1016\u001b[39m mapping_details = \u001b[38;5;28mself\u001b[39m.data_table_index.get(mapping)\n", - "\u001b[36mFile \u001b[39m\u001b[32m~\\OneDrive\\Desktop\\pyelotups\\pyleotups\\core\\NOAADataset.py:845\u001b[39m, in \u001b[36mNOAADataset._process_file\u001b[39m\u001b[34m(self, file_url, mapping)\u001b[39m\n\u001b[32m 841\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m UnsupportedFileTypeError(\n\u001b[32m 842\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mpyleotups works with .txt files only. File type \u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile_type\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m is proprietary.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 843\u001b[39m )\n\u001b[32m 844\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m file_type != \u001b[33m'\u001b[39m\u001b[33mtxt\u001b[39m\u001b[33m'\u001b[39m:\n\u001b[32m--> \u001b[39m\u001b[32m845\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m UnsupportedFileTypeError(\n\u001b[32m 846\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mInvalid file type \u001b[39m\u001b[33m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mfile_type\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m'\u001b[39m\u001b[33m. Only .txt files are supported.\u001b[39m\u001b[33m\"\u001b[39m\n\u001b[32m 847\u001b[39m )\n\u001b[32m 849\u001b[39m \u001b[38;5;66;03m# Step 1: Detect parser type by reading initial lines\u001b[39;00m\n\u001b[32m 850\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mdetect_parser_type\u001b[39m(lines):\n\u001b[32m 851\u001b[39m \u001b[38;5;66;03m# 1. Clean lines: strip whitespace and remove empty lines\u001b[39;00m\n", - "\u001b[31mUnsupportedFileTypeError\u001b[39m: Invalid file type 'xls'. Only .txt files are supported." - ] - } - ], - "source": [ - "error_ds.get_data(file_urls = [\"https://www.ncei.noaa.gov/pub/data/paleo/contributions_by_author/frank1999/frank1999.xls\"])" - ] - }, - { - "cell_type": "markdown", - "id": "61aab1a5", - "metadata": {}, - "source": [ - "## Step 4: Advanced Usage\n", - "\n", - "### 1. Handling Large Searches (Pagination)\n", - "By default, `search_studies` returns up to 100 results. If you need to retrieve a large number of studies, or if you want to process them in batches, you can use the `limit` and `skip` parameters.\n", - "\n", - "* `limit`: The maximum number of studies to return in one request.\n", - "* `skip`: The number of studies to skip from the beginning of the result set." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "18829c3f", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:42:51,327][INFO] - search_studies: Limit set to 10.\n", - "[2026-03-24 12:42:51,330][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "--- Fetching Batch 1 (1-10) ---\n", - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&limit=10&minLat=60&maxLat=70\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 10/10 [00:00<00:00, 1539.14it/s]\n", - "[2026-03-24 12:42:52,372][WARNING] - Retrieved 10 studies, which is the specified limit. Consider increasing the limit parameter to fetch more studies.\n", - "[2026-03-24 12:42:52,376][INFO] - Retrieved 10 studies.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current studies in dataset: 10\n" - ] - }, - { - "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", - "
StudyIDXMLIDStudyNameDataTypeEarliestYearBPMostRecentYearBPEarliestYearCEMostRecentYearCECoverage [S, N, W, E]StudyNotesScienceKeywordsInvestigatorsPublicationsSitesFunding
01043791011,000 Year Ensemble Reconstructions of Tempera...CLIMATE RECONSTRUCTIONS950.0-45.01000.01995.0(0.0, 90.0, -180.0, 180.0)Calibration ensemble reconstructions of existi...[carbon cycle, sensitivity, Air Temperature Re...David Frank, Jan Esper, Christoph Raible, Ulf ...[{'Author': 'Frank, D.C., J. Esper, C.C. Raibl...[[{'DataTableID': '19235', 'DataTableName': 'F...[{'fundingAgency': 'Swiss National Science Fou...
114193121941000 Year Composite Sea Surface Temperature Re...PALEOCEANOGRAPHY950.0-46.01000.01996.0(56.66667, 69.48333, -18.1957, 18.36667)A set of reconstructions of sea surface temper...NoneLaura Cunningham, William Austin, Karen-Luise ...[{'Author': 'Cunningham, L.K., Austin, W.E.N.,...[[{'DataTableID': '24146', 'DataTableName': 'P...[{'fundingAgency': 'European Commission', 'fun...
242679837541006-year reconstruction of Rossby wavenumber-5CLIMATE RECONSTRUCTIONS950.0-55.01000.02005.0(0.0, 90.0, -180.0, 180.0)None[Atmospheric and Oceanic Circulation Patterns ...Ellie Broadman, Valerie Trouet, Kai Kornhuber[{'Author': 'Broadman, Ellie, Kai Kornhuber, I...[[{'DataTableID': '56946', 'DataTableName': 'W...[{'fundingAgency': 'US National Science Founda...
322031200091200 Year Atlantic Multidecadal Variability an...CLIMATE RECONSTRUCTIONS1150.0-60.0800.02010.0(0.0, 70.0, -80.0, 0.0)Summer (May-September) Atlantic Multidecadal V...[Atmospheric and Oceanic Circulation Patterns ...Jianglin Wang, Bao Yang, Fredrik Ljungqvist, J...[{'Author': 'Jianglin Wang, Bao Yang, Fredrik ...[[{'DataTableID': '33108', 'DataTableName': 'W...[{'fundingAgency': 'National Natural Science F...
412203102672000 Year Precipitation-Based Southern Oscilla...CLIMATE RECONSTRUCTIONS1900.0-5.050.01955.0(-90.0, 90.0, -180.0, 180.0)Reconstruction of a precipitation-based Southe...[Atmospheric and Oceanic Circulation Patterns ...Hong Yan, Liguang Sun, Yuhong Wang, Wen Huang,...[{'Author': 'Yan, H., L. Sun, Y. Wang, W. Huan...[[{'DataTableID': '20526', 'DataTableName': 'S...[{'fundingAgency': 'National Natural Science F...
53193273613231Pa/230Th Ratios in Arctic Ocean Surface Sed...PALEOCEANOGRAPHYNaNNaNNaNNaN(70.0, 90.0, -180.0, 180.0)Provided Keywords: protactinium-231, 231Pa, th...NoneLauren Kipp, Jerry McManus, Markus Kienast[][[{'DataTableID': '44537', 'DataTableName': 'A...[]
61419012191600 Year Ensemble Climate Reconstructions and ...CLIMATE RECONSTRUCTIONS550.0-61.01400.02011.0(45.0, 85.0, -180.0, 180.0)Ensemble Climate Reconstructions, input data f...[Air Temperature Reconstruction]Martin Tingley, Peter Huybers[{'Author': 'Tingley, M.P. and P. Huybers', 'T...[[{'DataTableID': '24136', 'DataTableName': 'T...[{'fundingAgency': 'US National Science Founda...
712894109589400 Year Cosmogenic Isotope Data and Solar Ac...CLIMATE FORCING9389.0-27.0-7439.01977.0(-90.0, 90.0, -180.0, 180.0)Records of common production rate of cosmogeni...[Solar Forcing Reconstruction]Friedhelm Steinhilber, Jose Abreu, Jürg Beer, ...[{'Author': 'Steinhilber, F., J.A. Abreu, J. B...[[{'DataTableID': '21230', 'DataTableName': 'T...[{'fundingAgency': 'Swiss National Science Fou...
81473012691A 3000-year varved record of glacier activity ...PALEOLIMNOLOGY2976.0-52.0-1026.02002.0(64.63805, 64.64305, -19.85912, -19.83995)None[Medieval Warm Period, Little Ice Age (LIA), A...Darren Larsen, Gifford Miller, Áslaug Geirsdót...[{'Author': 'Larsen, D.J., Miller, G.H., Geirs...[[{'DataTableID': '24775', 'DataTableName': 'H...[{'fundingAgency': 'US National Science Founda...
91567513460A 37,000-year record of paleomagnetic and envi...PALEOLIMNOLOGYNaNNaNNaNNaN(68.433742, 68.433742, -159.173633, -159.173633)None[Arctic, temperature, precipitation]Joseph Stoner, Mark Abbott, Jason Dorfman[{'Author': 'Dorfman, J.M.', 'Title': 'A 37,00...[[{'DataTableID': '25653', 'DataTableName': 'p...[{'fundingAgency': 'US National Science Founda...
\n", - "
" - ], - "text/plain": [ - " StudyID XMLID StudyName \\\n", - "0 10437 9101 1,000 Year Ensemble Reconstructions of Tempera... \n", - "1 14193 12194 1000 Year Composite Sea Surface Temperature Re... \n", - "2 42679 83754 1006-year reconstruction of Rossby wavenumber-5 \n", - "3 22031 20009 1200 Year Atlantic Multidecadal Variability an... \n", - "4 12203 10267 2000 Year Precipitation-Based Southern Oscilla... \n", - "5 31932 73613 231Pa/230Th Ratios in Arctic Ocean Surface Sed... \n", - "6 14190 12191 600 Year Ensemble Climate Reconstructions and ... \n", - "7 12894 10958 9400 Year Cosmogenic Isotope Data and Solar Ac... \n", - "8 14730 12691 A 3000-year varved record of glacier activity ... \n", - "9 15675 13460 A 37,000-year record of paleomagnetic and envi... \n", - "\n", - " DataType EarliestYearBP MostRecentYearBP EarliestYearCE \\\n", - "0 CLIMATE RECONSTRUCTIONS 950.0 -45.0 1000.0 \n", - "1 PALEOCEANOGRAPHY 950.0 -46.0 1000.0 \n", - "2 CLIMATE RECONSTRUCTIONS 950.0 -55.0 1000.0 \n", - "3 CLIMATE RECONSTRUCTIONS 1150.0 -60.0 800.0 \n", - "4 CLIMATE RECONSTRUCTIONS 1900.0 -5.0 50.0 \n", - "5 PALEOCEANOGRAPHY NaN NaN NaN \n", - "6 CLIMATE RECONSTRUCTIONS 550.0 -61.0 1400.0 \n", - "7 CLIMATE FORCING 9389.0 -27.0 -7439.0 \n", - "8 PALEOLIMNOLOGY 2976.0 -52.0 -1026.0 \n", - "9 PALEOLIMNOLOGY NaN NaN NaN \n", - "\n", - " MostRecentYearCE Coverage [S, N, W, E] \\\n", - "0 1995.0 (0.0, 90.0, -180.0, 180.0) \n", - "1 1996.0 (56.66667, 69.48333, -18.1957, 18.36667) \n", - "2 2005.0 (0.0, 90.0, -180.0, 180.0) \n", - "3 2010.0 (0.0, 70.0, -80.0, 0.0) \n", - "4 1955.0 (-90.0, 90.0, -180.0, 180.0) \n", - "5 NaN (70.0, 90.0, -180.0, 180.0) \n", - "6 2011.0 (45.0, 85.0, -180.0, 180.0) \n", - "7 1977.0 (-90.0, 90.0, -180.0, 180.0) \n", - "8 2002.0 (64.63805, 64.64305, -19.85912, -19.83995) \n", - "9 NaN (68.433742, 68.433742, -159.173633, -159.173633) \n", - "\n", - " StudyNotes \\\n", - "0 Calibration ensemble reconstructions of existi... \n", - "1 A set of reconstructions of sea surface temper... \n", - "2 None \n", - "3 Summer (May-September) Atlantic Multidecadal V... \n", - "4 Reconstruction of a precipitation-based Southe... \n", - "5 Provided Keywords: protactinium-231, 231Pa, th... \n", - "6 Ensemble Climate Reconstructions, input data f... \n", - "7 Records of common production rate of cosmogeni... \n", - "8 None \n", - "9 None \n", - "\n", - " ScienceKeywords \\\n", - "0 [carbon cycle, sensitivity, Air Temperature Re... \n", - "1 None \n", - "2 [Atmospheric and Oceanic Circulation Patterns ... \n", - "3 [Atmospheric and Oceanic Circulation Patterns ... \n", - "4 [Atmospheric and Oceanic Circulation Patterns ... \n", - "5 None \n", - "6 [Air Temperature Reconstruction] \n", - "7 [Solar Forcing Reconstruction] \n", - "8 [Medieval Warm Period, Little Ice Age (LIA), A... \n", - "9 [Arctic, temperature, precipitation] \n", - "\n", - " Investigators \\\n", - "0 David Frank, Jan Esper, Christoph Raible, Ulf ... \n", - "1 Laura Cunningham, William Austin, Karen-Luise ... \n", - "2 Ellie Broadman, Valerie Trouet, Kai Kornhuber \n", - "3 Jianglin Wang, Bao Yang, Fredrik Ljungqvist, J... \n", - "4 Hong Yan, Liguang Sun, Yuhong Wang, Wen Huang,... \n", - "5 Lauren Kipp, Jerry McManus, Markus Kienast \n", - "6 Martin Tingley, Peter Huybers \n", - "7 Friedhelm Steinhilber, Jose Abreu, Jürg Beer, ... \n", - "8 Darren Larsen, Gifford Miller, Áslaug Geirsdót... \n", - "9 Joseph Stoner, Mark Abbott, Jason Dorfman \n", - "\n", - " Publications \\\n", - "0 [{'Author': 'Frank, D.C., J. Esper, C.C. Raibl... \n", - "1 [{'Author': 'Cunningham, L.K., Austin, W.E.N.,... \n", - "2 [{'Author': 'Broadman, Ellie, Kai Kornhuber, I... \n", - "3 [{'Author': 'Jianglin Wang, Bao Yang, Fredrik ... \n", - "4 [{'Author': 'Yan, H., L. Sun, Y. Wang, W. Huan... \n", - "5 [] \n", - "6 [{'Author': 'Tingley, M.P. and P. Huybers', 'T... \n", - "7 [{'Author': 'Steinhilber, F., J.A. Abreu, J. B... \n", - "8 [{'Author': 'Larsen, D.J., Miller, G.H., Geirs... \n", - "9 [{'Author': 'Dorfman, J.M.', 'Title': 'A 37,00... \n", - "\n", - " Sites \\\n", - "0 [[{'DataTableID': '19235', 'DataTableName': 'F... \n", - "1 [[{'DataTableID': '24146', 'DataTableName': 'P... \n", - "2 [[{'DataTableID': '56946', 'DataTableName': 'W... \n", - "3 [[{'DataTableID': '33108', 'DataTableName': 'W... \n", - "4 [[{'DataTableID': '20526', 'DataTableName': 'S... \n", - "5 [[{'DataTableID': '44537', 'DataTableName': 'A... \n", - "6 [[{'DataTableID': '24136', 'DataTableName': 'T... \n", - "7 [[{'DataTableID': '21230', 'DataTableName': 'T... \n", - "8 [[{'DataTableID': '24775', 'DataTableName': 'H... \n", - "9 [[{'DataTableID': '25653', 'DataTableName': 'p... \n", - "\n", - " Funding \n", - "0 [{'fundingAgency': 'Swiss National Science Fou... \n", - "1 [{'fundingAgency': 'European Commission', 'fun... \n", - "2 [{'fundingAgency': 'US National Science Founda... \n", - "3 [{'fundingAgency': 'National Natural Science F... \n", - "4 [{'fundingAgency': 'National Natural Science F... \n", - "5 [] \n", - "6 [{'fundingAgency': 'US National Science Founda... \n", - "7 [{'fundingAgency': 'Swiss National Science Fou... \n", - "8 [{'fundingAgency': 'US National Science Founda... \n", - "9 [{'fundingAgency': 'US National Science Founda... " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Initialize a clean dataset\n", - "dataset = pt.NOAADataset()\n", - "\n", - "# Query 1: Get the first 10 results\n", - "print(\"--- Fetching Batch 1 (1-10) ---\")\n", - "batch1 = dataset.search_studies(min_lat=60, max_lat=70, limit=10)\n", - "print(f\"Current studies in dataset: {len(dataset.studies)}\")\n", - "display(batch1)\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "500686d1", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:42:52,631][INFO] - search_studies: Limit set to 10.\n", - "[2026-03-24 12:42:52,634][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--- Fetching Batch 2 (11-20) ---\n", - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&limit=10&skip=10&minLat=60&maxLat=70\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 10/10 [00:00<00:00, 491.82it/s]\n", - "[2026-03-24 12:42:53,591][WARNING] - Retrieved 10 studies, which is the specified limit. Consider increasing the limit parameter to fetch more studies.\n", - "[2026-03-24 12:42:53,594][INFO] - Retrieved 10 studies.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Current studies in dataset: 10\n" - ] - }, - { - "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", - "
StudyIDXMLIDStudyNameDataTypeEarliestYearBPMostRecentYearBPEarliestYearCEMostRecentYearCECoverage [S, N, W, E]StudyNotesScienceKeywordsInvestigatorsPublicationsSitesFunding
01240210446A Bayesian ANOVA Scheme for Calculating Climat...OTHER COLLECTIONS-11-4019611990(-90.0, 90.0, -180.0, 180.0)Matlab code for two-factor (location and year)...NoneMartin Tingley[{'Author': 'Tingley, M.P.', 'Title': 'A Bayes...[[{'DataTableID': '20755', 'DataTableName': 'A...[]
186102893ACT1,ACT3,ACT4,ACT2 - Melt Layer ThicknessICE CORES178-5317722003(65.9811, 66.0119, -46.5511, -42.7889)Melt layer stratigraphy for 4 Greenland Arctic...NoneSarah Das[][[{'DataTableID': '12448', 'DataTableName': 'A...[{'fundingAgency': 'US National Science Founda...
261772209ACT2 - Toxic Heavy Metals DataICE CORES178-5217722002(66.0119, 66.0119, -45.158, -45.158)NoneNoneJoseph McConnell, Ross Edwards[{'Author': 'McConnell, J.R. and R. Edwards', ...[[{'DataTableID': '9477', 'DataTableName': 'AC...[]
31627914005Abrupt Holocene climate transitions in the nor...PALEOLIMNOLOGY10300-56-83502006(64.613723, 65.055846, -21.625757, -19.843769)Keywords - Iceland, Lake sediment, Holocene pa...[Medieval Warm Period, Arctic, abrupt climate ...Áslaug Geirsdóttir, Gifford Miller, Darren Lar...[{'Author': 'Geirsdóttir Á., G.H. Miller, D.J....[[{'DataTableID': '26370', 'DataTableName': 'H...[{'fundingAgency': 'US National Science Founda...
42393022076Ackerman - Brooks Range Upland - SAPC - ITRDB ...TREE RING-16-6519662015(68.375, 68.375, -149.295, -149.295)NOAA Template Raw Measurements file added 2019...[Tealeaf Willow, thin red willow, diamondleaf ...Daniel Ackerman, R. Daniel Griffin, Sarah Hobb...[{'Author': 'Daniel E. Ackerman, Daniel Griffi...[[{'DataTableID': '35733', 'DataTableName': 'A...[]
52393122077Ackerman - Inigok Riparian - SAPC - ITRDB AK162TREE RING-18-6619682016(69.99, 69.99, -153.04, -153.04)NOAA Template Raw Measurements file added 2019...[SAPC, Salix pulchra Cham., Tealeaf Willow, di...Daniel Ackerman, R. Daniel Griffin, Sarah Hobb...[{'Author': 'Daniel E. Ackerman, Daniel Griffi...[[{'DataTableID': '35734', 'DataTableName': 'A...[]
62393222075Ackerman - Inigok Upland - SAPC - ITRDB AK163TREE RING-24-6619742016(69.99, 69.99, -153.04, -153.04)NOAA Template Raw Measurements file added 2019...[Tealeaf Willow, thin red willow, Salix pulchr...Daniel Ackerman, R. Daniel Griffin, Sarah Hobb...[{'Author': 'Daniel E. Ackerman, Daniel Griffi...[[{'DataTableID': '35735', 'DataTableName': 'A...[]
72393322074Ackerman - Itkillik Upland - SAPC - ITRDB AK164TREE RING-12-6619622016(68.641, 68.641, -149.614, -149.614)NOAA Template Raw Measurements file added 2019...[diamondleaf willow, thin red willow, Tealeaf ...Daniel Ackerman, R. Daniel Griffin, Sarah Hobb...[{'Author': 'Daniel E. Ackerman, Daniel Griffi...[[{'DataTableID': '35736', 'DataTableName': 'A...[]
82205320037Ackerman - Kuparuk Riparian - SAPC - ITRDB AK151TREE RING-22-6519722015(68.662, 68.662, -149.43, -149.43)Each sample represents mean of 4 radii measure...[thin red willow, SAPC, Tealeaf Willow, diamon...Daniel Ackerman, R. Daniel Griffin, Sarah Hobb...[{'Author': 'Daniel Ackerman, Daniel Griffin, ...[[{'DataTableID': '33151', 'DataTableName': 'A...[{'fundingAgency': 'US National Science Founda...
92205420039Ackerman - Kuparuk Upland - SAPC - ITRDB AK152TREE RING-15-6519652015(68.662, 68.662, -149.428, -149.428)Each sample represents mean of 4 radii measure...[diamondleaf willow, SAPC, Salix pulchra Cham....Daniel Ackerman, R. Daniel Griffin, Sarah Hobb...[{'Author': 'Daniel Ackerman, Daniel Griffin, ...[[{'DataTableID': '33152', 'DataTableName': 'A...[{'fundingAgency': 'US National Science Founda...
\n", - "
" - ], - "text/plain": [ - " StudyID XMLID StudyName \\\n", - "0 12402 10446 A Bayesian ANOVA Scheme for Calculating Climat... \n", - "1 8610 2893 ACT1,ACT3,ACT4,ACT2 - Melt Layer Thickness \n", - "2 6177 2209 ACT2 - Toxic Heavy Metals Data \n", - "3 16279 14005 Abrupt Holocene climate transitions in the nor... \n", - "4 23930 22076 Ackerman - Brooks Range Upland - SAPC - ITRDB ... \n", - "5 23931 22077 Ackerman - Inigok Riparian - SAPC - ITRDB AK162 \n", - "6 23932 22075 Ackerman - Inigok Upland - SAPC - ITRDB AK163 \n", - "7 23933 22074 Ackerman - Itkillik Upland - SAPC - ITRDB AK164 \n", - "8 22053 20037 Ackerman - Kuparuk Riparian - SAPC - ITRDB AK151 \n", - "9 22054 20039 Ackerman - Kuparuk Upland - SAPC - ITRDB AK152 \n", - "\n", - " DataType EarliestYearBP MostRecentYearBP EarliestYearCE \\\n", - "0 OTHER COLLECTIONS -11 -40 1961 \n", - "1 ICE CORES 178 -53 1772 \n", - "2 ICE CORES 178 -52 1772 \n", - "3 PALEOLIMNOLOGY 10300 -56 -8350 \n", - "4 TREE RING -16 -65 1966 \n", - "5 TREE RING -18 -66 1968 \n", - "6 TREE RING -24 -66 1974 \n", - "7 TREE RING -12 -66 1962 \n", - "8 TREE RING -22 -65 1972 \n", - "9 TREE RING -15 -65 1965 \n", - "\n", - " MostRecentYearCE Coverage [S, N, W, E] \\\n", - "0 1990 (-90.0, 90.0, -180.0, 180.0) \n", - "1 2003 (65.9811, 66.0119, -46.5511, -42.7889) \n", - "2 2002 (66.0119, 66.0119, -45.158, -45.158) \n", - "3 2006 (64.613723, 65.055846, -21.625757, -19.843769) \n", - "4 2015 (68.375, 68.375, -149.295, -149.295) \n", - "5 2016 (69.99, 69.99, -153.04, -153.04) \n", - "6 2016 (69.99, 69.99, -153.04, -153.04) \n", - "7 2016 (68.641, 68.641, -149.614, -149.614) \n", - "8 2015 (68.662, 68.662, -149.43, -149.43) \n", - "9 2015 (68.662, 68.662, -149.428, -149.428) \n", - "\n", - " StudyNotes \\\n", - "0 Matlab code for two-factor (location and year)... \n", - "1 Melt layer stratigraphy for 4 Greenland Arctic... \n", - "2 None \n", - "3 Keywords - Iceland, Lake sediment, Holocene pa... \n", - "4 NOAA Template Raw Measurements file added 2019... \n", - "5 NOAA Template Raw Measurements file added 2019... \n", - "6 NOAA Template Raw Measurements file added 2019... \n", - "7 NOAA Template Raw Measurements file added 2019... \n", - "8 Each sample represents mean of 4 radii measure... \n", - "9 Each sample represents mean of 4 radii measure... \n", - "\n", - " ScienceKeywords \\\n", - "0 None \n", - "1 None \n", - "2 None \n", - "3 [Medieval Warm Period, Arctic, abrupt climate ... \n", - "4 [Tealeaf Willow, thin red willow, diamondleaf ... \n", - "5 [SAPC, Salix pulchra Cham., Tealeaf Willow, di... \n", - "6 [Tealeaf Willow, thin red willow, Salix pulchr... \n", - "7 [diamondleaf willow, thin red willow, Tealeaf ... \n", - "8 [thin red willow, SAPC, Tealeaf Willow, diamon... \n", - "9 [diamondleaf willow, SAPC, Salix pulchra Cham.... \n", - "\n", - " Investigators \\\n", - "0 Martin Tingley \n", - "1 Sarah Das \n", - "2 Joseph McConnell, Ross Edwards \n", - "3 Áslaug Geirsdóttir, Gifford Miller, Darren Lar... \n", - "4 Daniel Ackerman, R. Daniel Griffin, Sarah Hobb... \n", - "5 Daniel Ackerman, R. Daniel Griffin, Sarah Hobb... \n", - "6 Daniel Ackerman, R. Daniel Griffin, Sarah Hobb... \n", - "7 Daniel Ackerman, R. Daniel Griffin, Sarah Hobb... \n", - "8 Daniel Ackerman, R. Daniel Griffin, Sarah Hobb... \n", - "9 Daniel Ackerman, R. Daniel Griffin, Sarah Hobb... \n", - "\n", - " Publications \\\n", - "0 [{'Author': 'Tingley, M.P.', 'Title': 'A Bayes... \n", - "1 [] \n", - "2 [{'Author': 'McConnell, J.R. and R. Edwards', ... \n", - "3 [{'Author': 'Geirsdóttir Á., G.H. Miller, D.J.... \n", - "4 [{'Author': 'Daniel E. Ackerman, Daniel Griffi... \n", - "5 [{'Author': 'Daniel E. Ackerman, Daniel Griffi... \n", - "6 [{'Author': 'Daniel E. Ackerman, Daniel Griffi... \n", - "7 [{'Author': 'Daniel E. Ackerman, Daniel Griffi... \n", - "8 [{'Author': 'Daniel Ackerman, Daniel Griffin, ... \n", - "9 [{'Author': 'Daniel Ackerman, Daniel Griffin, ... \n", - "\n", - " Sites \\\n", - "0 [[{'DataTableID': '20755', 'DataTableName': 'A... \n", - "1 [[{'DataTableID': '12448', 'DataTableName': 'A... \n", - "2 [[{'DataTableID': '9477', 'DataTableName': 'AC... \n", - "3 [[{'DataTableID': '26370', 'DataTableName': 'H... \n", - "4 [[{'DataTableID': '35733', 'DataTableName': 'A... \n", - "5 [[{'DataTableID': '35734', 'DataTableName': 'A... \n", - "6 [[{'DataTableID': '35735', 'DataTableName': 'A... \n", - "7 [[{'DataTableID': '35736', 'DataTableName': 'A... \n", - "8 [[{'DataTableID': '33151', 'DataTableName': 'A... \n", - "9 [[{'DataTableID': '33152', 'DataTableName': 'A... \n", - "\n", - " Funding \n", - "0 [] \n", - "1 [{'fundingAgency': 'US National Science Founda... \n", - "2 [] \n", - "3 [{'fundingAgency': 'US National Science Founda... \n", - "4 [] \n", - "5 [] \n", - "6 [] \n", - "7 [] \n", - "8 [{'fundingAgency': 'US National Science Founda... \n", - "9 [{'fundingAgency': 'US National Science Founda... " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Query 2: Get the next 10 results (skip the first 10)\n", - "# Note: This *overwrites* the previous search results in the 'dataset' object as we are reusing the same dataset instance. \n", - "print(\"\\n--- Fetching Batch 2 (11-20) ---\")\n", - "batch2 = dataset.search_studies(min_lat=60, max_lat=70, limit=10, skip=10)\n", - "print(f\"Current studies in dataset: {len(dataset.studies)}\")\n", - "display(batch2)\n" - ] - }, - { - "cell_type": "markdown", - "id": "0de3bd90", - "metadata": {}, - "source": [ - "### 2. Combining Datasets" - ] - }, - { - "cell_type": "markdown", - "id": "f0626edc", - "metadata": {}, - "source": [ - "\n", - "A powerful feature of PyleoTUPS is the ability to merge `Dataset` objects. This allows you to construct complex collections of data that might be difficult to express in a single search query.\n", - "\n", - "For example, you can perform two separate searches (e.g., one for \"Pollen\" and one for \"Ice Cores\") and combine them into a single dataset for analysis.\n", - "\n", - "* `+` operator: Creates a new Dataset containing the union of two others.\n", - "* `+=` operator: Adds results from one Dataset into another (in-place)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "06fd94d1", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:42:53,830][INFO] - search_studies: Limit set to 5.\n", - "[2026-03-24 12:42:53,833][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Searching for Pollen...\n", - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&limit=5&keywords=pollen&minLat=40&maxLat=50\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 5/5 [00:00<00:00, 4960.15it/s]\n", - "[2026-03-24 12:42:54,640][WARNING] - Retrieved 5 studies, which is the specified limit. Consider increasing the limit parameter to fetch more studies.\n", - "[2026-03-24 12:42:54,643][INFO] - Retrieved 5 studies.\n" - ] - }, - { - "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", - "
StudyNameStudyID
0Central Nova Scotia Pollen Temperature and Pre...37245
1Doner 2009 Bear Lake, Utah-Idaho 19ka Pollen Data8711
2Orbital- and millennial-scale vegetation and c...6187
3Williams et al. 2004 Late Quaternary North Ame...5973
4Williams et al. 2006 North American Pollen Atlas5974
\n", - "
" - ], - "text/plain": [ - " StudyName StudyID\n", - "0 Central Nova Scotia Pollen Temperature and Pre... 37245\n", - "1 Doner 2009 Bear Lake, Utah-Idaho 19ka Pollen Data 8711\n", - "2 Orbital- and millennial-scale vegetation and c... 6187\n", - "3 Williams et al. 2004 Late Quaternary North Ame... 5973\n", - "4 Williams et al. 2006 North American Pollen Atlas 5974" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:42:54,666][INFO] - search_studies: Limit set to 5.\n", - "[2026-03-24 12:42:54,667][INFO] - search_studies: Input Query includes geographical bounds. Inspect the results to ensure they match your intended region as one study can contain sites across various parts of the world.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Searching for Ice Cores...\n", - "Request URL: https://www.ncei.noaa.gov/access/paleo-search/study/search.json?dataPublisher=NOAA&limit=5&keywords=ice+core&minLat=40&maxLat=50\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parsing NOAA studies: 100%|██████████| 5/5 [00:00<00:00, 1001.94it/s]\n", - "[2026-03-24 12:42:55,547][WARNING] - Retrieved 5 studies, which is the specified limit. Consider increasing the limit parameter to fetch more studies.\n", - "[2026-03-24 12:42:55,549][INFO] - Retrieved 5 studies.\n" - ] - }, - { - "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", - "
StudyNameStudyID
0Altai Ice Cores, Siberian and Mongolian Altai,...40942
1Altai, Siberia 750 Year Ice Core d18O and Temp...12885
2Alto dell'Ortles Glacier Ice Core Age Models20367
3Antarctica Station Dome Concordia Chemistry, S...40399
4Atmospheric CH4, Interpolar Difference and Exc...38619
\n", - "
" - ], - "text/plain": [ - " StudyName StudyID\n", - "0 Altai Ice Cores, Siberian and Mongolian Altai,... 40942\n", - "1 Altai, Siberia 750 Year Ice Core d18O and Temp... 12885\n", - "2 Alto dell'Ortles Glacier Ice Core Age Models 20367\n", - "3 Antarctica Station Dome Concordia Chemistry, S... 40399\n", - "4 Atmospheric CH4, Interpolar Difference and Exc... 38619" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Pollen studies: 5\n", - "Ice Core studies: 5\n", - "Combined total: 10\n" - ] - }, - { - "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", - "
StudyNameStudyID
0Central Nova Scotia Pollen Temperature and Pre...37245
1Doner 2009 Bear Lake, Utah-Idaho 19ka Pollen Data8711
2Orbital- and millennial-scale vegetation and c...6187
3Williams et al. 2004 Late Quaternary North Ame...5973
4Williams et al. 2006 North American Pollen Atlas5974
5Altai Ice Cores, Siberian and Mongolian Altai,...40942
6Altai, Siberia 750 Year Ice Core d18O and Temp...12885
7Alto dell'Ortles Glacier Ice Core Age Models20367
8Antarctica Station Dome Concordia Chemistry, S...40399
9Atmospheric CH4, Interpolar Difference and Exc...38619
\n", - "
" - ], - "text/plain": [ - " StudyName StudyID\n", - "0 Central Nova Scotia Pollen Temperature and Pre... 37245\n", - "1 Doner 2009 Bear Lake, Utah-Idaho 19ka Pollen Data 8711\n", - "2 Orbital- and millennial-scale vegetation and c... 6187\n", - "3 Williams et al. 2004 Late Quaternary North Ame... 5973\n", - "4 Williams et al. 2006 North American Pollen Atlas 5974\n", - "5 Altai Ice Cores, Siberian and Mongolian Altai,... 40942\n", - "6 Altai, Siberia 750 Year Ice Core d18O and Temp... 12885\n", - "7 Alto dell'Ortles Glacier Ice Core Age Models 20367\n", - "8 Antarctica Station Dome Concordia Chemistry, S... 40399\n", - "9 Atmospheric CH4, Interpolar Difference and Exc... 38619" - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Create two separate datasets\n", - "ds_pollen = pt.NOAADataset()\n", - "ds_ice = pt.NOAADataset()\n", - "\n", - "# Search 1: Pollen studies in a specific region\n", - "print(\"Searching for Pollen...\")\n", - "search_pollen = ds_pollen.search_studies(keywords=[\"pollen\"], min_lat=40, max_lat=50, limit=5)\n", - "display(search_pollen[['StudyName', 'StudyID']])\n", - "\n", - "# Search 2: Ice Core studies in the same region\n", - "print(\"Searching for Ice Cores...\")\n", - "search_ice = ds_ice.search_studies(keywords=[\"ice core\"], min_lat=40, max_lat=50, limit=5)\n", - "display(search_ice[['StudyName', 'StudyID']])\n", - "\n", - "# Combine them into a master dataset\n", - "ds_combined = ds_pollen + ds_ice\n", - "\n", - "print(f\"\\nPollen studies: {len(ds_pollen.studies)}\")\n", - "print(f\"Ice Core studies: {len(ds_ice.studies)}\")\n", - "print(f\"Combined total: {len(ds_combined.studies)}\")\n", - "\n", - "# Verify the combination by looking at the summary\n", - "ds_combined.get_summary()[['StudyName', 'StudyID']].head(10)" - ] - }, - { - "cell_type": "markdown", - "id": "db9993ec", - "metadata": {}, - "source": [ - "## STAY TUNED FOR MORE:\n", - "\n", - "Check the upcoming releases for:\n", - "- Data Extraction from Excel Files\n", - "- Dataset access from PANAGAEA" - ] - }, - { - "cell_type": "markdown", - "id": "b25065f4", - "metadata": {}, - "source": [ - "### Excel Parser:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f5a15f47", - "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", - "
d18Od13CCoreSectionIntervalmbsfAge (Ma)TaxaHabitat
0-0.1978240.94471831.02.0142-144495.9265.673111Gavelinella beccariiformisBenthic
10.1647461.27442431.03.043-45496.4365.805569Gavelinella beccariiformisBenthic
20.1459761.88960632.02.058-60504.5867.922306Gavelinella beccariiformisBenthic
30.2427931.67952032.03.0127-129506.7768.491097Gavelinella beccariiformisBenthic
4-0.1889331.57799432.04.078-80507.7868.753417Gavelinella beccariiformisBenthic
\n", - "
" - ], - "text/plain": [ - " d18O d13C Core Section Interval mbsf Age (Ma) \\\n", - "0 -0.197824 0.944718 31.0 2.0 142-144 495.92 65.673111 \n", - "1 0.164746 1.274424 31.0 3.0 43-45 496.43 65.805569 \n", - "2 0.145976 1.889606 32.0 2.0 58-60 504.58 67.922306 \n", - "3 0.242793 1.679520 32.0 3.0 127-129 506.77 68.491097 \n", - "4 -0.188933 1.577994 32.0 4.0 78-80 507.78 68.753417 \n", - "\n", - " Taxa Habitat \n", - "0 Gavelinella beccariiformis Benthic \n", - "1 Gavelinella beccariiformis Benthic \n", - "2 Gavelinella beccariiformis Benthic \n", - "3 Gavelinella beccariiformis Benthic \n", - "4 Gavelinella beccariiformis Benthic " - ] - }, - "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", - "
d18Od13CCoreSectionIntervalmbsfAge (Ma)TaxaHabitat
00.5332441.52471912.01.044-46114.89065.206819Gavelinella beccariiformisBenthic
10.5628820.70749112.04.020-23118.71565.477737Gavelinella beccariiformisBenthic
20.9215011.70062913.04.0116-118129.17069.958837Gavelinella beccariiformisBenthic
30.8968021.29452813.05.0133-135130.84070.173167Gavelinella beccariiformisBenthic
40.5036060.71452812.02.0136-138116.87065.347059Gavelinella sp.Benthic
\n", - "
" - ], - "text/plain": [ - " d18O d13C Core Section Interval mbsf Age (Ma) \\\n", - "0 0.533244 1.524719 12.0 1.0 44-46 114.890 65.206819 \n", - "1 0.562882 0.707491 12.0 4.0 20-23 118.715 65.477737 \n", - "2 0.921501 1.700629 13.0 4.0 116-118 129.170 69.958837 \n", - "3 0.896802 1.294528 13.0 5.0 133-135 130.840 70.173167 \n", - "4 0.503606 0.714528 12.0 2.0 136-138 116.870 65.347059 \n", - "\n", - " Taxa Habitat \n", - "0 Gavelinella beccariiformis Benthic \n", - "1 Gavelinella beccariiformis Benthic \n", - "2 Gavelinella beccariiformis Benthic \n", - "3 Gavelinella beccariiformis Benthic \n", - "4 Gavelinella sp. Benthic " - ] - }, - "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", - "
d18Od13CCoreSectionIntervalmbsfAge (Ma)TaxaHabitat
0-0.0160451.77099329.04.020-22476.0365.844940Gavelinella sp.Benthic
10.4739681.82225830.01.072-74481.7266.272431Gavelinella sp.Benthic
20.2032761.61016130.03.013-15484.1366.453494Gavelinella sp.Benthic
30.1686981.85442431.01.018-21490.6866.945596Gavelinella sp.Benthic
40.1459761.89463231.02.0108-110493.0867.125908Gavelinella sp.Benthic
\n", - "
" - ], - "text/plain": [ - " d18O d13C Core Section Interval mbsf Age (Ma) \\\n", - "0 -0.016045 1.770993 29.0 4.0 20-22 476.03 65.844940 \n", - "1 0.473968 1.822258 30.0 1.0 72-74 481.72 66.272431 \n", - "2 0.203276 1.610161 30.0 3.0 13-15 484.13 66.453494 \n", - "3 0.168698 1.854424 31.0 1.0 18-21 490.68 66.945596 \n", - "4 0.145976 1.894632 31.0 2.0 108-110 493.08 67.125908 \n", - "\n", - " Taxa Habitat \n", - "0 Gavelinella sp. Benthic \n", - "1 Gavelinella sp. Benthic \n", - "2 Gavelinella sp. Benthic \n", - "3 Gavelinella sp. Benthic \n", - "4 Gavelinella sp. Benthic " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from pyleotups.utils.Parser.ExcelParser import ExcelParser\n", - "\n", - "excel_url = \"https://www.ncei.noaa.gov/pub/data/paleo/contributions_by_author/frank1999/frank1999.xls\"\n", - "excel_parser = ExcelParser(excel_url)\n", - "excel_data_blocks = excel_parser.parse()\n", - "\n", - "for block in excel_data_blocks:\n", - " if hasattr(block, 'df') and block.df is not None:\n", - " display(block.df.head())" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv (3.12.3)", - "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.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/examples/tutorial-pangaea.ipynb b/examples/tutorial-pangaea.ipynb deleted file mode 100644 index 2f4c1695..00000000 --- a/examples/tutorial-pangaea.ipynb +++ /dev/null @@ -1,1368 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "b5fca3a6", - "metadata": {}, - "source": [ - "# Using PangaeaDataset in PyeloTUPS\n", - "\n", - "This tutorial demonstrates how to use `PangaeaDataset` to discover, explore,\n", - "and retrieve paleoceanographic datasets from PANGAEA.\n", - "\n", - "Unlike `NOAADataset`, which interacts with the NOAA NCEI Paleo API,\n", - "`PangaeaDataset` communicates with the PANGAEA backend via `pangaeapy`,\n", - "while exposing a similar researcher-facing API." - ] - }, - { - "cell_type": "markdown", - "id": "d568b2e0", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "source": [ - "### Requirements\n", - "\n", - "Installation of ```pyleotups [version > {0.0.1}]``` automatically handles the installation of external services required for accessing the Pangaea Datasets. \n" - ] - }, - { - "cell_type": "markdown", - "id": "06bb088a", - "metadata": {}, - "source": [ - "In this tutorial, we will cover:\n", - "\n", - "0. **Credentials setup** [Optional] Setting up credentials to access private datasets\n", - "1. **Searching** for studies using the Pangaea.\n", - "2. **Browsing** search results (Publications, Geography, Funding).\n", - "3. **Extracting** data into pandas DataFrames." - ] - }, - { - "cell_type": "markdown", - "id": "7097235d", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "source": [ - "### 0. Credential Setup\n", - "\n", - "Few datasets over Panagaea are protected and reuqires the user to have an ACCESS KEY. \n", - "\n", - "Follow the instructions to access and set the key through pyleotups utilities. You can also do the steps manually." - ] - }, - { - "cell_type": "markdown", - "id": "80822be6", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "source": [ - "
\n", - "1. Obtaining Your PANGAEA API Token\n", - "\n", - "1. Create an account or log in at: \n", - " https://www.pangaea.de/user/login.php \n", - "\n", - "2. After logging in, navigate to your PANGAEA profile.\n", - "\n", - "3. Locate your **API login token key**.\n", - "\n", - "4. Copy this token — it is unique to your account.\n", - "\n", - "> Keep this key private. It grants access to datasets associated with your account and other personal information.\n" - ] - }, - { - "cell_type": "markdown", - "id": "81ce6cc0", - "metadata": { - "vscode": { - "languageId": "plaintext" - } - }, - "source": [ - "
\n", - "2. Securely Storing Your Token\n", - "\n", - "To prevent accidental exposure of your API key in notebooks or version control, we recommend storing it in a local `.env` file.\n", - "\n", - "PyeloTUPS provides a helper utility to securely manage this for you.\n", - "\n", - "\n", - "\n", - "#### Step 1 — Save Your Credentials (One-Time Setup)\n", - "\n", - "```python\n", - "from pyleotups import save_pangaea_credentials\n", - "\n", - "save_pangaea_credentials(\"your_token_here\")\n", - "```\n", - "\n", - "#### Step 2 — Load Credentials in Your Notebook\n", - "\n", - "```python\n", - "from pyleotups import load_pangaea_credentials\n", - "\n", - "pan_api = load_pangaea_credentials()\n", - "```\n", - "The variable pan_api now securely contains your login token.\n", - "
" - ] - }, - { - "cell_type": "markdown", - "id": "688b104a", - "metadata": {}, - "source": [ - "
\n", - "3. Managing pangaea credentials manually\n", - "\n", - "
\n", - "Installation of `pyleotups` (version > 0.0.1) automatically installs the external dependencies required to access PANGAEA datasets.\n", - "\n", - "However, some datasets on PANGAEA are **protected** and require an **ACCESS KEY** (login token) for authentication.\n", - "\n", - "\n", - "\n", - "#### Obtaining Your PANGAEA Access Key\n", - "\n", - "1. Create an account or log in (for existing users) at:\n", - " [https://www.pangaea.de/user/login.php](https://www.pangaea.de/user/login.php)\n", - "\n", - "2. After logging in, navigate to your **PANGAEA profile**.\n", - "\n", - "3. Locate your **login token key** in your profile settings.\n", - "\n", - "> This token is unique to each user and should be kept private. \n", - "\n", - "\n", - "### Securely Storing Your Token Using `dotenv`\n", - "\n", - "To protect your personal credentials and prevent accidental exposure (e.g., when sharing notebooks), we strongly recommend using a `.env` file.\n", - "\n", - "#### Step 1: Create a .env File\n", - "\n", - "* In your project’s root directory, create a file named exactly:\n", - "\n", - "```\n", - ".env\n", - "```\n", - "\n", - "#### Step 2: Add Your API Token\n", - "\n", - "Inside the .env file, add the following line:\n", - "\n", - "```\n", - "PANGAEA_API=\"{your pangaea login token key}\"\n", - "```\n", - "\n", - "> If you use source control, we strongly recommend adding .env to your .gitignore files to exclude the .env file from being commited.\n", - " \n", - "**Important:**\n", - "\n", - "* The key must be enclosed in **double quotes**.\n", - "* Do **not** share this `.env` file when distributing notebooks or code.\n", - "\n", - "---\n", - "\n", - "### Accessing the Token in Your Notebook\n", - "\n", - "In your Python notebook or script, load the token as follows:\n", - "\n", - "```python\n", - "from dotenv import load_dotenv\n", - "import os\n", - "load_dotenv()\n", - "pan_api = os.getenv(\"PANGAEA_API\")\n", - "```\n", - "\n", - "The variable `pan_api` now securely contains your PANGAEA login token and can be used for accessing protected datasets.\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "80290b19", - "metadata": {}, - "outputs": [], - "source": [ - "from pyleotups import save_pangaea_credentials, load_pangaea_credentials\n", - "\n", - "### save_pangaea_credentials(\"your_api_key_here\")\n", - "### remove the above line after saving your credentials, and then you can load them using the line below\n", - "\n", - "pan_api = load_pangaea_credentials()" - ] - }, - { - "cell_type": "markdown", - "id": "007bcdd1", - "metadata": {}, - "source": [ - "### 1. Searching for Studies\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "153490c2", - "metadata": {}, - "outputs": [], - "source": [ - "import pyleotups as pt\n", - "\n", - "# Initialize a Pangaea Dataset manager\n", - "# This object will act as your session, storing search results and processing data.\n", - "dataset = pt.PangaeaDataset(auth_token=pan_api)" - ] - }, - { - "cell_type": "markdown", - "id": "1ea9e3aa", - "metadata": {}, - "source": [ - "\n", - "The `search_studies()` method queries the PANGAEA backend\n", - "and registers matching datasets internally.\n", - "\n", - "Following parameters can be used to tune the search\n", - "- `q` → free-text query \n", - "- `bbox` → geographic bounding box (minlon, minlat, maxlon, maxlat) \n", - "- `keywords` → optional provider-specific terms " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1a99f03e", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:40:26,623][INFO] - Retrived 10 studies\n", - "[2026-03-24 12:40:26,629][WARNING] - The search contains dataset(s) [830589, 897517] marked as collection. Refer to the 'CollectionMembers' column toidentify respective child datasets.\n" - ] - } - ], - "source": [ - "ds = dataset.search_studies(\n", - " q=\"Khider, D.\",\n", - " # bbox=(-10, -10, 10, 10), #(min_lon, min_lat, max_lon, max_lat) \n", - " # keywords=[\"Sr/Ca\"],\n", - " limit=10\n", - ")\n" - ] - }, - { - "cell_type": "markdown", - "id": "c4444573", - "metadata": {}, - "source": [ - "### 2. EXPLORING RESULTS " - ] - }, - { - "cell_type": "markdown", - "id": "b6fe20f6", - "metadata": {}, - "source": [ - "#### a. Getting a summary. " - ] - }, - { - "cell_type": "markdown", - "id": "9c1fbcfb", - "metadata": {}, - "source": [ - "You can access the search results in two ways:\n", - "- `dataset.get_summary()` → returns a DataFrame of search results (default behavior)\n", - "- ACCESS the DataFrame in return value. i.e. `ds`\n", - "\n", - "All results are stored internally in `dataset.studies`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "831ef235", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:40:26,647][WARNING] - The search contains dataset(s) [830589, 897517] marked as collection. Refer to the 'CollectionMembers' column toidentify respective child datasets.\n" - ] - }, - { - "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", - "
StudyIDStudyNameEarliestYearBPMostRecentYearBPEarliestYearCEMostRecentYearCEStudyNotesScienceKeywordsInvestigatorsPublicationsSitesFundingCollectionMembers
0830589Stable isotope record of sediment core MD98-2177NaNNaNNaNNaNWe present a reconstruction of El Niño Souther...[]Khider, D, Stott, Lowell D, Emile-Geay, J, Thu...Khider, D; Stott, Lowell D; Emile-Geay, J; Thu...[MD98-2177][][830586, 830587, 830588]
1897517Globigerinoides ruber sediment trap data in th...NaNNaNNaNNaNWe present results here from a high-resolution...[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[][][897509, 897512, 897513, 897514, 897515, 897516]
2830588(Table 3) Lead 214 and Lead 210 concentration ...NaNNaNNaNNaNNone[]Khider, D, Stott, Lowell D, Emile-Geay, J, Thu...Khider, D; Stott, Lowell D; Emile-Geay, J; Thu...[MD98-2177][]None
3897512Globigerinoides ruber flux analysis from a lon...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
4897516CTD data from a long-running sediment trap tim...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
5897514Magnesium/Calcium ratio of Globigerinoides rub...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
6830587(Table 2) Age determination of sediment core M...98.01950.00.01852.0None[]Khider, D, Stott, Lowell D, Emile-Geay, J, Thu...Khider, D; Stott, Lowell D; Emile-Geay, J; Thu...[MD98-2177][]None
7830586(Table S1) Stable carbon and oxygen isotope ra...1231.0103.0704.01851.0None[]Khider, D, Stott, Lowell D, Emile-Geay, J, Thu...Khider, D; Stott, Lowell D; Emile-Geay, J; Thu...[MD98-2177][]None
8897509Carbonate measurements from a long-running sed...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
9897513Isotpes analysis of Globigerinoides ruber from...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
\n", - "
" - ], - "text/plain": [ - " StudyID StudyName EarliestYearBP \\\n", - "0 830589 Stable isotope record of sediment core MD98-2177 NaN \n", - "1 897517 Globigerinoides ruber sediment trap data in th... NaN \n", - "2 830588 (Table 3) Lead 214 and Lead 210 concentration ... NaN \n", - "3 897512 Globigerinoides ruber flux analysis from a lon... NaN \n", - "4 897516 CTD data from a long-running sediment trap tim... NaN \n", - "5 897514 Magnesium/Calcium ratio of Globigerinoides rub... NaN \n", - "6 830587 (Table 2) Age determination of sediment core M... 98.0 \n", - "7 830586 (Table S1) Stable carbon and oxygen isotope ra... 1231.0 \n", - "8 897509 Carbonate measurements from a long-running sed... NaN \n", - "9 897513 Isotpes analysis of Globigerinoides ruber from... NaN \n", - "\n", - " MostRecentYearBP EarliestYearCE MostRecentYearCE \\\n", - "0 NaN NaN NaN \n", - "1 NaN NaN NaN \n", - "2 NaN NaN NaN \n", - "3 NaN NaN NaN \n", - "4 NaN NaN NaN \n", - "5 NaN NaN NaN \n", - "6 1950.0 0.0 1852.0 \n", - "7 103.0 704.0 1851.0 \n", - "8 NaN NaN NaN \n", - "9 NaN NaN NaN \n", - "\n", - " StudyNotes ScienceKeywords \\\n", - "0 We present a reconstruction of El Niño Souther... [] \n", - "1 We present results here from a high-resolution... [] \n", - "2 None [] \n", - "3 None [] \n", - "4 None [] \n", - "5 None [] \n", - "6 None [] \n", - "7 None [] \n", - "8 None [] \n", - "9 None [] \n", - "\n", - " Investigators \\\n", - "0 Khider, D, Stott, Lowell D, Emile-Geay, J, Thu... \n", - "1 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "2 Khider, D, Stott, Lowell D, Emile-Geay, J, Thu... \n", - "3 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "4 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "5 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "6 Khider, D, Stott, Lowell D, Emile-Geay, J, Thu... \n", - "7 Khider, D, Stott, Lowell D, Emile-Geay, J, Thu... \n", - "8 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "9 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "\n", - " Publications Sites \\\n", - "0 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... [MD98-2177] \n", - "1 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [] \n", - "2 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... [MD98-2177] \n", - "3 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "4 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "5 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "6 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... [MD98-2177] \n", - "7 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... [MD98-2177] \n", - "8 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "9 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "\n", - " Funding CollectionMembers \n", - "0 [] [830586, 830587, 830588] \n", - "1 [] [897509, 897512, 897513, 897514, 897515, 897516] \n", - "2 [] None \n", - "3 [] None \n", - "4 [] None \n", - "5 [] None \n", - "6 [] None \n", - "7 [] None \n", - "8 [] None \n", - "9 [] None " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dataset.get_summary()" - ] - }, - { - "cell_type": "markdown", - "id": "599109b3", - "metadata": {}, - "source": [ - "#### b. Exploring Geographic Metadata\n", - "\n", - "Returns site-level geographic information where available.\n", - "\n", - "If no geospatial metadata exists, an empty DataFrame is returned." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2c9beec8", - "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", - "
StudyIDSiteIDSiteNameLocationNameLatitudeLongitudeElevation
08305892013989MD98-2177None1.4119.08-968.0
18305882013989MD98-2177None1.4119.08-968.0
28975122901221GMT_Gulf_of_MexicoGulf of Mexico27.5-90.30-700.0
38975162901221GMT_Gulf_of_MexicoGulf of Mexico27.5-90.30-700.0
48975142901221GMT_Gulf_of_MexicoGulf of Mexico27.5-90.30-700.0
58305872013989MD98-2177None1.4119.08-968.0
68305862013989MD98-2177None1.4119.08-968.0
78975092901221GMT_Gulf_of_MexicoGulf of Mexico27.5-90.30-700.0
88975132901221GMT_Gulf_of_MexicoGulf of Mexico27.5-90.30-700.0
\n", - "
" - ], - "text/plain": [ - " StudyID SiteID SiteName LocationName Latitude Longitude \\\n", - "0 830589 2013989 MD98-2177 None 1.4 119.08 \n", - "1 830588 2013989 MD98-2177 None 1.4 119.08 \n", - "2 897512 2901221 GMT_Gulf_of_Mexico Gulf of Mexico 27.5 -90.30 \n", - "3 897516 2901221 GMT_Gulf_of_Mexico Gulf of Mexico 27.5 -90.30 \n", - "4 897514 2901221 GMT_Gulf_of_Mexico Gulf of Mexico 27.5 -90.30 \n", - "5 830587 2013989 MD98-2177 None 1.4 119.08 \n", - "6 830586 2013989 MD98-2177 None 1.4 119.08 \n", - "7 897509 2901221 GMT_Gulf_of_Mexico Gulf of Mexico 27.5 -90.30 \n", - "8 897513 2901221 GMT_Gulf_of_Mexico Gulf of Mexico 27.5 -90.30 \n", - "\n", - " Elevation \n", - "0 -968.0 \n", - "1 -968.0 \n", - "2 -700.0 \n", - "3 -700.0 \n", - "4 -700.0 \n", - "5 -968.0 \n", - "6 -968.0 \n", - "7 -700.0 \n", - "8 -700.0 " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "geo = dataset.get_geo()\n", - "display(geo)" - ] - }, - { - "cell_type": "markdown", - "id": "2e70d2c2", - "metadata": {}, - "source": [ - "#### c. Explore the listed Publication" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e1a552c7", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(BibliographyData(\n", - " entries=OrderedCaseInsensitiveDict([\n", - " ('10_1594_PANGAEA_830589_1_1', Entry('misc',\n", - " fields=[\n", - " ('title', 'Stable isotope record of sediment core MD98-2177'),\n", - " ('year', '2011'),\n", - " ('doi', '10.1594/PANGAEA.830589'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.830589')],\n", - " persons={'author': [Person('Khider'), Person('D'), Person('Stott'), Person('D, Lowell'), Person('Emile-Geay'), Person('J'), Person('Thunell'), Person('C, Robert'), Person('Hammond'), Person('E, Douglas')]})), \n", - " ('10_1594_PANGAEA_897517_1_2', Entry('misc',\n", - " fields=[\n", - " ('title', 'Globigerinoides ruber sediment trap data in the Gulf of Mexico'),\n", - " ('year', '2019'),\n", - " ('doi', '10.1594/PANGAEA.897517'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.897517')],\n", - " persons={'author': [Person('Richey'), Person('N, Julie'), Person('Thirumalai'), Person('Kaustubh'), Person('Khider'), Person('D'), Person('Reynolds'), Person('E, Caitlin'), Person('Partin'), Person('W, Judson'), Person('Quinn'), Person('Michael, Terrence')]})), \n", - " ('10_1594_PANGAEA_830588_1_3', Entry('misc',\n", - " fields=[\n", - " ('title', '(Table 3) Lead 214 and Lead 210 concentration of sediment core MD98-2177'),\n", - " ('year', '2011'),\n", - " ('doi', '10.1594/PANGAEA.830588'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.830588')],\n", - " persons={'author': [Person('Khider'), Person('D'), Person('Stott'), Person('D, Lowell'), Person('Emile-Geay'), Person('J'), Person('Thunell'), Person('C, Robert'), Person('Hammond'), Person('E, Douglas')]})), \n", - " ('10_1594_PANGAEA_897512_1_4', Entry('misc',\n", - " fields=[\n", - " ('title', 'Globigerinoides ruber flux analysis from a long-running sediment trap time series from the northern Gulf of Mexico'),\n", - " ('year', '2019'),\n", - " ('doi', '10.1594/PANGAEA.897512'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.897512')],\n", - " persons={'author': [Person('Richey'), Person('N, Julie'), Person('Thirumalai'), Person('Kaustubh'), Person('Khider'), Person('D'), Person('Reynolds'), Person('E, Caitlin'), Person('Partin'), Person('W, Judson'), Person('Quinn'), Person('Michael, Terrence')]})), \n", - " ('10_1594_PANGAEA_897516_1_5', Entry('misc',\n", - " fields=[\n", - " ('title', 'CTD data from a long-running sediment trap time series from the northern Gulf of Mexico'),\n", - " ('year', '2019'),\n", - " ('doi', '10.1594/PANGAEA.897516'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.897516')],\n", - " persons={'author': [Person('Richey'), Person('N, Julie'), Person('Thirumalai'), Person('Kaustubh'), Person('Khider'), Person('D'), Person('Reynolds'), Person('E, Caitlin'), Person('Partin'), Person('W, Judson'), Person('Quinn'), Person('Michael, Terrence')]})), \n", - " ('10_1594_PANGAEA_897514_1_6', Entry('misc',\n", - " fields=[\n", - " ('title', 'Magnesium/Calcium ratio of Globigerinoides ruber from a long-running sediment trap time series from the northern Gulf of Mexico'),\n", - " ('year', '2019'),\n", - " ('doi', '10.1594/PANGAEA.897514'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.897514')],\n", - " persons={'author': [Person('Richey'), Person('N, Julie'), Person('Thirumalai'), Person('Kaustubh'), Person('Khider'), Person('D'), Person('Reynolds'), Person('E, Caitlin'), Person('Partin'), Person('W, Judson'), Person('Quinn'), Person('Michael, Terrence')]})), \n", - " ('10_1594_PANGAEA_830587_1_7', Entry('misc',\n", - " fields=[\n", - " ('title', '(Table 2) Age determination of sediment core MD98-2177'),\n", - " ('year', '2011'),\n", - " ('doi', '10.1594/PANGAEA.830587'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.830587')],\n", - " persons={'author': [Person('Khider'), Person('D'), Person('Stott'), Person('D, Lowell'), Person('Emile-Geay'), Person('J'), Person('Thunell'), Person('C, Robert'), Person('Hammond'), Person('E, Douglas')]})), \n", - " ('10_1594_PANGAEA_830586_1_8', Entry('misc',\n", - " fields=[\n", - " ('title', '(Table S1) Stable carbon and oxygen isotope ratios of Pulleniatina obliquiloculata of sediment core MD98-2177'),\n", - " ('year', '2011'),\n", - " ('doi', '10.1594/PANGAEA.830586'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.830586')],\n", - " persons={'author': [Person('Khider'), Person('D'), Person('Stott'), Person('D, Lowell'), Person('Emile-Geay'), Person('J'), Person('Thunell'), Person('C, Robert'), Person('Hammond'), Person('E, Douglas')]})), \n", - " ('10_1594_PANGAEA_897509_1_9', Entry('misc',\n", - " fields=[\n", - " ('title', 'Carbonate measurements from a long-running sediment trap time series from the northern Gulf of Mexico'),\n", - " ('year', '2019'),\n", - " ('doi', '10.1594/PANGAEA.897509'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.897509')],\n", - " persons={'author': [Person('Richey'), Person('N, Julie'), Person('Thirumalai'), Person('Kaustubh'), Person('Khider'), Person('D'), Person('Reynolds'), Person('E, Caitlin'), Person('Partin'), Person('W, Judson'), Person('Quinn'), Person('Michael, Terrence')]})), \n", - " ('10_1594_PANGAEA_897513_1_10', Entry('misc',\n", - " fields=[\n", - " ('title', 'Isotpes analysis of Globigerinoides ruber from a long-running sediment trap time series from the northern Gulf of Mexico'),\n", - " ('year', '2019'),\n", - " ('doi', '10.1594/PANGAEA.897513'),\n", - " ('url', 'https://doi.org/10.1594/PANGAEA.897513')],\n", - " persons={'author': [Person('Richey'), Person('N, Julie'), Person('Thirumalai'), Person('Kaustubh'), Person('Khider'), Person('D'), Person('Reynolds'), Person('E, Caitlin'), Person('Partin'), Person('W, Judson'), Person('Quinn'), Person('Michael, Terrence')]}))]),\n", - " \n", - " preamble=[]),\n", - " StudyID StudyName \\\n", - " 0 830589 Stable isotope record of sediment core MD98-2177 \n", - " 1 830589 Stable isotope record of sediment core MD98-2177 \n", - " 2 897517 Globigerinoides ruber sediment trap data in th... \n", - " 3 897517 Globigerinoides ruber sediment trap data in th... \n", - " 4 830588 (Table 3) Lead 214 and Lead 210 concentration ... \n", - " 5 897512 Globigerinoides ruber flux analysis from a lon... \n", - " 6 897516 CTD data from a long-running sediment trap tim... \n", - " 7 897514 Magnesium/Calcium ratio of Globigerinoides rub... \n", - " 8 830587 (Table 2) Age determination of sediment core M... \n", - " 9 830586 (Table S1) Stable carbon and oxygen isotope ra... \n", - " 10 897509 Carbonate measurements from a long-running sed... \n", - " 11 897513 Isotpes analysis of Globigerinoides ruber from... \n", - " \n", - " Author \\\n", - " 0 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... \n", - " 1 None \n", - " 2 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 3 None \n", - " 4 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... \n", - " 5 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 6 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 7 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 8 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... \n", - " 9 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... \n", - " 10 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 11 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " \n", - " Title Journal Year Volume \\\n", - " 0 Stable isotope record of sediment core MD98-2177 PANGAEA 2011 None \n", - " 1 Khider, D et al. (2011): Assessing El Niño Sou... None 2011 None \n", - " 2 Globigerinoides ruber sediment trap data in th... PANGAEA 2019 None \n", - " 3 Richey, JN et al. (2019): Considerations for G... None 2019 None \n", - " 4 (Table 3) Lead 214 and Lead 210 concentration ... PANGAEA 2011 None \n", - " 5 Globigerinoides ruber flux analysis from a lon... PANGAEA 2019 None \n", - " 6 CTD data from a long-running sediment trap tim... PANGAEA 2019 None \n", - " 7 Magnesium/Calcium ratio of Globigerinoides rub... PANGAEA 2019 None \n", - " 8 (Table 2) Age determination of sediment core M... PANGAEA 2011 None \n", - " 9 (Table S1) Stable carbon and oxygen isotope ra... PANGAEA 2011 None \n", - " 10 Carbonate measurements from a long-running sed... PANGAEA 2019 None \n", - " 11 Isotpes analysis of Globigerinoides ruber from... PANGAEA 2019 None \n", - " \n", - " Number Pages Type DOI \\\n", - " 0 None None dataset 10.1594/PANGAEA.830589 \n", - " 1 None None article 10.1029/2011PA002139 \n", - " 2 None None dataset 10.1594/PANGAEA.897517 \n", - " 3 None None article 10.1029/2018PA003417 \n", - " 4 None None dataset 10.1594/PANGAEA.830588 \n", - " 5 None None dataset 10.1594/PANGAEA.897512 \n", - " 6 None None dataset 10.1594/PANGAEA.897516 \n", - " 7 None None dataset 10.1594/PANGAEA.897514 \n", - " 8 None None dataset 10.1594/PANGAEA.830587 \n", - " 9 None None dataset 10.1594/PANGAEA.830586 \n", - " 10 None None dataset 10.1594/PANGAEA.897509 \n", - " 11 None None dataset 10.1594/PANGAEA.897513 \n", - " \n", - " URL \\\n", - " 0 https://doi.org/10.1594/PANGAEA.830589 \n", - " 1 None \n", - " 2 https://doi.org/10.1594/PANGAEA.897517 \n", - " 3 None \n", - " 4 https://doi.org/10.1594/PANGAEA.830588 \n", - " 5 https://doi.org/10.1594/PANGAEA.897512 \n", - " 6 https://doi.org/10.1594/PANGAEA.897516 \n", - " 7 https://doi.org/10.1594/PANGAEA.897514 \n", - " 8 https://doi.org/10.1594/PANGAEA.830587 \n", - " 9 https://doi.org/10.1594/PANGAEA.830586 \n", - " 10 https://doi.org/10.1594/PANGAEA.897509 \n", - " 11 https://doi.org/10.1594/PANGAEA.897513 \n", - " \n", - " CitationKey \n", - " 0 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... \n", - " 1 Khider, D et al. (2011): Assessing El Niño Sou... \n", - " 2 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 3 Richey, JN et al. (2019): Considerations for G... \n", - " 4 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... \n", - " 5 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 6 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 7 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 8 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... \n", - " 9 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... \n", - " 10 Richey, Julie N; Thirumalai, Kaustubh; Khider,... \n", - " 11 Richey, Julie N; Thirumalai, Kaustubh; Khider,... )" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "pubs = dataset.get_publications()\n", - "display(pubs)" - ] - }, - { - "cell_type": "markdown", - "id": "78e7e978", - "metadata": {}, - "source": [ - "Save the publications directly to bibtex. Follwoing saves the publications to a file named `pangaea-datasets.bib` in your workng directory. Alter the path to save to your desired location " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b053f5b6", - "metadata": {}, - "outputs": [], - "source": [ - "save = dataset.get_publications(save = True, path=\"./pnagaea-datasets.bib\")" - ] - }, - { - "cell_type": "markdown", - "id": "2bf2ead1", - "metadata": {}, - "source": [ - "### 3. Extract Data from studies" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "665a4353", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2026-03-24 12:53:26,636][WARNING] - The search contains dataset(s) [830589, 897517] marked as collection. Refer to the 'CollectionMembers' column toidentify respective child datasets.\n" - ] - }, - { - "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", - "
StudyIDStudyNameEarliestYearBPMostRecentYearBPEarliestYearCEMostRecentYearCEStudyNotesScienceKeywordsInvestigatorsPublicationsSitesFundingCollectionMembers
0830589Stable isotope record of sediment core MD98-2177NaNNaNNaNNaNWe present a reconstruction of El Niño Souther...[]Khider, D, Stott, Lowell D, Emile-Geay, J, Thu...Khider, D; Stott, Lowell D; Emile-Geay, J; Thu...[MD98-2177][][830586, 830587, 830588]
1897517Globigerinoides ruber sediment trap data in th...NaNNaNNaNNaNWe present results here from a high-resolution...[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[][][897509, 897512, 897513, 897514, 897515, 897516]
2830588(Table 3) Lead 214 and Lead 210 concentration ...NaNNaNNaNNaNNone[]Khider, D, Stott, Lowell D, Emile-Geay, J, Thu...Khider, D; Stott, Lowell D; Emile-Geay, J; Thu...[MD98-2177][]None
3897512Globigerinoides ruber flux analysis from a lon...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
4897516CTD data from a long-running sediment trap tim...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
5897514Magnesium/Calcium ratio of Globigerinoides rub...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
6830587(Table 2) Age determination of sediment core M...98.01950.00.01852.0None[]Khider, D, Stott, Lowell D, Emile-Geay, J, Thu...Khider, D; Stott, Lowell D; Emile-Geay, J; Thu...[MD98-2177][]None
7830586(Table S1) Stable carbon and oxygen isotope ra...1231.0103.0704.01851.0None[]Khider, D, Stott, Lowell D, Emile-Geay, J, Thu...Khider, D; Stott, Lowell D; Emile-Geay, J; Thu...[MD98-2177][]None
8897509Carbonate measurements from a long-running sed...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
9897513Isotpes analysis of Globigerinoides ruber from...NaNNaNNaNNaNNone[]Richey, Julie N, Thirumalai, Kaustubh, Khider,...Richey, Julie N; Thirumalai, Kaustubh; Khider,...[GMT_Gulf_of_Mexico][]None
\n", - "
" - ], - "text/plain": [ - " StudyID StudyName EarliestYearBP \\\n", - "0 830589 Stable isotope record of sediment core MD98-2177 NaN \n", - "1 897517 Globigerinoides ruber sediment trap data in th... NaN \n", - "2 830588 (Table 3) Lead 214 and Lead 210 concentration ... NaN \n", - "3 897512 Globigerinoides ruber flux analysis from a lon... NaN \n", - "4 897516 CTD data from a long-running sediment trap tim... NaN \n", - "5 897514 Magnesium/Calcium ratio of Globigerinoides rub... NaN \n", - "6 830587 (Table 2) Age determination of sediment core M... 98.0 \n", - "7 830586 (Table S1) Stable carbon and oxygen isotope ra... 1231.0 \n", - "8 897509 Carbonate measurements from a long-running sed... NaN \n", - "9 897513 Isotpes analysis of Globigerinoides ruber from... NaN \n", - "\n", - " MostRecentYearBP EarliestYearCE MostRecentYearCE \\\n", - "0 NaN NaN NaN \n", - "1 NaN NaN NaN \n", - "2 NaN NaN NaN \n", - "3 NaN NaN NaN \n", - "4 NaN NaN NaN \n", - "5 NaN NaN NaN \n", - "6 1950.0 0.0 1852.0 \n", - "7 103.0 704.0 1851.0 \n", - "8 NaN NaN NaN \n", - "9 NaN NaN NaN \n", - "\n", - " StudyNotes ScienceKeywords \\\n", - "0 We present a reconstruction of El Niño Souther... [] \n", - "1 We present results here from a high-resolution... [] \n", - "2 None [] \n", - "3 None [] \n", - "4 None [] \n", - "5 None [] \n", - "6 None [] \n", - "7 None [] \n", - "8 None [] \n", - "9 None [] \n", - "\n", - " Investigators \\\n", - "0 Khider, D, Stott, Lowell D, Emile-Geay, J, Thu... \n", - "1 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "2 Khider, D, Stott, Lowell D, Emile-Geay, J, Thu... \n", - "3 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "4 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "5 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "6 Khider, D, Stott, Lowell D, Emile-Geay, J, Thu... \n", - "7 Khider, D, Stott, Lowell D, Emile-Geay, J, Thu... \n", - "8 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "9 Richey, Julie N, Thirumalai, Kaustubh, Khider,... \n", - "\n", - " Publications Sites \\\n", - "0 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... [MD98-2177] \n", - "1 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [] \n", - "2 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... [MD98-2177] \n", - "3 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "4 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "5 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "6 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... [MD98-2177] \n", - "7 Khider, D; Stott, Lowell D; Emile-Geay, J; Thu... [MD98-2177] \n", - "8 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "9 Richey, Julie N; Thirumalai, Kaustubh; Khider,... [GMT_Gulf_of_Mexico] \n", - "\n", - " Funding CollectionMembers \n", - "0 [] [830586, 830587, 830588] \n", - "1 [] [897509, 897512, 897513, 897514, 897515, 897516] \n", - "2 [] None \n", - "3 [] None \n", - "4 [] None \n", - "5 [] None \n", - "6 [] None \n", - "7 [] None \n", - "8 [] None \n", - "9 [] None " - ] - }, - "execution_count": null, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dataset.get_summary()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4c00a283", - "metadata": {}, - "outputs": [], - "source": [ - "dfs = dataset.get_data([830586, 830587])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "baabaa90", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Depth sed Depth top Depth bot Age Age_2 Age_3 \\\n", - "0 0.005 0.0 0.01 1843 1851 0.103 \n", - "1 0.005 0.0 0.01 1843 1851 0.103 \n", - "2 0.005 0.0 0.01 1843 1851 0.103 \n", - "3 0.005 0.0 0.01 1843 1851 0.103 \n", - "4 0.005 0.0 0.01 1843 1851 0.103 \n", - "\n", - " P. obliquiloculata δ13C P. obliquiloculata δ18O Mass Event \\\n", - "0 0.936 -2.254 34 MD98-2177 \n", - "1 0.895 -2.356 37 MD98-2177 \n", - "2 0.514 -2.630 20 MD98-2177 \n", - "3 0.900 -2.480 25 MD98-2177 \n", - "4 0.957 -2.094 29 MD98-2177 \n", - "\n", - " Latitude Longitude Elevation Date/Time \n", - "0 1.4 119.08 -968.0 NaT \n", - "1 1.4 119.08 -968.0 NaT \n", - "2 1.4 119.08 -968.0 NaT \n", - "3 1.4 119.08 -968.0 NaT \n", - "4 1.4 119.08 -968.0 NaT \n", - " Depth sed Lab Lab label Age dated \\\n", - "0 0.00 Lawrence Livermore National Laboratory 95299 0.580 \n", - "1 0.12 University of California, Irvine OS-38302 0.395 \n", - "2 0.50 Lawrence Livermore National Laboratory 100234 1.110 \n", - "3 0.94 Lawrence Livermore National Laboratory 100235 1.745 \n", - "4 1.09 University of California, Irvine OS-38335 1.870 \n", - "\n", - " Age dated std dev Age Age e Comm Event Latitude Longitude \\\n", - "0 0.045 1852 51 NaN MD98-2177 1.4 119.08 \n", - "1 0.090 0 0 modern MD98-2177 1.4 119.08 \n", - "2 0.060 1350 70 NaN MD98-2177 1.4 119.08 \n", - "3 0.045 730 82 NaN MD98-2177 1.4 119.08 \n", - "4 0.110 584 136 NaN MD98-2177 1.4 119.08 \n", - "\n", - " Elevation Date/Time \n", - "0 -968.0 NaT \n", - "1 -968.0 NaT \n", - "2 -968.0 NaT \n", - "3 -968.0 NaT \n", - "4 -968.0 NaT \n" - ] - } - ], - "source": [ - "for df in dfs:\n", - " print(df.head())" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv (3.12.3)", - "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.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/paper.bib b/paper.bib new file mode 100644 index 00000000..f1c819db --- /dev/null +++ b/paper.bib @@ -0,0 +1,55 @@ +@software{pyleotups_tutorials, +author = {Khider, Deborah}, +doi = {10.5281/zenodo.16923278}, +month = aug, +title = {{PyleoTUPSTutorials: Using PyleoTUPS in your scientific workflows}}, +url = {https://github.com/LinkedEarth/pyleotupsTutorials}, +version = {v2025.08.21}, +year = {2025} +} + +@article{Morrill2021, + title = {The Paleoenvironmental Standard Terms (PaST) Thesaurus: Standardizing Heterogeneous Variables in Paleoscience}, + volume = {36}, + ISSN = {2572-4525}, + url = {http://dx.doi.org/10.1029/2020PA004193}, + DOI = {10.1029/2020pa004193}, + number = {6}, + journal = {Paleoceanography and Paleoclimatology}, + publisher = {American Geophysical Union (AGU)}, + author = {Morrill, Carrie and Thrasher, Bridget and Lockshin, Samuel N. and Gille, Edward P. and McNeill, Shelley and Shepherd, Ethan and Gross, Wendy S. and Bauer, Bruce A.}, + year = {2021}, + month = June +} + +@software{pangaeapy, + doi = {10.5281/ZENODO.4013940}, + url = {https://zenodo.org/doi/10.5281/zenodo.4013940}, + author = {Robert Huber, and Johannes R\"{o}ttenbacher, and Niklas Selke, and CodeShredder, and Florian Spreckelen, and Aarthi Balamurugan, and Scott Lowe, and Markus Stocker, and Dominic Kempf, and Iris-Hinrichs, and Uwe Schindler, and qays abou housien, }, + title = {pangaea-data-publisher/pangaeapy: v1.1.0}, + publisher = {Zenodo}, + year = {2025}, + copyright = {GNU General Public License v3.0 only} +} + +@article{Khider2022, + author = {Khider, Deborah and Emile-Geay, Julien and Zhu, Feng and James, Alexander and Landers, Jessica and Ratnakar, Varun and Gil, Yolanda}, + title = {Pyleoclim: Paleoclimate Timeseries Analysis and Visualization with Python}, + journal = {Paleoceanography and Paleoclimatology}, + volume = {37}, + number = {10}, + pages = {e2022PA004509}, + year = {2022}, + doi = {10.1029/2022PA004509} +} + +@article{Zhu2024, + author = {Zhu, Feng and Emile-Geay, Julien and Hakim, Gregory J. and Guillot, Dominique and Khider, Deborah and Tardif, Robert and Perkins, Walter A.}, + title = {cfr (v2024.1.26): a Python package for climate field reconstruction}, + journal = {Geoscientific Model Development}, + volume = {17}, + number = {8}, + pages = {3409--3431}, + year = {2024}, + doi = {10.5194/gmd-17-3409-2024} +} \ No newline at end of file diff --git a/paper.md b/paper.md new file mode 100644 index 00000000..791a97e2 --- /dev/null +++ b/paper.md @@ -0,0 +1,83 @@ +--- +title: 'PyleoTUPS: Automated Paleoclimate Data Extraction and Processing' +tags: + - Python + - paleoclimatology + - data handling +authors: + - name: Dhiren Oswal + orcid: 0009-0001-2495-2626 + affiliation: "1, 2" # (Multiple affiliations must be quoted) + - name: Deborah Khider + corresponding: true + orcid: 0000-0001-7501-8430 + affiliation: 1 + - name: Jay Pujara + orcid: 0000-0001-6921-1744 + affiliation: "1, 2" + - name: Nicholas McKay + orcid: 0000-0003-3598-5113 + affiliation: 3 + - name: David Edge + orcid: 0000-0001-6938-2850 + affiliation: 3 +affiliations: + - name: Information Sciences Institute, University of Southern California + index: 1 + - name: Department of Computer Science, University of Southern California + index: 2 + - name: School of Earth and Sustainability, Northern Arizona University + index: 3 +date: 23 June 2026 +bibliography: paper.bib + +--- + +# Summary + +`PyleoTUPS` is a Python package designed to support the discovery, retrieval, and inspection of paleoclimate data archived in the US National Oceanic and Atmospheric Administration (NOAA) National Centers for Environmental Information (NCEI) for Paleoclimatology and PANGAEA. These repositories are the two main archives used by the paleoclimate community, but they differ in their search interfaces, metadata models, and data organization. `PyleoTUPS` provides repository-specific dataset objects, `NOAADataset` and `PangaeaDataset`, that expose a common set of methods for searching records, retrieving dataset-level metadata, and loading associated data tables. Results are returned as `pandas.DataFrame` objects that can be inspected, documented, and passed to downstream paleoclimate workflows. By harmonizing access patterns while preserving scientifically meaningful repository-specific metadata, `PyleoTUPS` supports reproducible cross-repository data discovery for paleoclimate synthesis, data-model comparison, climate field reconstruction, and related research applications. + +# Statement of need + +NOAA NCEI for Paleoclimatology and PANGAEA are the two main repositories used worldwide by the paleoclimate community to archive and access data. NOAA NCEI for Paleoclimatology is dedicated to paleoclimate data, whereas PANGAEA is a broader data repository that includes many Earth and environmental science datasets. Some datasets routinely used in paleoclimate studies are archived in both repositories, while others are available in only one. As a result, researchers often need to search and retrieve data from both repositories, particularly for synthesis efforts that compile hundreds of records across regions, archive types, proxy systems, or time intervals. + +Accessing data across these repositories is not only a technical issue, but also a scientific reproducibility challenge. Paleoclimate scientists routinely need existing records to compare with new observations, build regional or global syntheses, generate climate field reconstructions, or address scientific questions that require compilations of many records, such as changes in climate variability or tipping points in the climate system. Differences in repository search interfaces, metadata models, and returned search results can therefore affect which records are identified, how complete a compilation is, and whether the search and retrieval process can be transparently documented and reproduced. + +These differences are particularly important because NOAA NCEI for Paleoclimatology and PANGAEA expose paleoclimate-relevant information in different ways. NOAA NCEI for Paleoclimatology includes paleoclimate-oriented metadata, including information supported by the NOAA NOAA Paleoenvironmental Standard Terms (PaST) Thesaurus [@Morrill2021], which enables more precise searches for variables and related metadata. PANGAEA, by contrast, is a general-purpose Earth and environmental science repository, so some paleoclimate-relevant concepts are not always represented in directly searchable form. For example, time information exposed through repository search may not correspond to the paleoclimate time range needed to determine whether a record is relevant to a particular study. In such cases, researchers may need to retrieve and inspect the associated data tables before evaluating the record. + +PyleoTUPS fills the gap between repository-level data discovery and analysis-ready paleoclimate workflows by providing consistent Python access to NOAA NCEI for Paleoclimatology and PANGAEA while preserving scientifically meaningful differences in their metadata models. The package harmonizes common access patterns, including search parameters and functions for retrieving publications, geographic metadata, data tables, and variable-level metadata. At the same time, it avoids forcing repository outputs into a single semantic model when doing so could obscure important archival or scientific context. The returned information is organized as pandas.DataFrame objects, making it easier to inspect, filter, document, and pass to downstream analysis workflows. + + +# Implementation + +`PyleoTUPS` is built on top of the NOAA NCEI for Paleoclimatology API, whose documentation is available on [their website](https://www.ncei.noaa.gov/access/paleo-search/api) [@Morrill2021], and the Python `pangaeapy` library [@pangaeapy], which supports retrieving data and metadata from PANGAEA. + +The package currently provides two primary dataset interfaces: `NOAADataset` and `PangaeaDataset`. These objects encapsulate repository-specific access methods while exposing a common set of user-facing functions. Through these interfaces, users can perform search queries, retrieve metadata, including associated publications, geographic information, variable-level descriptions, and temporal coverage, and load tabular data into Python data structures suitable for further analysis. + +For NOAA NCEI for Paleoclimatology records, `PyleoTUPS` combines API-based discovery with table parsing. Search queries are submitted through the NOAA API, which returns study-level metadata in JSON format. `PyleoTUPS` uses the returned metadata to identify the associated paleoclimate data tables, then parses those tables into `pandas.DataFrame` objects. For PANGAEA records, `PyleoTUPS` builds on `pangaeapy` [@pangaeapy] while providing a more consistent, paleoclimate-oriented Python interface for constructing search queries. This interface abstracts over repository-specific search fields and parameters, allowing users to specify search terms programmatically and retrieve matching records through a workflow and parameter structure similar to those used for NOAA records. + +Both dataset objects provide a `get_summary` method that retrieves and flattens dataset-level metadata commonly needed in paleoclimate workflows. These summaries include information such as geographic location, publication metadata, variable descriptions, and temporal coverage. Because NOAA NCEI for Paleoclimatology and PANGAEA represent these fields differently, `PyleoTUPS` retrieves them through repository-specific logic. For example, temporal coverage is available directly from NOAA metadata, whereas for PANGAEA records it must be inferred from the associated data tables. + +Because NOAA NCEI for Paleoclimatology and PANGAEA differ in their metadata models, search interfaces, and data organization, `PyleoTUPS` intentionally avoids fully homogenizing their outputs. Instead, the package provides a common set of user-facing methods, including `get_publications`, `get_geo`, `get_data`, and `get_summary`, while preserving repository-specific structures when those differences carry scientific or archival meaning. The accompanying tutorials [@pyleotups_tutorials] document these schema differences and demonstrate how to build repository-aware workflows. + +# Research Applications + +In addition to the minimal working examples in the documentation, more comprehensive tutorials [@pyleotups_tutorials] are available as a [Jupyter Book](https://linked.earth/pyleotupsTutorials/). These tutorials explain the schema differences between the NOAA NCEI for Paleoclimatology and PANGAEA databases, introduce the `NOAADataset` and `PangaeaDataset` objects and their functionalities, illustrate how to perform search queries on these databases, and provide scientific use cases of the toolbox. The scientific use cases were identified by the community. We anticipate a growing number of these use cases as the toolbox becomes more widely adopted. + +`PyleoTUPS` can be used in several common paleoclimate research workflows. For data discovery, users can query public repositories and inspect returned metadata. For synthesis studies, the package can help researchers retrieve comparable records across regions, archives, or proxy systems. For reproducible publications, `PyleoTUPS` can be embedded in notebooks that document how datasets were discovered, filtered, and loaded. The package returns information as pandas.DataFrame objects, making it interoperable with the broader scientific Python ecosystem, including paleoclimate analysis packages such as Pyleoclim [@Khider2022] and cfr [@Zhu2024]. + +# Availability + +`PyleoTUPS` is an open-source software released under the Apache 2.0 license and is actively maintained as part of the LinkedEarth project. It is available through [PyPi](https://pypi.org/project/pyleotups/) and [GitHub](https://github.com/LinkedEarth/PyleoTUPS). Documentation is available through [readthedocs](https://pyleotups.readthedocs.io/en/latest/). + +# AI usage disclosure + +AI code completion was used to help generate API documentation and write unit tests. Generative AI tools, including Claude and ChatGPT, were used to help draft the manuscript and tighten the prose in the tutorials. All tutorial code was written manually by the authors to test and demonstrate scientific use of the package. + + +# Acknowledgements + +The authors were supported by NSF Award #2411267 and #2411268. We thank Dr Georgina Falster at The University of Adelaide for testing the alpha version of this software and providing feedback on the early implementation. + + +# References \ No newline at end of file From 924346a5da5313426602814cccb27b0795cb4491 Mon Sep 17 00:00:00 2001 From: khider <11758571+khider@users.noreply.github.com> Date: Tue, 23 Jun 2026 17:58:20 -0700 Subject: [PATCH 2/3] with JOSS required sections --- paper.bib | 40 ++++++++++++++++++++++++++++++++++++++++ paper.md | 40 ++++++++++++++++++++++++---------------- 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/paper.bib b/paper.bib index f1c819db..a2dbc7c7 100644 --- a/paper.bib +++ b/paper.bib @@ -52,4 +52,44 @@ @article{Zhu2024 pages = {3409--3431}, year = {2024}, doi = {10.5194/gmd-17-3409-2024} +} + +@article{McKay2016, + title = {Technical note: The Linked Paleo Data framework – a common tongue for paleoclimatology}, + volume = {12}, + ISSN = {1814-9332}, + url = {http://dx.doi.org/10.5194/cp-12-1093-2016}, + DOI = {10.5194/cp-12-1093-2016}, + number = {4}, + journal = {Climate of the Past}, + publisher = {Copernicus GmbH}, + author = {McKay, Nicholas P. and Emile-Geay, Julien}, + year = {2016}, + month = Apr, + pages = {1093–1100} +} + +@article{Ratnakar2025, + title = {PyLiPD: A python package for the manipulation of paleoclimate datasets}, + volume = {10}, + ISSN = {2475-9066}, + url = {http://dx.doi.org/10.21105/joss.08861}, + DOI = {10.21105/joss.08861}, + number = {115}, + journal = {Journal of Open Source Software}, + publisher = {The Open Journal}, + author = {Ratnakar, Varun and Khider, Deborah}, + year = {2025}, + month = Nov, + pages = {8861} +} + +@article{PAGES2k2017, + author = {{PAGES2k Consortium}}, + title = {A global multiproxy database for temperature reconstructions of the Common Era}, + journal = {Scientific Data}, + volume = {4}, + pages = {170088}, + year = {2017}, + doi = {10.1038/sdata.2017.88} } \ No newline at end of file diff --git a/paper.md b/paper.md index 791a97e2..fcb496cd 100644 --- a/paper.md +++ b/paper.md @@ -35,40 +35,48 @@ bibliography: paper.bib # Summary -`PyleoTUPS` is a Python package designed to support the discovery, retrieval, and inspection of paleoclimate data archived in the US National Oceanic and Atmospheric Administration (NOAA) National Centers for Environmental Information (NCEI) for Paleoclimatology and PANGAEA. These repositories are the two main archives used by the paleoclimate community, but they differ in their search interfaces, metadata models, and data organization. `PyleoTUPS` provides repository-specific dataset objects, `NOAADataset` and `PangaeaDataset`, that expose a common set of methods for searching records, retrieving dataset-level metadata, and loading associated data tables. Results are returned as `pandas.DataFrame` objects that can be inspected, documented, and passed to downstream paleoclimate workflows. By harmonizing access patterns while preserving scientifically meaningful repository-specific metadata, `PyleoTUPS` supports reproducible cross-repository data discovery for paleoclimate synthesis, data-model comparison, climate field reconstruction, and related research applications. +# Summary + +Paleoclimate researchers use measurements from natural archives, such as tree rings, corals, ice cores, and lake or marine sediments, to study how Earth’s climate varied before the instrumental period. Many of these datasets are archived in the US National Oceanic and Atmospheric Administration (NOAA) National Centers for Environmental Information (NCEI) for Paleoclimatology and PANGAEA, the two main repositories used worldwide by the paleoclimate community. These repositories are essential resources, but they differ in their search interfaces, metadata models, and data organization. + +`PyleoTUPS` is a Python package designed to support the discovery, retrieval, and inspection of paleoclimate data across these repositories. The package provides repository-specific dataset objects, `NOAADataset` and `PangaeaDataset`, that expose a common set of methods for searching records, retrieving dataset-level metadata, and loading associated data tables. Results are returned as `pandas.DataFrame` objects that can be inspected, documented, and passed to downstream paleoclimate workflows. By harmonizing access patterns while preserving scientifically meaningful repository-specific metadata, `PyleoTUPS` supports reproducible cross-repository data discovery for paleoclimate synthesis, data-model comparison, climate field reconstruction, and related research applications. # Statement of need -NOAA NCEI for Paleoclimatology and PANGAEA are the two main repositories used worldwide by the paleoclimate community to archive and access data. NOAA NCEI for Paleoclimatology is dedicated to paleoclimate data, whereas PANGAEA is a broader data repository that includes many Earth and environmental science datasets. Some datasets routinely used in paleoclimate studies are archived in both repositories, while others are available in only one. As a result, researchers often need to search and retrieve data from both repositories, particularly for synthesis efforts that compile hundreds of records across regions, archive types, proxy systems, or time intervals. +# Statement of need + +NOAA NCEI for Paleoclimatology and PANGAEA are the two main repositories used worldwide by the paleoclimate community to archive and access data. NOAA NCEI for Paleoclimatology is dedicated to paleoclimate data, whereas PANGAEA is a broader Earth and environmental science repository. Because datasets routinely used in paleoclimate research may be archived in either or both repositories, researchers often need to search across both systems, particularly for synthesis efforts that compile hundreds of records across regions, archive types, proxy systems, or time intervals. + +This cross-repository access problem affects more than software convenience. Paleoclimate scientists use existing records to compare with new observations, build syntheses, generate climate field reconstructions, and address questions that require large compilations, such as changes in climate variability or tipping points in the climate system. Differences in repository search interfaces, metadata models, and returned search results can affect which records are identified, how complete a compilation is, and whether the search process can be transparently documented and reproduced. -Accessing data across these repositories is not only a technical issue, but also a scientific reproducibility challenge. Paleoclimate scientists routinely need existing records to compare with new observations, build regional or global syntheses, generate climate field reconstructions, or address scientific questions that require compilations of many records, such as changes in climate variability or tipping points in the climate system. Differences in repository search interfaces, metadata models, and returned search results can therefore affect which records are identified, how complete a compilation is, and whether the search and retrieval process can be transparently documented and reproduced. +`PyleoTUPS` fills the gap between repository-level discovery and analysis-ready paleoclimate workflows by providing consistent Python access to NOAA NCEI for Paleoclimatology and PANGAEA. The package harmonizes common access patterns, including search parameters and functions for retrieving publications, geographic metadata, data tables, and variable-level metadata, while preserving repository-specific information when scientific meaning would be lost through full homogenization. Results are returned as `pandas.DataFrame` objects that can be inspected, filtered, documented, and passed to downstream analysis workflows. -These differences are particularly important because NOAA NCEI for Paleoclimatology and PANGAEA expose paleoclimate-relevant information in different ways. NOAA NCEI for Paleoclimatology includes paleoclimate-oriented metadata, including information supported by the NOAA NOAA Paleoenvironmental Standard Terms (PaST) Thesaurus [@Morrill2021], which enables more precise searches for variables and related metadata. PANGAEA, by contrast, is a general-purpose Earth and environmental science repository, so some paleoclimate-relevant concepts are not always represented in directly searchable form. For example, time information exposed through repository search may not correspond to the paleoclimate time range needed to determine whether a record is relevant to a particular study. In such cases, researchers may need to retrieve and inspect the associated data tables before evaluating the record. +# State of the field -PyleoTUPS fills the gap between repository-level data discovery and analysis-ready paleoclimate workflows by providing consistent Python access to NOAA NCEI for Paleoclimatology and PANGAEA while preserving scientifically meaningful differences in their metadata models. The package harmonizes common access patterns, including search parameters and functions for retrieving publications, geographic metadata, data tables, and variable-level metadata. At the same time, it avoids forcing repository outputs into a single semantic model when doing so could obscure important archival or scientific context. The returned information is organized as pandas.DataFrame objects, making it easier to inspect, filter, document, and pass to downstream analysis workflows. +Researchers can currently access NOAA NCEI for Paleoclimatology through its web interface and API [@Morrill2021], and PANGAEA through its web interface and tools such as `pangaeapy` [@pangaeapy]. These resources provide authoritative access to repository holdings, but they are repository-specific and expose different search parameters, metadata structures, and data-return formats. As a result, researchers who need records from both repositories often rely on custom scripts to discover records, retrieve metadata, and load associated data tables. These scripts address the first step in many paleoclimate workflows: finding and extracting relevant records from public archives. +Once records have been identified and retrieved, they may need to be curated into a standardized representation before they can be reused in synthesis or analysis workflows. The Linked Paleo Data format (LiPD) [@McKay2016] and `PyLiPD` [@Ratnakar2025] address this later step. LiPD provides an intermediate archival format in which paleoclimate data and metadata can be normalized, aligned with controlled vocabularies, and represented consistently across datasets. `PyLiPD` provides Python tools for reading, querying, editing, and writing datasets once they have been encoded in this format. `PyleoTUPS` operates upstream of this standardization step by helping researchers discover and retrieve records from NOAA NCEI for Paleoclimatology and PANGAEA before manual curation or transformation into LiPD. -# Implementation +Other packages, such as `Pyleoclim` [@Khider2022] and `cfr` [@Zhu2024], support downstream paleoclimate analysis, including time-series analysis and climate field reconstruction. These tools require data that have already been discovered, retrieved, and organized into analysis-ready structures. `PyleoTUPS` complements them by providing the repository discovery and retrieval layer needed to build those inputs reproducibly. -`PyleoTUPS` is built on top of the NOAA NCEI for Paleoclimatology API, whose documentation is available on [their website](https://www.ncei.noaa.gov/access/paleo-search/api) [@Morrill2021], and the Python `pangaeapy` library [@pangaeapy], which supports retrieving data and metadata from PANGAEA. +The decision to build `PyleoTUPS` rather than contribute only to `pangaeapy`, `PyLiPD`, or a NOAA-specific wrapper reflects this gap in the current software ecosystem. Existing tools support repository-specific access, standardized archival representation, or downstream analysis. `PyleoTUPS` provides a paleoclimate-oriented access layer that exposes similar search and retrieval patterns across the two main repositories while preserving scientifically meaningful differences in their metadata models. -The package currently provides two primary dataset interfaces: `NOAADataset` and `PangaeaDataset`. These objects encapsulate repository-specific access methods while exposing a common set of user-facing functions. Through these interfaces, users can perform search queries, retrieve metadata, including associated publications, geographic information, variable-level descriptions, and temporal coverage, and load tabular data into Python data structures suitable for further analysis. -For NOAA NCEI for Paleoclimatology records, `PyleoTUPS` combines API-based discovery with table parsing. Search queries are submitted through the NOAA API, which returns study-level metadata in JSON format. `PyleoTUPS` uses the returned metadata to identify the associated paleoclimate data tables, then parses those tables into `pandas.DataFrame` objects. For PANGAEA records, `PyleoTUPS` builds on `pangaeapy` [@pangaeapy] while providing a more consistent, paleoclimate-oriented Python interface for constructing search queries. This interface abstracts over repository-specific search fields and parameters, allowing users to specify search terms programmatically and retrieve matching records through a workflow and parameter structure similar to those used for NOAA records. +# Software design -Both dataset objects provide a `get_summary` method that retrieves and flattens dataset-level metadata commonly needed in paleoclimate workflows. These summaries include information such as geographic location, publication metadata, variable descriptions, and temporal coverage. Because NOAA NCEI for Paleoclimatology and PANGAEA represent these fields differently, `PyleoTUPS` retrieves them through repository-specific logic. For example, temporal coverage is available directly from NOAA metadata, whereas for PANGAEA records it must be inferred from the associated data tables. +`PyleoTUPS` is built on top of the NOAA NCEI for Paleoclimatology API [@Morrill2021] and the Python `pangaeapy` library [@pangaeapy]. The package provides two primary dataset interfaces, `NOAADataset` and `PangaeaDataset`, that encapsulate repository-specific access methods while exposing a common set of user-facing functions. This two-object design reflects an explicit trade-off: `PyleoTUPS` harmonizes search and retrieval workflows where possible, but avoids forcing NOAA NCEI for Paleoclimatology and PANGAEA records into a single semantic model when doing so could obscure scientifically meaningful metadata differences. -Because NOAA NCEI for Paleoclimatology and PANGAEA differ in their metadata models, search interfaces, and data organization, `PyleoTUPS` intentionally avoids fully homogenizing their outputs. Instead, the package provides a common set of user-facing methods, including `get_publications`, `get_geo`, `get_data`, and `get_summary`, while preserving repository-specific structures when those differences carry scientific or archival meaning. The accompanying tutorials [@pyleotups_tutorials] document these schema differences and demonstrate how to build repository-aware workflows. +For NOAA records, search queries are submitted through the NOAA API, which returns study-level metadata in JSON format. `PyleoTUPS` uses these metadata to identify associated paleoclimate data tables, then parses the tables into `pandas.DataFrame` objects. For PANGAEA records, `PyleoTUPS` builds on `pangaeapy` while providing a paleoclimate-oriented Python interface for constructing search queries and retrieving matching records through a workflow similar to the NOAA interface. -# Research Applications +Both dataset objects provide common methods, including `get_publications`, `get_geo`, `get_data`, and `get_summary`. The `get_summary` method retrieves and flattens dataset-level metadata commonly needed in paleoclimate workflows, including geographic information, publication metadata, variable descriptions, and temporal coverage. Because these fields are represented differently across repositories, the implementation uses repository-specific logic. For example, temporal coverage is available directly from NOAA metadata, whereas for PANGAEA records it must be inferred from the associated data tables. Outputs are returned as `pandas.DataFrame` objects, preserving repository-specific columns while supporting inspection, filtering, documentation, and interoperability with downstream Python workflows. -In addition to the minimal working examples in the documentation, more comprehensive tutorials [@pyleotups_tutorials] are available as a [Jupyter Book](https://linked.earth/pyleotupsTutorials/). These tutorials explain the schema differences between the NOAA NCEI for Paleoclimatology and PANGAEA databases, introduce the `NOAADataset` and `PangaeaDataset` objects and their functionalities, illustrate how to perform search queries on these databases, and provide scientific use cases of the toolbox. The scientific use cases were identified by the community. We anticipate a growing number of these use cases as the toolbox becomes more widely adopted. +# Research impact statement -`PyleoTUPS` can be used in several common paleoclimate research workflows. For data discovery, users can query public repositories and inspect returned metadata. For synthesis studies, the package can help researchers retrieve comparable records across regions, archives, or proxy systems. For reproducible publications, `PyleoTUPS` can be embedded in notebooks that document how datasets were discovered, filtered, and loaded. The package returns information as pandas.DataFrame objects, making it interoperable with the broader scientific Python ecosystem, including paleoclimate analysis packages such as Pyleoclim [@Khider2022] and cfr [@Zhu2024]. +`PyleoTUPS` is released through [PyPI](https://pypi.org/project/pyleotups/) and [GitHub](https://github.com/LinkedEarth/PyleoTUPS) and is accompanied by [public documentation](https://pyleotups.readthedocs.io/en/latest/) and a tutorial Jupyter Book [@pyleotups_tutorials]. The tutorials include introductory material, examples for working with `NOAADataset` and `PangaeaDataset` objects, and scientific workflows that demonstrate how repository data can be retrieved, inspected, and used in paleoclimate analyses. The package has been downloaded approximately 1.4k times from PyPI and is under active development, with issue-driven testing and refinement on GitHub. -# Availability +Although `PyleoTUPS` is a new package, it is already being tested in an active paleoclimate data-compilation workflow. An undergraduate researcher with no prior experience in Python or paleoclimate science is using the package to help retrieve and transform repository data into LiPD format for an update to the PAGES2k compilation [@PAGES2k2017]. This ongoing use case suggests that `PyleoTUPS` can lower the technical barrier to cross-repository data access and support workflows that feed into community-scale paleoclimate products. -`PyleoTUPS` is an open-source software released under the Apache 2.0 license and is actively maintained as part of the LinkedEarth project. It is available through [PyPi](https://pypi.org/project/pyleotups/) and [GitHub](https://github.com/LinkedEarth/PyleoTUPS). Documentation is available through [readthedocs](https://pyleotups.readthedocs.io/en/latest/). +`PyleoTUPS` is also designed to connect repository discovery with downstream scientific software. The tutorials demonstrate interoperability with `Pyleoclim` [@Khider2022], and the same `pandas.DataFrame`-based outputs can support workflows using packages such as `cfr` [@Zhu2024]. The package is being integrated into PaleoPAL, an AI-assisted paleoclimate workflow system, where it will provide repository-level access to paleoclimate data for automated and reproducible analyses. # AI usage disclosure From 6eceed2e50957fbfbcd5ff78500e01a725db4703 Mon Sep 17 00:00:00 2001 From: khider <11758571+khider@users.noreply.github.com> Date: Tue, 23 Jun 2026 17:58:36 -0700 Subject: [PATCH 3/3] Update paper.md --- paper.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/paper.md b/paper.md index fcb496cd..813402b0 100644 --- a/paper.md +++ b/paper.md @@ -35,16 +35,12 @@ bibliography: paper.bib # Summary -# Summary - -Paleoclimate researchers use measurements from natural archives, such as tree rings, corals, ice cores, and lake or marine sediments, to study how Earth’s climate varied before the instrumental period. Many of these datasets are archived in the US National Oceanic and Atmospheric Administration (NOAA) National Centers for Environmental Information (NCEI) for Paleoclimatology and PANGAEA, the two main repositories used worldwide by the paleoclimate community. These repositories are essential resources, but they differ in their search interfaces, metadata models, and data organization. +Paleoclimate researchers use measurements from natural archives, such as tree rings, corals, ice cores, and lake or marine sediments, to study how Earth’s climate varied before the instrumental period. Many of these datasets are archived in the U.S. National Oceanic and Atmospheric Administration (NOAA) National Centers for Environmental Information (NCEI) for Paleoclimatology and PANGAEA, the two main repositories used worldwide by the paleoclimate community. These repositories are essential resources, but they differ in their search interfaces, metadata models, and data organization. `PyleoTUPS` is a Python package designed to support the discovery, retrieval, and inspection of paleoclimate data across these repositories. The package provides repository-specific dataset objects, `NOAADataset` and `PangaeaDataset`, that expose a common set of methods for searching records, retrieving dataset-level metadata, and loading associated data tables. Results are returned as `pandas.DataFrame` objects that can be inspected, documented, and passed to downstream paleoclimate workflows. By harmonizing access patterns while preserving scientifically meaningful repository-specific metadata, `PyleoTUPS` supports reproducible cross-repository data discovery for paleoclimate synthesis, data-model comparison, climate field reconstruction, and related research applications. # Statement of need -# Statement of need - NOAA NCEI for Paleoclimatology and PANGAEA are the two main repositories used worldwide by the paleoclimate community to archive and access data. NOAA NCEI for Paleoclimatology is dedicated to paleoclimate data, whereas PANGAEA is a broader Earth and environmental science repository. Because datasets routinely used in paleoclimate research may be archived in either or both repositories, researchers often need to search across both systems, particularly for synthesis efforts that compile hundreds of records across regions, archive types, proxy systems, or time intervals. This cross-repository access problem affects more than software convenience. Paleoclimate scientists use existing records to compare with new observations, build syntheses, generate climate field reconstructions, and address questions that require large compilations, such as changes in climate variability or tipping points in the climate system. Differences in repository search interfaces, metadata models, and returned search results can affect which records are identified, how complete a compilation is, and whether the search process can be transparently documented and reproduced. @@ -76,7 +72,7 @@ Both dataset objects provide common methods, including `get_publications`, `get_ Although `PyleoTUPS` is a new package, it is already being tested in an active paleoclimate data-compilation workflow. An undergraduate researcher with no prior experience in Python or paleoclimate science is using the package to help retrieve and transform repository data into LiPD format for an update to the PAGES2k compilation [@PAGES2k2017]. This ongoing use case suggests that `PyleoTUPS` can lower the technical barrier to cross-repository data access and support workflows that feed into community-scale paleoclimate products. -`PyleoTUPS` is also designed to connect repository discovery with downstream scientific software. The tutorials demonstrate interoperability with `Pyleoclim` [@Khider2022], and the same `pandas.DataFrame`-based outputs can support workflows using packages such as `cfr` [@Zhu2024]. The package is being integrated into PaleoPAL, an AI-assisted paleoclimate workflow system, where it will provide repository-level access to paleoclimate data for automated and reproducible analyses. +`PyleoTUPS` is also designed to connect repository discovery with downstream scientific software. The tutorials demonstrate interoperability with `Pyleoclim` [@Khider2022], and the same `pandas.DataFrame`-based outputs can support workflows using packages such as `cfr` [@Zhu2024]. # AI usage disclosure