q53·intermediate

Did the power go out after this storm — and where?

citieshazards Datasets: 3 15–30 min
Real events · NASA Disasters / VEDA

Analysis-ready products for actual events that this question maps to — open each in the catalog, or browse them on the NASA Disasters Portal.

Nighttime lights are exactly what they sound like. A satellite looks down at Earth after dark and measures how brightly each spot glows: streetlights, houses, businesses. When a hurricane knocks out the power grid, those lights go dark. So a neighbourhood that was bright before the storm and black afterwards is a visible, mappable signal that the power went out there. This is the analysis behind the Disasters Portal's Hurricane-Helene power-outage maps.

Did the power go out after this storm — and where?

Nighttime lights are exactly what they sound like. A satellite looks down at Earth after dark and measures how brightly each spot glows: streetlights, houses, businesses. When a hurricane knocks out the power grid, those lights go dark. So a neighbourhood that was bright before the storm and black afterwards is a visible, mappable signal that the power went out there. This is the analysis behind the Disasters Portal’s Hurricane-Helene power-outage maps.

Which data to use, and how

Use this dataset: Black Marble VNP46A2 (short name VNP46A2). It gives you one cleaned-up brightness image per night, already corrected so that an ordinary night and a moonlit night are comparable. That’s what you need to compare “before” and “after” fairly. (Behind it sits the raw nighttime radiance from an instrument called the VIIRS Day/Night Band. Black Marble is that raw signal, tidied up.)

Then do five steps. The runnable code further down does all of this; this is just the idea.

  1. Pick the area: a small latitude/longitude box around the storm-hit town, plus two dates: a clear night before the storm and a clear night after it.
  2. Grab both nights’ brightness images for that box.
  3. Subtract one from the other, after minus before. Places where brightness dropped a lot are where the lights went out.
  4. Throw away the cloudy pixels. Each image comes with a flag marking spots the satellite couldn’t see clearly. Ignore those so a cloud doesn’t get mistaken for an outage.
  5. Overlay where people live so you can rank the worst-hit, most-populated areas first.

That’s the whole method. Below, “How a scientist answers this” names the exact tools, and the Run it cell does it live on synthetic data so you can see each step work.

What you can find out

  • Where the lights went out. Compare a clear pre-storm night to a post-storm night: neighbourhoods that dimmed or vanished are the likely outage areas.
  • How recovery progresses. Track the lights coming back over the following nights.
  • Relative severity. Bigger brightness drops over more people = higher-priority areas.

What it can’t tell you

  • It’s a proxy, not a meter. Black Marble measures light, not the grid directly. A dark patch is strong evidence of an outage, but it’s an inference. The satellite never touches the wires.
  • Exact customer counts. Light loss tracks outages closely, but it isn’t a utility’s outage feed. For a real customer number you need the utility itself.
  • Anything under thick cloud. A storm brings its own clouds, and those can blind the sensor right when you most want to look. You have to wait for the first clear night before you can map anything.

Gotchas to watch for

  • The night sky itself changes the brightness. Moonlight, snow cover, and even wildfire smoke can make the ground look brighter or darker than it really is, for reasons that have nothing to do with the power grid. That’s why this product is BRDF-corrected, a cleanup step that removes the effect of how light bounces off the surface under different conditions. It’s also why you should still compare clear nights only, never a clear night against a hazy one.
  • Clouds masquerade as outages. A cloudy pixel goes dark for the same reason an unpowered one does: no light reaches the satellite. Each image carries a quality flag for cloudy pixels. Drop those pixels before you difference the two nights, or you’ll map clouds instead of outages.
  • One night is noisy; the pattern is the signal. A single dark pixel can be a fluke. Trust a cluster of dimmed pixels over a neighbourhood, not one lonely point, and confirm recovery by watching the lights return over several nights.

The real-data code

The Run it cell above runs the method on synthetic data (no login). Below is the whole recipe against the real archive: search both nights, open them, difference after minus before, drop the cloudy pixels, find the worst-hit area, and plot the outage map. It needs a free Earthdata Login.

import earthaccess, numpy as np, xarray as xr
import matplotlib.pyplot as plt

earthaccess.login(strategy="netrc")

aoi = (-82.15, 33.36, -81.9, 33.55)   # storm-hit box (W, S, E, N) — Augusta, Georgia

# 1. Find one clear night BEFORE the storm and one clear night AFTER it.
before = earthaccess.search_data(short_name="VNP46A2", bounding_box=aoi,
                                 temporal=("2024-09-20", "2024-09-25"))
after = earthaccess.search_data(short_name="VNP46A2", bounding_box=aoi,
                                temporal=("2024-09-28", "2024-10-03"))

