{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction à l'utilisation des notebooks Jupyter\n", "\n", "## 1- Présentation :\n", "\n", "Les notebooks Jupyter (pour **Ju**lia, **Pyt**hon et **R**, qui sont 3 langages de programmation) permettent l'apprentissage d'un langage de programmation tel que Python et peuvent fournir un bon complément aux séances de cours pour revoir des notions abordées en classe ou anticiper sur des notions nouvelles, et ce, tant sous forme de cours que de petits exercices. \n", "\n", "Ils permettent aussi l'écriture guidée d'un programme conséquent en décomposant le code par parties testées individuellement.\n", "\n", "Ceci est un **notebook Jupyter** : comme on peut le voir, il est constitué de deux types de cellules :\n", "\n", "* des **cellules contenant du texte** (comme celle-ci) et qui permettent de donner des explications ou des consignes. Il faudra les lire avec attention.\n", "\n", "* des **cellules de code** comme celles données au paragraphe 3 (Sauf exception, nos cellules de code seront toujours écrites en **Python3**)\n", "\n", "**Le code contenu dans une cellule pourra être modifié à volonté.** \n", "\n", "Pour lancer son exécution, on utilisera l'association des touches **CTRL et ENTREE** du clavier.\n", "\n", "Dans un notebook Jupyter il y a très souvent plusieurs cellules de code. **Il faudra toujours les exécuter dans l'ordre dans lequel elles apparaissent** de façon à suivre correctement la démarche souhaitée par le concepteur.\n", "\n", "On peut mettre des notebooks en ligne (voir le paragraphe 4), mais la solution retenue pour notre cours de NSI est celle de l'installation sur le poste de travail.\n", "\n", "Cela nécessite de posséder un logiciel capable de lire ces fichiers notebooks : nous avons retenu **VSCodium** qui peut fonctionner sous Linux, Windows ou Mac.\n", "\n", " * Un Cahier Multimédia*, nommé **\"Notebooks Jupyter** a été créé sur l'ENT pour expliquer l'installation et l'utilisation de VSCodium sur votre ordinateur.\n", "\n", " Un autre Cahier Multimédia a été créé également sur l'ENT pour vous donner la possibilité \n", " d'installer sur votre ordinateur **une machine virtuelle quasi identique aux ordinateurs du lycée** : dans cette machine virtuelle on trouvera **tous les logiciels du lycée déjà installés** (dont VSCodium) mais aussi une grande partie des notebooks utilisés en cours d'année\n", "\n", "\n", "## 2- Travailler un notebook avec VSCodium\n", "\n", "### 2.1- Organisation des fichiers\n", "\n", "Beaucoup des notebooks utilisés contiennent des images, mais ces images ne sont pas intégrées au fichier du notebook : les fichiers images correspondants doivent donc se trouver **exactement** à l'endroit où le notebook est censé les trouver. De même, certains notebooks font appel à des fichiers de données supplémentaires : ils seront placés dans un dossier nommé *data*.\n", "\n", "On doit donc **organiser** correctement son disque dur... \n", "\n", "Sur votre disque dur (par exemple dans le dossier des **Documents**) :\n", "\n", " - Créer un dossier appelé **\"Notebooks\"** \n", "\n", " - Aller sur le site : https://laboiteaphysique.fr/site2/index.php/numerique-et-sciences-informatiques et chercher dans la page de Téléchargement le fichier **images.zip**\n", "\n", " - Télécharger ce fichier *images.zip* et le copier dans le dossier *Notebbooks*\n", "\n", " - Le décompresser dans ce dossier *Notebbooks*\n", "\n", " - Créer un dossier *data* dans le dossier Notebooks (pas dans le dossier des images...)\n", "\n", "Le principe de l'arborescence sera donc le suivant :\n", "\n", "![ image : structure_dossier.png](images/structure_dossier.png)\n", "\n", "Si dans une cellule de texte d'un notebook on voit quelque chose comme :\n", "\n", "![ image : image_manquante.png](images/image_manquante.png)\n", "\n", "c'est que l'image attendue (ici *microbit_aff_1.png*) **n'est pas présente dans le dossier *images* **.\n", "\n", "Donc, lorsque vous aurez un nouveau notebook à travailler, il faudra récupérer le notebook et éventuellement les images et parfois les fichiers de données associés, puis :\n", "\n", " - placer le notebook dans le dossier *Notebooks* de votre disque dur\n", " - placer les images associées dans le dossier *images* contenu dans ce dossier *Notebooks*\n", " - placer les fichiers associés dans le dossier *data* lui aussi contenu dans le dossier *Notebooks*\n", "\n", "### 2.2- Ouverture d'un notebook avec VSCodium\n", "\n", "**Juste au-dessus** du notebook on trouvera :\n", "\n", " - à droite : une zone de notification avec 3 rubriques\n", "\n", " - à gauche une série d'icônes :\n", "\n", "![image : not_trusted_vscodium.png](images/not_trusted_vscodium.png)\n", "\n", "Si un notebook n'a jamais été ouvert sur l'ordinateur, il est notifié comme **\"Not trusted\"**. On va devoir déclarer que l'on fait confiance au contenu de ce notebook en cliquant sur le bouton bleu **\"Trust\"** en bas à droite. Dans la zone de notification on verra alors l'indication **\"Trusted\"**\n", "\n", "![image : not_started_vscodium.png](images/not_started_vscodium.png)\n", "\n", "Le Serveur Jupyter doit être actif. Dans la zone de notification, on doit voir **Jupyter Server:local** associé à une icône de **couleur verte**. Si ce n'est pas le cas (comme dans l'image ci-dessus), cliquer sur l'icône la plus à gauche (double flèche) qui demande l'exécution de toutes les cellules de code : cela va forcer le démarrage du serveur Jupyter. On devra ensuite cliquer sur la septième icône (\"Clear All Output\" pour effacer toutes les sorties des cellules de code).\n", "\n", "La troisième notification doit être \"**Python 3: idle**\"\n", "\n", "On doit alors obtenir ceci (on pourra alors commencer à travailler avec le notebook):\n", "\n", "![image : icones_vscodium.png](images/icones_vscodium.png)\n", "\n", "Les icônes : leur signification est donnée par une info-bulle obtenue en laisant la souris dessus.\n", "\n", "\n", " - les trois premières icônes permettent de faire exécuter tout ou partie des cellules de code\n", "\n", " - la quatrième permet de redémarer le Serveur Jupyter suite à son arrêt\n", "\n", " - la cinquième (carré rouge) permet de forcer l'arrêt du serveur Jupyter (par exemple lorsqu'un code mal écrit tourne dans une boucle sans fin...)\n", "\n", " - la sixième (symbole +) sert à insérer une nouvelle cellule \n", "\n", " - la septième permet d'effacer toutes les sorties des cellules\n", "\n", " - la huitième permet de suivre l'évolution des variables\n", "\n", " - l'avant-dernière permet de **sauvegarder** le notebook : **INDISPENSABLE** pour sauvegarder régulièrement le code ajouté dans les cellules !!!\n", "\n", " - la dernière permet d'exporter le notebook dans différents formats (dont le pdf) mais cela nécessite l'ajout d'extensions\n", "\n" ] }, { "source": [ "## 3- Un exemple d'utilisation \n", "\n", "Exécuter le code de la cellule suivante (**Touches CTRL + ENTREE**). \n", "\n", "Si le code n'a pas été modifié on obtiendra : 3\n", "\n", "Après ce premier essai, modifier les valeurs des variables a et b, et observer le résultat" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 1\n", "b = 2\n", "print(a + b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lorsque l'on modifie un code valide existant, il est possible que cela génère une erreur. Observer celui-ci, puis l'exécuter. La ligne provoquant l'erreur est indiquée ; cette erreur est ensuite explicitée :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 1\n", "b = 2\n", "print(a + c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Voici un code qui pourrait sembler erroné. Pourtant son exécution peut donner un résultat valide :" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = 1\n", "c = 2\n", "print(a + b)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Explication : comme dans un interpréteur Python classique, **l'interpréteur Python associé au notebook garde en mémoire les valeurs des variables utilisées depuis l'ouverture de cet interpréteur.** Or dans la première cellule de code de ce notebook, nous avons défini une variable b et nous l'avons initialement associée à la valeur 2. Ensuite chacun aura pu éventuellement changer cette valeur, dans le code N°1 et pourquoi pas dans le code N°2. \n", "\n", "L'appel de la fonction print(a + b) ne provoque donc pas d'erreur car b est connu de l'interpréteur.\n", "\n" ] }, { "source": [ "## 4- Notebooks en ligne :\n", "\n", "Il est également possible de travailler les notebooks dans une version en ligne si on est devant un ordinateur n'ayant pas VSCodium d'installé.\n", "Pour cela, les notebooks créés pour le cours de NSI du lycée Pasteur de Somain se trouvent aussi à l'adresse : https://mybinder.org/v2/gh/laboiteaphysique/conda/master \n", "\n", " - avantage : rien à installer sur son PC, il suffit d'un navigateur Web pour y accéder\n", "\n", " - **inconvénients** : \n", " - il y a un **temps de chargement non négligeable** car le serveur auquel on accède créée un conteneur dans lequel va s'exécuter le serveur Jupyter et le notebook chargé (cela peut prendre parfois plusieurs minutes...)\n", "\n", " - il arrive que le serveur plante, notamment lors de connexions simultanées...raison pour laquelle j'ai arrêté d'utiliser cette possibilité en classe.\n" ], "cell_type": "markdown", "metadata": {} } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3-final" } }, "nbformat": 4, "nbformat_minor": 2 }