{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" }, "toc": "true" }, "source": [ "# Table of Contents\n", "

1  Introduction aux notebooks Jupyter
1.1  Présentation de Jupyter
1.1.1  Qu’est-ce que Jupyter ?
1.1.2  Qu’est-ce qu’un notebook Jupyter ?
1.1.3  Qu'est-ce que l’écosystème Jupyter ?
1.1.4  Quels problèmes résolvent les notebooks Jupyter ?
1.2  Comment installer Jupyter
1.3  Comment utiliser Jupyter pour écrire des documents simples
1.3.1  Aperçu de l'interface de Jupyter : comment lancer Jupyter
1.3.2  Aperçu de l'interface de Jupyter : un notebook vide
1.3.3  Aperçu de l'interface de Jupyter : un notebook en train d'être édité
1.4  Des exemples en Python
1.4.1  Premier contact avec Python
1.4.2  Manipulation de tableaux numpy et affichage avec Matplotlib
1.4.3  Pavage de Penrose avec un joli programme
1.5  Présentant ma propre utilisation de notebooks Jupyter
1.5.1  Quelques micro exemples très pratiques
1.5.2  Correction interactive de TP en prépa (PSI)
1.5.3  Cours d'algorithmique en L3 informatique
1.5.4  Entraînement à l'oral de modélisation d'agrégation (maths option info)
1.6  Conclusion : conseils pour devenir un-e expert-e en Jupyter
1.7  Références et liens
1.7.1  Liens
1.7.2  Publications universitaires
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Introduction aux notebooks Jupyter\n", "\n", "Ce tutoriel durera 60 minutes, le mercredi 05 février, à la [conférence Didapro #8](https://www.didapro.org/8/programme/#atelier), à Lille.\n", "\n", "1. Suivez la présentation sur votre écran : `$ regarder_ecran nom_ma_machine`,\n", "2. Ensuite il y aura une activité *à faire par vous même*,\n", "3. Nous terminerons par des exemples de ma propre utilisation de Jupyter et des démonstrations.\n", "\n", "\n", "> Par Lilian Besson, de l'ENS de Rennes (département Informatique). \n", "> Liens : [`perso.crans.org/besson`](https://perso.crans.org/besson/) & [`GitHub.com/Naereen`](https://GitHub.com/Naereen)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Ces ressources sont disponibles en ligne sur \n", " [`frama.link/Atelier-Jupyter-Didapro8`](https://frama.link/Atelier-Jupyter-Didapro8)\n", "- A FAIRE MAINTENANT : Ouvrez un navigateur web, et allez sur ce lien. Cliquez sur le lien \"Binder\" et laissez cette page charger.\n", "- N'hésitez pas à m'interrompre et poser des questions, si besoin.\n", "\n", "

\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Présentation de Jupyter\n", "\n", "- Qu'est-ce que Jupyter ?\n", "- Qu'est-ce qu’un notebook Jupyter ?\n", "- Qu'est-ce que l’écosystème Jupyter ?\n", "- Quels problèmes résolvent les notebooks Jupyter ?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Qu’est-ce que Jupyter ?\n", "\n", "Un environnement de développement intégré (IDE) \"WYSIWYG\" (What-you-see-is-what-you-get) pour (presque) tous les langages de programmation, que l'on utilise depuis un navigateur Internet.\n", "\n", "Par exemple, il peut être utilisé pour des langages dynamiques interprétés, tels que Python, OCaml, Julia ou Bash, mais aussi pour des langages compilés, tels que C/C++.\n", "\n", "C'est un ensemble de logiciels libres et gratuits, installables sur n'importe quel ordinateur moderne et qui sont faciles à prendre en main." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Qu’est-ce qu’un notebook Jupyter ?\n", "\n", "C'est un fichier, à l'extension `.ipynb` (*ipy*thon *n*ote*b*ook), qui est un format de texte brut de type [JSON](https://www.json.org/).\n", "\n", "Ce fichier peut être converti en présentation (slide show) comme celle utilisée aujourd'hui, en page web statique (HTML), en document prêt à être imprimé (PDF), en script (Python ou autre)\n", "\n", "Le format de fichier, et tous les logiciels de l'environnement Jupyter, sont gratuits et sous licence libre, comme Python." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Un document contient des cellules de texte (en Markdown ↑), et de code ↓. \n", "*Ceci est une cellule de texte*." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Introduction aux notebooks Jupyter.ipynb: HTML document, UTF-8 Unicode text, with very long lines\r\n" ] } ], "source": [ "# Et celle ci est une celle de code\n", "# (ici dans le terminal, depuis Python dans Jupyter ou IPython, avec !commande ...)\n", "!file \"Introduction aux notebooks Jupyter.ipynb\"" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{\r\n", " \"cells\": [\r\n", " {\r\n", " \"cell_type\": \"markdown\",\r\n", " \"metadata\": {\r\n", " \"slideshow\": {\r\n", " \"slide_type\": \"skip\"\r\n", " },\r\n", " \"toc\": \"true\"\r\n", " },\r\n" ] } ], "source": [ "!head \"Introduction aux notebooks Jupyter.ipynb\"" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \"Un document contient des cellules de texte (en Markdown ↑), et de code ↓. \\n\",\r\n" ] } ], "source": [ "!grep \"contient des cellules\" \"Introduction aux notebooks Jupyter.ipynb\" | head -n1" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Qu'est-ce que l’écosystème Jupyter ?\n", "Il a commencé sous le nom [ipython](http://www.ipython.org/) il y a environ 15 ans, conçu pour être utilisé uniquement pour le langage de programmation Python, et de nos jours il a évolué en un écosystème open-source mature.\n", "\n", "*Jupyter* est nommé d'après Jupiter, et pour *Ju*lia, *pyt*hon, et *R*, les trois premiers langages pour lesquels Jupyter était disponible." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "L'environnement Jupyter est utilisé par des centaines de milliers de scientifiques du monde entier, allant d'étudiants au lycée, en prépa et à l'université en France et ailleurs, aux meilleures équipes utilisant les sciences des données et du numérique.\n", "\n", "Les notebooks Jupyter sont une alternative gratuite et open-source à l’EDI inclus dans les logiciels propriétaires et payants qui dominent le marché :\n", "\n", "- [MATLAB](https://fr.mathworks.com/help/matlab/),\n", "- [Wolfram's Mathematica](https://www.wolframalpha.com/),\n", "- et [MapleSoft's Maple](https://www.maplesoft.com/)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Parmi ses récentes utilisations réussies, on peut noter :\n", "\n", "1. La toute première image d’un trou noir obtenue par Katie Bouman et ses collègues. \n", " Voir par exemple [`www.nationalgeographic.com/science/2019/04/first-picture-black-hole-revealed-m87-event-horizon-telescope-astrophysics/`](http://www.nationalgeographic.com/science/2019/04/first-picture-black-hole-revealed-m87-event-horizon-telescope-astrophysics/) et [`www.bbc.com/news/science-environment-47891902`](http://www.bbc.com/news/science-environment-47891902).\n", "\n", "2. Ou pour l'analyse de données par des économistes, comme le lauréat de prix Nobel, Paul Romer. \n", " Voir par exemple [`PaulRomer.net/jupyter-mathematica-and-the-future-of-the-research-paper/`](http://paulromer.net/jupyter-mathematica-and-the-future-of-the-research-paper/)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Quels problèmes résolvent les notebooks Jupyter ?\n", "\n", "Pourquoi c'est un outil puissant, à la fois facile à apprendre et à utiliser pour les débutants et puissant pour les utilisateurs experts.\n", "\n", "- Un outil unique pour rédiger des petits morceaux de code (exercices, TP, tutoriel, analyse de données etc), avec du texte ou une documentation, les résultats de l'exécution du code, des figures etc,\n", "\n", "- Facilité de conversion vers d'autres formats : scripts exécutables sans Jupyter, fichiers statiques HTML, fichiers imprimables PDF etc" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Encore plus d'autres formats : présentations (slides) interactives,\n", "- Stocké comme des fichiers textes, bonne compatibilité avec les gestionnaires de version tels que `git`.\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "---\n", "## Comment installer Jupyter\n", "\n", "En suivant le tutoriel en ligne depuis [`jupyter.org/install.html`](https://jupyter.org/install.html), il est facile d’installer tout l’écosystème Jupyter sur tout ordinateur avec `Python` et un gestionnaire de paquets (`pip` ou `conda`) installé." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "→ [`jupyter.org/install.html`](http://jupyter.org/install.html)\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Sur Windows ou Mac OS X, ou même la plupart des systèmes GNU/Linux, un installeur gratuit appelé Anaconda ([`www.anaconda.com/distribution`/](https://www.anaconda.com/distribution/)) installe tout ça en un clic !\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Comment utiliser Jupyter pour écrire des documents simples\n", "\n", "Je vais vous montrer l'interface utilisateur graphique des notebooks Jupyter, et nous allons voir ensemble comment éditer des cellules de texte ou de code, et exécuter des cellules.\n", "\n", "Ceci est une **cellule de texte**. On peut *utiliser* le langage à balise [Markdown](http://commonmark.org/) ! Et $\\LaTeX^2$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Aperçu de l'interface de Jupyter : comment lancer Jupyter\n", "\n", "- Sous Mac ou GNU/Linux, dans un terminal : `$ jupyter-notebook`,\n", "- Sous Windows, avec Anaconda, il y a un lanceur graphique installé.\n", "\n", "![](figs/lancer_jupyter_notebook.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Aperçu de l'interface de Jupyter : un notebook vide\n", "\n", "![](figs/un_notebook_vide.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Aperçu de l'interface de Jupyter : un notebook en train d'être édité\n", "\n", "![](figs/un_notebook_en_train_detre_edite.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "---\n", "## Des exemples en Python\n", "\n", "1. Premier contact avec Python,\n", "2. Manipulation de tableaux numpy et affichage avec Matplotlib,\n", "3. Un exemple plus impressionnant : pavage de Penrose." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Premier contact avec Python\n", "\n", "Des petits exemples d'utilisation de Python, venant de la page d'accueil de [`python.org`](https://www.python.org/) :" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Le produit de ces 4 nombres est 384\n" ] } ], "source": [ "nombres = [2, 4, 6, 8]\n", "produit = 1\n", "for nombre in nombres:\n", " produit *= nombre\n", "\n", "print(\"Le produit de ces\", len(nombres), \"nombres est\", produit)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Date actuelle :\n", "2020-02-05 09:59:11.046061\n" ] } ], "source": [ "import datetime\n", "\n", "print(\"Date actuelle :\")\n", "print(datetime.datetime.now())" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 \n" ] } ], "source": [ "def fib(n):\n", " \"\"\" Affiche les premières valeurs de la suite de Fibonacci <= n.\"\"\"\n", " a, b = 0, 1\n", " while a < n:\n", " print(a, end=' ')\n", " a, b = b, a+b\n", " print()\n", "\n", "fib(1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Depuis un notebook Jupyter, la documentation de n'importe quelle valeur peut être affichée avec la touche `Tab`, ou en utilisant :" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "fib?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Manipulation de tableaux numpy et affichage avec Matplotlib\n", "\n", "> Cet exemple est tiré d'un exercice d'oral de CentraleSupélec pour PSI (166 officiel de la Taupe 2019)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Sur un plateau style Monopoly à 12 cases, un pion part de la case 0, et on joue au dé (à 6 faces) pour avancer à chaque coup de $x$ cases (où $x\\sim\\mathcal{U}(1,\\dots,6)$).\n", "\n", "L'exercice demande de simuler la variable aléatoire $Y_n$ représentant la case sur laquelle le pion se trouve après $n$ déplacements." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "import numpy as np\n", "import numpy.random as rd\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "# pour de jolis graphiques\n", "sns.set(context=\"notebook\", style=\"whitegrid\", palette=\"hls\", font=\"sans-serif\", font_scale=1.3)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "case_max = 12\n", "\n", "def prochaine_case(case):\n", " return (case + rd.randint(1, 6+1)) % case_max # modulo 12\n", "\n", "def Yn(duree, depart=0):\n", " case = depart\n", " for coup in range(duree):\n", " case = prochaine_case(case)\n", " return case" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Avant de s'en servir pour simuler plein de trajectoirs, on peut vérifier que en un coup, on avance pas plus de 6 cases :" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[5, 6, 6, 5, 4, 4, 5, 5, 5, 3]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[Yn(1) for _ in range(10)] # toutes 1 <= ... <= 6" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "On peut ensuite réaliser des histogrammes des 12 valeurs possibles pour $Y_n$, avec par exemple 10000 répétitions iid." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def histogramme(duree, repetitions=10000):\n", " cases = [Yn(duree) for _ in range(repetitions)]\n", " frequences = [0] * case_max\n", " for case in cases:\n", " frequences[case] += 1\n", " return frequences / np.sum(frequences)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "
" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'Histogramme de cases visitées en 0 coups')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n = 0\n", "plt.figure(figsize=(10, 7))\n", "plt.bar(np.arange(case_max), histogramme(n))\n", "plt.title(\"Histogramme de cases visitées en \" + str(n) + \" coups\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "
" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'Histogramme de cases visitées en 1 coups')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n = 1\n", "plt.figure(figsize=(10, 7))\n", "plt.bar(np.arange(case_max), histogramme(n))\n", "plt.title(\"Histogramme de cases visitées en \" + str(n) + \" coups\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n = 10\n", "_ = plt.figure(figsize=(10, 7))\n", "_ = plt.bar(np.arange(case_max), histogramme(n))\n", "_ = plt.title(\"Histogramme de cases visitées en \" + str(n) + \" coups\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cela montre qu'avec une trajectoire assez longue, le pion a une probabilité identique de terminer sur chaque position." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "
" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'Histogramme de cases visitées en 500 coups')" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n = 500\n", "plt.figure(figsize=(10, 7))\n", "plt.bar(np.arange(case_max), histogramme(n))\n", "plt.title(\"Histogramme de cases visitées en \" + str(n) + \" coups\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Pavage de Penrose avec un joli programme\n", "\n", "Ce petit code (qui n'est pas de moi) affiche un [pavage (infini) de Penrose](https://en.wikipedia.org/wiki/Penrose_tiling) et le sauvegarde dans une image PNG de taille 2000×2000 :" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4.49 s, sys: 0 ns, total: 4.49 s\n", "Wall time: 4.5 s\n" ] } ], "source": [ "%%time\n", "from functools import reduce\n", "_ =\\\n", " \"\"\"if!\n", " 1:\"e,V=200\n", " 0,(0j-1)**-.2;\n", " v,S=.5/ V.real,\n", " [(0,0,4 *e,4*e*\n", " V)];w=1 -v\"def!\n", " E(T,A, B,C):P\n", " ,Q,R=B*w+ A*v,B*w+C\n", " *v,A*w+B*v;retur n[(1,Q,C,A),(1,P\n", " ,Q,B),(0,Q,P,A)]*T+[(0,C ,R,B),(1,R,C,A)]*(1-T)\"f\n", "or!i!in!_[:11]:S =sum([E (*x)for !x!in!S],[])\"imp\n", " ort!cair o!as!O; s=O.Ima geSurfac\n", " e(1,e,e) ;c=O.Con text(s); M,L,G=c.\n", " move_to ,c.line_to,c.s et_sour\n", " ce_rgb a\"def!z(f,a) :f(-a.\n", " imag,a. real-e-e)\"for!T,A,B,C!in[i !for!i!\n", " in!S!if!i[\"\"\";exec(reduce(lambda x,i:x.replace(chr\n", " (i),\"\\n \"[34-i:]), range( 35),_+\"\"\"0]]:z(M,A\n", " );z(L,B);z (L,C); c.close_pa\n", " th()\"G (.4,.3 ,1);c.\n", " paint( );G(.7 ,.7,1)\n", " ;c.fil l()\"fo r!i!in\n", " !range (9):\"! g=1-i/\n", " 8;d=i/ 4*g;G(d,d,d, 1-g*.8\n", " )\"!def !y(f,a):z(f,a+(1+2j)*( 1j**(i\n", " /2.))*g)\"!for!T,A,B,C!in!S:y(M,C);y(L,A);y(M\n", " ,A);y(L,B)\"!c.st roke()\"s.write_t\n", " o_png('figs/ penrose.png')\n", " \"\"\" ))\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "---\n", "\n", "## Présentant ma propre utilisation de notebooks Jupyter\n", "\n", "Je souhaite vous montrer différents cas d'utilisation des cahiers Jupyter au quotidien pour mes activités d’enseignement, durant les trois dernières années.\n", "\n", "Je présenterai principalement des exemples de ressources produites à partir d’un notebook Jupyter, et comment convertir des notebooks en HTML." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Quelques micro exemples très pratiques\n", "\n", "Dans Python avec Jupyter, on a accès au shell/terminal de l'environnement facilement :" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-rw-r--r-- 1 lilian lilian 45K oct. 22 09:58 paper/apercu_ENS_agreg_1.png\r\n", "-rw-r--r-- 1 lilian lilian 51K oct. 22 09:58 paper/apercu_ENS_agreg_2.png\r\n", "-rw-r--r-- 1 lilian lilian 87K oct. 22 09:58 paper/apercu_ENS_agreg_3.png\r\n", "-rw-r--r-- 1 lilian lilian 125K oct. 22 09:58 paper/apercu_ENS_agreg_4.png\r\n", "-rw-r--r-- 1 lilian lilian 108K oct. 22 09:58 paper/interactive_Turing_Machine_simulator_1.png\r\n", "-rw-r--r-- 1 lilian lilian 94K oct. 22 09:58 paper/interactive_Turing_Machine_simulator_2.png\r\n", "-rw-r--r-- 1 lilian lilian 129K févr. 5 09:55 figs/apercu_prepa2.png\r\n", "-rw-r--r-- 1 lilian lilian 85K févr. 5 09:55 figs/apercu_prepa.png\r\n", "-rw-r--r-- 1 lilian lilian 253K févr. 5 09:55 figs/git_diff_for_jupyter_notebooks.png\r\n", "-rw-r--r-- 1 lilian lilian 68K févr. 5 09:55 figs/installing_jupyter.png\r\n" ] } ], "source": [ "!ls -larth paper/*.png figs/*.png | head -n 10" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\r\n", " IP : 131.254.243.175\r\n", " 131.254.243.175\r\n", "\r\n", "\r\n", " Pas de proxy détecté - No Proxy detected\r\n" ] } ], "source": [ "# Quelle est mon adresse IP ?\n", "!wget --quiet -O - http://monip.org/ | html2text" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Correction interactive de TP en prépa (PSI)\n", "\n", "J'ai écrit les solutions pour les sessions pratiques données en tant qu’entraı̂nement pour l'épreuve orale “Mathématiques avec Python” du concours CentraleSupélec (CPGE), avec des notebooks Jupyter, afin de les partager facilement avec les étudiants, de les exposer et de travailler dessus pendant les sessions pratiques. Voir [`perso.crans.org/besson/notebooks/Oraux_CentraleSupelec_PSI__Juin_2019.html`](https://perso.crans.org/besson/notebooks/Oraux_CentraleSupelec_PSI__Juin_2019.html), avec Python et des maths, pour les étudiants d'une classe de PSI (CPGE) en juin 2017, 2018 et 2019." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Cours d'algorithmique en L3 informatique\n", "\n", "J'ai écrit des implémentations propres et détaillées de structures de données et d’algorithmes, pour un cours d’algorithmique à l'automne 2019, avec des notebooks Jupyter. \n", "Voir [`github.com/Naereen/ALGO1-Info1-2019`](https://github.com/Naereen/ALGO1-Info1-2019/), avec le langage Python, pour des étudiants de L3." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Entraînement à l'oral de modélisation d'agrégation (maths option info)\n", "J'ai utilisé des notebooks Jupyter pour écrire les sujets et les solutions des sessions pratiques utilisées pour entraı̂ner nos étudiants à l'épreuve orale de modélisation de l’agrégation. Voir [`nbviewer.jupyter.org/github/Naereen/notebooks/tree/master/agreg/TP_Programmation_2017-18/`](https://nbviewer.jupyter.org/github/Naereen/notebooks/tree/master/agreg/TP_Programmation_2017-18/), avec le langage OCaml, pour des étudiants de M2." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "---\n", "## Conclusion : conseils pour devenir un-e expert-e en Jupyter\n", "\n", "- Installer Python et Jupyter sur votre ordinateur personnel ;\n", "- Essayer de rédiger un notebook Jupyter au lieu d'utiliser votre éditeur / IDE préféré ;\n", "- Apprendre par soi-même à utiliser l'interface de Jupyter ;" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Comment utiliser un dépôt GitHub/Bitbucket/GitLab pour héberger des notebooks Jupyter, et les afficher en ligne en utilisant le site [`nbviewer.jupyter.org`](https://nbviewer.jupyter.org/).\n", " + [`nbviewer.jupyter.org/github/Naereen/Tutoriel-notebooks-Jupyter-a-Didapro-8-Lille-fevrier-2020`](https://nbviewer.jupyter.org/github/Naereen/Tutoriel-notebooks-Jupyter-a-Didapro-8-Lille-fevrier-2020)\n", " + Voir [`github.com/Naereen/ALGO1-Info1-2019`](https://github.com/Naereen/ALGO1-Info1-2019/) et [`github.com/Naereen/notebooks`](https://github.com/Naereen/notebooks/) pour des exemples." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Comment utiliser Binder, Google Colab ou d’autres outils gratuits en ligne, pour ajouter un lien afin que tout utilisateur consultant vos notebooks Jupyter puisse démarrer un environnement interactif, directement depuis son navigateur Web, pour interagir avec le notebook sans rien avoir à installer.\n", " + [`mybinder.org/repo/Naereen/Tutoriel-notebooks-Jupyter-a-Didapro-8-Lille-fevrier-2020`](https://mybinder.org/repo/Naereen/Tutoriel-notebooks-Jupyter-a-Didapro-8-Lille-fevrier-2020)\n", " \n", "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/Naereen/Tutoriel-notebooks-Jupyter-a-Didapro-8-Lille-fevrier-2020/master)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Utiliser les extensions Jupyter pour améliorer l'EDI. Voir [`jupyter-contrib-nbextensions.readthedocs.io`](https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/).\n", " + par exemple pour ajouter automatiquement une table des matières,\n", " + un autre exemple : explorateur de variables (démonstration),\n", " + un dernier exemple (méta) : RISE permet d'afficher une présentation interactive dynamiquement générée depuis le notebook (comme pour ce tutoriel).\n", "\n", "- Suiver les meilleurs exemples, par exemple le célèbre Peter Norvig (chef de la recherche chez Google) publie des notebooks très intéressants sur son projet [`github.com/norvig/pytudes`](https://github.com/norvig/pytudes), depuis 5 ans." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](figs/table_des_matieres_extension_Jupyter.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](figs/variable_inspector_extension_Jupyter.png)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- Utiliser *Jupyter Lab*, la nouvelle version de l'interface utilisateur de Jupyter (plus moderne).\n", "\n", "- Partager ses notebooks en ligne, avec ses étudiants et collègues, et recevoir leurs commentaires.\n", "\n", "- Idée : utiliser [`github.com/jupyter/nbgrader`](https://github.com/jupyter/nbgrader) pour facilement utiliser les notebooks comme support d'évaluation (évaluation automatique du rendu de vos élèves !)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "---\n", "## Références et liens\n", "\n", "Pour terminer, quelques pointeurs pour en apprendre plus par vous-même." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Liens\n", "- Ce tutoriel en ligne : [`frama.link/Atelier-Jupyter-Didapro8`](https://frama.link/Atelier-Jupyter-Didapro8) ([`github.com/Naereen/Tutoriel-notebooks-Jupyter-a-Didapro-8-Lille-fevrier-2020`](https://github.com/Naereen/Tutoriel-notebooks-Jupyter-a-Didapro-8-Lille-fevrier-2020))\n", "- Langage Python : [`www.python.org`](https://www.python.org/)\n", "- Projet jupyter : [`www.jupyter.org`](https://www.jupyter.org/)\n", "- Installeur Anaconda : [`www.anaconda.com/distribution/`](https://www.anaconda.com/distribution/)\n", "- Des bons tutoriels : [`plot.ly/python/v3/ipython-notebook-tutorial/`](https://plot.ly/python/v3/ipython-notebook-tutorial/) et [`www.dataquest.io/blog/advanced-jupyter-notebooks-tutorial/`](https://www.dataquest.io/blog/advanced-jupyter-notebooks-tutorial/)\n", "- Documentation : [`jupyter-notebook-beginner-guide.readthedocs.io`](https://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html#id4)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Publications universitaires\n", "- Thomas Kluyver et al. Jupyter Notebooks - a publishing format for reproducible computational workflows. In F. Loizides and B. Schmidt, editors, Positioning and Power in Academic Publishing: Players, Agents and Agendas, pages 87–90. IOS Press, 2016. [`www.jupyter.org`](https://www.jupyter.org/)\n", "- Python Software Foundation. Python Language Reference, version 3.6, October 2017. [`www.python.org`](https://www.python.org/)\n", "- Fernando Pérez and Brian E. Granger. IPython: a System for Interactive Scientific Computing. Computing in Science and Engineering, 9(3):21–29, May 2007. ISSN 1521-9615. [`ipython.org`](http://ipython.org)." ] } ], "metadata": { "celltoolbar": "Diaporama", "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.5" }, "toc": { "colors": { "hover_highlight": "#DAA520", "running_highlight": "#FF0000", "selected_highlight": "#FFD700" }, "moveMenuLeft": true, "nav_menu": { "height": "562.75px", "width": "418px" }, "navigate_menu": true, "number_sections": true, "sideBar": true, "threshold": 4, "toc_cell": true, "toc_position": { "height": "656.8px", "left": "0px", "right": "1372px", "top": "150.2px", "width": "417px" }, "toc_section_display": "block", "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "position": { "height": "297.183px", "left": "2.66667px", "right": "20px", "top": "158px", "width": "433.667px" }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }