Stocurile de petrol din SUA de @ellis2013nz

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

La fel ca mulți oameni, am urmărit criza combustibilului cu ardere lentă rezultată din războiul din Iran, posibila extindere a acestuia la Marea Roșie și exacerbarea din războiul în curs dintre Rusia și Ucraina. Acesta din urmă pare să fi ajuns într-un stadiu în care se aduce prejudicii serioase capacității de rafinare a Rusiei și exporturilor de produse petroliere.

Am început acum o pagină pe acest site cu câteva diagrame despre criza combustibilului, pe care le voi ține la zi.

Stocurile de țiței sunt în scădere, dar „cât a mai rămas”?

Motivația pentru postarea de astăzi a fost că am văzut multe știri și articole de opinie despre modul în care stocurile de țiței americane – în total și în Rezerva strategică de petrol în special – au scăzut la minime record moderne. Dar comentatorii experți sunt reticenți în a arăta această scădere în raport cu suma absolută rămasă, spre deosebire de comparațiile cu minimele sezoniere sau istorice. Acest lucru este de înțeles pentru că nimeni nu știe cu adevărat (sau poate spune) care sunt adevăratele „funduri” ale rezervorului într-un sistem complex mare precum SUA. O anumită cantitate de petrol, de volum incert, dar cu siguranță în zeci (și posibil sute) de milioane de barili, este necesară doar pentru a împiedica blocarea sau prăbușirea diferitelor bucăți de instalații sanitare sau de depozitare.

Așa că este greu să obții o diagramă ca aceasta și a trebuit să o fac eu:

Nu am reputația de expert în petrol de care să-mi fac griji, așa că pot să trag în siguranță acele linii la un debit destul de arbitrar de 24 (sau 30) de zile de rafinărie și să calculez timpul necesar pentru a ajunge la acele niveluri scăzute „la ritmul actual”. Este simplist, dar este o verificare importantă a realității pentru a vedea că ar putea mai rămâne aproximativ 19 săptămâni.

Pe măsură ce stocurile sunt epuizate, SUA au un lot de ulei de care dispune. Dar 19 săptămâni nu sunt atât de multe. Piețele pariază că lucruri bune se vor întâmpla în săptămâni sau luni înainte ca linia albastră să atingă linia roșie. Din această cauză, petrolul se vinde în prezent cu aproximativ 90 de dolari pe baril, în loc de cei 110 de dolari + care ar fi justificați dacă oamenii ar crede că am pierdut traficul prin Strâmtoarea Hormuz pe termen nelimitat.

Nu că cred că 19 săptămâni ar fi o prognoză realistă. Cu mult înainte ca acțiunile americane să atingă acea linie roșie, ar exista haos economic și politic. Eforturile de a menține prețurile cu amănuntul în mod artificial scăzute ar fi probabil depășite și ar exista o distrugere materială a cererii. Ar exista, de asemenea, stimulente uriașe pentru ca SUA să ofere orice pentru a restabili rutele de tranzit din Golful Persic și Marea Roșie. 19 săptămâni ne oferă un interval de timp în care ceva va trebui să se schimbe.

Valoarea adăugată pentru mine din acest grafic arată petrolul total disponibil pentru SUA în cazul în care aceasta devine o urgență reală pentru ei; compararea acesteia cu un prag semnificativ, chiar dacă arbitrar, în termeni de zile de acoperire a rafinăriei; și calculul săptămânilor rămase la ratele actuale de reducere pentru a atinge acel prag ridicat de stres.

Scoateți SPR-ul și uitați-vă și la benzină, distilate

Aceeași sursă de date are o mulțime de alte informații detaliate, majoritatea mult prea detaliate pentru mine, dar sunt suficient de interesat de patru variabile cheie de titlu, care sunt mai detaliate decât „stocurile totale de țiței”. În acest grafic, am împărțit stocurile totale în cele din Rezerva Strategică de Petrol și cele din stocurile mai accesate în mod normal. Arăt, de asemenea, cantitățile deținute din două produse rafinate cheie:

Cod

Iată codul care preia datele de la US Energy Information Administration și desenează al doilea diagramă:

library(tidyverse)
library(readxl)
library(scales)
library(glue)

fn <- "us-petrol-status-weekly.xls"

download.file(
  "https://ir.eia.gov/wpsr/psw01.xls",
  fn,
  mode = "wb"
)

us_stocks <- read_excel(fn, sheet = "Data 1", skip = 2) |>
  rename(
    crude = `Weekly U.S. Ending Stocks of Crude Oil  (Thousand Barrels)`,
    crude_spr = `Weekly U.S. Ending Stocks of Crude Oil in SPR  (Thousand Barrels)`,
    gasoline = `Weekly U.S. Ending Stocks of Total Gasoline  (Thousand Barrels)`,
    diesel = `Weekly U.S. Ending Stocks of Distillate Fuel Oil  (Thousand Barrels)`,
    date = Date
  )

#------------------plotting------------------

eia_caption <- glue("Source: Energy Information Administration (EIA). Accessed {format(Sys.Date(), '%d %B %Y')}")

# an annotation rectangle we can use in multiple charts
war_rect <- annotate(
  "rect",
  xmin = as.Date("2026-02-28"),
  xmax = Inf,
  ymin = -Inf,
  ymax = Inf,
  alpha = 0.5,
  fill = "grey80"
)

