Spaces:
Running
Running
File size: 5,004 Bytes
64cd369 7705d18 5b07f21 7705d18 5b07f21 64cd369 5b07f21 64cd369 5b07f21 64cd369 5b07f21 64cd369 5b07f21 64cd369 5b07f21 64cd369 cfe91b8 64cd369 cfe91b8 64cd369 5b07f21 64cd369 5b07f21 64cd369 5b07f21 64cd369 5b07f21 7705d18 5b07f21 64d6dba 5b07f21 396c4f0 9763683 64cd369 26bb42c 64cd369 f405da4 64cd369 5b07f21 64cd369 5b07f21 64cd369 a306650 64cd369 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
import streamlit as st
from comparateur import get_table_empreintes_detailed
from comparateur import *
import base64
import pandas as pd
import altair as alt
# Function to read and encode an SVG file to Base64
def load_svg_as_base64(file_path):
with open(file_path, "rb") as f:
svg_data = f.read()
return base64.b64encode(svg_data).decode()
def color_scale(val):
if val == '-':
return 'background-color: {color}'
elif val <= 1:
color = '#008571' #'rgba(0,238,0,0.5)' # green with opacity
elif val <= 10:
color = '#83c2b8' # light green with opacity
elif val <= 50:
color = '#efcd82' # light yellow with opacity
elif val <= 100:
color = '#f2aa56' # light orange with opacity
else:
color = '#e87a58' # light red with opacity
return f'background-color: {color};color:white'
def display_cf_comparison(stm: st):
svg_file_path = "feuille.svg"
svg_base64 = load_svg_as_base64(svg_file_path)
stm.markdown(
f"""
**Votre consommation carbone**
<img src='data:image/svg+xml;base64,{svg_base64}' alt='svg' width='15' height='15' style='margin-left: 10px;'>
""",
unsafe_allow_html=True
)
serveur_emission = st.session_state['emission'].stop()
emission_api = sum([value["el"] for value in st.session_state["partial_emissions"].values()])
if serveur_emission is None :
serveur_emission = 0
if emission_api is None :
emission_api = 0
total_emission = serveur_emission + emission_api
pourcentage_api = emission_api / total_emission
pourcentage_serveur = serveur_emission / total_emission
stm.markdown(f"<div style='text-align: center; margin-bottom: 10px;'><b>{total_emission*1000:.2f}</b> g eq. CO2</div>", unsafe_allow_html=True)
stm.markdown("Dont :")
stm.markdown(f"- Empreinte serveur (via CodeCarbon) : **{serveur_emission*1000:.2f}** g eq. CO2 ({pourcentage_serveur:.2%})")
stm.write(f"- Empreinte IA (via EcoLogits) : **{emission_api*1000:.2f}** g eq. CO2 ({pourcentage_api:.2%})")
# stm.markdown("(avec l'outil CodeCarbon)")
c1,c2,c3 = stm.columns([1,1,1])
c2.write("---")
stm.markdown("**Votre équivalence**")
col1,col2,col3 = stm.columns([1,1,1])
display_comparaison(col1,total_emission,dict_comparaison_1kgCO2["eau en litre"][0]*1000,dict_comparaison_1kgCO2["eau en litre"][1],"ml")
display_comparaison(col2,total_emission,dict_comparaison_1kgCO2["tgv en km"][0],dict_comparaison_1kgCO2["tgv en km"][1],"km")
display_comparaison(col3,total_emission,dict_comparaison_1kgCO2["voiture en km"][0]*1000,dict_comparaison_1kgCO2["voiture en km"][1],"m")
stm.markdown("\n")
stm.markdown(
f"""
Powered by **ADEME**
<a href='https://www.ademe.fr' target='_blank'><img src='https://www.ademe.fr/wp-content/uploads/2022/11/ademe-logo-2022-1.svg' alt='svg' width='30' height='30' style='margin-left: 10px;'>
""",
unsafe_allow_html=True
)
def display_carbon_footprint():
st.title("EMPREINTE ÉNERGÉTIQUE DE L'APPLICATION IA CARTO RSE")
display_cf_comparison(st)
table = get_table_empreintes_detailed()
# table[['Consommation Totale']] = table[['Consommation Totale']].map('${:,.2f}'.format)
table.replace({0.00: '-'}, inplace=True)
#just 2 digits after the comma
styled_df = table[['Consommation Totale']].rename(columns={'Consommation Totale': 'Consommation totale (g eqCo2)'})
styled_df = styled_df.round(2)
styled_df = styled_df.style.applymap(color_scale, subset=['Consommation totale (g eqCo2)'])
st.markdown("---")
st.markdown("### DÉTAIL PAR TÂCHE")
st.table(styled_df)
with st.expander("Plus de détails"):
st.table(table)
st.markdown("### SYNTHESE (Dialogue IA et non IA)")
serveur_emission = st.session_state['emission'].stop()
emission_api = sum([value["el"] for value in st.session_state["partial_emissions"].values()])
print(serveur_emission, emission_api)
total_emission = serveur_emission + emission_api
pourcentage_api = emission_api / total_emission
pourcentage_serveur = serveur_emission / total_emission
df = pd.DataFrame({"Catégorie": ["Identification + dessin","IA (extraction pp + dialogue)"], "valeur": [pourcentage_serveur, pourcentage_api]})
color_scale_alt = alt.Scale(domain=['Identification + dessin', 'IA (extraction pp + dialogue)'], range=['#011166', '#63abdf'])
base=alt.Chart(df).encode(
theta=alt.Theta(field="valeur", type="quantitative", stack=True),
color=alt.Color(field="Catégorie", type="nominal", scale=color_scale_alt),
)
pie = base.mark_arc(outerRadius=100)
text = base.mark_text(radius=150,fill= "black",align='center', baseline='middle',fontSize=20).encode(alt.Text(field="valeur", type="quantitative", format=".2%"))
chart = alt.layer(pie, text, data=df).resolve_scale(theta="independent")
st.altair_chart(chart, use_container_width=True)
|