Binder NbViewer

Possibilités d’un carnet Jupyter#

[1] : la métadonnée "slide_type": "slide" est associée à cette cellule
[2] : une cellule avec la métadonnée "slide_type": "notes" suit cette cellule
[3] : Depuis la présentation, taper s pour faire apparaitre une seconde fenêtre avec les notes pour le présentateur

Cette cellule contient une note pour le présentateur. Elle sera affichée dnas une secondes fenêtre lorsque ce carnet est utilisé comme diaporama.

[1] : la métadonnée "slide_type": "notes" est associée à cette cellule

Objectifs de ce carnet#

  • Mettre en avant les principales possibilités d’un carnet Jupyter.

  • Voir comment chaque aspect d’un carnet est pris en compte en convertissant le carnet.

Melange texte, formule, code et résultats#

On cherche à déterminer si l’équation \(a.x^2 + b.x + c = 0\) admet des solutions réelles pour \(x\) sachant que \(a, b, c \in \mathbb{R}\) sont trois constantes réelles.

def nombre_solutions_reelles(a, b, c):
    delta = b**2 - 4*a*c
    if delta > 0:
        return 2       # 2 solutions réelles
    elif delta == 0:
        return 1       # 1 solution réelle (double)
    else:
        return 0       # pas de solution réelle
nombre_solutions_reelles(2, 1, -1)
2

Tableau et images#

Format SVG

format PNG

Fichier local

SVG local
../assets/img/ampoule.svg

PNG local
../assets/img/ampoule.png

Fichier distant

SVG distant
https://upload.wikimedia.org/...

PNG distant
https://upload.wikimedia.org/...

Lecture d’un fichier CSV en ligne#

import pandas
url = "https://data.iledefrance-mobilites.fr/api/explore/v2.1/catalog/"
url += "datasets/emplacement-des-gares-idf-data-generalisee/exports/csv"
# Lecture du tableau de données en ligne
df = pandas.read_csv(url, sep=";")
# Réduction du tableau à une sélection de 4 colonnes
df = df[["nom_long","exploitant","x","y"]]
df.head(3)  # affiche les 3 premières lignes du tableau
nom_long exploitant x y
0 Vaires-Torcy SNCF 673418.2649 6.863970e+06
1 Lognes RATP 673078.4318 6.859970e+06
2 Torcy RATP 674687.4504 6.860010e+06

Interaction avec l’utilisateur#

Le module ipywidgets permet la saisie « graphique » de donnée et le recalcule automatique d’une fonction Python, ici affiche_somme_de_2_carres()

import ipywidgets

def affiche_somme_de_2_carres(a=1, b=1):
    """Calcule et affiche la somme de 2 nombre au carrée."""
    f_string = "a² + b² = {:.1f} pour a = {:.1f} et b = {:.1f}"
    print(f_string.format(a**2 + b**2, a, b))

ipywidgets.interact(
    affiche_somme_de_2_carres,
    a=(-5.0,5.0,0.1),
    b=(-5.0,5.0,0.1),
)
<function __main__.affiche_somme_de_2_carres(a=1, b=1)>

Il est égualement possible d’utiliser un décorateur de fonction @ pour un code plus compact.

import ipywidgets

@ipywidgets.interact(a=(-5.0,5.0,0.1), b=(-5.0,5.0,0.1))
def affiche_somme_de_2_carres(a=1, b=1):
    """Calcule et affiche la somme de 2 nombre au carrée."""
    f_string = "a² + b² = {:.1f} pour a = {:.1f} et b = {:.1f}"
    print(f_string.format(a**2 + b**2, a, b))

Interaction avec l’utilisateur (2)#

La fonction trace une elipse dont l’utilisateur choisit de façon interactive le ratio entre son grand axe et son petit axe, et son l’angle par rapport à l’horizontale.

Importation des modules Python nécessaires

import ipywidgets
import matplotlib.pyplot as plt
import numpy as np

Fonction pour générer les points d’une ellipse

def genere_ellipse(ratio, angle):
    """Génere des points répartis sur une ellipse.

    Parameters
    ----------
    ratio : float
        Rapport entre le grand axe et le petit axe.
    angle : float
        Angle entre Ox et le grand axe.

    Returns
    -------
    x : list
        Liste de l'abscisse des points.
    y : list
        Liste de l'ordonnée des points.
    """
    t = np.linspace(0, 2 * np.pi, 100)
    x = ratio * np.cos(t) * np.cos(angle) - 1/ratio * np.sin(t) * np.sin(angle)
    y = ratio * np.cos(t) * np.sin(angle) + 1/ratio * np.sin(t) * np.cos(angle)
    return x, y

Fonction qui trace des points sur une figure avec la bibliothèque matplotlib

def trace_points(x, y):
    """Trace les points (x, y)."""
    fig, ax = plt.subplots()
    ax.plot(x, y, lw=2)
    ax.set_aspect('equal')
    ax.set_xlim([-2, 2])
    ax.set_ylim([-2, 2])

Fonction qui trace des points d’une ellipse

@ipywidgets.interact(ratio=(0.5,2.0,0.1), angle=(-3.34/2,3.14/2,0.1))
def trace_ellipse(ratio, angle):
    trace_points(*genere_ellipse(ratio, angle))