From bdaa88ef8fea97bd8dfd180a4b8d7db4422d33a0 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Tue, 23 Jul 2024 11:55:47 +0200 Subject: [PATCH 01/22] change the name translation to find mistakes --- .../Variable_name_IAMC.xlsx | Bin 17328 -> 18504 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Conversion-Script/Variable_Reference/Variable_name_IAMC.xlsx b/Conversion-Script/Variable_Reference/Variable_name_IAMC.xlsx index 89388852d6b530be11092c75d6717702e11fdbc5..9f9671573cc96a795bf8508122c67830b601d5cc 100644 GIT binary patch delta 12522 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 z ztNJcS5vm7LW|=xGJbd$1v;v_V6|Udv?tZT)d=9$d1d3H!QG0DzeSzQOhKQq^@-4NS zuUDqK^j%bIZn8l1&NF>W7FH_2tIyh_Zx-&|*Wj`_qu=DCOSK|rfdY36RtbDT*c_@o z!PYwXB=>9pYoxPVeMu{|i2h5Ji|fpsga`0|1iDoHT9nSXp5wbLWRku9zx zZd1((y+RTtFq7(t6H-Hpm#zjfptkEpXuqE2i?q-1P)s9RG8hQWC_@_(^;&kpLkohi zqb?YRY>h!WKc3vXgKiSK37=?5kbXq51@J@)Y=$^p@_E!zZs18r!m?yk{9Ly#sZ-Zq zp;YEU!-Zf{q>b7G8s*c`eb*B?9eAb}>ig-V+As11vCDr9z`*>oKzHXax`gAs%BPBY z)DfP0e#Ks>ImX@ z*b)UMbmQnB6wsZ5W2?lp{q|rlmBJY<3*_Ieb6bGbTo97-_h$A2^R+L@ zvt0W)g8C+6EF>n$O1JA37^(WSN|cW6Dxb~x(;V_D!ImRKCUvpfR#3gYUsb~=P)YV^ z2+DG^qdX*eT_lWZ-x%|>yiqlTo?*98X!<}YKWA_qh;$dlA}D+SxH!sxQdO4b5M;Wc zrcr81bS6=3z4J%0F`7(gdu@My3cV88c1rqzk&HBHhHs0rB(Rp?8$sj<=@rK%#QoCN zhrRi`mUxbE@0Z-lT?@0ptIXy+0{GOieszneQHtFn8@mPq3kS8Qr>mSUJ$W!`d{G*- z$(9w2fP_E7=29dL184v`Ip`BV^h6cj&Oc zF|56+Q#-KidcB)qn(-qd#Zzt7-jsn-ZHYybTc@zLrmI>&24%#AXZDXJMJCPmr@$4g zEi4~-*GW-x8@qac!j_-8e&d~9Zlx-Gis194V6E?(#5lxro0tvD$+AUDB0*(;dnlJI zH~HmZ%3m(#EmgV-i*$Znqv~3;Yc`-n2}YNGij8YwK2H{V$AN!6EB&0oDX9wTy7c!8NQAV*fyp~gZDPm_eIY_-nt|$RTHxg2IJu}B3_#zq~ zf?13O8Tj19T)n1C8jhqDEt2g@8{tcjNOaiF{Dp0E1Kmd>hA>^@Kh5&Sfv{5d-J%Gy;S2qUwN};b8@GjX9iUA!GNo4TZn!HWT_}3?xo4020u1lT5 z4E>sJY8FzY0P?clPBXbk@B?(Sqo1^(0;aU_wtxz< z!CmNN0qR2C87r3uiO=`~@tLb8Q2Z{RatuA)OxWf>8FZVQ#nuw}1X%r4-pqtTVu!Am zq2;tg8k^M#siQB4zd`O)9c>)0_d;vypfxKTeR#67Xf-&bG?`F2Ho2$C3TeDi~vN+SjlRf!mo29i~czGSCcwG4_;->JQ3{Q;fMDf*>XdfT;}ug>Egr0xxUZVv#$c z)|D4+byI7N*WT|9TUWYi9HH4^>BihCTu2Gn`qQ`P&@3;sX%y)z3!-OPr&vcztn+IL z%CRHDGAA##*Ehn_(6NA)jl|T%6Vp*KRD3WsKlYUR* z+4r(+^JE@3VNKnrvCM?%9Vb-^JriwuR~h+8m082ivJ+yn zQB{;V2+pq5?^XWDm6!69#iR_N4o!X$u^uJyXBMlY&d(?VvEo%0B63WYFb5JdL{Ig< z5bg_Da7>v~!$Lp)un4c8dm*Rt;pE`aQ}y=gyVwi2iSwjA+godDRqBixAs)Cw&$$pE zD3LoYoH|owcK%Ten~tiLdqbf@$e9m1i$xZnAigS>EXl&7Tp?!1u)Yj(LcHyBZu|1( zcF~&UM0aTf6fi}{NuatzaaJ+IOFd@o&+a7dTU7W#jZ`1&3=9~itwZ*$^gr- z4AjNu02Pn)V2Kj#a(PgMl<<+MfjS*#zK)5en%s+v#L>_Bl zM45N-Ii#c9=_LDkWizV*`S+#Fc3EErf7SBQgOF)5Q<8B_`z&@!Ve1rw_aE5bB?D$F zX>Z%~`B4}B7fv@aw>M9-a z*A*i&@J;zsIoTsJhPS4ombVVD^VgRp_YlD+l+jLVrxm{xQ`T}Y3iBQ#H-_4?`k^1& zI0DvbEB7_=NtL1t7EHSmb$w?^kV(jXZu3Nnfouejg};uMVA5C%5W5Q#{mA{&P(u%8 zxVPj)C03gR1B0wuY6n3vx_BU(kaW1JVHU2j(x?p^))yzyE4g`aR!7F$`TQ%juGq5SP!!ew|LQ?VhZbGGf2duweBr7A!4?pMZ zeetO4%vI~_53vEey@DuWlFODa z%^;8{?lAkv5%=O}Ly1_kN6#ta7N()dc|j{pNJO#ABQzQwZxYcfkv+&Rr0{rv<8$_- ziIx2br?7<(5@Y1ThlwriD~l)az}ayBPSI>)E3JpbD~cHSznE^fk}lJqss(LUy!P(hgYWkuCnfXChL&q#w)az<+x&!56U5Fz;vvs{wVSLUa%y>t1&BHoPY^X?MNGo&4@aRNr_5LVD_) z0v^p}UTa$&*^!fTrqKxSl(_wJ#x%P?>ynw_*LB>a{g@$D?BF3NF`@yfl)OEY)Ku(ql;sgCXpUQmp&_*iC^q zmYNn+&q?yvz?yS8K*+nwQ+f5TTesaNQ2QOjFROiQtymb(RtsAtfg_dBj*kC+w5KUy6uj;Ld zz$NC%^31SbK!i}BpI0##sUPeg)j*lMy12t2`Y`%Cs>%L$MCEzy!@o^SP~bgSw7OXl zco>BLG{}N?CDkBuz&ui3@&7e!{tJj@05^Xy{98O9(eHk^ rml*#Y{kS6H182(!LCy+*H)I4M%Y?xsvLvWT03<;72XsmFAMF1F!1P1# From 86b210e09a530ffed9e39d58c1bd5398bdceb26a Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Tue, 23 Jul 2024 12:50:38 +0200 Subject: [PATCH 02/22] change in subscript dict for the automatic translation --- .../Create_Variable_Dict/energy_dict.txt | 74 ++++----- .../Create_Variable_Dict/sectors_dict.txt | 66 ++++++++ .../Create_Variable_Dict/variable_dict.ipynb | 155 +++++++++++++++++- 3 files changed, 256 insertions(+), 39 deletions(-) create mode 100644 Conversion-Script/Create_Variable_Dict/sectors_dict.txt diff --git a/Conversion-Script/Create_Variable_Dict/energy_dict.txt b/Conversion-Script/Create_Variable_Dict/energy_dict.txt index b024359..ff4fc2f 100644 --- a/Conversion-Script/Create_Variable_Dict/energy_dict.txt +++ b/Conversion-Script/Create_Variable_Dict/energy_dict.txt @@ -17,44 +17,44 @@ 'PE_solar': 'Solar', 'PE_waste': 'Waste', 'PE_wind': 'Wind', - 'PROTRA_CHP_gas_fuels': 'Electricity and Heat|gas fuels|w/o CCS', - 'PROTRA_CHP_gas_fuels_CCS': 'Electricity and Heat|gas fuels|w/ CCS', + 'PROTRA_CHP_gas_fuels': 'Electricity and Heat|Gas fuels|w/o CCS', + 'PROTRA_CHP_gas_fuels_CCS': 'Electricity and Heat|Gas fuels|w/ CCS', 'PROTRA_CHP_geothermal_DEACTIVATED': 'Electricity and ' - 'Heat|geothermal|DEACTIVATED', - 'PROTRA_CHP_liquid_fuels': 'Electricity and Heat|liquid fuels|w/o CCS', - 'PROTRA_CHP_liquid_fuels_CCS': 'Electricity and Heat|liquid fuels|w/ CCS', - 'PROTRA_CHP_solid_bio': 'Electricity and Heat|solid|biomass|w/o CCS', - 'PROTRA_CHP_solid_bio_CCS': 'Electricity and Heat|solid|biomass|w/ CCS', - 'PROTRA_CHP_solid_fossil': 'Electricity and Heat|solid|fossil|w/o CCS', - 'PROTRA_CHP_solid_fossil_CCS': 'Electricity and Heat|solid|fossil|w/ CCS', - 'PROTRA_CHP_waste': 'Electricity and Heat|waste', - 'PROTRA_HP_gas_fuels': 'Heat|gas fuels', - 'PROTRA_HP_geothermal': 'Heat|geothermal', - 'PROTRA_HP_liquid_fuels': 'Heat|liquid fuels', - 'PROTRA_HP_solar_DEACTIVATED': 'Heat|solar|DEACTIVATED', - 'PROTRA_HP_solid_bio': 'Heat|solid|biomass', - 'PROTRA_HP_solid_fossil': 'Heat|solid|fossil', - 'PROTRA_HP_waste': 'Heat|waste', - 'PROTRA_PP_gas_fuels': 'Electricity|gas fuels|w/o CCS', - 'PROTRA_PP_gas_fuels_CCS': 'Electricity|gas fuels|w/ CCS', - 'PROTRA_PP_geothermal': 'Electricity|geothermal', - 'PROTRA_PP_hydropower_dammed': 'Electricity|hydro|dammed', - 'PROTRA_PP_hydropower_run_of_river': 'Electricity|hydro|run of river', - 'PROTRA_PP_liquid_fuels': 'Electricity|liquid fuels|w/o CCS', - 'PROTRA_PP_liquid_fuels_CCS': 'Electricity|liquid fuels|w/ CCS', - 'PROTRA_PP_nuclear': 'Electricity|nuclear', - 'PROTRA_PP_oceanic': 'Electricity|ocean', - 'PROTRA_PP_solar_CSP': 'Electricity|solar|CSP', - 'PROTRA_PP_solar_open_space_PV': 'Electricity|solar|open space|PV', - 'PROTRA_PP_solar_urban_PV': 'Electricity|solar|urban|PV', - 'PROTRA_PP_solid_bio': 'Electricity|solid|biomass|w/o CCS', - 'PROTRA_PP_solid_bio_CCS': 'Electricity|solid|biomass|w/ CCS', - 'PROTRA_PP_solid_fossil': 'Electricity|solid|fossil|w/o CCS', - 'PROTRA_PP_solid_fossil_CCS': 'Electricity|solid|fossil|w/ CCS', - 'PROTRA_PP_waste': 'Electricity|waste|w/o CCS', - 'PROTRA_PP_waste_CCS': 'Electricity|waste|w/ CCS', - 'PROTRA_PP_wind_offshore': 'Electricity|wind|offshore', - 'PROTRA_PP_wind_onshore': 'Electricity|wind|onshore', + 'Heat|Geothermal|Deactivated', + 'PROTRA_CHP_liquid_fuels': 'Electricity and Heat|Liquid fuels|w/o CCS', + 'PROTRA_CHP_liquid_fuels_CCS': 'Electricity and Heat|Liquid fuels|w/ CCS', + 'PROTRA_CHP_solid_bio': 'Electricity and Heat|Solid|Biomass|w/o CCS', + 'PROTRA_CHP_solid_bio_CCS': 'Electricity and Heat|Solid|Biomass|w/ CCS', + 'PROTRA_CHP_solid_fossil': 'Electricity and Heat|Solid|Fossil|w/o CCS', + 'PROTRA_CHP_solid_fossil_CCS': 'Electricity and Heat|Solid|Fossil|w/ CCS', + 'PROTRA_CHP_waste': 'Electricity and Heat|Waste', + 'PROTRA_HP_gas_fuels': 'Heat|Gas fuels', + 'PROTRA_HP_geothermal': 'Heat|Geothermal', + 'PROTRA_HP_liquid_fuels': 'Heat|Liquid fuels', + 'PROTRA_HP_solar_DEACTIVATED': 'Heat|Solar|Deactivated', + 'PROTRA_HP_solid_bio': 'Heat|Solid|Biomass', + 'PROTRA_HP_solid_fossil': 'Heat|Solid|Fossil', + 'PROTRA_HP_waste': 'Heat|Waste', + 'PROTRA_PP_gas_fuels': 'Electricity|Gas fuels|w/o CCS', + 'PROTRA_PP_gas_fuels_CCS': 'Electricity|Gas fuels|w/ CCS', + 'PROTRA_PP_geothermal': 'Electricity|Geothermal', + 'PROTRA_PP_hydropower_dammed': 'Electricity|Hydro|Dammed', + 'PROTRA_PP_hydropower_run_of_river': 'Electricity|Hydro|Run of river', + 'PROTRA_PP_liquid_fuels': 'Electricity|Liquid fuels|w/o CCS', + 'PROTRA_PP_liquid_fuels_CCS': 'Electricity|Liquid fuels|w/ CCS', + 'PROTRA_PP_nuclear': 'Electricity|Nuclear', + 'PROTRA_PP_oceanic': 'Electricity|Ocean', + 'PROTRA_PP_solar_CSP': 'Electricity|Solar|Csp', + 'PROTRA_PP_solar_open_space_PV': 'Electricity|Solar|Open space|Pv', + 'PROTRA_PP_solar_urban_PV': 'Electricity|Solar|Urban|Pv', + 'PROTRA_PP_solid_bio': 'Electricity|Solid|Biomass|w/o CCS', + 'PROTRA_PP_solid_bio_CCS': 'Electricity|Solid|Biomass|w/ CCS', + 'PROTRA_PP_solid_fossil': 'Electricity|Solid|Fossil|w/o CCS', + 'PROTRA_PP_solid_fossil_CCS': 'Electricity|Solid|Fossil|w/ CCS', + 'PROTRA_PP_waste': 'Electricity|Waste|w/o CCS', + 'PROTRA_PP_waste_CCS': 'Electricity|Waste|w/ CCS', + 'PROTRA_PP_wind_offshore': 'Electricity|Wind|Offshore', + 'PROTRA_PP_wind_onshore': 'Electricity|Wind|Onshore', 'PROTRA_blending_gas_fuels': 'Gas Fuels', 'PROTRA_blending_liquid_fuels': 'Liquid Fuels', 'PROTRA_no_process_TI_hydrogen': 'Hydrogen', diff --git a/Conversion-Script/Create_Variable_Dict/sectors_dict.txt b/Conversion-Script/Create_Variable_Dict/sectors_dict.txt new file mode 100644 index 0000000..44262b8 --- /dev/null +++ b/Conversion-Script/Create_Variable_Dict/sectors_dict.txt @@ -0,0 +1,66 @@ +{'ACCOMMODATION': 'Accommodation', + 'ANIMALS': 'Animals', + 'COKE': 'Coke', + 'CONSTRUCTION': 'Construction', + 'CROPS': 'Crops', + 'DISTRIBUTION_ELECTRICITY': 'Distribution|Electricity', + 'DISTRIBUTION_GAS': 'Distribution|Gas', + 'EDUCATION': 'Education', + 'ELECTRICITY_COAL': 'Electricity|Coal', + 'ELECTRICITY_GAS': 'Electricity|Gas', + 'ELECTRICITY_HYDRO': 'Electricity|Hydro', + 'ELECTRICITY_NUCLEAR': 'Electricity|Nuclear', + 'ELECTRICITY_OIL': 'Electricity|Oil', + 'ELECTRICITY_OTHER': 'Electricity|Other', + 'ELECTRICITY_SOLAR_PV': 'Electricity|Solar|PV', + 'ELECTRICITY_SOLAR_THERMAL': 'Electricity|Solar|CSP', + 'ELECTRICITY_WIND': 'Electricity|Wind', + 'ENTERTAIMENT': 'Entertainment', + 'EXTRACTION_GAS': 'Extraction|Gas', + 'EXTRACTION_OIL': 'Extraction|Oil', + 'EXTRACTION_OTHER_GAS': 'Extraction|Other Gas', + 'FINANCE': 'Finance', + 'FISHING': 'Fishing', + 'FORESTRY': 'Forestry', + 'HEALTH': 'Health', + 'HYDROGEN_PRODUCTION': 'Hydrogen Production', + 'MANUFACTURE_CHEMICAL': 'Manufacture|Chemicals', + 'MANUFACTURE_ELECTRICAL_EQUIPMENT': 'Manufacture|Electrical Equipment', + 'MANUFACTURE_ELECTRONICS': 'Manufacture|Electronics', + 'MANUFACTURE_FOOD': 'Manufacture|Food', + 'MANUFACTURE_MACHINERY': 'Manufacture|Machinery', + 'MANUFACTURE_METAL_PRODUCTS': 'Manufacture|Metal Products', + 'MANUFACTURE_OTHER': 'Manufacture|Other', + 'MANUFACTURE_OTHER_NON_METAL': 'Manufacture|Other Non Metals', + 'MANUFACTURE_PLASTIC': 'Manufacture|Plastics', + 'MANUFACTURE_VEHICLES': 'Manufacture|Vehicles', + 'MANUFACTURE_WOOD': 'Manufacture|Wood', + 'MINING_AND_MANUFACTURING_ALUMINIUM': 'Mining and Manufacturing|Aluminium', + 'MINING_AND_MANUFACTURING_COPPER': 'Mining and Manufacturing|Copper', + 'MINING_AND_MANUFACTURING_IRON': 'Mining and Manufacturing|Iron', + 'MINING_AND_MANUFACTURING_LEAD_ZINC_TIN': 'Mining and Manufacturing|Lead Zinc ' + 'Tin', + 'MINING_AND_MANUFACTURING_NICKEL': 'Mining and Manufacturing|Nickel', + 'MINING_AND_MANUFACTURING_OTHER_METALS': 'Mining and Manufacturing|Other ' + 'Metals', + 'MINING_AND_MANUFACTURING_PRECIOUS_METALS': 'Mining and ' + 'Manufacturing|Precious Metals', + 'MINING_AND_MANUFACTURING_URANIUM_THORIUM': 'Mining and Manufacturing|Uranium ' + 'Thorium', + 'MINING_COAL': 'Mining|Coal', + 'MINING_NON_METALS': 'Mining|Non Metals', + 'OTHER_SERVICES': 'Other Services', + 'PRIVATE_HOUSEHOLDS': 'Private Households', + 'PUBLIC_ADMINISTRATION': 'Public Administration', + 'REAL_ESTATE': 'Real Estate', + 'REFINING': 'Refining', + 'STEAM_HOT_WATER': 'Steam Hot Water', + 'TELECOMMUNICATIONS': 'Telecommunications', + 'TRADE_REPAIR_VEHICLES': 'Trade Repair Vehicles', + 'TRANSPORT_AIR': 'Transportation|Aviation', + 'TRANSPORT_INLAND_WATER': 'Transportation|Inland Water', + 'TRANSPORT_OTHER_LAND': 'Transportation|Other Land', + 'TRANSPORT_PIPELINE': 'Transportation|Pipeline', + 'TRANSPORT_RAIL': 'Transportation|Rail', + 'TRANSPORT_SEA': 'Transportation|Maritime', + 'WASTE_MANAGEMENT': 'Waste Management'} diff --git a/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb b/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb index 05b5d96..f740238 100644 --- a/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb +++ b/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb @@ -397,7 +397,7 @@ "# Fonction de modification de l'élément\n", "def modify_element(element):\n", " # Remplacer les underscores par des espaces et mettre chaque mot en majuscule\n", - " return \"|\".join([word for word in element.split(\"_\")])\n", + " return \"|\".join([word.capitalize() for word in element.split(\"_\")])\n", "\n", "\n", "energy_processes_new = []\n", @@ -475,6 +475,157 @@ "with open('energy_dict.txt', 'w') as f:\n", " pprint.pprint(energy_dict, f)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sectors Dictionnary \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sector_list = [\n", + " \"CROPS\",\n", + " \"ANIMALS\",\n", + " \"FORESTRY\",\n", + " \"FISHING\",\n", + " \"MINING_COAL\",\n", + " \"EXTRACTION_OIL\",\n", + " \"EXTRACTION_GAS\",\n", + " \"EXTRACTION_OTHER_GAS\",\n", + " \"MINING_AND_MANUFACTURING_URANIUM_THORIUM\",\n", + " \"MINING_AND_MANUFACTURING_IRON\",\n", + " \"MINING_AND_MANUFACTURING_COPPER\",\n", + " \"MINING_AND_MANUFACTURING_NICKEL\",\n", + " \"MINING_AND_MANUFACTURING_ALUMINIUM\",\n", + " \"MINING_AND_MANUFACTURING_PRECIOUS_METALS\",\n", + " \"MINING_AND_MANUFACTURING_LEAD_ZINC_TIN\",\n", + " \"MINING_AND_MANUFACTURING_OTHER_METALS\",\n", + " \"MINING_NON_METALS\",\n", + " \"MANUFACTURE_FOOD\",\n", + " \"MANUFACTURE_WOOD\",\n", + " \"COKE\",\n", + " \"REFINING\",\n", + " \"MANUFACTURE_CHEMICAL\",\n", + " \"MANUFACTURE_PLASTIC\",\n", + " \"MANUFACTURE_OTHER_NON_METAL\",\n", + " \"HYDROGEN_PRODUCTION\",\n", + " \"MANUFACTURE_METAL_PRODUCTS\",\n", + " \"MANUFACTURE_ELECTRONICS\",\n", + " \"MANUFACTURE_ELECTRICAL_EQUIPMENT\",\n", + " \"MANUFACTURE_MACHINERY\",\n", + " \"MANUFACTURE_VEHICLES\",\n", + " \"MANUFACTURE_OTHER\",\n", + " \"ELECTRICITY_COAL\",\n", + " \"ELECTRICITY_GAS\",\n", + " \"ELECTRICITY_NUCLEAR\",\n", + " \"ELECTRICITY_HYDRO\",\n", + " \"ELECTRICITY_WIND\",\n", + " \"ELECTRICITY_OIL\",\n", + " \"ELECTRICITY_SOLAR_PV\",\n", + " \"ELECTRICITY_SOLAR_THERMAL\",\n", + " \"ELECTRICITY_OTHER\",\n", + " \"DISTRIBUTION_ELECTRICITY\",\n", + " \"DISTRIBUTION_GAS\",\n", + " \"STEAM_HOT_WATER\",\n", + " \"WASTE_MANAGEMENT\",\n", + " \"CONSTRUCTION\",\n", + " \"TRADE_REPAIR_VEHICLES\",\n", + " \"TRANSPORT_RAIL\",\n", + " \"TRANSPORT_OTHER_LAND\",\n", + " \"TRANSPORT_PIPELINE\",\n", + " \"TRANSPORT_SEA\",\n", + " \"TRANSPORT_INLAND_WATER\",\n", + " \"TRANSPORT_AIR\",\n", + " \"ACCOMMODATION\",\n", + " \"TELECOMMUNICATIONS\",\n", + " \"FINANCE\",\n", + " \"REAL_ESTATE\",\n", + " \"OTHER_SERVICES\",\n", + " \"PUBLIC_ADMINISTRATION\",\n", + " \"EDUCATION\",\n", + " \"HEALTH\",\n", + " \"ENTERTAIMENT\",\n", + " \"PRIVATE_HOUSEHOLDS\"\n", + "]\n", + "\n", + "\n", + "\n", + "new_sectors_list = [\n", + " \"Crops\",\n", + " \"Animals\",\n", + " \"Forestry\",\n", + " \"Fishing\",\n", + " \"Mining|Coal\",\n", + " \"Extraction|Oil\",\n", + " \"Extraction|Gas\",\n", + " \"Extraction|Other Gas\",\n", + " \"Mining and Manufacturing|Uranium Thorium\",\n", + " \"Mining and Manufacturing|Iron\",\n", + " \"Mining and Manufacturing|Copper\",\n", + " \"Mining and Manufacturing|Nickel\",\n", + " \"Mining and Manufacturing|Aluminium\",\n", + " \"Mining and Manufacturing|Precious Metals\",\n", + " \"Mining and Manufacturing|Lead Zinc Tin\",\n", + " \"Mining and Manufacturing|Other Metals\",\n", + " \"Mining|Non Metals\",\n", + " \"Manufacture|Food\",\n", + " \"Manufacture|Wood\",\n", + " \"Coke\",\n", + " \"Refining\",\n", + " \"Manufacture|Chemicals\",\n", + " \"Manufacture|Plastics\",\n", + " \"Manufacture|Other Non Metals\",\n", + " \"Hydrogen Production\",\n", + " \"Manufacture|Metal Products\",\n", + " \"Manufacture|Electronics\",\n", + " \"Manufacture|Electrical Equipment\",\n", + " \"Manufacture|Machinery\",\n", + " \"Manufacture|Vehicles\",\n", + " \"Manufacture|Other\",\n", + " \"Electricity|Coal\",\n", + " \"Electricity|Gas\",\n", + " \"Electricity|Nuclear\",\n", + " \"Electricity|Hydro\",\n", + " \"Electricity|Wind\",\n", + " \"Electricity|Oil\",\n", + " \"Electricity|Solar|PV\",\n", + " \"Electricity|Solar|CSP\",\n", + " \"Electricity|Other\",\n", + " \"Distribution|Electricity\",\n", + " \"Distribution|Gas\",\n", + " \"Steam Hot Water\",\n", + " \"Waste Management\",\n", + " \"Construction\",\n", + " \"Trade Repair Vehicles\",\n", + " \"Transportation|Rail\",\n", + " \"Transportation|Other Land\",\n", + " \"Transportation|Pipeline\",\n", + " \"Transportation|Maritime\",\n", + " \"Transportation|Inland Water\",\n", + " \"Transportation|Aviation\",\n", + " \"Accommodation\",\n", + " \"Telecommunications\",\n", + " \"Finance\",\n", + " \"Real Estate\",\n", + " \"Other Services\",\n", + " \"Public Administration\",\n", + " \"Education\",\n", + " \"Health\",\n", + " \"Entertainment\",\n", + " \"Private Households\"\n", + "]\n", + "\n", + "sectors_dict = dict(zip(sector_list, new_sectors_list))\n", + "# Save dictionary with pprint\n", + "with open('sectors_dict.txt', 'w') as f:\n", + " pprint.pprint(sectors_dict, f)" + ] } ], "metadata": { @@ -493,7 +644,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.1" + "version": "3.10.14" } }, "nbformat": 4, From dca482f30a69d6041f14eccddf9a93edb81dabfb Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Tue, 23 Jul 2024 12:52:12 +0200 Subject: [PATCH 03/22] creation of the first dictionnary of translation --- .../Creation_global_dict_helpers.ipynb | 4378 +++++++++++++++++ 1 file changed, 4378 insertions(+) create mode 100644 Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb diff --git a/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb b/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb new file mode 100644 index 0000000..80c1258 --- /dev/null +++ b/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb @@ -0,0 +1,4378 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import os\n", + "import time\n", + "import ast\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Read normal variables" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Folder 'File_Converted' already exists.\n" + ] + } + ], + "source": [ + "time0 = time.time()\n", + "\n", + "\n", + "def get_last_added_file(folder_path):\n", + " # Get a list of all files in the folder\n", + " files = os.listdir(folder_path)\n", + "\n", + " # Filter Excel files\n", + " excel_files = [\n", + " file\n", + " for file in files\n", + " if file.endswith(\".xlsx\") or file.endswith(\".xls\") or file.endswith(\".csv\")\n", + " ]\n", + "\n", + " if not excel_files:\n", + " return None # No Excel files found\n", + " print()\n", + " # Sort files by modification time (newest first)\n", + " excel_files.sort(\n", + " key=lambda x: os.path.getctime(os.path.join(folder_path, x)), reverse=True\n", + " )\n", + "\n", + " # Return the path to the last added Excel file\n", + " return os.path.join(folder_path, excel_files[0])\n", + "\n", + "\n", + "def create_folder_if_not_exists(folder_name):\n", + " # Get current folder\n", + " folder_path = os.getcwd()\n", + "\n", + " try:\n", + " os.makedirs(\"pip\")\n", + " print(\"DONE\")\n", + " except FileExistsError:\n", + " pass\n", + " if not os.path.exists(os.path.join(folder_path, folder_name)):\n", + " os.makedirs(folder_name)\n", + " print(\"Folder '{}' created.\".format(folder_name))\n", + " else:\n", + " print(\"Folder '{}' already exists.\".format(folder_name))\n", + "\n", + "\n", + "# Folder name to create\n", + "folder_name_to_convert = \"File_To_Convert\"\n", + "folder_name_converted = \"File_Converted\"\n", + "\n", + "# Get current folder\n", + "folder_path = os.getcwd()\n", + "\n", + "\n", + "# Create new folder\n", + "create_folder_if_not_exists(folder_name_converted)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Last added file: c:\\Users\\AdGeeds\\Documents\\IAMC-format\\IAMC_format\\Conversion-Script\\translation-one-by-one\\File_To_Convert\\Baseline no policies no CO2tax.csv\n", + "('Baseline no policies no CO2tax', '.csv')\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\1856630083.py:33: DtypeWarning: Columns (4,5) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " scenario_variable_df = pd.read_csv(last_file)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TimeYearUnnamed: 2Unnamed: 3Unnamed: 4Unnamed: 52005200620072008...2061206220632064206520662067206820692070
0world_PE_by_commodityEJ/YearPE_agriculture_productsNaNNaNNaN0.0282421.0574501.2656201.713050...2.9487602.8243902.7275502.6235202.6322302.476062.4014502.3448902.2635202.172020
1world_PE_by_commodityEJ/YearPE_coalNaNNaNNaN139.888000142.536000145.529000148.652000...239.392000238.914000242.655000247.283000252.159000248.07700251.761000254.646000253.793000249.484000
2world_PE_by_commodityEJ/YearPE_oilNaNNaNNaN202.483000200.246000200.156000199.572000...170.113000162.348000159.496000158.317000158.668000151.41400150.100000147.932000144.727000139.896000
3world_PE_by_commodityEJ/YearPE_forestry_productsNaNNaNNaN37.12750037.33430037.47910037.766300...98.84120098.722100101.700000105.143000108.929000106.94800109.672000112.871000112.351000111.132000
4world_PE_by_commodityEJ/YearPE_geothermalNaNNaNNaN0.2405550.2498270.2578230.267857...7.0771306.7295806.7998906.9491507.0921406.824656.9600606.9053506.8409806.567220
..................................................................
171137Fe_hidden_resourcesMtLOW_GRADENaNNaNNaN128992.000000127935.000000126830.000000125688.000000...66756.00000065861.20000064974.70000064096.80000063227.40000062366.5000061514.20000060670.50000059835.30000059008.800000
171138Fe_hidden_resourcesMtULTRALOW_GRADENaNNaNNaN176000.000000175990.000000175978.000000175963.000000...132301.000000130580.000000128867.000000127163.000000125469.000000123787.00000122116.000000120458.000000118813.000000117183.000000
171139Fe_hidden_resourcesMtTRACE_GRADENaNNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171140Fe_hidden_resourcesMtOCEANS_GRADENaNNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171141relative_RURR_FeNaNNaNNaNNaNNaN0.9154600.9136800.9113070.908839...0.6305950.6208190.6111160.6015020.5919820.582560.5732360.5640140.5548940.545877
\n", + "

171142 rows × 72 columns

\n", + "
" + ], + "text/plain": [ + " Time Year Unnamed: 2 Unnamed: 3 \\\n", + "0 world_PE_by_commodity EJ/Year PE_agriculture_products NaN \n", + "1 world_PE_by_commodity EJ/Year PE_coal NaN \n", + "2 world_PE_by_commodity EJ/Year PE_oil NaN \n", + "3 world_PE_by_commodity EJ/Year PE_forestry_products NaN \n", + "4 world_PE_by_commodity EJ/Year PE_geothermal NaN \n", + "... ... ... ... ... \n", + "171137 Fe_hidden_resources Mt LOW_GRADE NaN \n", + "171138 Fe_hidden_resources Mt ULTRALOW_GRADE NaN \n", + "171139 Fe_hidden_resources Mt TRACE_GRADE NaN \n", + "171140 Fe_hidden_resources Mt OCEANS_GRADE NaN \n", + "171141 relative_RURR_Fe NaN NaN NaN \n", + "\n", + " Unnamed: 4 Unnamed: 5 2005 2006 2007 \\\n", + "0 NaN NaN 0.028242 1.057450 1.265620 \n", + "1 NaN NaN 139.888000 142.536000 145.529000 \n", + "2 NaN NaN 202.483000 200.246000 200.156000 \n", + "3 NaN NaN 37.127500 37.334300 37.479100 \n", + "4 NaN NaN 0.240555 0.249827 0.257823 \n", + "... ... ... ... ... ... \n", + "171137 NaN NaN 128992.000000 127935.000000 126830.000000 \n", + "171138 NaN NaN 176000.000000 175990.000000 175978.000000 \n", + "171139 NaN NaN 0.000000 0.000000 0.000000 \n", + "171140 NaN NaN 0.000000 0.000000 0.000000 \n", + "171141 NaN NaN 0.915460 0.913680 0.911307 \n", + "\n", + " 2008 ... 2061 2062 2063 \\\n", + "0 1.713050 ... 2.948760 2.824390 2.727550 \n", + "1 148.652000 ... 239.392000 238.914000 242.655000 \n", + "2 199.572000 ... 170.113000 162.348000 159.496000 \n", + "3 37.766300 ... 98.841200 98.722100 101.700000 \n", + "4 0.267857 ... 7.077130 6.729580 6.799890 \n", + "... ... ... ... ... ... \n", + "171137 125688.000000 ... 66756.000000 65861.200000 64974.700000 \n", + "171138 175963.000000 ... 132301.000000 130580.000000 128867.000000 \n", + "171139 0.000000 ... 0.000000 0.000000 0.000000 \n", + "171140 0.000000 ... 0.000000 0.000000 0.000000 \n", + "171141 0.908839 ... 0.630595 0.620819 0.611116 \n", + "\n", + " 2064 2065 2066 2067 \\\n", + "0 2.623520 2.632230 2.47606 2.401450 \n", + "1 247.283000 252.159000 248.07700 251.761000 \n", + "2 158.317000 158.668000 151.41400 150.100000 \n", + "3 105.143000 108.929000 106.94800 109.672000 \n", + "4 6.949150 7.092140 6.82465 6.960060 \n", + "... ... ... ... ... \n", + "171137 64096.800000 63227.400000 62366.50000 61514.200000 \n", + "171138 127163.000000 125469.000000 123787.00000 122116.000000 \n", + "171139 0.000000 0.000000 0.00000 0.000000 \n", + "171140 0.000000 0.000000 0.00000 0.000000 \n", + "171141 0.601502 0.591982 0.58256 0.573236 \n", + "\n", + " 2068 2069 2070 \n", + "0 2.344890 2.263520 2.172020 \n", + "1 254.646000 253.793000 249.484000 \n", + "2 147.932000 144.727000 139.896000 \n", + "3 112.871000 112.351000 111.132000 \n", + "4 6.905350 6.840980 6.567220 \n", + "... ... ... ... \n", + "171137 60670.500000 59835.300000 59008.800000 \n", + "171138 120458.000000 118813.000000 117183.000000 \n", + "171139 0.000000 0.000000 0.000000 \n", + "171140 0.000000 0.000000 0.000000 \n", + "171141 0.564014 0.554894 0.545877 \n", + "\n", + "[171142 rows x 72 columns]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the last upload excel file\n", + "real_folder_path = os.path.join(folder_path, folder_name_to_convert)\n", + "\n", + "last_file = get_last_added_file(real_folder_path)\n", + "\n", + "\n", + "if last_file:\n", + " print(\"Last added file:\", last_file)\n", + "else:\n", + " print(\"No files found in the folder.\")\n", + "\n", + "# Get the correct naming for the converted file\n", + "filename_with_extension = os.path.basename(last_file)\n", + "splited_filename_with_extension = os.path.splitext(filename_with_extension)\n", + "print(splited_filename_with_extension)\n", + "filename = (\n", + " splited_filename_with_extension[0]\n", + " + \"converted\"\n", + " + splited_filename_with_extension[1]\n", + ")\n", + "\n", + "# Possibility to create a thread to run all the code during the wait for the user answer.\n", + "# scenario = input(\"Give the name of the scenario\")\n", + "scenario = splited_filename_with_extension[0]\n", + "\n", + "# Read the selected file\n", + "if (\n", + " splited_filename_with_extension[1] == \".xls\"\n", + " or splited_filename_with_extension[1] == \".xlsx\"\n", + "):\n", + " scenario_variable_df = pd.read_excel(last_file)\n", + "elif splited_filename_with_extension[1] == \".csv\":\n", + " scenario_variable_df = pd.read_csv(last_file)\n", + "\n", + "\n", + "scenario_variable_df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Duplicate Rows:\n", + " Time Year Unnamed: 2 \\\n", + "121996 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "121997 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "121998 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "121999 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "122000 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "... ... ... ... \n", + "150210 transport_electrified_vehicle_batteries_power TW LROW \n", + "150211 transport_electrified_vehicle_batteries_power TW LROW \n", + "150212 transport_electrified_vehicle_batteries_power TW LROW \n", + "150213 transport_electrified_vehicle_batteries_power TW LROW \n", + "150214 transport_electrified_vehicle_batteries_power TW LROW \n", + "\n", + " Unnamed: 3 Unnamed: 4 Unnamed: 5 2005 \\\n", + "121996 PROTRA_PP_solar_open_space_PV C_Si_mono NaN 0.000364 \n", + "121997 PROTRA_PP_solar_open_space_PV C_Si_poly NaN 0.000961 \n", + "121998 PROTRA_PP_solar_open_space_PV CdTe NaN 0.000095 \n", + "121999 PROTRA_PP_solar_open_space_PV CIGS NaN 0.000036 \n", + "122000 PROTRA_PP_solar_urban_PV C_Si_mono NaN 0.000452 \n", + "... ... ... ... ... \n", + "150210 LFP HPV LDV 0.000000 \n", + "150211 LFP HPV MDV 0.000000 \n", + "150212 LFP HPV HDV 0.000000 \n", + "150213 LFP HPV BUS 0.000000 \n", + "150214 LFP HPV MOTORCYCLES_2W_3W 0.000000 \n", + "\n", + " 2006 2007 2008 ... 2061 2062 2063 \\\n", + "121996 0.000364 0.000364 0.000364 ... 0.539886 0.546992 0.552966 \n", + "121997 0.000961 0.000961 0.000961 ... 0.113854 0.115138 0.116198 \n", + "121998 0.000095 0.000095 0.000095 ... 0.024139 0.024446 0.024704 \n", + "121999 0.000036 0.000036 0.000036 ... 0.010348 0.010480 0.010590 \n", + "122000 0.000452 0.000452 0.000452 ... 0.064672 0.061538 0.067632 \n", + "... ... ... ... ... ... ... ... \n", + "150210 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", + "150211 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", + "150212 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", + "150213 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", + "150214 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", + "\n", + " 2064 2065 2066 2067 2068 2069 2070 \n", + "121996 0.561550 0.570806 0.578521 0.585470 0.590557 0.594684 0.599769 \n", + "121997 0.117792 0.119527 0.120954 0.122232 0.123137 0.123851 0.124764 \n", + "121998 0.025077 0.025480 0.025815 0.026117 0.026336 0.026513 0.026733 \n", + "121999 0.010750 0.010922 0.011066 0.011195 0.011289 0.011365 0.011459 \n", + "122000 0.064396 0.070778 0.067434 0.064200 0.070010 0.066687 0.072126 \n", + "... ... ... ... ... ... ... ... \n", + "150210 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150211 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150212 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150213 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150214 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "\n", + "[8831 rows x 72 columns]\n", + "Number of Duplicate Rows: 8831\n", + "162311\n" + ] + } + ], + "source": [ + "# Check for duplicate rows\n", + "duplicate_rows = scenario_variable_df[scenario_variable_df.duplicated()]\n", + "\n", + "# Display duplicate rows\n", + "print(\"Duplicate Rows:\")\n", + "print(duplicate_rows)\n", + "\n", + "# Count the number of duplicate rows\n", + "num_duplicate_rows = duplicate_rows.shape[0]\n", + "print(\"Number of Duplicate Rows:\", num_duplicate_rows)\n", + "\n", + "scenario_variable_df = scenario_variable_df.drop_duplicates()\n", + "print(len(scenario_variable_df))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\2790429010.py:17: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " scenario_variable_df.rename(columns=my_dict, inplace=True)\n", + "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\2790429010.py:18: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " scenario_variable_df.rename(\n" + ] + } + ], + "source": [ + "# Rename the column of the file\n", + "columns = scenario_variable_df.columns.str.replace(\"Unnamed:\", \"Subscript\")\n", + "columns = columns.str.replace(\".\", \" \")\n", + "\n", + "# Define the string you want in column names\n", + "search_string = \"Subscript\"\n", + "counter = 0\n", + "\n", + "for k in range(len(columns)):\n", + " if search_string in columns[k]:\n", + " columns.values[k] = search_string + \" \" + str(counter)\n", + " counter += 1\n", + "\n", + "\n", + "# Create a dictionary using zip() and dictionary comprehension\n", + "my_dict = {k: v for k, v in zip(scenario_variable_df.columns[2:6], columns[2:6])}\n", + "scenario_variable_df.rename(columns=my_dict, inplace=True)\n", + "scenario_variable_df.rename(\n", + " columns={\"Time\": \"Variable\", \"Year\": \"Unit\", \"Subscript\": \"Subscript 0\"},\n", + " inplace=True,\n", + ")\n", + "\n", + "# Insert the three columns in the right place for IAMC format\n", + "scenario_variable_df.insert(0, \"Model\", \"WILIAM\")\n", + "scenario_variable_df.insert(1, \"Scenario\", scenario)\n", + "scenario_variable_df.insert(2, \"Region\", \"World\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelScenarioRegionVariableUnit20052006200720082009...2061206220632064206520662067206820692070
0WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_agriculture_productsEJ/Year0.0282421.0574501.2656201.7130501.934410...2.9487602.8243902.7275502.6235202.6322302.476062.4014502.3448902.2635202.172020
1WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_coalEJ/Year139.888000142.536000145.529000148.652000149.764000...239.392000238.914000242.655000247.283000252.159000248.07700251.761000254.646000253.793000249.484000
2WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_oilEJ/Year202.483000200.246000200.156000199.572000199.148000...170.113000162.348000159.496000158.317000158.668000151.41400150.100000147.932000144.727000139.896000
3WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_forestry_productsEJ/Year37.12750037.33430037.47910037.76630037.924300...98.84120098.722100101.700000105.143000108.929000106.94800109.672000112.871000112.351000111.132000
4WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_geothermalEJ/Year0.2405550.2498270.2578230.2678570.278548...7.0771306.7295806.7998906.9491507.0921406.824656.9600606.9053506.8409806.567220
..................................................................
171137WILIAMBaseline no policies no CO2taxWorldFe_hidden_resources|LOW_GRADEMt128992.000000127935.000000126830.000000125688.000000124519.000000...66756.00000065861.20000064974.70000064096.80000063227.40000062366.5000061514.20000060670.50000059835.30000059008.800000
171138WILIAMBaseline no policies no CO2taxWorldFe_hidden_resources|ULTRALOW_GRADEMt176000.000000175990.000000175978.000000175963.000000175945.000000...132301.000000130580.000000128867.000000127163.000000125469.000000123787.00000122116.000000120458.000000118813.000000117183.000000
171139WILIAMBaseline no policies no CO2taxWorldFe_hidden_resources|TRACE_GRADEMt0.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171140WILIAMBaseline no policies no CO2taxWorldFe_hidden_resources|OCEANS_GRADEMt0.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171141WILIAMBaseline no policies no CO2taxWorldrelative_RURR_FeNaN0.9154600.9136800.9113070.9088390.906274...0.6305950.6208190.6111160.6015020.5919820.582560.5732360.5640140.5548940.545877
\n", + "

162311 rows × 71 columns

\n", + "
" + ], + "text/plain": [ + " Model Scenario Region \\\n", + "0 WILIAM Baseline no policies no CO2tax World \n", + "1 WILIAM Baseline no policies no CO2tax World \n", + "2 WILIAM Baseline no policies no CO2tax World \n", + "3 WILIAM Baseline no policies no CO2tax World \n", + "4 WILIAM Baseline no policies no CO2tax World \n", + "... ... ... ... \n", + "171137 WILIAM Baseline no policies no CO2tax World \n", + "171138 WILIAM Baseline no policies no CO2tax World \n", + "171139 WILIAM Baseline no policies no CO2tax World \n", + "171140 WILIAM Baseline no policies no CO2tax World \n", + "171141 WILIAM Baseline no policies no CO2tax World \n", + "\n", + " Variable Unit 2005 \\\n", + "0 world_PE_by_commodity|PE_agriculture_products EJ/Year 0.028242 \n", + "1 world_PE_by_commodity|PE_coal EJ/Year 139.888000 \n", + "2 world_PE_by_commodity|PE_oil EJ/Year 202.483000 \n", + "3 world_PE_by_commodity|PE_forestry_products EJ/Year 37.127500 \n", + "4 world_PE_by_commodity|PE_geothermal EJ/Year 0.240555 \n", + "... ... ... ... \n", + "171137 Fe_hidden_resources|LOW_GRADE Mt 128992.000000 \n", + "171138 Fe_hidden_resources|ULTRALOW_GRADE Mt 176000.000000 \n", + "171139 Fe_hidden_resources|TRACE_GRADE Mt 0.000000 \n", + "171140 Fe_hidden_resources|OCEANS_GRADE Mt 0.000000 \n", + "171141 relative_RURR_Fe NaN 0.915460 \n", + "\n", + " 2006 2007 2008 2009 ... \\\n", + "0 1.057450 1.265620 1.713050 1.934410 ... \n", + "1 142.536000 145.529000 148.652000 149.764000 ... \n", + "2 200.246000 200.156000 199.572000 199.148000 ... \n", + "3 37.334300 37.479100 37.766300 37.924300 ... \n", + "4 0.249827 0.257823 0.267857 0.278548 ... \n", + "... ... ... ... ... ... \n", + "171137 127935.000000 126830.000000 125688.000000 124519.000000 ... \n", + "171138 175990.000000 175978.000000 175963.000000 175945.000000 ... \n", + "171139 0.000000 0.000000 0.000000 0.000000 ... \n", + "171140 0.000000 0.000000 0.000000 0.000000 ... \n", + "171141 0.913680 0.911307 0.908839 0.906274 ... \n", + "\n", + " 2061 2062 2063 2064 \\\n", + "0 2.948760 2.824390 2.727550 2.623520 \n", + "1 239.392000 238.914000 242.655000 247.283000 \n", + "2 170.113000 162.348000 159.496000 158.317000 \n", + "3 98.841200 98.722100 101.700000 105.143000 \n", + "4 7.077130 6.729580 6.799890 6.949150 \n", + "... ... ... ... ... \n", + "171137 66756.000000 65861.200000 64974.700000 64096.800000 \n", + "171138 132301.000000 130580.000000 128867.000000 127163.000000 \n", + "171139 0.000000 0.000000 0.000000 0.000000 \n", + "171140 0.000000 0.000000 0.000000 0.000000 \n", + "171141 0.630595 0.620819 0.611116 0.601502 \n", + "\n", + " 2065 2066 2067 2068 \\\n", + "0 2.632230 2.47606 2.401450 2.344890 \n", + "1 252.159000 248.07700 251.761000 254.646000 \n", + "2 158.668000 151.41400 150.100000 147.932000 \n", + "3 108.929000 106.94800 109.672000 112.871000 \n", + "4 7.092140 6.82465 6.960060 6.905350 \n", + "... ... ... ... ... \n", + "171137 63227.400000 62366.50000 61514.200000 60670.500000 \n", + "171138 125469.000000 123787.00000 122116.000000 120458.000000 \n", + "171139 0.000000 0.00000 0.000000 0.000000 \n", + "171140 0.000000 0.00000 0.000000 0.000000 \n", + "171141 0.591982 0.58256 0.573236 0.564014 \n", + "\n", + " 2069 2070 \n", + "0 2.263520 2.172020 \n", + "1 253.793000 249.484000 \n", + "2 144.727000 139.896000 \n", + "3 112.351000 111.132000 \n", + "4 6.840980 6.567220 \n", + "... ... ... \n", + "171137 59835.300000 59008.800000 \n", + "171138 118813.000000 117183.000000 \n", + "171139 0.000000 0.000000 \n", + "171140 0.000000 0.000000 \n", + "171141 0.554894 0.545877 \n", + "\n", + "[162311 rows x 71 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Dict used to check if the subscripts are a country\n", + "country_dict = {\n", + " \"EU27\": 1,\n", + " \"UK\": 1,\n", + " \"CHINA\": 1,\n", + " \"EASOC\": 1,\n", + " \"INDIA\": 1,\n", + " \"LATAM\": 1,\n", + " \"RUSSIA\": 1,\n", + " \"USMCA\": 1,\n", + " \"LROW\": 1,\n", + " \"AUSTRIA\": 1,\n", + " \"BELGIUM\": 1,\n", + " \"BULGARIA\": 1,\n", + " \"CROATIA\": 1,\n", + " \"CYPRUS\": 1,\n", + " \"CZECH_REPUBLIC\": 1,\n", + " \"DENMARK\": 1,\n", + " \"ESTONIA\": 1,\n", + " \"FINLAND\": 1,\n", + " \"FRANCE\": 1,\n", + " \"GERMANY\": 1,\n", + " \"GREECE\": 1,\n", + " \"HUNGARY\": 1,\n", + " \"IRELAND\": 1,\n", + " \"ITALY\": 1,\n", + " \"LATVIA\": 1,\n", + " \"LITHUANIA\": 1,\n", + " \"LUXEMBOURG\": 1,\n", + " \"MALTA\": 1,\n", + " \"NETHERLANDS\": 1,\n", + " \"POLAND\": 1,\n", + " \"PORTUGAL\": 1,\n", + " \"ROMANIA\": 1,\n", + " \"SLOVAKIA\": 1,\n", + " \"SLOVENIA\": 1,\n", + " \"SPAIN\": 1,\n", + " \"SWEDEN\": 1,\n", + "}\n", + "\n", + "\n", + "# Aggregate the subscripts at the end of the variable\n", + "def aggregate_variable_name(row, counter):\n", + " for k in range(counter):\n", + " subscript = row[\"Subscript \" + str(k)]\n", + "\n", + " if k == 0:\n", + " if country_dict.get(subscript) == 1:\n", + " # Give the name of the region for that variable\n", + " row[\"Region\"] = subscript\n", + "\n", + " row[\"Subscript 0\"] = np.nan\n", + " continue\n", + "\n", + " if not pd.isnull(subscript):\n", + " row[\"Variable\"] = row[\"Variable\"] + \"|\" + subscript\n", + "\n", + " return row\n", + "\n", + "\n", + "# Apply the previous function on all the lines\n", + "scenario_variable_df = scenario_variable_df.apply(\n", + " aggregate_variable_name, args=(counter,), axis=1\n", + ")\n", + "\n", + "# Remove the subscript columns once they have been added at the end of the variable name\n", + "drop_columns_list = [\"Subscript \" + str(k) for k in range(counter)]\n", + "scenario_variable_df.drop(columns=drop_columns_list, inplace=True)\n", + "\n", + "scenario_variable_df\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Read Transform variables " + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Last added file: c:\\Users\\AdGeeds\\Documents\\IAMC-format\\IAMC_format\\Conversion-Script\\translation-one-by-one\\File_To_Convert\\Baseline no policies no CO2tax.csv\n", + "('Baseline no policies no CO2tax', '.csv')\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\1292693398.py:26: DtypeWarning: Columns (4,5) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " scenario_variable_2_df = pd.read_csv(last_file)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TimeYearUnnamed: 2Unnamed: 3Unnamed: 4Unnamed: 52005200620072008...2061206220632064206520662067206820692070
0world_PE_by_commodityEJ/YearPE_agriculture_productsNaNNaNNaN0.0282421.0574501.2656201.713050...2.9487602.8243902.7275502.6235202.6322302.476062.4014502.3448902.2635202.172020
1world_PE_by_commodityEJ/YearPE_coalNaNNaNNaN139.888000142.536000145.529000148.652000...239.392000238.914000242.655000247.283000252.159000248.07700251.761000254.646000253.793000249.484000
2world_PE_by_commodityEJ/YearPE_oilNaNNaNNaN202.483000200.246000200.156000199.572000...170.113000162.348000159.496000158.317000158.668000151.41400150.100000147.932000144.727000139.896000
3world_PE_by_commodityEJ/YearPE_forestry_productsNaNNaNNaN37.12750037.33430037.47910037.766300...98.84120098.722100101.700000105.143000108.929000106.94800109.672000112.871000112.351000111.132000
4world_PE_by_commodityEJ/YearPE_geothermalNaNNaNNaN0.2405550.2498270.2578230.267857...7.0771306.7295806.7998906.9491507.0921406.824656.9600606.9053506.8409806.567220
..................................................................
171137Fe_hidden_resourcesMtLOW_GRADENaNNaNNaN128992.000000127935.000000126830.000000125688.000000...66756.00000065861.20000064974.70000064096.80000063227.40000062366.5000061514.20000060670.50000059835.30000059008.800000
171138Fe_hidden_resourcesMtULTRALOW_GRADENaNNaNNaN176000.000000175990.000000175978.000000175963.000000...132301.000000130580.000000128867.000000127163.000000125469.000000123787.00000122116.000000120458.000000118813.000000117183.000000
171139Fe_hidden_resourcesMtTRACE_GRADENaNNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171140Fe_hidden_resourcesMtOCEANS_GRADENaNNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171141relative_RURR_FeNaNNaNNaNNaNNaN0.9154600.9136800.9113070.908839...0.6305950.6208190.6111160.6015020.5919820.582560.5732360.5640140.5548940.545877
\n", + "

171142 rows × 72 columns

\n", + "
" + ], + "text/plain": [ + " Time Year Unnamed: 2 Unnamed: 3 \\\n", + "0 world_PE_by_commodity EJ/Year PE_agriculture_products NaN \n", + "1 world_PE_by_commodity EJ/Year PE_coal NaN \n", + "2 world_PE_by_commodity EJ/Year PE_oil NaN \n", + "3 world_PE_by_commodity EJ/Year PE_forestry_products NaN \n", + "4 world_PE_by_commodity EJ/Year PE_geothermal NaN \n", + "... ... ... ... ... \n", + "171137 Fe_hidden_resources Mt LOW_GRADE NaN \n", + "171138 Fe_hidden_resources Mt ULTRALOW_GRADE NaN \n", + "171139 Fe_hidden_resources Mt TRACE_GRADE NaN \n", + "171140 Fe_hidden_resources Mt OCEANS_GRADE NaN \n", + "171141 relative_RURR_Fe NaN NaN NaN \n", + "\n", + " Unnamed: 4 Unnamed: 5 2005 2006 2007 \\\n", + "0 NaN NaN 0.028242 1.057450 1.265620 \n", + "1 NaN NaN 139.888000 142.536000 145.529000 \n", + "2 NaN NaN 202.483000 200.246000 200.156000 \n", + "3 NaN NaN 37.127500 37.334300 37.479100 \n", + "4 NaN NaN 0.240555 0.249827 0.257823 \n", + "... ... ... ... ... ... \n", + "171137 NaN NaN 128992.000000 127935.000000 126830.000000 \n", + "171138 NaN NaN 176000.000000 175990.000000 175978.000000 \n", + "171139 NaN NaN 0.000000 0.000000 0.000000 \n", + "171140 NaN NaN 0.000000 0.000000 0.000000 \n", + "171141 NaN NaN 0.915460 0.913680 0.911307 \n", + "\n", + " 2008 ... 2061 2062 2063 \\\n", + "0 1.713050 ... 2.948760 2.824390 2.727550 \n", + "1 148.652000 ... 239.392000 238.914000 242.655000 \n", + "2 199.572000 ... 170.113000 162.348000 159.496000 \n", + "3 37.766300 ... 98.841200 98.722100 101.700000 \n", + "4 0.267857 ... 7.077130 6.729580 6.799890 \n", + "... ... ... ... ... ... \n", + "171137 125688.000000 ... 66756.000000 65861.200000 64974.700000 \n", + "171138 175963.000000 ... 132301.000000 130580.000000 128867.000000 \n", + "171139 0.000000 ... 0.000000 0.000000 0.000000 \n", + "171140 0.000000 ... 0.000000 0.000000 0.000000 \n", + "171141 0.908839 ... 0.630595 0.620819 0.611116 \n", + "\n", + " 2064 2065 2066 2067 \\\n", + "0 2.623520 2.632230 2.47606 2.401450 \n", + "1 247.283000 252.159000 248.07700 251.761000 \n", + "2 158.317000 158.668000 151.41400 150.100000 \n", + "3 105.143000 108.929000 106.94800 109.672000 \n", + "4 6.949150 7.092140 6.82465 6.960060 \n", + "... ... ... ... ... \n", + "171137 64096.800000 63227.400000 62366.50000 61514.200000 \n", + "171138 127163.000000 125469.000000 123787.00000 122116.000000 \n", + "171139 0.000000 0.000000 0.00000 0.000000 \n", + "171140 0.000000 0.000000 0.00000 0.000000 \n", + "171141 0.601502 0.591982 0.58256 0.573236 \n", + "\n", + " 2068 2069 2070 \n", + "0 2.344890 2.263520 2.172020 \n", + "1 254.646000 253.793000 249.484000 \n", + "2 147.932000 144.727000 139.896000 \n", + "3 112.871000 112.351000 111.132000 \n", + "4 6.905350 6.840980 6.567220 \n", + "... ... ... ... \n", + "171137 60670.500000 59835.300000 59008.800000 \n", + "171138 120458.000000 118813.000000 117183.000000 \n", + "171139 0.000000 0.000000 0.000000 \n", + "171140 0.000000 0.000000 0.000000 \n", + "171141 0.564014 0.554894 0.545877 \n", + "\n", + "[171142 rows x 72 columns]" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the last upload excel file\n", + "real_folder_path= os.path.join(folder_path , folder_name_to_convert)\n", + "\n", + "last_file = get_last_added_file(real_folder_path)\n", + "\n", + "\n", + "if last_file:\n", + " print(\"Last added file:\", last_file)\n", + "else:\n", + " print(\"No files found in the folder.\")\n", + "\n", + "# Get the correct naming for the converted file \n", + "filename_with_extension = os.path.basename(last_file)\n", + "splited_filename_with_extension = os.path.splitext(filename_with_extension)\n", + "print(splited_filename_with_extension)\n", + "filename = splited_filename_with_extension[0] + 'converted' + splited_filename_with_extension[1]\n", + "\n", + "# Possibility to create a thread to run all the code during the wait for the user answer. \n", + "# scenario = input(\"Give the name of the scenario\")\n", + "scenario = splited_filename_with_extension[0]\n", + "\n", + "# Read the selected file \n", + "if splited_filename_with_extension[1] == '.xls' or splited_filename_with_extension[1] == '.xlsx':\n", + " scenario_variable_2_df = pd.read_excel(last_file)\n", + "elif splited_filename_with_extension[1] == '.csv': \n", + " scenario_variable_2_df = pd.read_csv(last_file)\n", + "\n", + "\n", + "scenario_variable_2_df" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "#Rename the column of the file \n", + "columns = scenario_variable_2_df.columns.str.replace('Unnamed:', 'Subscript')\n", + "columns = columns.str.replace('.', ' ')\n", + "\n", + "# Define the string you want in column names\n", + "search_string = 'Subscript'\n", + "counter=0 \n", + "\n", + "for k in range(len(columns)): \n", + " if search_string in columns[k]: \n", + " columns.values[k]= search_string + ' ' + str(counter)\n", + " counter+=1\n", + "\n", + "\n", + "\n", + "# Create a dictionary using zip() and dictionary comprehension\n", + "my_dict = {k: v for k, v in zip(scenario_variable_2_df.columns[2:6], columns[2:6])}\n", + "scenario_variable_2_df.rename(columns=my_dict, inplace=True)\n", + "scenario_variable_2_df.rename(columns={\"Time\": \"Variable\", \"Year\": \"Unit\", \"Subscript\":\"Subscript 0\"}, inplace=True)\n", + "\n", + "\n", + "\n", + "# Insert the three columns in the right place for IAMC format\n", + "scenario_variable_2_df.insert(0, 'Model', \"WILIAM\")\n", + "scenario_variable_2_df.insert(1, 'Scenario', scenario)\n", + "scenario_variable_2_df.insert(2,\"Region\",\"World\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelScenarioRegionVariableUnitSubscript 0Subscript 1Subscript 2Subscript 32005...2061206220632064206520662067206820692070
0WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_agriculture_productsNaNNaNNaN0.028242...2.9487602.8243902.7275502.6235202.6322302.4760602.4014502.3448902.2635202.172020
1WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_coalNaNNaNNaN139.888000...239.392000238.914000242.655000247.283000252.159000248.077000251.761000254.646000253.793000249.484000
2WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_oilNaNNaNNaN202.483000...170.113000162.348000159.496000158.317000158.668000151.414000150.100000147.932000144.727000139.896000
3WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_forestry_productsNaNNaNNaN37.127500...98.84120098.722100101.700000105.143000108.929000106.948000109.672000112.871000112.351000111.132000
4WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_geothermalNaNNaNNaN0.240555...7.0771306.7295806.7998906.9491507.0921406.8246506.9600606.9053506.8409806.567220
5WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_hydropowerNaNNaNNaN10.229700...28.40490027.92730027.79880027.74280027.84270027.23500027.37630027.33220027.24320026.505800
6WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_natural_gasNaNNaNNaN96.809000...186.932000185.848000187.647000190.230000193.069000191.552000195.504000198.032000200.135000197.997000
7WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_nuclearNaNNaNNaN28.509200...40.87130039.43440038.31960037.47050036.54860035.18050034.34200033.41410032.93760031.470900
8WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_oceanicNaNNaNNaN0.002548...0.0016770.0015940.0015300.0014740.0014200.0013420.0012940.0012450.0011980.001133
9WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_solarNaNNaNNaN0.025930...30.53410030.55470031.48110032.32340033.28850032.91430033.71250034.32740034.34290033.943800
10WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_wasteNaNNaNNaN0.783667...0.3635280.3424510.3351100.3263850.3147040.2916940.2865590.2777630.2640920.248573
11WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_windNaNNaNNaN0.531202...36.25690035.95990036.32030037.00710037.60600036.54820037.01160037.37310037.24550036.112200
12WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearEU27NaNNaNNaN65.070100...76.64490075.25900075.04740075.08980075.32360074.14770074.47940074.67850073.60450073.059500
13WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearUKNaNNaNNaN8.568370...10.21020010.27970010.42060010.57410010.77580010.85900011.08750011.11090010.99110010.782000
14WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearCHINANaNNaNNaN105.705000...191.902000194.153000197.616000201.535000205.536000205.801000208.575000211.156000211.642000210.458000
15WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearEASOCNaNNaNNaN66.031400...124.300000124.057000125.532000127.675000129.664000128.766000130.112000131.682000131.606000131.255000
16WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearINDIANaNNaNNaN29.876100...51.64140048.53610048.52970048.88540049.65940046.01020046.40430046.60750044.76920042.631400
17WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearLATAMNaNNaNNaN20.045100...39.15240037.92610038.21460038.96600039.83980038.01790038.31420038.84740037.75020035.787600
18WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearRUSSIANaNNaNNaN28.625600...64.13920064.49060066.57400068.05280069.57390070.03140073.10440074.81770076.17080077.820800
19WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearUSMCANaNNaNNaN108.786000...133.578000132.219000131.749000132.488000134.150000131.814000131.811000130.958000130.808000128.392000
20WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearLROWNaNNaNNaN83.950200...150.169000142.686000141.599000142.149000143.628000134.016000135.241000135.598000134.803000125.345000
21WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_agriculture_productsNaNNaN0.028242...0.5725770.5870360.5852820.5729830.5816370.5819220.5900530.5887130.5866210.583903
22WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_coalNaNNaN10.846200...19.13590018.96270019.06570019.26660019.49210019.20040019.38280019.50530019.26030019.160500
23WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_oilNaNNaN28.986800...19.83180018.79850018.25480017.90710017.77810017.12190016.99870016.72460016.23130015.814600
24WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_forestry_productsNaNNaN2.824480...7.2869807.4212707.6874607.9598108.1792408.2510208.4579608.7430008.7152208.818190
25WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_geothermalNaNNaN0.021485...0.5297960.5040900.5375460.5287140.5189520.5264300.5164210.5083020.5234880.504541
26WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_hydropowerNaNNaN1.129990...1.4386601.4449901.4273001.4147301.4026701.3519801.3790901.3670001.3319301.381970
27WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_natural_gasNaNNaN10.992200...15.78600015.82280015.85670015.89410015.92440016.01340016.17180016.29770016.28860016.321100
28WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_nuclearNaNNaN9.637060...6.4137006.2094006.0759005.9493205.7784605.5878505.4471305.3332105.1803305.027080
29WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_oceanicNaNNaN0.001794...0.0003190.0003010.0002900.0002790.0002690.0002520.0002430.0002340.0002220.000212
30WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_solarNaNNaN0.011499...2.3822502.3364302.3849102.4123202.4762102.4216202.4397002.4972802.4540202.462030
31WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_wasteNaNNaN0.289031...0.1016890.0957770.0953390.0934630.0894040.0822630.0803830.0802050.0735340.070105
32WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_windNaNNaN0.301280...3.1653303.0757603.0761603.0904503.1021503.0087503.0151103.0328202.9588302.915300
33WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_agriculture_productsNaNNaN0.000000...0.0393470.0414950.0417620.0409900.0418620.0425290.0437360.0428990.0429330.042176
34WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_coalNaNNaN1.185840...1.3226801.3421301.3758401.4095401.4424301.4612201.5003801.5167501.5044401.488400
35WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_oilNaNNaN3.858350...3.2646103.2090203.1898603.1787503.1935803.1293503.1351903.0775302.9947902.893310
36WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_forestry_productsNaNNaN0.149820...0.6435420.6773470.7213760.7615480.7952740.8306680.8748380.9111150.9162070.922728
37WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_geothermalNaNNaN0.000000...0.0134730.0128850.0124550.0119830.0114860.0109580.0105680.0101260.0146960.014009
38WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_hydropowerNaNNaN0.039429...0.0336360.0329450.0326180.0322570.0319050.0373040.0370280.0363790.0353170.034595
39WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_natural_gasNaNNaN2.566860...3.4143803.4860703.5596403.6451103.7577403.8521003.9793404.0119904.0112203.941840
40WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_nuclearNaNNaN0.682968...0.5320660.5191350.5062720.4928540.4775490.4674630.4556070.4391640.4247330.410733
41WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_oceanicNaNNaN0.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
42WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_solarNaNNaN0.000007...0.2900880.2999650.3100960.3199740.3342490.3388260.3502910.3619480.3589270.356959
43WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_wasteNaNNaN0.078227...0.0130630.0128300.0129090.0129650.0127030.0122220.0120460.0120710.0115170.011520
44WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_windNaNNaN0.006873...0.6432880.6459100.6577730.6681700.6769950.6763690.6884950.6909390.6762710.665765
45WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_agriculture_productsNaNNaN0.000000...0.1384010.1384530.1400060.1419720.1446310.1437430.1440620.1442570.1431460.140471
46WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_coalNaNNaN64.942800...96.13380097.12990098.791700100.620000102.403000102.440000103.795000105.094000105.340000104.673000
47WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_oilNaNNaN31.363500...31.30400031.19390031.27060031.48130031.83770031.22220031.08330030.80260030.24070029.306600
48WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_forestry_productsNaNNaN3.239060...22.52580023.65940025.10000026.49160027.81460028.57810029.74770030.94900031.65150032.199200
49WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_geothermalNaNNaN0.000725...0.8500690.8300660.8259190.8234120.9792480.9408080.9293290.9200900.8936010.865683
50WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_hydropowerNaNNaN1.633770...4.8761904.9564904.9049704.8633304.8213004.8782304.8326404.7948204.7228004.773640
51WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_natural_gasNaNNaN3.864410...14.91120015.23690015.65100016.10080016.55250016.80220017.25810017.67790017.97930018.057000
52WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_nuclearNaNNaN0.576456...9.6184309.3352509.0390708.8042608.5677808.3167708.0799107.8340607.6888407.417590
53WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_oceanicNaNNaN0.000000...0.0000060.0000050.0000050.0000050.0000050.0000050.0000040.0000040.0000040.000004
54WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_solarNaNNaN0.000606...7.4615207.6000507.8519908.1052108.3481208.5221308.7348108.9280308.9848009.063910
55WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_wasteNaNNaN0.069420...0.0868620.0825640.0796060.0767900.0738900.0696820.0670810.0649190.0619470.058764
56WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_windNaNNaN0.014758...3.9956403.9898503.9614104.0266303.9927003.8872703.9034303.9466803.9346803.902630
57WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEASOCPE_agriculture_productsNaNNaN0.000000...0.4936760.4965560.5014920.4989230.5116550.4978040.4991720.5043150.4961150.487106
58WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEASOCPE_coalNaNNaN14.138200...29.39120029.60530030.01210030.53940031.03480031.03910031.35350031.70960031.76210031.872000
59WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEASOCPE_oilNaNNaN32.337800...36.65190035.62130035.61260036.01060036.19230034.99580034.93540035.12410034.32660033.318000
\n", + "

60 rows × 75 columns

\n", + "
" + ], + "text/plain": [ + " Model Scenario Region Variable \\\n", + "0 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "1 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "2 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "3 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "4 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "5 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "6 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "7 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "8 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "9 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "10 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "11 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", + "12 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "13 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "14 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "15 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "16 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "17 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "18 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "19 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "20 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", + "21 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "22 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "23 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "24 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "25 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "26 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "27 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "28 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "29 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "30 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "31 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "32 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "33 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "34 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "35 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "36 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "37 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "38 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "39 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "40 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "41 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "42 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "43 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "44 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "45 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "46 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "47 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "48 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "49 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "50 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "51 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "52 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "53 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "54 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "55 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "56 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "57 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "58 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "59 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", + "\n", + " Unit Subscript 0 Subscript 1 Subscript 2 \\\n", + "0 EJ/Year PE_agriculture_products NaN NaN \n", + "1 EJ/Year PE_coal NaN NaN \n", + "2 EJ/Year PE_oil NaN NaN \n", + "3 EJ/Year PE_forestry_products NaN NaN \n", + "4 EJ/Year PE_geothermal NaN NaN \n", + "5 EJ/Year PE_hydropower NaN NaN \n", + "6 EJ/Year PE_natural_gas NaN NaN \n", + "7 EJ/Year PE_nuclear NaN NaN \n", + "8 EJ/Year PE_oceanic NaN NaN \n", + "9 EJ/Year PE_solar NaN NaN \n", + "10 EJ/Year PE_waste NaN NaN \n", + "11 EJ/Year PE_wind NaN NaN \n", + "12 EJ/Year EU27 NaN NaN \n", + "13 EJ/Year UK NaN NaN \n", + "14 EJ/Year CHINA NaN NaN \n", + "15 EJ/Year EASOC NaN NaN \n", + "16 EJ/Year INDIA NaN NaN \n", + "17 EJ/Year LATAM NaN NaN \n", + "18 EJ/Year RUSSIA NaN NaN \n", + "19 EJ/Year USMCA NaN NaN \n", + "20 EJ/Year LROW NaN NaN \n", + "21 EJ/Year EU27 PE_agriculture_products NaN \n", + "22 EJ/Year EU27 PE_coal NaN \n", + "23 EJ/Year EU27 PE_oil NaN \n", + "24 EJ/Year EU27 PE_forestry_products NaN \n", + "25 EJ/Year EU27 PE_geothermal NaN \n", + "26 EJ/Year EU27 PE_hydropower NaN \n", + "27 EJ/Year EU27 PE_natural_gas NaN \n", + "28 EJ/Year EU27 PE_nuclear NaN \n", + "29 EJ/Year EU27 PE_oceanic NaN \n", + "30 EJ/Year EU27 PE_solar NaN \n", + "31 EJ/Year EU27 PE_waste NaN \n", + "32 EJ/Year EU27 PE_wind NaN \n", + "33 EJ/Year UK PE_agriculture_products NaN \n", + "34 EJ/Year UK PE_coal NaN \n", + "35 EJ/Year UK PE_oil NaN \n", + "36 EJ/Year UK PE_forestry_products NaN \n", + "37 EJ/Year UK PE_geothermal NaN \n", + "38 EJ/Year UK PE_hydropower NaN \n", + "39 EJ/Year UK PE_natural_gas NaN \n", + "40 EJ/Year UK PE_nuclear NaN \n", + "41 EJ/Year UK PE_oceanic NaN \n", + "42 EJ/Year UK PE_solar NaN \n", + "43 EJ/Year UK PE_waste NaN \n", + "44 EJ/Year UK PE_wind NaN \n", + "45 EJ/Year CHINA PE_agriculture_products NaN \n", + "46 EJ/Year CHINA PE_coal NaN \n", + "47 EJ/Year CHINA PE_oil NaN \n", + "48 EJ/Year CHINA PE_forestry_products NaN \n", + "49 EJ/Year CHINA PE_geothermal NaN \n", + "50 EJ/Year CHINA PE_hydropower NaN \n", + "51 EJ/Year CHINA PE_natural_gas NaN \n", + "52 EJ/Year CHINA PE_nuclear NaN \n", + "53 EJ/Year CHINA PE_oceanic NaN \n", + "54 EJ/Year CHINA PE_solar NaN \n", + "55 EJ/Year CHINA PE_waste NaN \n", + "56 EJ/Year CHINA PE_wind NaN \n", + "57 EJ/Year EASOC PE_agriculture_products NaN \n", + "58 EJ/Year EASOC PE_coal NaN \n", + "59 EJ/Year EASOC PE_oil NaN \n", + "\n", + " Subscript 3 2005 ... 2061 2062 2063 \\\n", + "0 NaN 0.028242 ... 2.948760 2.824390 2.727550 \n", + "1 NaN 139.888000 ... 239.392000 238.914000 242.655000 \n", + "2 NaN 202.483000 ... 170.113000 162.348000 159.496000 \n", + "3 NaN 37.127500 ... 98.841200 98.722100 101.700000 \n", + "4 NaN 0.240555 ... 7.077130 6.729580 6.799890 \n", + "5 NaN 10.229700 ... 28.404900 27.927300 27.798800 \n", + "6 NaN 96.809000 ... 186.932000 185.848000 187.647000 \n", + "7 NaN 28.509200 ... 40.871300 39.434400 38.319600 \n", + "8 NaN 0.002548 ... 0.001677 0.001594 0.001530 \n", + "9 NaN 0.025930 ... 30.534100 30.554700 31.481100 \n", + "10 NaN 0.783667 ... 0.363528 0.342451 0.335110 \n", + "11 NaN 0.531202 ... 36.256900 35.959900 36.320300 \n", + "12 NaN 65.070100 ... 76.644900 75.259000 75.047400 \n", + "13 NaN 8.568370 ... 10.210200 10.279700 10.420600 \n", + "14 NaN 105.705000 ... 191.902000 194.153000 197.616000 \n", + "15 NaN 66.031400 ... 124.300000 124.057000 125.532000 \n", + "16 NaN 29.876100 ... 51.641400 48.536100 48.529700 \n", + "17 NaN 20.045100 ... 39.152400 37.926100 38.214600 \n", + "18 NaN 28.625600 ... 64.139200 64.490600 66.574000 \n", + "19 NaN 108.786000 ... 133.578000 132.219000 131.749000 \n", + "20 NaN 83.950200 ... 150.169000 142.686000 141.599000 \n", + "21 NaN 0.028242 ... 0.572577 0.587036 0.585282 \n", + "22 NaN 10.846200 ... 19.135900 18.962700 19.065700 \n", + "23 NaN 28.986800 ... 19.831800 18.798500 18.254800 \n", + "24 NaN 2.824480 ... 7.286980 7.421270 7.687460 \n", + "25 NaN 0.021485 ... 0.529796 0.504090 0.537546 \n", + "26 NaN 1.129990 ... 1.438660 1.444990 1.427300 \n", + "27 NaN 10.992200 ... 15.786000 15.822800 15.856700 \n", + "28 NaN 9.637060 ... 6.413700 6.209400 6.075900 \n", + "29 NaN 0.001794 ... 0.000319 0.000301 0.000290 \n", + "30 NaN 0.011499 ... 2.382250 2.336430 2.384910 \n", + "31 NaN 0.289031 ... 0.101689 0.095777 0.095339 \n", + "32 NaN 0.301280 ... 3.165330 3.075760 3.076160 \n", + "33 NaN 0.000000 ... 0.039347 0.041495 0.041762 \n", + "34 NaN 1.185840 ... 1.322680 1.342130 1.375840 \n", + "35 NaN 3.858350 ... 3.264610 3.209020 3.189860 \n", + "36 NaN 0.149820 ... 0.643542 0.677347 0.721376 \n", + "37 NaN 0.000000 ... 0.013473 0.012885 0.012455 \n", + "38 NaN 0.039429 ... 0.033636 0.032945 0.032618 \n", + "39 NaN 2.566860 ... 3.414380 3.486070 3.559640 \n", + "40 NaN 0.682968 ... 0.532066 0.519135 0.506272 \n", + "41 NaN 0.000000 ... 0.000000 0.000000 0.000000 \n", + "42 NaN 0.000007 ... 0.290088 0.299965 0.310096 \n", + "43 NaN 0.078227 ... 0.013063 0.012830 0.012909 \n", + "44 NaN 0.006873 ... 0.643288 0.645910 0.657773 \n", + "45 NaN 0.000000 ... 0.138401 0.138453 0.140006 \n", + "46 NaN 64.942800 ... 96.133800 97.129900 98.791700 \n", + "47 NaN 31.363500 ... 31.304000 31.193900 31.270600 \n", + "48 NaN 3.239060 ... 22.525800 23.659400 25.100000 \n", + "49 NaN 0.000725 ... 0.850069 0.830066 0.825919 \n", + "50 NaN 1.633770 ... 4.876190 4.956490 4.904970 \n", + "51 NaN 3.864410 ... 14.911200 15.236900 15.651000 \n", + "52 NaN 0.576456 ... 9.618430 9.335250 9.039070 \n", + "53 NaN 0.000000 ... 0.000006 0.000005 0.000005 \n", + "54 NaN 0.000606 ... 7.461520 7.600050 7.851990 \n", + "55 NaN 0.069420 ... 0.086862 0.082564 0.079606 \n", + "56 NaN 0.014758 ... 3.995640 3.989850 3.961410 \n", + "57 NaN 0.000000 ... 0.493676 0.496556 0.501492 \n", + "58 NaN 14.138200 ... 29.391200 29.605300 30.012100 \n", + "59 NaN 32.337800 ... 36.651900 35.621300 35.612600 \n", + "\n", + " 2064 2065 2066 2067 2068 2069 \\\n", + "0 2.623520 2.632230 2.476060 2.401450 2.344890 2.263520 \n", + "1 247.283000 252.159000 248.077000 251.761000 254.646000 253.793000 \n", + "2 158.317000 158.668000 151.414000 150.100000 147.932000 144.727000 \n", + "3 105.143000 108.929000 106.948000 109.672000 112.871000 112.351000 \n", + "4 6.949150 7.092140 6.824650 6.960060 6.905350 6.840980 \n", + "5 27.742800 27.842700 27.235000 27.376300 27.332200 27.243200 \n", + "6 190.230000 193.069000 191.552000 195.504000 198.032000 200.135000 \n", + "7 37.470500 36.548600 35.180500 34.342000 33.414100 32.937600 \n", + "8 0.001474 0.001420 0.001342 0.001294 0.001245 0.001198 \n", + "9 32.323400 33.288500 32.914300 33.712500 34.327400 34.342900 \n", + "10 0.326385 0.314704 0.291694 0.286559 0.277763 0.264092 \n", + "11 37.007100 37.606000 36.548200 37.011600 37.373100 37.245500 \n", + "12 75.089800 75.323600 74.147700 74.479400 74.678500 73.604500 \n", + "13 10.574100 10.775800 10.859000 11.087500 11.110900 10.991100 \n", + "14 201.535000 205.536000 205.801000 208.575000 211.156000 211.642000 \n", + "15 127.675000 129.664000 128.766000 130.112000 131.682000 131.606000 \n", + "16 48.885400 49.659400 46.010200 46.404300 46.607500 44.769200 \n", + "17 38.966000 39.839800 38.017900 38.314200 38.847400 37.750200 \n", + "18 68.052800 69.573900 70.031400 73.104400 74.817700 76.170800 \n", + "19 132.488000 134.150000 131.814000 131.811000 130.958000 130.808000 \n", + "20 142.149000 143.628000 134.016000 135.241000 135.598000 134.803000 \n", + "21 0.572983 0.581637 0.581922 0.590053 0.588713 0.586621 \n", + "22 19.266600 19.492100 19.200400 19.382800 19.505300 19.260300 \n", + "23 17.907100 17.778100 17.121900 16.998700 16.724600 16.231300 \n", + "24 7.959810 8.179240 8.251020 8.457960 8.743000 8.715220 \n", + "25 0.528714 0.518952 0.526430 0.516421 0.508302 0.523488 \n", + "26 1.414730 1.402670 1.351980 1.379090 1.367000 1.331930 \n", + "27 15.894100 15.924400 16.013400 16.171800 16.297700 16.288600 \n", + "28 5.949320 5.778460 5.587850 5.447130 5.333210 5.180330 \n", + "29 0.000279 0.000269 0.000252 0.000243 0.000234 0.000222 \n", + "30 2.412320 2.476210 2.421620 2.439700 2.497280 2.454020 \n", + "31 0.093463 0.089404 0.082263 0.080383 0.080205 0.073534 \n", + "32 3.090450 3.102150 3.008750 3.015110 3.032820 2.958830 \n", + "33 0.040990 0.041862 0.042529 0.043736 0.042899 0.042933 \n", + "34 1.409540 1.442430 1.461220 1.500380 1.516750 1.504440 \n", + "35 3.178750 3.193580 3.129350 3.135190 3.077530 2.994790 \n", + "36 0.761548 0.795274 0.830668 0.874838 0.911115 0.916207 \n", + "37 0.011983 0.011486 0.010958 0.010568 0.010126 0.014696 \n", + "38 0.032257 0.031905 0.037304 0.037028 0.036379 0.035317 \n", + "39 3.645110 3.757740 3.852100 3.979340 4.011990 4.011220 \n", + "40 0.492854 0.477549 0.467463 0.455607 0.439164 0.424733 \n", + "41 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "42 0.319974 0.334249 0.338826 0.350291 0.361948 0.358927 \n", + "43 0.012965 0.012703 0.012222 0.012046 0.012071 0.011517 \n", + "44 0.668170 0.676995 0.676369 0.688495 0.690939 0.676271 \n", + "45 0.141972 0.144631 0.143743 0.144062 0.144257 0.143146 \n", + "46 100.620000 102.403000 102.440000 103.795000 105.094000 105.340000 \n", + "47 31.481300 31.837700 31.222200 31.083300 30.802600 30.240700 \n", + "48 26.491600 27.814600 28.578100 29.747700 30.949000 31.651500 \n", + "49 0.823412 0.979248 0.940808 0.929329 0.920090 0.893601 \n", + "50 4.863330 4.821300 4.878230 4.832640 4.794820 4.722800 \n", + "51 16.100800 16.552500 16.802200 17.258100 17.677900 17.979300 \n", + "52 8.804260 8.567780 8.316770 8.079910 7.834060 7.688840 \n", + "53 0.000005 0.000005 0.000005 0.000004 0.000004 0.000004 \n", + "54 8.105210 8.348120 8.522130 8.734810 8.928030 8.984800 \n", + "55 0.076790 0.073890 0.069682 0.067081 0.064919 0.061947 \n", + "56 4.026630 3.992700 3.887270 3.903430 3.946680 3.934680 \n", + "57 0.498923 0.511655 0.497804 0.499172 0.504315 0.496115 \n", + "58 30.539400 31.034800 31.039100 31.353500 31.709600 31.762100 \n", + "59 36.010600 36.192300 34.995800 34.935400 35.124100 34.326600 \n", + "\n", + " 2070 \n", + "0 2.172020 \n", + "1 249.484000 \n", + "2 139.896000 \n", + "3 111.132000 \n", + "4 6.567220 \n", + "5 26.505800 \n", + "6 197.997000 \n", + "7 31.470900 \n", + "8 0.001133 \n", + "9 33.943800 \n", + "10 0.248573 \n", + "11 36.112200 \n", + "12 73.059500 \n", + "13 10.782000 \n", + "14 210.458000 \n", + "15 131.255000 \n", + "16 42.631400 \n", + "17 35.787600 \n", + "18 77.820800 \n", + "19 128.392000 \n", + "20 125.345000 \n", + "21 0.583903 \n", + "22 19.160500 \n", + "23 15.814600 \n", + "24 8.818190 \n", + "25 0.504541 \n", + "26 1.381970 \n", + "27 16.321100 \n", + "28 5.027080 \n", + "29 0.000212 \n", + "30 2.462030 \n", + "31 0.070105 \n", + "32 2.915300 \n", + "33 0.042176 \n", + "34 1.488400 \n", + "35 2.893310 \n", + "36 0.922728 \n", + "37 0.014009 \n", + "38 0.034595 \n", + "39 3.941840 \n", + "40 0.410733 \n", + "41 0.000000 \n", + "42 0.356959 \n", + "43 0.011520 \n", + "44 0.665765 \n", + "45 0.140471 \n", + "46 104.673000 \n", + "47 29.306600 \n", + "48 32.199200 \n", + "49 0.865683 \n", + "50 4.773640 \n", + "51 18.057000 \n", + "52 7.417590 \n", + "53 0.000004 \n", + "54 9.063910 \n", + "55 0.058764 \n", + "56 3.902630 \n", + "57 0.487106 \n", + "58 31.872000 \n", + "59 33.318000 \n", + "\n", + "[60 rows x 75 columns]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "scenario_variable_2_df.head(60)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Duplicate Rows:\n", + " Model Scenario Region \\\n", + "121996 WILIAM Baseline no policies no CO2tax World \n", + "121997 WILIAM Baseline no policies no CO2tax World \n", + "121998 WILIAM Baseline no policies no CO2tax World \n", + "121999 WILIAM Baseline no policies no CO2tax World \n", + "122000 WILIAM Baseline no policies no CO2tax World \n", + "... ... ... ... \n", + "150210 WILIAM Baseline no policies no CO2tax World \n", + "150211 WILIAM Baseline no policies no CO2tax World \n", + "150212 WILIAM Baseline no policies no CO2tax World \n", + "150213 WILIAM Baseline no policies no CO2tax World \n", + "150214 WILIAM Baseline no policies no CO2tax World \n", + "\n", + " Variable Unit Subscript 0 \\\n", + "121996 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "121997 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "121998 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "121999 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "122000 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", + "... ... ... ... \n", + "150210 transport_electrified_vehicle_batteries_power TW LROW \n", + "150211 transport_electrified_vehicle_batteries_power TW LROW \n", + "150212 transport_electrified_vehicle_batteries_power TW LROW \n", + "150213 transport_electrified_vehicle_batteries_power TW LROW \n", + "150214 transport_electrified_vehicle_batteries_power TW LROW \n", + "\n", + " Subscript 1 Subscript 2 Subscript 3 \\\n", + "121996 PROTRA_PP_solar_open_space_PV C_Si_mono NaN \n", + "121997 PROTRA_PP_solar_open_space_PV C_Si_poly NaN \n", + "121998 PROTRA_PP_solar_open_space_PV CdTe NaN \n", + "121999 PROTRA_PP_solar_open_space_PV CIGS NaN \n", + "122000 PROTRA_PP_solar_urban_PV C_Si_mono NaN \n", + "... ... ... ... \n", + "150210 LFP HPV LDV \n", + "150211 LFP HPV MDV \n", + "150212 LFP HPV HDV \n", + "150213 LFP HPV BUS \n", + "150214 LFP HPV MOTORCYCLES_2W_3W \n", + "\n", + " 2005 ... 2061 2062 2063 2064 2065 \\\n", + "121996 0.000364 ... 0.539886 0.546992 0.552966 0.561550 0.570806 \n", + "121997 0.000961 ... 0.113854 0.115138 0.116198 0.117792 0.119527 \n", + "121998 0.000095 ... 0.024139 0.024446 0.024704 0.025077 0.025480 \n", + "121999 0.000036 ... 0.010348 0.010480 0.010590 0.010750 0.010922 \n", + "122000 0.000452 ... 0.064672 0.061538 0.067632 0.064396 0.070778 \n", + "... ... ... ... ... ... ... ... \n", + "150210 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150211 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150212 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150213 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150214 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "\n", + " 2066 2067 2068 2069 2070 \n", + "121996 0.578521 0.585470 0.590557 0.594684 0.599769 \n", + "121997 0.120954 0.122232 0.123137 0.123851 0.124764 \n", + "121998 0.025815 0.026117 0.026336 0.026513 0.026733 \n", + "121999 0.011066 0.011195 0.011289 0.011365 0.011459 \n", + "122000 0.067434 0.064200 0.070010 0.066687 0.072126 \n", + "... ... ... ... ... ... \n", + "150210 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150211 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150212 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150213 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "150214 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "\n", + "[8831 rows x 75 columns]\n", + "Number of Duplicate Rows: 8831\n", + "162311\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IAMC_variableIAMC_unitWILIAM_variableWILIAM_unit
0Primary EnergyEJ/yrworld_PE_by_commodityNaN
1Primary EnergyEJ/yrtotal_PE_by_regionNaN
2Price|Primary EnergyNaNfuel_price_by_PROTRA_worldMdollars/EJ
3Price|Primary EnergyNaNfuel_price_by_PROTRA_9R_adjustedMdollars/EJ
4Index Price|Final EnergyNaNprice_final_energyDmnl
...............
161Resource|Iron|Reserve Production RatioNaNFe_reserves_to_production_ratioYear
162Resource|Extraction|IronMtFe_total_miningMt/Years
163Resource|Market|Sales|IronNaNFe_market_salesMt/Year
164Resource|IronMtFe_hidden_resourcesMt
165Resource|RURR|IronNaNrelative_RURR_FeDmnl
\n", + "

166 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " IAMC_variable IAMC_unit \\\n", + "0 Primary Energy EJ/yr \n", + "1 Primary Energy EJ/yr \n", + "2 Price|Primary Energy NaN \n", + "3 Price|Primary Energy NaN \n", + "4 Index Price|Final Energy NaN \n", + ".. ... ... \n", + "161 Resource|Iron|Reserve Production Ratio NaN \n", + "162 Resource|Extraction|Iron Mt \n", + "163 Resource|Market|Sales|Iron NaN \n", + "164 Resource|Iron Mt \n", + "165 Resource|RURR|Iron NaN \n", + "\n", + " WILIAM_variable WILIAM_unit \n", + "0 world_PE_by_commodity NaN \n", + "1 total_PE_by_region NaN \n", + "2 fuel_price_by_PROTRA_world Mdollars/EJ \n", + "3 fuel_price_by_PROTRA_9R_adjusted Mdollars/EJ \n", + "4 price_final_energy Dmnl \n", + ".. ... ... \n", + "161 Fe_reserves_to_production_ratio Year \n", + "162 Fe_total_mining Mt/Years \n", + "163 Fe_market_sales Mt/Year \n", + "164 Fe_hidden_resources Mt \n", + "165 relative_RURR_Fe Dmnl \n", + "\n", + "[166 rows x 4 columns]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check for duplicate rows\n", + "duplicate_rows = scenario_variable_2_df[scenario_variable_2_df.duplicated()]\n", + "\n", + "# Display duplicate rows\n", + "print(\"Duplicate Rows:\")\n", + "print(duplicate_rows)\n", + "\n", + "# Count the number of duplicate rows\n", + "num_duplicate_rows = duplicate_rows.shape[0]\n", + "print(\"Number of Duplicate Rows:\", num_duplicate_rows)\n", + "\n", + "scenario_variable_2_df = scenario_variable_2_df.drop_duplicates()\n", + "print(len(scenario_variable_2_df))\n", + "\n", + "# Read the CSV file into a pandas DataFrame\n", + "data_name_df = pd.read_excel(\"../Variable_Reference/Variable_name_IAMC.xlsx\")\n", + "# Remplacer les tirets du bas par des espaces dans la colonne\n", + "# data_name_df['WILIAM_variable'] = data_name_df['WILIAM_variable'].str.replace('_', ' ')\n", + "# Drop rows with NaN values which corresponds to values not conserv for the final upload of data in IAMC format\n", + "data_name_df.dropna(subset=[\"IAMC_variable\"], inplace=True)\n", + "data_name_df" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'world_PE_by_commodity': 'Primary Energy', 'total_PE_by_region': 'Primary Energy', 'fuel_price_by_PROTRA_world': 'Price|Primary Energy', 'fuel_price_by_PROTRA_9R_adjusted': 'Price|Primary Energy', 'price_final_energy': 'Index Price|Final Energy', 'transport_electrified_vehicle_batteries_power': 'Capacity|Electricity|Power|Battery Electric Vehicles', 'CO2_tax_rate_sectors': 'Price|Carbon|Industries', 'GHG_emissions_1R': 'Emissions', 'GHG_emissions_1R_CO2_equivalent': 'Emissions|CO2eq', 'total_GHG_emissions': 'Emissions', 'total_CO2e_emissions_per_capita_9R': 'Emissions|CO2eq [Per capita]', 'GHG_emissions_per_capita_9R': 'Emissions|Per capita', 'temperature_change': 'Temperature|Global Mean Increase', 'sea_level_rise_by_region': 'Sea level|Region|Mean rise', 'sea_level_rise': 'Sea level|Global Mean rise', 'pH_ocean': 'pH|Ocean', 'atmospheric_concentrations_CO2': 'Concentration|CO2', 'CO2_land_use_change_emissions': 'Emissions|CO2|Land use changes', 'CO2_IPPUs_emissions_9R': 'Emissions|CO2|Industrial Processes', 'CO2_waste_emissions_9R': 'Emissions|CO2|Waste', 'total_CO2_energy_emissions_9R': 'Emissions|CO2|Energy|Supply', 'total_CO2_emissions': 'Emissions|CO2', 'cumulative_GHG_emissions': 'Emissions|CO2eq|Cumulative', 'births': 'Population|Births', 'deaths': 'Population|Deaths', 'net_migrations_by_country': 'Population|Net migrations', 'population_35_regions': 'Population', 'population_9_regions': 'Population', 'total_population_over_15': 'Population|Working Age', 'number_households_nonEU': 'Households|number', 'number_households_by_type_EU27': 'Households|type|number', 'ratio_urbanization_EU27': 'Population|Urban [Share]', 'DB_GDP': 'GDP|PPP', 'DB_GVA_AGRICULTURE': 'Value Added|Agriculture', 'DB_GVA_EXTRACTION': 'Value Added|Extraction', 'DB_GVA_ENERGY': 'Value Added|Industry|Energy', 'DB_GVA_INDUSTRY': 'Value Added|Industry', 'DB_GVA_SERVICES': 'Value Added|Services', 'DB_GVA_TAXES_PRODUCTS_TOTAL': 'Value Added|Taxes on products', 'DB_LABOUR_COMPENSATION': 'Value Added|Labour Compensation', 'DB_NET_OPERATING_SURPLUS': 'Value Added|Net Operating Surplus', 'DB_CONSUMPTION_FIXED_CAPITAL': 'Value Added|Consumption Fixed Capital', 'DB_TAXES_PRODUCTION': 'Value Added|Taxes on production', 'DB_HH_CONSUMPTION': 'Expenditure|Household', 'DB_GOV_CONSUMPTION': 'Public Consumption', 'DB_GROSS_FIXED_CAPITAL_FORMATION': 'Capital Formation', 'DB_OTHER_FINAL_DEMAND': 'Final Demand|Other', 'trade_balance_real_by_product': 'Trade|Value|Balance', 'total_exports_real_by_product': 'Trade|Value|Exports', 'total_imports_real_by_product': 'Trade|Value|Imports', 'DB_OUTPUT': 'Output', 'DB_CAPITAL_STOCK': 'Capital Stock', 'employment_total': 'Employment', 'labour_force': 'Labour Supply', 'unemployment_rate': 'Unemployment|Rate', 'government_revenue': 'Revenue|Government', 'government_expenditure': 'Expenditure|Government', 'government_budget_balance': 'Government|Budget Balance', 'DB_GOV_BALANCE_TO_GDP': 'Government|Budget Balance to GDP', 'government_debt': 'Debt|Public', 'DB_HH_DISPOSABLE_INCOME': 'Revenues|Households|Disposable income', 'DB_HH_CONSUMPTION_COICOP': 'Households|Consumption|COICOP', 'DB_HH_SAVINGS': 'Households|Savings|Real', 'disposable_income': 'Revenues|Households|Disposable income|Nominal', 'DB_HH_CONSUMPTION_COICOP_NOMINAL': 'Households|Consumption nominal|COICOP', 'DB_HH_SAVINGS_NOMINAL': 'Households|Savings', 'DB_GDP_PER_CAPITA': 'GDP|Country|Per Capita', 'DB_DISPOSABLE_INCOME_PER_CAPITA': 'Revenue|Households|Disposable [per capita]', 'consumer_price_index': 'Households|Consumer Price [index]', 'gross_value_added_real': 'Value|Added Real', 'gross_domestic_product_deflator': 'Value|GDP deflator', 'gross_domestic_product_real_supply_side': 'Value|GDP real', 'taxes_products_final_demand_real': 'Value|Final Demand real|Taxes on products', 'taxes_products_by_sector_real': 'Value|GDP real|Taxes products', 'disposable_income_real': 'Revenue|Households|Disposable', 'consumption_COICOP_real': 'Expenditure|Household|Real', 'final_demand_imports_in_basic_prices_real_by_component': 'Final Demand|Imports|Basic prices|Components', 'final_demand_dometic_in_basic_prices_real_by_component': 'Final Demand|Domestic|Basic prices|Components', 'final_energy_intensities_by_sector_and_FE': 'Energy Intensity', 'final_energy_demand_by_sector_and_FE': 'Final Energy', 'final_energy_demand_by_FE_9R': 'Final Energy', 'non_energy_use_intensities_by_sector_and_FE': 'Intensity|Final Energy|Non-Energy Use', 'final_non_energy_demand_by_FE_35R': 'Final Energy|Non-Energy Use', 'PROTRA_utilization_applied_priorities': 'Priorities|Energy|Supply', 'CF_PROTRA_full_load_hours_after_constraints': 'Capacity Factor', 'max_TO_from_existing_stock_by_PROTRA': 'Maximum Generation', 'CF_PROTRA': 'Capacity Factor', 'FE_excluding_trade': 'Final Energy|Regional Consumption', 'total_FE_including_net_trade': 'Final Energy', 'PROSUP_storage_losses': 'Losses|Storage', 'PROSUP_flexibility_technologies': 'Final Energy|Flexibility options', 'TO_allocated_by_process': 'Secondary Energy', 'TI_by_PROTRA_and_commodity': 'Transformation Input|Supply', 'PROSUP_P2H_capacity_stock': 'Capacity|Heating|Heat Boilers', 'stationary_electrolyzer_capacity_stock': 'Capacity|Hydrogen|Electricity', 'shares_RES_in_FE': 'Final Energy|Electricity|Renewable [Share]', 'share_FE_RES_vs_total_FE': 'Final Energy|Renewable [Share]', 'share_RES_in_PE': 'Primary Energy|Renewable [Share]', 'PROSTO_dedicated_capacity_stock': 'Capacity|Electricity|Storage Capacity', 'remaining_potential_capacity_by_PROSTO': 'Capacity|Electricity|Storage Capacity|Potential', 'share_total_PROSTO_losses_vs_TO': 'Energy|Supply|Storage|Losses Vs Transformation Output [Share]', 'PROTRA_capacity_expansion': 'Capacity Additions', 'PROTRA_capacity_stock': 'Capacity', 'capacity_stock_PROTRA_PP_solar_PV_by_subtechnology': 'Capacity|Electricity', 'investment_cost_PROTRA_35R': 'Cost|Capital Cost|Energy Supply', 'total_PROTRA_investment_cost_35R': 'Capital Cost|Energy Supply', 'investment_cost_PROFLEX': 'Cost|Capital Cost|Energy Supply', 'total_PROFLEX_investment_cost': 'Capital Cost|Energy Supply|Electricity|Flexibility\\xa0', 'investment_costs_PROTRA_vs_GDP': 'Capital Cost vs GDP|Energy Supply', 'total_energy_capacities_investment_cost': 'Capital Cost|Energy Supply|Electricity', 'efficiences_PV_technology_panels': 'Efficiency|Electricity|PV', 'PE_GDP_intensity': 'Intensity|Primary Energy vs GDP', 'annual_PE_GDP_intensity_change_rate': 'Intensity|Primary Energy vs GDP|Annual change', 'cumulative_PE_GDP_intensity_change_from_2015': 'Intensity|Primary Energy vs GDP|Cumulative since 2015', 'FE_GDP_intensity': 'Intensity|Final Energy vs GDP', 'annual_FE_GDP_intensity_change_rate': 'Intensity|Final Energy vs GDP|Annual change', 'cumulative_FE_GDP_intensity_change_from_2015': 'Intensity|Final Energy vs GDP|Cumulative since 2015', 'net_TFEC_energy_uses_per_capita': 'Final Energy|Net [per capita]', 'FE_including_trade_by_commodity_per_capita': 'Final Energy [per capita]', 'PE_by_commodity': 'Primary Energy', 'PE_by_commodity_per_capita': 'Primary Energy [per capita]', 'total_FE_including_trade_per_capita': 'Final Energy [per capita]', 'power_charge_vehicles_with_SC': 'Capacity|Electricity|Storage|Battery Capacity|Electric Vehicules|Smart Charging', 'capacity_charge_vehicles_with_SC': 'Final Energy|Transportation|Smart Charging|Electricity', 'total_electrified_vehicles_batteries_power_required': 'Capacity Requirements|Electricity|Power|Battery Electric Vehicles', 'transport_electrified_vehicle_batteries_capacity': 'Capacity|Electricity|Storage|Battery Capacity|Electric Vehicles', 'number_EV_chargers_by_type': 'Transport|Electric Vehicles|Chargers', 'total_capacity_EV_chargers': 'Capacity|Electricity|Electric Vehicles chargers', 'length_grid_to_EV_chargers': 'Length|Grid|Electric Vehicles chargers', 'railway_catenary_length': 'Length|Railway|Catenary', 'railway_tracks_length': 'Length|Railway|Tracks', 'remaining_potential_PROTRA_RES_PP': 'Potential|Remaining|Electricity', 'remaining_potential_PROTRA_RES_CHP_HP': 'Potential|Remaining|Heat', 'required_capacity_expansion_flexibility_options': 'Capacity Requirements|Electricity', 'share_curtailment_TO_elec': 'Share|Electricity|Curtailment', 'GHG_intensity_of_final_energy': 'Intensity|Emissions', 'CO2e_intensity_of_final_energy': 'Intensity|Emissions|CO2eq', 'GHG_emissions_per_unit_of_sector_output': 'Intensity|Emissions', 'LUE_solar_PV': 'Land Cover|Energy|Solar|PV', 'net_new_land_requirements_solar_on_land': 'Land Requirements|Solar', 'net_new_land_requirements_PROTRA_on_built_up_land': 'Land Requirements', 'wind_farm_area': 'Land Cover|Energy|Wind', 'total_land_use_PROTRA': 'Land Cover|Energy', 'total_sea_area_use_PROTRA': 'Water Cover|Sea', 'EROIst_PV_technologies': 'EROI|static|PV', 'EROIfinal_PV_technologies': 'EROI|final|PV', 'EROIst_PROTRA': 'EROI|static', 'dynEROIst_PROTRA': 'EROI|dynamic', 'EPTB_dynamic': 'Energy Payback Time', 'global_EROIst_system': 'EROI|static|Global', 'EROIst_system': 'EROI|static', 'total_ESOIst_electrified_vehicles': 'EROI|static|Electric Vehicles', 'ESOIst_PHS': 'EROI|static|Storage|Pumped Hydropower plants', 'land_use_changes_demanded': 'Land Cover|Demand', 'land_use_area_by_region': 'Land Cover', 'cropland_loss_due_to_sea_level_rise_by_region': 'Land Cover|Cropland|Losses|Sea level rise', 'CH4_emissions_agriculture': 'Emissions|CH4|AFOLU|Agriculture', 'N2O_emissions_agriculture': 'Emissions|N2O|AFOLU|Agriculture', 'materials_consumption_per_capita': 'Resource|Consumption [per capita]', 'Fe_price_economy': 'Price|Mining|Iron', 'Fe_reserves_to_production_ratio': 'Resource|Iron|Reserve Production Ratio', 'Fe_total_mining': 'Resource|Extraction|Iron', 'Fe_market_sales': 'Resource|Market|Sales|Iron', 'Fe_hidden_resources': 'Resource|Iron', 'relative_RURR_Fe': 'Resource|RURR|Iron'}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\1107510058.py:5: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " scenario_variable_2_df['Variable']= scenario_variable_2_df['Variable'].replace(IAMC_WILIAM_name_dict)\n" + ] + } + ], + "source": [ + "# Create a dict with Wiliam's name as key, IAMC's name as value\n", + "IAMC_WILIAM_name_dict = data_name_df.set_index('WILIAM_variable')['IAMC_variable'].to_dict()\n", + "print(IAMC_WILIAM_name_dict)\n", + "# Replace the variable name used in William to the ones used for IAMC format. \n", + "scenario_variable_2_df['Variable']= scenario_variable_2_df['Variable'].replace(IAMC_WILIAM_name_dict)\n", + "\n", + "# Keep only the rows where the value in column 'Variable' belongs to the list of wanted values \n", + "variable_required_list = data_name_df['IAMC_variable'].to_list()\n", + "# scenario_variable_df = scenario_variable_df[scenario_variable_df['Variable'].isin(variable_required_list)]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The missing variable in the export dataset are the following: ['Expenditure|Household', 'Value Added|Services', 'Value Added|Agriculture', 'Value Added|Taxes on products', 'Capital Stock', 'Households|Consumption|COICOP', 'Value Added|Labour Compensation', 'Households|Savings', 'Final Demand|Other', 'GDP|Country|Per Capita', 'GDP|PPP', 'Value Added|Extraction', 'Capacity|Batteries|Transport Vehicule', 'Value Added|Net Operating Surplus', 'Households|Consumption nominal|COICOP', 'Revenue|Households|Disposable [per capita]', 'Value Added|Industry|Energy', 'Revenues|Households|Disposable income', 'Value Added|Industry', 'Value Added|Taxes on production', 'Capital Formation', 'Government|Budget Balance to GDP', 'Value Added|Consumption Fixed Capital', 'Output', 'Households|Savings|Real', 'Public Consumption']\n", + "The number of missing varibles is 26\n" + ] + } + ], + "source": [ + "variables_used_list = scenario_variable_2_df['Variable'].to_list()\n", + "variables_required_not_in = list(set(variable_required_list) - set(variables_used_list))\n", + "print('The missing variable in the export dataset are the following:', variables_required_not_in)\n", + "print('The number of missing varibles is ', len(variables_required_not_in))" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\3639733538.py:36: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " scenario_variable_2_df['Region'] = scenario_variable_2_df['Region'].replace(country_Wiliam_dict)\n" + ] + } + ], + "source": [ + "# Open the text file containing the energy dictionary\n", + "with open('../Create_Variable_Dict/energy_dict.txt', 'r') as f:\n", + " # Read the contents of the file\n", + " energy_dict_str = f.read()\n", + "\n", + "# Convert the string representation of the dictionary back to a dictionary object\n", + "energy_dict = ast.literal_eval(energy_dict_str)\n", + "\n", + "\n", + "# Open the text file containing the rest dictionary\n", + "with open('../Create_Variable_Dict/rest_dict.txt', 'r') as f:\n", + " # Read the contents of the file\n", + " rest_dict_str = f.read()\n", + "\n", + "# Convert the string representation of the dictionary back to a dictionary object\n", + "rest_dict = ast.literal_eval(rest_dict_str)\n", + "\n", + "\n", + "# Open the text file containing the sectors dictionary\n", + "with open('../Create_Variable_Dict/sectors_dict.txt', 'r') as f:\n", + " # Read the contents of the file\n", + " sectors_str = f.read()\n", + "\n", + "# Convert the string representation of the dictionary back to a dictionary object\n", + "sectors_dict = ast.literal_eval(sectors_str)\n", + "\n", + "# Open the text file containing the dictionary\n", + "with open('../Create_Variable_Dict/country_dict.txt', 'r') as f:\n", + " # Read the contents of the file\n", + " dict_str = f.read()\n", + "\n", + "# Convert the string representation of the dictionary back to a dictionary object\n", + "country_Wiliam_dict = ast.literal_eval(dict_str)\n", + "\n", + "# Replace the region name by the ones adapted for Wiliam. \n", + "scenario_variable_2_df['Region'] = scenario_variable_2_df['Region'].replace(country_Wiliam_dict)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelScenarioRegionVariableUnit20052006200720082009...2061206220632064206520662067206820692070
0WILIAMBaseline no policies no CO2taxWorldPrimary Energy|Agriculture ProductsEJ/Year0.0282421.0574501.2656201.7130501.934410...2.9487602.8243902.7275502.6235202.6322302.476062.4014502.3448902.2635202.172020
1WILIAMBaseline no policies no CO2taxWorldPrimary Energy|CoalEJ/Year139.888000142.536000145.529000148.652000149.764000...239.392000238.914000242.655000247.283000252.159000248.07700251.761000254.646000253.793000249.484000
2WILIAMBaseline no policies no CO2taxWorldPrimary Energy|OilEJ/Year202.483000200.246000200.156000199.572000199.148000...170.113000162.348000159.496000158.317000158.668000151.41400150.100000147.932000144.727000139.896000
3WILIAMBaseline no policies no CO2taxWorldPrimary Energy|Forestry ProductsEJ/Year37.12750037.33430037.47910037.76630037.924300...98.84120098.722100101.700000105.143000108.929000106.94800109.672000112.871000112.351000111.132000
4WILIAMBaseline no policies no CO2taxWorldPrimary Energy|GeothermalEJ/Year0.2405550.2498270.2578230.2678570.278548...7.0771306.7295806.7998906.9491507.0921406.824656.9600606.9053506.8409806.567220
..................................................................
171137WILIAMBaseline no policies no CO2taxWorldResource|Iron|LOW_GRADEMt128992.000000127935.000000126830.000000125688.000000124519.000000...66756.00000065861.20000064974.70000064096.80000063227.40000062366.5000061514.20000060670.50000059835.30000059008.800000
171138WILIAMBaseline no policies no CO2taxWorldResource|Iron|ULTRALOW_GRADEMt176000.000000175990.000000175978.000000175963.000000175945.000000...132301.000000130580.000000128867.000000127163.000000125469.000000123787.00000122116.000000120458.000000118813.000000117183.000000
171139WILIAMBaseline no policies no CO2taxWorldResource|Iron|TRACE_GRADEMt0.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171140WILIAMBaseline no policies no CO2taxWorldResource|Iron|OCEANS_GRADEMt0.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171141WILIAMBaseline no policies no CO2taxWorldResource|RURR|IronNaN0.9154600.9136800.9113070.9088390.906274...0.6305950.6208190.6111160.6015020.5919820.582560.5732360.5640140.5548940.545877
\n", + "

162311 rows × 71 columns

\n", + "
" + ], + "text/plain": [ + " Model Scenario Region \\\n", + "0 WILIAM Baseline no policies no CO2tax World \n", + "1 WILIAM Baseline no policies no CO2tax World \n", + "2 WILIAM Baseline no policies no CO2tax World \n", + "3 WILIAM Baseline no policies no CO2tax World \n", + "4 WILIAM Baseline no policies no CO2tax World \n", + "... ... ... ... \n", + "171137 WILIAM Baseline no policies no CO2tax World \n", + "171138 WILIAM Baseline no policies no CO2tax World \n", + "171139 WILIAM Baseline no policies no CO2tax World \n", + "171140 WILIAM Baseline no policies no CO2tax World \n", + "171141 WILIAM Baseline no policies no CO2tax World \n", + "\n", + " Variable Unit 2005 \\\n", + "0 Primary Energy|Agriculture Products EJ/Year 0.028242 \n", + "1 Primary Energy|Coal EJ/Year 139.888000 \n", + "2 Primary Energy|Oil EJ/Year 202.483000 \n", + "3 Primary Energy|Forestry Products EJ/Year 37.127500 \n", + "4 Primary Energy|Geothermal EJ/Year 0.240555 \n", + "... ... ... ... \n", + "171137 Resource|Iron|LOW_GRADE Mt 128992.000000 \n", + "171138 Resource|Iron|ULTRALOW_GRADE Mt 176000.000000 \n", + "171139 Resource|Iron|TRACE_GRADE Mt 0.000000 \n", + "171140 Resource|Iron|OCEANS_GRADE Mt 0.000000 \n", + "171141 Resource|RURR|Iron NaN 0.915460 \n", + "\n", + " 2006 2007 2008 2009 ... \\\n", + "0 1.057450 1.265620 1.713050 1.934410 ... \n", + "1 142.536000 145.529000 148.652000 149.764000 ... \n", + "2 200.246000 200.156000 199.572000 199.148000 ... \n", + "3 37.334300 37.479100 37.766300 37.924300 ... \n", + "4 0.249827 0.257823 0.267857 0.278548 ... \n", + "... ... ... ... ... ... \n", + "171137 127935.000000 126830.000000 125688.000000 124519.000000 ... \n", + "171138 175990.000000 175978.000000 175963.000000 175945.000000 ... \n", + "171139 0.000000 0.000000 0.000000 0.000000 ... \n", + "171140 0.000000 0.000000 0.000000 0.000000 ... \n", + "171141 0.913680 0.911307 0.908839 0.906274 ... \n", + "\n", + " 2061 2062 2063 2064 \\\n", + "0 2.948760 2.824390 2.727550 2.623520 \n", + "1 239.392000 238.914000 242.655000 247.283000 \n", + "2 170.113000 162.348000 159.496000 158.317000 \n", + "3 98.841200 98.722100 101.700000 105.143000 \n", + "4 7.077130 6.729580 6.799890 6.949150 \n", + "... ... ... ... ... \n", + "171137 66756.000000 65861.200000 64974.700000 64096.800000 \n", + "171138 132301.000000 130580.000000 128867.000000 127163.000000 \n", + "171139 0.000000 0.000000 0.000000 0.000000 \n", + "171140 0.000000 0.000000 0.000000 0.000000 \n", + "171141 0.630595 0.620819 0.611116 0.601502 \n", + "\n", + " 2065 2066 2067 2068 \\\n", + "0 2.632230 2.47606 2.401450 2.344890 \n", + "1 252.159000 248.07700 251.761000 254.646000 \n", + "2 158.668000 151.41400 150.100000 147.932000 \n", + "3 108.929000 106.94800 109.672000 112.871000 \n", + "4 7.092140 6.82465 6.960060 6.905350 \n", + "... ... ... ... ... \n", + "171137 63227.400000 62366.50000 61514.200000 60670.500000 \n", + "171138 125469.000000 123787.00000 122116.000000 120458.000000 \n", + "171139 0.000000 0.00000 0.000000 0.000000 \n", + "171140 0.000000 0.00000 0.000000 0.000000 \n", + "171141 0.591982 0.58256 0.573236 0.564014 \n", + "\n", + " 2069 2070 \n", + "0 2.263520 2.172020 \n", + "1 253.793000 249.484000 \n", + "2 144.727000 139.896000 \n", + "3 112.351000 111.132000 \n", + "4 6.840980 6.567220 \n", + "... ... ... \n", + "171137 59835.300000 59008.800000 \n", + "171138 118813.000000 117183.000000 \n", + "171139 0.000000 0.000000 \n", + "171140 0.000000 0.000000 \n", + "171141 0.554894 0.545877 \n", + "\n", + "[162311 rows x 71 columns]" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Dict used to check if the subscripts are a country\n", + "country_dict = {\n", + " \"EU27\": 1,\n", + " \"UK\": 1,\n", + " \"CHINA\": 1,\n", + " \"EASOC\": 1,\n", + " \"INDIA\": 1,\n", + " \"LATAM\": 1,\n", + " \"RUSSIA\": 1,\n", + " \"USMCA\": 1,\n", + " \"LROW\": 1,\n", + " \"AUSTRIA\": 1,\n", + " \"BELGIUM\": 1,\n", + " \"BULGARIA\": 1,\n", + " \"CROATIA\": 1,\n", + " \"CYPRUS\": 1,\n", + " \"CZECH_REPUBLIC\": 1,\n", + " \"DENMARK\": 1,\n", + " \"ESTONIA\": 1,\n", + " \"FINLAND\": 1,\n", + " \"FRANCE\": 1,\n", + " \"GERMANY\": 1,\n", + " \"GREECE\": 1,\n", + " \"HUNGARY\": 1,\n", + " \"IRELAND\": 1,\n", + " \"ITALY\": 1,\n", + " \"LATVIA\": 1,\n", + " \"LITHUANIA\": 1,\n", + " \"LUXEMBOURG\": 1,\n", + " \"MALTA\": 1,\n", + " \"NETHERLANDS\": 1,\n", + " \"POLAND\": 1,\n", + " \"PORTUGAL\": 1,\n", + " \"ROMANIA\": 1,\n", + " \"SLOVAKIA\": 1,\n", + " \"SLOVENIA\": 1,\n", + " \"SPAIN\": 1,\n", + " \"SWEDEN\": 1,\n", + "}\n", + "\n", + "\n", + "\n", + "\n", + "# Aggregate the subscripts at the end of the variable\n", + "def aggregate_variable_name(row, counter):\n", + " for k in range(counter):\n", + " subscript = row[\"Subscript \" + str(k)]\n", + "\n", + " if k == 0:\n", + " if country_dict.get(subscript) == 1:\n", + " # Give the name of the region for that variable\n", + " row[\"Region\"] = subscript\n", + "\n", + " row[\"Subscript 0\"] = np.nan\n", + " continue\n", + "\n", + " if not pd.isnull(subscript):\n", + " if energy_dict.get(subscript, None) is not None:\n", + " subscript = energy_dict[subscript]\n", + " elif rest_dict.get(subscript, None):\n", + " subscript = rest_dict[subscript]\n", + " elif sectors_dict.get(subscript, None):\n", + " subscript = sectors_dict[subscript]\n", + "\n", + " row[\"Variable\"] = row[\"Variable\"] + \"|\" + subscript\n", + "\n", + " return row\n", + "\n", + "\n", + "# Apply the previous function on all the lines\n", + "scenario_variable_2_df = scenario_variable_2_df.apply(\n", + " aggregate_variable_name, args=(counter,), axis=1\n", + ")\n", + "\n", + "# Remove the subscript columns once they have been added at the end of the variable name\n", + "drop_columns_list = [\"Subscript \" + str(k) for k in range(counter)]\n", + "scenario_variable_2_df.drop(columns=drop_columns_list, inplace=True)\n", + "\n", + "scenario_variable_2_df" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8320\n", + "8257\n" + ] + } + ], + "source": [ + "import csv\n", + "# Remove the duplication on the variable column \n", + "scenario_variable_df = scenario_variable_df.drop_duplicates(subset=[\"Variable\"])\n", + "print(len(scenario_variable_df))\n", + "\n", + "# Step 1: Get the column of old name\n", + "data_first_column = scenario_variable_df[\"Variable\"].to_list()\n", + "\n", + "\n", + "# Remove the duplication of the Variable column except when the region is 'World'\n", + "# Assign a temporary index column to keep track of the original order\n", + "scenario_variable_2_df['temp_index'] = scenario_variable_2_df.index\n", + "\n", + "\n", + "# Drop duplicates based on 'Variable' for non-'World' rows\n", + "non_world_rows = scenario_variable_2_df.drop_duplicates(subset='Variable')\n", + "\n", + "\n", + "\n", + "# Step 2: Get the column of old name\n", + "data_second_column = non_world_rows[\"Variable\"].to_list()\n", + "print(len(data_second_column))\n", + "\n", + "\n", + "\n", + "# Write the new data along with the existing data\n", + "with open(\"example.csv\", \"w\", newline=\"\") as csvfile:\n", + " csvwriter = csv.writer(csvfile)\n", + " for k in range(len(data_second_column)):\n", + " csvwriter.writerow([data_first_column[k], data_second_column[k]])\n", + " for k in range(len(data_second_column), len(data_first_column)): \n", + " csvwriter.writerow([data_first_column[k]])\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "IAMC_format", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 1abd20876b25be835bb43eedb6a2d7418fdae6b6 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 10:54:07 +0200 Subject: [PATCH 04/22] update the dictionnary of translation --- .../economy_dashboard_dict.txt | 37 ++++ .../Create_Variable_Dict/energy_dict.txt | 18 +- .../Create_Variable_Dict/variable_dict.ipynb | 173 ++++++++++++++++-- 3 files changed, 208 insertions(+), 20 deletions(-) create mode 100644 Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt diff --git a/Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt b/Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt new file mode 100644 index 0000000..cee3717 --- /dev/null +++ b/Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt @@ -0,0 +1,37 @@ +{'DB CAPITAL STOCK': 'Capital Stock', + 'DB CONSUMPTION FIXED CAPITAL': 'Value Added|Consumption Fixed Capital', + 'DB DISPOSABLE INCOME PER CAPITA': 'Households|Consumer Price [index]', + 'DB EMPLOYMENT': 'Employment', + 'DB EXPORTS': 'Trade|Value|Exports', + 'DB GDP': 'GDP|PPP', + 'DB GDP PER CAPITA': 'Revenue|Households|Disposable[per capita]', + 'DB GOV BALANCE': 'Government|Budget Balance', + 'DB GOV BALANCE TO GDP': 'Government|Budget Balance to GDP', + 'DB GOV CONSUMPTION': 'Public Consumption', + 'DB GOV DEBT': 'Debt|Public', + 'DB GOV DEBT TO GDP': 'Revenues|Households|Disposable income', + 'DB GOV EXPENDITURE': 'Expenditure|Government', + 'DB GOV REVENUE': 'Revenue|Government', + 'DB GROSS FIXED CAPITAL FORMATION': 'Capital Formation', + 'DB GVA AGRICULTURE': 'Value Added|Agriculture', + 'DB GVA ENERGY': 'Value Added|Industry|Energy', + 'DB GVA EXTRACTION': 'Value Added|Extraction', + 'DB GVA INDUSTRY': 'Value Added|Industry', + 'DB GVA SERVICES': 'Value Added|Services', + 'DB GVA TAXES PRODUCTS TOTAL': 'Value Added|Taxes on products', + 'DB HH CONSUMPTION': 'Expenditure|Household', + 'DB HH CONSUMPTION COICOP': 'Households|Savings|Real', + 'DB HH CONSUMPTION COICOP NOMINAL': 'Households|Savings', + 'DB HH DISPOSABLE INCOME': 'Households|Consumption|COICOP', + 'DB HH DISPOSABLE INCOME NOMINAL': 'Households|Consumption nominal|COICOP', + 'DB HH SAVINGS': 'Revenues|Households|Disposable income|Nominal', + 'DB HH SAVINGS NOMINAL': 'GDP|Country[per capita]', + 'DB IMPORTS': 'Trade|Value|Imports', + 'DB LABOUR COMPENSATION': 'Value Added|Labour Compensation', + 'DB LABOUR FORCE': 'Labour Supply', + 'DB NET OPERATING SURPLUS': 'Value Added|Net Operating Surplus', + 'DB OTHER FINAL DEMAND': 'Final Demand|Other', + 'DB OUTPUT': 'Output', + 'DB TAXES PRODUCTION': 'Value Added|Taxes on production', + 'DB TRADE BALANCE': 'Trade|Value|Balance', + 'DB UNEMPLOYMENT RATE': 'Unemployment|Rate'} diff --git a/Conversion-Script/Create_Variable_Dict/energy_dict.txt b/Conversion-Script/Create_Variable_Dict/energy_dict.txt index ff4fc2f..3c79d4f 100644 --- a/Conversion-Script/Create_Variable_Dict/energy_dict.txt +++ b/Conversion-Script/Create_Variable_Dict/energy_dict.txt @@ -2,9 +2,9 @@ 'FE_gas': 'Gas', 'FE_heat': 'Heat', 'FE_hydrogen': 'Hydrogen', - 'FE_liquid': 'Liquid', - 'FE_solid_bio': 'Solid|Biomass', - 'FE_solid_fossil': 'Solid|Fossil', + 'FE_liquid': 'Liquids', + 'FE_solid_bio': 'Solids|Biomass', + 'FE_solid_fossil': 'Solids|Fossil', 'PE_agriculture_products': 'Agriculture Products', 'PE_coal': 'Coal', 'PE_forestry_products': 'Forestry Products', @@ -39,14 +39,14 @@ 'PROTRA_PP_gas_fuels_CCS': 'Electricity|Gas fuels|w/ CCS', 'PROTRA_PP_geothermal': 'Electricity|Geothermal', 'PROTRA_PP_hydropower_dammed': 'Electricity|Hydro|Dammed', - 'PROTRA_PP_hydropower_run_of_river': 'Electricity|Hydro|Run of river', + 'PROTRA_PP_hydropower_run_of_river': 'Electricity|Hydro|Run of River', 'PROTRA_PP_liquid_fuels': 'Electricity|Liquid fuels|w/o CCS', 'PROTRA_PP_liquid_fuels_CCS': 'Electricity|Liquid fuels|w/ CCS', 'PROTRA_PP_nuclear': 'Electricity|Nuclear', 'PROTRA_PP_oceanic': 'Electricity|Ocean', 'PROTRA_PP_solar_CSP': 'Electricity|Solar|Csp', - 'PROTRA_PP_solar_open_space_PV': 'Electricity|Solar|Open space|Pv', - 'PROTRA_PP_solar_urban_PV': 'Electricity|Solar|Urban|Pv', + 'PROTRA_PP_solar_open_space_PV': 'Electricity|Solar|PV|Open Land', + 'PROTRA_PP_solar_urban_PV': 'Electricity|Solar|PV|Urban', 'PROTRA_PP_solid_bio': 'Electricity|Solid|Biomass|w/o CCS', 'PROTRA_PP_solid_bio_CCS': 'Electricity|Solid|Biomass|w/ CCS', 'PROTRA_PP_solid_fossil': 'Electricity|Solid|Fossil|w/o CCS', @@ -64,6 +64,6 @@ 'TO_gas': 'Gas', 'TO_heat': 'Heat', 'TO_hydrogen': 'Hydrogen', - 'TO_liquid': 'Liquid', - 'TO_solid_bio': 'Solid Biomass', - 'TO_solid_fossil': 'Solid Fossil'} + 'TO_liquid': 'Liquids', + 'TO_solid_bio': 'Solids|Biomass', + 'TO_solid_fossil': 'Solids|Fossil'} diff --git a/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb b/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb index f740238..a4fe54a 100644 --- a/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb +++ b/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb @@ -219,9 +219,9 @@ " \"Gas\",\n", " \"Heat\",\n", " \"Hydrogen\",\n", - " \"Liquid\",\n", - " \"Solid Biomass\",\n", - " \"Solid Fossil\"\n", + " \"Liquids\",\n", + " \"Solids|Biomass\",\n", + " \"Solids|Fossil\"\n", "]\n", "energy_sources_old = [\n", " \"TO_elec\",\n", @@ -258,9 +258,9 @@ " \"Gas\",\n", " \"Heat\",\n", " \"Hydrogen\",\n", - " \"Liquid\",\n", - " \"Solid|Biomass\",\n", - " \"Solid|Fossil\"\n", + " \"Liquids\",\n", + " \"Solids|Biomass\",\n", + " \"Solids|Fossil\"\n", "]\n", "\n", "energy_final_dict= dict(zip(energy_final_old, energy_final_new))\n", @@ -429,10 +429,60 @@ " else : \n", " new_elem = new_elem + '|' + modify_element(elem[4:])\n", " energy_processes_new.append(new_elem)\n", - "\n", - " \n", - "energy_processes_dict = dict(zip(energy_processes_old, energy_processes_new))\n", - "energy_processes_dict" + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "energy_processes_dict = {\n", + " 'PROTRA_CHP_gas_fuels': 'Electricity and Heat|Gas fuels|w/o CCS',\n", + " 'PROTRA_CHP_gas_fuels_CCS': 'Electricity and Heat|Gas fuels|w/ CCS',\n", + " 'PROTRA_CHP_geothermal_DEACTIVATED': 'Electricity and '\n", + " 'Heat|Geothermal|Deactivated',\n", + " 'PROTRA_CHP_liquid_fuels': 'Electricity and Heat|Liquid fuels|w/o CCS',\n", + " 'PROTRA_CHP_liquid_fuels_CCS': 'Electricity and Heat|Liquid fuels|w/ CCS',\n", + " 'PROTRA_CHP_solid_bio': 'Electricity and Heat|Solid|Biomass|w/o CCS',\n", + " 'PROTRA_CHP_solid_bio_CCS': 'Electricity and Heat|Solid|Biomass|w/ CCS',\n", + " 'PROTRA_CHP_solid_fossil': 'Electricity and Heat|Solid|Fossil|w/o CCS',\n", + " 'PROTRA_CHP_solid_fossil_CCS': 'Electricity and Heat|Solid|Fossil|w/ CCS',\n", + " 'PROTRA_CHP_waste': 'Electricity and Heat|Waste',\n", + " 'PROTRA_HP_gas_fuels': 'Heat|Gas fuels',\n", + " 'PROTRA_HP_geothermal': 'Heat|Geothermal',\n", + " 'PROTRA_HP_liquid_fuels': 'Heat|Liquid fuels',\n", + " 'PROTRA_HP_solar_DEACTIVATED': 'Heat|Solar|Deactivated',\n", + " 'PROTRA_HP_solid_bio': 'Heat|Solid|Biomass',\n", + " 'PROTRA_HP_solid_fossil': 'Heat|Solid|Fossil',\n", + " 'PROTRA_HP_waste': 'Heat|Waste',\n", + " 'PROTRA_PP_gas_fuels': 'Electricity|Gas fuels|w/o CCS',\n", + " 'PROTRA_PP_gas_fuels_CCS': 'Electricity|Gas fuels|w/ CCS',\n", + " 'PROTRA_PP_geothermal': 'Electricity|Geothermal',\n", + " 'PROTRA_PP_hydropower_dammed': 'Electricity|Hydro|Dammed',\n", + " 'PROTRA_PP_hydropower_run_of_river': 'Electricity|Hydro|Run of River',\n", + " 'PROTRA_PP_liquid_fuels': 'Electricity|Liquid fuels|w/o CCS',\n", + " 'PROTRA_PP_liquid_fuels_CCS': 'Electricity|Liquid fuels|w/ CCS',\n", + " 'PROTRA_PP_nuclear': 'Electricity|Nuclear',\n", + " 'PROTRA_PP_oceanic': 'Electricity|Ocean',\n", + " 'PROTRA_PP_solar_CSP': 'Electricity|Solar|Csp',\n", + " 'PROTRA_PP_solar_open_space_PV': 'Electricity|Solar|PV|Open Land',\n", + " 'PROTRA_PP_solar_urban_PV': 'Electricity|Solar|PV|Urban',\n", + " 'PROTRA_PP_solid_bio': 'Electricity|Solid|Biomass|w/o CCS',\n", + " 'PROTRA_PP_solid_bio_CCS': 'Electricity|Solid|Biomass|w/ CCS',\n", + " 'PROTRA_PP_solid_fossil': 'Electricity|Solid|Fossil|w/o CCS',\n", + " 'PROTRA_PP_solid_fossil_CCS': 'Electricity|Solid|Fossil|w/ CCS',\n", + " 'PROTRA_PP_waste': 'Electricity|Waste|w/o CCS',\n", + " 'PROTRA_PP_waste_CCS': 'Electricity|Waste|w/ CCS',\n", + " 'PROTRA_PP_wind_offshore': 'Electricity|Wind|Offshore',\n", + " 'PROTRA_PP_wind_onshore': 'Electricity|Wind|Onshore',\n", + " 'PROTRA_blending_gas_fuels': 'Gas Fuels',\n", + " 'PROTRA_blending_liquid_fuels': 'Liquid Fuels',\n", + " 'PROTRA_no_process_TI_hydrogen': 'Hydrogen',\n", + " 'PROTRA_no_process_TI_solid_bio': 'Solids|Biomass',\n", + " 'PROTRA_no_process_TI_solid_fossil': 'Solids|Fossils'\n", + "}" ] }, { @@ -624,7 +674,108 @@ "sectors_dict = dict(zip(sector_list, new_sectors_list))\n", "# Save dictionary with pprint\n", "with open('sectors_dict.txt', 'w') as f:\n", - " pprint.pprint(sectors_dict, f)" + " pprint.pprint(sectors_dict, f)\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Economy Dashboard Dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "economy_dashboard_list = [\n", + " 'DB GDP',\n", + " 'DB GVA AGRICULTURE',\n", + " 'DB GVA EXTRACTION',\n", + " 'DB GVA ENERGY',\n", + " 'DB GVA INDUSTRY',\n", + " 'DB GVA SERVICES',\n", + " 'DB GVA TAXES PRODUCTS TOTAL',\n", + " 'DB LABOUR COMPENSATION',\n", + " 'DB NET OPERATING SURPLUS',\n", + " 'DB CONSUMPTION FIXED CAPITAL',\n", + " 'DB TAXES PRODUCTION',\n", + " 'DB HH CONSUMPTION',\n", + " 'DB GOV CONSUMPTION',\n", + " 'DB GROSS FIXED CAPITAL FORMATION',\n", + " 'DB OTHER FINAL DEMAND',\n", + " 'DB TRADE BALANCE',\n", + " 'DB EXPORTS',\n", + " 'DB IMPORTS',\n", + " 'DB OUTPUT',\n", + " 'DB CAPITAL STOCK',\n", + " 'DB EMPLOYMENT',\n", + " 'DB LABOUR FORCE',\n", + " 'DB UNEMPLOYMENT RATE',\n", + " 'DB GOV REVENUE',\n", + " 'DB GOV EXPENDITURE',\n", + " 'DB GOV BALANCE',\n", + " 'DB GOV BALANCE TO GDP',\n", + " 'DB GOV DEBT',\n", + " 'DB GOV DEBT TO GDP',\n", + " 'DB HH DISPOSABLE INCOME',\n", + " 'DB HH CONSUMPTION COICOP',\n", + " 'DB HH SAVINGS',\n", + " 'DB HH DISPOSABLE INCOME NOMINAL',\n", + " 'DB HH CONSUMPTION COICOP NOMINAL',\n", + " 'DB HH SAVINGS NOMINAL',\n", + " 'DB GDP PER CAPITA',\n", + " 'DB DISPOSABLE INCOME PER CAPITA',\n", + " 'DB CONSUMER PRICE INDEX'\n", + "]\n", + "\n", + "new_economy_dashboard_list = [\n", + " \"GDP|PPP\",\n", + " \"Value Added|Agriculture\",\n", + " \"Value Added|Extraction\",\n", + " \"Value Added|Industry|Energy\",\n", + " \"Value Added|Industry\",\n", + " \"Value Added|Services\",\n", + " \"Value Added|Taxes on products\",\n", + " \"Value Added|Labour Compensation\",\n", + " \"Value Added|Net Operating Surplus\",\n", + " \"Value Added|Consumption Fixed Capital\",\n", + " \"Value Added|Taxes on production\",\n", + " \"Expenditure|Household\",\n", + " \"Public Consumption\",\n", + " \"Capital Formation\",\n", + " \"Final Demand|Other\",\n", + " \"Trade|Value|Balance\",\n", + " \"Trade|Value|Exports\",\n", + " \"Trade|Value|Imports\",\n", + " \"Output\",\n", + " \"Capital Stock\",\n", + " \"Employment\",\n", + " \"Labour Supply\",\n", + " \"Unemployment|Rate\",\n", + " \"Revenue|Government\",\n", + " \"Expenditure|Government\",\n", + " \"Government|Budget Balance\",\n", + " \"Government|Budget Balance to GDP\",\n", + " \"Debt|Public\",\n", + " \"Revenues|Households|Disposable income\",\n", + " \"Households|Consumption|COICOP\",\n", + " \"Households|Savings|Real\",\n", + " \"Revenues|Households|Disposable income|Nominal\",\n", + " \"Households|Consumption nominal|COICOP\",\n", + " \"Households|Savings\",\n", + " \"GDP|Country[per capita]\",\n", + " \"Revenue|Households|Disposable[per capita]\",\n", + " \"Households|Consumer Price [index]\"\n", + "]\n", + "\n", + "economy_dashboard_dict = dict(zip(economy_dashboard_list, new_economy_dashboard_list))\n", + "# Save dictionary with pprint\n", + "with open('economy_dashboard_dict.txt', 'w') as f:\n", + " pprint.pprint(economy_dashboard_dict, f)" ] } ], From 6a6675417dfd163ca7b7d844d2691bc18c6625bc Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 11:51:20 +0200 Subject: [PATCH 05/22] update the creation of the first dictionary of translation --- .../Convert_Wiliam_result_IAMC-format.ipynb | 126 +- .../Creation_global_dict_helpers.ipynb | 4085 ++--------------- Visualization/Plot_timeseries.ipynb | 682 +-- 3 files changed, 381 insertions(+), 4512 deletions(-) diff --git a/Conversion-Script/Convert_Wiliam_result_IAMC-format.ipynb b/Conversion-Script/Convert_Wiliam_result_IAMC-format.ipynb index 16ec6e0..eb58989 100644 --- a/Conversion-Script/Convert_Wiliam_result_IAMC-format.ipynb +++ b/Conversion-Script/Convert_Wiliam_result_IAMC-format.ipynb @@ -161,13 +161,24 @@ "metadata": {}, "outputs": [], "source": [ + "# Check for duplicate rows\n", + "duplicate_rows = scenario_variable_df[scenario_variable_df.duplicated()]\n", + "\n", + "# Display duplicate rows\n", + "print(\"Duplicate Rows:\")\n", + "print(duplicate_rows)\n", + "\n", + "# Count the number of duplicate rows\n", + "num_duplicate_rows = duplicate_rows.shape[0]\n", + "print(\"Number of Duplicate Rows:\", num_duplicate_rows)\n", + "\n", "# Read the CSV file into a pandas DataFrame\n", - "data_name_df = pd.read_excel('Variable_Reference/Variable_name_IAMC.xlsx')\n", + "data_name_df = pd.read_excel(\"Variable_Reference/Variable_name_IAMC.xlsx\")\n", "# Remplacer les tirets du bas par des espaces dans la colonne\n", "# data_name_df['WILIAM_variable'] = data_name_df['WILIAM_variable'].str.replace('_', ' ')\n", "# Drop rows with NaN values which corresponds to values not conserv for the final upload of data in IAMC format\n", - "data_name_df.dropna(subset=['IAMC_variable'],inplace=True)\n", - "data_name_df" + "data_name_df.dropna(subset=[\"IAMC_variable\"], inplace=True)\n", + "data_name_df\n" ] }, { @@ -184,7 +195,7 @@ "\n", "# Keep only the rows where the value in column 'Variable' belongs to the list of wanted values \n", "variable_required_list = data_name_df['IAMC_variable'].to_list()\n", - "scenario_variable_df = scenario_variable_df[scenario_variable_df['Variable'].isin(variable_required_list)]" + "# scenario_variable_df = scenario_variable_df[scenario_variable_df['Variable'].isin(variable_required_list)]\n" ] }, { @@ -273,39 +284,79 @@ "outputs": [], "source": [ "# Dict used to check if the subscripts are a country\n", - "country_dict= {'EU27':1, 'UK':1,'CHINA':1,'EASOC':1,'INDIA':1,'LATAM':1,'RUSSIA':1,'USMCA':1,'LROW':1,'AUSTRIA':1,'BELGIUM':1,'BULGARIA':1,'CROATIA':1,'CYPRUS':1,'CZECH_REPUBLIC':1,'DENMARK':1,'ESTONIA':1,'FINLAND':1,'FRANCE':1,'GERMANY':1,'GREECE':1,'HUNGARY':1,'IRELAND':1,'ITALY':1,'LATVIA':1,'LITHUANIA':1,'LUXEMBOURG':1,'MALTA':1,'NETHERLANDS':1,'POLAND':1,'PORTUGAL':1,'ROMANIA':1,'SLOVAKIA':1,'SLOVENIA':1,'SPAIN':1,'SWEDEN':1}\n", - "\n", - "# Aggregate the subscripts at the end of the variable \n", + "country_dict = {\n", + " \"EU27\": 1,\n", + " \"UK\": 1,\n", + " \"CHINA\": 1,\n", + " \"EASOC\": 1,\n", + " \"INDIA\": 1,\n", + " \"LATAM\": 1,\n", + " \"RUSSIA\": 1,\n", + " \"USMCA\": 1,\n", + " \"LROW\": 1,\n", + " \"AUSTRIA\": 1,\n", + " \"BELGIUM\": 1,\n", + " \"BULGARIA\": 1,\n", + " \"CROATIA\": 1,\n", + " \"CYPRUS\": 1,\n", + " \"CZECH_REPUBLIC\": 1,\n", + " \"DENMARK\": 1,\n", + " \"ESTONIA\": 1,\n", + " \"FINLAND\": 1,\n", + " \"FRANCE\": 1,\n", + " \"GERMANY\": 1,\n", + " \"GREECE\": 1,\n", + " \"HUNGARY\": 1,\n", + " \"IRELAND\": 1,\n", + " \"ITALY\": 1,\n", + " \"LATVIA\": 1,\n", + " \"LITHUANIA\": 1,\n", + " \"LUXEMBOURG\": 1,\n", + " \"MALTA\": 1,\n", + " \"NETHERLANDS\": 1,\n", + " \"POLAND\": 1,\n", + " \"PORTUGAL\": 1,\n", + " \"ROMANIA\": 1,\n", + " \"SLOVAKIA\": 1,\n", + " \"SLOVENIA\": 1,\n", + " \"SPAIN\": 1,\n", + " \"SWEDEN\": 1,\n", + "}\n", + "\n", + "\n", + "\n", + "\n", + "# Aggregate the subscripts at the end of the variable\n", "def aggregate_variable_name(row, counter):\n", " for k in range(counter):\n", - " subscript=row[\"Subscript \"+str(k)]\n", - " \n", - " if k==0 :\n", - " if country_dict.get(subscript)==1: \n", - " #Give the name of the region for that variable\n", - " row[\"Region\"]=subscript\n", - " \n", - " row[\"Subscript 0\"]=np.nan\n", + " subscript = row[\"Subscript \" + str(k)]\n", + "\n", + " if k == 0:\n", + " if country_dict.get(subscript) == 1:\n", + " # Give the name of the region for that variable\n", + " row[\"Region\"] = subscript\n", + "\n", + " row[\"Subscript 0\"] = np.nan\n", " continue\n", - " \n", + "\n", " if not pd.isnull(subscript):\n", - " \n", " if energy_dict.get(subscript, None) is not None:\n", - " \n", " subscript = energy_dict[subscript]\n", - " elif rest_dict.get(subscript,None): \n", + " elif rest_dict.get(subscript, None):\n", " subscript = rest_dict[subscript]\n", - " \n", - " row[\"Variable\"]=row[\"Variable\"]+\"|\"+subscript\n", - " \n", - " return row \n", "\n", + " row[\"Variable\"] = row[\"Variable\"] + \"|\" + subscript\n", + "\n", + " return row\n", "\n", - "# Apply the previous function on all the lines \n", - "scenario_variable_df= scenario_variable_df.apply(aggregate_variable_name, args=(counter,),axis=1)\n", + "\n", + "# Apply the previous function on all the lines\n", + "scenario_variable_df = scenario_variable_df.apply(\n", + " aggregate_variable_name, args=(counter,), axis=1\n", + ")\n", "\n", "# Remove the subscript columns once they have been added at the end of the variable name\n", - "drop_columns_list=[\"Subscript \" + str(k) for k in range(counter)]\n", + "drop_columns_list = [\"Subscript \" + str(k) for k in range(counter)]\n", "scenario_variable_df.drop(columns=drop_columns_list, inplace=True)\n", "\n", "scenario_variable_df" @@ -359,7 +410,26 @@ "\n", "# Capitalize each variable's name\n", "scenario_variable_df['Variable'] = scenario_variable_df['Variable'].apply(transform_string)\n", - "scenario_variable_df" + "scenario_variable_df.head(60)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import csv\n", + "\n", + "\n", + "# Step 1: Write to the first column\n", + "data_first_column = scenario_variable_df[\"Variable\"].to_list()\n", + "\n", + "# Open the CSV file in write mode and write the first column\n", + "with open(\"example.csv\", \"w\", newline=\"\") as csvfile:\n", + " csvwriter = csv.writer(csvfile)\n", + " for row in data_first_column:\n", + " csvwriter.writerow([row])\n" ] }, { @@ -645,7 +715,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.1" + "version": "3.10.14" } }, "nbformat": 4, diff --git a/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb b/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb index 80c1258..a42a94f 100644 --- a/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb +++ b/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -22,17 +22,9 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Folder 'File_Converted' already exists.\n" - ] - } - ], + "outputs": [], "source": [ "time0 = time.time()\n", "\n", @@ -90,414 +82,9 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Last added file: c:\\Users\\AdGeeds\\Documents\\IAMC-format\\IAMC_format\\Conversion-Script\\translation-one-by-one\\File_To_Convert\\Baseline no policies no CO2tax.csv\n", - "('Baseline no policies no CO2tax', '.csv')\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\1856630083.py:33: DtypeWarning: Columns (4,5) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " scenario_variable_df = pd.read_csv(last_file)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TimeYearUnnamed: 2Unnamed: 3Unnamed: 4Unnamed: 52005200620072008...2061206220632064206520662067206820692070
0world_PE_by_commodityEJ/YearPE_agriculture_productsNaNNaNNaN0.0282421.0574501.2656201.713050...2.9487602.8243902.7275502.6235202.6322302.476062.4014502.3448902.2635202.172020
1world_PE_by_commodityEJ/YearPE_coalNaNNaNNaN139.888000142.536000145.529000148.652000...239.392000238.914000242.655000247.283000252.159000248.07700251.761000254.646000253.793000249.484000
2world_PE_by_commodityEJ/YearPE_oilNaNNaNNaN202.483000200.246000200.156000199.572000...170.113000162.348000159.496000158.317000158.668000151.41400150.100000147.932000144.727000139.896000
3world_PE_by_commodityEJ/YearPE_forestry_productsNaNNaNNaN37.12750037.33430037.47910037.766300...98.84120098.722100101.700000105.143000108.929000106.94800109.672000112.871000112.351000111.132000
4world_PE_by_commodityEJ/YearPE_geothermalNaNNaNNaN0.2405550.2498270.2578230.267857...7.0771306.7295806.7998906.9491507.0921406.824656.9600606.9053506.8409806.567220
..................................................................
171137Fe_hidden_resourcesMtLOW_GRADENaNNaNNaN128992.000000127935.000000126830.000000125688.000000...66756.00000065861.20000064974.70000064096.80000063227.40000062366.5000061514.20000060670.50000059835.30000059008.800000
171138Fe_hidden_resourcesMtULTRALOW_GRADENaNNaNNaN176000.000000175990.000000175978.000000175963.000000...132301.000000130580.000000128867.000000127163.000000125469.000000123787.00000122116.000000120458.000000118813.000000117183.000000
171139Fe_hidden_resourcesMtTRACE_GRADENaNNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171140Fe_hidden_resourcesMtOCEANS_GRADENaNNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171141relative_RURR_FeNaNNaNNaNNaNNaN0.9154600.9136800.9113070.908839...0.6305950.6208190.6111160.6015020.5919820.582560.5732360.5640140.5548940.545877
\n", - "

171142 rows × 72 columns

\n", - "
" - ], - "text/plain": [ - " Time Year Unnamed: 2 Unnamed: 3 \\\n", - "0 world_PE_by_commodity EJ/Year PE_agriculture_products NaN \n", - "1 world_PE_by_commodity EJ/Year PE_coal NaN \n", - "2 world_PE_by_commodity EJ/Year PE_oil NaN \n", - "3 world_PE_by_commodity EJ/Year PE_forestry_products NaN \n", - "4 world_PE_by_commodity EJ/Year PE_geothermal NaN \n", - "... ... ... ... ... \n", - "171137 Fe_hidden_resources Mt LOW_GRADE NaN \n", - "171138 Fe_hidden_resources Mt ULTRALOW_GRADE NaN \n", - "171139 Fe_hidden_resources Mt TRACE_GRADE NaN \n", - "171140 Fe_hidden_resources Mt OCEANS_GRADE NaN \n", - "171141 relative_RURR_Fe NaN NaN NaN \n", - "\n", - " Unnamed: 4 Unnamed: 5 2005 2006 2007 \\\n", - "0 NaN NaN 0.028242 1.057450 1.265620 \n", - "1 NaN NaN 139.888000 142.536000 145.529000 \n", - "2 NaN NaN 202.483000 200.246000 200.156000 \n", - "3 NaN NaN 37.127500 37.334300 37.479100 \n", - "4 NaN NaN 0.240555 0.249827 0.257823 \n", - "... ... ... ... ... ... \n", - "171137 NaN NaN 128992.000000 127935.000000 126830.000000 \n", - "171138 NaN NaN 176000.000000 175990.000000 175978.000000 \n", - "171139 NaN NaN 0.000000 0.000000 0.000000 \n", - "171140 NaN NaN 0.000000 0.000000 0.000000 \n", - "171141 NaN NaN 0.915460 0.913680 0.911307 \n", - "\n", - " 2008 ... 2061 2062 2063 \\\n", - "0 1.713050 ... 2.948760 2.824390 2.727550 \n", - "1 148.652000 ... 239.392000 238.914000 242.655000 \n", - "2 199.572000 ... 170.113000 162.348000 159.496000 \n", - "3 37.766300 ... 98.841200 98.722100 101.700000 \n", - "4 0.267857 ... 7.077130 6.729580 6.799890 \n", - "... ... ... ... ... ... \n", - "171137 125688.000000 ... 66756.000000 65861.200000 64974.700000 \n", - "171138 175963.000000 ... 132301.000000 130580.000000 128867.000000 \n", - "171139 0.000000 ... 0.000000 0.000000 0.000000 \n", - "171140 0.000000 ... 0.000000 0.000000 0.000000 \n", - "171141 0.908839 ... 0.630595 0.620819 0.611116 \n", - "\n", - " 2064 2065 2066 2067 \\\n", - "0 2.623520 2.632230 2.47606 2.401450 \n", - "1 247.283000 252.159000 248.07700 251.761000 \n", - "2 158.317000 158.668000 151.41400 150.100000 \n", - "3 105.143000 108.929000 106.94800 109.672000 \n", - "4 6.949150 7.092140 6.82465 6.960060 \n", - "... ... ... ... ... \n", - "171137 64096.800000 63227.400000 62366.50000 61514.200000 \n", - "171138 127163.000000 125469.000000 123787.00000 122116.000000 \n", - "171139 0.000000 0.000000 0.00000 0.000000 \n", - "171140 0.000000 0.000000 0.00000 0.000000 \n", - "171141 0.601502 0.591982 0.58256 0.573236 \n", - "\n", - " 2068 2069 2070 \n", - "0 2.344890 2.263520 2.172020 \n", - "1 254.646000 253.793000 249.484000 \n", - "2 147.932000 144.727000 139.896000 \n", - "3 112.871000 112.351000 111.132000 \n", - "4 6.905350 6.840980 6.567220 \n", - "... ... ... ... \n", - "171137 60670.500000 59835.300000 59008.800000 \n", - "171138 120458.000000 118813.000000 117183.000000 \n", - "171139 0.000000 0.000000 0.000000 \n", - "171140 0.000000 0.000000 0.000000 \n", - "171141 0.564014 0.554894 0.545877 \n", - "\n", - "[171142 rows x 72 columns]" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Get the last upload excel file\n", "real_folder_path = os.path.join(folder_path, folder_name_to_convert)\n", @@ -539,72 +126,9 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Duplicate Rows:\n", - " Time Year Unnamed: 2 \\\n", - "121996 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "121997 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "121998 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "121999 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "122000 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "... ... ... ... \n", - "150210 transport_electrified_vehicle_batteries_power TW LROW \n", - "150211 transport_electrified_vehicle_batteries_power TW LROW \n", - "150212 transport_electrified_vehicle_batteries_power TW LROW \n", - "150213 transport_electrified_vehicle_batteries_power TW LROW \n", - "150214 transport_electrified_vehicle_batteries_power TW LROW \n", - "\n", - " Unnamed: 3 Unnamed: 4 Unnamed: 5 2005 \\\n", - "121996 PROTRA_PP_solar_open_space_PV C_Si_mono NaN 0.000364 \n", - "121997 PROTRA_PP_solar_open_space_PV C_Si_poly NaN 0.000961 \n", - "121998 PROTRA_PP_solar_open_space_PV CdTe NaN 0.000095 \n", - "121999 PROTRA_PP_solar_open_space_PV CIGS NaN 0.000036 \n", - "122000 PROTRA_PP_solar_urban_PV C_Si_mono NaN 0.000452 \n", - "... ... ... ... ... \n", - "150210 LFP HPV LDV 0.000000 \n", - "150211 LFP HPV MDV 0.000000 \n", - "150212 LFP HPV HDV 0.000000 \n", - "150213 LFP HPV BUS 0.000000 \n", - "150214 LFP HPV MOTORCYCLES_2W_3W 0.000000 \n", - "\n", - " 2006 2007 2008 ... 2061 2062 2063 \\\n", - "121996 0.000364 0.000364 0.000364 ... 0.539886 0.546992 0.552966 \n", - "121997 0.000961 0.000961 0.000961 ... 0.113854 0.115138 0.116198 \n", - "121998 0.000095 0.000095 0.000095 ... 0.024139 0.024446 0.024704 \n", - "121999 0.000036 0.000036 0.000036 ... 0.010348 0.010480 0.010590 \n", - "122000 0.000452 0.000452 0.000452 ... 0.064672 0.061538 0.067632 \n", - "... ... ... ... ... ... ... ... \n", - "150210 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", - "150211 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", - "150212 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", - "150213 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", - "150214 0.000000 0.000000 0.000000 ... 0.000000 0.000000 0.000000 \n", - "\n", - " 2064 2065 2066 2067 2068 2069 2070 \n", - "121996 0.561550 0.570806 0.578521 0.585470 0.590557 0.594684 0.599769 \n", - "121997 0.117792 0.119527 0.120954 0.122232 0.123137 0.123851 0.124764 \n", - "121998 0.025077 0.025480 0.025815 0.026117 0.026336 0.026513 0.026733 \n", - "121999 0.010750 0.010922 0.011066 0.011195 0.011289 0.011365 0.011459 \n", - "122000 0.064396 0.070778 0.067434 0.064200 0.070010 0.066687 0.072126 \n", - "... ... ... ... ... ... ... ... \n", - "150210 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150211 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150212 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150213 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150214 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "\n", - "[8831 rows x 72 columns]\n", - "Number of Duplicate Rows: 8831\n", - "162311\n" - ] - } - ], + "outputs": [], "source": [ "# Check for duplicate rows\n", "duplicate_rows = scenario_variable_df[scenario_variable_df.duplicated()]\n", @@ -623,26 +147,9 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\2790429010.py:17: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " scenario_variable_df.rename(columns=my_dict, inplace=True)\n", - "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\2790429010.py:18: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " scenario_variable_df.rename(\n" - ] - } - ], + "outputs": [], "source": [ "# Rename the column of the file\n", "columns = scenario_variable_df.columns.str.replace(\"Unnamed:\", \"Subscript\")\n", @@ -674,410 +181,9 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ModelScenarioRegionVariableUnit20052006200720082009...2061206220632064206520662067206820692070
0WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_agriculture_productsEJ/Year0.0282421.0574501.2656201.7130501.934410...2.9487602.8243902.7275502.6235202.6322302.476062.4014502.3448902.2635202.172020
1WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_coalEJ/Year139.888000142.536000145.529000148.652000149.764000...239.392000238.914000242.655000247.283000252.159000248.07700251.761000254.646000253.793000249.484000
2WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_oilEJ/Year202.483000200.246000200.156000199.572000199.148000...170.113000162.348000159.496000158.317000158.668000151.41400150.100000147.932000144.727000139.896000
3WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_forestry_productsEJ/Year37.12750037.33430037.47910037.76630037.924300...98.84120098.722100101.700000105.143000108.929000106.94800109.672000112.871000112.351000111.132000
4WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodity|PE_geothermalEJ/Year0.2405550.2498270.2578230.2678570.278548...7.0771306.7295806.7998906.9491507.0921406.824656.9600606.9053506.8409806.567220
..................................................................
171137WILIAMBaseline no policies no CO2taxWorldFe_hidden_resources|LOW_GRADEMt128992.000000127935.000000126830.000000125688.000000124519.000000...66756.00000065861.20000064974.70000064096.80000063227.40000062366.5000061514.20000060670.50000059835.30000059008.800000
171138WILIAMBaseline no policies no CO2taxWorldFe_hidden_resources|ULTRALOW_GRADEMt176000.000000175990.000000175978.000000175963.000000175945.000000...132301.000000130580.000000128867.000000127163.000000125469.000000123787.00000122116.000000120458.000000118813.000000117183.000000
171139WILIAMBaseline no policies no CO2taxWorldFe_hidden_resources|TRACE_GRADEMt0.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171140WILIAMBaseline no policies no CO2taxWorldFe_hidden_resources|OCEANS_GRADEMt0.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171141WILIAMBaseline no policies no CO2taxWorldrelative_RURR_FeNaN0.9154600.9136800.9113070.9088390.906274...0.6305950.6208190.6111160.6015020.5919820.582560.5732360.5640140.5548940.545877
\n", - "

162311 rows × 71 columns

\n", - "
" - ], - "text/plain": [ - " Model Scenario Region \\\n", - "0 WILIAM Baseline no policies no CO2tax World \n", - "1 WILIAM Baseline no policies no CO2tax World \n", - "2 WILIAM Baseline no policies no CO2tax World \n", - "3 WILIAM Baseline no policies no CO2tax World \n", - "4 WILIAM Baseline no policies no CO2tax World \n", - "... ... ... ... \n", - "171137 WILIAM Baseline no policies no CO2tax World \n", - "171138 WILIAM Baseline no policies no CO2tax World \n", - "171139 WILIAM Baseline no policies no CO2tax World \n", - "171140 WILIAM Baseline no policies no CO2tax World \n", - "171141 WILIAM Baseline no policies no CO2tax World \n", - "\n", - " Variable Unit 2005 \\\n", - "0 world_PE_by_commodity|PE_agriculture_products EJ/Year 0.028242 \n", - "1 world_PE_by_commodity|PE_coal EJ/Year 139.888000 \n", - "2 world_PE_by_commodity|PE_oil EJ/Year 202.483000 \n", - "3 world_PE_by_commodity|PE_forestry_products EJ/Year 37.127500 \n", - "4 world_PE_by_commodity|PE_geothermal EJ/Year 0.240555 \n", - "... ... ... ... \n", - "171137 Fe_hidden_resources|LOW_GRADE Mt 128992.000000 \n", - "171138 Fe_hidden_resources|ULTRALOW_GRADE Mt 176000.000000 \n", - "171139 Fe_hidden_resources|TRACE_GRADE Mt 0.000000 \n", - "171140 Fe_hidden_resources|OCEANS_GRADE Mt 0.000000 \n", - "171141 relative_RURR_Fe NaN 0.915460 \n", - "\n", - " 2006 2007 2008 2009 ... \\\n", - "0 1.057450 1.265620 1.713050 1.934410 ... \n", - "1 142.536000 145.529000 148.652000 149.764000 ... \n", - "2 200.246000 200.156000 199.572000 199.148000 ... \n", - "3 37.334300 37.479100 37.766300 37.924300 ... \n", - "4 0.249827 0.257823 0.267857 0.278548 ... \n", - "... ... ... ... ... ... \n", - "171137 127935.000000 126830.000000 125688.000000 124519.000000 ... \n", - "171138 175990.000000 175978.000000 175963.000000 175945.000000 ... \n", - "171139 0.000000 0.000000 0.000000 0.000000 ... \n", - "171140 0.000000 0.000000 0.000000 0.000000 ... \n", - "171141 0.913680 0.911307 0.908839 0.906274 ... \n", - "\n", - " 2061 2062 2063 2064 \\\n", - "0 2.948760 2.824390 2.727550 2.623520 \n", - "1 239.392000 238.914000 242.655000 247.283000 \n", - "2 170.113000 162.348000 159.496000 158.317000 \n", - "3 98.841200 98.722100 101.700000 105.143000 \n", - "4 7.077130 6.729580 6.799890 6.949150 \n", - "... ... ... ... ... \n", - "171137 66756.000000 65861.200000 64974.700000 64096.800000 \n", - "171138 132301.000000 130580.000000 128867.000000 127163.000000 \n", - "171139 0.000000 0.000000 0.000000 0.000000 \n", - "171140 0.000000 0.000000 0.000000 0.000000 \n", - "171141 0.630595 0.620819 0.611116 0.601502 \n", - "\n", - " 2065 2066 2067 2068 \\\n", - "0 2.632230 2.47606 2.401450 2.344890 \n", - "1 252.159000 248.07700 251.761000 254.646000 \n", - "2 158.668000 151.41400 150.100000 147.932000 \n", - "3 108.929000 106.94800 109.672000 112.871000 \n", - "4 7.092140 6.82465 6.960060 6.905350 \n", - "... ... ... ... ... \n", - "171137 63227.400000 62366.50000 61514.200000 60670.500000 \n", - "171138 125469.000000 123787.00000 122116.000000 120458.000000 \n", - "171139 0.000000 0.00000 0.000000 0.000000 \n", - "171140 0.000000 0.00000 0.000000 0.000000 \n", - "171141 0.591982 0.58256 0.573236 0.564014 \n", - "\n", - " 2069 2070 \n", - "0 2.263520 2.172020 \n", - "1 253.793000 249.484000 \n", - "2 144.727000 139.896000 \n", - "3 112.351000 111.132000 \n", - "4 6.840980 6.567220 \n", - "... ... ... \n", - "171137 59835.300000 59008.800000 \n", - "171138 118813.000000 117183.000000 \n", - "171139 0.000000 0.000000 \n", - "171140 0.000000 0.000000 \n", - "171141 0.554894 0.545877 \n", - "\n", - "[162311 rows x 71 columns]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Dict used to check if the subscripts are a country\n", "country_dict = {\n", @@ -1160,414 +266,9 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Last added file: c:\\Users\\AdGeeds\\Documents\\IAMC-format\\IAMC_format\\Conversion-Script\\translation-one-by-one\\File_To_Convert\\Baseline no policies no CO2tax.csv\n", - "('Baseline no policies no CO2tax', '.csv')\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\1292693398.py:26: DtypeWarning: Columns (4,5) have mixed types. Specify dtype option on import or set low_memory=False.\n", - " scenario_variable_2_df = pd.read_csv(last_file)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TimeYearUnnamed: 2Unnamed: 3Unnamed: 4Unnamed: 52005200620072008...2061206220632064206520662067206820692070
0world_PE_by_commodityEJ/YearPE_agriculture_productsNaNNaNNaN0.0282421.0574501.2656201.713050...2.9487602.8243902.7275502.6235202.6322302.476062.4014502.3448902.2635202.172020
1world_PE_by_commodityEJ/YearPE_coalNaNNaNNaN139.888000142.536000145.529000148.652000...239.392000238.914000242.655000247.283000252.159000248.07700251.761000254.646000253.793000249.484000
2world_PE_by_commodityEJ/YearPE_oilNaNNaNNaN202.483000200.246000200.156000199.572000...170.113000162.348000159.496000158.317000158.668000151.41400150.100000147.932000144.727000139.896000
3world_PE_by_commodityEJ/YearPE_forestry_productsNaNNaNNaN37.12750037.33430037.47910037.766300...98.84120098.722100101.700000105.143000108.929000106.94800109.672000112.871000112.351000111.132000
4world_PE_by_commodityEJ/YearPE_geothermalNaNNaNNaN0.2405550.2498270.2578230.267857...7.0771306.7295806.7998906.9491507.0921406.824656.9600606.9053506.8409806.567220
..................................................................
171137Fe_hidden_resourcesMtLOW_GRADENaNNaNNaN128992.000000127935.000000126830.000000125688.000000...66756.00000065861.20000064974.70000064096.80000063227.40000062366.5000061514.20000060670.50000059835.30000059008.800000
171138Fe_hidden_resourcesMtULTRALOW_GRADENaNNaNNaN176000.000000175990.000000175978.000000175963.000000...132301.000000130580.000000128867.000000127163.000000125469.000000123787.00000122116.000000120458.000000118813.000000117183.000000
171139Fe_hidden_resourcesMtTRACE_GRADENaNNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171140Fe_hidden_resourcesMtOCEANS_GRADENaNNaNNaN0.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171141relative_RURR_FeNaNNaNNaNNaNNaN0.9154600.9136800.9113070.908839...0.6305950.6208190.6111160.6015020.5919820.582560.5732360.5640140.5548940.545877
\n", - "

171142 rows × 72 columns

\n", - "
" - ], - "text/plain": [ - " Time Year Unnamed: 2 Unnamed: 3 \\\n", - "0 world_PE_by_commodity EJ/Year PE_agriculture_products NaN \n", - "1 world_PE_by_commodity EJ/Year PE_coal NaN \n", - "2 world_PE_by_commodity EJ/Year PE_oil NaN \n", - "3 world_PE_by_commodity EJ/Year PE_forestry_products NaN \n", - "4 world_PE_by_commodity EJ/Year PE_geothermal NaN \n", - "... ... ... ... ... \n", - "171137 Fe_hidden_resources Mt LOW_GRADE NaN \n", - "171138 Fe_hidden_resources Mt ULTRALOW_GRADE NaN \n", - "171139 Fe_hidden_resources Mt TRACE_GRADE NaN \n", - "171140 Fe_hidden_resources Mt OCEANS_GRADE NaN \n", - "171141 relative_RURR_Fe NaN NaN NaN \n", - "\n", - " Unnamed: 4 Unnamed: 5 2005 2006 2007 \\\n", - "0 NaN NaN 0.028242 1.057450 1.265620 \n", - "1 NaN NaN 139.888000 142.536000 145.529000 \n", - "2 NaN NaN 202.483000 200.246000 200.156000 \n", - "3 NaN NaN 37.127500 37.334300 37.479100 \n", - "4 NaN NaN 0.240555 0.249827 0.257823 \n", - "... ... ... ... ... ... \n", - "171137 NaN NaN 128992.000000 127935.000000 126830.000000 \n", - "171138 NaN NaN 176000.000000 175990.000000 175978.000000 \n", - "171139 NaN NaN 0.000000 0.000000 0.000000 \n", - "171140 NaN NaN 0.000000 0.000000 0.000000 \n", - "171141 NaN NaN 0.915460 0.913680 0.911307 \n", - "\n", - " 2008 ... 2061 2062 2063 \\\n", - "0 1.713050 ... 2.948760 2.824390 2.727550 \n", - "1 148.652000 ... 239.392000 238.914000 242.655000 \n", - "2 199.572000 ... 170.113000 162.348000 159.496000 \n", - "3 37.766300 ... 98.841200 98.722100 101.700000 \n", - "4 0.267857 ... 7.077130 6.729580 6.799890 \n", - "... ... ... ... ... ... \n", - "171137 125688.000000 ... 66756.000000 65861.200000 64974.700000 \n", - "171138 175963.000000 ... 132301.000000 130580.000000 128867.000000 \n", - "171139 0.000000 ... 0.000000 0.000000 0.000000 \n", - "171140 0.000000 ... 0.000000 0.000000 0.000000 \n", - "171141 0.908839 ... 0.630595 0.620819 0.611116 \n", - "\n", - " 2064 2065 2066 2067 \\\n", - "0 2.623520 2.632230 2.47606 2.401450 \n", - "1 247.283000 252.159000 248.07700 251.761000 \n", - "2 158.317000 158.668000 151.41400 150.100000 \n", - "3 105.143000 108.929000 106.94800 109.672000 \n", - "4 6.949150 7.092140 6.82465 6.960060 \n", - "... ... ... ... ... \n", - "171137 64096.800000 63227.400000 62366.50000 61514.200000 \n", - "171138 127163.000000 125469.000000 123787.00000 122116.000000 \n", - "171139 0.000000 0.000000 0.00000 0.000000 \n", - "171140 0.000000 0.000000 0.00000 0.000000 \n", - "171141 0.601502 0.591982 0.58256 0.573236 \n", - "\n", - " 2068 2069 2070 \n", - "0 2.344890 2.263520 2.172020 \n", - "1 254.646000 253.793000 249.484000 \n", - "2 147.932000 144.727000 139.896000 \n", - "3 112.871000 112.351000 111.132000 \n", - "4 6.905350 6.840980 6.567220 \n", - "... ... ... ... \n", - "171137 60670.500000 59835.300000 59008.800000 \n", - "171138 120458.000000 118813.000000 117183.000000 \n", - "171139 0.000000 0.000000 0.000000 \n", - "171140 0.000000 0.000000 0.000000 \n", - "171141 0.564014 0.554894 0.545877 \n", - "\n", - "[171142 rows x 72 columns]" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Get the last upload excel file\n", "real_folder_path= os.path.join(folder_path , folder_name_to_convert)\n", @@ -1602,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -1636,2047 +337,9 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ModelScenarioRegionVariableUnitSubscript 0Subscript 1Subscript 2Subscript 32005...2061206220632064206520662067206820692070
0WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_agriculture_productsNaNNaNNaN0.028242...2.9487602.8243902.7275502.6235202.6322302.4760602.4014502.3448902.2635202.172020
1WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_coalNaNNaNNaN139.888000...239.392000238.914000242.655000247.283000252.159000248.077000251.761000254.646000253.793000249.484000
2WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_oilNaNNaNNaN202.483000...170.113000162.348000159.496000158.317000158.668000151.414000150.100000147.932000144.727000139.896000
3WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_forestry_productsNaNNaNNaN37.127500...98.84120098.722100101.700000105.143000108.929000106.948000109.672000112.871000112.351000111.132000
4WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_geothermalNaNNaNNaN0.240555...7.0771306.7295806.7998906.9491507.0921406.8246506.9600606.9053506.8409806.567220
5WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_hydropowerNaNNaNNaN10.229700...28.40490027.92730027.79880027.74280027.84270027.23500027.37630027.33220027.24320026.505800
6WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_natural_gasNaNNaNNaN96.809000...186.932000185.848000187.647000190.230000193.069000191.552000195.504000198.032000200.135000197.997000
7WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_nuclearNaNNaNNaN28.509200...40.87130039.43440038.31960037.47050036.54860035.18050034.34200033.41410032.93760031.470900
8WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_oceanicNaNNaNNaN0.002548...0.0016770.0015940.0015300.0014740.0014200.0013420.0012940.0012450.0011980.001133
9WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_solarNaNNaNNaN0.025930...30.53410030.55470031.48110032.32340033.28850032.91430033.71250034.32740034.34290033.943800
10WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_wasteNaNNaNNaN0.783667...0.3635280.3424510.3351100.3263850.3147040.2916940.2865590.2777630.2640920.248573
11WILIAMBaseline no policies no CO2taxWorldworld_PE_by_commodityEJ/YearPE_windNaNNaNNaN0.531202...36.25690035.95990036.32030037.00710037.60600036.54820037.01160037.37310037.24550036.112200
12WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearEU27NaNNaNNaN65.070100...76.64490075.25900075.04740075.08980075.32360074.14770074.47940074.67850073.60450073.059500
13WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearUKNaNNaNNaN8.568370...10.21020010.27970010.42060010.57410010.77580010.85900011.08750011.11090010.99110010.782000
14WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearCHINANaNNaNNaN105.705000...191.902000194.153000197.616000201.535000205.536000205.801000208.575000211.156000211.642000210.458000
15WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearEASOCNaNNaNNaN66.031400...124.300000124.057000125.532000127.675000129.664000128.766000130.112000131.682000131.606000131.255000
16WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearINDIANaNNaNNaN29.876100...51.64140048.53610048.52970048.88540049.65940046.01020046.40430046.60750044.76920042.631400
17WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearLATAMNaNNaNNaN20.045100...39.15240037.92610038.21460038.96600039.83980038.01790038.31420038.84740037.75020035.787600
18WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearRUSSIANaNNaNNaN28.625600...64.13920064.49060066.57400068.05280069.57390070.03140073.10440074.81770076.17080077.820800
19WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearUSMCANaNNaNNaN108.786000...133.578000132.219000131.749000132.488000134.150000131.814000131.811000130.958000130.808000128.392000
20WILIAMBaseline no policies no CO2taxWorldtotal_PE_by_regionEJ/YearLROWNaNNaNNaN83.950200...150.169000142.686000141.599000142.149000143.628000134.016000135.241000135.598000134.803000125.345000
21WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_agriculture_productsNaNNaN0.028242...0.5725770.5870360.5852820.5729830.5816370.5819220.5900530.5887130.5866210.583903
22WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_coalNaNNaN10.846200...19.13590018.96270019.06570019.26660019.49210019.20040019.38280019.50530019.26030019.160500
23WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_oilNaNNaN28.986800...19.83180018.79850018.25480017.90710017.77810017.12190016.99870016.72460016.23130015.814600
24WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_forestry_productsNaNNaN2.824480...7.2869807.4212707.6874607.9598108.1792408.2510208.4579608.7430008.7152208.818190
25WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_geothermalNaNNaN0.021485...0.5297960.5040900.5375460.5287140.5189520.5264300.5164210.5083020.5234880.504541
26WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_hydropowerNaNNaN1.129990...1.4386601.4449901.4273001.4147301.4026701.3519801.3790901.3670001.3319301.381970
27WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_natural_gasNaNNaN10.992200...15.78600015.82280015.85670015.89410015.92440016.01340016.17180016.29770016.28860016.321100
28WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_nuclearNaNNaN9.637060...6.4137006.2094006.0759005.9493205.7784605.5878505.4471305.3332105.1803305.027080
29WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_oceanicNaNNaN0.001794...0.0003190.0003010.0002900.0002790.0002690.0002520.0002430.0002340.0002220.000212
30WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_solarNaNNaN0.011499...2.3822502.3364302.3849102.4123202.4762102.4216202.4397002.4972802.4540202.462030
31WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_wasteNaNNaN0.289031...0.1016890.0957770.0953390.0934630.0894040.0822630.0803830.0802050.0735340.070105
32WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEU27PE_windNaNNaN0.301280...3.1653303.0757603.0761603.0904503.1021503.0087503.0151103.0328202.9588302.915300
33WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_agriculture_productsNaNNaN0.000000...0.0393470.0414950.0417620.0409900.0418620.0425290.0437360.0428990.0429330.042176
34WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_coalNaNNaN1.185840...1.3226801.3421301.3758401.4095401.4424301.4612201.5003801.5167501.5044401.488400
35WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_oilNaNNaN3.858350...3.2646103.2090203.1898603.1787503.1935803.1293503.1351903.0775302.9947902.893310
36WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_forestry_productsNaNNaN0.149820...0.6435420.6773470.7213760.7615480.7952740.8306680.8748380.9111150.9162070.922728
37WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_geothermalNaNNaN0.000000...0.0134730.0128850.0124550.0119830.0114860.0109580.0105680.0101260.0146960.014009
38WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_hydropowerNaNNaN0.039429...0.0336360.0329450.0326180.0322570.0319050.0373040.0370280.0363790.0353170.034595
39WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_natural_gasNaNNaN2.566860...3.4143803.4860703.5596403.6451103.7577403.8521003.9793404.0119904.0112203.941840
40WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_nuclearNaNNaN0.682968...0.5320660.5191350.5062720.4928540.4775490.4674630.4556070.4391640.4247330.410733
41WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_oceanicNaNNaN0.000000...0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
42WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_solarNaNNaN0.000007...0.2900880.2999650.3100960.3199740.3342490.3388260.3502910.3619480.3589270.356959
43WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_wasteNaNNaN0.078227...0.0130630.0128300.0129090.0129650.0127030.0122220.0120460.0120710.0115170.011520
44WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearUKPE_windNaNNaN0.006873...0.6432880.6459100.6577730.6681700.6769950.6763690.6884950.6909390.6762710.665765
45WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_agriculture_productsNaNNaN0.000000...0.1384010.1384530.1400060.1419720.1446310.1437430.1440620.1442570.1431460.140471
46WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_coalNaNNaN64.942800...96.13380097.12990098.791700100.620000102.403000102.440000103.795000105.094000105.340000104.673000
47WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_oilNaNNaN31.363500...31.30400031.19390031.27060031.48130031.83770031.22220031.08330030.80260030.24070029.306600
48WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_forestry_productsNaNNaN3.239060...22.52580023.65940025.10000026.49160027.81460028.57810029.74770030.94900031.65150032.199200
49WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_geothermalNaNNaN0.000725...0.8500690.8300660.8259190.8234120.9792480.9408080.9293290.9200900.8936010.865683
50WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_hydropowerNaNNaN1.633770...4.8761904.9564904.9049704.8633304.8213004.8782304.8326404.7948204.7228004.773640
51WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_natural_gasNaNNaN3.864410...14.91120015.23690015.65100016.10080016.55250016.80220017.25810017.67790017.97930018.057000
52WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_nuclearNaNNaN0.576456...9.6184309.3352509.0390708.8042608.5677808.3167708.0799107.8340607.6888407.417590
53WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_oceanicNaNNaN0.000000...0.0000060.0000050.0000050.0000050.0000050.0000050.0000040.0000040.0000040.000004
54WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_solarNaNNaN0.000606...7.4615207.6000507.8519908.1052108.3481208.5221308.7348108.9280308.9848009.063910
55WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_wasteNaNNaN0.069420...0.0868620.0825640.0796060.0767900.0738900.0696820.0670810.0649190.0619470.058764
56WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearCHINAPE_windNaNNaN0.014758...3.9956403.9898503.9614104.0266303.9927003.8872703.9034303.9466803.9346803.902630
57WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEASOCPE_agriculture_productsNaNNaN0.000000...0.4936760.4965560.5014920.4989230.5116550.4978040.4991720.5043150.4961150.487106
58WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEASOCPE_coalNaNNaN14.138200...29.39120029.60530030.01210030.53940031.03480031.03910031.35350031.70960031.76210031.872000
59WILIAMBaseline no policies no CO2taxWorldPE_by_commodityEJ/YearEASOCPE_oilNaNNaN32.337800...36.65190035.62130035.61260036.01060036.19230034.99580034.93540035.12410034.32660033.318000
\n", - "

60 rows × 75 columns

\n", - "
" - ], - "text/plain": [ - " Model Scenario Region Variable \\\n", - "0 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "1 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "2 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "3 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "4 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "5 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "6 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "7 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "8 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "9 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "10 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "11 WILIAM Baseline no policies no CO2tax World world_PE_by_commodity \n", - "12 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "13 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "14 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "15 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "16 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "17 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "18 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "19 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "20 WILIAM Baseline no policies no CO2tax World total_PE_by_region \n", - "21 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "22 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "23 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "24 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "25 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "26 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "27 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "28 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "29 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "30 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "31 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "32 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "33 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "34 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "35 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "36 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "37 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "38 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "39 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "40 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "41 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "42 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "43 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "44 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "45 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "46 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "47 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "48 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "49 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "50 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "51 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "52 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "53 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "54 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "55 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "56 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "57 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "58 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "59 WILIAM Baseline no policies no CO2tax World PE_by_commodity \n", - "\n", - " Unit Subscript 0 Subscript 1 Subscript 2 \\\n", - "0 EJ/Year PE_agriculture_products NaN NaN \n", - "1 EJ/Year PE_coal NaN NaN \n", - "2 EJ/Year PE_oil NaN NaN \n", - "3 EJ/Year PE_forestry_products NaN NaN \n", - "4 EJ/Year PE_geothermal NaN NaN \n", - "5 EJ/Year PE_hydropower NaN NaN \n", - "6 EJ/Year PE_natural_gas NaN NaN \n", - "7 EJ/Year PE_nuclear NaN NaN \n", - "8 EJ/Year PE_oceanic NaN NaN \n", - "9 EJ/Year PE_solar NaN NaN \n", - "10 EJ/Year PE_waste NaN NaN \n", - "11 EJ/Year PE_wind NaN NaN \n", - "12 EJ/Year EU27 NaN NaN \n", - "13 EJ/Year UK NaN NaN \n", - "14 EJ/Year CHINA NaN NaN \n", - "15 EJ/Year EASOC NaN NaN \n", - "16 EJ/Year INDIA NaN NaN \n", - "17 EJ/Year LATAM NaN NaN \n", - "18 EJ/Year RUSSIA NaN NaN \n", - "19 EJ/Year USMCA NaN NaN \n", - "20 EJ/Year LROW NaN NaN \n", - "21 EJ/Year EU27 PE_agriculture_products NaN \n", - "22 EJ/Year EU27 PE_coal NaN \n", - "23 EJ/Year EU27 PE_oil NaN \n", - "24 EJ/Year EU27 PE_forestry_products NaN \n", - "25 EJ/Year EU27 PE_geothermal NaN \n", - "26 EJ/Year EU27 PE_hydropower NaN \n", - "27 EJ/Year EU27 PE_natural_gas NaN \n", - "28 EJ/Year EU27 PE_nuclear NaN \n", - "29 EJ/Year EU27 PE_oceanic NaN \n", - "30 EJ/Year EU27 PE_solar NaN \n", - "31 EJ/Year EU27 PE_waste NaN \n", - "32 EJ/Year EU27 PE_wind NaN \n", - "33 EJ/Year UK PE_agriculture_products NaN \n", - "34 EJ/Year UK PE_coal NaN \n", - "35 EJ/Year UK PE_oil NaN \n", - "36 EJ/Year UK PE_forestry_products NaN \n", - "37 EJ/Year UK PE_geothermal NaN \n", - "38 EJ/Year UK PE_hydropower NaN \n", - "39 EJ/Year UK PE_natural_gas NaN \n", - "40 EJ/Year UK PE_nuclear NaN \n", - "41 EJ/Year UK PE_oceanic NaN \n", - "42 EJ/Year UK PE_solar NaN \n", - "43 EJ/Year UK PE_waste NaN \n", - "44 EJ/Year UK PE_wind NaN \n", - "45 EJ/Year CHINA PE_agriculture_products NaN \n", - "46 EJ/Year CHINA PE_coal NaN \n", - "47 EJ/Year CHINA PE_oil NaN \n", - "48 EJ/Year CHINA PE_forestry_products NaN \n", - "49 EJ/Year CHINA PE_geothermal NaN \n", - "50 EJ/Year CHINA PE_hydropower NaN \n", - "51 EJ/Year CHINA PE_natural_gas NaN \n", - "52 EJ/Year CHINA PE_nuclear NaN \n", - "53 EJ/Year CHINA PE_oceanic NaN \n", - "54 EJ/Year CHINA PE_solar NaN \n", - "55 EJ/Year CHINA PE_waste NaN \n", - "56 EJ/Year CHINA PE_wind NaN \n", - "57 EJ/Year EASOC PE_agriculture_products NaN \n", - "58 EJ/Year EASOC PE_coal NaN \n", - "59 EJ/Year EASOC PE_oil NaN \n", - "\n", - " Subscript 3 2005 ... 2061 2062 2063 \\\n", - "0 NaN 0.028242 ... 2.948760 2.824390 2.727550 \n", - "1 NaN 139.888000 ... 239.392000 238.914000 242.655000 \n", - "2 NaN 202.483000 ... 170.113000 162.348000 159.496000 \n", - "3 NaN 37.127500 ... 98.841200 98.722100 101.700000 \n", - "4 NaN 0.240555 ... 7.077130 6.729580 6.799890 \n", - "5 NaN 10.229700 ... 28.404900 27.927300 27.798800 \n", - "6 NaN 96.809000 ... 186.932000 185.848000 187.647000 \n", - "7 NaN 28.509200 ... 40.871300 39.434400 38.319600 \n", - "8 NaN 0.002548 ... 0.001677 0.001594 0.001530 \n", - "9 NaN 0.025930 ... 30.534100 30.554700 31.481100 \n", - "10 NaN 0.783667 ... 0.363528 0.342451 0.335110 \n", - "11 NaN 0.531202 ... 36.256900 35.959900 36.320300 \n", - "12 NaN 65.070100 ... 76.644900 75.259000 75.047400 \n", - "13 NaN 8.568370 ... 10.210200 10.279700 10.420600 \n", - "14 NaN 105.705000 ... 191.902000 194.153000 197.616000 \n", - "15 NaN 66.031400 ... 124.300000 124.057000 125.532000 \n", - "16 NaN 29.876100 ... 51.641400 48.536100 48.529700 \n", - "17 NaN 20.045100 ... 39.152400 37.926100 38.214600 \n", - "18 NaN 28.625600 ... 64.139200 64.490600 66.574000 \n", - "19 NaN 108.786000 ... 133.578000 132.219000 131.749000 \n", - "20 NaN 83.950200 ... 150.169000 142.686000 141.599000 \n", - "21 NaN 0.028242 ... 0.572577 0.587036 0.585282 \n", - "22 NaN 10.846200 ... 19.135900 18.962700 19.065700 \n", - "23 NaN 28.986800 ... 19.831800 18.798500 18.254800 \n", - "24 NaN 2.824480 ... 7.286980 7.421270 7.687460 \n", - "25 NaN 0.021485 ... 0.529796 0.504090 0.537546 \n", - "26 NaN 1.129990 ... 1.438660 1.444990 1.427300 \n", - "27 NaN 10.992200 ... 15.786000 15.822800 15.856700 \n", - "28 NaN 9.637060 ... 6.413700 6.209400 6.075900 \n", - "29 NaN 0.001794 ... 0.000319 0.000301 0.000290 \n", - "30 NaN 0.011499 ... 2.382250 2.336430 2.384910 \n", - "31 NaN 0.289031 ... 0.101689 0.095777 0.095339 \n", - "32 NaN 0.301280 ... 3.165330 3.075760 3.076160 \n", - "33 NaN 0.000000 ... 0.039347 0.041495 0.041762 \n", - "34 NaN 1.185840 ... 1.322680 1.342130 1.375840 \n", - "35 NaN 3.858350 ... 3.264610 3.209020 3.189860 \n", - "36 NaN 0.149820 ... 0.643542 0.677347 0.721376 \n", - "37 NaN 0.000000 ... 0.013473 0.012885 0.012455 \n", - "38 NaN 0.039429 ... 0.033636 0.032945 0.032618 \n", - "39 NaN 2.566860 ... 3.414380 3.486070 3.559640 \n", - "40 NaN 0.682968 ... 0.532066 0.519135 0.506272 \n", - "41 NaN 0.000000 ... 0.000000 0.000000 0.000000 \n", - "42 NaN 0.000007 ... 0.290088 0.299965 0.310096 \n", - "43 NaN 0.078227 ... 0.013063 0.012830 0.012909 \n", - "44 NaN 0.006873 ... 0.643288 0.645910 0.657773 \n", - "45 NaN 0.000000 ... 0.138401 0.138453 0.140006 \n", - "46 NaN 64.942800 ... 96.133800 97.129900 98.791700 \n", - "47 NaN 31.363500 ... 31.304000 31.193900 31.270600 \n", - "48 NaN 3.239060 ... 22.525800 23.659400 25.100000 \n", - "49 NaN 0.000725 ... 0.850069 0.830066 0.825919 \n", - "50 NaN 1.633770 ... 4.876190 4.956490 4.904970 \n", - "51 NaN 3.864410 ... 14.911200 15.236900 15.651000 \n", - "52 NaN 0.576456 ... 9.618430 9.335250 9.039070 \n", - "53 NaN 0.000000 ... 0.000006 0.000005 0.000005 \n", - "54 NaN 0.000606 ... 7.461520 7.600050 7.851990 \n", - "55 NaN 0.069420 ... 0.086862 0.082564 0.079606 \n", - "56 NaN 0.014758 ... 3.995640 3.989850 3.961410 \n", - "57 NaN 0.000000 ... 0.493676 0.496556 0.501492 \n", - "58 NaN 14.138200 ... 29.391200 29.605300 30.012100 \n", - "59 NaN 32.337800 ... 36.651900 35.621300 35.612600 \n", - "\n", - " 2064 2065 2066 2067 2068 2069 \\\n", - "0 2.623520 2.632230 2.476060 2.401450 2.344890 2.263520 \n", - "1 247.283000 252.159000 248.077000 251.761000 254.646000 253.793000 \n", - "2 158.317000 158.668000 151.414000 150.100000 147.932000 144.727000 \n", - "3 105.143000 108.929000 106.948000 109.672000 112.871000 112.351000 \n", - "4 6.949150 7.092140 6.824650 6.960060 6.905350 6.840980 \n", - "5 27.742800 27.842700 27.235000 27.376300 27.332200 27.243200 \n", - "6 190.230000 193.069000 191.552000 195.504000 198.032000 200.135000 \n", - "7 37.470500 36.548600 35.180500 34.342000 33.414100 32.937600 \n", - "8 0.001474 0.001420 0.001342 0.001294 0.001245 0.001198 \n", - "9 32.323400 33.288500 32.914300 33.712500 34.327400 34.342900 \n", - "10 0.326385 0.314704 0.291694 0.286559 0.277763 0.264092 \n", - "11 37.007100 37.606000 36.548200 37.011600 37.373100 37.245500 \n", - "12 75.089800 75.323600 74.147700 74.479400 74.678500 73.604500 \n", - "13 10.574100 10.775800 10.859000 11.087500 11.110900 10.991100 \n", - "14 201.535000 205.536000 205.801000 208.575000 211.156000 211.642000 \n", - "15 127.675000 129.664000 128.766000 130.112000 131.682000 131.606000 \n", - "16 48.885400 49.659400 46.010200 46.404300 46.607500 44.769200 \n", - "17 38.966000 39.839800 38.017900 38.314200 38.847400 37.750200 \n", - "18 68.052800 69.573900 70.031400 73.104400 74.817700 76.170800 \n", - "19 132.488000 134.150000 131.814000 131.811000 130.958000 130.808000 \n", - "20 142.149000 143.628000 134.016000 135.241000 135.598000 134.803000 \n", - "21 0.572983 0.581637 0.581922 0.590053 0.588713 0.586621 \n", - "22 19.266600 19.492100 19.200400 19.382800 19.505300 19.260300 \n", - "23 17.907100 17.778100 17.121900 16.998700 16.724600 16.231300 \n", - "24 7.959810 8.179240 8.251020 8.457960 8.743000 8.715220 \n", - "25 0.528714 0.518952 0.526430 0.516421 0.508302 0.523488 \n", - "26 1.414730 1.402670 1.351980 1.379090 1.367000 1.331930 \n", - "27 15.894100 15.924400 16.013400 16.171800 16.297700 16.288600 \n", - "28 5.949320 5.778460 5.587850 5.447130 5.333210 5.180330 \n", - "29 0.000279 0.000269 0.000252 0.000243 0.000234 0.000222 \n", - "30 2.412320 2.476210 2.421620 2.439700 2.497280 2.454020 \n", - "31 0.093463 0.089404 0.082263 0.080383 0.080205 0.073534 \n", - "32 3.090450 3.102150 3.008750 3.015110 3.032820 2.958830 \n", - "33 0.040990 0.041862 0.042529 0.043736 0.042899 0.042933 \n", - "34 1.409540 1.442430 1.461220 1.500380 1.516750 1.504440 \n", - "35 3.178750 3.193580 3.129350 3.135190 3.077530 2.994790 \n", - "36 0.761548 0.795274 0.830668 0.874838 0.911115 0.916207 \n", - "37 0.011983 0.011486 0.010958 0.010568 0.010126 0.014696 \n", - "38 0.032257 0.031905 0.037304 0.037028 0.036379 0.035317 \n", - "39 3.645110 3.757740 3.852100 3.979340 4.011990 4.011220 \n", - "40 0.492854 0.477549 0.467463 0.455607 0.439164 0.424733 \n", - "41 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "42 0.319974 0.334249 0.338826 0.350291 0.361948 0.358927 \n", - "43 0.012965 0.012703 0.012222 0.012046 0.012071 0.011517 \n", - "44 0.668170 0.676995 0.676369 0.688495 0.690939 0.676271 \n", - "45 0.141972 0.144631 0.143743 0.144062 0.144257 0.143146 \n", - "46 100.620000 102.403000 102.440000 103.795000 105.094000 105.340000 \n", - "47 31.481300 31.837700 31.222200 31.083300 30.802600 30.240700 \n", - "48 26.491600 27.814600 28.578100 29.747700 30.949000 31.651500 \n", - "49 0.823412 0.979248 0.940808 0.929329 0.920090 0.893601 \n", - "50 4.863330 4.821300 4.878230 4.832640 4.794820 4.722800 \n", - "51 16.100800 16.552500 16.802200 17.258100 17.677900 17.979300 \n", - "52 8.804260 8.567780 8.316770 8.079910 7.834060 7.688840 \n", - "53 0.000005 0.000005 0.000005 0.000004 0.000004 0.000004 \n", - "54 8.105210 8.348120 8.522130 8.734810 8.928030 8.984800 \n", - "55 0.076790 0.073890 0.069682 0.067081 0.064919 0.061947 \n", - "56 4.026630 3.992700 3.887270 3.903430 3.946680 3.934680 \n", - "57 0.498923 0.511655 0.497804 0.499172 0.504315 0.496115 \n", - "58 30.539400 31.034800 31.039100 31.353500 31.709600 31.762100 \n", - "59 36.010600 36.192300 34.995800 34.935400 35.124100 34.326600 \n", - "\n", - " 2070 \n", - "0 2.172020 \n", - "1 249.484000 \n", - "2 139.896000 \n", - "3 111.132000 \n", - "4 6.567220 \n", - "5 26.505800 \n", - "6 197.997000 \n", - "7 31.470900 \n", - "8 0.001133 \n", - "9 33.943800 \n", - "10 0.248573 \n", - "11 36.112200 \n", - "12 73.059500 \n", - "13 10.782000 \n", - "14 210.458000 \n", - "15 131.255000 \n", - "16 42.631400 \n", - "17 35.787600 \n", - "18 77.820800 \n", - "19 128.392000 \n", - "20 125.345000 \n", - "21 0.583903 \n", - "22 19.160500 \n", - "23 15.814600 \n", - "24 8.818190 \n", - "25 0.504541 \n", - "26 1.381970 \n", - "27 16.321100 \n", - "28 5.027080 \n", - "29 0.000212 \n", - "30 2.462030 \n", - "31 0.070105 \n", - "32 2.915300 \n", - "33 0.042176 \n", - "34 1.488400 \n", - "35 2.893310 \n", - "36 0.922728 \n", - "37 0.014009 \n", - "38 0.034595 \n", - "39 3.941840 \n", - "40 0.410733 \n", - "41 0.000000 \n", - "42 0.356959 \n", - "43 0.011520 \n", - "44 0.665765 \n", - "45 0.140471 \n", - "46 104.673000 \n", - "47 29.306600 \n", - "48 32.199200 \n", - "49 0.865683 \n", - "50 4.773640 \n", - "51 18.057000 \n", - "52 7.417590 \n", - "53 0.000004 \n", - "54 9.063910 \n", - "55 0.058764 \n", - "56 3.902630 \n", - "57 0.487106 \n", - "58 31.872000 \n", - "59 33.318000 \n", - "\n", - "[60 rows x 75 columns]" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "scenario_variable_2_df.head(60)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Duplicate Rows:\n", - " Model Scenario Region \\\n", - "121996 WILIAM Baseline no policies no CO2tax World \n", - "121997 WILIAM Baseline no policies no CO2tax World \n", - "121998 WILIAM Baseline no policies no CO2tax World \n", - "121999 WILIAM Baseline no policies no CO2tax World \n", - "122000 WILIAM Baseline no policies no CO2tax World \n", - "... ... ... ... \n", - "150210 WILIAM Baseline no policies no CO2tax World \n", - "150211 WILIAM Baseline no policies no CO2tax World \n", - "150212 WILIAM Baseline no policies no CO2tax World \n", - "150213 WILIAM Baseline no policies no CO2tax World \n", - "150214 WILIAM Baseline no policies no CO2tax World \n", - "\n", - " Variable Unit Subscript 0 \\\n", - "121996 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "121997 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "121998 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "121999 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "122000 capacity_stock_PROTRA_PP_solar_PV_by_subtechno... TW EU27 \n", - "... ... ... ... \n", - "150210 transport_electrified_vehicle_batteries_power TW LROW \n", - "150211 transport_electrified_vehicle_batteries_power TW LROW \n", - "150212 transport_electrified_vehicle_batteries_power TW LROW \n", - "150213 transport_electrified_vehicle_batteries_power TW LROW \n", - "150214 transport_electrified_vehicle_batteries_power TW LROW \n", - "\n", - " Subscript 1 Subscript 2 Subscript 3 \\\n", - "121996 PROTRA_PP_solar_open_space_PV C_Si_mono NaN \n", - "121997 PROTRA_PP_solar_open_space_PV C_Si_poly NaN \n", - "121998 PROTRA_PP_solar_open_space_PV CdTe NaN \n", - "121999 PROTRA_PP_solar_open_space_PV CIGS NaN \n", - "122000 PROTRA_PP_solar_urban_PV C_Si_mono NaN \n", - "... ... ... ... \n", - "150210 LFP HPV LDV \n", - "150211 LFP HPV MDV \n", - "150212 LFP HPV HDV \n", - "150213 LFP HPV BUS \n", - "150214 LFP HPV MOTORCYCLES_2W_3W \n", - "\n", - " 2005 ... 2061 2062 2063 2064 2065 \\\n", - "121996 0.000364 ... 0.539886 0.546992 0.552966 0.561550 0.570806 \n", - "121997 0.000961 ... 0.113854 0.115138 0.116198 0.117792 0.119527 \n", - "121998 0.000095 ... 0.024139 0.024446 0.024704 0.025077 0.025480 \n", - "121999 0.000036 ... 0.010348 0.010480 0.010590 0.010750 0.010922 \n", - "122000 0.000452 ... 0.064672 0.061538 0.067632 0.064396 0.070778 \n", - "... ... ... ... ... ... ... ... \n", - "150210 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150211 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150212 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150213 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150214 0.000000 ... 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "\n", - " 2066 2067 2068 2069 2070 \n", - "121996 0.578521 0.585470 0.590557 0.594684 0.599769 \n", - "121997 0.120954 0.122232 0.123137 0.123851 0.124764 \n", - "121998 0.025815 0.026117 0.026336 0.026513 0.026733 \n", - "121999 0.011066 0.011195 0.011289 0.011365 0.011459 \n", - "122000 0.067434 0.064200 0.070010 0.066687 0.072126 \n", - "... ... ... ... ... ... \n", - "150210 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150211 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150212 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150213 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "150214 0.000000 0.000000 0.000000 0.000000 0.000000 \n", - "\n", - "[8831 rows x 75 columns]\n", - "Number of Duplicate Rows: 8831\n", - "162311\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
IAMC_variableIAMC_unitWILIAM_variableWILIAM_unit
0Primary EnergyEJ/yrworld_PE_by_commodityNaN
1Primary EnergyEJ/yrtotal_PE_by_regionNaN
2Price|Primary EnergyNaNfuel_price_by_PROTRA_worldMdollars/EJ
3Price|Primary EnergyNaNfuel_price_by_PROTRA_9R_adjustedMdollars/EJ
4Index Price|Final EnergyNaNprice_final_energyDmnl
...............
161Resource|Iron|Reserve Production RatioNaNFe_reserves_to_production_ratioYear
162Resource|Extraction|IronMtFe_total_miningMt/Years
163Resource|Market|Sales|IronNaNFe_market_salesMt/Year
164Resource|IronMtFe_hidden_resourcesMt
165Resource|RURR|IronNaNrelative_RURR_FeDmnl
\n", - "

166 rows × 4 columns

\n", - "
" - ], - "text/plain": [ - " IAMC_variable IAMC_unit \\\n", - "0 Primary Energy EJ/yr \n", - "1 Primary Energy EJ/yr \n", - "2 Price|Primary Energy NaN \n", - "3 Price|Primary Energy NaN \n", - "4 Index Price|Final Energy NaN \n", - ".. ... ... \n", - "161 Resource|Iron|Reserve Production Ratio NaN \n", - "162 Resource|Extraction|Iron Mt \n", - "163 Resource|Market|Sales|Iron NaN \n", - "164 Resource|Iron Mt \n", - "165 Resource|RURR|Iron NaN \n", - "\n", - " WILIAM_variable WILIAM_unit \n", - "0 world_PE_by_commodity NaN \n", - "1 total_PE_by_region NaN \n", - "2 fuel_price_by_PROTRA_world Mdollars/EJ \n", - "3 fuel_price_by_PROTRA_9R_adjusted Mdollars/EJ \n", - "4 price_final_energy Dmnl \n", - ".. ... ... \n", - "161 Fe_reserves_to_production_ratio Year \n", - "162 Fe_total_mining Mt/Years \n", - "163 Fe_market_sales Mt/Year \n", - "164 Fe_hidden_resources Mt \n", - "165 relative_RURR_Fe Dmnl \n", - "\n", - "[166 rows x 4 columns]" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Check for duplicate rows\n", "duplicate_rows = scenario_variable_2_df[scenario_variable_2_df.duplicated()]\n", @@ -3703,29 +366,9 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'world_PE_by_commodity': 'Primary Energy', 'total_PE_by_region': 'Primary Energy', 'fuel_price_by_PROTRA_world': 'Price|Primary Energy', 'fuel_price_by_PROTRA_9R_adjusted': 'Price|Primary Energy', 'price_final_energy': 'Index Price|Final Energy', 'transport_electrified_vehicle_batteries_power': 'Capacity|Electricity|Power|Battery Electric Vehicles', 'CO2_tax_rate_sectors': 'Price|Carbon|Industries', 'GHG_emissions_1R': 'Emissions', 'GHG_emissions_1R_CO2_equivalent': 'Emissions|CO2eq', 'total_GHG_emissions': 'Emissions', 'total_CO2e_emissions_per_capita_9R': 'Emissions|CO2eq [Per capita]', 'GHG_emissions_per_capita_9R': 'Emissions|Per capita', 'temperature_change': 'Temperature|Global Mean Increase', 'sea_level_rise_by_region': 'Sea level|Region|Mean rise', 'sea_level_rise': 'Sea level|Global Mean rise', 'pH_ocean': 'pH|Ocean', 'atmospheric_concentrations_CO2': 'Concentration|CO2', 'CO2_land_use_change_emissions': 'Emissions|CO2|Land use changes', 'CO2_IPPUs_emissions_9R': 'Emissions|CO2|Industrial Processes', 'CO2_waste_emissions_9R': 'Emissions|CO2|Waste', 'total_CO2_energy_emissions_9R': 'Emissions|CO2|Energy|Supply', 'total_CO2_emissions': 'Emissions|CO2', 'cumulative_GHG_emissions': 'Emissions|CO2eq|Cumulative', 'births': 'Population|Births', 'deaths': 'Population|Deaths', 'net_migrations_by_country': 'Population|Net migrations', 'population_35_regions': 'Population', 'population_9_regions': 'Population', 'total_population_over_15': 'Population|Working Age', 'number_households_nonEU': 'Households|number', 'number_households_by_type_EU27': 'Households|type|number', 'ratio_urbanization_EU27': 'Population|Urban [Share]', 'DB_GDP': 'GDP|PPP', 'DB_GVA_AGRICULTURE': 'Value Added|Agriculture', 'DB_GVA_EXTRACTION': 'Value Added|Extraction', 'DB_GVA_ENERGY': 'Value Added|Industry|Energy', 'DB_GVA_INDUSTRY': 'Value Added|Industry', 'DB_GVA_SERVICES': 'Value Added|Services', 'DB_GVA_TAXES_PRODUCTS_TOTAL': 'Value Added|Taxes on products', 'DB_LABOUR_COMPENSATION': 'Value Added|Labour Compensation', 'DB_NET_OPERATING_SURPLUS': 'Value Added|Net Operating Surplus', 'DB_CONSUMPTION_FIXED_CAPITAL': 'Value Added|Consumption Fixed Capital', 'DB_TAXES_PRODUCTION': 'Value Added|Taxes on production', 'DB_HH_CONSUMPTION': 'Expenditure|Household', 'DB_GOV_CONSUMPTION': 'Public Consumption', 'DB_GROSS_FIXED_CAPITAL_FORMATION': 'Capital Formation', 'DB_OTHER_FINAL_DEMAND': 'Final Demand|Other', 'trade_balance_real_by_product': 'Trade|Value|Balance', 'total_exports_real_by_product': 'Trade|Value|Exports', 'total_imports_real_by_product': 'Trade|Value|Imports', 'DB_OUTPUT': 'Output', 'DB_CAPITAL_STOCK': 'Capital Stock', 'employment_total': 'Employment', 'labour_force': 'Labour Supply', 'unemployment_rate': 'Unemployment|Rate', 'government_revenue': 'Revenue|Government', 'government_expenditure': 'Expenditure|Government', 'government_budget_balance': 'Government|Budget Balance', 'DB_GOV_BALANCE_TO_GDP': 'Government|Budget Balance to GDP', 'government_debt': 'Debt|Public', 'DB_HH_DISPOSABLE_INCOME': 'Revenues|Households|Disposable income', 'DB_HH_CONSUMPTION_COICOP': 'Households|Consumption|COICOP', 'DB_HH_SAVINGS': 'Households|Savings|Real', 'disposable_income': 'Revenues|Households|Disposable income|Nominal', 'DB_HH_CONSUMPTION_COICOP_NOMINAL': 'Households|Consumption nominal|COICOP', 'DB_HH_SAVINGS_NOMINAL': 'Households|Savings', 'DB_GDP_PER_CAPITA': 'GDP|Country|Per Capita', 'DB_DISPOSABLE_INCOME_PER_CAPITA': 'Revenue|Households|Disposable [per capita]', 'consumer_price_index': 'Households|Consumer Price [index]', 'gross_value_added_real': 'Value|Added Real', 'gross_domestic_product_deflator': 'Value|GDP deflator', 'gross_domestic_product_real_supply_side': 'Value|GDP real', 'taxes_products_final_demand_real': 'Value|Final Demand real|Taxes on products', 'taxes_products_by_sector_real': 'Value|GDP real|Taxes products', 'disposable_income_real': 'Revenue|Households|Disposable', 'consumption_COICOP_real': 'Expenditure|Household|Real', 'final_demand_imports_in_basic_prices_real_by_component': 'Final Demand|Imports|Basic prices|Components', 'final_demand_dometic_in_basic_prices_real_by_component': 'Final Demand|Domestic|Basic prices|Components', 'final_energy_intensities_by_sector_and_FE': 'Energy Intensity', 'final_energy_demand_by_sector_and_FE': 'Final Energy', 'final_energy_demand_by_FE_9R': 'Final Energy', 'non_energy_use_intensities_by_sector_and_FE': 'Intensity|Final Energy|Non-Energy Use', 'final_non_energy_demand_by_FE_35R': 'Final Energy|Non-Energy Use', 'PROTRA_utilization_applied_priorities': 'Priorities|Energy|Supply', 'CF_PROTRA_full_load_hours_after_constraints': 'Capacity Factor', 'max_TO_from_existing_stock_by_PROTRA': 'Maximum Generation', 'CF_PROTRA': 'Capacity Factor', 'FE_excluding_trade': 'Final Energy|Regional Consumption', 'total_FE_including_net_trade': 'Final Energy', 'PROSUP_storage_losses': 'Losses|Storage', 'PROSUP_flexibility_technologies': 'Final Energy|Flexibility options', 'TO_allocated_by_process': 'Secondary Energy', 'TI_by_PROTRA_and_commodity': 'Transformation Input|Supply', 'PROSUP_P2H_capacity_stock': 'Capacity|Heating|Heat Boilers', 'stationary_electrolyzer_capacity_stock': 'Capacity|Hydrogen|Electricity', 'shares_RES_in_FE': 'Final Energy|Electricity|Renewable [Share]', 'share_FE_RES_vs_total_FE': 'Final Energy|Renewable [Share]', 'share_RES_in_PE': 'Primary Energy|Renewable [Share]', 'PROSTO_dedicated_capacity_stock': 'Capacity|Electricity|Storage Capacity', 'remaining_potential_capacity_by_PROSTO': 'Capacity|Electricity|Storage Capacity|Potential', 'share_total_PROSTO_losses_vs_TO': 'Energy|Supply|Storage|Losses Vs Transformation Output [Share]', 'PROTRA_capacity_expansion': 'Capacity Additions', 'PROTRA_capacity_stock': 'Capacity', 'capacity_stock_PROTRA_PP_solar_PV_by_subtechnology': 'Capacity|Electricity', 'investment_cost_PROTRA_35R': 'Cost|Capital Cost|Energy Supply', 'total_PROTRA_investment_cost_35R': 'Capital Cost|Energy Supply', 'investment_cost_PROFLEX': 'Cost|Capital Cost|Energy Supply', 'total_PROFLEX_investment_cost': 'Capital Cost|Energy Supply|Electricity|Flexibility\\xa0', 'investment_costs_PROTRA_vs_GDP': 'Capital Cost vs GDP|Energy Supply', 'total_energy_capacities_investment_cost': 'Capital Cost|Energy Supply|Electricity', 'efficiences_PV_technology_panels': 'Efficiency|Electricity|PV', 'PE_GDP_intensity': 'Intensity|Primary Energy vs GDP', 'annual_PE_GDP_intensity_change_rate': 'Intensity|Primary Energy vs GDP|Annual change', 'cumulative_PE_GDP_intensity_change_from_2015': 'Intensity|Primary Energy vs GDP|Cumulative since 2015', 'FE_GDP_intensity': 'Intensity|Final Energy vs GDP', 'annual_FE_GDP_intensity_change_rate': 'Intensity|Final Energy vs GDP|Annual change', 'cumulative_FE_GDP_intensity_change_from_2015': 'Intensity|Final Energy vs GDP|Cumulative since 2015', 'net_TFEC_energy_uses_per_capita': 'Final Energy|Net [per capita]', 'FE_including_trade_by_commodity_per_capita': 'Final Energy [per capita]', 'PE_by_commodity': 'Primary Energy', 'PE_by_commodity_per_capita': 'Primary Energy [per capita]', 'total_FE_including_trade_per_capita': 'Final Energy [per capita]', 'power_charge_vehicles_with_SC': 'Capacity|Electricity|Storage|Battery Capacity|Electric Vehicules|Smart Charging', 'capacity_charge_vehicles_with_SC': 'Final Energy|Transportation|Smart Charging|Electricity', 'total_electrified_vehicles_batteries_power_required': 'Capacity Requirements|Electricity|Power|Battery Electric Vehicles', 'transport_electrified_vehicle_batteries_capacity': 'Capacity|Electricity|Storage|Battery Capacity|Electric Vehicles', 'number_EV_chargers_by_type': 'Transport|Electric Vehicles|Chargers', 'total_capacity_EV_chargers': 'Capacity|Electricity|Electric Vehicles chargers', 'length_grid_to_EV_chargers': 'Length|Grid|Electric Vehicles chargers', 'railway_catenary_length': 'Length|Railway|Catenary', 'railway_tracks_length': 'Length|Railway|Tracks', 'remaining_potential_PROTRA_RES_PP': 'Potential|Remaining|Electricity', 'remaining_potential_PROTRA_RES_CHP_HP': 'Potential|Remaining|Heat', 'required_capacity_expansion_flexibility_options': 'Capacity Requirements|Electricity', 'share_curtailment_TO_elec': 'Share|Electricity|Curtailment', 'GHG_intensity_of_final_energy': 'Intensity|Emissions', 'CO2e_intensity_of_final_energy': 'Intensity|Emissions|CO2eq', 'GHG_emissions_per_unit_of_sector_output': 'Intensity|Emissions', 'LUE_solar_PV': 'Land Cover|Energy|Solar|PV', 'net_new_land_requirements_solar_on_land': 'Land Requirements|Solar', 'net_new_land_requirements_PROTRA_on_built_up_land': 'Land Requirements', 'wind_farm_area': 'Land Cover|Energy|Wind', 'total_land_use_PROTRA': 'Land Cover|Energy', 'total_sea_area_use_PROTRA': 'Water Cover|Sea', 'EROIst_PV_technologies': 'EROI|static|PV', 'EROIfinal_PV_technologies': 'EROI|final|PV', 'EROIst_PROTRA': 'EROI|static', 'dynEROIst_PROTRA': 'EROI|dynamic', 'EPTB_dynamic': 'Energy Payback Time', 'global_EROIst_system': 'EROI|static|Global', 'EROIst_system': 'EROI|static', 'total_ESOIst_electrified_vehicles': 'EROI|static|Electric Vehicles', 'ESOIst_PHS': 'EROI|static|Storage|Pumped Hydropower plants', 'land_use_changes_demanded': 'Land Cover|Demand', 'land_use_area_by_region': 'Land Cover', 'cropland_loss_due_to_sea_level_rise_by_region': 'Land Cover|Cropland|Losses|Sea level rise', 'CH4_emissions_agriculture': 'Emissions|CH4|AFOLU|Agriculture', 'N2O_emissions_agriculture': 'Emissions|N2O|AFOLU|Agriculture', 'materials_consumption_per_capita': 'Resource|Consumption [per capita]', 'Fe_price_economy': 'Price|Mining|Iron', 'Fe_reserves_to_production_ratio': 'Resource|Iron|Reserve Production Ratio', 'Fe_total_mining': 'Resource|Extraction|Iron', 'Fe_market_sales': 'Resource|Market|Sales|Iron', 'Fe_hidden_resources': 'Resource|Iron', 'relative_RURR_Fe': 'Resource|RURR|Iron'}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\1107510058.py:5: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " scenario_variable_2_df['Variable']= scenario_variable_2_df['Variable'].replace(IAMC_WILIAM_name_dict)\n" - ] - } - ], + "outputs": [], "source": [ "# Create a dict with Wiliam's name as key, IAMC's name as value\n", "IAMC_WILIAM_name_dict = data_name_df.set_index('WILIAM_variable')['IAMC_variable'].to_dict()\n", @@ -3740,18 +383,9 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The missing variable in the export dataset are the following: ['Expenditure|Household', 'Value Added|Services', 'Value Added|Agriculture', 'Value Added|Taxes on products', 'Capital Stock', 'Households|Consumption|COICOP', 'Value Added|Labour Compensation', 'Households|Savings', 'Final Demand|Other', 'GDP|Country|Per Capita', 'GDP|PPP', 'Value Added|Extraction', 'Capacity|Batteries|Transport Vehicule', 'Value Added|Net Operating Surplus', 'Households|Consumption nominal|COICOP', 'Revenue|Households|Disposable [per capita]', 'Value Added|Industry|Energy', 'Revenues|Households|Disposable income', 'Value Added|Industry', 'Value Added|Taxes on production', 'Capital Formation', 'Government|Budget Balance to GDP', 'Value Added|Consumption Fixed Capital', 'Output', 'Households|Savings|Real', 'Public Consumption']\n", - "The number of missing varibles is 26\n" - ] - } - ], + "outputs": [], "source": [ "variables_used_list = scenario_variable_2_df['Variable'].to_list()\n", "variables_required_not_in = list(set(variable_required_list) - set(variables_used_list))\n", @@ -3761,22 +395,9 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\AdGeeds\\AppData\\Local\\Temp\\ipykernel_13588\\3639733538.py:36: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " scenario_variable_2_df['Region'] = scenario_variable_2_df['Region'].replace(country_Wiliam_dict)\n" - ] - } - ], + "outputs": [], "source": [ "# Open the text file containing the energy dictionary\n", "with open('../Create_Variable_Dict/energy_dict.txt', 'r') as f:\n", @@ -3812,416 +433,23 @@ "# Convert the string representation of the dictionary back to a dictionary object\n", "country_Wiliam_dict = ast.literal_eval(dict_str)\n", "\n", + "# Open the text file containing the dictionary\n", + "with open('../Create_Variable_Dict/economy_dashboard_dict.txt', 'r') as f:\n", + " # Read the contents of the file\n", + " economy_dashboard_str = f.read()\n", + "\n", + "# Convert the string representation of the dictionary back to a dictionary object\n", + "economy_dashboard_dict = ast.literal_eval(economy_dashboard_str)\n", + "\n", "# Replace the region name by the ones adapted for Wiliam. \n", "scenario_variable_2_df['Region'] = scenario_variable_2_df['Region'].replace(country_Wiliam_dict)\n" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ModelScenarioRegionVariableUnit20052006200720082009...2061206220632064206520662067206820692070
0WILIAMBaseline no policies no CO2taxWorldPrimary Energy|Agriculture ProductsEJ/Year0.0282421.0574501.2656201.7130501.934410...2.9487602.8243902.7275502.6235202.6322302.476062.4014502.3448902.2635202.172020
1WILIAMBaseline no policies no CO2taxWorldPrimary Energy|CoalEJ/Year139.888000142.536000145.529000148.652000149.764000...239.392000238.914000242.655000247.283000252.159000248.07700251.761000254.646000253.793000249.484000
2WILIAMBaseline no policies no CO2taxWorldPrimary Energy|OilEJ/Year202.483000200.246000200.156000199.572000199.148000...170.113000162.348000159.496000158.317000158.668000151.41400150.100000147.932000144.727000139.896000
3WILIAMBaseline no policies no CO2taxWorldPrimary Energy|Forestry ProductsEJ/Year37.12750037.33430037.47910037.76630037.924300...98.84120098.722100101.700000105.143000108.929000106.94800109.672000112.871000112.351000111.132000
4WILIAMBaseline no policies no CO2taxWorldPrimary Energy|GeothermalEJ/Year0.2405550.2498270.2578230.2678570.278548...7.0771306.7295806.7998906.9491507.0921406.824656.9600606.9053506.8409806.567220
..................................................................
171137WILIAMBaseline no policies no CO2taxWorldResource|Iron|LOW_GRADEMt128992.000000127935.000000126830.000000125688.000000124519.000000...66756.00000065861.20000064974.70000064096.80000063227.40000062366.5000061514.20000060670.50000059835.30000059008.800000
171138WILIAMBaseline no policies no CO2taxWorldResource|Iron|ULTRALOW_GRADEMt176000.000000175990.000000175978.000000175963.000000175945.000000...132301.000000130580.000000128867.000000127163.000000125469.000000123787.00000122116.000000120458.000000118813.000000117183.000000
171139WILIAMBaseline no policies no CO2taxWorldResource|Iron|TRACE_GRADEMt0.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171140WILIAMBaseline no policies no CO2taxWorldResource|Iron|OCEANS_GRADEMt0.0000000.0000000.0000000.0000000.000000...0.0000000.0000000.0000000.0000000.0000000.000000.0000000.0000000.0000000.000000
171141WILIAMBaseline no policies no CO2taxWorldResource|RURR|IronNaN0.9154600.9136800.9113070.9088390.906274...0.6305950.6208190.6111160.6015020.5919820.582560.5732360.5640140.5548940.545877
\n", - "

162311 rows × 71 columns

\n", - "
" - ], - "text/plain": [ - " Model Scenario Region \\\n", - "0 WILIAM Baseline no policies no CO2tax World \n", - "1 WILIAM Baseline no policies no CO2tax World \n", - "2 WILIAM Baseline no policies no CO2tax World \n", - "3 WILIAM Baseline no policies no CO2tax World \n", - "4 WILIAM Baseline no policies no CO2tax World \n", - "... ... ... ... \n", - "171137 WILIAM Baseline no policies no CO2tax World \n", - "171138 WILIAM Baseline no policies no CO2tax World \n", - "171139 WILIAM Baseline no policies no CO2tax World \n", - "171140 WILIAM Baseline no policies no CO2tax World \n", - "171141 WILIAM Baseline no policies no CO2tax World \n", - "\n", - " Variable Unit 2005 \\\n", - "0 Primary Energy|Agriculture Products EJ/Year 0.028242 \n", - "1 Primary Energy|Coal EJ/Year 139.888000 \n", - "2 Primary Energy|Oil EJ/Year 202.483000 \n", - "3 Primary Energy|Forestry Products EJ/Year 37.127500 \n", - "4 Primary Energy|Geothermal EJ/Year 0.240555 \n", - "... ... ... ... \n", - "171137 Resource|Iron|LOW_GRADE Mt 128992.000000 \n", - "171138 Resource|Iron|ULTRALOW_GRADE Mt 176000.000000 \n", - "171139 Resource|Iron|TRACE_GRADE Mt 0.000000 \n", - "171140 Resource|Iron|OCEANS_GRADE Mt 0.000000 \n", - "171141 Resource|RURR|Iron NaN 0.915460 \n", - "\n", - " 2006 2007 2008 2009 ... \\\n", - "0 1.057450 1.265620 1.713050 1.934410 ... \n", - "1 142.536000 145.529000 148.652000 149.764000 ... \n", - "2 200.246000 200.156000 199.572000 199.148000 ... \n", - "3 37.334300 37.479100 37.766300 37.924300 ... \n", - "4 0.249827 0.257823 0.267857 0.278548 ... \n", - "... ... ... ... ... ... \n", - "171137 127935.000000 126830.000000 125688.000000 124519.000000 ... \n", - "171138 175990.000000 175978.000000 175963.000000 175945.000000 ... \n", - "171139 0.000000 0.000000 0.000000 0.000000 ... \n", - "171140 0.000000 0.000000 0.000000 0.000000 ... \n", - "171141 0.913680 0.911307 0.908839 0.906274 ... \n", - "\n", - " 2061 2062 2063 2064 \\\n", - "0 2.948760 2.824390 2.727550 2.623520 \n", - "1 239.392000 238.914000 242.655000 247.283000 \n", - "2 170.113000 162.348000 159.496000 158.317000 \n", - "3 98.841200 98.722100 101.700000 105.143000 \n", - "4 7.077130 6.729580 6.799890 6.949150 \n", - "... ... ... ... ... \n", - "171137 66756.000000 65861.200000 64974.700000 64096.800000 \n", - "171138 132301.000000 130580.000000 128867.000000 127163.000000 \n", - "171139 0.000000 0.000000 0.000000 0.000000 \n", - "171140 0.000000 0.000000 0.000000 0.000000 \n", - "171141 0.630595 0.620819 0.611116 0.601502 \n", - "\n", - " 2065 2066 2067 2068 \\\n", - "0 2.632230 2.47606 2.401450 2.344890 \n", - "1 252.159000 248.07700 251.761000 254.646000 \n", - "2 158.668000 151.41400 150.100000 147.932000 \n", - "3 108.929000 106.94800 109.672000 112.871000 \n", - "4 7.092140 6.82465 6.960060 6.905350 \n", - "... ... ... ... ... \n", - "171137 63227.400000 62366.50000 61514.200000 60670.500000 \n", - "171138 125469.000000 123787.00000 122116.000000 120458.000000 \n", - "171139 0.000000 0.00000 0.000000 0.000000 \n", - "171140 0.000000 0.00000 0.000000 0.000000 \n", - "171141 0.591982 0.58256 0.573236 0.564014 \n", - "\n", - " 2069 2070 \n", - "0 2.263520 2.172020 \n", - "1 253.793000 249.484000 \n", - "2 144.727000 139.896000 \n", - "3 112.351000 111.132000 \n", - "4 6.840980 6.567220 \n", - "... ... ... \n", - "171137 59835.300000 59008.800000 \n", - "171138 118813.000000 117183.000000 \n", - "171139 0.000000 0.000000 \n", - "171140 0.000000 0.000000 \n", - "171141 0.554894 0.545877 \n", - "\n", - "[162311 rows x 71 columns]" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Dict used to check if the subscripts are a country\n", "country_dict = {\n", @@ -4286,6 +514,8 @@ " subscript = rest_dict[subscript]\n", " elif sectors_dict.get(subscript, None):\n", " subscript = sectors_dict[subscript]\n", + " elif economy_dashboard_dict.get(subscript, None):\n", + " subscript = economy_dashboard_dict[subscript]\n", "\n", " row[\"Variable\"] = row[\"Variable\"] + \"|\" + subscript\n", "\n", @@ -4299,25 +529,244 @@ "\n", "# Remove the subscript columns once they have been added at the end of the variable name\n", "drop_columns_list = [\"Subscript \" + str(k) for k in range(counter)]\n", - "scenario_variable_2_df.drop(columns=drop_columns_list, inplace=True)\n", - "\n", - "scenario_variable_2_df" + "scenario_variable_2_df.drop(columns=drop_columns_list, inplace=True)\n" ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "8320\n", - "8257\n" - ] - } - ], + "outputs": [], + "source": [ + "# List with the words in uppercase which will not be capitalized by the next functions\n", + "upper_word_list = ['CO2', 'CH4', 'N2O', 'PFC', 'SF6', 'HFC134a', 'HFC23', 'HFC32', 'HFC125', 'HFC143a', 'HFC152a', 'HFC227ea', 'HFC245ca', 'HFC43-10', 'HFC', 'w/o CCS' ,'w/ CCS', 'PV', 'CSP', 'AFOLU', 'CO2eq', 'EROI', 'PV', 'CSP','ICE_gasoline','ICE_diesel', 'ICE_gas', 'ICE_LPG', 'BEV', 'PHEV', 'HEV', 'FCEV', 'EV', 'HPV', 'LMO', 'NMC622', 'NMC811', 'NCA', 'LFP', 'LDV','MDV','HDV','NMT','GDP', 'PPP']\n", + "vehicule_list = ['gasoline', 'gas' , 'diesel']\n", + "\n", + "# Change the format of the string to respect IAMC's format\n", + "def transform_string(s):\n", + " # Split the string into words\n", + " if pd.isnull(s): \n", + " return s\n", + " words = s.split('|')\n", + "\n", + " capitalized_words = []\n", + " # Capitalize the first letter of each word\n", + " for word in words: \n", + " if word not in upper_word_list:\n", + " new_word_list = word.split('_')\n", + " new_word_list = [new_word.capitalize() for new_word in new_word_list] \n", + " capitalized_words += [' '.join(new_word_list) + '|']\n", + " else: \n", + " new_word_list = word.split('_')\n", + " capitalized_words += [new_word + '|' if new_word in vehicule_list else new_word.capitalize() + '|' for new_word in new_word_list]\n", + " \n", + " # Join the words with spaces\n", + " transformed_string = ''.join(capitalized_words)\n", + "\n", + " result = ''\n", + " capitalize_next=False\n", + " # Capitalize the letter after each space\n", + " for char in transformed_string[:-1]:\n", + " if char == ' ' or char == '-':\n", + " capitalize_next = True\n", + " result += char\n", + " elif capitalize_next:\n", + " result += char.upper()\n", + " capitalize_next = False\n", + " else:\n", + " result += char\n", + " \n", + " \n", + " return result\n", + "\n", + "# Capitalize each variable's name\n", + "scenario_variable_2_df['Variable'] = scenario_variable_2_df['Variable'].apply(transform_string)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Make modifications on some variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Select rows with the name 'Emission'\n", + "emission_rows = scenario_variable_2_df[scenario_variable_2_df['Variable'].str.contains('Emission')]\n", + "emission_name_old = emission_rows['Variable'].to_list()\n", + "# List of Greenhouses Gases used in Wiliam \n", + "# We differentiate the treatment of HFC and others GHGs because they are handle differently in IAMC Format. \n", + "GHGs_to_check = ['CH4', 'N2O', 'PFC', 'SF6','CO2']\n", + "HFC_list = ['HFC134a', 'HFC23', 'HFC32', 'HFC125', 'HFC143a', 'HFC152a', 'HFC227ea', 'HFC245ca', 'HFC43-10']\n", + "\n", + "\n", + "# Iterate over the rows to create the name and the unit of emissions correctly. \n", + "# The new list of variables and unit is then updated to the real dataframe.\n", + "variable_list = []\n", + "unit_list = []\n", + "\n", + "for row_index, row in emission_rows[['Variable','Unit']].iterrows():\n", + " specific_word = 'Emissions'\n", + " ghg_bool = False\n", + " for string in GHGs_to_check:\n", + " \n", + " if string in row['Variable']:\n", + " \n", + " index_emission = row['Variable'].find('Emissions') + len(specific_word)\n", + " index_gas = row['Variable'].find(string)\n", + " row['Variable'] = row['Variable'][:index_emission] + '|' + string + row['Variable'][index_emission:index_gas-1] + row['Variable'][index_gas+len(string):] \n", + " ghg = string\n", + " ghg_bool = True\n", + " \n", + " break\n", + " \n", + " for string in HFC_list:\n", + " if string in row['Variable']:\n", + " \n", + " index_emission = row['Variable'].find('Emissions') + len(specific_word)\n", + " index_gas = row['Variable'].find(string)\n", + " row['Variable'] = row['Variable'][:index_emission] + '|HFC|' + string + row['Variable'][index_emission:index_gas-1] + row['Variable'][index_gas+len(string):]\n", + " \n", + " break\n", + " index_year = row['Unit'].find('/yr')\n", + " if row['Unit'] == 'Mt/yr' or row['Unit'] == 'Gt/yr':\n", + " if ghg_bool: \n", + " row['Unit'] = row['Unit'][:index_year] + ' ' + ghg + row['Unit'][index_year:]\n", + " else : \n", + " row['Unit'] = row['Unit'][:index_year] + ' ' + string + row['Unit'][index_year:]\n", + " variable_list.append(row['Variable'])\n", + " unit_list.append(row['Unit'])\n", + "\n", + "indexes = emission_rows.index\n", + "\n", + "# Assign new values to specific rows in the column for the Variable and Unit \n", + "scenario_variable_2_df.loc[indexes, 'Variable'] = variable_list\n", + "scenario_variable_2_df.loc[indexes, 'Unit'] = unit_list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Change Primary Energy Naming\n", + "# Select the rows where the primary energy word \n", + "energy_rows = scenario_variable_2_df[scenario_variable_2_df['Variable'].str.contains('Per Capita')]\n", + "\n", + "\n", + "energy_name_old = energy_rows['Variable'].to_list()\n", + "\n", + "# Function to move the matched string after the specific word\n", + "def move_crochets(s):\n", + " specific_word_1 = '[per capita]'\n", + " specific_word_2 = '[intensity]'\n", + " specific_word_3 = '[share]'\n", + " \n", + " if specific_word_1 in s:\n", + " index_emission = s.find(specific_word_1) \n", + " \n", + " s = s[:index_emission-1] + s[index_emission+len(specific_word_1):] + specific_word_1\n", + " \n", + " if specific_word_2 in s:\n", + " index_emission = s.find(specific_word_2) \n", + " \n", + " s = s[:index_emission-1] + s[index_emission+len(specific_word_2):] + '[Intensity]'\n", + " \n", + " if specific_word_3 in s:\n", + " index_emission = s.find(specific_word_3) \n", + " \n", + " s = s[:index_emission-1] + s[index_emission+len(specific_word_1):] + '[Share]'\n", + "\n", + " return s\n", + "\n", + "# Apply the function to the 'Variable' column\n", + "energy_rows['Variable'] = energy_rows['Variable'].apply(move_crochets)\n", + "energy_name_new = energy_rows['Variable'].to_list()\n", + "\n", + "energy_per_capita_dict = dict(zip(energy_name_old, energy_name_new))\n", + "\n", + "scenario_variable_2_df['Variable'] = scenario_variable_2_df['Variable'].replace(energy_per_capita_dict)\n", + "scenario_variable_2_df['Variable'] = scenario_variable_2_df['Variable'].apply(move_crochets)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Change Secondary Energy Naming \n", + "secondary_energy_rows = scenario_variable_2_df[scenario_variable_2_df['Variable'].str.contains('Secondary Energy')]\n", + "\n", + "secondary_energy_rows['Variable'].iloc[0]\n", + "\n", + "# Change Secondary Energy Naming \n", + "# Select the rows for Primary Energy Price \n", + "price_energy_rows = scenario_variable_2_df[scenario_variable_2_df['Variable'].str.contains('Price')]\n", + "price_energy_rows = price_energy_rows[price_energy_rows['Variable'].str.contains('Primary Energy')]\n", + "price_energy_rows\n", + "\n", + "def remove_characters_between_indices(input_string, start_index, end_index):\n", + " \"\"\"\n", + " Remove characters between two given indices of a string.\n", + "\n", + " Args:\n", + " - input_string (str): The original string.\n", + " - start_index (int): The index of the first character to remove (inclusive).\n", + " - end_index (int): The index of the last character to remove (inclusive).\n", + "\n", + " Returns:\n", + " - str: The modified string with characters removed between the specified indices.\n", + " \"\"\"\n", + " if start_index >= end_index:\n", + " return input_string # Return the original string if start index is greater than or equal to end index\n", + " \n", + " # Ensure indices are within the range of the string\n", + " start_index = max(start_index, 0)\n", + " end_index = min(end_index, len(input_string) - 1)\n", + " \n", + " # Construct the new string by concatenating substrings before and after the characters to be removed\n", + " return input_string[:start_index] + input_string[end_index + 1:]\n", + "\n", + "def remove_string_between_pipe(input_string):\n", + " \"\"\"\n", + " Remove the string between the second and third '|' characters in the input string.\n", + "\n", + " Args:\n", + " - input_string (str): The original string.\n", + "\n", + " Returns:\n", + " - str: The modified string with the content between '|' characters removed.\n", + " \"\"\"\n", + " second_occurrence = input_string.find('|', input_string.find('|') + 1)\n", + " third_occurrence = input_string.find('|', second_occurrence + 1)-1\n", + " \n", + " # Remove characters between the '|' characters using the previous function\n", + " result = remove_characters_between_indices(input_string, second_occurrence, third_occurrence)\n", + "\n", + " # Remove CCS extension because it is not relevant \n", + " result = result.replace('|w/ CCS', '').replace('|w/o CCS', '')\n", + " \n", + " return result\n", + "\n", + "price_energy_rows['Variable'] = price_energy_rows['Variable'].apply(remove_string_between_pipe)\n", + "indexes = price_energy_rows.index\n", + "\n", + "# Assign new values to specific rows in the column for the Variable and Unit \n", + "scenario_variable_2_df.loc[indexes, 'Variable'] = price_energy_rows['Variable']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "import csv\n", "# Remove the duplication on the variable column \n", diff --git a/Visualization/Plot_timeseries.ipynb b/Visualization/Plot_timeseries.ipynb index fab78fa..c0f2549 100644 --- a/Visualization/Plot_timeseries.ipynb +++ b/Visualization/Plot_timeseries.ipynb @@ -2,13 +2,13 @@ "cells": [ { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", - "import pandas as pd\n", "import pyam\n", + "import matplotlib.pyplot as plt\n", "# Import the library to efficiently search variables\n", "import triesearching" ] @@ -22,19 +22,9 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO] 14:09:20 - pyam.core: Reading file ..\\Conversion-Script\\File_Converted\\Baseline no policies no CO2taxconverted.csv\n", - "c:\\Users\\34670\\.conda\\envs\\wiliamcformat\\Lib\\site-packages\\pyam\\utils.py:318: FutureWarning: The previous implementation of stack is deprecated and will be removed in a future version of pandas. See the What's New notes for pandas 2.1.0 for details. Specify future_stack=True to adopt the new implementation and silence this warning.\n", - " .stack(dropna=True)\n" - ] - } - ], + "outputs": [], "source": [ "cwd = os.getcwd()\n", "\n", @@ -56,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -69,58 +59,9 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Completions: Secondary Energy|Electricity And Heat|Gas Fuels|w/ CCS\n", - "Secondary Energy|Electricity And Heat|Gas Fuels|w/o CCS\n", - "Secondary Energy|Electricity And Heat|Geothermal|Deactivated\n", - "Secondary Energy|Electricity And Heat|Liquid Fuels|w/ CCS\n", - "Secondary Energy|Electricity And Heat|Liquid Fuels|w/o CCS\n", - "Secondary Energy|Electricity And Heat|Solid|Biomass|w/ CCS\n", - "Secondary Energy|Electricity And Heat|Solid|Biomass|w/o CCS\n", - "Secondary Energy|Electricity And Heat|Solid|Fossil|w/ CCS\n", - "Secondary Energy|Electricity And Heat|Solid|Fossil|w/o CCS\n", - "Secondary Energy|Electricity And Heat|Waste\n", - "Secondary Energy|Electricity|Gas Fuels|w/ CCS\n", - "Secondary Energy|Electricity|Gas Fuels|w/o CCS\n", - "Secondary Energy|Electricity|Geothermal\n", - "Secondary Energy|Electricity|Hydro|Dammed\n", - "Secondary Energy|Electricity|Hydro|Run Of River\n", - "Secondary Energy|Electricity|Liquid Fuels|w/ CCS\n", - "Secondary Energy|Electricity|Liquid Fuels|w/o CCS\n", - "Secondary Energy|Electricity|Nuclear\n", - "Secondary Energy|Electricity|Ocean\n", - "Secondary Energy|Electricity|Solar|CSP\n", - "Secondary Energy|Electricity|Solar|Open Space|PV\n", - "Secondary Energy|Electricity|Solar|Urban|PV\n", - "Secondary Energy|Electricity|Solid|Biomass|w/ CCS\n", - "Secondary Energy|Electricity|Solid|Biomass|w/o CCS\n", - "Secondary Energy|Electricity|Solid|Fossil|w/ CCS\n", - "Secondary Energy|Electricity|Solid|Fossil|w/o CCS\n", - "Secondary Energy|Electricity|Waste|w/ CCS\n", - "Secondary Energy|Electricity|Waste|w/o CCS\n", - "Secondary Energy|Electricity|Wind|Offshore\n", - "Secondary Energy|Electricity|Wind|Onshore\n", - "Secondary Energy|Gas Fuels\n", - "Secondary Energy|Heat|Gas Fuels\n", - "Secondary Energy|Heat|Geothermal\n", - "Secondary Energy|Heat|Liquid Fuels\n", - "Secondary Energy|Heat|Solar|Deactivated\n", - "Secondary Energy|Heat|Solid|Biomass\n", - "Secondary Energy|Heat|Solid|Fossil\n", - "Secondary Energy|Heat|Waste\n", - "Secondary Energy|Hydrogen\n", - "Secondary Energy|Liquid Fuels\n", - "Secondary Energy|Solids|Biomass\n", - "Secondary Energy|Solids|Fossils\n" - ] - } - ], + "outputs": [], "source": [ "# Enter the prefix of the variable you want to see.\n", "\n", @@ -131,615 +72,24 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
2005200620072008200920102011201220132014...2061206220632064206520662067206820692070
modelscenarioregionvariableunit
WILIAMBaseline no policies no CO2taxChinaSecondary Energy|Electricity|GeothermalEJ/yr0.0007250.0007250.0006880.0006260.0006260.0006260.0006550.0007040.0007040.000704...0.6401440.6110400.5877070.5660170.7015970.6657040.6400810.6175660.5898810.561562
East Asia and OceaniaSecondary Energy|Electricity|GeothermalEJ/yr0.0984420.0995300.1032100.1085320.1135710.1141610.1130960.1168850.1206880.125068...0.8538330.8201840.8520330.8184610.8498460.8135740.8346480.8026740.8318230.795460
European Union (27 member countries)Secondary Energy|Electricity|GeothermalEJ/yr0.0179340.0182540.0182910.0185830.0193790.0200520.0203030.0205010.0210990.021732...0.3930900.3725610.4017360.3883530.3732910.3894840.3756240.3647500.3871950.370103
IndiaSecondary Energy|Electricity|GeothermalEJ/yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.4582060.4249780.4406300.4271140.4457820.4143640.4260940.4670190.4453500.416520
Latin AmericaSecondary Energy|Electricity|GeothermalEJ/yr0.0043300.0043300.0043300.0043300.0043300.0047710.0055730.0056870.0056870.005677...1.0706501.0431901.0447801.0470201.0531701.0057801.0272301.0254201.0092300.976543
Rest of the WorldSecondary Energy|Electricity|GeothermalEJ/yr0.0234520.0248870.0282270.0306500.0325220.0344130.0376440.0415750.0482680.057504...1.8885701.7481701.7656701.9318801.8814901.7433701.8393301.7843801.7645101.683820
RussiaSecondary Energy|Electricity|GeothermalEJ/yr0.0020610.0020890.0021360.0021360.0021360.0021360.0021370.0021390.0021390.002139...0.0928250.0883760.0856390.0825540.0791630.1077930.1043990.1011850.0962270.091961
United KingdomSecondary Energy|Electricity|GeothermalEJ/yr0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000...0.0134730.0128850.0124550.0119830.0114860.0109580.0105680.0101260.0146960.014009
United States, Mexico and CanadaSecondary Energy|Electricity|GeothermalEJ/yr0.0843630.0837760.0829940.0848160.0875230.0871560.0871350.0892390.0884680.087969...0.6870980.6577210.6307440.6608290.6360160.6685440.6417520.6677590.6420320.648005
\n", - "

9 rows × 66 columns

\n", - "
" - ], - "text/plain": [ - " 2005 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000725 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.098442 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.017934 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.004330 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.023452 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002061 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.084363 \n", - "\n", - " 2006 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000725 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.099530 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.018254 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.004330 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.024887 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002089 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.083776 \n", - "\n", - " 2007 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000688 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.103210 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.018291 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.004330 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.028227 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002136 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.082994 \n", - "\n", - " 2008 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000626 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.108532 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.018583 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.004330 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.030650 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002136 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.084816 \n", - "\n", - " 2009 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000626 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.113571 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.019379 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.004330 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.032522 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002136 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.087523 \n", - "\n", - " 2010 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000626 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.114161 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.020052 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.004771 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.034413 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002136 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.087156 \n", - "\n", - " 2011 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000655 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.113096 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.020303 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.005573 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.037644 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002137 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.087135 \n", - "\n", - " 2012 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000704 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.116885 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.020501 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.005687 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.041575 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002139 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.089239 \n", - "\n", - " 2013 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000704 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.120688 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.021099 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.005687 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.048268 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002139 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.088468 \n", - "\n", - " 2014 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.000704 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.125068 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.021732 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.005677 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 0.057504 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.002139 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.000000 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.087969 \n", - "\n", - " ... \\\n", - "model scenario region variable unit ... \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr ... \n", - "\n", - " 2061 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.640144 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.853833 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.393090 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.458206 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.070650 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.888570 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.092825 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.013473 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.687098 \n", - "\n", - " 2062 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.611040 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.820184 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.372561 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.424978 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.043190 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.748170 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.088376 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.012885 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.657721 \n", - "\n", - " 2063 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.587707 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.852033 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.401736 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.440630 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.044780 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.765670 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.085639 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.012455 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.630744 \n", - "\n", - " 2064 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.566017 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.818461 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.388353 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.427114 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.047020 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.931880 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.082554 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.011983 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.660829 \n", - "\n", - " 2065 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.701597 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.849846 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.373291 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.445782 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.053170 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.881490 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.079163 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.011486 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.636016 \n", - "\n", - " 2066 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.665704 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.813574 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.389484 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.414364 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.005780 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.743370 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.107793 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.010958 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.668544 \n", - "\n", - " 2067 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.640081 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.834648 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.375624 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.426094 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.027230 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.839330 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.104399 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.010568 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.641752 \n", - "\n", - " 2068 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.617566 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.802674 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.364750 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.467019 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.025420 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.784380 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.101185 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.010126 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.667759 \n", - "\n", - " 2069 \\\n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.589881 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.831823 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.387195 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.445350 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 1.009230 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.764510 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.096227 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.014696 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.642032 \n", - "\n", - " 2070 \n", - "model scenario region variable unit \n", - "WILIAM Baseline no policies no CO2tax China Secondary Energy|Electricity|Geothermal EJ/yr 0.561562 \n", - " East Asia and Oceania Secondary Energy|Electricity|Geothermal EJ/yr 0.795460 \n", - " European Union (27 member countries) Secondary Energy|Electricity|Geothermal EJ/yr 0.370103 \n", - " India Secondary Energy|Electricity|Geothermal EJ/yr 0.416520 \n", - " Latin America Secondary Energy|Electricity|Geothermal EJ/yr 0.976543 \n", - " Rest of the World Secondary Energy|Electricity|Geothermal EJ/yr 1.683820 \n", - " Russia Secondary Energy|Electricity|Geothermal EJ/yr 0.091961 \n", - " United Kingdom Secondary Energy|Electricity|Geothermal EJ/yr 0.014009 \n", - " United States, Mexico and Canada Secondary Energy|Electricity|Geothermal EJ/yr 0.648005 \n", - "\n", - "[9 rows x 66 columns]" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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LAICAsSVK1dEixYtRNOmTQt035m6desmBg4cqNl2dnYWNjY24rvvvhPXrl0Ts2bNEjo6OiI4ODjbvG7fvi1MTEzE8OHDRXBwsNiyZYuws7MTU6ZM0eTZqlUrYWFhIaZOnSpCQ0PFr7/+KhQKhdizZ0+OZV6wYIGoXr16jsczffnll6J+/fo5Hp83b56wtLQUSUlJueYDiIoVK4o//vhDhISEiO7duwsXFxfRpk0bsWvXLhEUFCSaNGkiOnbsqDln165dwsLCQqxatUpcv35d7NmzR7i4uIipU6e+UL5TpkwRpqamok2bNuLcuXPi4MGDws3NTbz77ruaND/++KNwdHQUmzZtEjdu3BCbNm0SNjY2YtWqVUKI/35OLi4umjR37tzJct8qlUo0adJE1KhRQ+zZs0dcv35d/P3332LHjh1CCCECAwOFjo6O+Prrr0VISIhYuXKlMDY2FitXrtS6xy1btmjla2lpqUmTWZbq1auL7du3i5CQENG7d2/h7Ows0tPTRWpqqliwYIGwsLAQlwNPiQvHj4qwC+dEVFiocKpUSVhYWIi5c+eKa9euiWvXrmX5DN69e1fY2dmJiRMniuDgYHH27FnRvn174evrqzmup6cnvv32WxEeHi7OnjkjZk2bKsIunBP3w8NE/ONH4vLlywIQERER2X4+snsuSlJONs2cLOb1eUPs+n5hkeed2/f382QAlI2CBkCJaYmi5qqaxfJKTEvM930NHDhQ6OrqClNTU63X119/LYQoWAC0detWTZqEhAShr68v1q5dq9mXlpYmKlSoIObOnat13vr16zVpHj16JIyNjcUff/whhBCif//+YsiQIVplPnz4sNDR0cnxwXrq1CkBiPj4eK3r7N27V5Pmn3/+EUCOeRQ0AHrvvfc022q1WpQvX158//332eb1xRdfCA8PD61A9bvvvhNmZmZCpVIJITICoObNm2tdt2HDhmLChAnZllcIIUaPHi3atGmT43EhhAgLCxMWFhbip59+yjGNl5eXGDZsWK75CJHxJf7VV19pto8fPy4AsWLFCs2+devWCSMjI812ixYtxMyZM7XyWbNmjXB0dHyhfKdMmSJ0dXXFrVu3NPt27twpdHR0RFRUlBBCCCcnJ/H7779rXXv69OnCx8dHCPHfz2nhwtwfwLt37xY6OjoiJCQk2+PvvvuuaN++vda+zz77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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Choose one of your wanted variable with the completion\n", "model, scenario = \"WILIAM\", \"Baseline no policies no CO2tax\"\n", - "variable = input(\"Input the name of the variable\")\n", - "title = input(\"Enter the title of the chart\")\n", + "variable = 'Final Energy|Heat'\n", + "title = 'Final Energy|Heat'\n", "\n", "data = df.filter(model=model, scenario=scenario, variable=variable).filter(region=\"World\", keep=False)\n", "\n", "\n", "data.plot(color=\"region\", title= title)\n", - "data.timeseries()\n" + "data.timeseries()\n", + "plt.legend(loc=1)\n", + "plt.tight_layout()\n", + "plt.show()" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] } ], "metadata": { @@ -758,7 +108,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.10.14" } }, "nbformat": 4, From 1b6a59c14999d9e164e09f3475cf4e639758bc51 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 11:52:08 +0200 Subject: [PATCH 06/22] change naming of variable for the first dictionnary --- .../Variable_name_IAMC.xlsx | Bin 18504 -> 18587 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Conversion-Script/Variable_Reference/Variable_name_IAMC.xlsx b/Conversion-Script/Variable_Reference/Variable_name_IAMC.xlsx index 9f9671573cc96a795bf8508122c67830b601d5cc..a69ae5de46a2822734b2fbfeacb58907713dc24e 100644 GIT binary patch delta 10074 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 From e4bcadae4f39e2de3bc4b06b017518645a3b867e Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 15:54:50 +0200 Subject: [PATCH 07/22] add script to run translation --- Final_script/report_pdf.py | 14 ++ Final_script/translation.py | 346 ++++++++++++++++++++++++++++++++++++ 2 files changed, 360 insertions(+) create mode 100644 Final_script/report_pdf.py create mode 100644 Final_script/translation.py diff --git a/Final_script/report_pdf.py b/Final_script/report_pdf.py new file mode 100644 index 0000000..45b7c90 --- /dev/null +++ b/Final_script/report_pdf.py @@ -0,0 +1,14 @@ +# Create a PDF class +from fpdf import FPDF + +class PDFReport(FPDF): + def header(self): + # Add a title at the top of each page + self.set_font("Arial", "B", 12) + self.cell(0, 10, "IAMC Data Report", align="C", ln=True) + + def footer(self): + # Add page number at the bottom of each page + self.set_y(-15) + self.set_font("Arial", "I", 8) + self.cell(0, 10, f"Page {self.page_no()}", align="C") diff --git a/Final_script/translation.py b/Final_script/translation.py new file mode 100644 index 0000000..cde1a60 --- /dev/null +++ b/Final_script/translation.py @@ -0,0 +1,346 @@ +import numpy as np +import pandas as pd +import os +import ast +import pyam +import matplotlib.pyplot as plt +import report_pdf +import argparse + + +def get_last_added_file(folder_path): + # Get a list of all files in the folder + files = os.listdir(folder_path) + + # Filter Excel files + excel_files = [ + file + for file in files + if file.endswith(".xlsx") or file.endswith(".xls") or file.endswith(".csv") + ] + + if not excel_files: + return None # No Excel files found + print() + # Sort files by modification time (newest first) + excel_files.sort( + key=lambda x: os.path.getctime(os.path.join(folder_path, x)), reverse=True + ) + + # Return the path to the last added Excel file + return os.path.join(folder_path, excel_files[0]) + + +def create_folder_if_not_exists(folder_name): + # Get current folder + folder_path = os.getcwd() + + try: + os.makedirs("pip") + print("DONE") + except FileExistsError: + pass + if not os.path.exists(os.path.join(folder_path, folder_name)): + os.makedirs(folder_name) + print("Folder '{}' created.".format(folder_name)) + else: + print("Folder '{}' already exists.".format(folder_name)) + + +# Aggregate the subscripts at the end of the variable +def aggregate_variable_name(row, counter, existing_country_Wiliam_dict, country_dict): + for k in range(counter): + subscript = row["Subscript " + str(k)] + + if k == 0: + if existing_country_Wiliam_dict.get(subscript) == 1: + # Give the name of the region for that variable + row["Region"] = country_dict.get(subscript) + + row["Subscript 0"] = np.nan + continue + + if not pd.isnull(subscript): + row["Variable"] = row["Variable"] + "|" + subscript + + return row + +# Function to replace values and track missing ones +def replace_and_track(value, variable_name_dict,missing_variable): + if value in variable_name_dict: + return variable_name_dict[value] + else: + missing_variable.append(value) + return value + + +def main(): + # Parse the argument put in the command line. + parser = argparse.ArgumentParser() + parser.add_argument("--arguments", help="insert argg") + args = parser.parse_args() + + # Inform the user if a report will be created + report_creation_bool = False + if args.arguments == 'report': + report_creation_bool = True + + # Folder name to create + folder_name_to_convert = "File_To_Convert" + folder_name_converted = "File_Converted" + + # Get current folder + folder_path = os.getcwd() + + + # Create new folder + create_folder_if_not_exists(folder_name_converted) + + # Check the existence of the File_To_Convert folder + folder_created_bool = os.path.isdir(folder_path + folder_name_to_convert) + if not folder_created_bool: + print('The path to the File_To_Convert folder', folder_path + folder_name_to_convert, ' is not a directory.' ) + + # Get the last upload excel file + real_folder_path = os.path.join(folder_path, folder_name_to_convert) + + last_file = get_last_added_file(real_folder_path) + + + if last_file: + print("Last added file:", last_file) + else: + print("No files found in the folder.") + + # Get the correct naming for the converted file + filename_with_extension = os.path.basename(last_file) + splited_filename_with_extension = os.path.splitext(filename_with_extension) + print(splited_filename_with_extension) + filename = ( + splited_filename_with_extension[0] + + "converted" + + splited_filename_with_extension[1] + ) + + + + # The scenario name is the name of the file to translate. + # Possibility to create a thread to run all the code during the wait for the user answer. + # scenario = input("Give the name of the scenario") + scenario = splited_filename_with_extension[0] + + # Read the selected file + if ( + splited_filename_with_extension[1] == ".xls" + or splited_filename_with_extension[1] == ".xlsx" + ): + scenario_variable_df = pd.read_excel(last_file) + elif splited_filename_with_extension[1] == ".csv": + scenario_variable_df = pd.read_csv(last_file) + + # Remove duplicated rows in the file. + scenario_variable_df = scenario_variable_df.drop_duplicates() + # Rename the column of the file + + + columns = scenario_variable_df.columns.str.replace("Unnamed:", "Subscript") + columns = columns.str.replace(".", " ") + + # Define the string you want in column names + search_string = "Subscript" + counter = 0 + + for k in range(len(columns)): + if search_string in columns[k]: + columns.values[k] = search_string + " " + str(counter) + counter += 1 + + + # Create a dictionary using zip() and dictionary comprehension + my_dict = {k: v for k, v in zip(scenario_variable_df.columns[2:6], columns[2:6])} + scenario_variable_df.rename(columns=my_dict, inplace=True) + scenario_variable_df.rename( + columns={"Time": "Variable", "Year": "Unit", "Subscript": "Subscript 0"}, + inplace=True, + ) + + # Insert the three columns in the right place for IAMC format + scenario_variable_df.insert(0, "Model", "WILIAM") + scenario_variable_df.insert(1, "Scenario", scenario) + scenario_variable_df.insert(2, "Region", "World") + + # Dict used to check if the subscripts is a region used in Wiliam. + existing_country_Wiliam_dict = { + "EU27": 1, + "UK": 1, + "CHINA": 1, + "EASOC": 1, + "INDIA": 1, + "LATAM": 1, + "RUSSIA": 1, + "USMCA": 1, + "LROW": 1, + "AUSTRIA": 1, + "BELGIUM": 1, + "BULGARIA": 1, + "CROATIA": 1, + "CYPRUS": 1, + "CZECH_REPUBLIC": 1, + "DENMARK": 1, + "ESTONIA": 1, + "FINLAND": 1, + "FRANCE": 1, + "GERMANY": 1, + "GREECE": 1, + "HUNGARY": 1, + "IRELAND": 1, + "ITALY": 1, + "LATVIA": 1, + "LITHUANIA": 1, + "LUXEMBOURG": 1, + "MALTA": 1, + "NETHERLANDS": 1, + "POLAND": 1, + "PORTUGAL": 1, + "ROMANIA": 1, + "SLOVAKIA": 1, + "SLOVENIA": 1, + "SPAIN": 1, + "SWEDEN": 1, + } + + # Open the text file containing the country dictionary to translate the country name of Wiliam to the IAMC format. + with open('../Create_Variable_Dict/country_dict.txt', 'r') as f: + # Read the contents of the file + country_dict_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + country_dict = ast.literal_eval(country_dict_str) + + + # Order the subscript of each variable and give the right region to each row + scenario_variable_df = scenario_variable_df.apply( + aggregate_variable_name, args=(counter, existing_country_Wiliam_dict, country_dict), axis=1 + ) + + # Remove the subscript columns once they have been added at the end of the variable name + drop_columns_list = ["Subscript " + str(k) for k in range(counter)] + scenario_variable_df.drop(columns=drop_columns_list, inplace=True) + + # Open the text file containing the variable dictionary to translate each variable name of Wiliam to the variable name in the IAMC format. + with open("../Create_Variable_Dict/variable_name_dict.txt", "r") as f: + # Read the contents of the file + variable_name_dict_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + variable_name_dict = ast.literal_eval(variable_name_dict_str) + + # Convert all the variable name to the IAMC format and get the variable with a missing translation. + # Create the list of missing variable. + missing_variable = [] + + # Apply the function to the DataFrame column + + + scenario_variable_df["Variable"] = scenario_variable_df["Variable"].apply( + replace_and_track, args=(variable_name_dict, missing_variable), axis=1 + ) + + # Create the path for the file containing the missing variable. + missing_variable_path = os.path.join(folder_path , 'missing_variable.csv') + print("The translation of ", len(missing_variable), " variables are missing. You can find the file with all of them here", missing_variable_path) + + # Save the untranslated variable in csv file. + np.savetxt(missing_variable_path, missing_variable, delimiter=", ", fmt="% s") + + # Write the new excel file in the File_Converted folder + folder_file_converted = os.path.join(folder_path, folder_name_converted) + + # Get the correct naming for the converted file + filename_with_extension = os.path.basename(last_file) + filename = ( + splited_filename_with_extension[0] + + "converted" + + splited_filename_with_extension[1] + ) + + # Remove duplicate rows + # scenario_variable_df.drop_duplicates(subset=['Region', 'Variable'],inplace=True) + #scenario_variable_df.drop_duplicates(subset=["Region", "Variable", "Unit"], inplace=True) + + # Check for duplicate rows + duplicate_rows = scenario_variable_df[scenario_variable_df.duplicated(subset=["Region", "Variable", "Unit"])] + + # Count the number of duplicate rows. Normally we should find zero duplicates. + num_duplicate_rows = duplicate_rows.shape[0] + if num_duplicate_rows > 0: + print("Number of Duplicate Rows:", num_duplicate_rows) + + # Write the following dataframe to excel + if ( + splited_filename_with_extension[1] == ".xls" + or splited_filename_with_extension[1] == ".xlsx" + ): + scenario_variable_df.to_excel(os.path.join(folder_file_converted, filename)) + elif splited_filename_with_extension[1] == ".csv": + scenario_variable_df.to_csv( + os.path.join(folder_file_converted, filename), index=False + ) + + print("Conversion Done") + + if not report_creation_bool: + exit() + + # Structure to check the existance of the file + try: + scenario_df = pyam.IamDataFrame( + os.path.join(folder_file_converted, filename) + ) + except: + print("ERROR opening the file with results in IAMC format") + exit() + + # 3. This defines the model and scenario used for the report + args = dict(model="WILIAM", scenario=scenario) + + datagg = scenario_df.aggregate_region("Population").timeseries() + + # "aggregate_region" function generates a DataFrame object instead of IamDataFrame object. We plot results with DataFrame functions + dataggtrans = datagg.transpose() + + # Generate the plot. To customize this plot, go to: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html + dataggtrans.plot(kind='line', + title="Global population", + legend=False, + ylabel="Billions of people", + xlabel="Year", + figsize=[10,5]) + plt.legend(loc=1) + plt.tight_layout() + plt.savefig('Population.png') + + print("Report's creation in process") + # Create instance of FPDF class + pdf = report_pdf.PDFReport() + + # Add a page + pdf.add_page() + pdf.cell(0, 10, 'Figure 1: World Population Evolution', ln=True) + pdf.image("Population.png", x=10, y=30, w=190) + + pdf.output("tuto2.pdf", "F") + + + + + + + + + +if __name__ == "__main__": + main() + + + From 374ad3abba7f245cae552a577a76543be884370e Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 18:05:10 +0200 Subject: [PATCH 08/22] add the final script to do the translation --- Final_script/Geeds.jpg | Bin 0 -> 6446 bytes Final_script/report_pdf.py | 15 +++++++-- Final_script/translation.py | 60 ++++++++++++++++-------------------- 3 files changed, 39 insertions(+), 36 deletions(-) create mode 100644 Final_script/Geeds.jpg diff --git a/Final_script/Geeds.jpg b/Final_script/Geeds.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a522e81560447a2c48606fc2a31f7be917df937b GIT binary patch literal 6446 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 literal 0 HcmV?d00001 diff --git a/Final_script/report_pdf.py b/Final_script/report_pdf.py index 45b7c90..6a452a1 100644 --- a/Final_script/report_pdf.py +++ b/Final_script/report_pdf.py @@ -2,10 +2,19 @@ from fpdf import FPDF class PDFReport(FPDF): + + def header(self): - # Add a title at the top of each page - self.set_font("Arial", "B", 12) - self.cell(0, 10, "IAMC Data Report", align="C", ln=True) + # Logo + self.image('Geeds.jpg', 10, 8, 33) + # Arial bold 15 + self.set_font('Arial', 'B', 15) + # Move to the right + self.cell(80) + # Title + self.cell(30, 10, 'Report Scenario', 1, 0, 'C') + # Line break + self.ln(20) def footer(self): # Add page number at the bottom of each page diff --git a/Final_script/translation.py b/Final_script/translation.py index cde1a60..91b27d0 100644 --- a/Final_script/translation.py +++ b/Final_script/translation.py @@ -97,10 +97,11 @@ def main(): create_folder_if_not_exists(folder_name_converted) # Check the existence of the File_To_Convert folder - folder_created_bool = os.path.isdir(folder_path + folder_name_to_convert) + folder_created_bool = os.path.isdir(os.path.join(folder_path, folder_name_to_convert)) if not folder_created_bool: print('The path to the File_To_Convert folder', folder_path + folder_name_to_convert, ' is not a directory.' ) + # Get the last upload excel file real_folder_path = os.path.join(folder_path, folder_name_to_convert) @@ -210,17 +211,16 @@ def main(): } # Open the text file containing the country dictionary to translate the country name of Wiliam to the IAMC format. - with open('../Create_Variable_Dict/country_dict.txt', 'r') as f: + with open("../Conversion-Script/Create_Variable_Dict/country_dict.txt", "r") as f: # Read the contents of the file country_dict_str = f.read() # Convert the string representation of the dictionary back to a dictionary object country_dict = ast.literal_eval(country_dict_str) - # Order the subscript of each variable and give the right region to each row scenario_variable_df = scenario_variable_df.apply( - aggregate_variable_name, args=(counter, existing_country_Wiliam_dict, country_dict), axis=1 + aggregate_variable_name, args=(counter, existing_country_Wiliam_dict, country_dict),axis=1 ) # Remove the subscript columns once they have been added at the end of the variable name @@ -228,7 +228,7 @@ def main(): scenario_variable_df.drop(columns=drop_columns_list, inplace=True) # Open the text file containing the variable dictionary to translate each variable name of Wiliam to the variable name in the IAMC format. - with open("../Create_Variable_Dict/variable_name_dict.txt", "r") as f: + with open("../Conversion-Script/Create_Variable_Dict/variable_name_dict.txt", "r") as f: # Read the contents of the file variable_name_dict_str = f.read() @@ -243,7 +243,7 @@ def main(): scenario_variable_df["Variable"] = scenario_variable_df["Variable"].apply( - replace_and_track, args=(variable_name_dict, missing_variable), axis=1 + replace_and_track, args=(variable_name_dict, missing_variable) ) # Create the path for the file containing the missing variable. @@ -296,7 +296,7 @@ def main(): try: scenario_df = pyam.IamDataFrame( os.path.join(folder_file_converted, filename) - ) + ) except: print("ERROR opening the file with results in IAMC format") exit() @@ -304,39 +304,33 @@ def main(): # 3. This defines the model and scenario used for the report args = dict(model="WILIAM", scenario=scenario) - datagg = scenario_df.aggregate_region("Population").timeseries() - - # "aggregate_region" function generates a DataFrame object instead of IamDataFrame object. We plot results with DataFrame functions - dataggtrans = datagg.transpose() - - # Generate the plot. To customize this plot, go to: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html - dataggtrans.plot(kind='line', - title="Global population", - legend=False, - ylabel="Billions of people", - xlabel="Year", - figsize=[10,5]) - plt.legend(loc=1) - plt.tight_layout() - plt.savefig('Population.png') - - print("Report's creation in process") # Create instance of FPDF class pdf = report_pdf.PDFReport() - # Add a page - pdf.add_page() - pdf.cell(0, 10, 'Figure 1: World Population Evolution', ln=True) - pdf.image("Population.png", x=10, y=30, w=190) - - pdf.output("tuto2.pdf", "F") - - - + # Plot + data = scenario_df.filter( + model=args["model"], scenario=args["scenario"], variable="Primary Energy|*" + ) + if len(data.variables)> 0: + + data.plot(color="region", title= 'Primary Energy') + data.timeseries() + plt.legend(loc=1) + plt.tight_layout() + plt.savefig('Primary_Energy.png') + + # Add a page + pdf.add_page() + pdf.cell(0, 10, "Figure 1: World Primary Energy Consumption", ln=True) + pdf.image("Primary_Energy.png", x=10, y=30, w=190) + + print("Report's creation in process") + pdf.output(scenario + "report.pdf", "F") + if __name__ == "__main__": From 27402803d9b08dc50645c68cdcc17ec3e18b76e7 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 18:49:43 +0200 Subject: [PATCH 09/22] add a translation helpers to translate new variables --- Final_script/translation_helpers.py | 243 ++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 Final_script/translation_helpers.py diff --git a/Final_script/translation_helpers.py b/Final_script/translation_helpers.py new file mode 100644 index 0000000..43fe994 --- /dev/null +++ b/Final_script/translation_helpers.py @@ -0,0 +1,243 @@ +import pandas as pd +import ast +import csv +import pprint + +# Function to move the matched string after the specific word +def move_crochets(s): + specific_word_1 = "[per capita]" + specific_word_2 = "[intensity]" + specific_word_3 = "[share]" + + if specific_word_1 in s: + index_emission = s.find(specific_word_1) + + s = ( + s[: index_emission - 1] + + s[index_emission + len(specific_word_1) :] + + specific_word_1 + ) + + if specific_word_2 in s: + index_emission = s.find(specific_word_2) + + s = ( + s[: index_emission - 1] + + s[index_emission + len(specific_word_2) :] + + "[Intensity]" + ) + + if specific_word_3 in s: + index_emission = s.find(specific_word_3) + + s = ( + s[: index_emission - 1] + + s[index_emission + len(specific_word_1) :] + + "[Share]" + ) + + return s + + + + + +# Change the format of the string to respect IAMC's format +def transform_string(s, upper_word_list, vehicule_list): + # Split the string into words + if pd.isnull(s): + return s + words = s.split("|") + + capitalized_words = [] + # Capitalize the first letter of each word + for word in words: + if word not in upper_word_list: + new_word_list = word.split("_") + new_word_list = [new_word.capitalize() for new_word in new_word_list] + capitalized_words += [" ".join(new_word_list) + "|"] + else: + new_word_list = word.split("_") + capitalized_words += [ + new_word + "|" + if new_word in vehicule_list + else new_word.capitalize() + "|" + for new_word in new_word_list + ] + + # Join the words with spaces + transformed_string = "".join(capitalized_words) + + result = "" + capitalize_next = False + # Capitalize the letter after each space + for char in transformed_string[:-1]: + if char == " " or char == "-": + capitalize_next = True + result += char + elif capitalize_next: + result += char.upper() + capitalize_next = False + else: + result += char + + return result + +def process_csv( + input_file, + IAMC_WILIAM_name_dict, + energy_dict, + rest_dict, + sectors_dict, + economy_dashboard_dict, + upper_word_list, + vehicule_list, +): + original_to_transformed = {} + + # Open the CSV file and read it line by line + with open(input_file, mode="r") as file: + csv_reader = csv.reader(file) + + for row in csv_reader: + original_string = row[0] # Get the original string + # Split the string by '|' to extract parts + parts = original_string.split("|") + + # Replace parts with dictionary values if they are keys in the dictionary + transformed_parts = [] + for part in parts: + if IAMC_WILIAM_name_dict.get(part,None): + part = IAMC_WILIAM_name_dict.get(part, None) + elif energy_dict.get(part, None): + part = energy_dict[part] + elif rest_dict.get(part, None): + part = rest_dict[part] + elif sectors_dict.get(part, None): + part = sectors_dict[part] + elif economy_dashboard_dict.get(part, None): + part = economy_dashboard_dict[part] + + + + + # Reconstruct the string with transformed parts + transformed_string = "|".join(transformed_parts) + transformed_string = move_crochets(transformed_string) + transformed_string = transformed_string(transformed_string, upper_word_list, vehicule_list) + + # Map the original string to the transformed string + original_to_transformed[original_string] = transformed_string + + return original_to_transformed + +def main(): + + # File that should be read. + csv_file_path = "missing_variable.csv" + + # Open the text file containing the energy dictionary + with open('../Create_Variable_Dict/energy_dict.txt', 'r') as f: + # Read the contents of the file + energy_dict_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + energy_dict = ast.literal_eval(energy_dict_str) + + + # Open the text file containing the rest dictionary + with open('../Create_Variable_Dict/rest_dict.txt', 'r') as f: + # Read the contents of the file + rest_dict_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + rest_dict = ast.literal_eval(rest_dict_str) + + + # Open the text file containing the sectors dictionary + with open('../Create_Variable_Dict/sectors_dict.txt', 'r') as f: + # Read the contents of the file + sectors_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + sectors_dict = ast.literal_eval(sectors_str) + + + # Open the text file containing the dictionary for the economy dashboard subscript. + with open('../Create_Variable_Dict/economy_dashboard_dict.txt', 'r') as f: + # Read the contents of the file + economy_dashboard_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + economy_dashboard_dict = ast.literal_eval(economy_dashboard_str) + + # List with the words in uppercase which will not be capitalized by the next functions + upper_word_list = [ + "CO2", + "CH4", + "N2O", + "PFC", + "SF6", + "HFC134a", + "HFC23", + "HFC32", + "HFC125", + "HFC143a", + "HFC152a", + "HFC227ea", + "HFC245ca", + "HFC43-10", + "HFC", + "w/o CCS", + "w/ CCS", + "PV", + "CSP", + "AFOLU", + "CO2eq", + "EROI", + "PV", + "CSP", + "ICE_gasoline", + "ICE_diesel", + "ICE_gas", + "ICE_LPG", + "BEV", + "PHEV", + "HEV", + "FCEV", + "EV", + "HPV", + "LMO", + "NMC622", + "NMC811", + "NCA", + "LFP", + "LDV", + "MDV", + "HDV", + "NMT", + "GDP", + "PPP", + ] + vehicule_list = ["gasoline", "gas", "diesel"] + + # Read the CSV file into a pandas DataFrame + data_name_df = pd.read_excel("../Variable_Reference/Variable_name_IAMC.xlsx") + # Create a dict with Wiliam's name as key, IAMC's name as value + IAMC_WILIAM_name_dict = data_name_df.set_index('WILIAM_variable')['IAMC_variable'].to_dict() + + translation_dict = process_csv( + csv_file_path, + IAMC_WILIAM_name_dict, + energy_dict, + rest_dict, + sectors_dict, + economy_dashboard_dict, + upper_word_list, + vehicule_list, + ) + + # Save dictionary with pprint + with open("new_variable_name_dict.txt", "w") as f: + pprint.pprint(translation_dict, f) + From edac6ca36429c551544249782baa7165ab8b9fc3 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 18:51:15 +0200 Subject: [PATCH 10/22] update the creation of the global dict --- .../translation-one-by-one/Creation_global_dict_helpers.ipynb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb b/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb index a42a94f..d64336e 100644 --- a/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb +++ b/Conversion-Script/translation-one-by-one/Creation_global_dict_helpers.ipynb @@ -508,7 +508,7 @@ " continue\n", "\n", " if not pd.isnull(subscript):\n", - " if energy_dict.get(subscript, None) is not None:\n", + " if energy_dict.get(subscript, None):\n", " subscript = energy_dict[subscript]\n", " elif rest_dict.get(subscript, None):\n", " subscript = rest_dict[subscript]\n", @@ -704,7 +704,6 @@ "# Change Secondary Energy Naming \n", "secondary_energy_rows = scenario_variable_2_df[scenario_variable_2_df['Variable'].str.contains('Secondary Energy')]\n", "\n", - "secondary_energy_rows['Variable'].iloc[0]\n", "\n", "# Change Secondary Energy Naming \n", "# Select the rows for Primary Energy Price \n", From d1aff11b7e5143f9c4f16aabf0933162c3af1a34 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 19:05:38 +0200 Subject: [PATCH 11/22] change the organization and correct bugs --- Final_script/translation.py | 4 ---- Final_script/translation_helpers.py | 34 ++++++++++++++++++----------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Final_script/translation.py b/Final_script/translation.py index 91b27d0..a21dd89 100644 --- a/Final_script/translation.py +++ b/Final_script/translation.py @@ -325,10 +325,6 @@ def main(): pdf.image("Primary_Energy.png", x=10, y=30, w=190) print("Report's creation in process") - - - - pdf.output(scenario + "report.pdf", "F") diff --git a/Final_script/translation_helpers.py b/Final_script/translation_helpers.py index 43fe994..1514903 100644 --- a/Final_script/translation_helpers.py +++ b/Final_script/translation_helpers.py @@ -43,7 +43,7 @@ def move_crochets(s): # Change the format of the string to respect IAMC's format -def transform_string(s, upper_word_list, vehicule_list): +def format_string(s, upper_word_list, vehicule_list): # Split the string into words if pd.isnull(s): return s @@ -91,7 +91,7 @@ def process_csv( sectors_dict, economy_dashboard_dict, upper_word_list, - vehicule_list, + vehicle_list, ): original_to_transformed = {} @@ -118,13 +118,16 @@ def process_csv( elif economy_dashboard_dict.get(part, None): part = economy_dashboard_dict[part] - - + transformed_parts.append(part) # Reconstruct the string with transformed parts transformed_string = "|".join(transformed_parts) + + # Move the word in the brackets at the end of the word. transformed_string = move_crochets(transformed_string) - transformed_string = transformed_string(transformed_string, upper_word_list, vehicule_list) + + # Transform the string to respect the IAMC format + transformed_string = format_string(transformed_string, upper_word_list, vehicle_list) # Map the original string to the transformed string original_to_transformed[original_string] = transformed_string @@ -137,7 +140,7 @@ def main(): csv_file_path = "missing_variable.csv" # Open the text file containing the energy dictionary - with open('../Create_Variable_Dict/energy_dict.txt', 'r') as f: + with open("../Conversion-Script/Create_Variable_Dict/energy_dict.txt", "r") as f: # Read the contents of the file energy_dict_str = f.read() @@ -146,7 +149,7 @@ def main(): # Open the text file containing the rest dictionary - with open('../Create_Variable_Dict/rest_dict.txt', 'r') as f: + with open("../Conversion-Script/Create_Variable_Dict/rest_dict.txt", "r") as f: # Read the contents of the file rest_dict_str = f.read() @@ -155,7 +158,7 @@ def main(): # Open the text file containing the sectors dictionary - with open('../Create_Variable_Dict/sectors_dict.txt', 'r') as f: + with open("../Conversion-Script/Create_Variable_Dict/sectors_dict.txt", "r") as f: # Read the contents of the file sectors_str = f.read() @@ -164,7 +167,9 @@ def main(): # Open the text file containing the dictionary for the economy dashboard subscript. - with open('../Create_Variable_Dict/economy_dashboard_dict.txt', 'r') as f: + with open( + "../Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt", "r" + ) as f: # Read the contents of the file economy_dashboard_str = f.read() @@ -219,10 +224,10 @@ def main(): "GDP", "PPP", ] - vehicule_list = ["gasoline", "gas", "diesel"] + vehicle_list = ["gasoline", "gas", "diesel"] # Read the CSV file into a pandas DataFrame - data_name_df = pd.read_excel("../Variable_Reference/Variable_name_IAMC.xlsx") + data_name_df = pd.read_excel("../Conversion-Script/Variable_Reference/Variable_name_IAMC.xlsx") # Create a dict with Wiliam's name as key, IAMC's name as value IAMC_WILIAM_name_dict = data_name_df.set_index('WILIAM_variable')['IAMC_variable'].to_dict() @@ -234,10 +239,13 @@ def main(): sectors_dict, economy_dashboard_dict, upper_word_list, - vehicule_list, + vehicle_list, ) - + print(translation_dict) # Save dictionary with pprint with open("new_variable_name_dict.txt", "w") as f: pprint.pprint(translation_dict, f) + +if __name__ == "__main__": + main() From 717fde15c3c3b47c91b48bcd25a749a34794a6ec Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Thu, 25 Jul 2024 20:11:48 +0200 Subject: [PATCH 12/22] variable name dict --- .../Create_Variable_Dict/variable_name_dict.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Conversion-Script/Create_Variable_Dict/variable_name_dict.txt diff --git a/Conversion-Script/Create_Variable_Dict/variable_name_dict.txt b/Conversion-Script/Create_Variable_Dict/variable_name_dict.txt new file mode 100644 index 0000000..3638e91 --- /dev/null +++ b/Conversion-Script/Create_Variable_Dict/variable_name_dict.txt @@ -0,0 +1,14 @@ +{ + "world_PE_by_commodity|PE_agriculture_products": "Primary Energy|Agriculture Products", + "world_PE_by_commodity|PE_coal": "Primary Energy|Coal", + "world_PE_by_commodity|PE_oil": "Primary Energy|Oil", + "world_PE_by_commodity|PE_forestry_products": "Primary Energy|Forestry Products", + "world_PE_by_commodity|PE_geothermal": "Primary Energy|Geothermal", + "world_PE_by_commodity|PE_hydropower": "Primary Energy|Hydropower", + "world_PE_by_commodity|PE_natural_gas": "Primary Energy|Natural Gas", + "world_PE_by_commodity|PE_nuclear": "Primary Energy|Nuclear", + "world_PE_by_commodity|PE_oceanic": "Primary Energy|Ocean", + "world_PE_by_commodity|PE_solar": "Primary Energy|Solar", + "world_PE_by_commodity|PE_waste": "Primary Energy|Waste", + "total_PE_by_region": "Primary Energy" +} \ No newline at end of file From 3bb1b7d63dfca22d548b224d9e03f85eb1aaff11 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Fri, 26 Jul 2024 16:00:25 +0200 Subject: [PATCH 13/22] add correction and create script to update the variable translation dict? --- Final_script/translation.py | 2 +- Final_script/translation_helpers.py | 43 +++--- Final_script/update_variable_dict.py | 191 +++++++++++++++++++++++++++ 3 files changed, 208 insertions(+), 28 deletions(-) create mode 100644 Final_script/update_variable_dict.py diff --git a/Final_script/translation.py b/Final_script/translation.py index a21dd89..1a9d6e2 100644 --- a/Final_script/translation.py +++ b/Final_script/translation.py @@ -311,7 +311,7 @@ def main(): data = scenario_df.filter( model=args["model"], scenario=args["scenario"], variable="Primary Energy|*" ) - if len(data.variables)> 0: + if len(data.variable)> 0: data.plot(color="region", title= 'Primary Energy') data.timeseries() diff --git a/Final_script/translation_helpers.py b/Final_script/translation_helpers.py index 1514903..e779f3a 100644 --- a/Final_script/translation_helpers.py +++ b/Final_script/translation_helpers.py @@ -134,47 +134,36 @@ def process_csv( return original_to_transformed +def open_dict(dict_filename): + # Open the text file containing the dictionary + with open("../Conversion-Script/Create_Variable_Dict/" + dict_filename, "r") as f: + # Read the contents of the file + read_dict_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + read_dict = ast.literal_eval(read_dict_str) + return read_dict + + def main(): # File that should be read. csv_file_path = "missing_variable.csv" # Open the text file containing the energy dictionary - with open("../Conversion-Script/Create_Variable_Dict/energy_dict.txt", "r") as f: - # Read the contents of the file - energy_dict_str = f.read() - - # Convert the string representation of the dictionary back to a dictionary object - energy_dict = ast.literal_eval(energy_dict_str) + energy_dict = open_dict("energy_dict.txt") # Open the text file containing the rest dictionary - with open("../Conversion-Script/Create_Variable_Dict/rest_dict.txt", "r") as f: - # Read the contents of the file - rest_dict_str = f.read() - - # Convert the string representation of the dictionary back to a dictionary object - rest_dict = ast.literal_eval(rest_dict_str) + rest_dict = open_dict("rest_dict.txt") # Open the text file containing the sectors dictionary - with open("../Conversion-Script/Create_Variable_Dict/sectors_dict.txt", "r") as f: - # Read the contents of the file - sectors_str = f.read() - - # Convert the string representation of the dictionary back to a dictionary object - sectors_dict = ast.literal_eval(sectors_str) + sectors_dict = open_dict("sectors_dict.txt") # Open the text file containing the dictionary for the economy dashboard subscript. - with open( - "../Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt", "r" - ) as f: - # Read the contents of the file - economy_dashboard_str = f.read() - - # Convert the string representation of the dictionary back to a dictionary object - economy_dashboard_dict = ast.literal_eval(economy_dashboard_str) + economy_dashboard_dict = open_dict("economy_dashboard.txt") # List with the words in uppercase which will not be capitalized by the next functions upper_word_list = [ @@ -241,7 +230,7 @@ def main(): upper_word_list, vehicle_list, ) - print(translation_dict) + # Save dictionary with pprint with open("new_variable_name_dict.txt", "w") as f: pprint.pprint(translation_dict, f) diff --git a/Final_script/update_variable_dict.py b/Final_script/update_variable_dict.py new file mode 100644 index 0000000..645cbe8 --- /dev/null +++ b/Final_script/update_variable_dict.py @@ -0,0 +1,191 @@ +import pprint +import ast + +def check_brackets(s): + """ + Checks that a string contains no hook or has a balanced pair of one open + and one close hook, with the close hook being the last character if present. + """ + # Count occurrences of open and close hook + open_bracket_count = s.count("[") + close_bracket_count = s.count("]") + + # Check if the string contains no hook + if open_bracket_count == 0 and close_bracket_count == 0: + return True + + # Check for exactly one pair of hook and proper placement + if open_bracket_count == 1 and close_bracket_count == 1: + # Ensure that the close hook is the last character + if s.endswith("]") and " [" in s: + if "[ " not in s and " ]" not in s: + return True + else: + print("A space should not be presented after the opening hook and before the closing hook: ", s) + return False + else: + print("The string does not finished by a closing hook or needs a supplementary space: ", s) + return False + print("The number of crochets is greater than the maximum number of crochets or the position of them are not good in the following string: ", s) + return False + +def is_valid_string(s): + """ + Checks that the string contains only spaces, letters, digits, or pipes. + """ + valid_string_bool = True + for char in s: + if not (char.isalnum() or char in " |[]"): + print('This character is not authorized in the IAMC Format: ', char) + valid_string_bool = False + # Check for spaces before or after each pipe + if " |" in s or "| " in s: + print('There is some unusual space before or after a pipe in the following string: ', s) + valid_string_bool = False + + # Check double space in the string. + if " " in s: + print("There is some double space: ", s) + valid_string_bool = False + + # Check the bracket conditions + if not check_brackets(s): + valid_string_bool = False + + # Check that the string is not finishing by a space. + if s.endswith(" "): + print("The string should not finished by a space: ", s) + valid_string_bool = False + + return valid_string_bool + +def remove_bracketed_parts(s): + """ + Removes all substrings enclosed in square brackets from the input string. + + This function iterates over the input string and removes any part of the string + that is enclosed within square brackets, including the brackets themselves. + """ + result = [] + inside_brackets = False + + for char in s: + if char == "[": + inside_brackets = True + elif char == "]": + inside_brackets = False + elif not inside_brackets: + result.append(char) + + return "".join(result) + + +def check_capitalization(words, conjunctions): + """ + Checks that each word is capitalized unless it is a conjunction. + """ + valid_capitalization_bool = True + for word in words: + if word.lower() in conjunctions: + if word != word.lower(): + print("This word should be in lowercase: ", word) + valid_capitalization_bool = False + else: + if word != word.capitalize(): + print("This word should be capitalized: ", word) + valid_capitalization_bool = False + return valid_capitalization_bool + + +def process_dictionary(data_dict): + """ + Checks and processes the values in a dictionary. + """ + # List of conjunctions and words that should not be capitalized + conjunctions = {"and", "or", "nor", "but", "so", "for", "yet", "of", "w/", "w/o"} + correct_format_bool = True + for key, value in data_dict.items(): + if isinstance(value, str): + # Check if the string contains only valid characters + if not is_valid_string(value): + print( + f"The value associated with key '{key}' is not following IAMC format rules." + ) + correct_format_bool = False + + + + # Split the string into words using spaces and pipes as separators + value = remove_bracketed_parts(value) + words = value.split() + split_words = [] + for word in words: + split_words.extend(word.split("|")) + + # Check the capitalization of words + if not check_capitalization(split_words, conjunctions): + print( + f"The value associated with key '{key}' does not have all words written properly." + ) + correct_format_bool = False + + return correct_format_bool + + +def open_dict(dict_path): + # Open the text file containing the dictionary + with open(dict_path, "r") as f: + # Read the contents of the file + read_dict_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + read_dict = ast.literal_eval(read_dict_str) + return read_dict + +def check_and_merge_dicts(dict1, dict2): + # Find overlapping keys + overlapping_keys = set(dict1.keys()) & set(dict2.keys()) + + # Check if there are any differences in the overlapping keys + for key in overlapping_keys: + if dict1[key] != dict2[key]: + print(f"Conflict found for key '{key}':") + print(f" - Dict1 has {dict1[key]}") + print(f" - Dict2 has {dict2[key]}") + return None # Return None if there's a conflict + + # Merge the dictionaries if there are no conflicts + merged_dict = dict1.copy() # Start with a copy of the first dictionary + merged_dict.update(dict2) # Update it with the second dictionary + return merged_dict + +def write_dict(dict_path, name_dict): + # Save dictionary with pprint + with open(dict_path, 'w') as f: + pprint.pprint( name_dict, f) + +def main(): + # Read the dict file that contain the update of the translation dict + new_variable_dict = open_dict('new_variable_name_dict.txt') + + # Check the format of the new variable to translate + correct_foramt_bool = process_dictionary(new_variable_dict) + if not correct_foramt_bool: + exit() + + current_variable_translation_dict_path = ( + "../Conversion-Script/Create_Variable_Dict/variable_name_dict.txt" + ) + # Read the current dictionary of translation variable + current_variable_translation_dict = open_dict(current_variable_translation_dict_path) + + updated_variable_translation_dict = check_and_merge_dicts(new_variable_dict, current_variable_translation_dict) + + if updated_variable_translation_dict: + write_dict( + current_variable_translation_dict_path, updated_variable_translation_dict + ) + print("Update of the translation dictionary done.") + +if __name__ == "__main__": + main() From 21c6cf2f1a424b4360bc7ba2ca1ef42bee272728 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Fri, 26 Jul 2024 16:27:37 +0200 Subject: [PATCH 14/22] add the correction in the translation process --- Final_script/translation.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Final_script/translation.py b/Final_script/translation.py index 1a9d6e2..ca21b67 100644 --- a/Final_script/translation.py +++ b/Final_script/translation.py @@ -48,7 +48,7 @@ def create_folder_if_not_exists(folder_name): # Aggregate the subscripts at the end of the variable -def aggregate_variable_name(row, counter, existing_country_Wiliam_dict, country_dict): +def aggregate_subscript_variable_name(row, counter, existing_country_Wiliam_dict, country_dict): for k in range(counter): subscript = row["Subscript " + str(k)] @@ -220,7 +220,7 @@ def main(): # Order the subscript of each variable and give the right region to each row scenario_variable_df = scenario_variable_df.apply( - aggregate_variable_name, args=(counter, existing_country_Wiliam_dict, country_dict),axis=1 + aggregate_subscript_variable_name, args=(counter, existing_country_Wiliam_dict, country_dict),axis=1 ) # Remove the subscript columns once they have been added at the end of the variable name @@ -235,13 +235,11 @@ def main(): # Convert the string representation of the dictionary back to a dictionary object variable_name_dict = ast.literal_eval(variable_name_dict_str) - # Convert all the variable name to the IAMC format and get the variable with a missing translation. + # Convert all the variable name to the IAMC format and get the variables with a missing translation. # Create the list of missing variable. missing_variable = [] # Apply the function to the DataFrame column - - scenario_variable_df["Variable"] = scenario_variable_df["Variable"].apply( replace_and_track, args=(variable_name_dict, missing_variable) ) @@ -264,18 +262,19 @@ def main(): + splited_filename_with_extension[1] ) - # Remove duplicate rows - # scenario_variable_df.drop_duplicates(subset=['Region', 'Variable'],inplace=True) - #scenario_variable_df.drop_duplicates(subset=["Region", "Variable", "Unit"], inplace=True) - # Check for duplicate rows - duplicate_rows = scenario_variable_df[scenario_variable_df.duplicated(subset=["Region", "Variable", "Unit"])] + duplicate_rows = scenario_variable_df[ + scenario_variable_df.duplicated(subset=["Region", "Variable", "Unit"]) + ] # Count the number of duplicate rows. Normally we should find zero duplicates. num_duplicate_rows = duplicate_rows.shape[0] - if num_duplicate_rows > 0: + if num_duplicate_rows > 0: print("Number of Duplicate Rows:", num_duplicate_rows) + # Remove duplicate rows + scenario_variable_df.drop_duplicates(subset=["Region", "Variable", "Unit"], inplace=True) + # Write the following dataframe to excel if ( splited_filename_with_extension[1] == ".xls" From 332285b18debab6fc197b843415cc4e6181c62a3 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Sat, 27 Jul 2024 12:53:03 +0200 Subject: [PATCH 15/22] add aggregation in the translation file --- Final_script/translation.py | 55 +++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/Final_script/translation.py b/Final_script/translation.py index ca21b67..5f5fddf 100644 --- a/Final_script/translation.py +++ b/Final_script/translation.py @@ -73,6 +73,44 @@ def replace_and_track(value, variable_name_dict,missing_variable): missing_variable.append(value) return value +# Function to create the aggregations of each row +def aggregate_rows(df, aggregations): + # List of new rows + new_rows = [] + # Get the list of all regions + regions = df['Region'].unique() + + for region in regions: + # Filter the dataframe on the actual region + df_region = df[df['Region'] == region] + for names, new_name in aggregations.items(): + # Check if all the names are present + if all(name in df_region["Variable"].values for name in names): + # Filter the dataframe with the names of interest + df_subset = df_region[df_region["Variable"].isin(names)] + + # Compute the sum of the aggregation of the value + summed_values = df_subset.drop(columns=["Variable", "Unit", "Model", "Scenario", "Region"]).sum() + + # Create the new aggreagted rows + new_row = { + "Model": df_subset["Model"].iloc[0], + "Scenario": df_subset["Scenario"].iloc[0], + "Region": region, + "Variable": new_name, + "Unit": df_subset["Unit"].iloc[0], + ** summed_values.to_dict(), + } + new_rows.append(new_row) + + # Create a dataframe with the new rows + new_df = pd.DataFrame(new_rows) + + # Concatenate the two dataframe to get the aggregated rows + df_final = pd.concat([df, new_df], ignore_index=True) + + return df_final + def main(): # Parse the argument put in the command line. @@ -116,7 +154,7 @@ def main(): # Get the correct naming for the converted file filename_with_extension = os.path.basename(last_file) splited_filename_with_extension = os.path.splitext(filename_with_extension) - print(splited_filename_with_extension) + filename = ( splited_filename_with_extension[0] + "converted" @@ -227,8 +265,21 @@ def main(): drop_columns_list = ["Subscript " + str(k) for k in range(counter)] scenario_variable_df.drop(columns=drop_columns_list, inplace=True) + # Open the text file containing the aggregation dictionary . + with open("../Conversion-Script/Create_Variable_Dict/aggregation.txt", "r") as f: + # Read the contents of the file + aggregation_dict_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + aggregation_dict = ast.literal_eval(aggregation_dict_str) + + # Create the aggregations rows in the dataframe. + scenario_variable_df = aggregate_rows(scenario_variable_df, aggregation_dict) + # Open the text file containing the variable dictionary to translate each variable name of Wiliam to the variable name in the IAMC format. - with open("../Conversion-Script/Create_Variable_Dict/variable_name_dict.txt", "r") as f: + with open( + "../Conversion-Script/Create_Variable_Dict/variable_name_dict.txt", "r" + ) as f: # Read the contents of the file variable_name_dict_str = f.read() From 9eaf5e13f1bcc09f5f6d03aa86e53b74e6697e0f Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Sat, 27 Jul 2024 12:56:04 +0200 Subject: [PATCH 16/22] create the dictionary for the subcript --- .../Create_Variable_Dict/aggregation.txt | 4 + .../Create_Variable_Dict/land_dict.txt | 9 ++ .../transport_mode_dict.txt | 9 ++ .../Create_Variable_Dict/variable_dict.ipynb | 96 +++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 Conversion-Script/Create_Variable_Dict/aggregation.txt create mode 100644 Conversion-Script/Create_Variable_Dict/land_dict.txt create mode 100644 Conversion-Script/Create_Variable_Dict/transport_mode_dict.txt diff --git a/Conversion-Script/Create_Variable_Dict/aggregation.txt b/Conversion-Script/Create_Variable_Dict/aggregation.txt new file mode 100644 index 0000000..23f974c --- /dev/null +++ b/Conversion-Script/Create_Variable_Dict/aggregation.txt @@ -0,0 +1,4 @@ +{ + ('world_PE_by_commodity|PE_waste', 'world_PE_by_commodity|PE_solar'): 'Primary Energy|New', + ('C', 'D', 'E'): 'Y' +} \ No newline at end of file diff --git a/Conversion-Script/Create_Variable_Dict/land_dict.txt b/Conversion-Script/Create_Variable_Dict/land_dict.txt new file mode 100644 index 0000000..89db41f --- /dev/null +++ b/Conversion-Script/Create_Variable_Dict/land_dict.txt @@ -0,0 +1,9 @@ +{'CROPLAND IRRIGATED': 'Cropland|IrrigatedForest|Managed', + 'CROPLAND RAINFED': 'Cropland|Rainfed', + 'FOREST MANAGED': 'Forest|Natural Forest', + 'FOREST PLANTATIONS': 'Shrubland', + 'FOREST PRIMARY': 'Forest|Forestry|Harvested Area', + 'GRASSLAND': 'Water Ecosystems|WetlandsBuilt-up Area', + 'SHRUBLAND': 'Grassland', + 'URBAN LAND': 'Snow and Ice Land', + 'WETLAND': 'Built-up Area|Solar'} diff --git a/Conversion-Script/Create_Variable_Dict/transport_mode_dict.txt b/Conversion-Script/Create_Variable_Dict/transport_mode_dict.txt new file mode 100644 index 0000000..2e53ad6 --- /dev/null +++ b/Conversion-Script/Create_Variable_Dict/transport_mode_dict.txt @@ -0,0 +1,9 @@ +{'AIR DOMESTIC': 'European Aviation', + 'AIR INTERNATIONAL': 'NavigationBicycling and Walking', + 'AIR INTRA EU': 'International Aviation', + 'BUS': 'Bus', + 'HDV': 'High Duty Vehicle', + 'LDV': 'Light Duty Vehicle', + 'MDV': 'Medium Duty Vehicle', + 'MOTORCYCLES 2W 3W': '2W and 3W', + 'RAIL': 'RailDomestic Aviation'} diff --git a/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb b/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb index a4fe54a..c23308a 100644 --- a/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb +++ b/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb @@ -777,6 +777,102 @@ "with open('economy_dashboard_dict.txt', 'w') as f:\n", " pprint.pprint(economy_dashboard_dict, f)" ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Land Dict\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "land_types = [\n", + " \"CROPLAND RAINFED\",\n", + " \"CROPLAND IRRIGATED\",\n", + " \"FOREST MANAGED\",\n", + " \"FOREST PRIMARY\",\n", + " \"FOREST PLANTATIONS\",\n", + " \"SHRUBLAND\",\n", + " \"GRASSLAND\",\n", + " \"WETLAND\",\n", + " \"URBAN LAND\",\n", + " \"SOLAR LAND\",\n", + " \"SNOW ICE WATERBODIES\",\n", + " \"OTHER LAND\"\n", + "]\n", + "\n", + "new_land_types = [\n", + " \"Cropland|Rainfed\",\n", + " \"Cropland|Irrigated\"\n", + " \"Forest|Managed\",\n", + " \"Forest|Natural Forest\",\n", + " \"Forest|Forestry|Harvested Area\",\n", + " \"Shrubland\",\n", + " \"Grassland\",\n", + " \"Water Ecosystems|Wetlands\"\n", + " \"Built-up Area\",\n", + " \"Built-up Area|Solar\",\n", + " \"Snow and Ice Land\"\n", + "]\n", + "\n", + "\n", + "land_dict = dict(zip(land_types, new_land_types))\n", + "# Save dictionary with pprint\n", + "with open('land_dict.txt', 'w') as f:\n", + " pprint.pprint(land_dict, f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Transport Mode Dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "transportation_categories = [\n", + " \"LDV\", # Light-Duty Vehicles\n", + " \"MDV\", # Medium-Duty Vehicles\n", + " \"HDV\", # Heavy-Duty Vehicles\n", + " \"BUS\", # Buses\n", + " \"MOTORCYCLES 2W 3W\", # Motorcycles, 2/3 Wheels\n", + " \"RAIL\", # Rail transport\n", + " \"AIR DOMESTIC\", # Domestic Air transport\n", + " \"AIR INTRA EU\", # Intra-European Union Air transport\n", + " \"AIR INTERNATIONAL\", # International Air transport\n", + " \"MARINE\", # Marine transport\n", + " \"NMT\" # Non-Motorized Transport\n", + "]\n", + "\n", + "new_transport_categories = [\n", + " \"Light Duty Vehicle\",\n", + " \"Medium Duty Vehicle\", \n", + " \"High Duty Vehicle\",\n", + " \"Bus\",\n", + " \"2W and 3W\",\n", + " \"Rail\"\n", + " \"Domestic Aviation\", \n", + " \"European Aviation\", \n", + " \"International Aviation\",\n", + " \"Navigation\"\n", + " \"Bicycling and Walking\"\n", + "]\n", + "\n", + "transport_mode_dict = dict(zip(transportation_categories, new_transport_categories))\n", + "# Save dictionary with pprint\n", + "with open('transport_mode_dict.txt', 'w') as f:\n", + " pprint.pprint(transport_mode_dict, f)" + ] } ], "metadata": { From 48eaa5291f2887124287fb1f032f9b89c72ebfea Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Sat, 27 Jul 2024 15:07:14 +0200 Subject: [PATCH 17/22] update report --- Visualization/Report.ipynb | 1085 +----------------------------------- 1 file changed, 15 insertions(+), 1070 deletions(-) diff --git a/Visualization/Report.ipynb b/Visualization/Report.ipynb index ebc65fe..c7d465f 100644 --- a/Visualization/Report.ipynb +++ b/Visualization/Report.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -38,19 +38,9 @@ }, { "cell_type": "code", - "execution_count": 134, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO] 20:33:43 - pyam.core: Reading file ..\\Conversion-Script\\File_Converted\\Baseline no policies no CO2taxconverted.csv\n", - "c:\\Users\\34670\\.conda\\envs\\wiliamcformat\\Lib\\site-packages\\pyam\\utils.py:318: FutureWarning: The previous implementation of stack is deprecated and will be removed in a future version of pandas. See the What's New notes for pandas 2.1.0 for details. Specify future_stack=True to adopt the new implementation and silence this warning.\n", - " .stack(dropna=True)\n" - ] - } - ], + "outputs": [], "source": [ "# 1. path to the results file (in IAMC format)\n", "path = \"..\\\\Conversion-Script\\\\File_Converted\\\\\"\n", @@ -78,20 +68,9 @@ }, { "cell_type": "code", - "execution_count": 135, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAHUCAYAAAANwniNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABoCklEQVR4nO3dd3gU5cLG4WfTQxokkAaBBKSHHqQIgqJIFRVFAamKgA3xcA5yPhs27OIRPViooghIESyIUgVCCb3X0BNCAul9d74/kBwjkEDYMCm/+7r2wszOzj6b1yT77My8YzEMwxAAAAAA4KoczA4AAAAAACUdxQkAAAAACkFxAgAAAIBCUJwAAAAAoBAUJwAAAAAoBMUJAAAAAApBcQIAAACAQlCcAAAAAKAQFCcAAAAAKATFCQDKuJ07d+qxxx5TrVq15O7uLnd3d9WuXVvDhw9XVFRUvnVfffVVWSyWIj1Px44dFR4ebo/I+bbZsWNHu27TTKGhoRo8eHCRHvvWW29p0aJFly1ftWqVLBaLVq1adUPZAAAFozgBQBn2+eefq0WLFtq4caNGjRqlH3/8UT/99JOee+457dmzRy1bttSRI0fMjolrcLXi1Lx5c0VGRqp58+Y3PxQAlCNOZgcAABSPdevW6cknn1T37t31/fffy8XFJe++O++8U0899ZTmzZsnd3d3E1PiRnl7e6t169ZmxwCAMo89TgBQRr311ltydHTU559/nq80/dVDDz2k4ODgArdjs9n07rvvql69enJ1dZW/v78GDhyoU6dOXXH9P/74Q61bt5a7u7uqVq2ql156SVarNd8648ePV6tWreTr6ytvb281b95cU6ZMkWEYRXqtoaGh6tGjhxYuXKjGjRvLzc1NNWvW1H/+85/L1j1x4oQeffRR+fv7y9XVVfXr19cHH3wgm82Wt86xY8dksVj07rvv6s0331T16tXl5uamiIgILV++PN/2Bg8erNDQ0Mue51oOe8zMzNQ//vEPNW3aVD4+PvL19VWbNm30ww8/5FvPYrEoLS1NM2bMkMVikcViyTuE8WqH6i1evFht2rRRhQoV5OXlpbvvvluRkZFXzLhnzx717dtXPj4+CggI0NChQ5WUlFRgdgAobyhOAFAGWa1WrVy5UhEREQoKCrqhbY0cOVJjx47V3XffrcWLF+v111/X0qVL1bZtW8XHx+dbNzY2Vo888oj69++vH374QQ8++KDeeOMNjRo1Kt96x44d0/DhwzV37lwtWLBADzzwgJ555hm9/vrrRc65fft2Pffccxo9erQWLlyotm3batSoUXr//ffz1jl37pzatm2rZcuW6fXXX9fixYt11113acyYMXr66acv2+akSZO0dOlSTZw4UbNmzZKDg4O6du16WQEpqqysLJ0/f15jxozRokWLNHv2bLVr104PPPCAZs6cmbdeZGSk3N3d1a1bN0VGRioyMlKfffbZVbf77bffqlevXvL29tbs2bM1ZcoUXbhwQR07dtTatWsvW793796qU6eO5s+frxdeeEHffvutRo8ebZfXCABlhgEAKHNiY2MNScYjjzxy2X25ublGTk5O3s1ms+Xd98orrxh//dOwb98+Q5Lx5JNP5tvGxo0bDUnGv//977xlHTp0MCQZP/zwQ751hw0bZjg4OBjHjx+/Ylar1Wrk5OQYr732muHn55cvT4cOHYwOHToU+npr1KhhWCwWY/v27fmW33333Ya3t7eRlpZmGIZhvPDCC4YkY+PGjfnWGzlypGGxWIwDBw4YhmEY0dHRhiQjODjYyMjIyFsvOTnZ8PX1Ne666668ZYMGDTJq1KhxWaa/fy8v5Rw0aNBVX8elsXnssceMZs2a5bvPw8Pjio9duXKlIclYuXKlYRgXv5/BwcFGo0aNDKvVmrdeSkqK4e/vb7Rt2/ayjO+++26+bT755JOGm5tbvrEAgPKuXO9xWrNmjXr27Kng4GBZLJYrnnRbmLlz56pp06aqUKGCatSooffee8/+QQHAjlq0aCFnZ+e82wcffHDVdVeuXClJl80Ed+utt6p+/fqXHbbm5eWle++9N9+yfv36yWazac2aNXnLVqxYobvuuks+Pj5ydHSUs7OzXn75ZSUkJCguLq5Ir6thw4Zq0qTJZc+dnJysrVu35j1vgwYNdOutt+Zbb/DgwTIMQytWrMi3/IEHHpCbm1u+19ezZ0+tWbPmssMPi2revHm67bbb5OnpKScnJzk7O2vKlCnat29fkbZ34MABnTlzRgMGDJCDw//+zHt6eqp3797asGGD0tPT8z3m72PWuHFjZWZmFnksAKAsKtfFKS0tTU2aNNGkSZOK9PhffvlF/fv314gRI7R792599tln+vDDD4u8PQCwl8qVK8vd3V3Hjx+/7L5vv/1W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cbLXmO3YscOQZBw+fNgwDMasuNzIeG3fvt2oVq2aERMTc1lxYryKT1HHrEOHDsaoUaOuul3GrHgUdbxatWplvPjii1fdLuNVPOz1N6xp06bG0KFD874uaePFoXq4JpcO1/L19ZUkRUdHKzY2Vp07d85bx9XVVR06dND69euvebuRkZHy8fFRq1at8pa1bt1aPj4+17Ud5Gev8UpKSpK3t7ecnJwkMV7FyR5jlpaWpmnTpiksLEwhISGSGLPiUtTxSk9PV9++fTVp0iQFBgZetl3Gq/jcyM/YN998o8qVK6thw4YaM2aMUlJS8u5jzIpHUcYrLi5OGzdulL+/v9q2bauAgAB16NBBa9euzXsM41U87PE3bMuWLdq+fbsee+yxvGUlbbwoTiiUYRh6/vnn1a5dO4WHh0uSYmNjJUkBAQH51g0ICMi771rExsbK39//suX+/v7XtR38j73GKyEhQa+//rqGDx+et4zxKh43OmafffaZPD095enpqaVLl+q3336Ti4tL3nYYM/u6kfEaPXq02rZtq169el1x24xX8biRMevfv79mz56tVatW6aWXXtL8+fP1wAMP5N3PmNlfUcfr6NGjkqRXX31Vw4YN09KlS9W8eXN16tRJhw4dytsO42Vf9nrfMWXKFNWvX19t27bNW1bSxsvppj8jSp2nn35aO3fuzPeJzSUWiyXf14ZhXLasMFdavyjbwUX2GK/k5GR1795dDRo00CuvvFLgNgraDq7NjY5Z//79dffddysmJkbvv/+++vTpo3Xr1snNze2K27jadnBtijpeixcv1ooVK7Rt27YCt8942d+N/IwNGzYs77/Dw8NVu3ZtRUREaOvWrWrevPkVt3Gl7eDaFXW8bDabpIuT5gwZMkSS1KxZMy1fvlxTp07VhAkTrriNv28H18ce7zsyMjL07bff6qWXXip0GwVtp7ixxwkFeuaZZ7R48WKtXLlS1apVy1t+6RCTv7f9uLi4yz5dKEhgYKDOnj172fJz585d13ZwkT3GKyUlRV26dJGnp6cWLlwoZ2fnfNthvOzLHmPm4+Oj2rVr6/bbb9f333+v/fv3a+HChXnbYczs50bGa8WKFTpy5IgqVqwoJyenvENge/furY4dO+Zth/GyL3v/HWvevLmcnZ3z9mAwZvZ1I+MVFBQkSWrQoEG+derXr68TJ07kbYfxsh97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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Aggregate all the regional populations\n", "#data = df.aggregate_region(\"Population\").timeseries()\n", @@ -102,13 +81,14 @@ "dataggtrans = datagg.transpose()\n", "\n", "# Generate the plot. To customize this plot, go to: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html\n", - "plot = dataggtrans.plot(kind='line',\n", + "dataggtrans.plot(kind='line',\n", " title=\"Global population\",\n", " legend=False,\n", " ylabel=\"people\",\n", " xlabel=\"Year\",\n", " figsize=[10,5])\n", - "\n" + "\n", + "plt.savefig('Population.png')" ] }, { @@ -122,20 +102,9 @@ }, { "cell_type": "code", - "execution_count": 140, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "data = df.filter(**args, variable=\"Primary Energy\", year=2050)\n", "\n", @@ -154,1000 +123,9 @@ }, { "cell_type": "code", - "execution_count": 154, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "c:\\Users\\34670\\.conda\\envs\\wiliamcformat\\Lib\\site-packages\\pyam\\figures.py:58: FutureWarning:\n", - "\n", - "Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - "\n" - ] - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "plotlyServerURL": "https://plot.ly" - }, - "data": [ - { - "link": { - "hovertemplate": "\"%{source.label}\" to \"%{target.label}\": %{value}", - "source": [ - 0, - 6, - 10, - 20, - 3, - 6, - 1, - 8, - 6, - 11, - 19, - 18, - 13, - 15, - 20, - 2, - 2, - 21, - 21, - 9, - 16, - 5, - 5, - 5, - 12, - 12, - 12, - 12, - 4, - 4, - 18, - 18 - ], - "target": [ - 12, - 12, - 12, - 17, - 2, - 13, - 9, - 16, - 21, - 5, - 4, - 14, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7, - 7 - ], - "value": [ - 0.118625, - 82.5054, - 11.7219, - 0.647644, - 4.88205, - 11.3326, - 11.2732, - 0.00000895725, - 28.5645, - 5.17917, - 0.12852, - 4.05397, - 0, - 4.61141, - 0.64425, - 4.25786, - 0.624191, - 0, - 0.000334759, - 3.75599, - 0.00000895725, - 0.000427612, - 4.46034, - 0.718402, - 0, - 1.55532, - 0, - 10.7275, - 0, - 0.0261382, - 1.71997, - 2.334 - ] - }, - "node": { - "color": "blue", - "hovertemplate": "%{label}: %{value}", - "label": [ - "Agriculture", - "Uranium", - "Hydro", - "Hydropower dams", - "Waste", - "Solar", - "Fossil", - "Power Grid", - "Sea", - "Nuclear", - "Forestry", - "Sun", - "Solids", - "Gas fuels", - "Wind plants", - "Gases wothout CCS", - "Ocean", - "Geothermal plants", - "Wind", - "Cities", - "Geothermal", - "Liquids" - ], - "line": { - "color": "black", - "width": 0.5 - }, - "pad": 15, - "thickness": 10 - }, - "type": "sankey", - "valuesuffix": "EJ/yr" - } - ], - "layout": { - "font": { - "size": 10 - }, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "fillpattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - }, - "title": { - "text": "region: China, year: 2050" - } - } - } - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "sankey_mapping = {\n", " \"Primary Energy|Agriculture Products\": (\"Agriculture\", \"Solids\"),\n", @@ -1193,42 +171,9 @@ }, { "cell_type": "code", - "execution_count": 141, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Completions: Primary Energy\n", - "Primary Energy|Agriculture Products\n", - "Primary Energy|Agriculture Products|Per Capita\n", - "Primary Energy|Coal\n", - "Primary Energy|Coal|Per Capita\n", - "Primary Energy|Forestry Products\n", - "Primary Energy|Forestry Products|Per Capita\n", - "Primary Energy|Geothermal\n", - "Primary Energy|Geothermal|Per Capita\n", - "Primary Energy|Hydropower\n", - "Primary Energy|Hydropower|Per Capita\n", - "Primary Energy|Natural Gas\n", - "Primary Energy|Natural Gas|Per Capita\n", - "Primary Energy|Nuclear\n", - "Primary Energy|Nuclear|Per Capita\n", - "Primary Energy|Ocean\n", - "Primary Energy|Ocean|Per Capita\n", - "Primary Energy|Oil\n", - "Primary Energy|Oil|Per Capita\n", - "Primary Energy|Renewable|Share\n", - "Primary Energy|Solar\n", - "Primary Energy|Solar|Per Capita\n", - "Primary Energy|Waste\n", - "Primary Energy|Waste|Per Capita\n", - "Primary Energy|Wind\n", - "Primary Energy|Wind|Per Capita\n" - ] - } - ], + "outputs": [], "source": [ "# Import the library to efficiently search variables\n", "import triesearching\n", @@ -1261,7 +206,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.10.14" } }, "nbformat": 4, From 0b26c53196d06182d84638a19d1d4386df756b8b Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Sat, 27 Jul 2024 16:14:00 +0200 Subject: [PATCH 18/22] change to direct translation of missing variables --- Final_script/translation_helpers.py | 89 +++++++++++++---------------- 1 file changed, 41 insertions(+), 48 deletions(-) diff --git a/Final_script/translation_helpers.py b/Final_script/translation_helpers.py index e779f3a..ec28673 100644 --- a/Final_script/translation_helpers.py +++ b/Final_script/translation_helpers.py @@ -83,8 +83,8 @@ def format_string(s, upper_word_list, vehicule_list): return result -def process_csv( - input_file, +def process_list( + missing_variable_list, IAMC_WILIAM_name_dict, energy_dict, rest_dict, @@ -95,42 +95,40 @@ def process_csv( ): original_to_transformed = {} - # Open the CSV file and read it line by line - with open(input_file, mode="r") as file: - csv_reader = csv.reader(file) - - for row in csv_reader: - original_string = row[0] # Get the original string - # Split the string by '|' to extract parts - parts = original_string.split("|") - - # Replace parts with dictionary values if they are keys in the dictionary - transformed_parts = [] - for part in parts: - if IAMC_WILIAM_name_dict.get(part,None): - part = IAMC_WILIAM_name_dict.get(part, None) - elif energy_dict.get(part, None): - part = energy_dict[part] - elif rest_dict.get(part, None): - part = rest_dict[part] - elif sectors_dict.get(part, None): - part = sectors_dict[part] - elif economy_dashboard_dict.get(part, None): - part = economy_dashboard_dict[part] - - transformed_parts.append(part) - - # Reconstruct the string with transformed parts - transformed_string = "|".join(transformed_parts) - - # Move the word in the brackets at the end of the word. - transformed_string = move_crochets(transformed_string) - - # Transform the string to respect the IAMC format - transformed_string = format_string(transformed_string, upper_word_list, vehicle_list) - - # Map the original string to the transformed string - original_to_transformed[original_string] = transformed_string + + + for row in missing_variable_list: + original_string = row[0] # Get the original string + # Split the string by '|' to extract parts + parts = original_string.split("|") + + # Replace parts with dictionary values if they are keys in the dictionary + transformed_parts = [] + for part in parts: + if IAMC_WILIAM_name_dict.get(part,None): + part = IAMC_WILIAM_name_dict.get(part, None) + elif energy_dict.get(part, None): + part = energy_dict[part] + elif rest_dict.get(part, None): + part = rest_dict[part] + elif sectors_dict.get(part, None): + part = sectors_dict[part] + elif economy_dashboard_dict.get(part, None): + part = economy_dashboard_dict[part] + + transformed_parts.append(part) + + # Reconstruct the string with transformed parts + transformed_string = "|".join(transformed_parts) + + # Move the word in the brackets at the end of the word. + transformed_string = move_crochets(transformed_string) + + # Transform the string to respect the IAMC format + transformed_string = format_string(transformed_string, upper_word_list, vehicle_list) + + # Map the original string to the transformed string + original_to_transformed[original_string] = transformed_string return original_to_transformed @@ -145,10 +143,8 @@ def open_dict(dict_filename): return read_dict -def main(): - - # File that should be read. - csv_file_path = "missing_variable.csv" +def create_automatic_translation(missing_variable_list): + # Open the text file containing the energy dictionary energy_dict = open_dict("energy_dict.txt") @@ -163,7 +159,7 @@ def main(): # Open the text file containing the dictionary for the economy dashboard subscript. - economy_dashboard_dict = open_dict("economy_dashboard.txt") + economy_dashboard_dict = open_dict("economy_dashboard_dict.txt") # List with the words in uppercase which will not be capitalized by the next functions upper_word_list = [ @@ -220,8 +216,8 @@ def main(): # Create a dict with Wiliam's name as key, IAMC's name as value IAMC_WILIAM_name_dict = data_name_df.set_index('WILIAM_variable')['IAMC_variable'].to_dict() - translation_dict = process_csv( - csv_file_path, + translation_dict = process_list( + missing_variable_list, IAMC_WILIAM_name_dict, energy_dict, rest_dict, @@ -235,6 +231,3 @@ def main(): with open("new_variable_name_dict.txt", "w") as f: pprint.pprint(translation_dict, f) - -if __name__ == "__main__": - main() From 646ca1621addfa75c1b8f46fbbee7fa635b5052e Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Sat, 27 Jul 2024 16:14:45 +0200 Subject: [PATCH 19/22] change script to handle direct translation --- Final_script/translation.py | 60 +++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/Final_script/translation.py b/Final_script/translation.py index 5f5fddf..395cdb7 100644 --- a/Final_script/translation.py +++ b/Final_script/translation.py @@ -6,6 +6,7 @@ import matplotlib.pyplot as plt import report_pdf import argparse +import translation_helpers def get_last_added_file(folder_path): @@ -111,6 +112,16 @@ def aggregate_rows(df, aggregations): return df_final +def open_dict(dict_filename): + # Open the text file containing the dictionary + with open("../Conversion-Script/Create_Variable_Dict/" + dict_filename, "r") as f: + # Read the contents of the file + read_dict_str = f.read() + + # Convert the string representation of the dictionary back to a dictionary object + read_dict = ast.literal_eval(read_dict_str) + return read_dict + def main(): # Parse the argument put in the command line. @@ -249,12 +260,7 @@ def main(): } # Open the text file containing the country dictionary to translate the country name of Wiliam to the IAMC format. - with open("../Conversion-Script/Create_Variable_Dict/country_dict.txt", "r") as f: - # Read the contents of the file - country_dict_str = f.read() - - # Convert the string representation of the dictionary back to a dictionary object - country_dict = ast.literal_eval(country_dict_str) + country_dict = open_dict("country_dict.txt") # Order the subscript of each variable and give the right region to each row scenario_variable_df = scenario_variable_df.apply( @@ -265,29 +271,11 @@ def main(): drop_columns_list = ["Subscript " + str(k) for k in range(counter)] scenario_variable_df.drop(columns=drop_columns_list, inplace=True) - # Open the text file containing the aggregation dictionary . - with open("../Conversion-Script/Create_Variable_Dict/aggregation.txt", "r") as f: - # Read the contents of the file - aggregation_dict_str = f.read() - - # Convert the string representation of the dictionary back to a dictionary object - aggregation_dict = ast.literal_eval(aggregation_dict_str) - - # Create the aggregations rows in the dataframe. - scenario_variable_df = aggregate_rows(scenario_variable_df, aggregation_dict) - # Open the text file containing the variable dictionary to translate each variable name of Wiliam to the variable name in the IAMC format. - with open( - "../Conversion-Script/Create_Variable_Dict/variable_name_dict.txt", "r" - ) as f: - # Read the contents of the file - variable_name_dict_str = f.read() + variable_name_dict = open_dict("variable_name_dict.txt") - # Convert the string representation of the dictionary back to a dictionary object - variable_name_dict = ast.literal_eval(variable_name_dict_str) - - # Convert all the variable name to the IAMC format and get the variables with a missing translation. - # Create the list of missing variable. + # Convert all the variable name to the IAMC format and get the variables with a missing translation. + # Create the list of missing variable. missing_variable = [] # Apply the function to the DataFrame column @@ -295,12 +283,20 @@ def main(): replace_and_track, args=(variable_name_dict, missing_variable) ) - # Create the path for the file containing the missing variable. - missing_variable_path = os.path.join(folder_path , 'missing_variable.csv') - print("The translation of ", len(missing_variable), " variables are missing. You can find the file with all of them here", missing_variable_path) + # Open the text file containing the aggregation dictionary . + aggregation_dict = open_dict("aggregation.txt") + + # Create the aggregations rows in the dataframe. + scenario_variable_df = aggregate_rows(scenario_variable_df, aggregation_dict) - # Save the untranslated variable in csv file. - np.savetxt(missing_variable_path, missing_variable, delimiter=", ", fmt="% s") + # Create the path for the file containing the missing variable. + print( + "The translation of ", + len(missing_variable), + " variables are missing. You can find all the translation in the file called new_variable_name_dict.txt") + # Process the automatic translation of missing variables. + translation_helpers.create_automatic_translation(missing_variable) + # Write the new excel file in the File_Converted folder folder_file_converted = os.path.join(folder_path, folder_name_converted) From 5eecdfab1e3f3b433edf191d66326c53610ac95f Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Mon, 29 Jul 2024 10:47:08 +0200 Subject: [PATCH 20/22] change dict name --- .../economy_dashboard_dict.txt | 4 +- .../Create_Variable_Dict/land_dict.txt | 19 +- .../transport_mode_dict.txt | 10 +- .../Create_Variable_Dict/variable_dict.ipynb | 408 ++++++++++++++++-- 4 files changed, 387 insertions(+), 54 deletions(-) diff --git a/Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt b/Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt index cee3717..90fc135 100644 --- a/Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt +++ b/Conversion-Script/Create_Variable_Dict/economy_dashboard_dict.txt @@ -4,7 +4,7 @@ 'DB EMPLOYMENT': 'Employment', 'DB EXPORTS': 'Trade|Value|Exports', 'DB GDP': 'GDP|PPP', - 'DB GDP PER CAPITA': 'Revenue|Households|Disposable[per capita]', + 'DB GDP PER CAPITA': 'Revenue|Households|Disposable [per capita]', 'DB GOV BALANCE': 'Government|Budget Balance', 'DB GOV BALANCE TO GDP': 'Government|Budget Balance to GDP', 'DB GOV CONSUMPTION': 'Public Consumption', @@ -25,7 +25,7 @@ 'DB HH DISPOSABLE INCOME': 'Households|Consumption|COICOP', 'DB HH DISPOSABLE INCOME NOMINAL': 'Households|Consumption nominal|COICOP', 'DB HH SAVINGS': 'Revenues|Households|Disposable income|Nominal', - 'DB HH SAVINGS NOMINAL': 'GDP|Country[per capita]', + 'DB HH SAVINGS NOMINAL': 'GDP|Country [per capita]', 'DB IMPORTS': 'Trade|Value|Imports', 'DB LABOUR COMPENSATION': 'Value Added|Labour Compensation', 'DB LABOUR FORCE': 'Labour Supply', diff --git a/Conversion-Script/Create_Variable_Dict/land_dict.txt b/Conversion-Script/Create_Variable_Dict/land_dict.txt index 89db41f..f3d0629 100644 --- a/Conversion-Script/Create_Variable_Dict/land_dict.txt +++ b/Conversion-Script/Create_Variable_Dict/land_dict.txt @@ -1,9 +1,12 @@ -{'CROPLAND IRRIGATED': 'Cropland|IrrigatedForest|Managed', +{'CROPLAND IRRIGATED': 'Cropland|Irrigated', 'CROPLAND RAINFED': 'Cropland|Rainfed', - 'FOREST MANAGED': 'Forest|Natural Forest', - 'FOREST PLANTATIONS': 'Shrubland', - 'FOREST PRIMARY': 'Forest|Forestry|Harvested Area', - 'GRASSLAND': 'Water Ecosystems|WetlandsBuilt-up Area', - 'SHRUBLAND': 'Grassland', - 'URBAN LAND': 'Snow and Ice Land', - 'WETLAND': 'Built-up Area|Solar'} + 'FOREST MANAGED': 'Forest|Managed', + 'FOREST PLANTATIONS': 'Forest|Forestry|Harvested Area', + 'FOREST PRIMARY': 'Forest|Natural Forest', + 'GRASSLAND': 'Grassland', + 'OTHER LAND': 'Other', + 'SHRUBLAND': 'Shrubland', + 'SNOW ICE WATERBODIES': 'Snow and Ice Land', + 'SOLAR LAND': 'Built-up Area|Solar', + 'URBAN LAND': 'Built-up Area', + 'WETLAND': 'Water Ecosystems|Wetlands'} diff --git a/Conversion-Script/Create_Variable_Dict/transport_mode_dict.txt b/Conversion-Script/Create_Variable_Dict/transport_mode_dict.txt index 2e53ad6..8801a4b 100644 --- a/Conversion-Script/Create_Variable_Dict/transport_mode_dict.txt +++ b/Conversion-Script/Create_Variable_Dict/transport_mode_dict.txt @@ -1,9 +1,11 @@ -{'AIR DOMESTIC': 'European Aviation', - 'AIR INTERNATIONAL': 'NavigationBicycling and Walking', - 'AIR INTRA EU': 'International Aviation', +{'AIR DOMESTIC': 'Domestic Aviation', + 'AIR INTERNATIONAL': 'International Aviation', + 'AIR INTRA EU': 'European Aviation', 'BUS': 'Bus', 'HDV': 'High Duty Vehicle', 'LDV': 'Light Duty Vehicle', + 'MARINE': 'Navigation', 'MDV': 'Medium Duty Vehicle', 'MOTORCYCLES 2W 3W': '2W and 3W', - 'RAIL': 'RailDomestic Aviation'} + 'NMT': 'Bicycling and Walking', + 'RAIL': 'Rail'} diff --git a/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb b/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb index c23308a..babc667 100644 --- a/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb +++ b/Conversion-Script/Create_Variable_Dict/variable_dict.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -19,9 +19,111 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\AdGeeds\\AppData\\Roaming\\Python\\Python310\\site-packages\\openpyxl\\styles\\stylesheet.py:226: UserWarning: Workbook contains no default style, apply openpyxl's default\n", + " warn(\"Workbook contains no default style, apply openpyxl's default\")\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IDNameHierarchyParentSynonyms
00WorldCompare (global)WorldNaN
113Sao Tome and PrincipeCompare (individual countries and regions)WorldSTP
214TurkmenistanCompare (individual countries and regions)WorldTKM
315Saint HelenaCompare (individual countries and regions)WorldSHN
416LithuaniaCompare (individual countries and regions)WorldLTU
\n", + "
" + ], + "text/plain": [ + " ID Name Hierarchy \\\n", + "0 0 World Compare (global) \n", + "1 13 Sao Tome and Principe Compare (individual countries and regions) \n", + "2 14 Turkmenistan Compare (individual countries and regions) \n", + "3 15 Saint Helena Compare (individual countries and regions) \n", + "4 16 Lithuania Compare (individual countries and regions) \n", + "\n", + " Parent Synonyms \n", + "0 World NaN \n", + "1 World STP \n", + "2 World TKM \n", + "3 World SHN \n", + "4 World LTU " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "file_path = \"../Variable_Reference/reference.xlsx\" # Update this with the correct path\n", "\n", @@ -34,9 +136,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['World',\n", + " 'EU27',\n", + " 'UK',\n", + " 'CHINA',\n", + " 'EASOC',\n", + " 'INDIA',\n", + " 'LATAM',\n", + " 'RUSSIA',\n", + " 'USMCA',\n", + " 'LROW',\n", + " 'AUSTRIA',\n", + " 'BELGIUM',\n", + " 'BULGARIA',\n", + " 'CROATIA',\n", + " 'CYPRUS',\n", + " 'CZECH_REPUBLIC',\n", + " 'DENMARK',\n", + " 'ESTONIA',\n", + " 'FINLAND',\n", + " 'FRANCE',\n", + " 'GERMANY',\n", + " 'GREECE',\n", + " 'HUNGARY',\n", + " 'IRELAND',\n", + " 'ITALY',\n", + " 'LATVIA',\n", + " 'LITHUANIA',\n", + " 'LUXEMBOURG',\n", + " 'MALTA',\n", + " 'NETHERLANDS',\n", + " 'POLAND',\n", + " 'PORTUGAL',\n", + " 'ROMANIA',\n", + " 'SLOVAKIA',\n", + " 'SLOVENIA',\n", + " 'SPAIN',\n", + " 'SWEDEN']" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Put the country in list \n", "country_IPCC_list = country_IPCC_df[\"Name\"].to_list()\n", @@ -84,9 +233,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eu27\n", + "Uk\n", + "Easoc\n", + "Latam\n", + "Usmca\n", + "Lrow\n", + "Slovakia\n" + ] + } + ], "source": [ "# Put the country in lowercase except for the first letter (format used by IPCC for the Countries)\n", "new_country_Wiliam_list=[]\n", @@ -105,7 +268,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -124,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -142,9 +305,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'c0c4': 'Age 0-4',\n", + " 'c5c9': 'Age 5-9',\n", + " 'c10c14': 'Age 10-14',\n", + " 'c15c19': 'Age 15-19',\n", + " 'c20c24': 'Age 20-24',\n", + " 'c25c29': 'Age 25-29',\n", + " 'c30c34': 'Age 30-34',\n", + " 'c35c39': 'Age 35-39',\n", + " 'c40c44': 'Age 40-44',\n", + " 'c45c49': 'Age 45-49',\n", + " 'c50c54': 'Age 50-54',\n", + " 'c55c59': 'Age 55-59',\n", + " 'c60c64': 'Age 60-64',\n", + " 'c65c69': 'Age 65-69',\n", + " 'c70c74': 'Age 70-74',\n", + " 'c75c79': 'Age 75-79',\n", + " 'cover80': 'Age +80'}" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Create the subscript list of the Wiliam model \n", "number_list= [[0+5*k, 4+5*k] for k in range(16)]\n", @@ -171,15 +361,39 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'CO2': 'CO2',\n", + " 'CH4': 'CH4',\n", + " 'N2O': 'N2O',\n", + " 'PFCs': 'PFC',\n", + " 'SF6': 'SF6',\n", + " 'HFC134a': 'HFC134a',\n", + " 'HFC23': 'HFC23',\n", + " 'HFC32': 'HFC32',\n", + " 'HFC125': 'HFC125',\n", + " 'HFC143a': 'HFC143a',\n", + " 'HFC152a': 'HFC152a',\n", + " 'HFC227ea': 'HFC227ea',\n", + " 'HFC245ca': 'HFC245ca',\n", + " 'HFC4310mee': 'HFC43-10'}" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Old list of GHGs in Wiliam \n", "old_ghgs_list = ['CO2', 'CH4', 'N2O', 'PFCs', 'SF6', 'HFC134a', 'HFC23', 'HFC32', 'HFC125', 'HFC143a', 'HFC152a', 'HFC227ea', 'HFC245ca', 'HFC4310mee']\n", "\n", "# New list for GHGs \n", - "new_ghgs_list = ['CO2', 'CH4', 'N2O', 'PFC', 'SF6', 'HFC134a', 'HFC23', 'HFC32', 'HFC125', 'HFC143a', 'HFC152a', 'HFC227ea', 'HFC245ca', 'HFC43-10']\n", + "new_ghgs_list = ['CO2', 'CH4', 'N2O', 'PFC', 'SF6', 'HFC134a', 'HFC23', 'HFC32', 'HFC125', 'HFC143a', 'HFC152a', 'HFC227ea', 'HFC245ca', 'HFC4310mee']\n", "\n", "\n", "GHG_dict = dict(zip(old_ghgs_list, new_ghgs_list))\n", @@ -188,7 +402,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, "outputs": [], "source": [ @@ -210,9 +424,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'TO_elec': 'Electricity',\n", + " 'TO_gas': 'Gas',\n", + " 'TO_heat': 'Heat',\n", + " 'TO_hydrogen': 'Hydrogen',\n", + " 'TO_liquid': 'Liquids',\n", + " 'TO_solid_bio': 'Solids|Biomass',\n", + " 'TO_solid_fossil': 'Solids|Fossil'}" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "energy_sources_new = [\n", " \"Electricity\",\n", @@ -238,9 +469,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'FE_elec': 'Electricity',\n", + " 'FE_gas': 'Gas',\n", + " 'FE_heat': 'Heat',\n", + " 'FE_hydrogen': 'Hydrogen',\n", + " 'FE_liquid': 'Liquids',\n", + " 'FE_solid_bio': 'Solids|Biomass',\n", + " 'FE_solid_fossil': 'Solids|Fossil'}" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "energy_final_old = [\n", " \"FE_elec\",\n", @@ -269,9 +517,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'PE_agriculture_products': 'Agriculture Products',\n", + " 'PE_coal': 'Coal',\n", + " 'PE_oil': 'Oil',\n", + " 'PE_forestry_products': 'Forestry Products',\n", + " 'PE_geothermal': 'Geothermal',\n", + " 'PE_hydropower': 'Hydropower',\n", + " 'PE_natural_gas': 'Natural Gas',\n", + " 'PE_nuclear': 'Nuclear',\n", + " 'PE_oceanic': 'Ocean',\n", + " 'PE_solar': 'Solar',\n", + " 'PE_waste': 'Waste',\n", + " 'PE_wind': 'Wind'}" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "input_string = \"PE agriculture products,PE coal,PE oil,PE forestry products,PE geothermal,PE hydropower,PE natural gas,PE nuclear,PE oceanic,PE solar,PE waste,PE wind\"\n", "\n", @@ -302,9 +572,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['PROTRA_CHP_gas fuels_w/o CCS',\n", + " 'PROTRA_CHP_gas fuels_w/ CCS',\n", + " 'PROTRA_CHP_geothermal_DEACTIVATED',\n", + " 'PROTRA_CHP_liquid fuels_w/o CCS',\n", + " 'PROTRA_CHP_liquid fuels_w/ CCS',\n", + " 'PROTRA_CHP_solid_fossil_w/o CCS',\n", + " 'PROTRA_CHP_solid_fossil_w/ CCS',\n", + " 'PROTRA_CHP_waste',\n", + " 'PROTRA_CHP_solid_biomass_w/o CCS',\n", + " 'PROTRA_CHP_solid_biomass_w/ CCS',\n", + " 'PROTRA_HP_gas fuels',\n", + " 'PROTRA_HP_solid_biomass',\n", + " 'PROTRA_HP_geothermal',\n", + " 'PROTRA_HP_liquid fuels',\n", + " 'PROTRA_HP_solar_DEACTIVATED',\n", + " 'PROTRA_HP_solid_fossil',\n", + " 'PROTRA_HP_waste',\n", + " 'PROTRA_PP_solid_biomass_w/o CCS',\n", + " 'PROTRA_PP_solid_biomass_w/ CCS',\n", + " 'PROTRA_PP_gas fuels_w/o CCS',\n", + " 'PROTRA_PP_gas fuels_w/ CCS',\n", + " 'PROTRA_PP_geothermal',\n", + " 'PROTRA_PP_hydro_dammed',\n", + " 'PROTRA_PP_hydro_run of river',\n", + " 'PROTRA_PP_liquid fuels_w/o CCS',\n", + " 'PROTRA_PP_liquid fuels_w/ CCS',\n", + " 'PROTRA_PP_nuclear',\n", + " 'PROTRA_PP_ocean',\n", + " 'PROTRA_PP_solar_CSP',\n", + " 'PROTRA_PP_solar_open space_PV',\n", + " 'PROTRA_PP_solar_urban_PV',\n", + " 'PROTRA_PP_solid_fossil_w/o CCS',\n", + " 'PROTRA_PP_solid_fossil_w/ CCS',\n", + " 'PROTRA_PP_waste_w/o CCS',\n", + " 'PROTRA_PP_waste_w/ CCS',\n", + " 'PROTRA_PP_wind_offshore',\n", + " 'PROTRA_PP_wind_onshore']" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "energy_processes_old = [\n", " \"PROTRA_CHP_gas_fuels\",\n", @@ -390,7 +707,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ @@ -434,7 +751,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ @@ -487,7 +804,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ @@ -511,7 +828,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": {}, "outputs": [], "source": [ @@ -535,7 +852,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ @@ -687,7 +1004,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": {}, "outputs": [], "source": [ @@ -767,8 +1084,8 @@ " \"Revenues|Households|Disposable income|Nominal\",\n", " \"Households|Consumption nominal|COICOP\",\n", " \"Households|Savings\",\n", - " \"GDP|Country[per capita]\",\n", - " \"Revenue|Households|Disposable[per capita]\",\n", + " \"GDP|Country [per capita]\",\n", + " \"Revenue|Households|Disposable [per capita]\",\n", " \"Households|Consumer Price [index]\"\n", "]\n", "\n", @@ -787,9 +1104,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "12 12\n", + "{'CROPLAND RAINFED': 'Cropland|Rainfed', 'CROPLAND IRRIGATED': 'Cropland|Irrigated', 'FOREST MANAGED': 'Forest|Managed', 'FOREST PRIMARY': 'Forest|Natural Forest', 'FOREST PLANTATIONS': 'Forest|Forestry|Harvested Area', 'SHRUBLAND': 'Shrubland', 'GRASSLAND': 'Grassland', 'WETLAND': 'Water Ecosystems|Wetlands', 'URBAN LAND': 'Built-up Area', 'SOLAR LAND': 'Built-up Area|Solar', 'SNOW ICE WATERBODIES': 'Snow and Ice Land', 'OTHER LAND': 'Other'}\n" + ] + } + ], "source": [ "land_types = [\n", " \"CROPLAND RAINFED\",\n", @@ -808,20 +1134,22 @@ "\n", "new_land_types = [\n", " \"Cropland|Rainfed\",\n", - " \"Cropland|Irrigated\"\n", + " \"Cropland|Irrigated\",\n", " \"Forest|Managed\",\n", " \"Forest|Natural Forest\",\n", " \"Forest|Forestry|Harvested Area\",\n", " \"Shrubland\",\n", " \"Grassland\",\n", - " \"Water Ecosystems|Wetlands\"\n", + " \"Water Ecosystems|Wetlands\",\n", " \"Built-up Area\",\n", " \"Built-up Area|Solar\",\n", - " \"Snow and Ice Land\"\n", + " \"Snow and Ice Land\",\n", + " \"Other\"\n", "]\n", "\n", - "\n", + "print(len(land_types), len(new_land_types))\n", "land_dict = dict(zip(land_types, new_land_types))\n", + "print(land_dict)\n", "# Save dictionary with pprint\n", "with open('land_dict.txt', 'w') as f:\n", " pprint.pprint(land_dict, f)" @@ -836,7 +1164,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ @@ -860,11 +1188,11 @@ " \"High Duty Vehicle\",\n", " \"Bus\",\n", " \"2W and 3W\",\n", - " \"Rail\"\n", + " \"Rail\",\n", " \"Domestic Aviation\", \n", " \"European Aviation\", \n", " \"International Aviation\",\n", - " \"Navigation\"\n", + " \"Navigation\",\n", " \"Bicycling and Walking\"\n", "]\n", "\n", From cb979039ea8aba2c978cb77c2b6846c2a8a0c593 Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Mon, 29 Jul 2024 10:47:50 +0200 Subject: [PATCH 21/22] update list of greenhouses gases --- Final_script/translation_helpers.py | 90 ++++++++++++++--------------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/Final_script/translation_helpers.py b/Final_script/translation_helpers.py index ec28673..5058ef8 100644 --- a/Final_script/translation_helpers.py +++ b/Final_script/translation_helpers.py @@ -163,51 +163,51 @@ def create_automatic_translation(missing_variable_list): # List with the words in uppercase which will not be capitalized by the next functions upper_word_list = [ - "CO2", - "CH4", - "N2O", - "PFC", - "SF6", - "HFC134a", - "HFC23", - "HFC32", - "HFC125", - "HFC143a", - "HFC152a", - "HFC227ea", - "HFC245ca", - "HFC43-10", - "HFC", - "w/o CCS", - "w/ CCS", - "PV", - "CSP", - "AFOLU", - "CO2eq", - "EROI", - "PV", - "CSP", - "ICE_gasoline", - "ICE_diesel", - "ICE_gas", - "ICE_LPG", - "BEV", - "PHEV", - "HEV", - "FCEV", - "EV", - "HPV", - "LMO", - "NMC622", - "NMC811", - "NCA", - "LFP", - "LDV", - "MDV", - "HDV", - "NMT", - "GDP", - "PPP", + "CO2", + "CH4", + "N2O", + "PFC", + "SF6", + "HFC134a", + "HFC23", + "HFC32", + "HFC125", + "HFC143a", + "HFC152a", + "HFC227ea", + "HFC245ca", + "HFC4310mee", + "HFC", + "w/o CCS", + "w/ CCS", + "PV", + "CSP", + "AFOLU", + "CO2eq", + "EROI", + "PV", + "CSP", + "ICE_gasoline", + "ICE_diesel", + "ICE_gas", + "ICE_LPG", + "BEV", + "PHEV", + "HEV", + "FCEV", + "EV", + "HPV", + "LMO", + "NMC622", + "NMC811", + "NCA", + "LFP", + "LDV", + "MDV", + "HDV", + "NMT", + "GDP", + "PPP", ] vehicle_list = ["gasoline", "gas", "diesel"] From 5739f4075ed434663b0ab8add61a2a9bdc0cff9b Mon Sep 17 00:00:00 2001 From: Tristan22400 Date: Mon, 29 Jul 2024 10:57:57 +0200 Subject: [PATCH 22/22] create multiples types of plot --- Visualization/Plot_timeseries.ipynb | 522 +++++++++++++++++++++++++++- 1 file changed, 509 insertions(+), 13 deletions(-) diff --git a/Visualization/Plot_timeseries.ipynb b/Visualization/Plot_timeseries.ipynb index c0f2549..4fabb1b 100644 --- a/Visualization/Plot_timeseries.ipynb +++ b/Visualization/Plot_timeseries.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -13,6 +13,20 @@ "import triesearching" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Helpers : \n", + "This text is to help a future user to plot timeseries data in the IAMC format.\n", + "First of all, make sure you have done the translation of the Wiliam's variable before using this file. \n", + "If not, go to the ReadMe to know how to do it. \n", + "\n", + "The first three cells should be executed to load the file with the data and get all the required variable in the file. \n", + "\n", + "If you want to have the list of all scenario, model, region, variables, the execution in a python cell of df.category_wanted gives you a list all the available elements in the Region, Variable, Model and Scenario category. If you want a globally known the name of your variable the completion helpers can be useful. Put the beginning of your variable's name and it gives you all the variable corresponding to this prefix." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -22,9 +36,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO] 10:50:57 - pyam.core: Reading file ..\\Conversion-Script\\File_Converted\\Baseline no policies no CO2taxconverted.csv\n", + "C:\\Users\\AdGeeds\\AppData\\Roaming\\Python\\Python310\\site-packages\\pyam\\utils.py:316: FutureWarning: The previous implementation of stack is deprecated and will be removed in a future version of pandas. See the What's New notes for pandas 2.1.0 for details. Specify future_stack=True to adopt the new implementation and silence this warning.\n", + " df.set_index(index + REQUIRED_COLS + extra_cols)\n" + ] + } + ], "source": [ "cwd = os.getcwd()\n", "\n", @@ -46,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -59,9 +83,382 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Completions: Final Energy|Accommodation|Electricity\n", + "Final Energy|Accommodation|Gas\n", + "Final Energy|Accommodation|Heat\n", + "Final Energy|Accommodation|Hydrogen\n", + "Final Energy|Accommodation|Liquid\n", + "Final Energy|Accommodation|Solid|Biomass\n", + "Final Energy|Accommodation|Solid|Fossil\n", + "Final Energy|Animals|Electricity\n", + "Final Energy|Animals|Gas\n", + "Final Energy|Animals|Heat\n", + "Final Energy|Animals|Hydrogen\n", + "Final Energy|Animals|Liquid\n", + "Final Energy|Animals|Solid|Biomass\n", + "Final Energy|Animals|Solid|Fossil\n", + "Final Energy|Construction|Electricity\n", + "Final Energy|Construction|Gas\n", + "Final Energy|Construction|Heat\n", + "Final Energy|Construction|Hydrogen\n", + "Final Energy|Construction|Liquid\n", + "Final Energy|Construction|Solid|Biomass\n", + "Final Energy|Construction|Solid|Fossil\n", + "Final Energy|Crops|Electricity\n", + "Final Energy|Crops|Gas\n", + "Final Energy|Crops|Heat\n", + "Final Energy|Crops|Hydrogen\n", + "Final Energy|Crops|Liquid\n", + "Final Energy|Crops|Solid|Biomass\n", + "Final Energy|Crops|Solid|Fossil\n", + "Final Energy|Education|Electricity\n", + "Final Energy|Education|Gas\n", + "Final Energy|Education|Heat\n", + "Final Energy|Education|Hydrogen\n", + "Final Energy|Education|Liquid\n", + "Final Energy|Education|Solid|Biomass\n", + "Final Energy|Education|Solid|Fossil\n", + "Final Energy|Electricity\n", + "Final Energy|Electricity|Renewable|Share|Electricity\n", + "Final Energy|Electricity|Renewable|Share|Gas\n", + "Final Energy|Electricity|Renewable|Share|Heat\n", + "Final Energy|Electricity|Renewable|Share|Hydrogen\n", + "Final Energy|Electricity|Renewable|Share|Liquid\n", + "Final Energy|Electricity|Renewable|Share|Solid|Biomass\n", + "Final Energy|Electricity|Renewable|Share|Solid|Fossil\n", + "Final Energy|Entertaiment|Electricity\n", + "Final Energy|Entertaiment|Gas\n", + "Final Energy|Entertaiment|Heat\n", + "Final Energy|Entertaiment|Hydrogen\n", + "Final Energy|Entertaiment|Liquid\n", + "Final Energy|Entertaiment|Solid|Biomass\n", + "Final Energy|Entertaiment|Solid|Fossil\n", + "Final Energy|Extraction Gas|Electricity\n", + "Final Energy|Extraction Gas|Gas\n", + "Final Energy|Extraction Gas|Heat\n", + "Final Energy|Extraction Gas|Hydrogen\n", + "Final Energy|Extraction Gas|Liquid\n", + "Final Energy|Extraction Gas|Solid|Biomass\n", + "Final Energy|Extraction Gas|Solid|Fossil\n", + "Final Energy|Extraction Oil|Electricity\n", + "Final Energy|Extraction Oil|Gas\n", + "Final Energy|Extraction Oil|Heat\n", + "Final Energy|Extraction Oil|Hydrogen\n", + "Final Energy|Extraction Oil|Liquid\n", + "Final Energy|Extraction Oil|Solid|Biomass\n", + "Final Energy|Extraction Oil|Solid|Fossil\n", + "Final Energy|Extraction Other Gas|Electricity\n", + "Final Energy|Extraction Other Gas|Gas\n", + "Final Energy|Extraction Other Gas|Heat\n", + "Final Energy|Extraction Other Gas|Hydrogen\n", + "Final Energy|Extraction Other Gas|Liquid\n", + "Final Energy|Extraction Other Gas|Solid|Biomass\n", + "Final Energy|Extraction Other Gas|Solid|Fossil\n", + "Final Energy|Finance|Electricity\n", + "Final Energy|Finance|Gas\n", + "Final Energy|Finance|Heat\n", + "Final Energy|Finance|Hydrogen\n", + "Final Energy|Finance|Liquid\n", + "Final Energy|Finance|Solid|Biomass\n", + "Final Energy|Finance|Solid|Fossil\n", + "Final Energy|Fishing|Electricity\n", + "Final Energy|Fishing|Gas\n", + "Final Energy|Fishing|Heat\n", + "Final Energy|Fishing|Hydrogen\n", + "Final Energy|Fishing|Liquid\n", + "Final Energy|Fishing|Solid|Biomass\n", + "Final Energy|Fishing|Solid|Fossil\n", + "Final Energy|Flexibility Options|Electricity\n", + "Final Energy|Flexibility Options|Gas\n", + "Final Energy|Flexibility Options|Heat\n", + "Final Energy|Flexibility Options|Hydrogen\n", + "Final Energy|Flexibility Options|Liquid\n", + "Final Energy|Flexibility Options|Solid Biomass\n", + "Final Energy|Flexibility Options|Solid Fossil\n", + "Final Energy|Forestry|Electricity\n", + "Final Energy|Forestry|Gas\n", + "Final Energy|Forestry|Heat\n", + "Final Energy|Forestry|Hydrogen\n", + "Final Energy|Forestry|Liquid\n", + "Final Energy|Forestry|Solid|Biomass\n", + "Final Energy|Forestry|Solid|Fossil\n", + "Final Energy|Gas\n", + "Final Energy|Health|Electricity\n", + "Final Energy|Health|Gas\n", + "Final Energy|Health|Heat\n", + "Final Energy|Health|Hydrogen\n", + "Final Energy|Health|Liquid\n", + "Final Energy|Health|Solid|Biomass\n", + "Final Energy|Health|Solid|Fossil\n", + "Final Energy|Heat\n", + "Final Energy|Hydrogen\n", + "Final Energy|Liquid\n", + "Final Energy|Manufacture Chemical|Electricity\n", + "Final Energy|Manufacture Chemical|Gas\n", + "Final Energy|Manufacture Chemical|Heat\n", + "Final Energy|Manufacture Chemical|Hydrogen\n", + "Final Energy|Manufacture Chemical|Liquid\n", + "Final Energy|Manufacture Chemical|Solid|Biomass\n", + "Final Energy|Manufacture Chemical|Solid|Fossil\n", + "Final Energy|Manufacture Electrical Equipment|Electricity\n", + "Final Energy|Manufacture Electrical Equipment|Gas\n", + "Final Energy|Manufacture Electrical Equipment|Heat\n", + "Final Energy|Manufacture Electrical Equipment|Hydrogen\n", + "Final Energy|Manufacture Electrical Equipment|Liquid\n", + "Final Energy|Manufacture Electrical Equipment|Solid|Biomass\n", + "Final Energy|Manufacture Electrical Equipment|Solid|Fossil\n", + "Final Energy|Manufacture Electronics|Electricity\n", + "Final Energy|Manufacture Electronics|Gas\n", + "Final Energy|Manufacture Electronics|Heat\n", + "Final Energy|Manufacture Electronics|Hydrogen\n", + "Final Energy|Manufacture Electronics|Liquid\n", + "Final Energy|Manufacture Electronics|Solid|Biomass\n", + "Final Energy|Manufacture Electronics|Solid|Fossil\n", + "Final Energy|Manufacture Food|Electricity\n", + "Final Energy|Manufacture Food|Gas\n", + "Final Energy|Manufacture Food|Heat\n", + "Final Energy|Manufacture Food|Hydrogen\n", + "Final Energy|Manufacture Food|Liquid\n", + "Final Energy|Manufacture Food|Solid|Biomass\n", + "Final Energy|Manufacture Food|Solid|Fossil\n", + "Final Energy|Manufacture Machinery|Electricity\n", + "Final Energy|Manufacture Machinery|Gas\n", + "Final Energy|Manufacture Machinery|Heat\n", + "Final Energy|Manufacture Machinery|Hydrogen\n", + "Final Energy|Manufacture Machinery|Liquid\n", + "Final Energy|Manufacture Machinery|Solid|Biomass\n", + "Final Energy|Manufacture Machinery|Solid|Fossil\n", + "Final Energy|Manufacture Metal Products|Electricity\n", + "Final Energy|Manufacture Metal Products|Gas\n", + "Final Energy|Manufacture Metal Products|Heat\n", + "Final Energy|Manufacture Metal Products|Hydrogen\n", + "Final Energy|Manufacture Metal Products|Liquid\n", + "Final Energy|Manufacture Metal Products|Solid|Biomass\n", + "Final Energy|Manufacture Metal Products|Solid|Fossil\n", + "Final Energy|Manufacture Other Non Metal|Electricity\n", + "Final Energy|Manufacture Other Non Metal|Gas\n", + "Final Energy|Manufacture Other Non Metal|Heat\n", + "Final Energy|Manufacture Other Non Metal|Hydrogen\n", + "Final Energy|Manufacture Other Non Metal|Liquid\n", + "Final Energy|Manufacture Other Non Metal|Solid|Biomass\n", + "Final Energy|Manufacture Other Non Metal|Solid|Fossil\n", + "Final Energy|Manufacture Other|Electricity\n", + "Final Energy|Manufacture Other|Gas\n", + "Final Energy|Manufacture Other|Heat\n", + "Final Energy|Manufacture Other|Hydrogen\n", + "Final Energy|Manufacture Other|Liquid\n", + "Final Energy|Manufacture Other|Solid|Biomass\n", + "Final Energy|Manufacture Other|Solid|Fossil\n", + "Final Energy|Manufacture Plastic|Electricity\n", + "Final Energy|Manufacture Plastic|Gas\n", + "Final Energy|Manufacture Plastic|Heat\n", + "Final Energy|Manufacture Plastic|Hydrogen\n", + "Final Energy|Manufacture Plastic|Liquid\n", + "Final Energy|Manufacture Plastic|Solid|Biomass\n", + "Final Energy|Manufacture Plastic|Solid|Fossil\n", + "Final Energy|Manufacture Vehicles|Electricity\n", + "Final Energy|Manufacture Vehicles|Gas\n", + "Final Energy|Manufacture Vehicles|Heat\n", + "Final Energy|Manufacture Vehicles|Hydrogen\n", + "Final Energy|Manufacture Vehicles|Liquid\n", + "Final Energy|Manufacture Vehicles|Solid|Biomass\n", + "Final Energy|Manufacture Vehicles|Solid|Fossil\n", + "Final Energy|Manufacture Wood|Electricity\n", + "Final Energy|Manufacture Wood|Gas\n", + "Final Energy|Manufacture Wood|Heat\n", + "Final Energy|Manufacture Wood|Hydrogen\n", + "Final Energy|Manufacture Wood|Liquid\n", + "Final Energy|Manufacture Wood|Solid|Biomass\n", + "Final Energy|Manufacture Wood|Solid|Fossil\n", + "Final Energy|Mining And Manufacturing Aluminium|Electricity\n", + "Final Energy|Mining And Manufacturing Aluminium|Gas\n", + "Final Energy|Mining And Manufacturing Aluminium|Heat\n", + "Final Energy|Mining And Manufacturing Aluminium|Hydrogen\n", + "Final Energy|Mining And Manufacturing Aluminium|Liquid\n", + "Final Energy|Mining And Manufacturing Aluminium|Solid|Biomass\n", + "Final Energy|Mining And Manufacturing Aluminium|Solid|Fossil\n", + "Final Energy|Mining And Manufacturing Copper|Electricity\n", + "Final Energy|Mining And Manufacturing Copper|Gas\n", + "Final Energy|Mining And Manufacturing Copper|Heat\n", + "Final Energy|Mining And Manufacturing Copper|Hydrogen\n", + "Final Energy|Mining And Manufacturing Copper|Liquid\n", + "Final Energy|Mining And Manufacturing Copper|Solid|Biomass\n", + "Final Energy|Mining And Manufacturing Copper|Solid|Fossil\n", + "Final Energy|Mining And Manufacturing Iron|Electricity\n", + "Final Energy|Mining And Manufacturing Iron|Gas\n", + "Final Energy|Mining And Manufacturing Iron|Heat\n", + "Final Energy|Mining And Manufacturing Iron|Hydrogen\n", + "Final Energy|Mining And Manufacturing Iron|Liquid\n", + "Final Energy|Mining And Manufacturing Iron|Solid|Biomass\n", + "Final Energy|Mining And Manufacturing Iron|Solid|Fossil\n", + "Final Energy|Mining And Manufacturing Lead Zinc Tin|Electricity\n", + "Final Energy|Mining And Manufacturing Lead Zinc Tin|Gas\n", + "Final Energy|Mining And Manufacturing Lead Zinc Tin|Heat\n", + "Final Energy|Mining And Manufacturing Lead Zinc Tin|Hydrogen\n", + "Final Energy|Mining And Manufacturing Lead Zinc Tin|Liquid\n", + "Final Energy|Mining And Manufacturing Lead Zinc Tin|Solid|Biomass\n", + "Final Energy|Mining And Manufacturing Lead Zinc Tin|Solid|Fossil\n", + "Final Energy|Mining And Manufacturing Nickel|Electricity\n", + "Final Energy|Mining And Manufacturing Nickel|Gas\n", + "Final Energy|Mining And Manufacturing Nickel|Heat\n", + "Final Energy|Mining And Manufacturing Nickel|Hydrogen\n", + "Final Energy|Mining And Manufacturing Nickel|Liquid\n", + "Final Energy|Mining And Manufacturing Nickel|Solid|Biomass\n", + "Final Energy|Mining And Manufacturing Nickel|Solid|Fossil\n", + "Final Energy|Mining And Manufacturing Other Metals|Electricity\n", + "Final Energy|Mining And Manufacturing Other Metals|Gas\n", + "Final Energy|Mining And Manufacturing Other Metals|Heat\n", + "Final Energy|Mining And Manufacturing Other Metals|Hydrogen\n", + "Final Energy|Mining And Manufacturing Other Metals|Liquid\n", + "Final Energy|Mining And Manufacturing Other Metals|Solid|Biomass\n", + "Final Energy|Mining And Manufacturing Other Metals|Solid|Fossil\n", + "Final Energy|Mining And Manufacturing Precious Metals|Electricity\n", + "Final Energy|Mining And Manufacturing Precious Metals|Gas\n", + "Final Energy|Mining And Manufacturing Precious Metals|Heat\n", + "Final Energy|Mining And Manufacturing Precious Metals|Hydrogen\n", + "Final Energy|Mining And Manufacturing Precious Metals|Liquid\n", + "Final Energy|Mining And Manufacturing Precious Metals|Solid|Biomass\n", + "Final Energy|Mining And Manufacturing Precious Metals|Solid|Fossil\n", + "Final Energy|Mining And Manufacturing Uranium Thorium|Electricity\n", + "Final Energy|Mining And Manufacturing Uranium Thorium|Gas\n", + "Final Energy|Mining And Manufacturing Uranium Thorium|Heat\n", + "Final Energy|Mining And Manufacturing Uranium Thorium|Hydrogen\n", + "Final Energy|Mining And Manufacturing Uranium Thorium|Liquid\n", + "Final Energy|Mining And Manufacturing Uranium Thorium|Solid|Biomass\n", + "Final Energy|Mining And Manufacturing Uranium Thorium|Solid|Fossil\n", + "Final Energy|Mining Coal|Electricity\n", + "Final Energy|Mining Coal|Gas\n", + "Final Energy|Mining Coal|Heat\n", + "Final Energy|Mining Coal|Hydrogen\n", + "Final Energy|Mining Coal|Liquid\n", + "Final Energy|Mining Coal|Solid|Biomass\n", + "Final Energy|Mining Coal|Solid|Fossil\n", + "Final Energy|Mining Non Metals|Electricity\n", + "Final Energy|Mining Non Metals|Gas\n", + "Final Energy|Mining Non Metals|Heat\n", + "Final Energy|Mining Non Metals|Hydrogen\n", + "Final Energy|Mining Non Metals|Liquid\n", + "Final Energy|Mining Non Metals|Solid|Biomass\n", + "Final Energy|Mining Non Metals|Solid|Fossil\n", + "Final Energy|Net [per Capita]\n", + "Final Energy|Non-Energy Use|Electricity\n", + "Final Energy|Non-Energy Use|Gas\n", + "Final Energy|Non-Energy Use|Heat\n", + "Final Energy|Non-Energy Use|Hydrogen\n", + "Final Energy|Non-Energy Use|Liquid\n", + "Final Energy|Non-Energy Use|Solid|Biomass\n", + "Final Energy|Non-Energy Use|Solid|Fossil\n", + "Final Energy|Other Services|Electricity\n", + "Final Energy|Other Services|Gas\n", + "Final Energy|Other Services|Heat\n", + "Final Energy|Other Services|Hydrogen\n", + "Final Energy|Other Services|Liquid\n", + "Final Energy|Other Services|Solid|Biomass\n", + "Final Energy|Other Services|Solid|Fossil\n", + "Final Energy|Private Households|Electricity\n", + "Final Energy|Private Households|Gas\n", + "Final Energy|Private Households|Heat\n", + "Final Energy|Private Households|Hydrogen\n", + "Final Energy|Private Households|Liquid\n", + "Final Energy|Private Households|Solid|Biomass\n", + "Final Energy|Private Households|Solid|Fossil\n", + "Final Energy|Public Administration|Electricity\n", + "Final Energy|Public Administration|Gas\n", + "Final Energy|Public Administration|Heat\n", + "Final Energy|Public Administration|Hydrogen\n", + "Final Energy|Public Administration|Liquid\n", + "Final Energy|Public Administration|Solid|Biomass\n", + "Final Energy|Public Administration|Solid|Fossil\n", + "Final Energy|Real Estate|Electricity\n", + "Final Energy|Real Estate|Gas\n", + "Final Energy|Real Estate|Heat\n", + "Final Energy|Real Estate|Hydrogen\n", + "Final Energy|Real Estate|Liquid\n", + "Final Energy|Real Estate|Solid|Biomass\n", + "Final Energy|Real Estate|Solid|Fossil\n", + "Final Energy|Regional Consumption|Electricity\n", + "Final Energy|Regional Consumption|Gas\n", + "Final Energy|Regional Consumption|Heat\n", + "Final Energy|Regional Consumption|Hydrogen\n", + "Final Energy|Regional Consumption|Liquid\n", + "Final Energy|Regional Consumption|Solid|Biomass\n", + "Final Energy|Regional Consumption|Solid|Fossil\n", + "Final Energy|Renewable|Share\n", + "Final Energy|Solid|Biomass\n", + "Final Energy|Solid|Fossil\n", + "Final Energy|Telecommunications|Electricity\n", + "Final Energy|Telecommunications|Gas\n", + "Final Energy|Telecommunications|Heat\n", + "Final Energy|Telecommunications|Hydrogen\n", + "Final Energy|Telecommunications|Liquid\n", + "Final Energy|Telecommunications|Solid|Biomass\n", + "Final Energy|Telecommunications|Solid|Fossil\n", + "Final Energy|Trade Repair Vehicles|Electricity\n", + "Final Energy|Trade Repair Vehicles|Gas\n", + "Final Energy|Trade Repair Vehicles|Heat\n", + "Final Energy|Trade Repair Vehicles|Hydrogen\n", + "Final Energy|Trade Repair Vehicles|Liquid\n", + "Final Energy|Trade Repair Vehicles|Solid|Biomass\n", + "Final Energy|Trade Repair Vehicles|Solid|Fossil\n", + "Final Energy|Transport Air|Electricity\n", + "Final Energy|Transport Air|Gas\n", + "Final Energy|Transport Air|Heat\n", + "Final Energy|Transport Air|Hydrogen\n", + "Final Energy|Transport Air|Liquid\n", + "Final Energy|Transport Air|Solid|Biomass\n", + "Final Energy|Transport Air|Solid|Fossil\n", + "Final Energy|Transport Inland Water|Electricity\n", + "Final Energy|Transport Inland Water|Gas\n", + "Final Energy|Transport Inland Water|Heat\n", + "Final Energy|Transport Inland Water|Hydrogen\n", + "Final Energy|Transport Inland Water|Liquid\n", + "Final Energy|Transport Inland Water|Solid|Biomass\n", + "Final Energy|Transport Inland Water|Solid|Fossil\n", + "Final Energy|Transport Other Land|Electricity\n", + "Final Energy|Transport Other Land|Gas\n", + "Final Energy|Transport Other Land|Heat\n", + "Final Energy|Transport Other Land|Hydrogen\n", + "Final Energy|Transport Other Land|Liquid\n", + "Final Energy|Transport Other Land|Solid|Biomass\n", + "Final Energy|Transport Other Land|Solid|Fossil\n", + "Final Energy|Transport Pipeline|Electricity\n", + "Final Energy|Transport Pipeline|Gas\n", + "Final Energy|Transport Pipeline|Heat\n", + "Final Energy|Transport Pipeline|Hydrogen\n", + "Final Energy|Transport Pipeline|Liquid\n", + "Final Energy|Transport Pipeline|Solid|Biomass\n", + "Final Energy|Transport Pipeline|Solid|Fossil\n", + "Final Energy|Transport Rail|Electricity\n", + "Final Energy|Transport Rail|Gas\n", + "Final Energy|Transport Rail|Heat\n", + "Final Energy|Transport Rail|Hydrogen\n", + "Final Energy|Transport Rail|Liquid\n", + "Final Energy|Transport Rail|Solid|Biomass\n", + "Final Energy|Transport Rail|Solid|Fossil\n", + "Final Energy|Transport Sea|Electricity\n", + "Final Energy|Transport Sea|Gas\n", + "Final Energy|Transport Sea|Heat\n", + "Final Energy|Transport Sea|Hydrogen\n", + "Final Energy|Transport Sea|Liquid\n", + "Final Energy|Transport Sea|Solid|Biomass\n", + "Final Energy|Transport Sea|Solid|Fossil\n", + "Final Energy|Waste Management|Electricity\n", + "Final Energy|Waste Management|Gas\n", + "Final Energy|Waste Management|Heat\n", + "Final Energy|Waste Management|Hydrogen\n", + "Final Energy|Waste Management|Liquid\n", + "Final Energy|Waste Management|Solid|Biomass\n", + "Final Energy|Waste Management|Solid|Fossil\n" + ] + } + ], "source": [ "# Enter the prefix of the variable you want to see.\n", "\n", @@ -70,24 +467,123 @@ "print(\"Completions:\", \"\\n\".join(completions))\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plot differentiate by variable for a same region \n" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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110lovbHH388KE1mZiYGDhwIk8mEuLg4zJgxA263OyjNzp070blzZxgMBjRv3pz/CiSqAv5WgMBFo9GUuBXTuHFjvPjiixg3bhyio6PRqFEjLF++PCivmTNnomXLljCZTGjatClmz54Nl8tV4TLVrVu3RJl0Oh2A4ttK77//Pho3bgyLxYLhw4cjPz9fPV9RFMybNw9NmjRBREQEOnTogH//+9/q8Z07d0KSJHz55Zfo0qULDAYDvvnmG+Tn52PkyJGIjIxEgwYN8MorrwTVw9y5c9G2bdsS5e3YsSNmz55d6rX07dsXNpsN3333XdD7P/PMMzhw4ADsdjsA78SnBw4cUAO7sury+++/R9++fREdHQ2z2YwuXbrgu+++w86dO/HII48gLy9P/T32tww6HA5Mnz4dt912GyIjI9G9e/dy3fYbOXIkdu3ahfPnz6v73n33XYwcObJEMLx48WK0a9cOkZGRSEpKwhNPPAGbzaYe97cmbt68GSkpKYiKikL//v1x8eJFNc3Bgwdxzz33oF69erBYLOjTpw/+85//BL3PDz/8gJ49e8JoNKJ169bYunVr0C06ADh//jwefPBBxMTEoE6dOhg8eDDOnTunHvffknzxxRcRHx+PmJgYzJ07F263GzNmzECdOnXQsGHDEv/wKW++CxcuRIMGDVC3bl1MmjRJ/fvddddd+PnnnzF16lT1b1Sa3NxcfP3113j55ZfRt29fJCcn44477sCsWbPw+9//Xk2XmZmJwYMHIyoqCmazGQ8++CCys7Ov8dcseSu2oKAAo0ePRlRUFBo0aFChR7Nd/V31B40OhwNPPfUU4uLiYDQa0bNnTxw8eFA978qVKxg5ciTq16+PiIgItGjRQq1np9OJyZMno0GDBjAajUhOTsa8efPUc6/+O9dG1RrY7dq1C5MmTcL+/fuxZcsWuFwu9OvXDwUFBUHpHn30UVy8eFFd5s+frx7zeDwYOHAgnE4n9u7di1WrVmHlypV49tln1TRnz57FwIED0bdvX2RkZGDKlCmYMGECNm/eXGXXShQqQggoTk+1LJX5oJpFixaha9euOHz4MJ544glMnDgx6B960dHRWLlyJU6cOIGlS5firbfewiuvvBLycpw5cwbr16/Hhg0bsGHDBuzatQsvvfSSenzevHl477338Oabb+L48eOYOnUqHn74YezatSson2eeeQYvvfQSTp48ifbt22PatGnYs2cPPvvsM2zZsgVff/11UEAxbtw4nDx5Muh/UIcPH8aRI0fwyCOPlFrWli1bIjExETt27ADgfcbpf/7zH/zxj39E48aNsW/fPgDA3r174XA41MCurLocOXIkGjZsiIMHD+LQoUN45plnoNPpcOedd2LJkiUwm83q7/H06dMBAJMnT8a+ffuwZs0aHDlyBH/84x/Rv39//Pjjj9et7/j4eKSnp2PVqlUAgMLCQqxduxbjxo0rkVaWZbz66qs4fvw4Vq1ahe3bt+Ppp58OSlNYWIiFCxfi/fffx+7du5GZmamW0V9HY8aMwTfffIP9+/ejRYsWuPfee9Xg3ePxYMiQITCZTDhw4ACWL1+Ov/71r0Hv4XK5kJ6ejujoaHz99dfYs2ePGkQ6nU413fbt2/HLL79g9+7dWLx4MebMmYP77rsPsbGxOHDgAB5//HH86U9/woULFyqU744dO3DmzBns2LFD/X+ev7Hik08+QcOGDTF37lz1b1SaqKgoREVFYf369XA4HKWmURQFgwcPRk5ODnbt2oUtW7bgp59+wrBhw0pNX5oZM2Zg165d+PTTT/HVV19h586dJQLpinr66afx8ccfY9WqVfjPf/6D5s2bIz09HTk5OQCA2bNn48SJE/jyyy9x8uRJvPHGG+ozmV999VV89tln+PDDD3Hq1CmsXr26Rj5m7aaIGuTSpUsCgNi1a5e6r0+fPuLPf/7zNc/54osvhCzLIisrS933xhtvCLPZLBwOhxBCiKefflq0adMm6Lxhw4aJ9PT0cpUrLy9PABB5eXkVuBqim1dUVCROnDghioqK1H0eh1ucn7m7WhaPw13uso8ZM0ZoNBoRGRmpLg888IAQouT3Ojk5WTz88MPqa0VRRFxcnHjjjTeumf+CBQtEly5d1Ndz5swRHTp0uGb6s2fPCgAiIiIiqEyRkZFBeZhMJmG1WtV9M2bMEN27dxdCCGG324XJZBJ79+4Nynv8+PFixIgRQgghduzYIQCI9evXq8etVqvQ6XTio48+Uvfl5uYKk8kUVA8DBgwQEydOVF8/+eST4q677ipxDYFGjhwp+vXrJ4QQYuPGjaJ169ZCCCEee+wx8eyzzwohhJg9e7Zo0qTJNevm6rqMjo4WK1euLDXtihUrhMViCdr3888/C41GI/7v//4vaP/dd98tZs2adc33TU5OFq+88opYv369aNasmVAURaxatUp06tRJCCGExWIRK1asuOb5H330kahbt25Q2QCI06dPq/tef/11ER8ff808PB6PiI6OFp9//rkQQogvv/xSaLVacfHiRTXNli1bBACxbt06IYQQ77//vmjVqpVQFEVN43A4REREhNi8ebMQwvv5T05OFh6PR03TqlUr0atXL/W12+0WkZGR4oMPPqhwvm538Xfxj3/8oxg2bJj62l+vV0tOThY7duxQX//73/8WsbGxwmg0ijvvvFPMmjVLfP/99+rxr776Smg0GpGZmanuO378uAAgvv32WyFEye/dmDFjxODBg4UQQuTn5wu9Xi8+/PBD9fjly5dFRERE0Od+xYoVok+fPurra31X//Of/wibzSZ0Op1YvXq1mt7pdIrExEQxf/58IYQQgwYNEo888kiJ6xfC+536n//5n6A6DhT4d/aX4/Dhw6WmDbXSfu/9KhKH1KjBE3l5eQCAOnXqBO1fvXo16tWrh7Zt22LWrFkoLCxUj+3btw/t2rVDfHy8ui89PR1WqxXHjx9X06SlpQXlmZ6erv5r9moOhwNWqzVoIaKK87eS+5dXX331mmnbt2+vbkuShISEBFy6dEndt3btWvTo0QMJCQmIiorC3/72N2RmZla4TGvXrg0q09Uj3ho3bozo6Gj1dYMGDdRynD59GoWFhbjnnnvUFo+oqCi89957OHPmTFA+Xbt2Vbd/+uknuFwu3HHHHeo+i8WCVq1aBZ3z6KOP4oMPPoDdbofT6cS//vWvUluuAt11113Ys2cPXC4Xdu7cqY4u7NOnj3ordOfOnUH968qqy2nTpmHChAlIS0vDSy+9VOLarnb06FF4PB60bNkyqF527dpV5rkAMHDgQNhsNuzevRvvvvvuNa9569atuPvuu3HbbbchOjoao0aNwuXLl4P+n2AymdCsWTP1deDfDwCys7Px6KOPokWLFrBYLDCbzbDZbOr1nzp1CklJSUF9rQL/boD3VvXp06cRHR2tXmudOnVgt9uDrrdNmzaQ5eL/zcbHx6Ndu3bqa41Gg7p166rlq0i+gf1Ur77G8ho6dCh++eUXfPbZZ+jfv7/aZcnf+nfy5EkkJSUhKSlJPad169aIiYnByZMny8z/zJkzcDqd6N69u7qvTp06JT7313L1d7V169Y4c+YMXC4X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Gsz/6KDAZ2ESEVH48f/OX/3IuIri4AmiGkyj0SAmJkadgNtkMpV4UgEREdVeQggUFhbi0qVLiImJKfG85YpiYEdUw/kfjRf4dBUiIgovMTEx6u/9zWBgR1TDSZKEBg0aIC4uDi6Xq7qLQ0REIabT6W66pc6PgR1RLaHRaEL2xSciovDEwRNEREREYYKBHREREVGYYGBHREREFCYY2BERERGFCQZ2RERERGGCgR0RERFRmGBgR0RERBQmGNgRERERhQkGdkRERERhgoEdERERUZhgYEdEREQUJhjYEREREYWJCgV2QghkZmbCbrdXVnmIiIiI6AZVOLBr3rw5zp8/X1nlISIiIqIbVKHATpZltGjRApcvX66s8hARERHRDapwH7uXXnoJM2bMwLFjxyqjPERERER0gyQhhKjICbGxsSgsLITb7YZer0dERETQ8ZycnJAWsCawWq2wWCzIy8uD2Wyu7uIQERHRLaQicYi2opm/8sorkCTphgtHRERERJWjwoHd2LFjK6EYRERERHSzKtzHrk+fPnjvvfdQVFRUGeUhIiIiohtU4cCuU6dOmD59OhISEvDoo49i//79lVEuIiIiIqqgCgd2S5YswS+//IIVK1bg0qVL6N27N1q3bo2FCxciOzu7MspIREREROVwQ48U02q1uP/++/Hpp5/iwoULeOihhzB79mwkJSVhyJAh2L59e6jLSURERERluKlnxX777beYM2cOFi1ahLi4OMyaNQv16tXDfffdh+nTp5d5/rx589CtWzdER0cjLi4OQ4YMwalTp4LS2O12TJo0CXXr1kVUVBSGDh1aomUwMzMTAwcOhMlkQlxcHGbMmAG32x2UZufOnejcuTMMBgOaN2+OlStX3sylExEREdU4FQ7sLl26hEWLFqFt27bo1asXfv31V3zwwQc4d+4cnn/+ebz99tv46quv8Oabb5aZ165duzBp0iTs378fW7ZsgcvlQr9+/VBQUKCmmTp1Kj7//HN89NFH2LVrF3755Rfcf//96nGPx4OBAwfC6XRi7969WLVqFVauXIlnn31WTXP27FkMHDgQffv2RUZGBqZMmYIJEyZg8+bNFb18IiIiohqrwhMU6/V6NGvWDOPGjcPYsWNRv379EmmsVisGDx6MHTt2VKgwv/76K+Li4rBr1y707t0beXl5qF+/Pv71r3/hgQceAAD88MMPSElJwb59+/C73/0OX375Je677z788ssviI+PBwC8+eabmDlzJn799Vfo9XrMnDkTGzduDHpaxvDhw5Gbm4tNmzaVWS5OUExERETVpSJxSLlb7AoLCwEA27Ztw8mTJzFjxoxSgzoAMJvNFQ7qACAvLw8AUKdOHQDAoUOH4HK5kJaWpqa5/fbb0ahRI+zbtw8AsG/fPrRr104N6gAgPT0dVqsVx48fV9ME5uFP48+DiIiIKByUO7Dz9507efJkpYx+VRQFU6ZMQY8ePdC2bVsAQFZWFvR6PWJiYoLSxsfHIysrS00TGNT5j/uPXS+N1WotdT4+h8MBq9UatBARERHVdOUO7H744Qekp6fjww8/RHJyMrp3746///3vOHr0aEgKMmnSJBw7dgxr1qwJSX43Y968ebBYLOqSlJRU3UUiIiIiKlO5A7tGjRrhySefxNatW5GdnY0pU6bg6NGj6NWrF5o2bYopU6Zg+/bt8Hg8FS7E5MmTsWHDBuzYsQMNGzZU9yckJMDpdCI3NzcofXZ2NhISEtQ0V7cg+l+XlcZsNiMiIqJEeWbNmoW8vDx1OX/+fIWviYiIiKiq3dB0JxaLBSNGjMCaNWvw66+/4s0334TH48EjjzyC+vXrY/Xq1eXKRwiByZMnY926ddi+fTuaNGkSdLxLly7Q6XTYtm2buu/UqVPIzMxEamoqACA1NRVHjx7FpUuX1DRbtmyB2WxG69at1TSBefjT+PO4msFggNlsDlqIiIiIaroKj4oty+HDh+F2u9GtW7cy0z7xxBP417/+hU8//RStWrVS91ssFrUlbeLEifjiiy+wcuVKmM1mPPnkkwCAvXv3AvBOd9KxY0ckJiZi/vz5yMrKwqhRozBhwgS8+OKLALzTnbRt2xaTJk3CuHHjsH37djz11FPYuHEj0tPTyywnR8USERFRdalIHFLuwO7IkSNlptFqtUhISFBHtZZFkqRS969YsQJjx44F4J2g+C9/+Qs++OADOBwOpKenY9myZeptVgD4+eefMXHiROzcuRORkZEYM2YMXnrpJWi1WjXNzp07MXXqVJw4cQINGzbE7Nmz1fcoCwM7IiIiqi6VEtjJsgxJklBWckmS0LFjR6xatUod3VrbMbAjIiKi6lKROER73aMBzp49W2YaRVGQnZ2NBQsWYOLEifj666/Lmz0RERER3aRyB3arVq3C9OnTYTKZrpuuSZMmePnll9GhQ4ebLhwRERERlV+5R8U+//zzsNls5UrbpEkTdXADEREREVWNcgd2FRk8q9Fo2GJHREREVMUqNI/dtUaxEhEREVH1K3cfOwBo2bJlmcFdTk7OTRWIiIiIiG5MhQK7559/HhaLpbLKQkREREQ3oUKB3fDhwxEXF1dZZSEiIiKim1DuPnbsX0dERERUs1XKqFgiIiIiqnrlvhWrKEplloOIiIiIblKFpjshIiIiopqLgR0RERFRmGBgR0RERBQmGNgRERERhQkGdkRERERhgoEdERERUZhgYEdEREQUJhjYEREREYUJBnZEREREYYKBHREREVGYYGBHREREFCYY2BERERGFCQZ2RERERGGCgR0RERFRmGBgR0RERBQmGNgRERERhQkGdkRERERhgoEdERERUZhgYEdEREQUJhjYEREREYUJBnZEREREYYKBHREREVGYqNbAbvfu3Rg0aBASExMhSRLWr18fdHzs2LGQJClo6d+/f1CanJwcjBw5EmazGTExMRg/fjxsNltQmiNHjqBXr14wGo1ISkrC/PnzK/vSiIiIiKpctQZ2BQUF6NChA15//fVrpunfvz8uXryoLh988EHQ8ZEjR+L48ePYsmULNmzYgN27d+Oxxx5Tj1utVvTr1w/Jyck4dOgQFixYgOeeew7Lly+vtOsiIiIiqg7a6nzzAQMGYMCAAddNYzAYkJCQUOqxkydPYtOmTTh48CC6du0KAHjttddw7733YuHChUhMTMTq1avhdDrx7rvvQq/Xo02bNsjIyMDixYuDAkAiIiKi2q7G97HbuXMn4uLi0KpVK0ycOBGXL19Wj+3btw8xMTFqUAcAaWlpkGUZBw4cUNP07t0ber1eTZOeno5Tp07hypUrpb6nw+GA1WoNWoiIiIhquhod2PXv3x/vvfcetm3bhpdffhm7du3CgAED4PF4AABZWVmIi4sLOker1aJOnTrIyspS08THxwel8b/2p7navHnzYLFY1CUpKSnUl0ZEREQUctV6K7Ysw4cPV7fbtWuH9u3bo1mzZti5cyfuvvvuSnvfWbNmYdq0aeprq9XK4I6IiIhqvBrdYne1pk2bol69ejh9+jQAICEhAZcuXQpK43a7kZOTo/bLS0hIQHZ2dlAa/+tr9d0zGAwwm81BCxEREVFNV6sCuwsXLuDy5cto0KABACA1NRW5ubk4dOiQmmb79u1QFAXdu3dX0+zevRsul0tNs2XLFrRq1QqxsbFVewFERERElahaAzubzYaMjAxkZGQAAM6ePYuMjAxkZmbCZrNhxowZ2L9/P86dO4dt27Zh8ODBaN68OdLT0wEAKSkp6N+/Px599FF8++232LNnDyZPnozhw4cjMTERAPDQQw9Br9dj/PjxOH78ONauXYulS5cG3WolIiIiCgeSEEJU15vv3LkTffv2LbF/zJgxeOONNzBkyBAcPnwYubm5SExMRL9+/fDCCy8EDYbIycnB5MmT8fnnn0OWZQwdOhSvvvoqoqKi1DRHjhzBpEmTcPDgQdSrVw9PPvkkZs6cWe5yWq1WWCwW5OXl8bYsERERVamKxCHVGtjVFgzsiIiIqLpUJA6pVX3siIiIiOjaGNgRERERhQkGdkRERERhgoEdERERUZhgYEdEREQUJhjYEREREYUJBnZEREREYYKBHREREVGYYGBHREREFCYY2BERERGFCQZ2RERERGGCgR0RERFRmGBgR0RERBQmGNgRERERhQkGdkRERERhgoEdERERUZhgYEdEREQUJhjYEREREYUJBnZEREREYYKBHREREVGYYGBHREREFCYY2BERERGFCQZ2RERERGGCgR0RERFRmGBgR0RERBQmGNgRERERhQkGdkRERERhgoEdERERUZhgYEdEREQUJhjYEREREYUJBnZEREREYYKBHREREVGYYGBHREREFCaqNbDbvXs3Bg0ahMTEREiShPXr1wcdF0Lg2WefRYMGDRAREYG0tDT8+OOPQWlycnIwcuRImM1mxMTEYPz48bDZbEFpjhw5gl69esFoNCIpKQnz58+v7EsjIiIiqnLVGtgVFBSgQ4cOeP3110s9Pn/+fLz66qt48803ceDAAURGRiI9PR12u11NM3LkSBw/fhxbtmzBhg0bsHv3bjz22GPqcavVin79+iE5ORmHDh3CggUL8Nxzz2H58uWVfn1EREREVUkSQojqLgQASJKEdevWYciQIQC8rXWJiYn4y1/+gunTpwMA8vLyEB8fj5UrV2L48OE4efIkWrdujYMHD6Jr164AgE2bNuHee+/FhQsXkJiYiDfeeAN//etfkZWVBb1eDwB45plnsH79evzwww/lKpvVaoXFYkFeXh7MZnPoL56IiIjoGioSh9TYPnZnz55FVlYW0tLS1H0WiwXdu3fHvn37AAD79u1DTEyMGtQBQFpaGmRZxoEDB9Q0vXv3VoM6AEhPT8epU6dw5cqVUt/b4XDAarUGLUREREQ1XY0N7LKysgAA8fHxQfvj4+PVY1lZWYiLiws6rtVqUadOnaA0peUR+B5XmzdvHiwWi7okJSXd/AURERERVbIaG9hVp1mzZiEvL09dzp8/X91FIiIiIipTjQ3sEhISAADZ2dlB+7Ozs9VjCQkJuHTpUtBxt9uNnJycoDSl5RH4HlczGAwwm81BCxEREVFNV2MDuyZNmiAhIQHbtm1T91mtVhw4cACpqakAgNTUVOTm5uLQoUNqmu3bt0NRFHTv3l1Ns3v3brhcLjXNli1b0KpVK8TGxlbR1RARERFVvmoN7Gw2GzIyMpCRkQHAO2AiIyMDmZmZkCQJU6ZMwf/+7//is88+w9GjRzF69GgkJiaqI2dTUlLQv39/PProo/j222+xZ88eTJ48GcOHD0diYiIA4KGHHoJer8f48eNx/PhxrF27FkuXLsW0adOq6aqJiIiIKke1Tneyc+dO9O3bt8T+MWPGYOXKlRBCYM6cOVi+fDlyc3PRs2dPLFu2DC1btlTT5uTkYPLkyfj8888hyzKGDh2KV199FVFRUWqaI0eOYNKkSTh48CDq1auHJ598EjNnzix3OTndCREREVWXisQhNWYeu5qMgR0RERFVl7CYx46IiIiIKoaBHREREVGYYGBHREREFCYY2BERERGFCQZ2RERERGGCgR0RERFRmGBgR0RERBQmGNgRERERhQkGdkRERERhgoEdERERUZhgYEdEREQUJhjYEREREYUJBnZEREREYYKBHREREVGYYGBHREREFCYY2BERERGFCQZ2RERERGGCgR0RERFRmGBgR0RERBQmGNgRERERhQkGdkRERERhgoEdERERUZhgYEdEREQUJhjYEREREYUJBnZEREREYYKBHREREVGYYGBHREREFCYY2BERERGFCQZ2RERERGGCgR0RERFRmGBgR0RERBQmGNgRERERhYkaHdg999xzkCQpaLn99tvV43a7HZMmTULdunURFRWFoUOHIjs7OyiPzMxMDBw4ECaTCXFxcZgxYwbcbndVXwoRERFRpdNWdwHK0qZNG2zdulV9rdUWF3nq1KnYuHEjPvroI1gsFkyePBn3338/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Choose one of your wanted variable with the completion\n", + "\n", "model, scenario = \"WILIAM\", \"Baseline no policies no CO2tax\"\n", - "variable = 'Final Energy|Heat'\n", - "title = 'Final Energy|Heat'\n", + "variable = 'Final Energy|Waste Management|*'\n", + "title = 'Test Title' # To complete manually\n", + "region_of_interest = 'Austria' # To complete manually you can put all the existing region that are present in the country_dict file in the path IAMC_format\\Conversion-Script\\Create_Variable_Dict. \n", "\n", - "data = df.filter(model=model, scenario=scenario, variable=variable).filter(region=\"World\", keep=False)\n", + "data = df.filter(model=model, scenario=scenario, variable=variable, region= region_of_interest)\n", + "\n", + "data.plot(color=\"variable\", title= title)\n", + "data.timeseries()\n", + "plt.legend(loc=1)\n", + "plt.tight_layout()\n", + "plt.savefig('Final Energy')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plot of a same variable differentiate by region " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABdvklEQVR4nO3dd3gU5f7+8femk04gIUBCkR5CCJ3YsFBELCgeFWkigkIUxaNH8atwQAUUC6iISFcpCspRUQRUQA8gPRCKNMEE0wQkm0I2ye78/uCwPyMtgSSTbO7Xde11zs48O/OZx01yMzPPMxbDMAxEREREpNJzM7sAERERESkdCnYiIiIiLkLBTkRERMRFKNiJiIiIuAgFOxEREREXoWAnIiIi4iIU7ERERERchIKdiIiIiItQsBMRERFxEQp2IiIVwL///W8sFkux2s6bNw+LxcLRo0fLtigRqXQU7ESk0rNYLMV6rV279or3lZuby7///e9ibatBgwbFqmvevHnn/fyECRP4z3/+c8U1i0jV4WF2ASIiV+qjjz4q8v7DDz9k9erV5yxv0aLFFe8rNzeXcePGAXDDDTdctO2UKVPIzs52vv/mm29YtGgRb731FjVr1nQuv/rqq+nfvz/PPfdckc9PmDCBe+65h969e19x3SJSNSjYiUil179//yLvf/75Z1avXn3O8vL290CWlpbGokWL6N27Nw0aNDinvYeHfiWLyJXRpVgRqRIcDgdTpkyhZcuW+Pj4UKtWLR555BH+/PPPIu22bt1Kjx49qFmzJtWqVaNhw4Y89NBDABw9epTQ0FAAxo0b57yU+u9///uK6/v7PXYWi4WcnBzmz5/v3M+DDz540W2sWLGC6667Dj8/PwICAujVqxd79uy54tpEpPLQPw9FpEp45JFHmDdvHoMHD2bkyJEcOXKEd999lx07drB+/Xo8PT3JyMige/fuhIaG8txzzxEcHMzRo0f5/PPPAQgNDWX69OkMHz6cu+66i7vvvhuAmJiYUq/3o48+4uGHH6Zjx44MGzYMgEaNGl20/aBBg+jRowevvvoqubm5TJ8+nWuvvZYdO3ac9wyhiLggQ0TExcTHxxt//fX2008/GYCxYMGCIu2+/fbbIsuXLVtmAMaWLVsuuO0//vjDAIyxY8eWuK7JkycbgHHkyJFz1o0dO9b4+69kPz8/Y9CgQee0nTt3bpHtZGVlGcHBwcbQoUOLtEtLSzOCgoLOWS4irkuXYkXE5S1ZsoSgoCC6devG8ePHna927drh7+/PmjVrAAgODgZg+fLlFBQUmFhxyaxevZpTp07Rt2/fIsfn7u5Op06dnMcnIq5Pl2JFxOUdPHiQzMxMwsLCzrs+IyMDgC5dutCnTx/GjRvHW2+9xQ033EDv3r154IEH8Pb2Ls+SS+TgwYMA3HTTTeddHxgYWJ7liIiJFOxExOU5HA7CwsJYsGDBedefHRBhsVhYunQpP//8M1999RUrV67koYce4o033uDnn3/G39+/PMsuNofDAZy5zy48PPyc9RptK1J16KddRFxeo0aN+O6777jmmmuoVq3aJdt37tyZzp0788orr7Bw4UL69evH4sWLefjhh4v9dIjSUNx9nR1UERYWRteuXcuyJBGp4HSPnYi4vHvvvRe73c5LL710zrrCwkJOnToFwJ9//olhGEXWx8bGAmCz2QDw9fUFcH6mLPn5+RVrPz169CAwMJAJEyac997AP/74owyqE5GKSGfsRMTldenShUceeYSJEyeSkJBA9+7d8fT05ODBgyxZsoSpU6dyzz33MH/+fN577z3uuusuGjVqRFZWFjNnziQwMJBbb70VgGrVqhEVFcUnn3xC06ZNCQkJITo6mujo6FKvu127dnz33Xe8+eab1KlTh4YNG9KpU6dz2gUGBjJ9+nQGDBhA27Ztuf/++wkNDSUpKYmvv/6aa665hnfffbfU6xORikfBTkSqhPfff5927doxY8YMnn/+eTw8PGjQoAH9+/fnmmuuAc4EwM2bN7N48WLS09MJCgqiY8eOLFiwgIYNGzq3NWvWLB5//HFGjRpFfn4+Y8eOLZNg9+abbzJs2DBeeOEFTp8+zaBBg84b7AAeeOAB6tSpw6RJk5g8eTI2m426dety3XXXMXjw4FKvTUQqJovx9+sOIiIiIlIp6R47ERERERehYCciIiLiIhTsRERERFyEgp2IiIiIi1CwExEREXERCnYiIiIiLqLCzGM3adIkRo8ezRNPPMGUKVM4evRokXmj/urTTz/lH//4B3D+R+4sWrSI+++/v9j7djgcpKSkEBAQUK6PCxIRERG5FMMwyMrKok6dOri5XfycXIUIdlu2bGHGjBnExMQ4l0VGRpKamlqk3QcffMDkyZPp2bNnkeVz587l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SZOwWCw8+eSTzmU33HADFoulyOvRRx8t8rmkpCR69eqFr68vYWFhPPPMMxQWFpZz9SIiInIpU747yNJtx3B3szDtgbbERASbXZLLqRCDJ7Zs2cKMGTOIiYk5Z93QoUMZP368872v7/9P9na7nV69ehEeHs6GDRtITU1l4MCBeHp6MmHChHKpXURERC7t0y3JTP3+IAAv947mxuZhJlfkmkw/Y5ednU2/fv2YOXMm1atXP2e9r68v4eHhzldgYKBz3apVq9i7dy8ff/wxsbGx9OzZk5deeolp06aRn59fnochIiIiF/BNYiqjlyUC8NiNjenbsZ7JFbku04NdfHw8vXr1omvXruddv2DBAmrWrEl0dDSjR48mNzfXuW7jxo20atWKWrVqOZf16NEDq9XKnj17LrhPm82G1Wot8hIREZHS5XAYvLn6ACMWbMfuMLi7TV3+2b2p2WW5NFMvxS5evJjt27ezZcuW865/4IEHqF+/PnXq1GHXrl08++yz7N+/n88//xyAtLS0IqEOcL5PS0u74H4nTpzIuHHjSukoRERE5O+ybYU89UkCq/amAzDk2oaM7tkci8VicmWuzbRgl5yczBNPPMHq1avx8fE5b5thw4Y5/3+rVq2oXbs2N998M4cPH6ZRo0aXve/Ro0fz1FNPOd9brVYiIyMve3siIiKubl+qlczTBXRoEIK728XD2W8nchj64VYOpGfj5e7GhLtbcU+7iHKqtGozLdht27aNjIwM2rZt61xmt9v58ccfeffdd7HZbLi7F52ssFOnTgAcOnSIRo0aER4ezubNm4u0SU8/8y+D8PDwC+7b29sbb289e05ERKQ49qVaufPd9eTbHYQH+tC7TV3uaVeXxmEB57Rdf+g48Qu3cyq3gLAAb2YMaEebeufeQy9lw7Rgd/PNN5OYmFhk2eDBg2nevDnPPvvsOaEOICEhAYDatWsDEBcXxyuvvEJGRgZhYWdG16xevZrAwECioqLK9gBERESqgPxCB099upN8uwOLBdKseby/7jDvrztMTEQQfdpGcHvrOlT39WTehqO8/PU+7A6D1pHBfDCgHbUCz39VTsqGacEuICCA6OjoIsv8/PyoUaMG0dHRHD58mIULF3LrrbdSo0YNdu3axahRo7j++uud06J0796dqKgoBgwYwGuvvUZaWhovvPAC8fHxOiMnIiJSCqZ+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FHTRNhajOPHPxTkcDlJSUggICMBisZhdTrmzWq1ERkaSnJxMYGCg2eVUCuqzy6N+Kzn12eVRv5Wc+uzylEe/GYZBVlYWderUwc3t4nfR6Ywd4ObmRkREhNllmC4wMFA/zCWkPrs86reSU59dHvVbyanPLk9Z99ulztSdpcETIiIiIi5CwU5ERETERSjYCd7e3owdOxZvb2+zS6k01GeXR/1Wcuqzy6N+Kzn12eWpaP2mwRMiIiIiLkJn7ERERERchIKdiIiIiItQsBMRERFxEQp2LmDixIl06NCBgIAAwsLC6N27N/v37y/SJi8vj/j4eGrUqIG/vz99+vQhPT29SJuRI0fSrl07vL29iY2NPe++du3axXXXXYePjw+RkZG89tprZXVYZa40+m3nzp307duXyMhIqlWrRosWLZg6deo5+1q7di1t27bF29ubxo0bM2/evLI+vDJRGn124sQJbrnlFurUqYO3tzeRkZE89thj5zzSz1X6DErvZ/SsEydOEBERgcVi4dSpU0XWuUq/lVafWSyWc16LFy8u0sZV+gxK97s2b948YmJi8PHxISwsjPj4+CLrXeXvQWn02bx58877XbNYLGRkZDjblct3zZBKr0ePHsbcuXON3bt3GwkJCcatt95q1KtXz8jOzna2efTRR43IyEjj+++/N7Zu3Wp07tzZuPrqq4ts5/HHHzfeffddY8CAAUbr1q3P2U9mZqZRq1Yto1+/fsbu3buNRYsWGdWqVTNmzJhR1odYJkqj32bPnm2MHDnSWLt2rXH48GHjo48+MqpVq2a88847zja//vqr4evrazz11FPG3r17jXfeecdwd3c3vv3223I93tJQGn128uRJ47333jO2bNliHD161Pjuu++MZs2aGX379nW2caU+M4zS+xk968477zR69uxpAMaff/7pXO5K/VZafQYYc+fONVJTU52v06dPO9e7Up8ZRun12xtvvGHUqVPHWLBggXHo0CFj586dxhdffOFc70p/D0qjz3Jzc4t8x1JTU40ePXoYXbp0cbYpr++agp0LysjIMABj3bp1hmEYxqlTpwxPT09jyZIlzjb79u0zAGPjxo3nfH7s2LHnDXbvvfeeUb16dcNmszmXPfvss0azZs1K/yBMcKX9dtaIESOMG2+80fn+X//6l9GyZcsibe677z6jR48epXwE5a+0+mzq1KlGRESE870r95lhXFm/vffee0aXLl2M77///pxg58r9drl9BhjLli274HZduc8M4/L67eTJk0a1atWM77777oLbdeW/B6Xxey0jI8Pw9PQ0PvzwQ+ey8vqu6VKsC8rMzAQgJCQEgG3btlFQUEDXrl2dbZo3b069evXYuHFjsbe7ceNGrr/+ery8vJzLevTowf79+/nzzz9LqXrzlFa/ZWZmOrcBZ/rtr9uAM/1Wkr6vqEqjz1JSUvj888/p0qWLc5kr9xlcfr/t3buX8ePH8+GHH573eZGu3G9X8l2Lj4+nZs2adOzYkTlz5mD8ZZYvV+4zuLx+W716NQ6Hg99//50WLVoQERHBvffeS3JysvMzrvz3oDR+r3344Yf4+vpyzz33OJeV13dNwc7FOBwOnnzySa655hqio6MBSEtLw8vLi+Dg4CJta9WqRVpaWrG3nZaWRq1atc7Zxtl1lVlp9duGDRv45JNPGDZsmHPZhfrNarVy+vTp0j2QcnSlfda3b198fX2pW7cugYGBzJo1y7nOVfsMLr/fbDYbffv2ZfLkydSrV++823bVfruS79r48eP59NNPWb16NX369GHEiBG88847zvWu2mdw+f3266+/4nA4mDBhAlOmTGHp0qWcPHmSbt26kZ+f79yOK/49KK2/BbNnz+aBBx6gWrVqzmXl9V3zKLUtSYUQHx/P7t27+e9//2t2KZVKafTb7t27ufPOOxk7dizdu3cvxeoqpivts7feeouxY8dy4MABRo8ezVNPPcV7771XylVWPJfbb6NHj6ZFixb079+/jCqruK7ku/biiy86/3+bNm3Iyclh8uTJjBw5sjRLrJAut98cDgcFBQW8/fbbzt9lixYtIjw8nDVr1tCjR4+yKLdCKI2/BRs3bmTfvn189NFHpVhZ8emMnQt57LHHWL58OWvWrCEiIsK5PDw8nPz8/HNGz6WnpxMeHl7s7YeHh58zcurs+5Jsp6IpjX7bu3cvN998M8OGDeOFF14osu5C/RYYGFjkX3OVSWn0WXh4OM2bN+eOO+5gxowZTJ8+ndTUVOc6V+szuLJ+++GHH1iyZAkeHh54eHhw8803A1CzZk3Gjh3r3I6r9Vtp/17r1KkTx44dw2azObfjan0GV9ZvtWvXBiAqKsq5PjQ0lJo1a5KUlOTcjqv9PSit79qsWbOIjY2lXbt2RZaX13dNwc4FGIbBY489xrJly/jhhx9o2LBhkfXt2rXD09OT77//3rls//79JCUlERcXV+z9xMXF8eOPP1JQUOBctnr1apo1a0b16tWv/EDKWWn12549e7jxxhsZNGgQr7zyyjn7iYuLK7INONNvJen7iqKsvmsOhwPA+cfWlfoMSqffPvvsM3bu3ElCQgIJCQnOS9c//fSTcxoKV+q3svquJSQkUL16dedzPV2pz6B0+u2aa65xLj/r5MmTHD9+nPr16wOu9fegNL9r2dnZfPrppwwZMuSc/ZTbd61Uh2KIKYYPH24EBQUZa9euLTLUOjc319nm0UcfNerVq2f88MMPxtatW424uDgjLi6uyHYOHjxo7Nixw3jkkUeMpk2bGjt27DB27NjhHPV06tQpo1atWsaAAQOM3bt3G4sXLzZ8fX0r5fB2wyidfktMTDRCQ0ON/v37F9lGRkaGs83ZIe7PPPOMsW/fPmPatGmVdjqF0uizr7/+2pgzZ46RmJhoHDlyxFi+fLnRokUL45prrnG2caU+M4zS+xn9qzVr1lxwuhNX6LfS6LMvv/zSmDlzppGYmGgcPHjQeO+99wxfX19jzJgxzjau1GeGUXrftTvvvNNo2bKlsX79eiMxMdG47bbbjKioKCM/P98wDNf6e1CaP5+zZs0yfHx8ivxcnlVe3zUFOxcAnPc1d+5cZ5vTp08bI0aMMKpXr274+voad911l5GamlpkO126dDnvdo4cOeJss3PnTuPaa681vL29jbp16xqTJk0qp6MsfaXRb2PHjj3vNurXr19kX2vWrDFiY2MNLy8v46qrriqyj8qkNPrshx9+MOLi4oygoCDDx8fHaNKkifHss8+e84vQVfrMMErvZ/Svzhfszi53hX4rjT5bsWKFERsba/j7+xt+fn5G69atjffff9+w2+1F9uUqfWYYpfddy8zMNB566CEjODjYCAkJMe666y4jKSmpSBtX+XtQmj+fcXFxxgMPPHDBfZXHd83yv4MSERERkUpO99iJiIiIuAgFOxEREREXoWAnIiIi4iIU7ERERERchIKdiIiIiItQsBMRERFxEQp2IiIiIi5CwU5ERETERSjYiYiIiLgIBTsRkQswDIOuXbvSo0ePc9a99957BAcHc+zYMRMqExE5PwU7EZELsFgszJ07l02bNjFjxgzn8iNHjvCvf/2Ld955h4iIiFLdZ0FBQaluT0SqFgU7EZGLiIyMZOrUqTz99NMcOXIEwzAYMmQI3bt3p02bNvTs2RN/f39q1arFgAEDOH78uPOz3377Lddeey3BwcHUqFGD2267jcOHDzvXHz16FIvFwieffEKXLl3w8fFhwYIFZhymiLgIi2EYhtlFiIhUdL179yYzM5O7776bl156iT179tCyZUsefvhhBg4cyOnTp3n22WcpLCzkhx9+AOCzzz7DYrEQExNDdnY2Y8aM4ejRoyQkJODm5sbRo0dp2LAhDRo04I033qBNmzb4+PhQu3Ztk49WRCorBTsRkWLIyMigZcuWnDx5ks8++4zdu3fz008/sXLlSmebY8eOERkZyf79+2natOk52zh+/DihoaEkJiYSHR3tDHZTpkzhiSeeKM/DEREXpUuxIiLFEBYWxiOPPEKLFi3o3bs3O3fuZM2aNfj7+ztfzZs3B3Bebj148CB9+/blqquuIjAwkAYNGgCQlJRUZNvt27cv12MREdflYXYBIiKVhYeHBx4eZ35tZmdnc/vtt/Pqq6+e0+7spdTbb7+d+vXrM3PmTOrUqYPD4SA6Opr8/Pwi7f38/Mq+eBGpEhTsREQuQ9u2bfnss89o0KCBM+z91YkTJ9i/fz8zZ87kuuuuA+C///1veZcpIlWMLsWKiFyG+Ph4Tp48Sd++fdmyZQuHDx9m5cqVDB48GLvdTvXq1alRowYffPABhw4d4ocffuCpp54yu2wRcXEKdiIil6FOnTqsX78eu91O9+7dadWqFU8++STBwcG4ubnh5ubG4sWL2bZtG9HR0YwaNYrJkyebXbaIuDiNihURERFxETpjJyIiIuIiFOxEREREXISCnYiIiIiLULATERERcREKdiIiIiIuQsFORERExEUo2ImIiIi4CAU7ERERERehYCciIiLiIhTsRERERFyEgp2IiIiIi1CwExEREXER/w+1NVnNAr5I6AAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model, scenario = \"WILIAM\", \"Baseline no policies no CO2tax\"\n", + "variable = 'Final Energy|Waste Management|Heat' # To change the variable you want to plot you can use the tree searching above to find all the available variables.\n", + "title = 'Test Title' # To complete manually\n", + "\n", + "\n", + "# If you want to remove the region World, you need to add this at the end of the above line .filter(region=\"World\", keep=False)\n", + "data = df.filter(model=model, scenario=scenario, variable=variable)\n", + "\n", + "data.plot(color=\"region\", title=title)\n", + "data.timeseries()\n", + "plt.legend(loc=1)\n", + "plt.tight_layout()\n", + "plt.savefig('Final Energy')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plot of a same variable with the same region differentiate by scenario " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = \"WILIAM\" \n", + "variable = 'Final Energy|Waste Management|Heat' # To change the variable you want to plot you can use the tree searching above to find all the available variables.\n", + "title = 'Test Title' # To complete manually\n", + "region = 'Austria' #To complete manually\n", "\n", + "# If you want to remove the region World, you need to add this at the end of the above line .filter(region=\"World\", keep=False)\n", + "data = df.filter(model=model, variable=variable, region=region)\n", "\n", - "data.plot(color=\"region\", title= title)\n", + "data.plot(color=\"scenario\", title=title)\n", "data.timeseries()\n", "plt.legend(loc=1)\n", "plt.tight_layout()\n", + "plt.savefig('Final Energy')\n", "plt.show()" ] }