Journal Document de cours : "Python for science"

Posté par  . Licence CC By‑SA.
Étiquettes :
40
13
mai
2019

Cher journal, je voudrais te parler aujourd'hui d'un document intitulé "Python for science" (c'est en anglais)
d'une centaine de pages et publié sous licence Creative Common CC-BY-SA qui introduit le langage Python pour une utilisation scientifique plutôt orientée vers traitement de données. Le document est libre et les sources LaTeX et SVG sont hébergées sur gitlab.

Pourquoi ? pour qui ?

Cela fait maintenant quelques années que je pratique Python pour mon boulot. Je m'en sers surtout pour faire du post-traitement de données issues de calculs numériques et je voulais partager avec d'autres mes maigres connaissances sur ce sujet. Ces "autres" sont plus particulièrement des étudiants de mon université (Limoges) mais cela peut être aussi n'importe qui s'intéressant à ce sujet.

Philosophie du document

Je ne suis pas du tout Pythoniste et j'ai une approche très utilitariste de Python. Par exemple, je fais rarement des scripts supérieurs à une centaine de lignes. Ce qui m'intéresse avant tout, c'est d'avoir un code qui fait ce qu'il doit faire, en un minimum de temps de développement et qui ne soit pas trop illisible pour pouvoir être repris ultérieurement. Ce document reflète donc cette approche, plutôt minimaliste et pragmatique.

(Partie 1) Les sujets abordés

Après avoir introduit brièvement les règles de base du langage, le document présente l'usage des bibliothèques numpy, matplotlib, scipy, pandas et sympy. Ces 5 bibliothèques fournissent un véritable couteau suisse pour le scientifique qui a besoin de traitements numériques avancés. Il s'ensuit des exercices avec les corrigés qui abordent mes marottes comme le traitement d'image, l'analyse de signal pour faire un accordeur, des calculs de mécanique issus de corrélation d'image, du calcul par éléments discrets, etc…

(Partie 2) Un peu d'IA pour mieux comprendre keskecé

L'IA est un sujet à la mode ;) et je ne voulais pas être trop à la ramasse sur ce thème. J'ai donc tenté, avec mon couteau suisse Python tout neuf, de programmer depuis zéro un réseau de neurones, histoire de mieux comprendre de quoi il s'agit. La seconde partie du document traite plus spécifiquement de ce sujet et retrace donc le cheminement que j'ai parcouru pour faire un réseau de neurones à partir des seuls outils fournis par numpy. Bien entendu, pour une utilisation un peu sérieuse d'un réseau de neurones, le lecteur avisé devra se tourner vers des modules spécialisés tels que Keras ou scikit learn.

Pour conclure

Si des personnes sont intéressées pour critiquer(*)/contribuer/corriger/améliorer(**) ce document, elles sont les bienvenues !

--
(*) pas trop quand même
(**) Mon anglais est plutôt approximatif

  • # Vue de très haute altitude

    Posté par  . Évalué à 6.

    Vu par chance p22: "only height lines", je suppose que le 'h' est en trop.

    Sinon le survol a attisé ma curiosité, ça couvre pas mal de choses.

    Très franchement, en lisant le titre, ma première pensée est que j'en ai un peu marre de voir des "for science/scientists" alors que les besoins des scientifiques sont tellement variés que ça ne peut pas rentrer.
    Ex: un beau pavé "for scientists" sur le "big data" et comment Python est super là-dessus, qui sert beaucoup pour les gens qui bossent sur le traitement du signal et les systèmes… ah ben en fait, non! Pas forcément!

    Et bien là je vois qu'il y a de la variété. Je pense que je vais lire certains chapitres assidûment. Si je trouve d'autres typos, je les remonterai.

  • # Gros souci de hiérarchisation des titres et pagination

    Posté par  . Évalué à 5. Dernière modification le 13 mai 2019 à 13:55.

    Gros souci de hiérarchisation des titres

    • [^] # Re: Gros souci de hiérarchisation des titres et pagination

      Posté par  . Évalué à 3.

      Il y a une portion de code bizarre dans ddpolycommon.tex:

      \makeatletter
      \@addtoreset{section}{part}
      \makeatother

      L'enlever résout le problème. Je ne sais pas quel avait été le but de la manœuvre avec cette commande, mais elle pose plus de problème que ce qu'elle voulait résoudre, à mon avis…

      • [^] # Re: Gros souci de hiérarchisation des titres et pagination

        Posté par  . Évalué à 1.

        Oh, c'était pour avoir une numérotation des section qui recommencent à 1 pour chaque partie. Pour ne pas paumer hyperref dans la procédure, il faut simplement mettre ces 3 lignes après avoir invoqué hyperref (et donc déplacer l'invocation de hyperref dans le ddpolycommon).

    • [^] # Re: Gros souci de hiérarchisation des titres et pagination

      Posté par  . Évalué à 4.

      J'ai la même impression. Faut faire quelque chose.

      Et je n'aime pas trop les liens rouge d'hyperref. Je préfère utiliser l'option hidelinks pour supprimer ces cadres (mais ils restent cliquables)

      genre
      \documentclass[a4paper,10pt, hidelinks]{article}

    • [^] # Re: Gros souci de hiérarchisation des titres et pagination

      Posté par  . Évalué à 4.

      Avec l'aide de ce thread, c'est corrigé. Merci à tous !

  • # Petit commentaire sur la forme

    Posté par  . Évalué à 3.

    Les réglages par défaut de hyperref donnent un rendu assez laid des liens (encadrés en rouge). Une petite conf simple que je met systématiquement en place dans le préambule:

    \usepackage{color}
    \definecolor{citecol}{rgb}{0.3,0.05,0.1}
    \definecolor{linkcol}{rgb}{0.1,0.3,0.05}
    
    \usepackage[breaklinks=true,pdfborder={0 0 0},colorlinks=true, linkcolor=linkcol,citecolor=citecol]{hyperref}
    
    \pdfsuppresswarningpagegroup=1

    Cela permet de mettre les liens du doc en couleur, ce qui est plus lisible à mon avis.

    En bonus, le \pdfsuppresswarningpagegroup=1 permet de supprimer pas mal de warnings du fait de la structure des pdf générés par inkscape.

  • # Cours en anglais ?

    Posté par  (site web personnel) . Évalué à 1.

    Merci pour ce document.

    Mais alors, est-ce que cela signifie que les cours sont en anglais ?

  • # Histogramme en 2 dimensions avec Python

    Posté par  . Évalué à 2.

    Bonjour, étant donné que tu sembles utiliser Python pour des applications scientifiques, est ce que tu as déjà eu le besoin de tracer des histogrammes en 2 dimensions (ou plus) ? Je n'avais rien pu trouver à l'époque où j'avais cherché. Pour bien comprendre de quoi je parle, il s'agit bien d'histogramme (comme ici) et pas de nuage de points.

  • # Ah ben ça tombe bien !

    Posté par  (site web personnel) . Évalué à 2.

    Comme indiqué dans ce journal, je cherche des exemples de programmes Python auxquels je pourrais rajouter une GUI, et je me suis permis de modifier le programme gauss-2d.py pour en faire ça. Il faut ouvrir l'URL indiquée dans la console (il peut être nécessaire de scroller vers le haut pour la trouver) dans une nouvelle fenêtre, et mettre les deux fenêtres côte à côte.

    Python ne m'est pas très familier, et encore moins matplotlib, donc c'est très largement améliorable, tout comme l'interface.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

    • [^] # Re: Ah ben ça tombe bien !

      Posté par  . Évalué à 2. Dernière modification le 14 mai 2019 à 22:22.

      Ca m'est marrant, quand on exécute le main, on vois une petite fenêtre dans le navigateur comme si on exécutait le programme python localement.

      Bon travail!

      Mais ça fait quoi exactement?

      Sinon j'ai quand même des erreurs qui apparaissent dans la console. Ca doit être des logs de ton serveur:

      Collecting atlastk==0.9.6 (from -r requirements.txt (line 1))
        Downloading https://files.pythonhosted.org/packages/04/35/a78eaee0555124fdd6105d5fca0efe5b65e5ef6bee25b0cb1d3643fd65cf/atlastk-0.9.6-py3-none-any.whl
      Installing collected packages: atlastk
      Successfully installed atlastk-0.9.6
       bash -c polygott-x11-vnc q && DISPLAY=:0 run-project
      nohup: redirecting stderr to stdout
      xset:  unable to open display ":0"
      Keyboard Control:
        auto repeat:  on    key click percent:  0    LED mask:  00000000
        XKB indicators:
          00: Caps Lock:   off    01: Num Lock:    off    02: Scroll Lock: off
          03: Shift Lock:  off    04: Group 2:     off    05: Mouse Keys:  off
        auto repeat delay:  660    repeat rate:  25
        auto repeating keys:  00feffffdffffbbf
                              fadfffffffdfe5ef
                              ffffffffffffffff
                              ffffffffffffffff
        bell percent:  50    bell pitch:  400    bell duration:  100
      Pointer Control:
        acceleration:  2/1    threshold:  4
      Screen Saver:
        prefer blanking:  yes    allow exposures:  yes
        timeout:  600    cycle:  600
      Colors:
        default colormap:  0x20    BlackPixel:  0x0    WhitePixel:  0xffffff
      Font Path:
        /usr/share/fonts/X11/misc,built-ins
      DPMS (Energy Star):
        Display is not capable of DPMS
      nohup: ignoring input and appending output to 'nohup.out'
      nohup: appending output to 'nohup.out'
      Connection to 'atlastk.org:53800'...
      
      ****************************************************************************
           Your application is connected to the free public server. Welcome!
      ****************************************************************************
      
      http://atlastk.org/xdh.php?_token=3d4b8e98-cf4a-4d3e-af0f-856477c9d408
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      Open above URL in a web browser. Enjoy!
      
      Failed to move to new namespace: PID namespaces supported, Networknamespace supported, but failed: errno = Operation not permitted
      Trace/breakpoint trap (core dumped)
      Failed to move to new namespace: PID namespaces supported, Networknamespace supported, but failed: errno = Operation not permitted
      Trace/breakpoint trap (core dumped)
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: firefox: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: iceweasel: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: seamonkey: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: mozilla: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: epiphany: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: konqueror: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: chromium: not found
      Failed to move to new namespace: PID namespaces supported, Networknamespace supported, but failed: errno = Operation not permitted
      Trace/breakpoint trap (core dumped)
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: google-chrome: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: www-browser: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: links2: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: elinks: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: links: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: lynx: not found
      /usr/bin/xdg-open: 851: /usr/bin/xdg-open: w3m: not found
      xdg-open: no method available for opening 'http://atlastk.org/xdh.php?_token=3d4b8e98-cf4a-4d3e-af0f-856477c9d408'
      
      • [^] # Re: Ah ben ça tombe bien !

        Posté par  . Évalué à 1.

        Si tu ouvres http://atlastk.org/xdh.php?_token=3d4b8e98-cf4a-4d3e-af0f-856477c9d408 dans une nouvelle fenêtre de ton brouteur, tu as des boutons lesquels tu peux agir. Ils modifient en direct le comportement du graphique qu'on voit sur la page où y a le code et le shell

      • [^] # Re: Ah ben ça tombe bien !

        Posté par  (site web personnel) . Évalué à 1.

        Ca m'est marrant, quand on exécute le main, on vois une petite fenêtre dans le navigateur comme si on exécutait le programme python localement.

        Bon travail!

        Merci, mais je n'ai aucun mérite. C'est parce que le programme tourne dans Repl.it, une application web qui permet de disposer, sans rien avoir à installer, d'un environnement de développement pour pas mal de langages, juste en utilisant un navigateur web. Les logs proviennent de cette appli.

        Mais ça fait quoi exactement?

        Comme indiqué dans le commentaire plus haut, noyé dans les logs, il y a une URL (elle change à chaque fois) qui, lorsqu'on l'ouvre, propose une interface permettant de faire varier la valeur des différents paramètres de la fonction gaussienne et de voir leur influence sur le graphique.

        Avec le programme d'origine, on est obligé de modifier ces valeurs directement dans le programme, ce qui n'est pas très pratique. On peut également modifier le programme pour passer les valeurs de ces paramètres via des arguments de la ligne de commande, ou encore en permettant leur saisie à coup de input(). Seule cette dernière option est présentée dans le guide faisant l'objet de ce journal mais, hormis sa présentation et un exemple de mise en œuvre, elle n'est pas exploitée par ailleurs.

        Une autre solution serait de doter le programme d'une GUI. Malgré les indéniables avantages d'une telle interface, une telle option n'est même pas évoquée dans ce guide. Probablement, mais ce n'est qu'une supposition, parce que l'effort nécessité par la mise en œuvre et l'apprentissage d'un des nombreux frameworks existants est disproportionné par rapport aux bénéfices qu'on en retirerait dans le cadre de leur utilisation dans des programmes tels que ceux présentés dans ce guide.

        Ces frameworks sont complexes parce qu'ils proposent des fonctionnalités évoluées. Le toolkit Atlas est destiné à être utilisé dans les cas on l'on n'a besoin que de fonctionnalités basiques. Et c'est aussi pour cela que l'utilisation du toolkit Atlas ne nécessite que des connaissances basiques, faciles à acquérir, en technologies web.

        J'ai dernièrement fait l'acquisition d'un kit électronique d'apprentissage destiné à être utilisé avec un Raspberry Pi. Il y avait un tutoriel fournit avec ce kit proposant, à titre d'exemple, un programme Python destiné à piloter une LED RGB. Ce programme faisait afficher des couleurs aléatoires par la LED. Là aussi, aucune interactivité. Alors, à l'instar de ce que j'ai fait ici, j'ai modifié le programme pour lui ajouter une GUI, à l'aide du toolkit Atlas, programme que l'on peut voir à l'œuvre ici.

        Beaucoup de tutoriels gagneraient en attractivité en proposant des exercices et des exemples de programmes avec un minimum d'interactivité, à l'heure où tout le monde est habitué à manipuler des interfaces graphiques avec leurs smartphones. Et l'un des buts du toolkit Atlas est justement de pouvoir facilement modifier un programme pour le rendre interactif par l'ajout d'une GUI.

        Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • # Un fix sur range()

    Posté par  (site web personnel) . Évalué à 2.

    En page 17, il est écrit dans le paragraphe range(start:stop:step), corriger en range(start,stop,step).

    Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.