data(nordic): per-zone carbon intensity for Swedish bidding zones SE1–SE4#1262
data(nordic): per-zone carbon intensity for Swedish bidding zones SE1–SE4#1262avalyset wants to merge 1 commit into
Conversation
Replace the uniform 18.0 gCO2eq/kWh placeholder for SE1-SE4 with per-zone production-based values (SE1 20.6, SE2 20.1, SE3 14.5, SE4 17.4) derived from ENTSO-E generation-per-type x IPCC AR5 lifecycle factors (2025 annual means). Adds per-zone method/source/drift notes + updated file metadata. NO1-NO5 and FI unchanged. Update test_get_emissions_PRIVATE_INFRA_NORDIC_REGION to reflect SE2's new derived value (20.1 gCO2eq/kWh = 0.0201 kg/kWh). Test previously hardcoded the placeholder 0.018; now uses the derived 2025 figure. All 9 nordic tests pass; 8 package integrity tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Thanks for your contribution. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #1262 +/- ##
==========================================
+ Coverage 89.64% 89.68% +0.04%
==========================================
Files 48 48
Lines 4771 4771
==========================================
+ Hits 4277 4279 +2
+ Misses 494 492 -2 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Hi Benoît, thanks for taking a look. The values are derived rather than taken from a single source, so the "source" is a short chain: Generation data: ENTSO-E Transparency, Actual Generation per Production Type (A75), per bidding zone, full year 2025. The raw series isn't committed (fetched reproducibly from the ENTSO-E API), but the exact EIC codes per zone are in ADR-0006. Emission factors: IPCC AR5 Annex III, Table A.III.2 lifecycle medians (hydro 24, wind 11, nuclear 12, solar 48, gas 490 gCO2eq/kWh). Method: production-based generation-mix weighted average — each source weighted by its annual share, multiplied by its factor.
The four SE values, the drift analysis, and the nine-zone table are in the README, and the whole thing is frozen and citable at https://doi.org/10.5281/zenodo.21042581. So there's no single CSV that says "20.6" — the value is traceable through method + the two sources above. Glad to add a worked example for one zone (e.g. SE3) showing the mix × factors arithmetic explicitly if that helps. |
|
Quick follow-up, @benoit-cty — I've since published a corrected version (same concept DOI, now resolves to v1.2): https://doi.org/10.5281/zenodo.21042581 Two things this fixes for your review: the SE per-zone drift results are now included in full (docs/se-drift-results-2022-2025.md), and one correction to my earlier note — the factor source is IPCC WG III AR5 Annex III lifecycle medians (I referenced "Table A.III.2" above; the manuscript and repo now cite "Annex III" without that sub-ID). Factor values are unchanged (hydro 24, wind 11, nuclear 12, solar 48, gas 490 gCO2eq/kWh). Method in ADR-0006 (SE CI) and ADR-0007 (SE drift). |
Hi! This proposes replacing the uniform 18.0 gCO2eq/kWh placeholder currently shared by all four Swedish bidding zones in
codecarbon/data/private_infra/nordic_emissions.jsonwith per-zone, derived values. Data-only change — happy to adjust anything based on your review.This is a companion to #1260, which does the equivalent for Norwegian zones NO1–NO5. The two PRs are independent and can be merged in either order.
What
NO1–NO5 and FI are unchanged (byte-for-byte; only SE blocks + file metadata touched).
Why the placeholder is worth improving
The current
18.0is identical across SE1–SE4 and is systematically wrong in both directions: it undervalues SE1 and SE2 (true CI ~20 gCO2eq/kWh, ~+12–15% error relative to18.0) and overvalues SE3 (true CI ~14.5, ~−19% error). A single uniform constant cannot represent structurally different zones.The clearest case for per-zone values
SE3 is Sweden's nuclear-dominant zone. Nuclear generation carries a lifecycle factor of ~12 gCO2eq/kWh (IPCC AR5), well below any fossil source. As a result, SE3's true CI sits at 14.5 gCO2eq/kWh — the
18.0placeholder is roughly 19% too high. This error is structurally absent in the Norwegian zones, which are predominantly hydropower and have no nuclear-dominant zone; Norwegian CIs cluster near or above18.0rather than well below it.SE1 and SE2, by contrast, give the undervaluation counterpart: their hydro-and-wind mix yields CIs of ~20 gCO2eq/kWh, making the placeholder ~12–15% too low. Together, SE3's overvaluation and SE1/SE2's undervaluation make the two-way error explicit and large — a single uniform value is wrong in opposite directions across the four Swedish zones.
Source & method
electricitymaps_api.py) or any other data path.A point we'd like your steer on: the factor basis
We derived these with IPCC AR5 Annex III (Table A.III.2) lifecycle medians (coal 820, gas 490, hydro 24, wind 11, nuclear 12, …) rather than CodeCarbon's
carbon_intensity_per_source.json. Our reasoning:carbon_intensity_per_source.json:9), but fossil gas is a negligible share of the Swedish mix, so the choice has minimal effect on these values — we flag it only for transparency.That said — this is a recommendation, not a correction of your table. If you'd prefer internal consistency with
carbon_intensity_per_source.json, re-deriving with your own per-source factors is a one-line change on our side; just say the word.Honest characterization (per-zone drift notes added)
A multi-year analysis (2022–2025) is carried in the per-zone
notefields:SE4 shows the most active drift (monotonically rising CI driven by solar growth, Solar=48 gCO2eq/kWh vs wind=11). SE2 is the only SE zone below both materiality thresholds.
Reproducibility
Every value is traceable. Derivation method, pre-registered before computation, is in the ADR chain (esp. ADR-0001 CI method); the per-zone results and multi-year drift analysis are in the repo's
docs/. Frozen and citable:Tests
The existing Nordic test (
test_get_emissions_PRIVATE_INFRA_NORDIC_REGION) previously hardcoded the placeholder0.018for SE2; updated to0.0201to match the new derived value. All 9 Nordic tests pass; 8 package integrity tests pass. No other code changes.Thanks for maintaining CodeCarbon — glad to iterate on any of this.