import streamlit as st import warnings import plotly.express as px import pandas as pd from datetime import datetime, timedelta import plotly.graph_objects as go from streamlit_option_menu import option_menu from plotly.subplots import make_subplots from functions import create_combined_time_series from functions import (create_area_chart, create_combined_time_series, create_area_mixte, aggregation_menu, create_column_mapping, group_by_src, sum_columns_with_suffix, aggregate_by_country, process_data_by_month, create_pivot_table, create_heatmap, bar_group_consumption, bar_group_ghg,process_ghg_data_by_month, bar_consumption, bar_ghg,download_data_as_csv) warnings.filterwarnings("ignore", category=DeprecationWarning) # Configuration de la page Streamlit st.set_page_config(page_title="Ecodynelec", page_icon=":bar_chart:", layout="wide") # Create three columns, and place the logo in the rightmost column logocol1, logocol2, logocol3 = st.columns([1, 8, 1]) # You can adjust these ratios to fit your needs # Place the logo in the right column (col3) with logocol1: st.image('data/Logo_colored_variant.png', use_container_width=False,width=300) # Set the logo to fit the column width with logocol3: st.image('data/IE_HEIG-VD_logotype_rouge_rvb.svg', use_container_width=True) # Sidebar Menu with Main Options with st.sidebar: main_option = option_menu( menu_title="Main Menu", # Main menu title options=["Mix data", "Applications", "Methodology"], # Main menu options icons=["database", "layers", "gear", "info-circle"], # Optional icons menu_icon="cast", # Main menu icon default_index=0, # Default active index ) if main_option == "Applications": applications_option = option_menu( menu_title="Applications", # Applications submenu options=["Bâtiment", "PAC"], # Submenu options icons=["building", "plug"], # Submenu icons menu_icon="apps", # Submenu icon default_index=0, orientation="vertical" ) else: applications_option = None # Données flows flows_FR = pd.read_parquet("./data/flows/flows_FR.parquet.gz") flows_DE = pd.read_parquet("./data/flows/flows_DE.parquet.gz") flows_AT = pd.read_parquet("./data/flows/flows_AT.parquet.gz") flows_CH = pd.read_parquet("./data/flows/flows_CH.parquet.gz") flows_IT = pd.read_parquet("./data/flows/flows_IT.parquet.gz") # Données de consommation totale tot_consumption_FR = pd.read_parquet("./data/consumptions/tot_consumption_FR.parquet.gz") tot_consumption_DE = pd.read_parquet("./data/consumptions/tot_consumption_DE.parquet.gz") tot_consumption_AT = pd.read_parquet("./data/consumptions/tot_consumption_AT.parquet.gz") tot_consumption_CH = pd.read_parquet("./data/consumptions/tot_consumption_CH.parquet.gz") tot_consumption_IT = pd.read_parquet("./data/consumptions/tot_consumption_IT.parquet.gz") # Données de consommation by src raw_consumption_by_src_FR = pd.read_parquet("./data/consumptions/raw_consumption_by_src_FR.parquet.gz") raw_consumption_by_src_DE = pd.read_parquet("./data/consumptions/raw_consumption_by_src_DE.parquet.gz") raw_consumption_by_src_AT = pd.read_parquet("./data/consumptions/raw_consumption_by_src_AT.parquet.gz") raw_consumption_by_src_CH = pd.read_parquet("./data/consumptions/raw_consumption_by_src_CH.parquet.gz") raw_consumption_by_src_IT = pd.read_parquet("./data/consumptions/raw_consumption_by_src_IT.parquet.gz") # electricity_mixs tot_electricity_mix_CH = pd.read_parquet("./data/electricity_mixs/electricity_mix_CH.parquet.gz") tot_electricity_mix_AT = pd.read_parquet("./data/electricity_mixs/electricity_mix_AT.parquet.gz") tot_electricity_mix_DE = pd.read_parquet("./data/electricity_mixs/electricity_mix_DE.parquet.gz") tot_electricity_mix_FR = pd.read_parquet("./data/electricity_mixs/electricity_mix_FR.parquet.gz") tot_electricity_mix_IT = pd.read_parquet("./data/electricity_mixs/electricity_mix_IT.parquet.gz") # electricity_impacts tot_electricity_impact_CH = pd.read_parquet("./data/electricity_impacts/electricity_impact_CH.parquet.gz") tot_electricity_impact_AT = pd.read_parquet("./data/electricity_impacts/electricity_impact_AT.parquet.gz") tot_electricity_impact_DE = pd.read_parquet("./data/electricity_impacts/electricity_impact_DE.parquet.gz") tot_electricity_impact_FR = pd.read_parquet("./data/electricity_impacts/electricity_impact_FR.parquet.gz") tot_electricity_impact_IT = pd.read_parquet("./data/electricity_impacts/electricity_impact_IT.parquet.gz") # electricity_impacts by source electricity_impact_by_src_CH = pd.read_parquet("./data/electricity_impacts/electricity_impact_by_src_CH.parquet.gz") electricity_impact_by_src_AT = pd.read_parquet("./data/electricity_impacts/electricity_impact_by_src_AT.parquet.gz") electricity_impact_by_src_DE = pd.read_parquet("./data/electricity_impacts/electricity_impact_by_src_DE.parquet.gz") electricity_impact_by_src_FR = pd.read_parquet("./data/electricity_impacts/electricity_impact_by_src_FR.parquet.gz") electricity_impact_by_src_IT = pd.read_parquet("./data/electricity_impacts/electricity_impact_by_src_IT.parquet.gz") # Technologies Techno_FR = pd.read_parquet("./data/technologies/technologies_FR.parquet.gz") Techno_AT = pd.read_parquet("./data/technologies/technologies_AT.parquet.gz") Techno_DE = pd.read_parquet("./data/technologies/technologies_DE.parquet.gz") Techno_CH = pd.read_parquet("./data/technologies/technologies_CH.parquet.gz") Techno_IT = pd.read_parquet("./data/technologies/technologies_IT.parquet.gz") # Technologies impact Techno_impact_FR = pd.read_parquet("./data/technologies/Techno_impact_FR.parquet.gz") Techno_impact_AT = pd.read_parquet("./data/technologies/Techno_impact_AT.parquet.gz") Techno_impact_DE = pd.read_parquet("./data/technologies/Techno_impact_DE.parquet.gz") Techno_impact_CH = pd.read_parquet("./data/technologies/Techno_impact_CH.parquet.gz") Techno_impact_IT = pd.read_parquet("./data/technologies/Techno_impact_IT.parquet.gz") for df in [flows_FR, flows_DE, flows_AT, flows_CH, tot_consumption_FR, tot_consumption_DE, tot_consumption_AT, tot_consumption_CH, tot_electricity_mix_CH,tot_electricity_mix_AT,tot_electricity_mix_DE,tot_electricity_mix_FR,tot_electricity_impact_CH, tot_electricity_impact_AT,tot_electricity_impact_DE,tot_electricity_impact_FR,raw_consumption_by_src_FR,raw_consumption_by_src_CH, raw_consumption_by_src_DE,raw_consumption_by_src_AT,electricity_impact_by_src_CH,electricity_impact_by_src_AT, electricity_impact_by_src_DE,electricity_impact_by_src_FR,Techno_FR,Techno_AT,Techno_DE,Techno_CH,Techno_impact_FR,Techno_impact_AT, Techno_impact_DE,Techno_impact_CH,flows_IT,tot_consumption_IT,raw_consumption_by_src_IT,tot_electricity_mix_IT, tot_electricity_impact_IT,electricity_impact_by_src_IT,Techno_IT,Techno_impact_IT]: df.rename(columns={'Unnamed: 0': 'Date'}, inplace=True) df['Date'] = pd.to_datetime(df['Date']) df.set_index('Date', inplace=True) for df in [flows_FR, flows_DE, flows_AT, flows_CH,flows_IT]: df['total_consumption']=df['production']+df['imports']-df['exports'] # Utilisation de colonnes pour une mise en page personnalisée col1, col2, col3, col4, col5 = st.columns(5) # Créer 5 colonnes years = list(range(2016, 2023)) months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] Countries = {'Switzerland': 'CH', 'France': 'FR', 'Germany': 'DE', 'Austria': 'AT','Italy':'IT'} ordered_countries = ['CH', 'DE', 'FR', 'AT', 'IT', 'Other'] ordered_colors = ['blue','green', 'red', 'purple', 'orange', 'yellow' ] month_dict = {1: "January", 2: "February", 3: "March", 4: "April",5: "May", 6: "June", 7: "July", 8: "August",9: "September", 10: "October", 11: "November", 12: "December"} # Dictionary of dataframes with Italy added dataframes_flows = {'Switzerland': flows_CH, 'France': flows_FR, 'Germany': flows_DE, 'Austria': flows_AT, 'Italy': flows_IT } dataframes_tot_consumption = { 'Switzerland': tot_consumption_CH, 'France': tot_consumption_FR, 'Germany': tot_consumption_DE, 'Austria': tot_consumption_AT, 'Italy': tot_consumption_IT } dataframes_raw_consumption_by_src = { 'Switzerland': raw_consumption_by_src_CH, 'France': raw_consumption_by_src_FR, 'Germany': raw_consumption_by_src_DE, 'Austria': raw_consumption_by_src_AT, 'Italy': raw_consumption_by_src_IT } dataframes_tot_electricity_mix = { 'Switzerland': tot_electricity_mix_CH, 'France': tot_electricity_mix_FR, 'Germany': tot_electricity_mix_DE, 'Austria': tot_electricity_mix_AT, 'Italy': tot_electricity_mix_IT } dataframes_tot_electricity_impact = { 'Switzerland': tot_electricity_impact_CH, 'France': tot_electricity_impact_FR, 'Germany': tot_electricity_impact_DE, 'Austria': tot_electricity_impact_AT, 'Italy': tot_electricity_impact_IT } dataframes_electricity_impact_by_src = { 'Switzerland': electricity_impact_by_src_CH, 'France': electricity_impact_by_src_FR, 'Germany': electricity_impact_by_src_DE, 'Austria': electricity_impact_by_src_AT, 'Italy': electricity_impact_by_src_IT } dataframes_techno = { 'Switzerland': Techno_CH, 'France': Techno_FR, 'Germany': Techno_DE, 'Austria': Techno_AT, 'Italy': Techno_IT } dataframes_techno_impact = { 'Switzerland': Techno_impact_CH, 'France': Techno_impact_FR, 'Germany': Techno_impact_DE, 'Austria': Techno_impact_AT, 'Italy': Techno_impact_IT } with col1: selected_country_name = st.selectbox('Choose a country:', list(Countries.keys())) with col2: resolution = st.selectbox('Resolution:', ['Annual', 'Monthly','Daily','Hourly']) # Récupération du DataFrame basé sur le pays sélectionné tot_consumption_selected_df = dataframes_tot_consumption [selected_country_name] raw_consumption_by_src_selected_df = dataframes_raw_consumption_by_src [selected_country_name] flows_selected_df =dataframes_flows[selected_country_name] tot_electricity_mix_selected_df = dataframes_tot_electricity_mix [selected_country_name] tot_electricity_impact_selected_df = dataframes_tot_electricity_impact [selected_country_name] electricity_impact_by_src_selected_df = dataframes_electricity_impact_by_src [selected_country_name] techno_selected_df=dataframes_techno [selected_country_name] techno_impact_selected_df=dataframes_techno_impact [selected_country_name] if main_option == "Mix data": if resolution == 'Annual': flows_selected_df['exports'] = -flows_selected_df['exports'] flows_annual_df = flows_selected_df.resample('Y').sum() / 1000 flows_annual_df.index = flows_annual_df.index.year tot_consumption_annual_df = tot_consumption_selected_df['sum'].resample('Y').sum() / 1000 col1, col2 = st.columns(2) with col1: bar_group_consumption(flows_annual_df, title=f'Yearly Time Series of Production, Imports, and Exports in {selected_country_name} ', text="GWh", y_cols=['total_consumption', 'production', 'imports', 'exports'], barmode='group') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(flows_annual_df, f"Yearly_Time_Series_of_Production_Imports_and_Exports_in_{selected_country_name.replace(' ', '_')}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This bar chart represents the yearly time series of production, imports, exports, and total electricity consumption in **{selected_country_name}**, measured in gigawatt-hours (GWh), over a period from 2016 to 2022. **Data Source:** EcoDynElec """) # pour les impacts consumer_impact_annual = tot_electricity_impact_selected_df['sum'].resample('Y').mean() consumer_impact_annual.index = consumer_impact_annual.index.year with col2: bar_group_ghg(consumer_impact_annual, f'Yearly average of GHG emissions in {selected_country_name}') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(consumer_impact_annual, f"Yearly_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This bar chart represents the yearly average of greenhouse gas (GHG) emissions in **{selected_country_name}**, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh), from 2016 to 2022. **Data Source:** EcoDynElec """) selection = aggregation_menu() if selection == "Mixed": raw_consumption_by_src_annual_df = raw_consumption_by_src_selected_df.resample('Y').sum() / 1000 raw_consumption_by_src_annual_df = aggregate_by_country(selected_country_name,raw_consumption_by_src_annual_df) raw_consumption_by_src_annual_df.index = raw_consumption_by_src_annual_df.index.year col1, col2 = st.columns(2) with col1: bar_consumption(raw_consumption_by_src_annual_df,title=f'Yearly consumption by source in {selected_country_name}') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(raw_consumption_by_src_annual_df, f"Yearly_consumption_by_source_in_{selected_country_name.replace(' ', '_')}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart represents the yearly electricity consumption by source in **{selected_country_name}** from 2016 to 2022, measured in gigawatt-hours (GWh). Each bar is divided into segments that correspond to different energy sources contributing to the overall electricity consumption. **Data Source:** EcoDynElec """) electricity_impact_by_src_annual_df = electricity_impact_by_src_selected_df.resample('Y').mean() electricity_impact_by_src_annual_df = aggregate_by_country(selected_country_name,electricity_impact_by_src_annual_df) electricity_impact_by_src_annual_df.index = electricity_impact_by_src_annual_df.index.year with col2: bar_ghg(electricity_impact_by_src_annual_df, f'Yearly average of GHG emissions in {selected_country_name} by source') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(electricity_impact_by_src_annual_df, f"Yearly_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}_by_source.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart illustrates the yearly average of greenhouse gas (GHG) emissions in **{selected_country_name}** by energy source, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh), from 2016 to 2022. Each bar is segmented to show the GHG emissions contribution from various energy sources used in **{selected_country_name}**'s electricity consumption. **Data Source:** EcoDynElec """) if selection == "By Technology": col1, col2 = st.columns(2) techno_annual_df = techno_selected_df.resample('Y').sum() / 1000 techno_annual_df.index = techno_annual_df.index.year col1, col2 = st.columns(2) with col1: #bar_consumption(techno_annual_df,title=f'Yearly consumption of {selected_technologie} in {selected_country_name}') bar_group_consumption(techno_annual_df, title=f'Yearly consumption by technology in {selected_country_name}', text="GWh", y_cols=techno_annual_df.columns,barmode='stack') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(techno_annual_df, f"Yearly_consumption_by_technology_in_{selected_country_name.replace(' ', '_')}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart represents the yearly electricity consumption by technology in **{selected_country_name}** from 2016 to 2022, measured in gigawatt-hours (GWh). Each bar is divided into segments that correspond to the contributions of various energy technologies to the total electricity consumption. **Data Source:** EcoDynElec """) techno_impact_annual_df=techno_impact_selected_df.resample('Y').mean() techno_impact_annual_df.index = techno_impact_annual_df.index.year with col2: bar_group_consumption(techno_impact_annual_df, title=f'Yearly average of GHG emissions by technology in {selected_country_name}', text="gCO2eq/kWh", y_cols=techno_impact_annual_df.columns, barmode='stack') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(techno_impact_annual_df, f"Yearly_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}_by_technology.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart represents the yearly average of greenhouse gas (GHG) emissions by technology in **{selected_country_name}** from 2016 to 2022, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). Each bar is divided into segments representing the GHG emissions contributions from various energy technologies. **Data Source:** EcoDynElec """) if selection == "Country of origin": mix_import_annual = tot_electricity_mix_selected_df.drop(['sum'], axis=1) mix_import_annual = mix_import_annual.multiply(tot_consumption_selected_df['sum'], axis='index').resample('Y').sum() / 1000 mix_import_annual.index = mix_import_annual.index.year col1, col2 = st.columns(2) with col1: bar_group_consumption(mix_import_annual, title=f"Origins of yearly Swiss consumer mix in {selected_country_name}", text="GWh", y_cols=ordered_countries, barmode='stack') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(mix_import_annual, f"Origins_of_yearly_Swiss_consumer_mix_in_{selected_country_name.replace(' ', '_')}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart illustrates the origins of the yearly Swiss consumer electricity mix from 2016 to 2022, measured in gigawatt-hours (GWh). Each bar is divided into segments representing the contributions of electricity sourced from **{selected_country_name}** and its neighboring countries. **Data Source:** EcoDynElec """) mix_impact_annual = tot_electricity_impact_selected_df.drop(['sum'], axis=1).resample('Y').mean() mix_impact_annual.index=mix_impact_annual.index.year with col2: bar_group_consumption(mix_impact_annual,title=f'Yearly average of GHG emissions in {selected_country_name} by country', text="gCO2eq/kWh",y_cols=ordered_countries, barmode='stack') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(mix_impact_annual, f"Yearly_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}_by_country.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart represents the yearly average of greenhouse gas (GHG) emissions in **{selected_country_name}** by country from 2016 to 2022, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). The stacked bars show the contributions of GHG emissions from domestic electricity production and imports from neighboring countries. **Data Source:** EcoDynElec """) elif resolution == 'Monthly': with col3: # Utilisation d'un slider pour choisir une année selected_year = st.slider('Choose a year:', min_value=min(years), max_value=max(years), value=min(years)) #flows flows_selected_df['exports'] = -flows_selected_df['exports'] flows_monthly_df = flows_selected_df[(flows_selected_df.index.year == selected_year)] flows_monthly_df = flows_monthly_df.resample('M').sum() / 1000 flows_monthly_df.index = flows_monthly_df.index.month.map(lambda x: month_dict[x]) #tot_consumption tot_consumption_monthly_df = tot_consumption_selected_df[(tot_consumption_selected_df.index.year == selected_year)] tot_consumption_monthly_df = tot_consumption_monthly_df['sum'].resample('M').sum() / 1000 col1, col2 = st.columns(2) with col1: bar_group_consumption(flows_monthly_df, title=f'Monthly Time Series of Production, Imports, and Exports in {selected_country_name} in {selected_year} ', text="GWh", y_cols=['total_consumption', 'production', 'imports', 'exports'], barmode='group') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(flows_monthly_df, f"Monthly_Time_Series_of_Production_Imports_and_Exports_in_{selected_country_name.replace(' ', '_')}_in_{selected_year}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This bar chart represents the monthly time series of production, imports, exports, and total electricity consumption in **{selected_country_name}**, measured in gigawatt-hours (GWh), over a period from 2016 to 2022. **Data Source:** EcoDynElec """) # pour les impacts tot_electricity_impact_monthly_df=tot_electricity_impact_selected_df[(tot_electricity_impact_selected_df.index.year == selected_year)] monthly_consumer_impact = tot_electricity_impact_monthly_df['sum'].resample('M').mean() monthly_consumer_impact.index = monthly_consumer_impact.index.month.map(lambda x: month_dict[x]) with col2: bar_group_ghg(monthly_consumer_impact, f'Monthly average of GHG emissions in {selected_country_name} in {selected_year} ') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(monthly_consumer_impact, f"Monthly_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}_in_{selected_year}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This bar chart represents the monthly average of greenhouse gas (GHG) emissions in **{selected_country_name}**, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh), from 2016 to 2022. **Data Source:** EcoDynElec """) selection = aggregation_menu() if selection == "Mixed": raw_consumption_by_src_monthly_df = process_data_by_month(raw_consumption_by_src_selected_df, selected_year, selected_country_name, month_dict, aggregate_by_country) electricity_impact_by_src_monthly_df = process_ghg_data_by_month(electricity_impact_by_src_selected_df, selected_year, selected_country_name, month_dict, aggregate_by_country) col1, col2 = st.columns(2) with col1: bar_consumption(raw_consumption_by_src_monthly_df,title=f'Monthly consumption by source in {selected_country_name} in {selected_year}') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(raw_consumption_by_src_monthly_df, f"Monthly_consumption_by_source_in_{selected_country_name.replace(' ', '_')}_in_{selected_year}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart represents the monthly electricity consumption by source in **{selected_country_name}** from 2016 to 2022, measured in gigawatt-hours (GWh). Each bar is divided into segments that correspond to different energy sources contributing to the overall electricity consumption. **Data Source:** EcoDynElec """) with col2: bar_ghg(electricity_impact_by_src_monthly_df,f'Monthly average of GHG emissions in {selected_country_name} in {selected_year} by source') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(electricity_impact_by_src_monthly_df, f"Monthly_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}_in_{selected_year}_by_source.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart illustrates the monthly average of greenhouse gas (GHG) emissions in **{selected_country_name}** by energy source, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh), from 2016 to 2022. Each bar is segmented to show the GHG emissions contribution from various energy sources used in **{selected_country_name}**'s electricity consumption. **Data Source:** EcoDynElec """) if selection == "By Technology": techno_monthly_df = techno_selected_df.loc[techno_selected_df.index.year == selected_year] techno_monthly_df = techno_monthly_df.resample('M').sum() / 1000 techno_monthly_df.index = techno_monthly_df.index.month.map(lambda x: month_dict[x]) col1, col2 = st.columns(2) with col1: bar_consumption(techno_monthly_df,title=f'Monthly consumption by technology in {selected_country_name} in {selected_year}') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(techno_monthly_df, f"Monthly_consumption_by_technology_in_{selected_country_name.replace(' ', '_')}_in_{selected_year}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart represents the monthly electricity consumption by technology in **{selected_country_name}** from 2016 to 2022, measured in gigawatt-hours (GWh). Each bar is divided into segments that correspond to the contributions of various energy technologies to the total electricity consumption. **Data Source:** EcoDynElec """) techno_impact_monthly_df = techno_impact_selected_df.loc[techno_impact_selected_df.index.year == selected_year] techno_impact_monthly_df = techno_impact_monthly_df.resample('M').mean() techno_impact_monthly_df.index = techno_impact_monthly_df.index.month.map(lambda x: month_dict[x]) with col2: bar_ghg(techno_impact_monthly_df,f'Monthly average of GHG emissions by technology in {selected_country_name} in {selected_year}') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(techno_impact_monthly_df, f"Monthly_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}_in_{selected_year}_by_technology.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart represents the monthly average of greenhouse gas (GHG) emissions by technology in **{selected_country_name}** from 2016 to 2022, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). Each bar is divided into segments representing the GHG emissions contributions from various energy technologies. **Data Source:** EcoDynElec """) if selection == "Country of origin": tot_electricity_mix_monthly_df = tot_electricity_mix_selected_df[(tot_electricity_mix_selected_df.index.year == selected_year)] monthly_mix_import = tot_electricity_mix_monthly_df.drop(['sum'], axis=1) monthly_mix_import = monthly_mix_import.multiply(tot_consumption_monthly_df, axis='index').resample('M').sum() / 1000 monthly_mix_import.index = monthly_mix_import.index.month.map(lambda x: month_dict[x]) col1, col2 = st.columns(2) with col1: bar_group_consumption(monthly_mix_import, title=f"Origins of monthly consumer mix by country in {selected_country_name} in {selected_year}", text="GWh", y_cols=ordered_countries, barmode='stack') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(monthly_mix_import, f"Monthly_consumption_by_country_in_{selected_country_name.replace(' ', '_')}_in_{selected_year}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart illustrates the origins of the monthly Swiss consumer electricity mix from 2016 to 2022, measured in gigawatt-hours (GWh). Each bar is divided into segments representing the contributions of electricity sourced from **{selected_country_name}** and its neighboring countries. **Data Source:** EcoDynElec """) tot_electricity_impact_monthly_df = tot_electricity_impact_selected_df[(tot_electricity_impact_selected_df.index.year == selected_year)] monthly_mix_impact = tot_electricity_impact_monthly_df.drop(['sum'], axis=1).resample('M').mean() monthly_mix_impact.index = monthly_mix_impact.index.month.map(lambda x: month_dict[x]) with col2: bar_group_consumption(monthly_mix_impact, title=f'Monthly average of GHG emissions by country in {selected_country_name} in {selected_year}', text="gCO2eq/kWh", y_cols=ordered_countries, barmode='stack') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(monthly_mix_impact, f"Monthly_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}_in_{selected_year}_by_country.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked bar chart represents the monthly average of greenhouse gas (GHG) emissions in **{selected_country_name}** by country from 2016 to 2022, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). The stacked bars show the contributions of GHG emissions from domestic electricity production and imports from neighboring countries. **Data Source:** EcoDynElec """) elif resolution == 'Daily': # Supposons que flows_selected_df est déjà défini et correctement configuré min_date = flows_selected_df.index.min() max_date = flows_selected_df.index.max() # Positionnement des widgets dans les colonnes si déjà définies with col3: # Exemple de placement dans la colonne start_date, end_date = st.date_input( "Select a date range:", [min_date, max_date], # Utilisez les extrêmes de l'index comme valeur par défaut min_value=min_date, # Date minimale extraite de l'index max_value=max_date, # Date maximale extraite de l'index help="You can select a range within the available dates in the data." ) # Ajustez end_date pour inclure toute la journée start_date = pd.Timestamp(start_date) end_date = pd.Timestamp(end_date) + pd.Timedelta(days=1, seconds=-1) # Filtrer le DataFrame selon la plage sélectionnée flows_daily= flows_selected_df.loc[(flows_selected_df.index >= start_date) & (flows_selected_df.index <= end_date)].resample('D').sum() / 1000 tot_consumption_daily= tot_consumption_selected_df.loc[(tot_consumption_selected_df.index >= start_date) & (tot_consumption_selected_df.index <= end_date)].resample('D').sum() tot_consumption_daily=tot_consumption_daily['sum'].resample('D').sum() / 1000 col1, col2 = st.columns(2) with col1: create_combined_time_series(flows_daily, tot_consumption_daily, title=f'Daily Time Series of Production, Imports, and Exports in {selected_country_name} ') # Ajouter des colonnes pour les boutons à l'intérieur de col1 download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(flows_daily, f"Daily_Time_Series_of_Production_Imports_and_Exports_in_{selected_country_name.replace(' ', '_')}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This chart presents the daily evolution of energy flows in **{selected_country_name}**, including production, imports, exports, and total electricity consumption. **Data Source:** EcoDynElec """) # for impacts tot_electricity_impact_daily_df = tot_electricity_impact_selected_df.loc[ (tot_electricity_impact_selected_df.index >= start_date) & (tot_electricity_impact_selected_df.index <= end_date) ] # disp the chart based on user's choice with col2: # Create a line plot (assuming you want to use Plotly) fig = px.line(tot_electricity_impact_daily_df.resample('D').mean(), x=tot_electricity_impact_daily_df.resample('D').mean().index, y='sum', title=f'Line Plot of GHG Emissions in {selected_country_name}') fig.update_layout(legend_title_text='') fig.update_traces(hovertemplate='%{y:.0f} gCO2eq/KWh
Date: %{x|%a %d %b %Y}') fig.add_annotation(text="© Ecodynelec-HEIG-VD", xref="paper", yref="paper", x=0, y=-0.2, showarrow=False, font=dict(size=12, color="gray"), xanchor='left', yanchor='bottom') # Add annotation for unit fig.add_annotation(text="gCO2eq/KWh", xref="paper", yref="paper", x=-0.05, y=1.1, showarrow=False, font=dict(size=12)) fig.update_xaxes(title_text='', tickformat='%a %d %b %y') fig.update_yaxes(title_text='') st.plotly_chart(fig) download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(tot_electricity_impact_daily_df, f"Daily_Line_Plot_of_GHG_Emissions_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart's Description:** This line plot visualizes the temporal evolution of greenhouse gas (GHG) emissions in **{selected_country_name}**, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). The x-axis represents the time series data over several days, while the y-axis indicates the magnitude of GHG emissions **Data Source:** EcoDynElec """) selection = aggregation_menu() if selection == "Mixed": raw_consumption_by_src_daily_df = raw_consumption_by_src_selected_df.loc[(raw_consumption_by_src_selected_df.index >= start_date) & ( raw_consumption_by_src_selected_df.index <= end_date)].resample('D').sum() raw_consumption_by_src_daily_df = raw_consumption_by_src_daily_df.resample('D').sum() / 1000 raw_consumption_by_src_daily_df = aggregate_by_country(selected_country_name, raw_consumption_by_src_daily_df) col1, col2 = st.columns(2) with col1: create_area_mixte(raw_consumption_by_src_daily_df, title=f'Daily consumption by source in {selected_country_name}',text='GWh') download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(raw_consumption_by_src_daily_df, f"Daily_consumption_by_source_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart illustrates the daily electricity consumption by energy source in **{selected_country_name}** over the selected time period. Each area in the plot corresponds to a different energy source contributing to the total electricity consumption. **Data Source:** EcoDynElec """) electricity_impact_by_src_daily_df = electricity_impact_by_src_selected_df.loc[(electricity_impact_by_src_selected_df.index >= start_date) & ( electricity_impact_by_src_selected_df.index <= end_date)] electricity_impact_by_src_daily_df = electricity_impact_by_src_daily_df.resample('D').mean() electricity_impact_by_src_daily_df = aggregate_by_country(selected_country_name, electricity_impact_by_src_daily_df) with col2: create_area_mixte(electricity_impact_by_src_daily_df,title=f'Daily average of GHG emissions by source in {selected_country_name}',text='gCO2/KWh') download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(electricity_impact_by_src_daily_df, f"Daily_average_of_GHG_emissions_by_source_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart visualizes the daily average of greenhouse gas (GHG) emissions by energy source in **{selected_country_name}** over the selected period. Each color band represents the contribution of a different energy source to the total GHG emissions, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh) **Data Source:** EcoDynElec """) if selection == "By Technology": col1, col2 = st.columns(2) # Crée deux colonnes pour les graphiques with col1: techno_daily_df=(techno_selected_df.loc[(techno_selected_df.index >= start_date) & (techno_selected_df.index <= end_date)] .resample('D').sum()) / 1000 #create_time_series(techno_daily_df,title=f'Daily average of GHG emissions by source in {selected_country_name}') create_area_mixte(techno_daily_df, title=f'Daily consumption by technology in {selected_country_name}',text='GWh') download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(techno_daily_df, f"Daily_consumption_by_technology_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart illustrates the daily electricity consumption by technology in **{selected_country_name}** over the selected time period. Each area in the plot corresponds to a different energy source contributing to the total electricity consumption. **Data Source:** EcoDynElec """) techno_impact_daily_df = techno_impact_selected_df.loc[(techno_impact_selected_df.index >= start_date) & (techno_impact_selected_df.index <= end_date)].resample('D').mean() with col2: create_area_mixte(techno_impact_daily_df, title=f'Daily average of GHG emissions by technology in {selected_country_name}', text='gCO2eq/KWh') download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(techno_impact_daily_df, f"Daily_average_of_GHG_emissions_by_technology_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart visualizes the daily average of greenhouse gas (GHG) emissions by technology in **{selected_country_name}** over the selected period. Each color band represents the contribution of a different energy source to the total GHG emissions, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh) **Data Source:** EcoDynElec """) if selection == "Country of origin": tot_electricity_mix_daily_df = tot_electricity_mix_selected_df.loc[ (tot_electricity_mix_selected_df.index >= start_date) & (tot_electricity_mix_selected_df.index <= end_date)].resample('D').sum() daily_mix_import = tot_electricity_mix_daily_df.drop(['sum'], axis=1) daily_mix_import = daily_mix_import.multiply(tot_consumption_daily, axis='index').resample('D').sum() / 1000 col1, col2 = st.columns(2) with col1: create_area_chart(daily_mix_import,title=f"Origins of daily consumer mix by country in {selected_country_name}") download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(daily_mix_import, f"Daily_consumption_by_country_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart displays the origins of the daily consumer electricity mix by country in Switzerland over the selected time period. Each color band represents the contribution of electricity imports from different countries to the total electricity mix consumed in **{selected_country_name}**. **Data Source:** EcoDynElec """) tot_electricity_impact_daily_df = tot_electricity_impact_selected_df[(tot_electricity_impact_selected_df.index >= start_date) & (tot_electricity_impact_selected_df.index <= end_date)] daily_mix_impact = tot_electricity_impact_daily_df.drop(['sum'], axis=1).resample('D').mean() with col2: create_area_chart(daily_mix_impact, title=f'Daily average of GHG emissions by country (gCO2eq/kWh) in {selected_country_name}', unit="gCO2eq/kWh") download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(daily_mix_impact, f"Daily_average_of_GHG_emissions_by_country_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart shows the daily average of greenhouse gas (GHG) emissions by country in **{selected_country_name}**, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). Each color band represents the GHG emissions associated with electricity produced or imported from different countries. **Data Source:** EcoDynElec """) elif resolution == 'Hourly': # Supposons que flows_selected_df est déjà défini et correctement configuré min_date = flows_selected_df.index.min() max_date = flows_selected_df.index.max() # Positionnement des widgets dans les colonnes si déjà définies with col3: # Exemple de placement dans la colonne start_date, end_date = st.date_input( "Select a date range:", [min_date, max_date], # Utilisez les extrêmes de l'index comme valeur par défaut min_value=min_date, # Date minimale extraite de l'index max_value=max_date, # Date maximale extraite de l'index help="You can select a range within the available dates in the data." ) # Ajustez end_date pour inclure toute la journée start_date = pd.Timestamp(start_date) end_date = pd.Timestamp(end_date) + pd.Timedelta(days=1, seconds=-1) # Filtrer le DataFrame selon la plage sélectionnée flows_hourly = flows_selected_df.loc[(flows_selected_df.index >= start_date) & (flows_selected_df.index <= end_date)]/ 1000 tot_consumption_hourly = tot_consumption_selected_df.loc[ (tot_consumption_selected_df.index >= start_date) & (tot_consumption_selected_df.index <= end_date)] tot_consumption_hourly=tot_consumption_hourly['sum'] / 1000 col1,col2= st.columns(2) with col1: create_combined_time_series(flows_hourly, tot_consumption_hourly, title=f'Hourly Time Series of Production, Imports, and Exports in {selected_country_name}',resolution='hourly') download_col, info_col = st.columns([0.7, 0.3]) # Adjust the ratios as needed # Bouton pour télécharger le CSV dans download_col (gauche) with download_col: download_data_as_csv(flows_hourly, f"Hourly_Time_Series_of_Production_Imports_and_Exports_in_{selected_country_name.replace(' ', '_')}.csv") # Use an expander to display the general description in info_col (right) with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This chart presents the hourly evolution of energy flows in **{selected_country_name}**, including production, imports, exports, and total electricity consumption. **Data Source:** EcoDynElec """) # pour les impacts tot_electricity_impact_hourly_df = tot_electricity_impact_selected_df.loc[(tot_electricity_impact_selected_df.index >= start_date) & ( tot_electricity_impact_selected_df.index <= end_date)] pivot_table = create_pivot_table(tot_electricity_impact_hourly_df['sum'].resample('H').mean()) # Display the chart based on user's choice with col4: # Add a selectbox to allow the user to choose between heatmap and line plot chart_type = st.selectbox("Choose chart type:", ["Heatmap", "Line Plot"]) with col2: if chart_type == "Line Plot": # Create a line plot (assuming you want to use Plotly) fig = px.line(tot_electricity_impact_hourly_df.resample('H').mean(), x=tot_electricity_impact_hourly_df.index, y='sum', title=f'Line Plot of GHG Emissions in {selected_country_name}') fig.update_layout(legend_title_text='') fig.update_traces(hovertemplate='%{y:.0f} gCO2eq/KWh
Date: %{x| %a %d %b %Y %H %M}') fig.update_xaxes(title_text='', tickformat=' %a %d %b %y %H %M') fig.update_yaxes(title_text='') fig.add_annotation(text="© Ecodynelec-HEIG-VD", xref="paper", yref="paper", x=0, y=-0.5, showarrow=False, font=dict(size=12, color="gray"), xanchor='left', yanchor='bottom') fig.add_annotation(text="gCO2eq/KWh", xref="paper", yref="paper", x=-0.05, y=1.1, showarrow=False, font=dict(size=12)) st.plotly_chart(fig) download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(tot_electricity_impact_hourly_df, f"Hourly_Line_Plot_of_GHG_Emissions_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart's Description:** This line plot visualizes the temporal evolution of greenhouse gas (GHG) emissions in **{selected_country_name}**, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). The x-axis represents the time series data over time (hourly), while the y-axis indicates the magnitude of GHG emissions **Data Source:** EcoDynElec """) elif chart_type == "Heatmap": create_heatmap(pivot_table, f'Heatmap of the average of GHG emissions in {selected_country_name}') download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(pivot_table, f"Heatmap_of_the_average_of_GHG_emissions_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This heatmap displays the average greenhouse gas (GHG) emissions in **{selected_country_name}** over time. The horizontal axis represents the dates, while the vertical axis represents the hours of the day. Each colored cell in the heatmap corresponds to the intensity of GHG emissions, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). **Data Source:** EcoDynElec """) selection = aggregation_menu() if selection == "Mixed": raw_consumption_by_src_hourly_df = raw_consumption_by_src_selected_df.loc[(raw_consumption_by_src_selected_df.index >= start_date) & ( raw_consumption_by_src_selected_df.index <= end_date)].resample('H').sum() raw_consumption_by_src_hourly_df = raw_consumption_by_src_hourly_df.resample('H').sum() / 1000 raw_consumption_by_src_hourly_df = aggregate_by_country(selected_country_name,raw_consumption_by_src_hourly_df) col1, col2 = st.columns(2) with col1: create_area_mixte(raw_consumption_by_src_hourly_df, title=f'Hourly consumption by source in {selected_country_name}',text='GWh',resolution='hourly') download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(raw_consumption_by_src_hourly_df, f"Hourly_consumption_by_source_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart illustrates the hourly electricity consumption by energy source in **{selected_country_name}** over the selected time period. Each area in the plot corresponds to a different energy source contributing to the total electricity consumption. **Data Source:** EcoDynElec """) electricity_impact_by_src_hourly_df = electricity_impact_by_src_selected_df.loc[(electricity_impact_by_src_selected_df.index >= start_date) & ( electricity_impact_by_src_selected_df.index <= end_date)].resample('H').sum() electricity_impact_by_src_hourly_df = electricity_impact_by_src_hourly_df.resample('H').mean() electricity_impact_by_src_hourly_df = aggregate_by_country(selected_country_name, electricity_impact_by_src_hourly_df) with col2: create_area_mixte(electricity_impact_by_src_hourly_df, title=f'Hourly average of GHG emissions by source in {selected_country_name}',text='gCO2/KWh',resolution='hourly') download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(electricity_impact_by_src_hourly_df, f"Hourly_average_of_GHG_emissions_by_source_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart visualizes the hourly average of greenhouse gas (GHG) emissions by energy source in **{selected_country_name}** over the selected period. Each color band represents the contribution of a different energy source to the total GHG emissions, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh) **Data Source:** EcoDynElec """) if selection == "By Technology": col1, col2 = st.columns(2) # Crée deux colonnes pour les graphiques with col1: techno_hourly_df = (techno_selected_df.loc[ (techno_selected_df.index >= start_date) & (techno_selected_df.index <= end_date)] .resample('H').sum()) / 1000 create_area_mixte(techno_hourly_df, title=f'Daily average of GHG emissions by technology in {selected_country_name}',text='GWh',resolution='hourly') download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(techno_hourly_df, f"Hourly_average_of_GHG_emissions_by_technology_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart illustrates the hourly electricity consumption by technology in **{selected_country_name}** over the selected time period. Each area in the plot corresponds to a different energy source contributing to the total electricity consumption. **Data Source:** EcoDynElec """) with col2: techno_impact_hourly_df = techno_impact_selected_df.loc[ (techno_impact_selected_df.index >= start_date) & (techno_impact_selected_df.index <= end_date)].resample('D').mean() create_area_mixte(techno_impact_hourly_df, title=f'Hourly average of GHG emissions by technology in {selected_country_name}',text='gCO2/KWh',resolution="hourly") download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(techno_impact_hourly_df, f"Hourly_consumption_by_technology_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart visualizes the hourly average of greenhouse gas (GHG) emissions by technology in **{selected_country_name}** over the selected period. Each color band represents the contribution of a different energy source to the total GHG emissions, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh) **Data Source:** EcoDynElec """) if selection == "Country of origin": tot_electricity_mix_hourly_df = tot_electricity_mix_selected_df.loc[ (tot_electricity_mix_selected_df.index >= start_date) & (tot_electricity_mix_selected_df.index <= end_date)].resample('H').sum() hourly_mix_import = tot_electricity_mix_hourly_df.drop(['sum'], axis=1) hourly_mix_import = hourly_mix_import.multiply(tot_consumption_hourly, axis='index').resample('H').sum() / 1000 col1, col2 = st.columns(2) with col1: create_area_chart(hourly_mix_import,title=f"Origins of hourly consumer mix by country in {selected_country_name}",resolution="hourly") download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(hourly_mix_import, f"Hourly_consumption_by_country_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart displays the origins of the hourly consumer electricity mix by country in Switzerland over the selected time period. Each color band represents the contribution of electricity imports from different countries to the total electricity mix consumed in **{selected_country_name}**. **Data Source:** EcoDynElec """) tot_electricity_impact_hourly_df = tot_electricity_impact_selected_df[(tot_electricity_impact_selected_df.index >= start_date) & (tot_electricity_impact_selected_df.index <= end_date)] hourly_mix_impact = tot_electricity_impact_hourly_df.drop(['sum'], axis=1).resample('H').mean() with col2: create_area_chart(hourly_mix_impact, title=f'Hourly average of GHG emissions by country in {selected_country_name}',resolution="hourly",unit="gCO2eq/KWh") download_col, info_col = st.columns([0.7, 0.3]) with download_col: download_data_as_csv(hourly_mix_impact, f"Hourly_average_of_GHG_emissions_by_country_in_{selected_country_name.replace(' ', '_')}.csv") with info_col: with st.expander("ℹ️ Chart's Information"): st.write(f""" **Chart Description:** This stacked area chart shows the hourly average of greenhouse gas (GHG) emissions by country in **{selected_country_name}**, measured in grams of CO2 equivalent per kilowatt-hour (gCO2eq/kWh). Each color band represents the GHG emissions associated with electricity produced or imported from different countries. **Data Source:** EcoDynElec """)