diff --git a/data/datasets/aemet-cap-warnings.yaml b/data/datasets/aemet-cap-warnings.yaml new file mode 100644 index 0000000..8b1ceac --- /dev/null +++ b/data/datasets/aemet-cap-warnings.yaml @@ -0,0 +1,76 @@ +id: aemet-cap-warnings +name: AEMET Spain CAP Warnings +description: > + Official Spanish adverse-weather CAP warning Atom feed from AEMET for + inspecting alert IDs, updates, and affected regions. +theme: Environment & Hazards +url: https://www.aemet.es/es/rss_info/avisos/esp +access_type: + - api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - Atom + - CAP +license: AEMET public information may be reused commercially or noncommercially with attribution and integrity conditions. +license_url: https://www.aemet.es/es/nota_legal +url_checks: + source_marker: CAP_AFAE_ATOM.xml + license_marker: fines comerciales y no comerciales +domains: + - Weather + - Emergency Management +data_types: + - Event Data + - Geospatial +tasks: + - Monitoring + - Alerting +difficulty: intermediate +geography: + - Spain +temporal_coverage: current adverse-weather alerts +update_frequency: near real time +provider: Agencia Estatal de Meteorología +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + AEMET publishes adverse-weather warnings through an Atom index with CAP + details. Start with five current Atom entries, preserving IDs and update + times. The legal notice requires source attribution and forbids distorting + technical meaning; verify official area and validity before display. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read AEMET's CAP feed page and legal reuse conditions. + - Fetch the national Atom index and inspect at most five entries. + - Use linked CAP details for severity, affected area, and expiry. + python: + packages: + - requests + code: | + import xml.etree.ElementTree as ET + import requests + + response = requests.get( + "https://www.aemet.es/documentos_d/eltiempo/prediccion/avisos/rss/" + "CAP_AFAE_ATOM.xml", timeout=30, + ) + response.raise_for_status() + root = ET.fromstring(response.content) + atom = "{http://www.w3.org/2005/Atom}" + print(root.findtext(f"{atom}updated")) + for entry in root.findall(f"{atom}entry")[:5]: + print(entry.findtext(f"{atom}id"), entry.findtext(f"{atom}title")) + first_project: + title: Inspect Spanish CAP Publications + goal: Test the official warning index for a bounded Spanish alert card. + steps: + - Keep AEMET IDs, update timestamps, and CAP detail links. + - Check whether each CAP message is current and applies to the intended area. + - Explain why Atom publication alone cannot establish local warning coverage. diff --git a/data/datasets/arc-appalachian-counties.yaml b/data/datasets/arc-appalachian-counties.yaml new file mode 100644 index 0000000..0145d6d --- /dev/null +++ b/data/datasets/arc-appalachian-counties.yaml @@ -0,0 +1,61 @@ +id: arc-appalachian-counties +name: ARC Appalachian Counties +description: > + The Appalachian Regional Commission's maintained county membership list for building regional comparison and eligibility tools. +theme: Demographics & Development +url: https://www.arc.gov/appalachian-counties-served-by-arc/ +access_type: [download] +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.001 +formats: [HTML, XLSX] +license: ARC-produced material is public domain; cite ARC and check linked third-party materials separately. +license_url: https://www.arc.gov/arc-web-and-privacy-policy/ +url_checks: + source_marker: Appalachian Counties Served by ARC + license_marker: Material provided on this website and produced by ARC is not copyrighted +domains: [Demographics] +data_types: [Tabular] +tasks: [Community Comparison] +difficulty: beginner +geography: [United States counties] +temporal_coverage: current ARC county membership; check the fiscal-year caveats +update_frequency: annual +provider: Appalachian Regional Commission +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + ARC maintains a public county list and notes fiscal-year exceptions, including Schoharie County for FY 2026. + Start with Alabama's 37 named counties. Names alone do not give a county FIPS code or prove grant eligibility. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Read the official county list and its fiscal-year notes. + - Fetch the Alabama row from the ARC-maintained page. + - Join to an authoritative FIPS table before a county-level analysis. + python: + packages: [requests] + code: | + import html + import re + import requests + + url = "https://www.arc.gov/appalachian-counties-served-by-arc/" + response = requests.get(url, timeout=20) + response.raise_for_status() + match = re.search( + r'Alabama.*?(.*?)
', + response.text, re.S, + ) + if not match: + raise ValueError("ARC Alabama county list not found") + names = html.unescape(re.sub(r"<[^>]+>", "", match.group(1))).strip() + print(names[:160]) + first_project: + title: Compare ARC County Membership + goal: Show which sampled counties are within the ARC region while retaining the fiscal-year caveat. + steps: + - Extract county names for one state from the ARC list. + - Resolve names to state-qualified county FIPS identifiers. + - Explain why ARC membership does not by itself establish current grant eligibility. diff --git a/data/datasets/arso-current-hydrology.yaml b/data/datasets/arso-current-hydrology.yaml new file mode 100644 index 0000000..b3431b1 --- /dev/null +++ b/data/datasets/arso-current-hydrology.yaml @@ -0,0 +1,67 @@ +id: arso-current-hydrology +name: ARSO Current Hydrology +description: Slovenian river and lake station measurements for building a local water-level conditions + display. +theme: Environment & Hazards +url: https://www.arso.gov.si/xml/vode/hidro_podatki_zadnji.xml +access_type: +- api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.005 +formats: +- XML +license: ARSO permits public-information reuse for commercial and noncommercial analysis with source citation. +license_url: https://kazalci.arso.gov.si/en/content/legal-note +url_checks: + source_marker: Agencija RS za okolje + license_marker: reuse of public information for commercial or non-commercial purposes +domains: +- Water Resources +data_types: +- Time Series +tasks: +- Monitoring +difficulty: beginner +geography: +- Slovenia +temporal_coverage: current observations or notices +update_frequency: near real time +provider: Slovenian Environment Agency +source_type: government +last_verified: '2026-09-28' +getting_started: + overview: The official Slovenian Environment Agency feed supplies current public data. Start with two + current Slovenian stations; a provisional station level is not a flood warning or a destination-wide + measurement. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official data documentation and reuse terms. + - Fetch the small official feed and inspect two records. + - Preserve source timestamps and locations before mapping results. + python: + packages: + - requests + code: | + import requests + from xml.etree import ElementTree as ET + + url = "https://www.arso.gov.si/xml/vode/hidro_podatki_zadnji.xml" + response = requests.get(url, timeout=20) + response.raise_for_status() + root = ET.fromstring(response.content) + print("Prepared", root.findtext("datum_priprave")) + for station in root.findall("postaja")[:2]: + print(station.get("sifra"), station.findtext("reka"), + station.findtext("vodostaj"), station.findtext("datum_cet")) + first_project: + title: Inspect Dated Local Conditions + goal: Inspect two current Slovenian stations with source timestamps. + steps: + - Fetch the official source and retain its update time. + - Show two records with their station or notice identifiers. + - Explain why these records are context rather than complete hazard coverage. diff --git a/data/datasets/at-alert-public-warnings.yaml b/data/datasets/at-alert-public-warnings.yaml new file mode 100644 index 0000000..56b161a --- /dev/null +++ b/data/datasets/at-alert-public-warnings.yaml @@ -0,0 +1,76 @@ +id: at-alert-public-warnings +name: Austria AT-Alert Public Warnings +description: > + Official Austrian civil-emergency alerts from the AT-Alert public API for + reviewing affected polygons, alert levels, and validity intervals. +theme: Environment & Hazards +url: https://warnung.at-alert.at/de +access_type: + - api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - JSON +license: Official public warnings under Austrian free-works terms; credit the issuing authority. +license_url: https://www.rtr.at/rtr/service/opendata/OD_Nutzungsbedingungen.de.html +url_checks: + source_marker: Aktuelle Warnungen + license_marker: keinen urheberrechtlichen Schutz +domains: + - Emergency Management +data_types: + - Event Data + - Geospatial +tasks: + - Monitoring + - Alerting +difficulty: intermediate +geography: + - Austria +temporal_coverage: current official civil alerts +update_frequency: near real time +provider: Austrian Federal Ministry of the Interior +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + AT-Alert lists current public warnings through a JSON RPC POST endpoint. + Start with at most five production alert records; an empty response is + possible. Preserve official polygons, severity, and begin/end times, and + exclude tests before presenting any warning. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official AT-Alert site and public-data reuse terms. + - POST a five-record request for production alert levels. + - Check alert identifier, validity, level, and geography. + python: + packages: + - requests + code: | + import requests + + response = requests.post( + "https://warnung.at-alert.at/api/rpc/alert/list", + json={"json": {"limit": 5, "offset": 0, + "alertLevels": ["AlertLevel1", "AlertLevel2", + "AlertLevel3", "AlertLevel4"]}}, + timeout=30, + ) + response.raise_for_status() + payload = response.json()["json"] + print(f"{payload['totalCount']} production alerts in this response") + for alert in payload["alerts"][:5]: + print(alert.get("consolidation_identifier"), alert.get("alert_level"), + alert.get("begin_date"), alert.get("end_date")) + first_project: + title: Inspect Austrian Civil Alerts + goal: Check a bounded AT-Alert response for region-specific warning review. + steps: + - Keep issuer, alert ID, severity, validity, and official polygons. + - Reject test messages and handle updates and expirations. + - Explain why no returned records do not establish an all-clear. diff --git a/data/datasets/avalanche-report-bulletins.yaml b/data/datasets/avalanche-report-bulletins.yaml new file mode 100644 index 0000000..081cb4b --- /dev/null +++ b/data/datasets/avalanche-report-bulletins.yaml @@ -0,0 +1,55 @@ +id: avalanche-report-bulletins +name: Avalanche.report Regional Bulletins +description: > + European regional avalanche bulletins published as CAAML JSON for building a dated mountain hazard view. +theme: Environment & Hazards +url: https://static.avalanche.report/eaws_bulletins/2026-01-31/2026-01-31-AT-02.json +access_type: [download] +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.001 +formats: [JSON] +license: CC BY 4.0 for Avalanche.report data; credit the issuing regional warning service and Avalanche.report. +license_url: https://avalanche.report/more/open-data +url_checks: + source_marker: avalancheActivity + license_marker: All data provided, such as the avalanche report +domains: [Natural Hazards] +data_types: [Event Data, Geospatial] +tasks: [Monitoring, Mapping] +difficulty: beginner +geography: [Europe] +temporal_coverage: seasonal daily avalanche bulletins +update_frequency: daily +provider: Avalanche.report +source_type: nonprofit +last_verified: 2026-09-28 +getting_started: + overview: > + Avalanche.report publishes daily regional CAAML JSON partitions, including + AT-02 used by TravelCanary. Start with two archived January 2026 bulletin + records; an archived bulletin is not a current warning, and no bulletin + may be published outside its season. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Read the official open-data licence and CAAML access description. + - Fetch one dated regional bulletin file. + - Inspect two bulletin IDs and their validity periods. + python: + packages: [requests] + code: | + import requests + + url = "https://static.avalanche.report/eaws_bulletins/2026-01-31/2026-01-31-AT-02.json" + response = requests.get(url, timeout=20) + response.raise_for_status() + for bulletin in response.json()["bulletins"][:2]: + print(bulletin["bulletinID"], bulletin.get("validTime")) + first_project: + title: Review Regional Avalanche Bulletins + goal: Inspect two dated CAAML bulletins before mapping warning regions. + steps: + - Fetch one regional partition and retain its publication time. + - Match its region identifiers to the official EAWS geometry. + - Explain why an archived bulletin does not describe today's mountain hazard. diff --git a/data/datasets/awc-metar-stations.yaml b/data/datasets/awc-metar-stations.yaml new file mode 100644 index 0000000..85fca69 --- /dev/null +++ b/data/datasets/awc-metar-stations.yaml @@ -0,0 +1,80 @@ +id: awc-metar-stations +name: Aviation Weather Center METAR and Stations +description: > + Current airport METAR observations and station metadata from NOAA's Aviation + Weather Center for checking representative weather conditions near destinations. +theme: Environment & Hazards +url: https://aviationweather.gov/data/api/ +access_type: + - api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - JSON + - CSV +license: U.S. government public information; credit NOAA and check third-party notices. +license_url: https://sos.noaa.gov/copyright/ +url_checks: + source_marker: METARs are found + license_marker: digital media created by NOAA is not copyrighted +domains: + - Weather + - Transportation +data_types: + - Time Series + - Tabular +tasks: + - Monitoring + - Operational Planning +difficulty: beginner +geography: + - Global participating airports +temporal_coverage: current METARs and maintained station metadata +update_frequency: continuous +provider: NOAA Aviation Weather Center +source_type: government +last_verified: 2026-09-28 +access_profile: + friction: low + setup_minutes: 5 + registration_required: false + rate_limit_notes: AWC limits requests to 100 per minute; match the product cadence. +getting_started: + overview: > + AWC serves airport observations and station metadata through one documented + API family. Start with a single airport's METAR and station record. A + nearby airport is only a proxy for destination conditions, and this feed + does not provide official destination-wide weather warnings. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the AWC API request limits and NOAA public-information terms. + - Select one airport ICAO code and request its latest METAR. + - Query the same station ID and retain its coordinates with the reading. + python: + packages: + - requests + code: | + import requests + + headers = {"User-Agent": "TrilemmaDataCatalogExample/1.0 (https://data.trilemma.foundation)"} + base = "https://aviationweather.gov/api/data" + params = {"ids": "EIDW", "format": "json"} + metar = requests.get(f"{base}/metar", params=params, headers=headers, timeout=30) + metar.raise_for_status() + station = requests.get(f"{base}/stationinfo", params=params, headers=headers, timeout=30) + station.raise_for_status() + if metar.json() and station.json(): + print(metar.json()[0]["icaoId"], metar.json()[0]["reportTime"], + station.json()[0]["lat"], station.json()[0]["lon"]) + first_project: + title: Check One Airport Observation + goal: Assess whether one METAR and station coordinate can support local weather context. + steps: + - Keep station ID, coordinates, report time, and observed units. + - Compare the reading age with the intended display freshness. + - Explain why airport conditions cannot prove destination-wide safety. diff --git a/data/datasets/bc-unverified-hourly-pm25.yaml b/data/datasets/bc-unverified-hourly-pm25.yaml new file mode 100644 index 0000000..6456558 --- /dev/null +++ b/data/datasets/bc-unverified-hourly-pm25.yaml @@ -0,0 +1,74 @@ +id: bc-unverified-hourly-pm25 +name: British Columbia Hourly PM2.5 +description: > + Preliminary British Columbia fine-particle station readings for inspecting + hourly particulate concentrations and their observation times. +theme: Environment & Hazards +url: https://open.canada.ca/data/en/dataset/01867404-ba2a-470e-94b7-0604607cfa30 +access_type: + - download +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - CSV +license: > + B.C. Open Government Licence 2.0 with provincial attribution. These hourly + values are unverified and exclude Metro Vancouver and Fraser Valley data. +license_url: https://open.canada.ca/data/en/dataset/01867404-ba2a-470e-94b7-0604607cfa30 +url_checks: + source_marker: Unverified Hourly Air Quality and Meteorological Data + license_marker: Open Government Licence - British Columbia +domains: + - Public Health + - Weather +data_types: + - Time Series +tasks: + - Monitoring +difficulty: beginner +geography: + - British Columbia +temporal_coverage: recent unverified hourly PM2.5 readings +update_frequency: near real time +provider: Government of British Columbia +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + B.C. publishes an unverified PM2.5 CSV and a station metadata CSV. Start + with five lines from the current pollutant file using a streaming read; + the full file is several megabytes. The catalog record confirms its OGL-BC + licence and warns that Metro Vancouver and Fraser Valley readings are + excluded. These concentrations are not provider-reported AQI values. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the B.C. catalog record, geographic exclusions, and licence. + - Stream the official PM2.5 CSV and inspect five data rows. + - Join station names to official station metadata before mapping. + python: + packages: + - requests + code: | + import csv + import itertools + import requests + + url = ("https://www.env.gov.bc.ca/epd/bcairquality/aqo/csv/" + "Hourly_Raw_Air_Data/Air_Quality/PM25.csv") + with requests.get(url, stream=True, timeout=30) as response: + response.raise_for_status() + rows = csv.DictReader(response.iter_lines(decode_unicode=True)) + for row in itertools.islice(rows, 5): + print(row["STATION_NAME"], row["DATE_PST"], row["RAW_VALUE"], row["UNITS"]) + first_project: + title: Inspect B.C. Hourly PM2.5 + goal: Review five preliminary observations before station mapping. + steps: + - Keep station ID or name, timestamp, unit, and concentration. + - Check quality and coverage before deriving a local AQI estimate. + - Explain why a missing station is not evidence of clean air. diff --git a/data/datasets/bea-regional-price-parities.yaml b/data/datasets/bea-regional-price-parities.yaml new file mode 100644 index 0000000..86c9474 --- /dev/null +++ b/data/datasets/bea-regional-price-parities.yaml @@ -0,0 +1,77 @@ +id: bea-regional-price-parities +name: BEA Regional Price Parities +description: > + BEA state and metropolitan Regional Price Parity archives for comparing + relative consumer price levels across U.S. regions. +theme: Markets & Economics +url: https://www.bea.gov/data/prices-inflation/regional-price-parities-state-and-metro-area +access_type: + - download +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - CSV + - ZIP +license: BEA information is public domain unless stated otherwise; cite BEA as source. +license_url: https://www.bea.gov/help/faq/147 +url_checks: + source_marker: Regional Price Parities + license_marker: information posted on this web site is in the public domain +domains: + - Regional Economics + - Inflation +data_types: + - Tabular + - Time Series +tasks: + - Regional Comparison + - Market Sizing +difficulty: intermediate +geography: + - United States states and metropolitan areas +temporal_coverage: 2008-2024 in the current MARPP and SARPP archives +update_frequency: annual +provider: U.S. Bureau of Economic Analysis +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + BEA provides separate metropolitan MARPP and state SARPP archives. Start + with five rows of the all-items metropolitan table from its versioned ZIP. + An RPP is a relative price index, not a household budget or county-level + cost measurement; state and metro values should not be mixed as one grain. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official BEA RPP page and public-domain reuse guidance. + - Download the MARPP archive and identify its metropolitan CSV member. + - Keep the table, unit, geography, and year when interpreting values. + python: + packages: + - requests + code: | + import csv + import io + import itertools + from zipfile import ZipFile + import requests + + response = requests.get("https://apps.bea.gov/regional/zip/MARPP.zip", timeout=30) + response.raise_for_status() + archive = ZipFile(io.BytesIO(response.content)) + with archive.open("MARPP_MSA_2008_2024.csv") as member: + rows = csv.DictReader(io.TextIOWrapper(member, encoding="utf-8-sig")) + metros = (row for row in rows if "Metropolitan Statistical Area" in row["GeoName"]) + for row in itertools.islice(metros, 5): + print(row["GeoFIPS"].strip(), row["GeoName"], row["Description"], row["2024"]) + first_project: + title: Inspect Metropolitan Price Parities + goal: Check one published RPP year for a regional cost comparison. + steps: + - Filter to all-items index rows and retain BEA metropolitan identifiers. + - Compare two metros using the same year and table line. + - Explain why the index is not a direct household cost estimate. diff --git a/data/datasets/binance-bitcoin-ticker.yaml b/data/datasets/binance-bitcoin-ticker.yaml new file mode 100644 index 0000000..ecf1df6 --- /dev/null +++ b/data/datasets/binance-bitcoin-ticker.yaml @@ -0,0 +1,64 @@ +id: binance-bitcoin-ticker +name: Binance Bitcoin Ticker +description: Binance BTC/USDT exchange quotes for a private Bitcoin market comparison where service is + available with explicit provider provenance and retrieval time. +theme: Markets & Economics +url: https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT +access_type: +- api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.001 +formats: +- JSON +license: Binance service terms limit this example to noncommercial personal or internal analysis; regional + restrictions apply. +license_url: https://www.binance.com/en/terms +url_checks: + source_marker: '"symbol":"BTCUSDT"' + license_marker: non-commercial personal or internal business use +domains: +- Capital Markets +data_types: +- Tabular +tasks: +- Market Monitoring +difficulty: beginner +geography: +- Global +temporal_coverage: current BTC spot quote +update_frequency: near real time +provider: Binance +source_type: company +last_verified: '2026-09-28' +getting_started: + overview: The Binance public endpoint returns one current Bitcoin quote. Start with one response and + record its retrieval time; a snapshot is neither a historical series nor an investment recommendation. + Follow the provider usage limits above. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official Binance API and data-use terms. + - Fetch one Bitcoin quote from the documented public endpoint. + - Keep the pair, retrieval time, and provider name separate from other exchanges. + python: + packages: + - requests + code: | + import requests + + url = 'https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT' + response = requests.get(url, timeout=20) + response.raise_for_status() + quote = response.json() + print(quote["symbol"], quote["price"]) + first_project: + title: Compare One Bitcoin Quote + goal: Inspect a single provider quote without treating it as an investment signal. + steps: + - Fetch a single response and retain its pair identifier. + - Record the retrieval time and label the provider. + - Explain why exchange quotes differ and cannot stand in for historical returns. diff --git a/data/datasets/bitstamp-bitcoin-ticker.yaml b/data/datasets/bitstamp-bitcoin-ticker.yaml new file mode 100644 index 0000000..d4f899d --- /dev/null +++ b/data/datasets/bitstamp-bitcoin-ticker.yaml @@ -0,0 +1,64 @@ +id: bitstamp-bitcoin-ticker +name: Bitstamp Bitcoin Ticker +description: Bitstamp BTC/USD exchange ticker fields for a private Bitcoin market comparison with explicit + provider provenance and retrieval time. +theme: Markets & Economics +url: https://www.bitstamp.net/api/v2/ticker/btcusd/ +access_type: +- api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.001 +formats: +- JSON +license: Bitstamp public API terms allow personal analysis; commercial exchange-data use needs a separate + licence. +license_url: https://www.bitstamp.net/api/ +url_checks: + source_marker: '"percent_change_24"' + license_marker: Commercial Use of Bitstamp +domains: +- Capital Markets +data_types: +- Tabular +tasks: +- Market Monitoring +difficulty: beginner +geography: +- Global +temporal_coverage: current BTC spot quote +update_frequency: near real time +provider: Bitstamp +source_type: company +last_verified: '2026-09-28' +getting_started: + overview: The Bitstamp public endpoint returns one current Bitcoin quote. Start with one response and + record its retrieval time; a snapshot is neither a historical series nor an investment recommendation. + Follow the provider usage limits above. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official Bitstamp API and data-use terms. + - Fetch one Bitcoin quote from the documented public endpoint. + - Keep the pair, retrieval time, and provider name separate from other exchanges. + python: + packages: + - requests + code: | + import requests + + url = 'https://www.bitstamp.net/api/v2/ticker/btcusd/' + response = requests.get(url, timeout=20) + response.raise_for_status() + quote = response.json() + print(quote["timestamp"], quote["last"], quote["volume"]) + first_project: + title: Compare One Bitcoin Quote + goal: Inspect a single provider quote without treating it as an investment signal. + steps: + - Fetch a single response and retain its pair identifier. + - Record the retrieval time and label the provider. + - Explain why exchange quotes differ and cannot stand in for historical returns. diff --git a/data/datasets/bls-qcew-county-high-level.yaml b/data/datasets/bls-qcew-county-high-level.yaml new file mode 100644 index 0000000..c651c9f --- /dev/null +++ b/data/datasets/bls-qcew-county-high-level.yaml @@ -0,0 +1,63 @@ +id: bls-qcew-county-high-level +name: BLS QCEW County High-Level Archives +description: > + BLS county employment and wage annual-average archives for comparing local labor-market conditions. +theme: Markets & Economics +url: https://www.bls.gov/cew/downloadable-data-files.htm +access_type: [download] +api_key_required: false +free_to_access: true +size_gb_min: 0.03 +size_gb_max: 0.05 +formats: [ZIP, XLSX] +license: BLS publications are public domain; cite BLS and keep the release year and industry classification. +license_url: https://www.bls.gov/bls/linksite.htm +url_checks: + source_marker: County High-Level + license_marker: everything that we publish, both in hard copy and electronically, is in the public domain +domains: [Labor Economics] +data_types: [Tabular] +tasks: [Community Comparison] +difficulty: intermediate +geography: [United States counties] +temporal_coverage: annual QCEW county averages; HouseHunter pins final 2024 and 2025 archives +update_frequency: quarterly +provider: U.S. Bureau of Labor Statistics +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + BLS publishes County High-Level Excel ZIPs apart from its Public Data API. + Start with one row from the 2025 annual-average workbook; HouseHunter also + pins 2024. QCEW covers jobs subject to unemployment-insurance laws, not + every worker or current job openings. + prerequisites: [Python 3.10 or newer, An internet connection, The requests and openpyxl Python packages] + access_steps: + - Read the QCEW file layout and BLS public-domain notice. + - Download the exact 2025 County High-Level annual archive. + - Inspect the area, ownership, industry, employment, and wage columns. + python: + packages: [requests, openpyxl] + code: | + import io + import itertools + import zipfile + import requests + from openpyxl import load_workbook + + url = "https://data.bls.gov/cew/data/files/2025/xls/2025_all_county_high_level.zip" + response = requests.get(url, timeout=60) + response.raise_for_status() + with zipfile.ZipFile(io.BytesIO(response.content)) as archive: + name = next(n for n in archive.namelist() if n.endswith("allhlcn25.xlsx")) + workbook = load_workbook(io.BytesIO(archive.read(name)), read_only=True, data_only=True) + for row in itertools.islice(workbook.active.values, 3): + print(row[:6]) + workbook.close() + first_project: + title: Compare County Employment + goal: Compare fixed-year county employment and wages at one ownership and industry grain. + steps: + - Select one county and industry from the high-level workbook. + - Compare annual-average employment and wages at the same grain. + - Explain which workers the QCEW coverage omits. diff --git a/data/datasets/catalonia-civil-protection-plans.yaml b/data/datasets/catalonia-civil-protection-plans.yaml new file mode 100644 index 0000000..a5b0b52 --- /dev/null +++ b/data/datasets/catalonia-civil-protection-plans.yaml @@ -0,0 +1,73 @@ +id: catalonia-civil-protection-plans +name: Catalonia Civil Protection Plans +description: > + Current Catalan civil-protection plan activations and phases for reviewing + regional emergency context and official CECAT updates. +theme: Environment & Hazards +url: https://analisi.transparenciacatalunya.cat/api/views/wj9c-j6vf +access_type: + - api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - JSON +license: > + Generalitat of Catalonia open-information licence; cite the department, + preserve meaning and latest update, and follow any dataset-specific notice. +license_url: https://web.gencat.cat/ca/generalitat/dades-indicadors/dades-obertes/llicencies +url_checks: + source_marker: Civil protection plans currently in the pre-alert + license_marker: La reutilització de la informació +domains: + - Emergency Management +data_types: + - Event Data +tasks: + - Monitoring + - Alerting +difficulty: beginner +geography: + - Catalonia +temporal_coverage: current plan phases and official update links +update_frequency: occasional +provider: Generalitat de Catalunya Civil Protection +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + The Generalitat publishes the current pre-alert, alert, and emergency + phases of Catalan civil-protection plans through one Socrata dataset. + Start with five records. A plan phase is regional context and must not be + treated as a destination-specific evacuation order. Attribute the agency, + preserve meaning, and show the last update date. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the exact dataset metadata and Catalan reuse conditions. + - Request five current plan rows from the official dataset API. + - Inspect acronym, phase, activation flag, and phase timestamp. + python: + packages: + - requests + code: | + import requests + + response = requests.get( + "https://analisi.transparenciacatalunya.cat/resource/wj9c-j6vf.json", + params={"$limit": 5}, timeout=30, + ) + response.raise_for_status() + for plan in response.json(): + print(plan.get("plaacronim"), plan.get("plafase"), + plan.get("plaactivat"), plan.get("fasedatahora")) + first_project: + title: Inspect Current Catalan Plan Phases + goal: Review five official plan records for regional emergency context. + steps: + - Keep plan acronym, phase, activation flag, and update timestamp. + - Link the official CECAT communication when one is supplied. + - Explain why a regional plan phase is not a local restriction or order. diff --git a/data/datasets/census-acs-2024-table-summary.yaml b/data/datasets/census-acs-2024-table-summary.yaml new file mode 100644 index 0000000..f3613e4 --- /dev/null +++ b/data/datasets/census-acs-2024-table-summary.yaml @@ -0,0 +1,60 @@ +id: census-acs-2024-table-summary +name: Census ACS 2024 Five-Year Table Summary Files +description: > + Census Bureau table-based ACS estimate and margin files for building tract and county housing-context tools. +theme: Demographics & Development +url: https://www.census.gov/programs-surveys/acs/data/summary-file.2024.html +access_type: [download] +api_key_required: false +free_to_access: true +size_gb_min: 0.01 +size_gb_max: 0.1 +formats: [DAT] +license: U.S. Census Bureau public-use statistics; cite the ACS release and retain margins of error. +license_url: https://www.census.gov/about/policies/citation.html +url_checks: + source_marker: 2024 ACS 5-year Estimates + license_marker: Public-Use Statement +domains: [Housing] +data_types: [Tabular, Survey Estimates] +tasks: [Community Comparison] +difficulty: beginner +geography: [United States counties, United States Census tracts] +temporal_coverage: 2020-2024 ACS five-year estimates +update_frequency: annual +provider: U.S. Census Bureau +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + The 2024 table-based Summary File publishes each detailed table as a pipe-delimited + .dat file with estimates and margins. HouseHunter pins B25034, B25035, B25103, + B25077, and B08303. Start with one bounded read of B25103; a table value is a + survey estimate, and a GEO_ID must be joined to its geography label. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Read the Census table-based Summary File instructions and citation guidance. + - Request the first complete records from one pinned 2024 five-year table. + - Inspect the GEO_ID, estimate, and margin fields before a geography join. + python: + packages: [requests] + code: | + import csv + import io + import requests + + url = ("https://www2.census.gov/programs-surveys/acs/summary_file/2024/" + "table-based-SF/data/5YRData/acsdt5y2024-b25103.dat") + response = requests.get(url, headers={"Range": "bytes=0-2047"}, timeout=30) + response.raise_for_status() + lines = response.text.splitlines() + rows = csv.DictReader(io.StringIO("\n".join(lines[:-1])), delimiter="|") + for row in list(rows)[:2]: + print(row["GEO_ID"], row["B25103_E001"], row["B25103_M001"]) + first_project: + title: Inspect ACS Housing Estimates + goal: Compare a small set of housing estimates with their margins of error. + steps: + - Read B25103 estimates and margins for two geographies. + - Join GEO_ID to the matching ACS geography labels. + - Explain why a five-year survey estimate is not a current property count. diff --git a/data/datasets/census-geocoder.yaml b/data/datasets/census-geocoder.yaml new file mode 100644 index 0000000..2c54f18 --- /dev/null +++ b/data/datasets/census-geocoder.yaml @@ -0,0 +1,74 @@ +id: census-geocoder +name: Census Geocoder Address Lookup +description: > + U.S. Census Bureau address-to-tract geocoding responses for assigning a + user-entered address to its reviewed Census geography. +theme: Geospatial & Infrastructure +url: https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.html +access_type: + - api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - JSON +license: > + Census API terms permit search and analysis; identify the Census source and + state that Census does not endorse or certify the resulting application. +license_url: https://www.census.gov/data/developers/about/terms-of-service.html +url_checks: + source_marker: Single Record Geocoding Service Requests + license_marker: not endorsed or certified by the Census Bureau +domains: + - Geography +data_types: + - Geospatial +tasks: + - Geographic Analysis +difficulty: beginner +geography: + - United States +temporal_coverage: current address-range benchmark with selectable geography vintage +update_frequency: occasional +provider: U.S. Census Bureau +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + The Census Geocoder returns address matches and Census tract geography + for one submitted U.S. address. Start with the Census Bureau's own public + example address and request the current 2020 geography vintage. Do not + send confidential addresses in a tutorial; an approximate range match + needs review before it is used as a property location. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official geocoding request format and API terms. + - Request one public example address with an explicit benchmark and vintage. + - Inspect the returned tract identifier and match quality. + python: + packages: + - requests + code: | + import requests + + response = requests.get( + "https://geocoding.geo.census.gov/geocoder/geographies/onelineaddress", + params={"address": "4600 Silver Hill Rd, Washington, DC 20233", + "benchmark": "Public_AR_Current", "vintage": "Census2020_Current", + "format": "json"}, timeout=30, + ) + response.raise_for_status() + for match in response.json()["result"]["addressMatches"][:5]: + tracts = match["geographies"].get("Census Tracts", []) + print(match["matchedAddress"], [tract["GEOID"] for tract in tracts]) + first_project: + title: Check a Census Tract Match + goal: Inspect a public example address before using geocoding in a local lookup. + steps: + - Keep the matched address, coordinates, benchmark, vintage, and tract GEOID. + - Handle zero or multiple matches without silently choosing one. + - Explain why address-range coordinates can differ from a parcel location. diff --git a/data/datasets/census-pep-county-totals.yaml b/data/datasets/census-pep-county-totals.yaml new file mode 100644 index 0000000..b3e2f47 --- /dev/null +++ b/data/datasets/census-pep-county-totals.yaml @@ -0,0 +1,75 @@ +id: census-pep-county-totals +name: Census PEP County Population Totals +description: > + Vintage 2025 county population estimates from the U.S. Census Bureau for + comparing county sizes and applying population-based eligibility thresholds. +theme: Demographics & Development +url: https://www.census.gov/data/datasets/time-series/demo/popest/2020s-counties-total.html +access_type: + - download +api_key_required: false +free_to_access: true +size_gb_min: 0.001 +size_gb_max: 0.01 +formats: + - CSV +license: U.S. government published statistics; cite the Census Bureau and retain vintage. +license_url: https://www.census.gov/about/policies/citation.html +url_checks: + source_marker: CO-EST2025-alldata + license_marker: Public-Use Statement +domains: + - Demographics + - Population +data_types: + - Tabular + - Survey Estimates +tasks: + - Community Comparison + - Market Sizing +difficulty: beginner +geography: + - United States counties +temporal_coverage: 2020-2025 annual estimates, vintage 2025 +update_frequency: annual +provider: U.S. Census Bureau +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + The Census Population Estimates Program publishes a versioned county CSV. + Start with five rows from the Vintage 2025 all-data file and retain the + year and county FIPS components. Estimates can be revised in later vintages + and do not measure the population of a neighborhood or tract. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official Vintage 2025 county data page and citation guidance. + - Download the county totals CSV and inspect its FIPS and population columns. + - Keep the vintage fixed when comparing or ranking counties. + python: + packages: + - requests + code: | + import csv + import io + import itertools + import requests + + response = requests.get( + "https://www2.census.gov/programs-surveys/popest/datasets/" + "2020-2025/counties/totals/co-est2025-alldata.csv", timeout=30, + ) + response.raise_for_status() + rows = csv.DictReader(io.StringIO(response.text)) + for row in itertools.islice((row for row in rows if row["COUNTY"] != "000"), 5): + print(row["STATE"], row["COUNTY"], row["CTYNAME"], row["POPESTIMATE2025"]) + first_project: + title: Inspect Five County Estimates + goal: Test a fixed-vintage population floor for a county comparison tool. + steps: + - Join state and county FIPS components without dropping leading zeroes. + - Count which sampled counties exceed a chosen population threshold. + - Explain why later estimates may differ from this pinned vintage. diff --git a/data/datasets/chmi-current-hydrology.yaml b/data/datasets/chmi-current-hydrology.yaml new file mode 100644 index 0000000..b14d4b9 --- /dev/null +++ b/data/datasets/chmi-current-hydrology.yaml @@ -0,0 +1,71 @@ +id: chmi-current-hydrology +name: CHMI Current Hydrology Stations +description: > + Current Czech hydrological station series from CHMI for checking measured + water levels against separately documented local thresholds. +theme: Environment & Hazards +url: https://opendata.chmi.cz/hydrology/now/data/ +access_type: + - download +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - JSON +license: CC BY 4.0 with CHMI attribution. +license_url: https://www.chmi.cz/-/jak-mohu-pou%C5%BE%C3%ADvat-otev%C5%99en%C3%A1-data-%C4%8Dhm%C3%BA- +url_checks: + source_marker: Index of /hydrology/now/data/ + license_marker: Creative Commons BY 4.0 +domains: + - Hydrology + - Emergency Management +data_types: + - Time Series +tasks: + - Monitoring + - Alerting +difficulty: intermediate +geography: + - Czechia +temporal_coverage: current station observations +update_frequency: near real time +provider: Czech Hydrometeorological Institute +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + CHMI publishes per-station current H and Q time series as small JSON files. + Start with one station used by TravelCanary. Station observations are not + official warnings by themselves; check timestamps and separately sourced + flood thresholds before interpreting a value. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the CHMI open-data licence and current hydrology documentation. + - Fetch one station JSON file from the current-data directory. + - Inspect series type, unit, and the latest observation time. + python: + packages: + - requests + code: | + import requests + + url = "https://opendata.chmi.cz/hydrology/now/data/0-203-1-244000.json" + response = requests.get(url, timeout=30) + response.raise_for_status() + station = response.json()["objList"][0] + for series in [row for row in station["tsList"] + if row["tsConID"] in ("H", "Q")][:2]: + print(station["objID"], series["tsConID"], series.get("unit"), + series["tsData"][-1] if series.get("tsData") else None) + first_project: + title: Inspect One Czech River Station + goal: Review one bounded current observation before flood-threshold use. + steps: + - Keep station ID, series type, unit, and measurement time. + - Check the observation age and applicable station threshold metadata. + - Explain why a measured stage alone is not an official flood warning. diff --git a/data/datasets/chmi-flash-flood-risk.yaml b/data/datasets/chmi-flash-flood-risk.yaml new file mode 100644 index 0000000..a3ca7e3 --- /dev/null +++ b/data/datasets/chmi-flash-flood-risk.yaml @@ -0,0 +1,74 @@ +id: chmi-flash-flood-risk +name: CHMI Flash-Flood Risk Product +description: > + Official Czech flash-flood risk classes for administrative areas from + CHMI for reviewing local short-term flooding risk. +theme: Environment & Hazards +url: https://opendata.chmi.cz/hydrology/product/data/flash_flood/risk_FF_web.json +access_type: + - download +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - JSON +license: CC BY 4.0 with CHMI attribution. +license_url: https://www.chmi.cz/-/jak-mohu-pou%C5%BE%C3%ADvat-otev%C5%99en%C3%A1-data-%C4%8Dhm%C3%BA- +url_checks: + source_marker: povodne_orp_risk_ff + license_marker: Creative Commons BY 4.0 +domains: + - Hydrology + - Emergency Management +data_types: + - Event Data + - Geospatial +tasks: + - Monitoring + - Alerting +difficulty: intermediate +geography: + - Czechia +temporal_coverage: current ORP flash-flood risk product +update_frequency: near real time +provider: Czech Hydrometeorological Institute +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + CHMI publishes a dated flash-flood risk JSON product by Czech ORP area. + Start with one response and inspect at most five areas if present. A + response with only report metadata means no listed risk areas; it does not + replace current station observations or general flood guidance. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read CHMI's risk-class metadata and CC BY 4.0 condition. + - Fetch the current risk product once. + - Keep creation time, ORP code, and resulting risk class. + python: + packages: + - requests + code: | + import requests + + url = "https://opendata.chmi.cz/hydrology/product/data/flash_flood/risk_FF_web.json" + response = requests.get(url, timeout=30) + response.raise_for_status() + product = response.json() + print(product["datumVytvoreni"]) + for key, areas in product["data"].items(): + if key == "report": + continue + for area in areas[:5]: + print(area.get("kod_orp_ruian"), area.get("riziko_vysledne")) + first_project: + title: Inspect Czech Flash-Flood Areas + goal: Review official nonzero risk classes against one mapped locality. + steps: + - Keep the issue time, ORP identifier, and forecast risk class. + - Distinguish forecast risk from measured water levels. + - Explain why no listed areas do not imply permanent or nationwide safety. diff --git a/data/datasets/chrr-community-conditions-2025.yaml b/data/datasets/chrr-community-conditions-2025.yaml new file mode 100644 index 0000000..5c11bec --- /dev/null +++ b/data/datasets/chrr-community-conditions-2025.yaml @@ -0,0 +1,58 @@ +id: chrr-community-conditions-2025 +name: CHR&R 2025 Community Conditions +description: > + County Health Rankings 2025 county community-condition measures for building a noncommercial county context comparison. +theme: Health, Food & Safety +url: https://p3eplmys2rvchkjx.svcs.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/County%20Health%20Rankings%202025/FeatureServer/2?f=pjson +access_type: [api] +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: [JSON, GeoJSON] +license: CHR&R permits personal and nonprofit analysis with attribution; commercial use requires prior written consent. +license_url: https://www.countyhealthrankings.org/terms-use +url_checks: + source_marker: fed47aeb4d334339a73e20088181e544 + license_marker: personal or non-profit purposes +domains: [Public Health] +data_types: [Geospatial] +tasks: [Community Comparison, Mapping] +difficulty: intermediate +geography: [United States] +temporal_coverage: 2025 annual county release +update_frequency: annual +provider: County Health Rankings & Roadmaps +source_type: academic +last_verified: 2026-09-28 +getting_started: + overview: > + The official CHR&R 2025 ArcGIS county layer includes community-condition + measures used by HouseHunter. Start with one county's attributes; + measure periods and coverage differ, so the layer is not a current + measurement of every county condition. Nonprofit or personal use only. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Read CHR&R's 2025 documentation and noncommercial terms. + - Query one county feature from the official 2025 layer. + - Check measure definitions and years before comparing counties. + python: + packages: [requests] + code: | + import requests + + url = ("https://p3eplmys2rvchkjx.svcs.arcgis.com/" + "P3ePLMYs2RVChkJx/arcgis/rest/services/" + "County%20Health%20Rankings%202025/FeatureServer/2/query") + response = requests.get(url, params={"where": "1=1", "outFields": "*", + "resultRecordCount": 1, "f": "json"}, timeout=20) + response.raise_for_status() + row = response.json()["features"][0]["attributes"] + print(row.get("statecode"), row.get("countycode"), len(row)) + first_project: + title: Compare County Conditions + goal: Inspect the source and vintage of one 2025 county record. + steps: + - Query one county feature and retain its FIPS identifiers. + - Look up the selected measure's definition and measurement year. + - Explain that different measure vintages limit direct comparisons. diff --git a/data/datasets/chrr-mental-health-supplement-2025.yaml b/data/datasets/chrr-mental-health-supplement-2025.yaml new file mode 100644 index 0000000..3170508 --- /dev/null +++ b/data/datasets/chrr-mental-health-supplement-2025.yaml @@ -0,0 +1,59 @@ +id: chrr-mental-health-supplement-2025 +name: CHR&R 2025 Mental Health Supplement +description: > + County Health Rankings supplemental county provider counts for building a noncommercial mental-health access comparison. +theme: Health, Food & Safety +url: https://www.countyhealthrankings.org/health-data/methodology-and-sources/data-documentation +access_type: [download] +api_key_required: false +free_to_access: true +size_gb_min: 0.01 +size_gb_max: 0.02 +formats: [CSV] +license: CHR&R permits personal and nonprofit analysis with attribution; commercial use requires prior written consent. +license_url: https://www.countyhealthrankings.org/terms-use +url_checks: + source_marker: SUPPLEMENTAL DATA RELEASE + license_marker: personal or non-profit purposes +domains: [Public Health] +data_types: [Tabular] +tasks: [Community Comparison] +difficulty: intermediate +geography: [United States] +temporal_coverage: 2025 provider input in the March 2026 supplement +update_frequency: annual +provider: County Health Rankings & Roadmaps +source_type: academic +last_verified: 2026-09-28 +getting_started: + overview: > + The March 2026 CHR&R supplemental CSV includes 2025 NPPES-derived county + mental-health provider measures. Start with two rows and the v062 fields; + provider counts indicate listed supply, not appointment access. + Nonprofit or personal use only. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Read the CHR&R supplement documentation and noncommercial terms. + - Stream two county rows from the official supplemental CSV. + - Review the v062 numerator with the published denominator definition. + python: + packages: [requests] + code: | + import csv + import itertools + import requests + + url = ("https://www.countyhealthrankings.org/sites/default/files/" + "media/document/analytic_supplement_20260325%5B1%5D.csv") + with requests.get(url, stream=True, timeout=30) as response: + response.raise_for_status() + lines = (line.decode("utf-8-sig") for line in response.iter_lines()) + for row in itertools.islice(csv.DictReader(lines), 2): + print(row["fipscode"], row["v062_numerator"], row["v062_denominator"]) + first_project: + title: Inspect Mental Health Provider Supply + goal: Show two county provider-supply records with the published measure definition. + steps: + - Stream two rows and retain their county FIPS codes. + - Calculate a rate only with the documented denominator. + - Explain why provider listings are not verified care availability. diff --git a/data/datasets/coinbase-bitcoin-spot-price.yaml b/data/datasets/coinbase-bitcoin-spot-price.yaml new file mode 100644 index 0000000..d959d7d --- /dev/null +++ b/data/datasets/coinbase-bitcoin-spot-price.yaml @@ -0,0 +1,64 @@ +id: coinbase-bitcoin-spot-price +name: Coinbase Bitcoin Spot Price +description: Coinbase Bitcoin-to-USD spot quotes for a private, personal research comparison with explicit + provider provenance and retrieval time. +theme: Markets & Economics +url: https://api.coinbase.com/v2/prices/BTC-USD/spot +access_type: +- api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.001 +formats: +- JSON +license: Coinbase Market Data Terms allow personal or internal research only; external app display and + redistribution require permission. +license_url: https://www.coinbase.com/legal/market_data +url_checks: + source_marker: '"base":"BTC","currency":"USD"' + license_marker: personal or research purposes +domains: +- Capital Markets +data_types: +- Tabular +tasks: +- Market Monitoring +difficulty: beginner +geography: +- Global +temporal_coverage: current BTC spot quote +update_frequency: near real time +provider: Coinbase +source_type: company +last_verified: '2026-09-28' +getting_started: + overview: The Coinbase public endpoint returns one current Bitcoin quote. Start with one response and + record its retrieval time; a snapshot is neither a historical series nor an investment recommendation. + Follow the provider usage limits above. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official Coinbase API and data-use terms. + - Fetch one Bitcoin quote from the documented public endpoint. + - Keep the pair, retrieval time, and provider name separate from other exchanges. + python: + packages: + - requests + code: | + import requests + + url = 'https://api.coinbase.com/v2/prices/BTC-USD/spot' + response = requests.get(url, timeout=20) + response.raise_for_status() + quote = response.json()["data"] + print(quote["base"], quote["currency"], quote["amount"]) + first_project: + title: Compare One Bitcoin Quote + goal: Inspect a single provider quote without treating it as an investment signal. + steps: + - Fetch a single response and retain its pair identifier. + - Record the retrieval time and label the provider. + - Explain why exchange quotes differ and cannot stand in for historical returns. diff --git a/data/datasets/coingecko-bitcoin-price.yaml b/data/datasets/coingecko-bitcoin-price.yaml new file mode 100644 index 0000000..635844a --- /dev/null +++ b/data/datasets/coingecko-bitcoin-price.yaml @@ -0,0 +1,64 @@ +id: coingecko-bitcoin-price +name: CoinGecko Bitcoin Spot Price +description: CoinGecko Bitcoin-to-USD spot quotes for a personal, dated Bitcoin price comparison with + explicit provider provenance and retrieval time. +theme: Markets & Economics +url: https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd +access_type: +- api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.001 +formats: +- JSON +license: CoinGecko API terms permit contracted API use subject to attribution and plan limits; public + endpoints offer no redistribution rights. +license_url: https://www.coingecko.com/en/api_terms +url_checks: + source_marker: '"bitcoin":{"usd":' + license_marker: CoinGecko API Terms of Service +domains: +- Capital Markets +data_types: +- Tabular +tasks: +- Market Monitoring +difficulty: beginner +geography: +- Global +temporal_coverage: current BTC spot quote +update_frequency: near real time +provider: CoinGecko +source_type: company +last_verified: '2026-09-28' +getting_started: + overview: The CoinGecko public endpoint returns one current Bitcoin quote. Start with one response and + record its retrieval time; a snapshot is neither a historical series nor an investment recommendation. + Follow the provider usage limits above. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official CoinGecko API and data-use terms. + - Fetch one Bitcoin quote from the documented public endpoint. + - Keep the pair, retrieval time, and provider name separate from other exchanges. + python: + packages: + - requests + code: | + import requests + + url = 'https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd' + response = requests.get(url, timeout=20) + response.raise_for_status() + bitcoin = response.json()["bitcoin"] + print("USD", bitcoin["usd"]) + first_project: + title: Compare One Bitcoin Quote + goal: Inspect a single provider quote without treating it as an investment signal. + steps: + - Fetch a single response and retain its pair identifier. + - Record the retrieval time and label the provider. + - Explain why exchange quotes differ and cannot stand in for historical returns. diff --git a/data/datasets/copernicus-edo-drought-indicator.yaml b/data/datasets/copernicus-edo-drought-indicator.yaml new file mode 100644 index 0000000..d417444 --- /dev/null +++ b/data/datasets/copernicus-edo-drought-indicator.yaml @@ -0,0 +1,71 @@ +id: copernicus-edo-drought-indicator +name: Copernicus EDO Drought Indicator +description: > + Dekadal European Combined Drought Indicator rasters for agricultural and ecosystem drought context tools. +theme: Environment & Hazards +url: https://drought.emergency.copernicus.eu/data/wcs-service +access_type: [api] +api_key_required: false +free_to_access: true +size_gb_min: 0.002 +size_gb_max: 0.01 +formats: [GeoTIFF] +license: > + CEMS EDO data permit reproduction, distribution, and adaptation with source and modification notices; some restricted products require registration. +license_url: https://drought.emergency.copernicus.eu/terms%26conditions +url_checks: + source_marker: Combined Drought Indicator (CDI) v4.1 + license_marker: the data of the CEMS EDO and GDO early warning and monitoring systems +domains: [Climate] +data_types: [Raster] +tasks: [Monitoring] +difficulty: intermediate +geography: [Europe] +temporal_coverage: dated dekadal CDI product vintages +update_frequency: occasional +provider: Copernicus Emergency Management Service +source_type: intergovernmental +last_verified: 2026-09-28 +getting_started: + overview: > + EDO publishes the cdiad Combined Drought Indicator through its WCS with a dated configuration record. + Start with the latest available GeoTIFF; agricultural drought context is not an immediate emergency warning. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Review the CDI WCS documentation and CEMS reuse terms. + - Find the current cdiad end date in the EDO configuration. + - Download that dated WCS GeoTIFF and retain its product date. + python: + packages: [requests] + code: | + import requests + + root = "https://drought.emergency.copernicus.eu" + config = requests.get(root + "/services/config?appCode=edo_map", timeout=25) + config.raise_for_status() + def cdi_date(node): + if isinstance(node, dict): + if node.get("code") == "cdiad": + return node["endDay"] + return next((day for value in node.values() if (day := cdi_date(value))), None) + if isinstance(node, list): + return next((day for value in node if (day := cdi_date(value))), None) + return None + day = cdi_date(config.json()) + assert day, "No CDI product date" + response = requests.get( + root + "/api/wcs", + params={"map": "DO_WCS", "SERVICE": "WCS", "VERSION": "2.0.0", + "REQUEST": "GetCoverage", "coverageID": "cdiad", "CRS": "EPSG:4326", + "format": "GEOTIFF", "TIME": day}, timeout=40, + ) + response.raise_for_status() + assert response.content[:4] in (b"II*\x00", b"MM\x00*"), "Expected GeoTIFF" + print(day, "EDO CDI bytes:", len(response.content)) + first_project: + title: Inspect One Drought Product + goal: Display the latest CDI product vintage with its interpretation limit. + steps: + - Read the current cdiad product date from EDO. + - Fetch the matching WCS raster and label that date. + - Explain that stale or absent pixels cannot be read as a current all-clear. diff --git a/data/datasets/copernicus-gfm-flood-layers.yaml b/data/datasets/copernicus-gfm-flood-layers.yaml new file mode 100644 index 0000000..f23bc04 --- /dev/null +++ b/data/datasets/copernicus-gfm-flood-layers.yaml @@ -0,0 +1,61 @@ +id: copernicus-gfm-flood-layers +name: Copernicus Global Flood Monitoring Layers +description: > + Satellite observed flood extent, likelihood, and advisory-flag rasters for corroborating possible flood events. +theme: Environment & Hazards +url: https://confluence.ecmwf.int/spaces/CEMS/pages/242067378/Web%2BLayers +access_type: [api] +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: [GeoTIFF] +license: > + CEMS early-warning data permit reproduction, distribution, and adaptation with source and modification notices; some restricted products require registration. +license_url: https://drought.emergency.copernicus.eu/terms%26conditions +url_checks: + source_marker: Observed Flood Extent + license_marker: Global Flood Monitoring product +domains: [Water Resources] +data_types: [Raster] +tasks: [Monitoring] +difficulty: intermediate +geography: [Global] +temporal_coverage: recent Sentinel-1 flood-monitoring layers +update_frequency: near real time +provider: Copernicus Emergency Management Service +source_type: intergovernmental +last_verified: 2026-09-28 +getting_started: + overview: > + GFM serves observed_flood_extent, uncertainty_values, and advisory_flags as related WMS raster layers. + Start with a small observed-extent tile; satellite coverage and uncertainty must be checked before inferring flooding. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Review the GFM product, layer definitions, and CEMS reuse conditions. + - Request a bounded observed_flood_extent GeoTIFF from the public WMS. + - Check matching uncertainty_values and advisory_flags before interpreting pixels. + python: + packages: [requests] + code: | + from datetime import datetime, timezone + import requests + + valid_day = datetime.now(timezone.utc).strftime("%Y-%m-%dT00:00:00.000Z") + response = requests.get( + "https://geoserver.gfm.eodc.eu/geoserver/gfm/wms", + params={"SERVICE": "WMS", "VERSION": "1.1.1", "REQUEST": "GetMap", + "LAYERS": "observed_flood_extent", "STYLES": "", "SRS": "EPSG:4326", + "BBOX": "5,45,5.1,45.1", "WIDTH": 32, "HEIGHT": 32, + "FORMAT": "image/geotiff", "TIME": valid_day}, timeout=20, + ) + response.raise_for_status() + assert response.content[:4] in (b"II*\x00", b"MM\x00*"), "Expected GeoTIFF" + print(valid_day, "GFM extent bytes:", len(response.content)) + first_project: + title: Inspect a Flood-Extent Tile + goal: Display a dated, bounded GFM tile with its uncertainty caveat. + steps: + - Fetch one observed_flood_extent tile. + - Record its bounds and valid date with the matching quality-layer names. + - Explain that absent satellite pixels are not an all-clear. diff --git a/data/datasets/copernicus-glofas-flood-outlook.yaml b/data/datasets/copernicus-glofas-flood-outlook.yaml new file mode 100644 index 0000000..75675ac --- /dev/null +++ b/data/datasets/copernicus-glofas-flood-outlook.yaml @@ -0,0 +1,61 @@ +id: copernicus-glofas-flood-outlook +name: Copernicus GloFAS Flood Outlook +description: > + Global flood-forecast summary maps for selecting areas needing closer satellite or local-authority checks. +theme: Environment & Hazards +url: https://ows.globalfloods.eu/glofas-ows/ows.py?service=WMS&request=GetCapabilities +access_type: [api] +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: [GeoTIFF] +license: > + CEMS early-warning information permits reuse with source and modification notices; it is informational and not an official local warning. +license_url: https://drought.emergency.copernicus.eu/terms%26conditions +url_checks: + source_marker: Flood summary for days 1-3 + license_marker: Global Flood Monitoring product +domains: [Water Resources] +data_types: [Raster] +tasks: [Monitoring] +difficulty: intermediate +geography: [Global] +temporal_coverage: dated days-one-to-three flood forecast summary +update_frequency: daily +provider: Copernicus Emergency Management Service +source_type: intergovernmental +last_verified: 2026-09-28 +getting_started: + overview: > + GloFAS publishes the sumAL41EGE forecast-summary WMS layer used to target follow-up checks. + Start with a small current-day tile; a forecast is not observed flooding or a local warning. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Review the GloFAS WMS capabilities and CEMS reuse terms. + - Fetch a small dated sumAL41EGE tile. + - Compare any forecast signal with independent observed and official information. + python: + packages: [requests] + code: | + from datetime import datetime, timezone + import requests + + valid_day = datetime.now(timezone.utc).strftime("%Y-%m-%dT00:00Z") + response = requests.get( + "https://ows.globalfloods.eu/glofas-ows/ows.py", + params={"SERVICE": "WMS", "VERSION": "1.1.1", "REQUEST": "GetMap", + "LAYERS": "sumAL41EGE", "STYLES": "default", "SRS": "EPSG:4326", + "BBOX": "5,45,5.1,45.1", "WIDTH": 32, "HEIGHT": 32, + "FORMAT": "image/tiff", "TIME": valid_day}, timeout=20, + ) + response.raise_for_status() + assert response.content[:4] in (b"II*\x00", b"MM\x00*"), "Expected GeoTIFF" + print(valid_day, "GloFAS forecast bytes:", len(response.content)) + first_project: + title: Inspect a Flood-Outlook Tile + goal: Display a small forecast-summary tile with its date and bounds. + steps: + - Fetch the current-day GloFAS WMS tile. + - Label its forecast date and map extent. + - Explain that a forecast alone does not establish current local flooding. diff --git a/data/datasets/copernicus-rapid-mapping-activations.yaml b/data/datasets/copernicus-rapid-mapping-activations.yaml new file mode 100644 index 0000000..de8c8e3 --- /dev/null +++ b/data/datasets/copernicus-rapid-mapping-activations.yaml @@ -0,0 +1,56 @@ +id: copernicus-rapid-mapping-activations +name: Copernicus Rapid Mapping Activations +description: > + Public emergency-mapping activation metadata and product references for dated disaster-response context tools. +theme: Environment & Hazards +url: https://mapping.emergency.copernicus.eu/about/how-to-harvest-cems-mapping-data/emergency-response-data/ +access_type: [api] +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.001 +formats: [JSON] +license: > + Public CEMS mapping information may be reused with source and modification attribution; sensitive activations can be restricted. +license_url: https://mapping.emergency.copernicus.eu/terms-and-conditions/ +url_checks: + source_marker: Copernicus EMS Rapid Mapping API provides a programmatic interface + license_marker: free, full and open access to Copernicus Service Information +domains: [Emergency Management] +data_types: [Events] +tasks: [Monitoring] +difficulty: beginner +geography: [Global] +temporal_coverage: public emergency mapping activations and product metadata +update_frequency: near real time +provider: Copernicus Emergency Management Service +source_type: intergovernmental +last_verified: 2026-09-28 +getting_started: + overview: > + The public Rapid Mapping API lists activations and offers detail records and product links. + Start with one activation; its existence does not establish current warning coverage at a location. + prerequisites: [Python 3.10 or newer, An internet connection, The requests Python package] + access_steps: + - Review the public activation API documentation and CEMS reuse terms. + - Request one activation from the public listing. + - Keep event and update timestamps separate from present hazard status. + python: + packages: [requests] + code: | + import requests + + response = requests.get( + "https://rapidmapping.emergency.copernicus.eu/backend/dashboard-api/public-activations-info/", + params={"limit": 1, "offset": 0}, timeout=25, + ) + response.raise_for_status() + for activation in response.json()["results"]: + print(activation["code"], activation["name"], activation["eventTime"]) + first_project: + title: Inspect a Public Activation + goal: Display one mapped emergency event with its activation identifier and event time. + steps: + - Fetch one public activation record. + - Show the identifier, event date, and affected country. + - Explain that an activation is not a current local warning. diff --git a/data/datasets/cwfif-active-wildland-fires.yaml b/data/datasets/cwfif-active-wildland-fires.yaml new file mode 100644 index 0000000..1d47142 --- /dev/null +++ b/data/datasets/cwfif-active-wildland-fires.yaml @@ -0,0 +1,76 @@ +id: cwfif-active-wildland-fires +name: CWFIF Active Wildland Fires +description: > + Canadian active-wildfire records from NRCan CWFIF for inspecting fire + identifiers, status, size, and reported location. +theme: Environment & Hazards +url: https://geoserver.cwfif.nrcan.gc.ca/geoserver/wfs?service=WFS&version=2.0.0&request=GetCapabilities +access_type: + - api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - GeoJSON +license: Open Government Licence Canada 2.0 with Natural Resources Canada attribution. +license_url: https://open.canada.ca/en/open-government-licence-canada +url_checks: + source_marker: cwfif_national_activefires + license_marker: Open Government Licence +domains: + - Natural Hazards + - Emergency Management +data_types: + - Event Data + - Geospatial +tasks: + - Monitoring + - Mapping +difficulty: beginner +geography: + - Canada +temporal_coverage: active wildland fires since 2010 +update_frequency: near real time +provider: Natural Resources Canada CWFIF +source_type: government +last_verified: 2026-09-28 +getting_started: + overview: > + NRCan's current CWFIF WFS offers active wildland-fire features under + public:cwfif_national_activefires. Start with three GeoJSON features + in EPSG:4326. A reported active-fire point is context; it does not by + itself prove smoke origin, local exposure, or an evacuation area. + prerequisites: + - Python 3.10 or newer + - An internet connection + - The requests Python package + access_steps: + - Read the official WFS capabilities and Canadian licence. + - Request three active-fire features with explicit geographic coordinates. + - Inspect fire ID, prescribed status, and report time. + python: + packages: + - requests + code: | + import requests + + response = requests.get( + "https://geoserver.cwfif.nrcan.gc.ca/geoserver/wfs", + params={"service": "WFS", "version": "2.0.0", "request": "GetFeature", + "typeNames": "public:cwfif_national_activefires", + "outputFormat": "application/json", "srsName": "EPSG:4326", "count": 3}, + timeout=30, + ) + response.raise_for_status() + for fire in response.json()["features"][:3]: + row = fire["properties"] + print(row.get("national_fire_id"), row.get("fire_size"), + row.get("fire_was_prescribed")) + first_project: + title: Inspect Canadian Active Fires + goal: Review three official fire records before regional context mapping. + steps: + - Keep fire ID, report time, size, and prescribed-fire flag. + - Check freshness and geometry before mapping incidents. + - Explain why an active-fire record is not a smoke-source attribution. diff --git a/data/datasets/cwfis-m3-perimeter-estimates.yaml b/data/datasets/cwfis-m3-perimeter-estimates.yaml new file mode 100644 index 0000000..c015f1a --- /dev/null +++ b/data/datasets/cwfis-m3-perimeter-estimates.yaml @@ -0,0 +1,73 @@ +id: cwfis-m3-perimeter-estimates +name: CWFIS M3 Perimeter Estimates +description: > + Canadian M3 estimated wildfire perimeters from NRCan CWFIS for showing + approximate fire-footprint context. +theme: Environment & Hazards +url: https://cwfis.cfs.nrcan.gc.ca/geoserver/public/ows?service=WFS&version=2.0.0&request=GetCapabilities +access_type: + - api +api_key_required: false +free_to_access: true +size_gb_min: 0 +size_gb_max: 0.01 +formats: + - GeoJSON +license: Open Government Licence Canada 2.0 with Natural Resources Canada attribution. +license_url: https://open.canada.ca/en/open-government-licence-canada +url_checks: + source_marker:{appsCopy.sourceAvailabilityLabel}: {source.availability}
{source.coverage &&{appsCopy.sourceCoverageLabel}: {source.coverage}
} {source.details &&{source.details}
} + {source.systems && ( +{system.name} ({system.status.replaceAll("_", " ")})
+{system.noGuideReason}
} +