Developpez.com

Le Club des Développeurs et IT Pro

Apprendre l'analyse scientifique avec Python

Un tutoriel de Yannick Copin

Le 2017-12-18 14:02:36, par yannick.copin, Membre habitué
Chers membres du club,

J'ai le plaisir de vous présenter ce tutoriel  :

Apprendre l'analyse scientifique avec Python
Ce cours est une initiation au langage Python et à son utilisation dans le domaine de l'analyse scientifique (manipulation de données numériques). Il a avant tout été développé comme support pour des enseignements en présentiel de 20h environ, et ne se veut donc pas complet : beaucoup d'éléments sont développés à l'oral, notamment les solutions des exercices.
Bonne lecture

Retrouvez les meilleurs cours et tutoriels pour apprendre Python.
  Discussion forum
10 commentaires
  • disedorgue
    Expert éminent sénior
    Bonjour,

    Je trouve que vous êtes un peu sévère, ici, le responsable, ce n'est pas yannick.copin mais plus ceux qui lui on demandé de fournir son doc.
    Le doc est concis, il bypass pas mal de concept, mais comme indiqué, en principe, ce n'est qu'un support de court et il fait le boulot.

    Après le choix de la version python 2 au lieu de python 3 ne retire en rien le principe et si en tant que développeurs, vous n'êtes pas capable de vous adapter pour passer de l'un à l'autre, faut arrêter ce métier.

    D'ailleurs une petite parenthèse:
    Code :
    if ( i%3 !=0 )
    n'est pas
    Code :
    if not i%3
    Et faut arrêter de dire que python 2 est dépassé: il tourne encore beaucoup en entreprise. Python 3 n'est que très rarement installé de base sur un serveur à l'heure actuelle.

    Tant que l'on est dans une phase de transition, ce qui est le cas pour au moins 3 ans, un doc sous python 2 est toujours d'actualité.
    Surtout qu'ici, le doc n'est pas sur python en lui-même mais comment s'en servir...
  • martopioche
    Membre éclairé
    Bonjour,

    je vais me permettre de rebondir sur ces remarques quand au choix Python 2 qui sont, je vais être direct, inacceptables.

    Envoyé par yannick.copin
    raison historique: j'ai commencé ce cours en 2012, à l'époque de Python 3.2 encore considéré comme "préliminaire"
    donc j'en déduis que ce tuto a été écrit en 2012 et que c'est un simple rappel publicitaire sans valeur ajoutée ni maintenance depuis 6 ans.

    raison pratique: les enseignements se font sur des machines de l'université dont je n'ai pas le contrôle, et qui sont nativement équipées de Python 2.7
    D'une part, vous ne pouvez sérieusement pas demander à avoir des machines à jour de moins de 6 ans ?

    Quand bien même, ce tuto vous le publiez sur un site public hors université, il se doit d'être un minimum à jour. Et même si vous vous vous reposez sur des machines ne vous proposant que l'interpréteur Python 2, en bientôt 2018, vous devez au moins écrire du code compatible Python 3, donc inclusion de future. Car

    Il est clair que le portage à Python 3 est nécessaire à terme, mais il ne me semble pas crucial pour une introduction à Python.
    et bien si c'est pour de l'enseignement autre que l'archéologie des langages, si. Nous sommes bientôt en 2018, le support de Python 2 prends fin en 2020. Les dépendances principales commencent à abandonner le support de Python 2 (Django 2 sorti il y a quelques jours a ouvert ce bal). Vous parlez de Python scientifique, Numpy abandonnera le support de Python 2 en 2019, Scipy lui emboitera le pas

    Alors non, c'est inacceptable aujourd'hui de lire du code Python avec un
    Code :
    print ""
    au lieu d'un
    Code :
    print()
    et toutes les autres incompatibilité Python 3. Oui, il va être compliqué d'expliquer pourquoi écrire
    Code :
    list(range(10))
    vu que range en Python 2 génère une liste.

    Je suis sévère et je ne prends plus de pincettes sur ce sujet. Je sais que c'est du boulot pour mettre tout un cours à jour…*Je le sais car je l'ai fait il y a un an. Mais je me permet d'être d'autant plus sévère que votre cours complet (celui de readthedocs) couvre un nombre pertinent de points.

    Et c'est d'autant plus triste qu'il y a énormément de manque de rigueur… Énormément de violations de la PEP8 (déjà le choix d'une variable avec un caractère mais en particulier
    Code :
    l
    ). Un
    Code :
    if (i%3 != 0)
    avec des parenthèses redondantes qui peut se simplifier en
    Code :
    if not i % 3
    et dans ce cas particulier en
    Code :
    for i in range(0, 10, 3)
    … Ok, je sais, c'était là pour l'exemple du filtre de la liste en intension.

    Bref, si j'ai pris la peine d'intervenir certes de manière sévère, c'est que ce cours mérite d'être mis à jour et qu'aujourd'hui, aucune excuse de non-mise à jour n'est valable si vous voulez assurer un enseignement de qualité.
  • yannick.copin
    Membre habitué
    Avant de me faire allumer plus avant, je voudrais que les choses soient bien claires. Je n'ai rien demandé à personne: l'équipe de developpez.net m'a contacté pour mettre en ligne le cours de python (http://informatique-python.readthedocs.io/) que j'enseigne depuis quelques années. Je fournis donc ce matériel pédagogique à la communauté as it is: si vous avez des commentaires cordiaux et constructifs, ils sont les bienvenus; si vous avez des problèmes philosophiques avec mes méthodes d'enseignement, ma façon de coder ou le choix Python 2/3, ne perdez pas votre temps à me crier dessus.
  • marco056
    Membre chevronné
    Envoyé par yannick.copin
    Avant de me faire allumer plus avant, je voudrais que les choses soient bien claires. Je n'ai rien demandé à personne: l'équipe de developpez.net m'a contacté pour mettre en ligne le cours de python (http://informatique-python.readthedocs.io/) que j'enseigne depuis quelques années. Je fournis donc ce matériel pédagogique à la communauté as it is: si vous avez des commentaires cordiaux et constructifs, ils sont les bienvenus; si vous avez des problèmes philosophiques avec mes méthodes d'enseignement, ma façon de coder ou le choix Python 2/3, ne perdez pas votre temps à me crier dessus.
    Bonjour,
    J'ai commencé à enseigner la programmation à la même époque.
    Mes collègues et moi avons suivi une formation en python2 mais nous avons décidé d'enseigner la version 3 tout de suite.
    Mon premier message indiquait un non intérêt pour cette version : je ne regarderai pas votre tuto parce qu'il est en python2.
    Après, on peut quand même vous remercier de mettre à dispo ce cours (même s'il ne servira pas à grand monde et que je ne pourrai pas le conseiller à mes étudiants).
    martopioche a raison sur le fond : sur la forme, on peut discuter
    Bonnes fêtes de fin d'année à tous et toutes
  • Malick
    Community Manager
    Salut à tous,

    Merci pour vos différents retours.

    Cela dit, j'ai moi-même contacté Yannick pour publier son cours, et à mon avis c'est toujours un plus pour ceux qui veulent s'initier à Python, d'autant plus que certains ne sont pas encore passé à Python 3.

    Sinon, je remercie encore Yannick pour son tutoriel.
  • Julien N
    Membre éprouvé
    Bonjour,

    Votre tuto est concis, mais assez complet. Pas mal du tout! J'ai une interrogation tout de fois. Pourquoi Python 2?

    Sinon sur la partie lecture/écriture fichier, même si je comprends la pédagogie derrière le choix open + close, si je devais ne mettre qu'un exemple je choisirais de le faire avec with :

    Code :
    1
    2
    3
    4
    outfile = open("carres.dat", 'w')
    for i in range(1, 10):
        outfile.write("{}  {}\n".format(i, i**2))
    outfile.close()
    Devriendrait:
    Code :
    1
    2
    3
    for i in range(1, 10):
        with open("carres.dat", "w") as outfile:
            outfile.write("{}  {}\n".format(i, i**2))
    Ciao ciao

    J
  • marco056
    Membre chevronné
    Je suis assez d'accord et le fait que ce soit en python2 fait que je n'ai pas cherché si cela était vraiment bien élaboré.
    Question à Julien N : avec ta méthode (que j'utilise assez souvent), le fichier n'est-il pas ouvert 9 fois (contre 1 sinon) ?
  • Julien N
    Membre éprouvé
    Envoyé par marco056
    Question à Julien N : avec ta méthode (que j'utilise assez souvent), le fichier n'est-il pas ouvert 9 fois (contre 1 sinon) ?
    Si . J'ai été un peu vite, il faudrait ouvrir le fichier avant la boucle...

    Code :
    1
    2
    3
    with open("carres.dat", "w") as outfile:
        for i in range(1, 10):
            outfile.write("{}  {}\n".format(i, i**2))
  • yannick.copin
    Membre habitué
    Bonjour, et merci pour vos commentaires.

    Envoyé par Julien N

    Votre tuto est concis, mais assez complet. Pas mal du tout! J'ai une interrogation tout de fois. Pourquoi Python 2?
    C'est simple:
    • raison historique: j'ai commencé ce cours en 2012, à l'époque de Python 3.2 encore considéré comme "préliminaire"
    • raison pratique: les enseignements se font sur des machines de l'université dont je n'ai pas le contrôle, et qui sont nativement équipées de Python 2.7

    Il est clair que le portage à Python 3 est nécessaire à terme, mais il ne me semble pas crucial pour une introduction à Python. J'aborde ces questions en Sec. II.K.1 (http://yannick-copin.developpez.com/...python#LII-K-1)

    Envoyé par Julien N

    Sinon sur la partie lecture/écriture fichier, même si je comprends la pédagogie derrière le choix open + close, si je devais ne mettre qu'un exemple je choisirais de le faire avec with
    Il y a un certain nombre de fonctionnalités Python que je passe sous silence dans cette introduction (cf. Sec. II.K), dont la gestion de contexte (with) qui ne me semble pas primordiale dans une introduction.

    Cordialement,

    Yannick
  • marco056
    Membre chevronné
    Pas de souci quant à la qualité du travail.
    De mon côté, c'est simplement inutilisable pour mon enseignement mais ce n'est pas bien grave.