# Facet plot of total crude, SPR crude, diesel and gasoline stocks
us_stocks |>
  mutate(com_crude = crude - crude_spr) |>
  select(
    date,
    `Non-SPR crude oil` = com_crude,
    `Crude oil in SPR` = crude_spr,
    `Gasoline` = gasoline,
    `Distillate (mostly diesel)` = diesel
  ) |>
  gather(variable, value, -date) |>
  mutate(variable = fct_reorder(variable, value)) |>
  ggplot(aes(x = date, y = value / 1000)) +
  war_rect +
  facet_wrap(~variable, scales = "free_y") +
  geom_line(colour = "blue") +
  expand_limits(y = 0) +
  scale_y_continuous(label = comma) +
  labs(
    x = "",
    y = "Thousands of barrels",
    title = "US stocks of crude oil, gasoline, and distillate fuel oil (effectively diesel)",
    subtitle = "Showing both total crude oil stocks (crude) and those in the Strategic Petroleum Reserve (crude_spr)",
    caption = eia_caption
  )

Ca punct lateral, am început să folosesc air pentru a-mi format codul. Aproape întotdeauna, arată mai bine și mai ușor de citit decât formatarea manuală și, cu siguranță, este mai consistent. Mulțumiri lui D. Vaughan și L. Henry și proiectului tidyverse.org.

Și iată codul pentru a desena diagrama mea principală extrem de șlefuită, cea a stocurilor totale de țiței cu adnotări. Am încercat să fac acest lucru într-un mod în care va continua să funcționeze în lunile următoare cu întreținere minimă, vom vedea cum va merge.

refinery_throughput <- 17.3 # as at 24 July, operating at 97% of US capacity. Daily refinery use.
plausible_stress <- 30 * refinery_throughput
plausible_high_stress <- 24 * refinery_throughput

crude_growth_summary <- us_stocks |>
  summarise(
    latest_crude = crude(date == max(date)),
    weeks = as.numeric(as.Date(max(date)) - as.Date("2026-04-03")) / 7,
    difference = (latest_crude -
      crude(date == as.Date("2026-04-03"))) /
      1000,
    ratio = latest_crude / crude(date == as.Date("2026-04-03")),
    # growth/decline per week in million barrels e.g. 10m barrels per week:
    difference_rate = difference / weeks,
    # growth/declien rate per week:
    growth_rate = 1 - exp(log(ratio) / weeks)
  ) |>
  mutate(
    weeks_at_this_rate = (plausible_stress - latest_crude / 1000) /
      difference_rate
  )

plot_us_stocks <- function(min_date = "2020-01-01", lab_x_diff = NULL) {
  if (!"Date" %in% class(min_date)) {
    min_date <- as.Date(min_date)
  }

  if (is.null(lab_x_diff)) {
    days_shown <- as.numeric(as.Date(max(us_stocks$date))) -
      as.numeric(min_date)
    lab_x_diff <- days_shown / 50
  }

  lv <- tail(us_stocks, 1)$crude / 1000

  p2 <- us_stocks |>
    filter(date >= min_date) |>
    ggplot(aes(x = date, y = crude / 1000)) +
    war_rect +
    geom_hline(yintercept = plausible_stress, colour = "darkred") +
    geom_hline(yintercept = plausible_high_stress, colour = "red") +
    annotate(
      "text",
      x = min_date + lab_x_diff,
      y = plausible_stress + 50,
      label = "Illustrative stress threshold:n30 days of refinery cover",
      colour = "darkred",
      hjust = 0
    ) +
    annotate(
      "text",
      x = min_date + lab_x_diff,
      y = plausible_high_stress - 30,
      label = "Illustrative high stress threshold:n24 days of refinery cover",
      colour = "red",
      hjust = 0,
      vjust = 1
    ) +
    annotate(
      "text",
      x = max(us_stocks$date) - 5e6,
      y = lv,
      label = glue(
        "{round(lv)} million barrels;n{round(lv / refinery_throughput)} days of cover"
      ),
      size = 2.9,
      hjust = 1,
      vjust = 1,
      colour = "blue"
    ) +
    geom_line(colour = "blue") +
    expand_limits(y = 0) +
    scale_y_continuous(
      label = comma,
      sec.axis = sec_axis(
        ~ . / refinery_throughput,
        name = "Days of refinery throughput"
      )
    ) +
    labs(
      x = "",
      y = "Millions of barrels",
      title = "U.S. Total Crude Oil Stocks, including Strategic Petroleum Reserve",
      subtitle = glue(
        "Comparison of existing inventories with refinery throughput as at July 2026.
Decline since peak on 3 April 2026 is at {abs(round(crude_growth_summary$difference_rate, 1))} million barrels per week; {round(crude_growth_summary$weeks_at_this_rate)} weeks from stress threshold at this (hypothetical and linear) rate."
      ),
      caption = eia_caption
    ) +
    theme(axis.line.y = element_line(colour = "grey50"))

    svglite(
      glue("all-us-crude-from{min_date}.svg"),
      width = 10,
      height = 7
    )
    print(p2)
    dev.off()
}

plot_us_stocks("2000-01-01")
plot_us_stocks("2020-01-01")
plot_us_stocks("2025-01-01")

Pentru că am făcut acest complot sub forma unei funcții, am câteva variante ale complotului. Unul care începe în 2020:

Iar celălalt a mărit chiar până în ianuarie 2025 și mai departe:

În general, prefer intriga cu care am început, care arată situația din 2000 și încolo. Încerc să obțin o perspectivă de ansamblu până la urmă.

Asta e tot pentru azi. Imaginile de pe această pagină vor rămâne aceleași ca la momentul scrierii; dar cele de pe pagina de monitorizare a crizei de combustibil vor fi actualizate în fiecare săptămână.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.