IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Interface et paramétrage externe [Python 3.X]


Sujet :

Python

  1. #1
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut Interface et paramétrage externe
    Bonjour à tous,

    Je débute sous Python et utilise pour le moment exclusivement Pandas, Numpy et Matplotlib afin de réaliser de l'analyse de données.

    Je suis à la recherche de bibliothèques de débutant pour la création d'une interface IHM (web de préférence), qui me permettra de paramétrer (via listes à choix, combo-box etc...) mes modèles d'analyse de données sous python et d'afficher les sorties graphiques correspondantes (Tableaux/graphs).

    Je cherche donc le canard à 3 pattes, c'est à dire, quelque chose de facile à utiliser, bien documenté, beaucoup utilisé. Ceci-dit, pas besoin du truc le plus performant et le plus paramétrable ; le but est de m'introduire sur le sujet. J'ai une connaissance rudimentaire du HTML, mais s'il en faut un minimum, je ferais ce qu'il faut.

    Auriez-vous ça sous la main ?
    Quelles sont selon vous les bibliothèques qui m’aideront à me lancer en douceur sur ce projet ?

    Merci par avance de votre aide et bonne soirée.

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    nonobstant la présentation un peu rigide, un notebook jupyter c'est en général pas mal pour ça
    sinon tu peux sans doute jeter un oeil à pySimpleGui

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2013
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 80
    Par défaut
    Bonjour,

    Vous faites de l’analyse de données directement depuis le dataframe ? Ou bien avez vous seulement besoin d’afficher quelques informations essentielles ?

    J’avoue ne pas bien comprendre dans quel cadre vous souhaitez créer un GUI pour cela ; soit il n’aura qu’une fonction «*display*» (et du coup autant utiliser la console), soit vous voudrez qu’il soit muni de plein de boutons (genre sélectionner une ligne/colonne, ajouter, supprimer, etc...) et autant lancer une fenêtre Excel pour interfacer avec le dataframe ? 😜

  4. #4
    Membre confirmé
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juillet 2020
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Juillet 2020
    Messages : 142
    Par défaut
    Salut,

    Si tu veux une interface web tu as Django qui mélange Python et Web

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour

    La bibliothèque tcl/tk est directement implémentée dans Python. Donc rien à installer. Elle permet de faire une IHM de base (fenêtres, boutons, cases à cocher).
    La bibliotèque PyQt (issue de Qt/C++) est plus complète (contient des outils de méta-programmation comme la gestion de tableaux lignes * colonnes ou des outils direct to sql) mais nécessite déjà son installation (à base de pip ou apt) et surtout son apprentissage. Basée sur un mécanisme à base de signal/slot assez innovant. Chaque élément PyQt génère des signaux selon les actions clavier/souris qu'on produit et on peut connecter les divers signaux à des slots (fonctions) déjà prédéfinis ou à des slots persos. A noter qu'il y a quelques années elle a donné naissance à un fork appelé "PySide"
    PySimpleGui je connais que de nom. A mon idée elle doit être un tcl/tk un peu plus enjolivé (parce que tcl/tk c'est efficace mais c'est quand-même bien moche). Mais elle-aussi nécessite une installation.

    Question doc, je pense qu'on peut trouver de toutes sortes pour toutes y compris sur ce forum.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    PySimpleGui je connais que de nom. A mon idée elle doit être un tcl/tk un peu plus enjolivé
    en fait la lib permet d'utiliser différent backends, dont Tk, wxWidgets, Qt et même de faire un rendu web apparemment, le tout avec une syntaxe triviale et qui permet entre autre d'encapsuler des figures matplotlib, ça m'a semblé tout indiqué.

  7. #7
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    Bonjour, et merci pour ces retours,

    Pour donner plus de détails, le but premier est simplement de "m'assister" dans le développement des modèles. Je travaille sur jupyter-lab et effectivement, directement avec des data frames.
    À ce jour, dès que je veux faire des extractions spécifiques sur des plages temporelles particulières ou sur des catégories spécifiques, je suis obligé de modifier les paramètres directement dans le code juste pour avoir quelques graphiques à la clé.
    C'est beau et bien, mais je souhaite pouvoir paramétrer les modèles plus facilement et sécuritairement vis-à-vis du code.

    De plus, si je suis en mesure de réaliser ça en interface web, ça me permettrait de pouvoir, à terme, déployer la solution au sein de mon entreprise afin d'offrir les analyses automatiquement aux utilisateurs.

    PySimpleGui semble effectivement correspondre à ce que j'ai en tête ; particulièrement PySimpleGUIWeb. Sinon, effectivement, j'avais entendu parlé de django et flask, mais je ne sais pas s'ils sont "facile" d'approche.

    Merci encore pour vos retours.

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2013
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 80
    Par défaut
    Pouvez-vous nous en dire un peu plus sur la structure de données ? Vous parlez de "plages temporelles" et de "catégories" ; à vue de nez je dirai que c'est un dataframe avec le temps en index et des catégories en colonnes. Vous voulez pouvoir tracer colonne A et colonne B, voire A+B (?), sur une plage temporelle ?

    Pouvez-vous nous dire quelles sont les opérations/tâches que l'utilisateur devra/pourra utiliser ? Idéalement nous donner un exemple concret avec un exemple de dataframe ?

  9. #9
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    Bonjour,

    Je ne peux, bien entendu, pas vraiment fournir la donnée que j'utilise, mais globalement, c'est ça.
    Je dois croiser différentes tables avec en index la plage horaire et différentes catégories en colonnes oui. Cependant, le format des tables que je doit croiser est parfois différent et me nécessite tout un traitement / recombinaison avant d'obtenir les dataframe finaux (certaines informations sont incompatibles par nature selon les tables, les analyses doivent donc être séparées).

    Aussi, je travaille actuellement sur les colonnes directement (je ne mets pas encore la date en index) car selon les extractions que je souhaite voir, je trouve plus simple de traiter les dates comme de la donnée classique ; mais ma progression dans mon apprentissage de Python me fera surement changer de méthode au fil du temps.

    Globalement, voici à quoi peut ressembler la structure :

    index 0 : Date
    index 1 : Employé
    index 2 : Groupe
    index 3 : Équipe
    Data A : A
    Data B : B
    ...
    Data Z : Z

    où A, B, C ... Z peuvent être soit des entiers, réels, ou encore des durées.
    Aussi, les calculs sont effectivement de type f(A, B, C, ... Z), et doivent pouvoir être effectués sur des portions filtrées des tables. Exemple, je veux la moyenne pondérée de A par B pour le groupe des ventes par l'équipe de Gérard sur l'intervalle du 15 mars 2020 au 15 octobre 2020. Et selon cette même configuration je pourrais vouloir aussi la somme des C ou toute autre fonction combinatoire ou non des données.

    À ce jour, lorsque je créé mes rapports, je dois me farcir les filtres à la main et voici, en mode simplifié, la composition de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    df = pd.read_csv('datas.csv', parse_dates=True)
     
    ret = df.Date.dt.to_period('W')
    filt = ['GRP01', 'GRP02', 'GRP06']
     
    data = df.loc[df.Groups.isin(filt)].groupby(ret).sum()
    data['res%'] = 100 * data.CA / ( data.CB - data.CD)
    data.plot.hist()
    Je n'ai pas de plage de date ici effectivement, mais l'idée est là et dès que je veux les mêmes données pour un groupe différent par exemple, je suis obligé de me farcir le filt=[.....] à la main alors que sélectionner les valeurs dans une liste à choix est bien plus fun quand même. Bien entendu le code fourni plus haut ne représente qu'une partie de ce que je souhaite réaliser au final, d'où l'idée de venir paramétrer tout ça par une interface graphique pour me simplifier la vie pour la suite.

    Est-ce que ça fait du sens ? Peut-être que mon approche initiale est à revoir mais globalement, il me semble intéressant de pouvoir automatiser la création de rapports de cette manière.

  10. #10
    Membre éprouvé
    Inscrit en
    Juillet 2013
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 80
    Par défaut
    Aussi, je travaille actuellement sur les colonnes directement (je ne mets pas encore la date en index) car selon les extractions que je souhaite voir, je trouve plus simple de traiter les dates comme de la donnée classique ; mais ma progression dans mon apprentissage de Python me fera surement changer de méthode au fil du temps.
    Pouvez-vous décrire en quoi cela vous semble plus simple de les traiter comme "colonne" plutôt que comme index ? D'habitude, ce genre de données est "ordonnée" n'est-ce pas ?

    Globalement, voici à quoi peut ressembler la structure :

    index 0 : Date
    index 1 : Employé
    index 2 : Groupe
    index 3 : Équipe
    Data A : A
    Data B : B
    ...
    Data Z : Z
    Il y a plusieurs index ; est-ce que cela correspond à un genre de MultiIndex ? (exemple : https://i.stack.imgur.com/y9L5u.png)

    Aussi, les calculs sont effectivement de type f(A, B, C, ... Z), et doivent pouvoir être effectués sur des portions filtrées des tables. Exemple, je veux la moyenne pondérée de A par B pour le groupe des ventes par l'équipe de Gérard sur l'intervalle du 15 mars 2020 au 15 octobre 2020. Et selon cette même configuration je pourrais vouloir aussi la somme des C ou toute autre fonction combinatoire ou non des données.
    Ma question était plutôt : est-ce que les fonctions sont "pré-définies" par le développeur ou est-ce que l'analyse sera faite "à la mano" par l'utilisateur ? Votre projet me fait penser à un genre de CRM dédié à un manager (donc plutôt fonctions prédéfinies) ?
    Dans ce cas, il pourrait y avoir deux frames (fenêtres/pages), l'un dédiée au vendeur, l'autre au manager ; chaque frame pourrait contenir des champs/compteurs de type "ventes totales du mois"/"ventes pour la catégorie A+B"/"progression par rapport au mois précédent"/etc...

  11. #11
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    Citation Envoyé par charliemtx Voir le message
    Pouvez-vous décrire en quoi cela vous semble plus simple de les traiter comme "colonne" plutôt que comme index ?
    En fait c'est principalement dû au fait que je débute d'une part (le read_csv ne me les mets pas par index par défaut sur un appel tout simple), et aussi car j'étais dérouté de ne pas pouvoir manipuler la donnée de la même manière avec les index qu'avec les colonnes (syntaxe légèrement différente). Du coup j'ai pris l'habitude de fonctionner comme ça, mais effectivement, je vais devoir me pencher sur un fonctionnement plus classique, surtout si je veux commencer à utiliser le multi-index par la suite.

    Citation Envoyé par charliemtx Voir le message
    D'habitude, ce genre de données est "ordonnée" n'est-ce pas ?
    Hmmm... Ça dépends des tables en fait. Malheureusement je n'ai pas le contrôle de l'outil qui me donne accès à la donnée "brute" (juste des csv) et pour certaines tables, je n'ai aucun index unique.


    Citation Envoyé par charliemtx Voir le message
    Il y a plusieurs index ; est-ce que cela correspond à un genre de MultiIndex ? (exemple : https://i.stack.imgur.com/y9L5u.png)
    Oui, tout à fait ! Alors je me répète, pour le moment, je traite les index comme des colonnes classiques ; mais l'idée est bien celle que tu désignes.
    Et oui, il est prévu que j'apprenne à fonctionner avec les index / multi-index.


    Citation Envoyé par charliemtx Voir le message
    Ma question était plutôt : est-ce que les fonctions sont "pré-définies" par le développeur ou est-ce que l'analyse sera faite "à la mano" par l'utilisateur ? Votre projet me fait penser à un genre de CRM dédié à un manager (donc plutôt fonctions prédéfinies) ?
    Dans ce cas, il pourrait y avoir deux frames (fenêtres/pages), l'un dédiée au vendeur, l'autre au manager ; chaque frame pourrait contenir des champs/compteurs de type "ventes totales du mois"/"ventes pour la catégorie A+B"/"progression par rapport au mois précédent"/etc...
    Alors oui. les fonctions sont prédéfinies, directement dans le code et l'utilisateur final n'a aucune raison de venir tripatouiller ces derniers ni même de s'en créer des spécifiques. Donc une fois que la config est faite, on clique sur OK et tous les rapports / diagrammes sont fournis.
    Pour le coup des frames c'est un peu ça l'idée. Mais si je passe par un appli web, l'idée finale de l'outil irait plutôt offrir des accès limités selon qui y accède. Mais pour ça, on verra à plus long terme. Si déjà j'arrive à ouvrir une page web qui permet de donner deux paramètres et de sortir un graphique, ce sera déjà un joli pas en avant pour moi.

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BioKore Voir le message
    Je n'ai pas de plage de date ici effectivement, mais l'idée est là et dès que je veux les mêmes données pour un groupe différent par exemple, je suis obligé de me farcir le filt=[.....] à la main alors que sélectionner les valeurs dans une liste à choix est bien plus fun quand même. Bien entendu le code fourni plus haut ne représente qu'une partie de ce que je souhaite réaliser au final, d'où l'idée de venir paramétrer tout ça par une interface graphique pour me simplifier la vie pour la suite.

    Est-ce que ça fait du sens ? Peut-être que mon approche initiale est à revoir mais globalement, il me semble intéressant de pouvoir automatiser la création de rapports de cette manière.
    Tu n'es pas forcé de te coltiner immédiatement l'apprentissage et la création d'une IHM Python. Si ton principal souci est juste de paramétrer ton script, tu peux alors le paramétrer lors de l'appel.
    Imaginons que ton code (simplifié) devienne ceci...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import sys
    df = pd.read_csv('datas.csv', parse_dates=True)
     
    ret = df.Date.dt.to_period('W')
    filt = sys.argv[1:4]
     
    data = df.loc[df.Groups.isin(filt)].groupby(ret).sum()
    data['res%'] = 100 * data.CA / ( data.CB - data.CD)
    data.plot.hist()
    ... tu peux alors l'appeler en lui passant GRP01, GRP02 et GRP06 en paramètre (exemple python script.py GRP01 GRP02 GRP06.

    Si le script devient plus complexe, tu peux alors lui rajouter des options (module getopt). Ton script pourra par exemple être appelé ainsi python script.py --filter=GRP01 --filter=GRP02 --filter=GRP06 ce qui laisse la porte ouverte à d'autres options ultérieures. Tout ça donc depuis un shell Linux ou une fenêtre cmd ou powershell Windows.

    Et justement si t'es sous Linux et que tu veux offrir quelque chose de plus "habillé", tu peux alors encapsuler tes appels shells dans un module zenity qui permet de programmer très rapidement de petites boites de dialogue. Exemple rapide: zenity --question --text="File already exists.\nContinue?"; rep=$?; echo "$rep".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    Bonsoir,

    J'ai effectivement pensé à cet aspect aussi, et le fonctionnement proposé n'abstrait pas les possibles éventuelles erreurs lors de la saisie des groupes ou tout autres éléments que j'aurais éventuellement à saisir.
    Cependant, tu soulève un point important : le programme ainsi rédigé reste ouvert à toute autre évolution éventuelle. De plus, je pense effectivement que de tenter d'apprendre une bibliothèque pour la création d'interface est probablement prématuré compte tenu de mon niveau de pratique actuel de python.

    Je vais donc plus me focaliser sur le contenu dans un premier temps et venir apporter une solution de paramétrage plus tard au besoin. En ce qui concerne mes tests actuels, je peux effectivement réaliser des filtres permanents dans un premier temps. Et finalement, j'arrive déjà à paramétrer certaines listes avec PySimpleGUI. À faire évoluer dans le temps donc.

    Je vous remercie à tous pour vos conseils ; je reviendrais probablement vers vous avec un sujet similaire une fois que je serais un peu plus à l'aise avec Python de manière générale.

    Merci et bonne soirée.

  14. #14
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut pour info
    je viens de tomber complètement par hasard sur un truc du nom de Streamlit, résolument orienté web et data-science apparemment, à voir si ça peut être intéressant.

  15. #15
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    Salut !

    Merci pour l'info ; je vais regarder ce qu'il en est, mais à première vue, il semble que ça ressemble à ce que je recherche.

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD20] Création service avec interface de paramétrage
    Par jjacques68 dans le forum WinDev
    Réponses: 4
    Dernier message: 05/10/2017, 23h29
  2. fichier de paramétrage externe
    Par chris51000 dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2014, 19h03
  3. [XL-2003] Paramétrage "externe" d'un TCD
    Par Xorbane dans le forum Excel
    Réponses: 3
    Dernier message: 01/10/2011, 23h28
  4. récupération des coordonée d'une interface d'application externe
    Par midoom dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 15/02/2010, 13h08
  5. Interface de paramétrage
    Par SpaceFrog dans le forum Apache
    Réponses: 2
    Dernier message: 14/04/2009, 19h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo