diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..8b14002 Binary files /dev/null and b/.DS_Store differ diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000..1d0eb74 Binary files /dev/null and b/src/.DS_Store differ diff --git a/streamlit.py b/streamlit.py deleted file mode 100644 index f5a8340..0000000 --- a/streamlit.py +++ /dev/null @@ -1,16 +0,0 @@ -import streamlit as st -st.title('Water Tracker') - -st.sidebar.radio('Indicateurs de niveaux d'eau', [":rainbow["Sècheresse"]", "Autre indicateur" , "Water Tracker:movie_camera:"]) -pages = ['page1', 'page2', 'page3'] - -connection = connection to db / addresse de files dans S3 (dispo sous url) - -if page == pages[0]: - #things to put on the page -if page == pages[1]: - #things to put on the second page -if page == pages[2]: - #things to put on the third page - - diff --git a/streamlit/.DS_Store b/streamlit/.DS_Store new file mode 100644 index 0000000..00684bf Binary files /dev/null and b/streamlit/.DS_Store differ diff --git a/streamlit/Notes.rtf b/streamlit/Notes.rtf new file mode 100644 index 0000000..cd05230 --- /dev/null +++ b/streamlit/Notes.rtf @@ -0,0 +1,11 @@ +{\rtf1\ansi\ansicpg1252\cocoartf2706 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 + +\f0\fs24 \cf0 Est-ce qu\'92on peut \'e9crire un script python et appeler une fonction de ce script comme package dans le script streamlit ? Et dans la mise en ligne sur le streamlit server\ +Data file dans le repo appli streamlit\ +Ajouter la premi\'e8re page d\'92intro\ +Changer le style et les tailles des caps + les emoticons et les s\'e9parateurs} \ No newline at end of file diff --git a/streamlit/data/.DS_Store b/streamlit/data/.DS_Store new file mode 100644 index 0000000..08681bd Binary files /dev/null and b/streamlit/data/.DS_Store differ diff --git a/streamlit/data/df_stations.csv b/streamlit/data/df_stations.csv new file mode 100644 index 0000000..8c1f17c --- /dev/null +++ b/streamlit/data/df_stations.csv @@ -0,0 +1,13 @@ +Mois,Très bas,Bas,Modérément bas,Autour de la normale,Modérément haut,Haut,Très haut +Janvier 2023,1.6178176171099445,2.3844626604548758,4.090739321027698,41.296613001513634,11.582237424072654,8.299424033339232,30.728705942481966 +Février 2023,7.948461237104428,10.203282113785749,18.51303704348583,59.115048099943415,2.450702999172942,0.7944108301049058,0.9750576764027337 +Mars 2023,7.278822214816412,6.34176942228147,8.980415988708318,37.82517496226304,7.994354158906902,5.934014232224422,25.64544902079944 +Avril 2023,3.133138185121631,2.281215302311497,4.839002725345716,42.7112142929242,13.582315534470576,10.519834460482487,22.933279499343897 +Mai 2023,2.7254367561420363,1.9293739338444342,4.405795964785004,52.734260112546814,13.656594968726104,8.209642948177487,16.33889531577812 +Juin 2023,2.0887516254876464,2.6434492847854356,6.237808842652796,62.90840377113134,9.673683355006501,5.364109232769831,11.08379388816645 +Juillet 2023,2.253843572993349,2.816317669581006,7.010203477471433,69.65600268408691,8.399613175709012,3.93929226943496,5.924727150723322 +Août 2023,2.2008143807726683,2.28821134174198,5.206078061376502,64.87238057403914,9.164763134372828,4.568477505214023,11.69927500248287 +Septembre 2023,3.7487397897249144,3.6170606752669587,8.19496738884431,63.68331172972862,7.569491595169023,4.098512437503858,9.08791638376232 +Octobre 2023,9.203476604357661,6.08604198912569,10.507203238480772,52.66301543834584,5.1970472675318495,2.9527324681509706,13.390482994007222 +Novembre 2023,0.7285276073619631,0.4944300936390055,1.5337423312883436,28.168388763319342,6.2096383597029385,6.8917500807232805,55.97352276396512 +Décembre 2023,1.0294031796688008,0.6304851232754092,1.4224834108466793,20.695090388993755,6.6629045126388915,8.937710404950476,60.621922979625985 diff --git a/streamlit/data/nappes_data.csv b/streamlit/data/nappes_data.csv new file mode 100644 index 0000000..6eb6fe0 --- /dev/null +++ b/streamlit/data/nappes_data.csv @@ -0,0 +1,13 @@ +Mois,Très bas,Bas,Modérément bas,Autour de la normale,Modérément haut,Haut,Très haut +Janvier 2023,17.577947114362914,14.38416466802271,25.210237104951577,18.333889917726705,14.399344242387443,5.725735450377972,4.368681502170679 +Février 2023,27.43359860313623,19.156509183707733,29.38450690037272,14.771162821933448,6.282529129310634,1.3297068600785735,1.6419865014606627 +Mars 2023,27.481100695494405,17.045660719685515,25.700030238887212,13.982461445418808,8.971877834895677,3.4865436951920166,3.3323253704263687 +Avril 2023,20.917476938419348,13.961605584642234,24.769384193467964,15.784717028172526,13.01109449015208,6.3544003989030164,5.201321366242833 +Mai 2023,21.882629532507462,14.603490369834523,25.219278415769963,17.870814118214426,11.242728396178075,4.903999758869096,4.277059408626458 +Juin 2023,19.992463968348666,15.389204634659464,27.36207492071467,18.865199233836783,10.58498445693472,4.377178384149214,3.428894401356486 +Juillet 2023,21.022281263208743,15.44290803695429,25.83479258498883,18.81226979047159,11.979952901394842,4.054706841374313,2.8530885816073908 +Août 2023,20.03436529707895,14.840382238567509,22.81071956108884,18.744159406746448,13.74310433183613,5.576824525969915,4.250444638712206 +Septembre 2023,20.563976469855895,15.04870988826294,23.66709203523297,17.884154502163156,13.439571726477636,4.783840144417815,4.612655233589591 +Octobre 2023,23.905734013809667,15.322725908135695,22.7979585709997,17.07595316721705,11.335935154608226,4.157910537376163,5.403782647853498 +Novembre 2023,13.034001743679163,8.516004483746418,14.612654128783161,12.750653879686139,13.619379748412005,11.52073732718894,25.946568688504172 +Décembre 2023,11.32283899475283,6.778360796587806,12.08383196784191,12.307833931694743,16.665132406640275,14.474209088956396,26.367792813526037 diff --git "a/streamlit/data/pluviom\303\251trie_data.csv" "b/streamlit/data/pluviom\303\251trie_data.csv" new file mode 100644 index 0000000..b9d1d3f --- /dev/null +++ "b/streamlit/data/pluviom\303\251trie_data.csv" @@ -0,0 +1,13 @@ +Mois,Sécheresse extrême,Grande sécheresse,Sécheresse modérée,Situation normale,Modérément humide,Très humide,Extrêmement humide +Janvier 2023,0.018646280067126608,0.7582820560631487,5.329728385853689,85.76045745540432,6.986139598483436,1.1436385107837652,0.003107713344521101 +Février 2023,25.41288191577209,14.94632535094963,18.087668593448942,41.553124139829336,0.0,0.0,0.0 +Mars 2023,11.39598483435888,6.137733855429175,6.675368264031325,66.54546584623034,8.12667039592268,1.07216110385978,0.04661570016781652 +Avril 2023,0.3018625561978163,3.098908156711625,6.827231856133591,71.28131021194605,14.51830443159923,3.7797045600513806,0.1926782273603083 +Mai 2023,2.9800899165061017,10.94412331406551,22.52729608220938,63.54849068721901,0.0,0.0,0.0 +Juin 2023,21.162491971740526,20.289017341040463,14.678869621066154,38.172768143866406,4.2838792549775215,1.2716763005780347,0.14129736673089274 +Juillet 2023,2.3432158617689103,10.065883522903848,16.94946858101809,63.81689352974082,4.944371931133072,1.6315495058735783,0.2486170675616881 +Août 2023,8.173286096090496,9.683634781527752,12.179128597178195,46.233451426440425,10.83348871900056,10.236807756852508,2.660202622910063 +Septembre 2023,4.139370584457289,12.745664739884393,23.853564547206165,58.25626204238921,0.8991650610147719,0.09633911368015415,0.009633911368015415 +Octobre 2023,3.4651003791410275,13.353844241407172,21.657654297967554,60.54447137796009,0.9602834234570203,0.018646280067126608,0.0 +Novembre 2023,0.0032113037893384713,0.12202954399486192,0.7707129094412332,28.94990366088632,24.030186255619782,24.595375722543352,21.52858060372511 +Décembre 2023,0.0,0.015538566722605507,1.1249922307166387,78.89862639070172,14.25197339797377,4.754801417117285,0.9540679967679782 diff --git a/streamlit/essai_plot.py b/streamlit/essai_plot.py new file mode 100644 index 0000000..b96ae56 --- /dev/null +++ b/streamlit/essai_plot.py @@ -0,0 +1,104 @@ +import pandas as pd +import matplotlib.pyplot as plt +from matplotlib.patches import Patch + +#Plot1 +def plot_flow(df): + + # Couleurs + colors = ["#da442c", "#f28f00", "#ffdd55", "#6cc35a", "#30aadd", "#1e73c3", "#286172"] + + # Tracé + ax = df.plot(kind='bar', stacked=True, color=colors, figsize=(10, 6)) + + # Ajustements esthétiques + plt.yticks(range(0, 101, 10)) + plt.title('Débit: Répartition des niveaux de sécheresse en 2023') + plt.xlabel('') + plt.ylabel('Proportion des stations (%)') + + # Utiliser les noms de mois traduits sur l'axe des abscisses + ax.set_xticklabels([date for date in df['Mois']], rotation=45, ha='right') + + # Légende + legend_labels = ["Très bas", "Bas", "Modérément bas", "Autour de la normale", "Modérément haut", "Haut", "Très haut"] + legend_colors = colors[::-1] # Inverser l'ordre des couleurs + + handles = [Patch(color=color, label=label) for color, label in zip(legend_colors, legend_labels)] + ax.legend(handles=handles, loc='upper left', bbox_to_anchor=(1.0, 0.5), title='Niveaux de Sécheresse') + + # Réglage automatique de l'orientation des dates sur l'axe des x + fig = ax.get_figure() + fig.autofmt_xdate(rotation=45) + return fig + + +#Plot2 +def plot_groundwater(df): + + # Couleurs + colors = ["#da442c", "#f28f00", "#ffdd55", "#6cc35a", "#30aadd", "#1e73c3", "#286172"] + + # Tracé + ax = df.plot(kind='bar', stacked=True, color=colors, figsize=(10, 6)) + + # Ajustements esthétiques + plt.yticks(range(0, 101, 10)) + plt.title('Nappes: Répartition des niveaux de sécheresse en 2023') + plt.xlabel('') + plt.ylabel('Proportion des stations (%)') + + # Utiliser les noms de mois traduits sur l'axe des abscisses + ax.set_xticklabels([date for date in df['Mois']], rotation=45, ha='right') + + # Légende + legend_labels = ["Très bas", "Bas", "Modérément bas", "Autour de la normale", "Modérément haut", "Haut", "Très haut"] + legend_colors = colors[::-1] # Inverser l'ordre des couleurs + + handles = [Patch(color=color, label=label) for color, label in zip(legend_colors, legend_labels)] + ax.legend(handles=handles, loc='upper left', bbox_to_anchor=(1.0, 0.5), title='Niveaux de Sécheresse') + + # Réglage automatique de l'orientation des dates sur l'axe des x + fig = ax.get_figure() + fig.autofmt_xdate(rotation=45) + return fig + + +def plot_precipitations(df): + #Plot3 + # Charger le DataFrame à partir du fichier CSV + df = pd.read_csv('./data/pluie_data.csv') + + # Couleurs + colors = ["#da442c", "#f28f00", "#ffdd55", "#6cc35a", "#30aadd", "#1e73c3", "#286172"] + + # Tracé + ax = df.plot(kind='bar', stacked=True, color=colors, figsize=(10, 6)) + + # Ajustements esthétiques + plt.yticks(range(0, 101, 10)) + plt.title('Pluie: Répartition des niveaux de sécheresse en 2023') + plt.xlabel('') + plt.ylabel('Proportion des stations (%)') + + # Utiliser les noms de mois traduits sur l'axe des abscisses + ax.set_xticklabels([date for date in df['Mois']], rotation=45, ha='right') + + # Légende + legend_labels = ["Sécheresse extrême", "Grande sécheresse", "Sécheresse modérée","Situation normale", "Modérément humide", "Très humide", "Extrêmement humide"] + legend_colors = colors[::-1] # Inverser l'ordre des couleurs + + handles = [Patch(color=color, label=label) for color, label in zip(legend_colors, legend_labels)] + ax.legend(handles=handles, loc='upper left', bbox_to_anchor=(1.0, 0.5), title='Niveaux de Sécheresse') + + # Réglage automatique de l'orientation des dates sur l'axe des x + fig = ax.get_figure() + fig.autofmt_xdate(rotation=45) + return fig + +def main(): + + essai_plot() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/streamlit/requirements.txt b/streamlit/requirements.txt new file mode 100644 index 0000000..3de1c39 --- /dev/null +++ b/streamlit/requirements.txt @@ -0,0 +1,9 @@ +streamlit +google +pandas +numpy +pybase64 +seaborn +matplotlib +plotly + diff --git a/streamlit/streamlit.py b/streamlit/streamlit.py new file mode 100644 index 0000000..b8016b9 --- /dev/null +++ b/streamlit/streamlit.py @@ -0,0 +1,251 @@ +import streamlit as st +import pandas as pd +import numpy as np +import seaborn as sns +import matplotlib.pyplot as plt +from matplotlib.patches import Patch +import plotly.express as px + +st.sidebar.title('Navigation') +pages = [":rainbow: Evolution de la sècheresse", "Impacts de la sècheresse", 'FAQ'] +page = st.sidebar.radio('Water Tracker', pages) + +#data +df_precipitations = pd.read_csv('data/pluviométrie_data.csv') +df_flow = pd.read_csv('data/df_stations.csv') +df_nappes = pd.read_csv('data/nappes_data.csv') + +#Plot1 +@st.cache_data +def plot_flow(df): + + # Couleurs + colors = ["#da442c", "#f28f00", "#ffdd55", "#6cc35a", "#30aadd", "#1e73c3", "#286172"] + + # Tracé + ax = df.plot(kind='bar', stacked=True, color=colors, figsize=(10, 6)) + + # Ajustements esthétiques + plt.yticks(range(0, 101, 10)) + plt.title('Débit: Répartition des niveaux de sécheresse en 2023') + plt.xlabel('') + plt.ylabel('Proportion des stations (%)') + + # Utiliser les noms de mois traduits sur l'axe des abscisses + ax.set_xticklabels([date for date in df['Mois']], rotation=45, ha='right') + + # Légende + legend_labels = ["Très bas", "Bas", "Modérément bas", "Autour de la normale", "Modérément haut", "Haut", "Très haut"] + legend_colors = colors[::-1] # Inverser l'ordre des couleurs + + handles = [Patch(color=color, label=label) for color, label in zip(legend_colors, legend_labels)] + ax.legend(handles=handles, loc='upper left', bbox_to_anchor=(1.0, 0.5), title='Niveaux de Sécheresse') + + # Réglage automatique de l'orientation des dates sur l'axe des x + fig = ax.get_figure() + fig.autofmt_xdate(rotation=45) + return fig + + +#Plot2 +@st.cache_data +def plot_groundwater(df): + + # Couleurs + colors = ["#da442c", "#f28f00", "#ffdd55", "#6cc35a", "#30aadd", "#1e73c3", "#286172"] + + # Tracé + ax = df.plot(kind='bar', stacked=True, color=colors, figsize=(10, 6)) + + # Ajustements esthétiques + plt.yticks(range(0, 101, 10)) + plt.title('Nappes: Répartition des niveaux de sécheresse en 2023') + plt.xlabel('') + plt.ylabel('Proportion des stations (%)') + + # Utiliser les noms de mois traduits sur l'axe des abscisses + ax.set_xticklabels([date for date in df['Mois']], rotation=45, ha='right') + + # Légende + legend_labels = ["Très bas", "Bas", "Modérément bas", "Autour de la normale", "Modérément haut", "Haut", "Très haut"] + legend_colors = colors[::-1] # Inverser l'ordre des couleurs + + handles = [Patch(color=color, label=label) for color, label in zip(legend_colors, legend_labels)] + ax.legend(handles=handles, loc='upper left', bbox_to_anchor=(1.0, 0.5), title='Niveaux de Sécheresse') + + # Réglage automatique de l'orientation des dates sur l'axe des x + fig = ax.get_figure() + fig.autofmt_xdate(rotation=45) + return fig + +@st.cache_data +def plot_precipitations(df): + #Plot3 + + # Couleurs + #J'aurais mis les couleurs dans l'autre sens + colors = ["#da442c", "#f28f00", "#ffdd55", "#6cc35a", "#30aadd", "#1e73c3", "#286172"] + + # Tracé + ax = df.plot(kind='bar', stacked=True, color=colors, figsize=(10, 6)) + + # Ajustements esthétiques + plt.yticks(range(0, 101, 10)) + plt.title('Pluie: Répartition des niveaux de sécheresse en 2023') + plt.xlabel('') + plt.ylabel('Proportion des stations (%)') + + # Utiliser les noms de mois traduits sur l'axe des abscisses + ax.set_xticklabels([date for date in df['Mois']], rotation=45, ha='right') + + # Légende + legend_labels = ["Sécheresse extrême", "Grande sécheresse", "Sécheresse modérée","Situation normale", "Modérément humide", "Très humide", "Extrêmement humide"] + legend_colors = colors[::-1] # Inverser l'ordre des couleurs + + handles = [Patch(color=color, label=label) for color, label in zip(legend_colors, legend_labels)] + ax.legend(handles=handles, loc='upper left', bbox_to_anchor=(1.0, 0.5), title='Niveaux de Sécheresse') + + # Réglage automatique de l'orientation des dates sur l'axe des x + fig = ax.get_figure() + fig.autofmt_xdate(rotation=45) + return fig + + +## Début du display +if page == pages[0]: + st.title('Water Tracker') + +# C'est quoi les conséquences de la sècheresse + + st.header('Statistiques et visualisations des données sécheresse en France métropolitaine en 2023') + st.markdown('