Hello !
Je viens une nouvelle fois réclamer votre aide !
Je dois faire une interface en python avec des dropdown, de l'affichage de CSV et de graph. J'utilise ipywidgets pour ça. Le but final sera d'en faire une interface web.
Premièrement, mes csv ressemblent à cela :
J'aimerai pour voir créer un lien qui irait pointer vers un CSV dans un repertoire. Ce lien serait créé avec lex choix que l'on fait dans deux dropdowns. Un dropdown pour la liste des servers et un autre pour choisir la date. J'ai réussi à le faire de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Date,FS,Total,Used,Mount 2020-01-25-12-00,/dev/hd1/,350,300,/dev/mount1 2020-01-25-18-00,/dev/hd2/,370,320,/dev/mount2 2020-01-26-06-00,/dev/hd3/,395,350,/dev/mount3 2020-01-26-12-00,/dev/hd1/,350,300,/dev/mount1 2020-01-26-18-00,/dev/hd2/,370,320,/dev/mount2 2020-01-27-06-00,/dev/hd3/,395,350,/dev/mount3 2020-01-27-12-00,/dev/hd1/,350,300,/dev/mount1 2020-01-27-18-00,/dev/hd2/,370,320,/dev/mount2 2020-01-28-06-00,/dev/hd3/,395,350,/dev/mount3 2020-01-28-12-00,/dev/hd1/,350,300,/dev/mount1 2020-01-28-18-00,/dev/hd2/,370,320,/dev/mount2 2020-01-29-06-00,/dev/hd3/,395,350,/dev/mount3
Le résultat est celui-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 from ipywidgets import interact, Dropdown from ipywidgets import widgets from IPython.display import display import plotly.express as px import pandas as pd from ipywidgets.embed import embed_minimal_html import sys import os ###################### Déclarations des widgets ###################### Server = os.listdir('/home/tim/Bureau/Servers/') ServerList = widgets.Dropdown(options = (Server)) Date = ['2019-10', '2019-11', '2019-12', '2020-01'] DateList = widgets.Dropdown(options = (Date)) @interact(ServersList = Server, DatesList = Date) def print_all(ServersList, DatesList): Test = os.listdir('/home/tim/Bureau/Servers'+ '/'+ ServersList+ '/'+ DatesList+'/') Path = os.path.join('/home/tim/Bureau/Servers'+ '/'+ ServersList+ '/'+ DatesList+'/' + str(Test).strip("[]").strip("''")) display(Path) df = pd.read_csv(Path) df.head() fig = px.line(df, x = 'Date', y = 'Total', title='DF command graph') fig.add_scatter(mode='markers+lines') display(df)
Dès que je change un choix dans un des menus, le changement se fait en live dans le chemin créé et l'affichage du CSV se fait également de manière automatique.
Maintenant, l'idée serait d'ajouter un troisième dropdown qui va permettre de trier le CSV et d'afficher uniquement certaines lignes :
Ici, je créé un dropdown qui se base sur la deuxième colonne de mon CSV, ce qui permet de trier et d'afficher le CSV en fonction du FS choisi puis, il affiche le graphique qui va bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import ipywidgets as widgets from ipywidgets import interactive import pandas as pd import plotly.graph_objects as go import plotly.express as px df = pd.read_csv('/home/tim/Bureau/Servers/Server1/2019-10/Test1.txt') items = ['All']+sorted(df['FS'].unique().tolist()) def view(x=''): if x=='All': display(df) display(df[df['FS']==x]) fig = px.line(df[df['FS']==x], x = 'Date', y ='Total', title='DF command graph') #fig.add_scatter(x=df['Date'], y=df['Used']) fig.update_traces(mode='markers+lines') fig.show(); w = widgets.Dropdown(options=items) interactive(view, x=w)
J'ai réussi à faire les deux de manière séparé, mais impossible de fusionner mes deux codes dans le but d'avoir un dropdown qui va me permettre de choisir un server, un secon pour choisir la date puis un troisième qui me permettra de trier mon CSV en fonction du FS voulu pour ensuite afficher le résultat du CSV et le graphique...
Quelqu'un pourrait me montrer comment faire ça ?
N'hésitez pas à corriger mon code ou à me dire comment l'améliorer, je suis débutant en python, toutes les remarques sont bonnes à prendre !
Merci d'avance !![]()
Partager