Obscura

PortWatch Chokepoint Activity

Daily ship transits through major maritime chokepoints (Suez, Panama, Hormuz and others), from IMF PortWatch.

portwatch_chokepoint_activity — the dataset name to pass to the Obscura API.

Category Markets Columns 18 Refresh Daily Point-in-time available_date

What one row means

One row is a single maritime chokepoint's (e.g. Panama Canal, Suez Canal, Strait of Hormuz, Bosporus Strait, Bab-el-Mandeb, Strait of Malacca) AIS-derived vessel-transit and cargo-capacity summary for one calendar day: how many ships of each class (container, dry bulk, general cargo, ro-ro, tanker) passed through, plus IMF PortWatch's model-estimated total cargo-carrying capacity (metric tons) those vessels represented, by class and in aggregate. Source: the IMF PortWatch ArcGIS FeatureServer (`Daily_Chokepoints_Data`), keyless, daily since 2019-01-01.

One row per (portid, occurred_on).

Point-in-time availability

Every Obscura dataset carries available_date: the calendar day the publisher made the row available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the same thing on every dataset in the catalog.

For portwatch_chokepoint_activity: release_calendar: available_date = occurred_on (the AIS transit day) + 8 calendar days, the IMF PortWatch dissemination lag; a STORED generated column.

Refresh cadence

Obscura refreshes portwatch_chokepoint_activity daily — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.

Schema — 18 columns

The full public column list for portwatch_chokepoint_activity, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/portwatch_chokepoint_activity.

ColumnTypeDescription
portidtext · not nullIMF PortWatch's own chokepoint identifier (source `portid`, e.g. "chokepoint2" = Panama Canal, "chokepoint3" = Bosporus Strait). Stable across days; part of the composite primary key with occurred_on. Not a global standard code (no ISO/UN/LOCODE mapping) — resolve chokepoint identity via portname.
occurred_ondate · not nullThe calendar day the ships transited this chokepoint (source `date` attribute on the AIS-derived FeatureServer layer, parsed as ISO string or epoch-ms). Also the gap-deterministic watermark the collector's `where=date > MAX(occurred_on)` query uses to fetch only new days.
portnametextHuman-readable chokepoint name (source `portname`), e.g. "Panama Canal", "Bosporus Strait", "Suez Canal", "Bab-el-Mandeb Strait". Nullable — a small fraction of ArcGIS features omit it; joins/display should tolerate NULL and fall back to portid.
n_containerdouble precisionCount of container vessels that transited this chokepoint on this day, from AIS ship-tracking classified by vessel type. Stored as float (not int) because PortWatch's pipeline treats these as model-estimated counts subject to future revision.
n_dry_bulkdouble precisionCount of dry-bulk carrier vessels (grain, ore, coal, etc.) that transited this chokepoint on this day.
n_general_cargodouble precisionCount of general-cargo (breakbulk) vessels that transited this chokepoint on this day.
n_rorodouble precisionCount of roll-on/roll-off (vehicle-carrier) vessels that transited this chokepoint on this day.
n_tankerdouble precisionCount of tanker vessels (oil/chemical/LNG) that transited this chokepoint on this day.
n_cargodouble precisionSum of the four non-tanker vessel-class counts (n_container + n_dry_bulk + n_general_cargo + n_roro) for this chokepoint/day — PortWatch's precomputed "all cargo vessels" subtotal.
n_totaldouble precisionTotal vessel transits of every tracked class for this chokepoint/day: n_cargo + n_tanker.
capacity_containerdouble precisionPortWatch's estimated aggregate cargo-carrying capacity (metric tons) of the container vessels that transited this chokepoint on this day, derived from each AIS-tracked vessel's registry-known deadweight/capacity.
capacity_dry_bulkdouble precisionEstimated aggregate cargo capacity (metric tons) of transiting dry-bulk vessels for this chokepoint/day.
capacity_general_cargodouble precisionEstimated aggregate cargo capacity (metric tons) of transiting general-cargo vessels for this chokepoint/day.
capacity_rorodouble precisionEstimated aggregate cargo capacity (metric tons) of transiting ro-ro vessels for this chokepoint/day.
capacity_tankerdouble precisionEstimated aggregate cargo capacity (metric tons) of transiting tanker vessels for this chokepoint/day.
capacity_cargodouble precisionSum of the four non-tanker capacity fields (capacity_container + capacity_dry_bulk + capacity_general_cargo + capacity_roro) for this chokepoint/day — the "all cargo vessels" capacity subtotal, matching PortWatch's n_cargo grouping.
capacitydouble precisionTotal estimated transiting cargo capacity (metric tons) across every vessel class for this chokepoint/day: capacity_cargo + capacity_tanker.
available_datedatePUBLIC-availability date = occurred_on (the AIS transit day) shifted by the declared IMF PortWatch dissemination lag of 8 calendar days. DB-generated (STORED, `occurred_on + 8`), read-only; the point-in-time column to filter/join on — NEVER the transit day itself.

Access portwatch_chokepoint_activity

Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.

import obscura

client = obscura.Client("obs_live_…")

df = client.query(
    dataset="portwatch_chokepoint_activity",
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the portwatch_chokepoint_activity dataset?

Daily ship transits through major maritime chokepoints (Suez, Panama, Hormuz and others), from IMF PortWatch. One row is a single maritime chokepoint's (e.g. Panama Canal, Suez Canal, Strait of Hormuz, Bosporus Strait, Bab-el-Mandeb, Strait of Malacca) AIS-derived vessel-transit and cargo-capacity summary for one calendar day: how many ships of each class (container, dry bulk, general cargo, ro-ro, tanker) passed through, plus IMF PortWatch's model-estimated total cargo-carrying capacity (metric tons) those vessels represented, by class and in aggregate. Source: the IMF PortWatch ArcGIS FeatureServer (`Daily_Chokepoints_Data`), keyless, daily since 2019-01-01.

How do I avoid look-ahead bias with portwatch_chokepoint_activity?

Filter on portwatch_chokepoint_activity.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — release_calendar: available_date = occurred_on (the AIS transit day) + 8 calendar days, the IMF PortWatch dissemination lag; a STORED generated column. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get portwatch_chokepoint_activity?

As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="portwatch_chokepoint_activity". The column schema is public at https://api.obscura.trade/v1/catalog/portwatch_chokepoint_activity.

How often is portwatch_chokepoint_activity updated?

Obscura refreshes portwatch_chokepoint_activity on a daily schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.

Related datasets

Cboe IndicesDaily history of Cboe's volatility indices, including VIX, sourced directly from Cboe. Crypto MarketsPer-coin market data from CoinGecko: price, market cap and volume across thousands of cryptocurrencies. DeFiLlama ProtocolsTotal value locked in each DeFi protocol, tracked by DeFiLlama. DeFiLlama StablecoinsCirculating supply of each stablecoin over time, from DeFiLlama. DeFiLlama TVLTotal value locked on each blockchain, from DeFiLlama. Flow MetricsTrade-flow metrics per symbol in fixed time windows: taker (aggressor) buy versus sell volume and trade counts, broken o… Forex OrderbookOANDA's order book and position book by currency pair: where retail traders' open orders and positions sit relative to p… Forex PositionsRetail forex positioning by pair (share of traders long versus short), collected from several broker sentiment feeds.