# 2. Open each night's VNP46A2 granule. The product is gridded HDF5-EOS, so xarray
#    reads it straight from the HDF5_LH5 group holding the science layers.
def read_ntl(grans):
    ds = xr.open_dataset(earthaccess.open(grans[:1])[0],
                         group="HDFEOS/GRIDS/VNP_Grid_DNB/Data Fields",
                         engine="h5netcdf")
    ntl = ds["Gap_Filled_DNB_BRDF-Corrected_NTL"].astype("float32")
    qf = ds["Mandatory_Quality_Flag"]                  # 0/1 good, 2 = poor/cloud
    ntl = ntl.where(ntl != 65535)                      # drop the fill value
    return ntl.where(qf < 2)                           # 3. keep only clear pixels

ntl_before = read_ntl(before)
ntl_after = read_ntl(after)

# 4. Difference the two nights: after minus before. A large negative value means a
#    spot that was bright is now dark — the visible signature of a power outage.
delta = (ntl_after.values - ntl_before.values)
delta = np.where(np.isnan(ntl_before.values) | np.isnan(ntl_after.values), np.nan, delta)

# Where did the lights go out? Flag pixels that lost most of their pre-storm brightness.
lost = (delta < 0) & (ntl_before.values > 5)           # was lit, now much dimmer
frac_dark = np.nansum(lost & (delta < -0.5 * ntl_before.values)) / max(np.nansum(lost), 1)
median_drop = np.nanmedian(delta[lost]) if np.any(lost) else 0.0

# 5. Print the verdict and map the outage.
print(f"~{100*frac_dark:.0f}% of lit pixels lost over half their light; "
      f"median drop {median_drop:+.1f} nW/cm2/sr -> widespread outage" if frac_dark > 0.2
      else "No widespread darkening — grid likely held or skies were not clear")

plt.imshow(delta, cmap="RdBu", vmin=-30, vmax=30)
plt.colorbar(label="after - before  (nW/cm2/sr)")
plt.title("Nightlight change after the storm (blue = went dark)")
plt.tight_layout(); plt.show()

# Cross-check before trusting it: confirm the dark cluster against the utility's own
# outage feed, and use the next clear night to watch the lights return (see the gotchas).

Where the data comes from

All from NASA through one free login (Earthdata Login). Black Marble (VNP46A2 and the sharper Black Marble HD) is NASA’s nightlights product, built from the raw VIIRS Day/Night Band radiance: the same instrument, processed two ways. This work supports the Respond phase of the NASA Disasters program, which uses Earth data to help during emergencies.

Sources

How a scientist answers this
Parameters
NASA Black Marble VNP46A2 daily BRDF/atmosphere-corrected nighttime radiance (nW·cm⁻²·sr⁻¹); Black Marble HD for neighbourhood-scale detail; VIIRS Day/Night Band raw radiance. Compare a clear pre-storm night to a clear post-storm night over the same AOI, using the product's QA/cloud flags.
Method
Difference post-storm minus pre-storm radiance per pixel (or as percent drop), mask cloud/snow/stray-light-flagged pixels using the VNP46A2 QA layers, then rank dimmed areas by radiance loss weighted by underlying population.
Validation
Read it as a proxy, not a grid meter — moonlight, snow, smoke, and clouds distort radiance (hence BRDF correction and clear-night comparisons); validate against utility outage reports where available and wait for the first cloud-free post-storm night.
In plain EnglishCompare how bright a city looks at night before and after a storm; neighbourhoods that went dark are the likely power-outage areas.

Make it yours → Set your AOI and pick clear pre-storm and post-storm dates, then overlay population to prioritize the hardest-hit areas.

🧪 Virtual Mock Lab stand-in data · runs in your browser · no login

A safe place to practise the method on VNP46A2. The code is the real earthaccess workflow, but we feed it stand-in data shaped like the real product — so you can run it, change the numbers, and break it without an account. When you want the real data, use the recipe under “The real-data code” above, or download the notebook below.

editable · runs in your browser
Computed · real data Worked examples, computed end-to-end on real satellite data — not yet scientist-verified · expand ▾
Before-After-Control-Impact, run on documented sites.

Not the answer for your own area — that you run yourself above. Two forests show the deforestation fingerprint (Amazon, Sumatra); three Indian forests come out a genuine null — the method discriminates, it doesn't just confirm. A change must clear an empirical noise floor to count; a null is reported as a null. Computed on Google Earth Engine.

Augusta, Georgia

Hurricane Helene power outages — Sep 2024 before 2024-08-15–2024-09-20 → after 2024-09-27–2024-10-04
Measured signal — the trustworthy variables changed in the expected direction.

Night-time lights over Augusta, Georgia changed by -44% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.

Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the tick to count as a real signal.

