Skip to content

Load profile explorer

The 39,424-row hourly load profile that drives every BTM economic model on this site. It is not real metered data — Johor state-level electricity consumption is not publicly available — but a calibrated synthesis built from public sources.

Every synthesised hourly value traces back to 4 public datasets + 1 static reference:

flowchart LR
    subgraph raw ["Public raw data (bronze)"]
        A["NASA POWER<br/>9-pt grid × 5 yr hourly<br/>394,632 rows<br/>T2M, GHI, RH"]
        B["Senai METAR (WMKJ)<br/>5 yr hourly observed<br/>45,412 rows<br/>tmpc, dwpc, sknt"]
        C["DOSM peninsular monthly<br/>consumption + GDP-state + population<br/>27,908 rows total"]
        D["TNB ETOU/ICPT<br/>static tariff YAML<br/>reference/tariffs/"]
    end

    subgraph synth ["Calibrated synthesis"]
        E["weather cleaning + tz align<br/>silver.weather_hourly<br/>43,848 rows"]
        F["hourly basis fn<br/>S_t = (α_0 + α_1·CDH_t) × w_etou × w_dow"]
        G["monthly normalisation<br/>Σ load_mw = DOSM peninsular × Johor share<br/>(algebraic, residual 7.9e-15)"]
    end

    subgraph out ["Output"]
        H["gold.load_hourly_state<br/>39,424 rows<br/>shown on this page"]
    end

    A --> E
    B --> E
    E --> F
    D --> F
    C --> G
    F --> G
    G --> H
SourceProvidesUsed in synthesis at
NASA POWER5y hourly temperature / GHI / RH / wind (9-point grid)Computes t_canonical, CDH (cooling-degree-hours) — drives diurnal + seasonal shape
Senai METAR (WMKJ)5y hourly observed airport temperatureCross-validates POWER (5y bias 0.10 °C); removes model T offset
DOSM peninsular monthlyPeninsular total electricity consumption (GWh/month)Monthly integration target — forces Σ load_mw = peninsular × Johor share
DOSM GDP-state-realPer-state quarterly GDP shareJohor share modelling (11.5–11.7%)
TNB ETOU scheduleWeekday 14–22 peak window definitionETOU weight term w_etou in the hourly basis function

The synthesis math is documented in Load synthesis methodology; all raw-source ingest manifests (with source URLs + timestamps) are at Sources & manifests; calibration residuals (monthly reconciliation 7.9e-15 RM, ETOU peak share match) are in load_synth_diagnostics.json.

Choose year/month to load that period. ~720 rows/month; chart shows load_mw series.

gold.load_hourly_state — synthesised Johor hourly load (DOSM × ETOU calibrated)
MYT load_mw t_canonical (°C) CDH ETOU peak
  • Diurnal shape — load_mw peaks 14:00–18:00 (industrial CDH-driven cooling), troughs 04:00–06:00.
  • ETOU peak-period weighting — the is_etou_peak column flags 14:00–22:00 weekdays, the TNB E2/E3 high-tariff window. Choose a month, sort table by peak; you’ll see weekend gaps.
  • Cooling-CDH couplingt_canonical (the canonical Senai temperature) and cdh (cooling-degree-hours) move together with load_mw. This is why the BTM model uses a temperature-dependent PUE.
  • Monthly reconciliation — sum(load_mw) for any month equals DOSM peninsular × Johor share (modelled 11.5–11.7%). Algebraic by construction.

For raw bytes, see Downloads.