Stocurile de țiței la Cushing, Oklahoma de @ellis2013nz

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

O postare foarte scurtă azi. În timpul crizei globale a combustibilului legată de conflictul din Iran, am monitorizat acest grafic, în fiecare joi dimineață, ora mea:

Acesta arată cantitatea de țiței din uzina Cushing din Oklahoma și este unul dintre cei mai oportuni și mai frecvent actualizați (în fiecare miercuri) indicatori ai sănătății generale a pieței de țiței din SUA. După cum arată graficul, sub 20 de milioane de barili este larg citat ca problematic, „fundul rezervorului” sau „podeau operațional”. Sub acest nivel este de așteptat să provoace riscuri pentru calitatea petrolului, pentru capacitatea infrastructurii de a transporta petrolul și de a deservi piețele de mărfuri care se bazează pe această facilitate pentru livrarea efectivă.

Suntem sub 20 de milioane de câteva săptămâni și totuși piețele petroliere din SUA nu au explodat sau s-au oprit (alege-ți metafora), așa că în mod clar există un pic de slăbiciune în acel „minim”. Poate că minimul real este 18 milioane, 17 milioane, cine știe? Dar nu poate fi cu mult sub nivelul actual și acest lucru merită în mod clar monitorizat.

Există, desigur, o pagină web în care puteți verifica datele direct, dar, desigur, am vrut să-mi desenez propria diagramă șlefuită și să o etichetez corespunzător. Codul de mai jos rulează o conductă completă pentru a descărca datele, a le procesa (inclusiv pregătirea unor etichete automate inteligente, fără aglomerare a punctelor) și a desenului grafic.

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

# Download data
download.file("https://www.eia.gov/dnav/pet/hist_xls/W_EPC0_SAX_YCUOK_MBBLw.xls", 
              mode = "wb", destfile = "cushing.xls")

# Import and process data
cushing <- read_excel("cushing.xls", sheet = "Data 1", skip = 2) |> 
      rename(value = `Weekly Cushing, OK Ending Stocks excluding SPR of Crude Oil  (Thousand Barrels)`,
             end_date = Date) |> 
      # we want a label for a point only if it is at least 500 different from
      # the subsequent point (this is to avoid clutter when the line is
      # basically horizontal)
      mutate(label = ifelse(is.na(lead(value)) | 
                            abs(value - lead(value)) > 500, 
                            comma(value), ""),
      # We also want the label to disappear if the value is really close to
      # 20,000, which is going to be a clearly labelled line anyway so would
      # just be unnecessary clutter.
             label = ifelse(abs(value - 20000) < 200, "", label))

# Draw chart
cushing |> 
    filter(end_date > as.Date("2025-12-31")) |>
    # original data was in thousands but it's better to have it in millioms
    # visually:
    ggplot(aes(x = end_date, y = value / 1000)) +
    geom_hline(yintercept = 20, colour = "darkred") +
    geom_line(colour = "steelblue") +
    geom_point(colour = "steelblue") +
    geom_text(data = filter(cushing, end_date > as.Date("2026-05-01")), 
              aes(label = label, x = end_date + 150000), 
              size = 2.8, hjust = 0) +
    annotate("text", x = as.Date("2026-03-02"), y = 20.500, 
             label = "Widely cited minimum working level - 20 million barrels", 
             colour = "darkred") +
    scale_x_date(date_breaks = "1 month", date_labels = "%b") + 
    scale_y_continuous(label = comma) +
    theme(panel.grid.minor = element_blank()) +
    labs(x = "Month (2026)",
         y = "Million barrels",
         title = "Stocks of crude oil at Cushing, Oklahoma",
         subtitle = "Cushing is the main US crude oil storage and pipeline hub, and the delivery point for the West Texas Intermediary (WTI) oil benchmark.",
         caption = glue("Source: US Energy Information Administration (EIA) https://www.eia.gov/dnav/pet/hist/LeafHandler.ashx?n=PET&s=W_EPC0_SAX_YCUOK_MBBL&f=W. Accessed {Sys.Date()}."))

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.