STRONG (direct, local)Seen up close, at the cut itself — trust it.
night-time lights
-9.872 nW/cm²/sr (-44%) darker (likely outage) SNR 1.3 938 def / 2,172 ctrl px
clears the tick → trust it (for its tier) below the tick → treat as no clear change noise floor estimated, not measured the bar a real signal must clear (1× noise floor)
Provenance & full trace — reproducible

Every number came from this exact query on Google Earth Engine. Same query → same number.

Night-time lights over Augusta, Georgia changed by -44% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.

San Juan, Puerto Rico

Hurricane Maria power outages — Sep 2017 before 2017-08-20–2017-09-15 → after 2017-09-21–2017-10-08
Measured signal — the trustworthy variables changed in the expected direction.

Night-time lights over San Juan, Puerto Rico changed by -33% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.

Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the tick to count as a real signal.

STRONG (direct, local)Seen up close, at the cut itself — trust it.
night-time lights
-8.283 nW/cm²/sr (-33%) darker (likely outage) SNR 0.51 922 def / 432 ctrl px
clears the tick → trust it (for its tier) below the tick → treat as no clear change noise floor estimated, not measured the bar a real signal must clear (1× noise floor)
Provenance & full trace — reproducible

Every number came from this exact query on Google Earth Engine. Same query → same number.

Night-time lights over San Juan, Puerto Rico changed by -33% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.

New Orleans, Louisiana

Hurricane Ida power outages — Sep 2021 before 2021-08-05–2021-08-25 → after 2021-08-30–2021-09-08
Measured signal — the trustworthy variables changed in the expected direction.

Night-time lights over New Orleans, Louisiana changed by -26% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.

Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the tick to count as a real signal.

STRONG (direct, local)Seen up close, at the cut itself — trust it.
night-time lights
-11.054 nW/cm²/sr (-26%) darker (likely outage) SNR 1.11 829 def / 2,345 ctrl px
clears the tick → trust it (for its tier) below the tick → treat as no clear change noise floor estimated, not measured the bar a real signal must clear (1× noise floor)
Provenance & full trace — reproducible

Every number came from this exact query on Google Earth Engine. Same query → same number.

Night-time lights over New Orleans, Louisiana changed by -26% after the event, control-corrected vs. a nearby less-affected city. A clear drop in light, consistent with widespread power loss.

Fort Myers, Florida

Hurricane Ian power outages — Sep 2022 before 2022-09-05–2022-09-25 → after 2022-09-29–2022-10-08
Not measurable — too few comparable pixels in this box to give a trustworthy answer.

Not measurable for Fort Myers, Florida: too few cloud-free Black Marble nights (clouds and the storm obscure the surface), so an outage can't be separated from noise.

Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the tick to count as a real signal.

STRONG (direct, local)Seen up close, at the cut itself — trust it.
night-time lights ⚠ control overshoot — not a trustworthy estimate reported, not judged floor estimated — not measured here
-22.502 nW/cm²/sr (-101%) not measurable SNR 0.79 1,739 def / 1,299 ctrl px
clears the tick → trust it (for its tier) below the tick → treat as no clear change noise floor estimated, not measured the bar a real signal must clear (1× noise floor)
Provenance & full trace — reproducible

Every number came from this exact query on Google Earth Engine. Same query → same number.

Not measurable for Fort Myers, Florida: too few cloud-free Black Marble nights (clouds and the storm obscure the surface), so an outage can't be separated from noise.

Houston, Texas

Hurricane Beryl power outages — Jul 2024 before 2024-06-15–2024-07-05 → after 2024-07-08–2024-07-15
Not measurable — too few comparable pixels in this box to give a trustworthy answer.

Not measurable for Houston, Texas: too few cloud-free Black Marble nights (clouds and the storm obscure the surface), so an outage can't be separated from noise.

Observational analog (a natural experiment over comparable places) — evidence, not a prediction for any one spot. Each bar shows the change versus the natural jitter between undisturbed control pixels; it must clear the tick to count as a real signal.

STRONG (direct, local)Seen up close, at the cut itself — trust it.
night-time lights ⚠ only 1 clear night(s) — not a trustworthy estimate reported, not judged floor estimated — not measured here
-43.65 nW/cm²/sr (-56%) not measurable SNR 6.39 2,207 def / 1,535 ctrl px
clears the tick → trust it (for its tier) below the tick → treat as no clear change noise floor estimated, not measured the bar a real signal must clear (1× noise floor)
Provenance & full trace — reproducible

Every number came from this exact query on Google Earth Engine. Same query → same number.

Not measurable for Houston, Texas: too few cloud-free Black Marble nights (clouds and the storm obscure the surface), so an outage can't be separated from noise.

See all verified answers, with maps →