industry: steel GEM, ammonia, refinery, cement plants non-EU (#1241)
* industry distribution: split EAF + integrated using GEM GSPT, add ammonia plants * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add release note [no ci] * add cement plant data for countries not in Hotmaps * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add refineries data for countries not in Hotmaps --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
e815c36b5c
commit
3a1b57515a
37
data/ammonia_plants.csv
Normal file
37
data/ammonia_plants.csv
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
"Plant","Ammonia [kt/a]","Urea [kt/a]","AN [kt/a]","UAN [kt/a]","CAN [kt/a]","Nitrogen fertilisers [kt/a]","MAP [kt/a]","Country","Latitude","Longitude","Date","Source","Comment"
|
||||||
|
"Yara Sluiskil","1700","1300",,,,,,"Netherlands","51.27186","3.84896","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"OCI Geleen","550",,,,,,,"Netherlands","50.99738","5.78497","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"CF Fertilisers Billingham","590",,,,,,,"United Kingdom","53.28149","-2.79744","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.cfindustries.com/what-we-do/ammonia-productiont",
|
||||||
|
"Yara Tertre","420",,,,,,,"Belgium","50.47842","3.80285","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"BASF Antwerp","650",,,,,,,"Belgium","51.35583","4.27811","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Yara Gonfreville","400",,,,,,,"France","49.47982","0.19587","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Borealis Rouen",,,,,,,,"France","49.41916","1.02584","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"BASF Ludwigshafen","880",,,,,,,"Germany","49.51171","8.42009","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"SKW","1300",,,,,,,"Germany","51.87746","12.5858","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Yara Brunsbuettel","750",,,,,,,"Germany","53.91152","9.20982","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Yara Porsgrunn","500",,,,,,,"Norway","59.12444","9.61922","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Fertiberia Puertollano","400","250",,"200",,,,"Spain","38.67276","-4.0608","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.icis.com/explore/resources/news/2021/10/25/10698264/spain-s-fertiberia-urea-ammonia-plants-in-palos-to-remain-shut-on-gas-prices/",
|
||||||
|
"Fertiberia Huelva","200","130",,,,,,"Spain","37.22572","-6.94742","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://www.icis.com/explore/resources/news/2021/10/25/10698264/spain-s-fertiberia-urea-ammonia-plants-in-palos-to-remain-shut-on-gas-prices/",
|
||||||
|
"Yara Ferrara","600","600",,,,,,"Italy","44.86206","11.57922","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Petrokemija",,"500",,,,,,"Croatia","45.46977","16.78944","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Neochim","450",,"710",,,,,"Bulgaria","42.20514","25.61547","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Agopolychim",,,"400","800",,,"300","Bulgaria","43.20652","27.65983","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/; https://ammoniaenergy.org/articles/agropolychim-investing-in-ammonia-distribution-from-bulgaria/","no own ammonia plant"
|
||||||
|
"Azomures","1600",,,,,,,"Romania","46.76187","24.42361","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/","Total for ammonia, AN, NPK, UAN, Urea"
|
||||||
|
"Nitrogenmuvek","497",,,,"1300",,,"Hungary","47.16691","18.12844","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"DUSLO","530",,,,,,,"Slovakia","48.18705","17.9301","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Grupa Azoty","524","375",,,,,,"Poland","51.45179","21.98174","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Anwil",,,,,,"965",,"Poland","52.70438","18.96606","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Achema","1100","785","651","1300","540",,,"Lithuania","55.081","24.32377","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Lifosa",,,,,,"3241",,"Lithuania","55.27567","24.01652","13-01-2023","https://www.icis.com/explore/resources/news/2023/01/18/10846094/insight-poor-demand-high-costs-stifle-europe-industry-despite-falling-gas-prices/",
|
||||||
|
"Unknown (Linz)",,,,,,,,"Austria","48.28749","14.32369","15-08-2024",,"most likely location"
|
||||||
|
"Unknown (Kothla-Järve)",,,,,,,,"Estonia","59.39984","27.25401","15-08-2024",,"most likely location"
|
||||||
|
"Unknown (Oulu)",,,,,,,,"Finland","65.0033","25.43731","15-08-2024",,"most likely location"
|
||||||
|
"Unknown (Ptolemaida)",,,,,,,,"Greece","40.50701","21.71414","15-08-2024",,"most likely location"
|
||||||
|
"Unknown (Sabac)",,,,,,,,"Serbia","44.76298","19.68426","15-08-2024",,"most likely location"
|
||||||
|
"Unknown (Lugano)",,,,,,,,"Switzerland","46.02709","8.9641","15-08-2024",,"most likely location"
|
||||||
|
"Rivneazot","420",,"540","300","470 ",,,"Ukraine","50.70502","26.1630","28-08-2024","https://interfax.com/newsroom/top-stories/100959/; https://interfax.com/newsroom/top-stories/103386/; https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/; http://www.ostchem.com/en/o-kompanii/proizvodstvo/rovno",
|
||||||
|
"Stirol (Horlivka)","1470","940 ","693",,,,,"Ukraine","48.29697","38.10412","28-08-2024","http://ostchem.com/en/o-kompanii/proizvodstvo/stirol",
|
||||||
|
"Severodonetsk Azot","1020","390","550",,,,,"Ukraine","48.94185","38.47399","28-08-2024",,
|
||||||
|
"Odessa Port Plant ","1160","942",,,,,,"Ukraine","46.49460","30.73222","28-08-2024","https://www.spfu.gov.ua/userfiles/files/OPP_Teaser_Eng.pdf",
|
||||||
|
"Cherkazy Azot","963",,"970","500",,,,"Ukraine","49.38241","32.05719","28-08-2024","https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/https://gmk.center/en/news/ostchem-plants-produced-520-6-thousand-tons-of-fertilizers-in-q1/; http://ostchem.com/en/o-kompanii/proizvodstvo/azot",
|
||||||
|
"DneproAZOT","660",,,,,,,"Ukraine","48.49004","34.66667","28-08-2024","https://www.alfalaval.com/media/stories/fertilizers/increased-plant-capacity-and-reduced-maintenance-at-fertilizer-plant/",
|
|
26
data/cement-plants-noneu.csv
Normal file
26
data/cement-plants-noneu.csv
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
"Company","Site","Cement [kt/a]","Country","Latitude","Longitude","Date","Source","Comment"
|
||||||
|
"Titan Cementarnica USJE AD","Skopje",910,"MK",41.96816,21.45604,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Colacem Albania Sh.p.k","Balldre plant, Lezhe",500,"AL",41.83689,19.63339,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Fushe Kruje Cement Factory, Sh.p.k.","Elbasan cement plant",300,"AL",41.12184,20.04347,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Fushe Kruje Cement Factory, Sh.p.k.","Fushe Kruje plant",1330,"AL",40.46403,19.49948,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Antea Cement Sh.A","Boka e Kuqe, Burizane",1500,"AL",41.54838,19.72574,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Beocinska Fabrika Cementa","Beocin",2000,"RS",45.20952,19.71043,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Holcim (Srbija) a.d.","Novi Popovac",1400,"RS",43.90633,21.50378,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Titan Cementara Kosjerić Ltd.","Kosjeric",750,"RS",44.0125,19.88831,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Sharrcem Sh.p.k.","Hani i Elezit,",850,"XK",42.14704,21.29863,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Fabrika Cementa Lukavac d.d.","Lukavac",800,"BA",44.52596,18.52811,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Tvornica Cementa Kakanj d.d. ","Kakanj",400,"BA",44.11922,18.10897,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"Lafarge Ciment Moldova SA","Rezina",1400,"MD",47.79094,28.9553,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"ZAO Rybnitsa Cement Comple","Rybnitsa",1100,"MD",47.78115,29.02078,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"ChAO Nikolayevtsemen","Mykolayiv",900,"UA",46.94555,32.06641,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information; https://cemark.ua/en/zavodi/prat-mikolajivcement ",
|
||||||
|
"OAO KyivCement ","Kyiv",175,"UA",50.38525,30.55205,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.dyckerhoff.com.ua/en/dyckerhoff-cement-ukraine ",
|
||||||
|
"OAO YuGCement ","Mykolayiv",1250,"UA",46.98512,31.9317,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information, https://www.dyckerhoff.com.ua/en/yug-cemen",
|
||||||
|
"OOO Cement","Odessa",550,"UA",46.50818,30.67422,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://se.ua/en/projects/llc-cement-odessa-cement-plant/ ",
|
||||||
|
"Overin Ltd","Amvrosievka",800,"UA",47.83453,38.46961,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information","assumed equal split"
|
||||||
|
"Overin Ltd","Kamenskoye",800,"UA",48.51783,34.63382,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information","assumed equal split"
|
||||||
|
"Overin Ltd","Kriviy Rih",800,"UA",47.87454,33.43586,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information","assumed equal split"
|
||||||
|
"PAO Eurocement Ukraine","Balakleya, Kharkivs'ka",1000,"UA",49.49314,36.74926,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.globalcement.com/news/item/13733-update-on-ukraine-february-2022 ",
|
||||||
|
"PAO Ivano-Frankovsktsement","Ivano-Frankivsk ",3600,"UA",48.97709,24.71227,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information",
|
||||||
|
"PAO Kramatorkiy Tsementnyi Zavod PUSHKA ","Kramatorsk, Donets'ka",138,"UA",48.72802,37.54362,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.cemnet.com/News/story/144668/pushka-ups-cement-production-56-6p-per-cent-to138-400t-in-q1.html ",
|
||||||
|
"PAO Podolsk Cement","Khmel'nyts'ka Oblast' ",2050,"UA",48.7461,26.64664,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://cemark.ua/en/zavodi/at-podilskiy-cement ",
|
||||||
|
"PAO Volyn'Cement","Volyn'ska Oblast'",2000,"UA",50.54731,26.25774,"28-08-2024","https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information https://www.dyckerhoff.com.ua/volyn-cement ",
|
|
15
data/refineries-noneu.csv
Normal file
15
data/refineries-noneu.csv
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
"Site","Capacity [bbl/day]","Country","Latitude","Longitude","Date","Source","Comment"
|
||||||
|
"Modrica",1,"BA",44.95978,18.31294,"29-08-2024","https://modricaoil.com/Content/Read/onama?lang=en-US","the only one"
|
||||||
|
"OKTA, Skopje",1,"MK",42.0022,21.65532,"29-08-2024","https://en.wikipedia.org/wiki/OKTA","the only one"
|
||||||
|
"Ballsh",20000,"AL",40.60468,19.75231,"29-08-2024","https://www.trade.gov/country-commercial-guides/albania-oil-and-gas",
|
||||||
|
"Fier",10000,"AL",40.70095,19.54698,"29-08-2024","https://www.trade.gov/country-commercial-guides/albania-oil-and-gas",
|
||||||
|
"Elbasan",5000,"AL",41.08621,20.00762,"29-08-2024","https://www.trade.gov/country-commercial-guides/albania-oil-and-gas",
|
||||||
|
"Pančevo",96000,"RS",44.83051,20.68127,"29-08-2024","https://en.wikipedia.org/wiki/Naftna_Industrija_Srbije",
|
||||||
|
"Novi Sad",52000,"RS",45.27559,19.86733,"29-08-2024","https://en.wikipedia.org/wiki/Naftna_Industrija_Srbije",
|
||||||
|
"Halychyna Refinery (Pryvat), Drohobych",40000,"UA",49.34,23.4851,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
|
||||||
|
"Kherson Refinery (Alliance)",36000,"UA",46.65946,32.57479,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
|
||||||
|
"Kremenchuk Refinery (Ukrtatnafta)",368500,"UA",49.15299,33.4327,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
|
||||||
|
"LINOS Refinery, Lysychansk Oil Refinery (TNK-BP)",320000,"UA",48.84876,38.29979,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
|
||||||
|
"Lviv Oil Research & Refinery",18000,"UA",49.80662,24.04376,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries","capacity estimated based on number of employees"
|
||||||
|
"Naftokhimik Prykarpattya (Pryvat) Nadvirna",39000,"UA",48.62873,24.59924,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
|
||||||
|
"Odesa Refinery (LUKOIL)",70000,"UA",46.51189,30.68805,"29-08-2024","https://en.wikipedia.org/wiki/List_of_oil_refineries",
|
|
@ -11,6 +11,31 @@ Release Notes
|
|||||||
Upcoming Release
|
Upcoming Release
|
||||||
================
|
================
|
||||||
|
|
||||||
|
* Added data on the locations and capacities of ammonia plants in Europe.
|
||||||
|
This data is used as a spatial distribution key for the ammonia demand.
|
||||||
|
The data manually collected with sources noted in ``data/ammonia_plants.csv``.
|
||||||
|
|
||||||
|
* Added data on the locations and capacities of cement plants in Europe that are
|
||||||
|
not included in the Hotmaps industrial database. The data sourced from the
|
||||||
|
`USGS 2019 Minerals Yearbooks
|
||||||
|
<https://www.usgs.gov/centers/national-minerals-information-center/international-minerals-statistics-and-information>`__
|
||||||
|
of specific countries is used as a spatial distribution key for the cement
|
||||||
|
demand. The data is stored in ``data/cement-plants-noneu.csv``.
|
||||||
|
|
||||||
|
* Added data on the locations and capacities of refineries in Europe that are
|
||||||
|
not included in the Hotmaps industrial database. The data is mostly sourced
|
||||||
|
from the `Wikipedia list of oil refineries
|
||||||
|
<https://en.wikipedia.org/wiki/List_of_oil_refineries>`__. The data is stored
|
||||||
|
in ``data/refineries-noneu.csv``.
|
||||||
|
|
||||||
|
* Included data from the `Global Steel Plant Tracker
|
||||||
|
<https://globalenergymonitor.org/projects/global-steel-plant-tracker/>`__
|
||||||
|
provided by Global Energy Monitor. The data includes among other attributes
|
||||||
|
the locations, ages, operating status, relining dates, manufacturing process
|
||||||
|
and capacities of steel plants in Europe. This data is used as a spatial
|
||||||
|
distribution key for the steel production, which is now separated by process
|
||||||
|
type (EAF, DRI + EAF, integrated).
|
||||||
|
|
||||||
* Retrieve share of urban population from `World Bank API
|
* Retrieve share of urban population from `World Bank API
|
||||||
<https://data.worldbank.org/indicator/SP.URB.TOTL.IN.ZS>`__. The data
|
<https://data.worldbank.org/indicator/SP.URB.TOTL.IN.ZS>`__. The data
|
||||||
originates from the United Nations Population Division. Previously, a file
|
originates from the United Nations Population Division. Previously, a file
|
||||||
|
@ -575,10 +575,14 @@ rule build_industrial_distribution_key:
|
|||||||
input:
|
input:
|
||||||
regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
regions_onshore=resources("regions_onshore_elec_s{simpl}_{clusters}.geojson"),
|
||||||
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
clustered_pop_layout=resources("pop_layout_elec_s{simpl}_{clusters}.csv"),
|
||||||
hotmaps_industrial_database=storage(
|
hotmaps=storage(
|
||||||
"https://gitlab.com/hotmaps/industrial_sites/industrial_sites_Industrial_Database/-/raw/master/data/Industrial_Database.csv",
|
"https://gitlab.com/hotmaps/industrial_sites/industrial_sites_Industrial_Database/-/raw/master/data/Industrial_Database.csv",
|
||||||
keep_local=True,
|
keep_local=True,
|
||||||
),
|
),
|
||||||
|
gem_gspt="data/gem/Global-Steel-Plant-Tracker-April-2024-Standard-Copy-V1.xlsx",
|
||||||
|
ammonia="data/ammonia_plants.csv",
|
||||||
|
cement_supplement="data/cement-plants-noneu.csv",
|
||||||
|
refineries_supplement="data/refineries-noneu.csv",
|
||||||
output:
|
output:
|
||||||
industrial_distribution_key=resources(
|
industrial_distribution_key=resources(
|
||||||
"industrial_distribution_key_elec_s{simpl}_{clusters}.csv"
|
"industrial_distribution_key_elec_s{simpl}_{clusters}.csv"
|
||||||
|
@ -321,6 +321,23 @@ if config["enable"]["retrieve"]:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if config["enable"]["retrieve"]:
|
||||||
|
|
||||||
|
rule retrieve_gem_steel_plant_tracker:
|
||||||
|
output:
|
||||||
|
"data/gem/Global-Steel-Plant-Tracker-April-2024-Standard-Copy-V1.xlsx",
|
||||||
|
run:
|
||||||
|
import requests
|
||||||
|
|
||||||
|
response = requests.get(
|
||||||
|
"https://globalenergymonitor.org/wp-content/uploads/2024/04/Global-Steel-Plant-Tracker-April-2024-Standard-Copy-V1.xlsx",
|
||||||
|
headers={"User-Agent": "Mozilla/5.0"},
|
||||||
|
)
|
||||||
|
with open(output[0], "wb") as f:
|
||||||
|
f.write(response.content)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if config["enable"]["retrieve"]:
|
if config["enable"]["retrieve"]:
|
||||||
# Some logic to find the correct file URL
|
# Some logic to find the correct file URL
|
||||||
# Sometimes files are released delayed or ahead of schedule, check which file is currently available
|
# Sometimes files are released delayed or ahead of schedule, check which file is currently available
|
||||||
|
@ -100,7 +100,7 @@ def prepare_hotmaps_database(regions):
|
|||||||
"""
|
"""
|
||||||
Load hotmaps database of industrial sites and map onto bus regions.
|
Load hotmaps database of industrial sites and map onto bus regions.
|
||||||
"""
|
"""
|
||||||
df = pd.read_csv(snakemake.input.hotmaps_industrial_database, sep=";", index_col=0)
|
df = pd.read_csv(snakemake.input.hotmaps, sep=";", index_col=0)
|
||||||
|
|
||||||
df[["srid", "coordinates"]] = df.geom.str.split(";", expand=True)
|
df[["srid", "coordinates"]] = df.geom.str.split(";", expand=True)
|
||||||
|
|
||||||
@ -133,7 +133,97 @@ def prepare_hotmaps_database(regions):
|
|||||||
return gdf
|
return gdf
|
||||||
|
|
||||||
|
|
||||||
def build_nodal_distribution_key(hotmaps, regions, countries):
|
def prepare_gem_database(regions):
|
||||||
|
"""
|
||||||
|
Load GEM database of steel plants and map onto bus regions.
|
||||||
|
"""
|
||||||
|
|
||||||
|
df = pd.read_excel(
|
||||||
|
snakemake.input.gem_gspt,
|
||||||
|
sheet_name="Steel Plants",
|
||||||
|
na_values=["N/A", "unknown", ">0"],
|
||||||
|
).query("Region == 'Europe'")
|
||||||
|
|
||||||
|
df["Retired Date"] = pd.to_numeric(
|
||||||
|
df["Retired Date"].combine_first(df["Idled Date"]), errors="coerce"
|
||||||
|
)
|
||||||
|
df["Start date"] = pd.to_numeric(
|
||||||
|
df["Start date"].str.split("-").str[0], errors="coerce"
|
||||||
|
)
|
||||||
|
|
||||||
|
latlon = (
|
||||||
|
df["Coordinates"]
|
||||||
|
.str.split(", ", expand=True)
|
||||||
|
.rename(columns={0: "lat", 1: "lon"})
|
||||||
|
)
|
||||||
|
geometry = gpd.points_from_xy(latlon["lon"], latlon["lat"])
|
||||||
|
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
|
||||||
|
|
||||||
|
gdf = gpd.sjoin(gdf, regions, how="inner", predicate="within")
|
||||||
|
|
||||||
|
gdf.rename(columns={"name": "bus"}, inplace=True)
|
||||||
|
gdf["country"] = gdf.bus.str[:2]
|
||||||
|
|
||||||
|
return gdf
|
||||||
|
|
||||||
|
|
||||||
|
def prepare_ammonia_database(regions):
|
||||||
|
"""
|
||||||
|
Load ammonia database of plants and map onto bus regions.
|
||||||
|
"""
|
||||||
|
df = pd.read_csv(snakemake.input.ammonia, index_col=0)
|
||||||
|
|
||||||
|
geometry = gpd.points_from_xy(df.Longitude, df.Latitude)
|
||||||
|
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
|
||||||
|
|
||||||
|
gdf = gpd.sjoin(gdf, regions, how="inner", predicate="within")
|
||||||
|
|
||||||
|
gdf.rename(columns={"name": "bus"}, inplace=True)
|
||||||
|
gdf["country"] = gdf.bus.str[:2]
|
||||||
|
|
||||||
|
return gdf
|
||||||
|
|
||||||
|
|
||||||
|
def prepare_cement_supplement(regions):
|
||||||
|
"""
|
||||||
|
Load supplementary cement plants from non-EU-(NO-CH) and map onto bus
|
||||||
|
regions.
|
||||||
|
"""
|
||||||
|
|
||||||
|
df = pd.read_csv(snakemake.input.cement_supplement, index_col=0)
|
||||||
|
|
||||||
|
geometry = gpd.points_from_xy(df.Longitude, df.Latitude)
|
||||||
|
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
|
||||||
|
|
||||||
|
gdf = gpd.sjoin(gdf, regions, how="inner", predicate="within")
|
||||||
|
|
||||||
|
gdf.rename(columns={"name": "bus"}, inplace=True)
|
||||||
|
gdf["country"] = gdf.bus.str[:2]
|
||||||
|
|
||||||
|
return gdf
|
||||||
|
|
||||||
|
|
||||||
|
def prepare_refineries_supplement(regions):
|
||||||
|
"""
|
||||||
|
Load supplementary refineries from non-EU-(NO-CH) and map onto bus regions.
|
||||||
|
"""
|
||||||
|
|
||||||
|
df = pd.read_csv(snakemake.input.refineries_supplement, index_col=0)
|
||||||
|
|
||||||
|
geometry = gpd.points_from_xy(df.Longitude, df.Latitude)
|
||||||
|
gdf = gpd.GeoDataFrame(df, geometry=geometry, crs="EPSG:4326")
|
||||||
|
|
||||||
|
gdf = gpd.sjoin(gdf, regions, how="inner", predicate="within")
|
||||||
|
|
||||||
|
gdf.rename(columns={"name": "bus"}, inplace=True)
|
||||||
|
gdf["country"] = gdf.bus.str[:2]
|
||||||
|
|
||||||
|
return gdf
|
||||||
|
|
||||||
|
|
||||||
|
def build_nodal_distribution_key(
|
||||||
|
hotmaps, gem, ammonia, cement, refineries, regions, countries
|
||||||
|
):
|
||||||
"""
|
"""
|
||||||
Build nodal distribution keys for each sector.
|
Build nodal distribution keys for each sector.
|
||||||
"""
|
"""
|
||||||
@ -158,15 +248,137 @@ def build_nodal_distribution_key(hotmaps, regions, countries):
|
|||||||
if emissions.sum() == 0:
|
if emissions.sum() == 0:
|
||||||
key = pd.Series(1 / len(facilities), facilities.index)
|
key = pd.Series(1 / len(facilities), facilities.index)
|
||||||
else:
|
else:
|
||||||
# BEWARE: this is a strong assumption
|
# assume 20% quantile for missing values
|
||||||
emissions = emissions.fillna(emissions.mean())
|
emissions = emissions.fillna(emissions.quantile(0.2))
|
||||||
key = emissions / emissions.sum()
|
key = emissions / emissions.sum()
|
||||||
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
|
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
|
||||||
|
elif sector == "Cement" and country in cement.country.unique():
|
||||||
|
facilities = cement.query("country == @country")
|
||||||
|
production = facilities["Cement [kt/a]"]
|
||||||
|
if production.sum() == 0:
|
||||||
|
key = pd.Series(1 / len(facilities), facilities.index)
|
||||||
|
else:
|
||||||
|
key = production / production.sum()
|
||||||
|
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
|
||||||
|
elif sector == "Refineries" and country in refineries.country.unique():
|
||||||
|
facilities = refineries.query("country == @country")
|
||||||
|
production = facilities["Capacity [bbl/day]"]
|
||||||
|
if production.sum() == 0:
|
||||||
|
key = pd.Series(1 / len(facilities), facilities.index)
|
||||||
|
else:
|
||||||
|
key = production / production.sum()
|
||||||
|
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
|
||||||
else:
|
else:
|
||||||
key = keys.loc[regions_ct, "population"]
|
key = keys.loc[regions_ct, "population"]
|
||||||
|
|
||||||
keys.loc[regions_ct, sector] = key
|
keys.loc[regions_ct, sector] = key
|
||||||
|
|
||||||
|
# add specific steel subsectors
|
||||||
|
steel_processes = ["EAF", "DRI + EAF", "Integrated steelworks"]
|
||||||
|
for process, country in product(steel_processes, countries):
|
||||||
|
regions_ct = regions.index[regions.index.str.contains(country)]
|
||||||
|
|
||||||
|
facilities = gem.query("country == @country")
|
||||||
|
|
||||||
|
if process == "EAF":
|
||||||
|
status_list = [
|
||||||
|
"construction",
|
||||||
|
"operating",
|
||||||
|
"operating pre-retirement",
|
||||||
|
"retired",
|
||||||
|
]
|
||||||
|
capacities = facilities.loc[
|
||||||
|
facilities["Capacity operating status"].isin(status_list)
|
||||||
|
& (
|
||||||
|
facilities["Retired Date"].isna()
|
||||||
|
| facilities["Retired Date"].gt(2025)
|
||||||
|
),
|
||||||
|
"Nominal EAF steel capacity (ttpa)",
|
||||||
|
].dropna()
|
||||||
|
elif process == "DRI + EAF":
|
||||||
|
status_list = [
|
||||||
|
"construction",
|
||||||
|
"operating",
|
||||||
|
"operating pre-retirement",
|
||||||
|
"retired",
|
||||||
|
"announced",
|
||||||
|
]
|
||||||
|
sel = [
|
||||||
|
"Nominal BOF steel capacity (ttpa)",
|
||||||
|
"Nominal OHF steel capacity (ttpa)",
|
||||||
|
"Nominal iron capacity (ttpa)",
|
||||||
|
]
|
||||||
|
status_filter = facilities["Capacity operating status"].isin(status_list)
|
||||||
|
retirement_filter = facilities["Retired Date"].isna() | facilities[
|
||||||
|
"Retired Date"
|
||||||
|
].gt(2030)
|
||||||
|
start_filter = (
|
||||||
|
facilities["Start date"].isna()
|
||||||
|
& ~facilities["Capacity operating status"].eq("announced")
|
||||||
|
) | facilities["Start date"].le(2030)
|
||||||
|
capacities = (
|
||||||
|
facilities.loc[status_filter & retirement_filter & start_filter, sel]
|
||||||
|
.sum(axis=1)
|
||||||
|
.dropna()
|
||||||
|
)
|
||||||
|
elif process == "Integrated steelworks":
|
||||||
|
status_list = [
|
||||||
|
"construction",
|
||||||
|
"operating",
|
||||||
|
"operating pre-retirement",
|
||||||
|
"retired",
|
||||||
|
]
|
||||||
|
sel = [
|
||||||
|
"Nominal BOF steel capacity (ttpa)",
|
||||||
|
"Nominal OHF steel capacity (ttpa)",
|
||||||
|
]
|
||||||
|
capacities = (
|
||||||
|
facilities.loc[
|
||||||
|
facilities["Capacity operating status"].isin(status_list)
|
||||||
|
& (
|
||||||
|
facilities["Retired Date"].isna()
|
||||||
|
| facilities["Retired Date"].gt(2025)
|
||||||
|
),
|
||||||
|
sel,
|
||||||
|
]
|
||||||
|
.sum(axis=1)
|
||||||
|
.dropna()
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unknown process {process}")
|
||||||
|
|
||||||
|
if not capacities.empty:
|
||||||
|
if capacities.sum() == 0:
|
||||||
|
key = pd.Series(1 / len(capacities), capacities.index)
|
||||||
|
else:
|
||||||
|
key = capacities / capacities.sum()
|
||||||
|
buses = facilities.loc[capacities.index, "bus"]
|
||||||
|
key = key.groupby(buses).sum().reindex(regions_ct, fill_value=0.0)
|
||||||
|
else:
|
||||||
|
key = keys.loc[regions_ct, "population"]
|
||||||
|
|
||||||
|
keys.loc[regions_ct, process] = key
|
||||||
|
|
||||||
|
# add ammonia
|
||||||
|
for country in countries:
|
||||||
|
regions_ct = regions.index[regions.index.str.contains(country)]
|
||||||
|
|
||||||
|
facilities = ammonia.query("country == @country")
|
||||||
|
|
||||||
|
if not facilities.empty:
|
||||||
|
production = facilities["Ammonia [kt/a]"]
|
||||||
|
if production.sum() == 0:
|
||||||
|
key = pd.Series(1 / len(facilities), facilities.index)
|
||||||
|
else:
|
||||||
|
# assume 50% of the minimum production for missing values
|
||||||
|
production = production.fillna(0.5 * facilities["Ammonia [kt/a]"].min())
|
||||||
|
key = production / production.sum()
|
||||||
|
key = key.groupby(facilities.bus).sum().reindex(regions_ct, fill_value=0.0)
|
||||||
|
else:
|
||||||
|
key = 0.0
|
||||||
|
|
||||||
|
keys.loc[regions_ct, "Ammonia"] = key
|
||||||
|
|
||||||
return keys
|
return keys
|
||||||
|
|
||||||
|
|
||||||
@ -188,6 +400,16 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
hotmaps = prepare_hotmaps_database(regions)
|
hotmaps = prepare_hotmaps_database(regions)
|
||||||
|
|
||||||
keys = build_nodal_distribution_key(hotmaps, regions, countries)
|
gem = prepare_gem_database(regions)
|
||||||
|
|
||||||
|
ammonia = prepare_ammonia_database(regions)
|
||||||
|
|
||||||
|
cement = prepare_cement_supplement(regions)
|
||||||
|
|
||||||
|
refineries = prepare_refineries_supplement(regions)
|
||||||
|
|
||||||
|
keys = build_nodal_distribution_key(
|
||||||
|
hotmaps, gem, ammonia, cement, refineries, regions, countries
|
||||||
|
)
|
||||||
|
|
||||||
keys.to_csv(snakemake.output.industrial_distribution_key)
|
keys.to_csv(snakemake.output.industrial_distribution_key)
|
||||||
|
@ -33,10 +33,10 @@ from _helpers import set_scenario_config
|
|||||||
|
|
||||||
# map JRC/our sectors to hotmaps sector, where mapping exist
|
# map JRC/our sectors to hotmaps sector, where mapping exist
|
||||||
sector_mapping = {
|
sector_mapping = {
|
||||||
"Electric arc": "Iron and steel",
|
"Electric arc": "EAF",
|
||||||
"Integrated steelworks": "Iron and steel",
|
"Integrated steelworks": "Integrated steelworks",
|
||||||
"DRI + Electric arc": "Iron and steel",
|
"DRI + Electric arc": "DRI + EAF",
|
||||||
"Ammonia": "Chemical industry",
|
"Ammonia": "Ammonia",
|
||||||
"Basic chemicals (without ammonia)": "Chemical industry",
|
"Basic chemicals (without ammonia)": "Chemical industry",
|
||||||
"Other chemicals": "Chemical industry",
|
"Other chemicals": "Chemical industry",
|
||||||
"Pharmaceutical products etc.": "Chemical industry",
|
"Pharmaceutical products etc.": "Chemical industry",
|
||||||
|
@ -32,10 +32,10 @@ from _helpers import set_scenario_config
|
|||||||
|
|
||||||
# map JRC/our sectors to hotmaps sector, where mapping exist
|
# map JRC/our sectors to hotmaps sector, where mapping exist
|
||||||
sector_mapping = {
|
sector_mapping = {
|
||||||
"Electric arc": "Iron and steel",
|
"Electric arc": "EAF",
|
||||||
"Integrated steelworks": "Iron and steel",
|
"Integrated steelworks": "Integrated steelworks",
|
||||||
"DRI + Electric arc": "Iron and steel",
|
"DRI + Electric arc": "DRI + EAF",
|
||||||
"Ammonia": "Chemical industry",
|
"Ammonia": "Ammonia",
|
||||||
"HVC": "Chemical industry",
|
"HVC": "Chemical industry",
|
||||||
"HVC (mechanical recycling)": "Chemical industry",
|
"HVC (mechanical recycling)": "Chemical industry",
|
||||||
"HVC (chemical recycling)": "Chemical industry",
|
"HVC (chemical recycling)": "Chemical industry",
|
||||||
|
Loading…
Reference in New Issue
Block a user