Avoir un environnement Python fonctionnel pour la data science
Ce chapitre introduit les bases de l’environnement Python pour la data science en mettant l’accent sur la modularité du langage et l’utilisation des notebooks…
A complete course about data science.
Lino Galiana
2026-09-06
| Title | Available in | Learning mode | Resource type |
|---|---|---|---|
| Introduction |
Lesson #1 or self learning
|
Read from website
|
|
| Avoir un environnement Python fonctionnel pour la data science |
Lesson #1 or self learning
|
Read from website and exercise notebooks
|
|
| Démarche à adopter face à un jeu de données |
Lesson #1 or self learning
|
Read from website
|
|
| Quelques exercices de rappels pour se remettre en selle |
Lesson #1 or self learning
|
Read from website
|
| Title | Available in | Learning mode | Resource type |
|---|---|---|---|
| Introduction à la partie 1: manipuler des données |
Lesson #1 or self learning
|
Read from website
|
|
| Numpy, la brique de base de la data science |
Lesson #1 or self learning
|
Read from website and exercise notebooks
|
|
| Introduction à Pandas |
Lesson #2 or self learning
|
Read from website and exercise notebooks
|
|
| Associer des données avec Pandas : les jointures |
Lesson #2 or self learning
|
Read from website and exercise notebooks
|
|
| Manipuler des données avec Pandas : statistiques et restructuration |
Lesson #2 or self learning
|
Read from website and exercise notebooks
|
|
| Pandas : limites et écosystèmes alternatifs |
Lesson #2 or self learning
|
Read from website
|
|
| Introduction aux données spatiales avec Geopandas |
Lesson #4 or self learning
|
Read from website and exercise notebooks
|
|
| Web scraping avec Python |
Self learning
|
Read from website and exercise notebooks
|
|
| Récupérer des données avec des API depuis Python |
Lesson #4 or self learning
|
Read from website and exercise notebooks
|
|
| Maîtriser les expressions régulières |
Self learning
|
Read from website and exercise notebooks
|
|
| Les nouveaux modes d'accès aux données : le format Parquet et les données sur le cloud |
Self learning
|
Read from website
|
| Title | Available in | Learning mode | Resource type |
|---|---|---|---|
| Introduction à la partie 2: communiquer à partir de données |
Self learning
|
Read from website
|
|
| Construire des graphiques avec Python |
Self learning
|
Read from website and exercise notebooks
|
|
| Introduction à la cartographie avec Python |
Self learning
|
Read from website and exercise notebooks
|
| Title | Available in | Learning mode | Resource type |
|---|---|---|---|
| Introduction à la partie 3: modéliser |
Lesson #5 or self learning
|
Read from website
|
|
| Préparation des données pour construire un modèle |
Lesson #5 or self learning
|
Read from website and exercise notebooks
|
|
| Evaluer la qualité d'un modèle |
Lesson #5 or self learning
|
Read from website and exercise notebooks
|
|
| Découverte de la classification avec les arbres de décision |
Lesson #5 or self learning
|
Read from website and exercise notebooks
|
|
| Introduction à la régression |
Lesson #6 or self learning
|
Read from website and exercise notebooks
|
|
| Sélection de variables : une introduction |
Lesson #6 or self learning
|
Read from website and exercise notebooks
|
|
| Introduction à l'apprentissage non supervisé avec le clustering |
Lesson #6 or self learning
|
Read from website and exercise notebooks
|
|
| Premier pas vers l'industrialisation avec les pipelines scikit |
Self learning
|
Read from website and exercise notebooks
|
|
| Mettre à disposition un modèle par le biais d'une API |
Self learning
|
Read from website
|
| Title | Available in | Learning mode | Resource type |
|---|---|---|---|
| Introduction à la partie 4 : Natural Language Processing (NLP) |
Self learning
|
Read from website
|
|
| Nettoyer et structurer l'information dans les données textuelles |
Lesson #7 or self learning
|
Read from website and exercise notebooks
|
|
| L'analyse fréquentiste par l'approche bag-of-words : intérêt et limites |
Lesson #7 or self learning
|
Read from website and exercise notebooks
|
|
| Les embeddings, ou comment synthétiser l'information textuelle |
Lesson #7 or self learning
|
Read from website and exercise notebooks
|
| Title | Available in | Learning mode | Resource type |
|---|---|---|---|
| Git: un outil nécessaire pour les data scientists |
Lesson #3 or self learning
|
Read from website
|
|
| Découvrir Git par la pratique: la gymnastique quotidienne |
Lesson #3 or self learning
|
Read from website
|
|
Un cadavre exquis pour découvrir le travail collaboratif Git |
Lesson #3 or self learning
|
Read from website
|
{
const orderedDivs = document.querySelectorAll(".list-chapter-ordered");
const unorderedDivs = document.querySelectorAll(".list-chapter-unordered");
const lang = version_ui; // 'fr' ou 'en'
const otherLang = lang === "fr" ? "en" : "fr";
if (ordre === "vrac") {
unorderedDivs.forEach((div, i) => (div.innerHTML = initialUnordered[i]));
orderedDivs.forEach(div => (div.innerHTML = ""));
} else {
orderedDivs.forEach((div, i) => {
// Choisir la source HTML à injecter
const useDarkFr = (quartoThemeIsDark && lang === "fr" && initialOrderedDarkFr?.[i]);
div.innerHTML = useDarkFr ? initialOrderedDarkFr[i] : initialOrdered[i];
// Supprimer le bloc de la langue non sélectionnée (si présent)
const otherLangBlock = div.querySelector(`.list-chapter-ordered-${otherLang}`);
if (otherLangBlock) otherLangBlock.remove();
// Nettoyage: si jamais un wrapper dark-fr traîne, on le supprime
const darkFrBlock = div.querySelector(".list-chapter-ordered-dark-fr");
if (darkFrBlock) darkFrBlock.remove();
});
unorderedDivs.forEach(div => (div.innerHTML = ""));
}
}{
const orderedDivs = document.querySelectorAll('.list-chapter-ordered');
const unorderedDivs = document.querySelectorAll('.list-chapter-unordered');
const lang = version_ui; // 'fr' ou 'en'
const otherLang = lang === 'fr' ? 'en' : 'fr';
if (ordre === 'vrac') {
unorderedDivs.forEach((div, i) => div.innerHTML = initialUnordered[i]);
orderedDivs.forEach(div => div.innerHTML = '');
} else {
orderedDivs.forEach((div, i) => {
// Restaurer le contenu initial
div.innerHTML = initialOrdered[i];
// Supprimer le bloc de la langue non sélectionnée
const otherLangBlock = div.querySelector(`.list-chapter-ordered-${otherLang}`);
if (otherLangBlock) otherLangBlock.remove();
});
// Cacher les unordered
unorderedDivs.forEach(div => div.innerHTML = '');
}
}viewof quartoThemeIsDark = {
const span = html`<span style="display: none;"></span>`;
function updateTheme() {
const isDark = document.body.classList.contains("quarto-dark");
span.value = isDark;
span.dispatchEvent(new CustomEvent("input"));
}
// Initial check
updateTheme();
// Observer les changements de classe sur <body>
const observer = new MutationObserver(() => updateTheme());
observer.observe(document.body, {
attributes: true,
attributeFilter: ["class"]
});
// Nettoyage si jamais nécessaire
span.remove = () => observer.disconnect();
return span;
}ToggleSwitch = ({
labels = ["Gauche", "Droite"],
values = ["left", "right"],
value = values[0],
sliderColor = "#275EFE",
textColor = "#444"
} = {}) => {
const [labelLeft, labelRight] = labels;
const [valLeft, valRight] = values;
const node = html`<div class="toggle-wrapper"
style="--slider-color: ${sliderColor}; --text-color: ${textColor}">
<span class="label left">${labelLeft}</span>
<label class="toggle-ios">
<input type="checkbox" ${value === valRight ? "checked" : ""}>
<span class="slider"></span>
</label>
<span class="label right">${labelRight}</span>
<style>
${styleOptions}
</style>
</div>`;
const input = node.querySelector("input");
const updateLabels = () => {
node.querySelector(".label.left").classList.toggle("active", !input.checked);
node.querySelector(".label.right").classList.toggle("active", input.checked);
};
Object.defineProperty(node, "value", {
get: () => (input.checked ? valRight : valLeft),
set: (v) => {
input.checked = (v === valRight);
updateLabels();
}
});
input.addEventListener("change", () => {
updateLabels();
node.dispatchEvent(new CustomEvent("input"));
});
updateLabels();
return node;
}
styleOptions = `
.toggle-wrapper {
display: flex;
align-items: center;
gap: 0.5rem;
font-family: sans-serif;
font-size: 14px;
color: var(--text-color);
}
.label {
transition: font-weight 0.2s;
}
.label.active {
font-weight: bold;
}
.toggle-ios {
position: relative;
display: inline-block;
width: 44px;
height: 24px;
}
.toggle-ios input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
transition: 0.3s;
border-radius: 34px;
}
.slider:before {
position: absolute;
content: "";
height: 18px;
width: 18px;
left: 3px;
top: 3px;
background-color: white;
transition: 0.3s;
border-radius: 50%;
}
input:checked + .slider {
background-color: var(--slider-color);
}
input:checked + .slider:before {
transform: translateX(20px);
}
`{
const appendix = document.querySelector('#quarto-appendix');
if (appendix) {
const wrapper = document.createElement('div');
wrapper.className = 'content-block py-4';
// Move the actual node (not a innerHTML clone) so it keeps its
// id/class (native + custom appendix styling) and the copy
// button keeps the click listener ClipboardJS attached to it.
appendix.replaceWith(wrapper);
wrapper.appendChild(appendix);
wrapper;
} else {
"appendix not found";
}
}@book{galiana2025,
author = {Galiana, Lino},
title = {Python pour la data science},
date = {2025},
url = {https://pythonds.linogaliana.fr/},
doi = {10.5281/zenodo.8229676},
langid = {fr}
}