🌐 Update translations via Co-op Translator

pull/597/head
leestott 4 weeks ago committed by GitHub
parent d483986187
commit 42a6c4fc3e

@ -0,0 +1,78 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "2583a9894af7123b2fcae3376b14c035",
"translation_date": "2025-08-24T12:35:16+00:00",
"source_file": "1-Introduction/01-defining-data-science/README.md",
"language_code": "fr"
}
-->
## Types de données
Comme nous l'avons déjà mentionné, les données sont partout. Il suffit de les capturer de la bonne manière ! Il est utile de distinguer entre les données **structurées** et **non structurées**. Les premières sont généralement représentées sous une forme bien organisée, souvent sous forme de tableau ou de plusieurs tableaux, tandis que les secondes ne sont qu'une collection de fichiers. Parfois, on peut également parler de données **semi-structurées**, qui possèdent une certaine structure pouvant varier considérablement.
| Structurées | Semi-structurées | Non structurées |
| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------- |
| Liste de personnes avec leurs numéros de téléphone | Pages Wikipédia avec des liens | Texte de l'Encyclopédie Britannica |
| Température dans toutes les pièces d'un bâtiment chaque minute pendant 20 ans | Collection d'articles scientifiques au format JSON avec auteurs, date de publication et résumé | Partage de fichiers avec des documents d'entreprise |
| Données sur l'âge et le sexe de toutes les personnes entrant dans le bâtiment | Pages Internet | Flux vidéo brut d'une caméra de surveillance |
## Où trouver des données
Il existe de nombreuses sources possibles de données, et il serait impossible de toutes les lister ! Cependant, mentionnons quelques endroits typiques où vous pouvez obtenir des données :
* **Structurées**
- **Internet des objets** (IoT), y compris les données provenant de différents capteurs, tels que les capteurs de température ou de pression, fournit de nombreuses données utiles. Par exemple, si un bâtiment de bureaux est équipé de capteurs IoT, nous pouvons contrôler automatiquement le chauffage et l'éclairage afin de minimiser les coûts.
- **Enquêtes** que nous demandons aux utilisateurs de remplir après un achat ou après avoir visité un site web.
- **Analyse du comportement** peut, par exemple, nous aider à comprendre jusqu'où un utilisateur explore un site et quelle est la raison typique de son départ.
* **Non structurées**
- **Textes** peuvent être une source riche d'informations, comme un **score de sentiment global**, ou l'extraction de mots-clés et de significations sémantiques.
- **Images** ou **vidéos**. Une vidéo d'une caméra de surveillance peut être utilisée pour estimer le trafic sur la route et informer les gens des éventuels embouteillages.
- Les **journaux** des serveurs web peuvent être utilisés pour comprendre quelles pages de notre site sont les plus souvent visitées et pendant combien de temps.
* **Semi-structurées**
- Les graphes des **réseaux sociaux** peuvent être d'excellentes sources de données sur les personnalités des utilisateurs et leur potentiel à diffuser des informations.
- Lorsque nous avons une série de photographies d'une fête, nous pouvons essayer d'extraire des données sur la **dynamique de groupe** en construisant un graphe des personnes prenant des photos ensemble.
En connaissant les différentes sources possibles de données, vous pouvez réfléchir à divers scénarios où les techniques de science des données peuvent être appliquées pour mieux comprendre la situation et améliorer les processus commerciaux.
## Ce que vous pouvez faire avec les données
En science des données, nous nous concentrons sur les étapes suivantes du parcours des données :
Bien sûr, selon les données réelles, certaines étapes peuvent être absentes (par exemple, lorsque nous avons déjà les données dans une base de données ou lorsque nous n'avons pas besoin d'entraîner un modèle), ou certaines étapes peuvent être répétées plusieurs fois (comme le traitement des données).
## Numérisation et transformation numérique
Au cours de la dernière décennie, de nombreuses entreprises ont commencé à comprendre l'importance des données dans la prise de décisions commerciales. Pour appliquer les principes de la science des données à la gestion d'une entreprise, il faut d'abord collecter des données, c'est-à-dire traduire les processus commerciaux en forme numérique. Cela s'appelle la **numérisation**. L'application des techniques de science des données à ces données pour orienter les décisions peut entraîner des augmentations significatives de la productivité (ou même un pivot commercial), appelée **transformation numérique**.
Prenons un exemple. Supposons que nous avons un cours de science des données (comme celui-ci) que nous proposons en ligne aux étudiants, et que nous souhaitons utiliser la science des données pour l'améliorer. Comment pouvons-nous le faire ?
Nous pouvons commencer par nous demander "Que peut-on numériser ?" La manière la plus simple serait de mesurer le temps qu'il faut à chaque étudiant pour terminer chaque module, et d'évaluer les connaissances acquises en proposant un test à choix multiples à la fin de chaque module. En calculant la moyenne du temps nécessaire pour terminer chaque module parmi tous les étudiants, nous pouvons identifier les modules qui posent le plus de difficultés et travailler à les simplifier.
> Vous pourriez soutenir que cette approche n'est pas idéale, car les modules peuvent avoir des longueurs différentes. Il serait probablement plus juste de diviser le temps par la longueur du module (en nombre de caractères) et de comparer ces valeurs à la place.
Lorsque nous commençons à analyser les résultats des tests à choix multiples, nous pouvons essayer de déterminer quels concepts posent des difficultés de compréhension aux étudiants, et utiliser ces informations pour améliorer le contenu. Pour ce faire, il est nécessaire de concevoir des tests de manière à ce que chaque question corresponde à un concept ou une portion de connaissances spécifique.
Si nous souhaitons aller encore plus loin, nous pouvons tracer le temps nécessaire pour chaque module en fonction de la catégorie d'âge des étudiants. Nous pourrions découvrir que, pour certaines catégories d'âge, il faut un temps excessivement long pour terminer le module, ou que les étudiants abandonnent avant de le terminer. Cela peut nous aider à fournir des recommandations d'âge pour le module et à minimiser l'insatisfaction des utilisateurs due à des attentes erronées.
## 🚀 Défi
Dans ce défi, nous allons essayer de trouver des concepts pertinents dans le domaine de la science des données en examinant des textes. Nous prendrons un article Wikipédia sur la science des données, téléchargerons et traiterons le texte, puis construirons un nuage de mots comme celui-ci :
![Nuage de mots pour la science des données](../../../../1-Introduction/01-defining-data-science/images/ds_wordcloud.png)
Visitez [`notebook.ipynb`](../../../../../../../../../1-Introduction/01-defining-data-science/notebook.ipynb ':ignore') pour parcourir le code. Vous pouvez également exécuter le code et voir comment il effectue toutes les transformations de données en temps réel.
> Si vous ne savez pas comment exécuter du code dans un Jupyter Notebook, consultez [cet article](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## [Quiz post-conférence](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/1)
## Exercices
* **Tâche 1** : Modifiez le code ci-dessus pour découvrir des concepts liés aux domaines du **Big Data** et de l'**apprentissage automatique**.
* **Tâche 2** : [Réfléchissez à des scénarios de science des données](assignment.md)
## Crédits
Cette leçon a été rédigée avec ♥️ par [Dmitry Soshnikov](http://soshnikov.com)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,44 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "4e0f1773b9bee1be3b28f9fe2c71b3de",
"translation_date": "2025-08-24T12:37:35+00:00",
"source_file": "1-Introduction/01-defining-data-science/assignment.md",
"language_code": "fr"
}
-->
# Devoir : Scénarios en Science des Données
Dans ce premier devoir, nous vous demandons de réfléchir à un processus ou un problème réel dans différents domaines, et comment vous pourriez l'améliorer en utilisant le processus de la Science des Données. Pensez aux points suivants :
1. Quelles données pouvez-vous collecter ?
1. Comment les collecteriez-vous ?
1. Comment stockeriez-vous les données ? Quelle serait la taille probable des données ?
1. Quels aperçus pourriez-vous tirer de ces données ? Quelles décisions pourrions-nous prendre sur la base de ces données ?
Essayez de réfléchir à 3 problèmes/processus différents et décrivez chacun des points ci-dessus pour chaque domaine.
Voici quelques domaines et problèmes pour vous aider à démarrer votre réflexion :
1. Comment pouvez-vous utiliser les données pour améliorer le processus éducatif des enfants à l'école ?
1. Comment pouvez-vous utiliser les données pour contrôler la vaccination pendant une pandémie ?
1. Comment pouvez-vous utiliser les données pour vous assurer d'être productif au travail ?
## Instructions
Remplissez le tableau suivant (remplacez les domaines suggérés par vos propres idées si nécessaire) :
| Domaine | Problème | Quelles données collecter | Comment stocker les données | Quels aperçus/décisions pouvons-nous prendre |
|---------|----------|---------------------------|-----------------------------|---------------------------------------------|
| Éducation | | | | |
| Vaccination | | | | |
| Productivité | | | | |
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
A été capable d'identifier des sources de données raisonnables, des moyens de stockage des données et des décisions/apprentissages possibles pour tous les domaines | Certains aspects de la solution ne sont pas détaillés, le stockage des données n'est pas discuté, au moins 2 domaines sont décrits | Seules certaines parties de la solution sont décrites, un seul domaine est considéré.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction professionnelle humaine. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,46 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "a8f79b9c0484c35b4f26e8aec7fc4d56",
"translation_date": "2025-08-24T12:38:37+00:00",
"source_file": "1-Introduction/01-defining-data-science/solution/assignment.md",
"language_code": "fr"
}
-->
# Assignment : Scénarios en Science des Données
Dans ce premier devoir, nous vous demandons de réfléchir à un processus ou un problème réel dans différents domaines, et comment vous pourriez l'améliorer en utilisant le processus de la science des données. Pensez aux points suivants :
1. Quelles données pouvez-vous collecter ?
1. Comment les collecteriez-vous ?
1. Comment stockeriez-vous les données ? Quelle serait la taille probable des données ?
1. Quels insights pourriez-vous obtenir à partir de ces données ? Quelles décisions pourrions-nous prendre sur la base de ces données ?
Essayez de réfléchir à 3 problèmes ou processus différents et décrivez chacun des points ci-dessus pour chaque domaine.
Voici quelques domaines et problèmes qui peuvent vous aider à démarrer votre réflexion :
1. Comment pouvez-vous utiliser les données pour améliorer le processus éducatif des enfants à l'école ?
1. Comment pouvez-vous utiliser les données pour contrôler la vaccination pendant une pandémie ?
1. Comment pouvez-vous utiliser les données pour vous assurer d'être productif au travail ?
## Instructions
Remplissez le tableau suivant (remplacez les domaines suggérés par vos propres idées si nécessaire) :
| Domaine | Problème | Quelles données collecter | Comment stocker les données | Quels insights/décisions pouvons-nous prendre |
|---------|----------|---------------------------|-----------------------------|-----------------------------------------------|
| Éducation | À l'université, nous avons généralement une faible participation aux cours, et nous avons l'hypothèse que les étudiants qui assistent aux cours réussissent mieux aux examens. Nous voulons stimuler la participation et tester cette hypothèse. | Nous pouvons suivre la participation via des photos prises par la caméra de sécurité en classe, ou en suivant les adresses bluetooth/wifi des téléphones mobiles des étudiants en classe. Les données des examens sont déjà disponibles dans la base de données de l'université. | Si nous suivons les images des caméras de sécurité, nous devons stocker quelques (5-10) photographies pendant le cours (données non structurées), puis utiliser l'IA pour identifier les visages des étudiants (convertir les données en forme structurée). | Nous pouvons calculer les données de participation moyenne pour chaque étudiant et voir s'il existe une corrélation avec les notes des examens. Nous parlerons davantage de corrélation dans la section [probabilité et statistiques](../../04-stats-and-probability/README.md). Pour stimuler la participation des étudiants, nous pouvons publier le classement hebdomadaire de participation sur le portail de l'école et organiser des tirages au sort parmi ceux ayant la meilleure participation. |
| Vaccination | | | | |
| Productivité | | | | |
> *Nous fournissons une seule réponse comme exemple, afin que vous puissiez avoir une idée de ce qui est attendu dans ce devoir.*
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
La personne a pu identifier des sources de données raisonnables, des moyens de stockage des données et des décisions/insights possibles pour tous les domaines | Certains aspects de la solution ne sont pas détaillés, le stockage des données n'est pas discuté, au moins 2 domaines sont décrits | Seules certaines parties de la solution de données sont décrites, un seul domaine est considéré.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,263 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "8796f41f566a0a8ebb72863a83d558ed",
"translation_date": "2025-08-24T12:25:19+00:00",
"source_file": "1-Introduction/02-ethics/README.md",
"language_code": "fr"
}
-->
# Introduction à l'éthique des données
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/02-Ethics.png)|
|:---:|
| Éthique des sciences des données - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
---
Nous sommes tous des citoyens des données vivant dans un monde axé sur les données.
Les tendances du marché indiquent que d'ici 2022, 1 grande organisation sur 3 achètera et vendra ses données via des [places de marché et des échanges](https://www.gartner.com/smarterwithgartner/gartner-top-10-trends-in-data-and-analytics-for-2020/) en ligne. En tant que **développeurs d'applications**, il sera plus facile et moins coûteux d'intégrer des informations basées sur les données et des automatisations pilotées par des algorithmes dans les expériences utilisateur quotidiennes. Mais à mesure que l'IA devient omniprésente, nous devrons également comprendre les dommages potentiels causés par la [militarisation](https://www.youtube.com/watch?v=TQHs8SA1qpk) de ces algorithmes à grande échelle.
Les tendances montrent également que nous créerons et consommerons plus de [180 zettaoctets](https://www.statista.com/statistics/871513/worldwide-data-created/) de données d'ici 2025. En tant que **scientifiques des données**, cela nous donne un accès sans précédent à des données personnelles. Cela signifie que nous pouvons construire des profils comportementaux des utilisateurs et influencer la prise de décision de manière à créer une [illusion de libre arbitre](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice), tout en orientant potentiellement les utilisateurs vers des résultats que nous préférons. Cela soulève également des questions plus larges sur la confidentialité des données et la protection des utilisateurs.
L'éthique des données est désormais un _garde-fou nécessaire_ pour la science et l'ingénierie des données, nous aidant à minimiser les dommages potentiels et les conséquences involontaires de nos actions basées sur les données. Le [cycle de battage médiatique de Gartner pour l'IA](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/) identifie des tendances pertinentes en matière d'éthique numérique, d'IA responsable et de gouvernance de l'IA comme des moteurs clés des mégatendances plus larges autour de la _démocratisation_ et de l'_industrialisation_ de l'IA.
![Cycle de battage médiatique de Gartner pour l'IA - 2020](https://images-cdn.newscred.com/Zz1mOWJhNzlkNDA2ZTMxMWViYjRiOGFiM2IyMjQ1YmMwZQ==)
Dans cette leçon, nous explorerons le domaine fascinant de l'éthique des données - des concepts et défis fondamentaux aux études de cas et aux concepts appliqués de l'IA comme la gouvernance - qui aident à établir une culture éthique dans les équipes et organisations travaillant avec les données et l'IA.
## [Quiz pré-lecture](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/2) 🎯
## Définitions de base
Commençons par comprendre la terminologie de base.
Le mot "éthique" vient du [mot grec "ethikos"](https://en.wikipedia.org/wiki/Ethics) (et de sa racine "ethos") signifiant _caractère ou nature morale_.
**L'éthique** concerne les valeurs partagées et les principes moraux qui régissent notre comportement en société. L'éthique ne repose pas sur des lois, mais sur des normes largement acceptées de ce qui est "bien ou mal". Cependant, les considérations éthiques peuvent influencer les initiatives de gouvernance d'entreprise et les réglementations gouvernementales qui créent davantage d'incitations à la conformité.
**L'éthique des données** est une [nouvelle branche de l'éthique](https://royalsocietypublishing.org/doi/full/10.1098/rsta.2016.0360#sec-1) qui "étudie et évalue les problèmes moraux liés aux _données, algorithmes et pratiques correspondantes_". Ici, **"données"** se concentre sur les actions liées à la génération, l'enregistrement, la curation, le traitement, la diffusion, le partage et l'utilisation, **"algorithmes"** se concentre sur l'IA, les agents, l'apprentissage automatique et les robots, et **"pratiques"** se concentre sur des sujets comme l'innovation responsable, la programmation, le piratage et les codes d'éthique.
**L'éthique appliquée** est l'[application pratique des considérations morales](https://en.wikipedia.org/wiki/Applied_ethics). C'est le processus d'examen actif des questions éthiques dans le contexte des _actions, produits et processus du monde réel_, et de prise de mesures correctives pour s'assurer qu'ils restent alignés avec nos valeurs éthiques définies.
**La culture éthique** consiste à [_opérationnaliser_ l'éthique appliquée](https://hbr.org/2019/05/how-to-design-an-ethical-organization) pour s'assurer que nos principes et pratiques éthiques sont adoptés de manière cohérente et évolutive dans toute l'organisation. Les cultures éthiques réussies définissent des principes éthiques à l'échelle de l'organisation, offrent des incitations significatives à la conformité et renforcent les normes éthiques en encourageant et en amplifiant les comportements souhaités à tous les niveaux de l'organisation.
## Concepts d'éthique
Dans cette section, nous discuterons des concepts tels que les **valeurs partagées** (principes) et les **défis éthiques** (problèmes) pour l'éthique des données - et explorerons des **études de cas** qui vous aident à comprendre ces concepts dans des contextes réels.
### 1. Principes éthiques
Toute stratégie d'éthique des données commence par la définition de _principes éthiques_ - les "valeurs partagées" qui décrivent les comportements acceptables et guident les actions conformes dans nos projets de données et d'IA. Vous pouvez les définir au niveau individuel ou de l'équipe. Cependant, la plupart des grandes organisations les décrivent dans une déclaration de mission ou un cadre d'IA éthique défini au niveau de l'entreprise et appliqué de manière cohérente à toutes les équipes.
**Exemple :** La déclaration de mission [IA responsable](https://www.microsoft.com/en-us/ai/responsible-ai) de Microsoft se lit comme suit : _"Nous nous engageons à faire progresser l'IA guidée par des principes éthiques qui placent les personnes au premier plan"_ - identifiant 6 principes éthiques dans le cadre ci-dessous :
![IA responsable chez Microsoft](https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png)
Explorons brièvement ces principes. _Transparence_ et _responsabilité_ sont des valeurs fondamentales sur lesquelles les autres principes se construisent - commençons donc par là :
* [**Responsabilité**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) rend les praticiens _responsables_ de leurs opérations de données et d'IA, et de leur conformité à ces principes éthiques.
* [**Transparence**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) garantit que les actions liées aux données et à l'IA sont _compréhensibles_ (interprétables) pour les utilisateurs, en expliquant le quoi et le pourquoi des décisions.
* [**Équité**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6) - se concentre sur le fait de s'assurer que l'IA traite _toutes les personnes_ équitablement, en abordant les biais sociotechniques systémiques ou implicites dans les données et les systèmes.
* [**Fiabilité et sécurité**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - garantit que l'IA se comporte de manière _cohérente_ avec les valeurs définies, en minimisant les dommages potentiels ou les conséquences involontaires.
* [**Confidentialité et sécurité**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - concerne la compréhension de la traçabilité des données et la fourniture de _protection de la confidentialité des données_ aux utilisateurs.
* [**Inclusivité**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - consiste à concevoir des solutions d'IA avec intention, en les adaptant pour répondre à un _large éventail de besoins et de capacités humains_.
> 🚨 Réfléchissez à ce que pourrait être votre déclaration de mission en matière d'éthique des données. Explorez les cadres d'IA éthique d'autres organisations - voici des exemples de [IBM](https://www.ibm.com/cloud/learn/ai-ethics), [Google](https://ai.google/principles), et [Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/). Quelles valeurs partagées ont-ils en commun ? Comment ces principes se rapportent-ils au produit ou à l'industrie de l'IA dans lesquels ils opèrent ?
### 2. Défis éthiques
Une fois que nous avons défini des principes éthiques, l'étape suivante consiste à évaluer nos actions en matière de données et d'IA pour voir si elles s'alignent sur ces valeurs partagées. Réfléchissez à vos actions dans deux catégories : _collecte de données_ et _conception d'algorithmes_.
Avec la collecte de données, les actions impliqueront probablement des **données personnelles** ou des informations personnellement identifiables (PII) pour des individus identifiables. Cela inclut [divers éléments de données non personnelles](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en) qui, _collectivement_, identifient un individu. Les défis éthiques peuvent concerner la _confidentialité des données_, la _propriété des données_ et des sujets connexes comme le _consentement éclairé_ et les _droits de propriété intellectuelle_ des utilisateurs.
Avec la conception d'algorithmes, les actions impliqueront la collecte et la curation de **jeux de données**, puis leur utilisation pour entraîner et déployer des **modèles de données** qui prédisent des résultats ou automatisent des décisions dans des contextes réels. Les défis éthiques peuvent découler de _biais dans les jeux de données_, de problèmes de _qualité des données_, d'_injustice_ et de _mauvaise représentation_ dans les algorithmes - y compris certains problèmes systémiques.
Dans les deux cas, les défis éthiques mettent en évidence les domaines où nos actions peuvent entrer en conflit avec nos valeurs partagées. Pour détecter, atténuer, minimiser ou éliminer ces préoccupations, nous devons poser des questions morales "oui/non" liées à nos actions, puis prendre des mesures correctives si nécessaire. Examinons quelques défis éthiques et les questions morales qu'ils soulèvent :
#### 2.1 Propriété des données
La collecte de données implique souvent des données personnelles pouvant identifier les sujets des données. La [propriété des données](https://permission.io/blog/data-ownership) concerne le _contrôle_ et les [_droits des utilisateurs_](https://permission.io/blog/data-ownership) liés à la création, au traitement et à la diffusion des données.
Les questions morales à poser sont :
* Qui possède les données ? (utilisateur ou organisation)
* Quels droits les sujets des données ont-ils ? (ex : accès, effacement, portabilité)
* Quels droits les organisations ont-elles ? (ex : rectifier des avis malveillants d'utilisateurs)
#### 2.2 Consentement éclairé
Le [consentement éclairé](https://legaldictionary.net/informed-consent/) définit l'acte pour les utilisateurs d'accepter une action (comme la collecte de données) avec une _compréhension complète_ des faits pertinents, y compris le but, les risques potentiels et les alternatives.
Questions à explorer ici :
* L'utilisateur (sujet des données) a-t-il donné son autorisation pour la capture et l'utilisation des données ?
* L'utilisateur a-t-il compris le but pour lequel ces données ont été capturées ?
* L'utilisateur a-t-il compris les risques potentiels liés à sa participation ?
#### 2.3 Propriété intellectuelle
La [propriété intellectuelle](https://en.wikipedia.org/wiki/Intellectual_property) fait référence aux créations immatérielles résultant de l'initiative humaine, qui peuvent _avoir une valeur économique_ pour les individus ou les entreprises.
Questions à explorer ici :
* Les données collectées avaient-elles une valeur économique pour un utilisateur ou une entreprise ?
* L'**utilisateur** a-t-il une propriété intellectuelle ici ?
* L'**organisation** a-t-elle une propriété intellectuelle ici ?
* Si ces droits existent, comment les protégeons-nous ?
#### 2.4 Confidentialité des données
La [confidentialité des données](https://www.northeastern.edu/graduate/blog/what-is-data-privacy/) ou la confidentialité des informations fait référence à la préservation de la vie privée des utilisateurs et à la protection de leur identité en ce qui concerne les informations personnellement identifiables.
Questions à explorer ici :
* Les données (personnelles) des utilisateurs sont-elles sécurisées contre les piratages et les fuites ?
* Les données des utilisateurs sont-elles accessibles uniquement aux utilisateurs et contextes autorisés ?
* L'anonymat des utilisateurs est-il préservé lorsque les données sont partagées ou diffusées ?
* Un utilisateur peut-il être désidentifié à partir de jeux de données anonymisés ?
#### 2.5 Droit à l'oubli
Le [droit à l'oubli](https://en.wikipedia.org/wiki/Right_to_be_forgotten) ou [droit à l'effacement](https://www.gdpreu.org/right-to-be-forgotten/) offre une protection supplémentaire des données personnelles aux utilisateurs. En particulier, il donne aux utilisateurs le droit de demander la suppression ou le retrait de données personnelles des recherches Internet et d'autres emplacements, _dans des circonstances spécifiques_ - leur permettant un nouveau départ en ligne sans que leurs actions passées ne soient retenues contre eux.
Questions à explorer ici :
* Le système permet-il aux sujets des données de demander l'effacement ?
* Le retrait du consentement de l'utilisateur devrait-il déclencher un effacement automatique ?
* Les données ont-elles été collectées sans consentement ou par des moyens illégaux ?
* Sommes-nous conformes aux réglementations gouvernementales en matière de confidentialité des données ?
#### 2.6 Biais dans les jeux de données
Le biais dans les jeux de données ou [biais de collecte](http://researcharticles.com/index.php/bias-in-data-collection-in-research/) concerne la sélection d'un sous-ensemble de données _non représentatif_ pour le développement d'algorithmes, créant une potentielle injustice dans les résultats pour divers groupes. Les types de biais incluent le biais de sélection ou d'échantillonnage, le biais de volontariat et le biais d'instrument.
Questions à explorer ici :
* Avons-nous recruté un ensemble représentatif de sujets de données ?
* Avons-nous testé notre jeu de données collecté ou organisé pour divers biais ?
* Pouvons-nous atténuer ou supprimer les biais découverts ?
#### 2.7 Qualité des données
La [qualité des données](https://lakefs.io/data-quality-testing/) examine la validité du jeu de données organisé utilisé pour développer nos algorithmes, en vérifiant si les caractéristiques et les enregistrements répondent aux exigences pour le niveau de précision et de cohérence nécessaire à notre objectif d'IA.
Questions à explorer ici :
* Avons-nous capturé des _caractéristiques_ valides pour notre cas d'utilisation ?
* Les données ont-elles été capturées de manière _cohérente_ à partir de diverses sources de données ?
* Le jeu de données est-il _complet_ pour diverses conditions ou scénarios ?
* Les informations capturées sont-elles _précises_ et reflètent-elles la réalité ?
#### 2.8 Équité des algorithmes
[Algorithm Fairness](https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f) vérifie si la conception de l'algorithme discrimine systématiquement certains sous-groupes de sujets de données, entraînant des [préjudices potentiels](https://docs.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml) dans l'_allocation_ (où des ressources sont refusées ou retenues pour ce groupe) et la _qualité du service_ (où l'IA est moins précise pour certains sous-groupes par rapport à d'autres).
Questions à explorer ici :
* Avons-nous évalué la précision du modèle pour des sous-groupes et des conditions diversifiés ?
* Avons-nous examiné le système pour identifier des préjudices potentiels (par exemple, des stéréotypes) ?
* Pouvons-nous réviser les données ou réentraîner les modèles pour atténuer les préjudices identifiés ?
Explorez des ressources comme les [checklists sur l'équité de l'IA](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4t6dA) pour en savoir plus.
#### 2.9 Fausse représentation
La [fausse représentation des données](https://www.sciencedirect.com/topics/computer-science/misrepresentation) consiste à se demander si nous communiquons des informations issues de données honnêtement rapportées de manière trompeuse pour soutenir un récit souhaité.
Questions à explorer ici :
* Rapportons-nous des données incomplètes ou inexactes ?
* Visualisons-nous les données de manière à induire des conclusions trompeuses ?
* Utilisons-nous des techniques statistiques sélectives pour manipuler les résultats ?
* Existe-t-il des explications alternatives qui pourraient offrir une conclusion différente ?
#### 2.10 Libre choix
L'[illusion du libre choix](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) se produit lorsque les "architectures de choix" des systèmes utilisent des algorithmes de prise de décision pour inciter les gens à adopter un résultat préféré tout en leur donnant l'impression d'avoir des options et du contrôle. Ces [dark patterns](https://www.darkpatterns.org/) peuvent causer des préjudices sociaux et économiques aux utilisateurs. Étant donné que les décisions des utilisateurs influencent les profils de comportement, ces actions peuvent potentiellement orienter les choix futurs et amplifier ou prolonger l'impact de ces préjudices.
Questions à explorer ici :
* L'utilisateur a-t-il compris les implications de son choix ?
* L'utilisateur était-il conscient des choix (alternatifs) et des avantages et inconvénients de chacun ?
* L'utilisateur peut-il revenir sur un choix automatisé ou influencé ultérieurement ?
### 3. Études de cas
Pour mettre ces défis éthiques dans des contextes réels, il est utile d'examiner des études de cas qui mettent en lumière les préjudices et conséquences potentiels pour les individus et la société lorsque ces violations éthiques sont ignorées.
Voici quelques exemples :
| Défi éthique | Étude de cas |
|--- |--- |
| **Consentement éclairé** | 1972 - [Étude sur la syphilis de Tuskegee](https://en.wikipedia.org/wiki/Tuskegee_Syphilis_Study) - Les hommes afro-américains qui ont participé à l'étude ont été promis des soins médicaux gratuits _mais trompés_ par des chercheurs qui n'ont pas informé les sujets de leur diagnostic ou de la disponibilité d'un traitement. De nombreux sujets sont morts et leurs partenaires ou enfants ont été affectés ; l'étude a duré 40 ans. |
| **Confidentialité des données** | 2007 - Le [concours de données Netflix](https://www.wired.com/2007/12/why-anonymous-data-sometimes-isnt/) a fourni aux chercheurs _10M de classements de films anonymisés de 50K clients_ pour améliorer les algorithmes de recommandation. Cependant, les chercheurs ont pu corréler les données anonymisées avec des données personnellement identifiables dans des _ensembles de données externes_ (par exemple, des commentaires IMDb), "désanonymisant" ainsi certains abonnés Netflix.|
| **Biais de collecte** | 2013 - La ville de Boston a [développé Street Bump](https://www.boston.gov/transportation/street-bump), une application permettant aux citoyens de signaler les nids-de-poule, offrant à la ville de meilleures données sur les routes pour identifier et résoudre les problèmes. Cependant, [les personnes des groupes à faible revenu avaient moins accès aux voitures et aux téléphones](https://hbr.org/2013/04/the-hidden-biases-in-big-data), rendant leurs problèmes de voirie invisibles dans cette application. Les développeurs ont travaillé avec des universitaires pour résoudre les problèmes d'_accès équitable et de fracture numérique_ pour plus d'équité. |
| **Équité algorithmique** | 2018 - L'étude MIT [Gender Shades](http://gendershades.org/overview.html) a évalué la précision des produits d'IA de classification de genre, révélant des écarts de précision pour les femmes et les personnes de couleur. Une [carte Apple de 2019](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/) semblait offrir moins de crédit aux femmes qu'aux hommes. Les deux cas ont illustré des problèmes de biais algorithmique entraînant des préjudices socio-économiques.|
| **Fausse représentation des données** | 2020 - Le [Département de la santé publique de Géorgie a publié des graphiques COVID-19](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening) qui semblaient induire les citoyens en erreur sur les tendances des cas confirmés avec un ordre non chronologique sur l'axe des x. Cela illustre la fausse représentation par des astuces de visualisation. |
| **Illusion du libre choix** | 2020 - L'application éducative [ABCmouse a payé 10M$ pour régler une plainte de la FTC](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/) où les parents étaient piégés dans des abonnements qu'ils ne pouvaient pas annuler. Cela illustre les dark patterns dans les architectures de choix, où les utilisateurs étaient incités à faire des choix potentiellement préjudiciables. |
| **Confidentialité des données et droits des utilisateurs** | 2021 - La [violation de données Facebook](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users) a exposé les données de 530M d'utilisateurs, entraînant un règlement de 5B$ avec la FTC. Cependant, Facebook a refusé de notifier les utilisateurs de la violation, violant les droits des utilisateurs en matière de transparence et d'accès aux données. |
Vous voulez explorer plus d'études de cas ? Consultez ces ressources :
* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - dilemmes éthiques dans divers secteurs.
* [Cours sur l'éthique des sciences des données](https://www.coursera.org/learn/data-science-ethics#syllabus) - études de cas emblématiques explorées.
* [Où les choses ont mal tourné](https://deon.drivendata.org/examples/) - checklist Deon avec des exemples.
> 🚨 Pensez aux études de cas que vous avez vues - avez-vous vécu ou été affecté par un défi éthique similaire dans votre vie ? Pouvez-vous penser à au moins une autre étude de cas qui illustre l'un des défis éthiques discutés dans cette section ?
## Éthique appliquée
Nous avons parlé des concepts éthiques, des défis et des études de cas dans des contextes réels. Mais comment commencer à _appliquer_ des principes et pratiques éthiques dans nos projets ? Et comment _opérationnaliser_ ces pratiques pour une meilleure gouvernance ? Explorons quelques solutions concrètes :
### 1. Codes professionnels
Les codes professionnels offrent une option pour que les organisations "incitent" leurs membres à soutenir leurs principes éthiques et leur mission. Les codes sont des _lignes directrices morales_ pour le comportement professionnel, aidant les employés ou membres à prendre des décisions alignées sur les principes de leur organisation. Ils ne sont efficaces que si les membres les respectent volontairement ; cependant, de nombreuses organisations offrent des récompenses et des sanctions supplémentaires pour motiver la conformité.
Exemples :
* [Oxford Munich](http://www.code-of-ethics.org/code-of-conduct/) Code d'éthique
* [Data Science Association](http://datascienceassn.org/code-of-conduct.html) Code de conduite (créé en 2013)
* [ACM Code of Ethics and Professional Conduct](https://www.acm.org/code-of-ethics) (depuis 1993)
> 🚨 Faites-vous partie d'une organisation professionnelle en ingénierie ou en science des données ? Explorez leur site pour voir s'ils définissent un code d'éthique professionnel. Que dit-il sur leurs principes éthiques ? Comment incitent-ils leurs membres à suivre le code ?
### 2. Checklists éthiques
Alors que les codes professionnels définissent le comportement _éthique requis_ des praticiens, ils [ont des limites connues](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md) en matière d'application, en particulier dans les projets à grande échelle. À la place, de nombreux experts en science des données [préconisent des checklists](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md), qui peuvent **connecter les principes aux pratiques** de manière plus déterministe et actionnable.
Les checklists transforment les questions en tâches "oui/non" qui peuvent être opérationnalisées, permettant de les suivre dans le cadre des workflows standard de lancement de produit.
Exemples :
* [Deon](https://deon.drivendata.org/) - une checklist éthique générale créée à partir de [recommandations de l'industrie](https://deon.drivendata.org/#checklist-citations) avec un outil en ligne de commande pour une intégration facile.
* [Checklist d'audit de confidentialité](https://cyber.harvard.edu/ecommerce/privacyaudit.html) - fournit des conseils généraux sur les pratiques de gestion de l'information du point de vue juridique et social.
* [Checklist sur l'équité de l'IA](https://www.microsoft.com/en-us/research/project/ai-fairness-checklist/) - créée par des praticiens de l'IA pour soutenir l'adoption et l'intégration des vérifications d'équité dans les cycles de développement de l'IA.
* [22 questions pour l'éthique dans les données et l'IA](https://medium.com/the-organization/22-questions-for-ethics-in-data-and-ai-efb68fd19429) - cadre plus ouvert, structuré pour une exploration initiale des problèmes éthiques dans la conception, la mise en œuvre et les contextes organisationnels.
### 3. Réglementations éthiques
L'éthique consiste à définir des valeurs partagées et à faire ce qui est juste _volontairement_. **La conformité** consiste à _respecter la loi_ là où elle est définie. **La gouvernance** couvre globalement toutes les façons dont les organisations fonctionnent pour appliquer des principes éthiques et se conformer aux lois établies.
Aujourd'hui, la gouvernance prend deux formes au sein des organisations. Premièrement, il s'agit de définir des principes d'**IA éthique** et d'établir des pratiques pour opérationnaliser leur adoption dans tous les projets liés à l'IA de l'organisation. Deuxièmement, il s'agit de se conformer à toutes les **réglementations sur la protection des données** imposées par le gouvernement dans les régions où elle opère.
Exemples de réglementations sur la protection des données et la confidentialité :
* `1974`, [US Privacy Act](https://www.justice.gov/opcl/privacy-act-1974) - régule la collecte, l'utilisation et la divulgation des informations personnelles par le _gouvernement fédéral_.
* `1996`, [US Health Insurance Portability & Accountability Act (HIPAA)](https://www.cdc.gov/phlp/publications/topic/hipaa.html) - protège les données personnelles de santé.
* `1998`, [US Children's Online Privacy Protection Act (COPPA)](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule) - protège la confidentialité des données des enfants de moins de 13 ans.
* `2018`, [Règlement général sur la protection des données (RGPD)](https://gdpr-info.eu/) - fournit des droits aux utilisateurs, protège les données et la confidentialité.
* `2018`, [California Consumer Privacy Act (CCPA)](https://www.oag.ca.gov/privacy/ccpa) donne aux consommateurs plus de _droits_ sur leurs données personnelles.
* `2021`, La [Loi sur la protection des informations personnelles de la Chine](https://www.reuters.com/world/china/china-passes-new-personal-data-privacy-law-take-effect-nov-1-2021-08-20/) vient d'être adoptée, créant l'une des réglementations les plus strictes sur la confidentialité des données en ligne dans le monde.
> 🚨 L'Union européenne a défini le RGPD (Règlement général sur la protection des données), qui reste l'une des réglementations les plus influentes sur la confidentialité des données aujourd'hui. Saviez-vous qu'il définit également [8 droits des utilisateurs](https://www.freeprivacypolicy.com/blog/8-user-rights-gdpr) pour protéger la confidentialité numérique et les données personnelles des citoyens ? Découvrez quels sont ces droits et pourquoi ils sont importants.
### 4. Culture éthique
Notez qu'il existe un écart intangible entre _la conformité_ (faire juste assez pour respecter "la lettre de la loi") et le traitement des [problèmes systémiques](https://www.coursera.org/learn/data-science-ethics/home/week/4) (comme l'ossification, l'asymétrie de l'information et l'injustice dans la distribution) qui peuvent accélérer la militarisation de l'IA.
Ce dernier nécessite [des approches collaboratives pour définir des cultures éthiques](https://towardsdatascience.com/why-ai-ethics-requires-a-culture-driven-approach-26f451afa29f) qui construisent des connexions émotionnelles et des valeurs partagées cohérentes _entre les organisations_ de l'industrie. Cela appelle à des [cultures éthiques formalisées](https://www.codeforamerica.org/news/formalizing-an-ethical-data-culture/) dans les organisations - permettant à _n'importe qui_ de [tirer le cordon Andon](https://en.wikipedia.org/wiki/Andon_(manufacturing)) (pour soulever des préoccupations éthiques tôt dans le processus) et faisant des _évaluations éthiques_ (par exemple, dans le recrutement) un critère central pour la formation des équipes dans les projets d'IA.
---
## [Quiz post-conférence](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/3) 🎯
## Révision et auto-apprentissage
Les cours et les livres aident à comprendre les concepts et défis éthiques fondamentaux, tandis que les études de cas et les outils aident à appliquer les pratiques éthiques dans des contextes réels. Voici quelques ressources pour commencer.
* [Machine Learning For Beginners](https://github.com/microsoft/ML-For-Beginners/blob/main/1-Introduction/3-fairness/README.md) - leçon sur l'équité, de Microsoft.
* [Principes de l'IA responsable](https://docs.microsoft.com/en-us/learn/modules/responsible-ai-principles/) - parcours d'apprentissage gratuit de Microsoft Learn.
* [Éthique et science des données](https://resources.oreilly.com/examples/0636920203964) - EBook O'Reilly (M. Loukides, H. Mason et al.)
* [Éthique de la science des données](https://www.coursera.org/learn/data-science-ethics#syllabus) - cours en ligne de l'Université du Michigan.
* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - études de cas de l'Université du Texas.
# Devoir
[Écrire une étude de cas sur l'éthique des données](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,33 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "b588c0fc73014f52520c666efc3e0cc3",
"translation_date": "2025-08-24T12:31:55+00:00",
"source_file": "1-Introduction/02-ethics/assignment.md",
"language_code": "fr"
}
-->
## Rédiger une étude de cas sur l'éthique des données
## Instructions
Vous avez appris à propos de divers [Défis d'éthique des données](README.md#2-ethics-challenges) et vu des exemples d'[Études de cas](README.md#3-case-studies) illustrant des défis éthiques liés aux données dans des contextes réels.
Dans cet exercice, vous allez rédiger votre propre étude de cas reflétant un défi éthique lié aux données, basé sur votre propre expérience ou sur un contexte réel pertinent que vous connaissez. Suivez simplement ces étapes :
1. `Choisissez un défi éthique lié aux données`. Consultez [les exemples de la leçon](README.md#2-ethics-challenges) ou explorez des exemples en ligne comme [la checklist Deon](https://deon.drivendata.org/examples/) pour trouver de l'inspiration.
2. `Décrivez un exemple réel`. Réfléchissez à une situation dont vous avez entendu parler (actualités, étude de recherche, etc.) ou que vous avez vécue (communauté locale), où ce défi spécifique s'est produit. Pensez aux questions éthiques liées aux données dans ce contexte - et discutez des dommages potentiels ou des conséquences imprévues qui découlent de ce problème. Points bonus : réfléchissez à des solutions potentielles ou à des processus qui pourraient être appliqués ici pour aider à éliminer ou atténuer l'impact négatif de ce défi.
3. `Fournissez une liste de ressources associées`. Partagez une ou plusieurs ressources (liens vers un article, un billet de blog personnel ou une image, un article de recherche en ligne, etc.) pour prouver qu'il s'agit d'un événement réel. Points bonus : partagez des ressources qui mettent également en évidence les dommages et conséquences potentiels de l'incident, ou qui soulignent les mesures positives prises pour éviter qu'il ne se reproduise.
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Un ou plusieurs défis éthiques liés aux données sont identifiés. <br/> <br/> L'étude de cas décrit clairement un incident réel reflétant ce défi, et met en évidence les conséquences ou dommages indésirables qu'il a causés. <br/><br/> Il y a au moins une ressource liée pour prouver que cela s'est produit. | Un défi éthique lié aux données est identifié. <br/><br/> Au moins un dommage ou une conséquence pertinent(e) est brièvement discuté(e). <br/><br/> Cependant, la discussion est limitée ou manque de preuve d'une occurrence réelle. | Un défi lié aux données est identifié. <br/><br/> Cependant, la description ou les ressources ne reflètent pas adéquatement le défi ou ne prouvent pas qu'il s'agit d'une occurrence réelle. |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,83 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "356d12cffc3125db133a2d27b827a745",
"translation_date": "2025-08-24T12:40:12+00:00",
"source_file": "1-Introduction/03-defining-data/README.md",
"language_code": "fr"
}
-->
# Définir les Données
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/03-DefiningData.png)|
|:---:|
|Définir les Données - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Les données sont des faits, des informations, des observations et des mesures utilisées pour faire des découvertes et soutenir des décisions éclairées. Un point de données est une unité unique de données dans un ensemble de données, qui est une collection de points de données. Les ensembles de données peuvent se présenter sous différents formats et structures, généralement en fonction de leur source ou de leur origine. Par exemple, les revenus mensuels d'une entreprise pourraient être dans une feuille de calcul, tandis que les données de fréquence cardiaque horaire d'une montre connectée pourraient être au format [JSON](https://stackoverflow.com/a/383699). Il est courant que les data scientists travaillent avec différents types de données au sein d'un ensemble de données.
Cette leçon se concentre sur l'identification et la classification des données en fonction de leurs caractéristiques et de leurs sources.
## [Quiz Pré-Cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/4)
## Comment les Données sont Décrites
### Données Brutes
Les données brutes sont des données provenant de leur source dans leur état initial et qui n'ont pas été analysées ou organisées. Pour comprendre ce qui se passe dans un ensemble de données, elles doivent être organisées dans un format compréhensible par les humains ainsi que par la technologie utilisée pour les analyser davantage. La structure d'un ensemble de données décrit comment il est organisé et peut être classée comme structuré, non structuré ou semi-structuré. Ces types de structure varient en fonction de la source, mais entrent généralement dans ces trois catégories.
### Données Quantitatives
Les données quantitatives sont des observations numériques dans un ensemble de données et peuvent généralement être analysées, mesurées et utilisées mathématiquement. Quelques exemples de données quantitatives : la population d'un pays, la taille d'une personne ou les revenus trimestriels d'une entreprise. Avec une analyse supplémentaire, les données quantitatives pourraient être utilisées pour découvrir des tendances saisonnières de l'indice de qualité de l'air (AQI) ou estimer la probabilité de trafic aux heures de pointe lors d'une journée de travail typique.
### Données Qualitatives
Les données qualitatives, également appelées données catégoriques, sont des données qui ne peuvent pas être mesurées objectivement comme les observations des données quantitatives. Ce sont généralement divers formats de données subjectives qui capturent la qualité de quelque chose, comme un produit ou un processus. Parfois, les données qualitatives sont numériques mais ne sont pas utilisées mathématiquement, comme les numéros de téléphone ou les horodatages. Quelques exemples de données qualitatives : les commentaires vidéo, la marque et le modèle d'une voiture ou la couleur préférée de vos amis proches. Les données qualitatives pourraient être utilisées pour comprendre quels produits les consommateurs préfèrent ou pour identifier des mots-clés populaires dans des CV.
### Données Structurées
Les données structurées sont organisées en lignes et colonnes, où chaque ligne possède le même ensemble de colonnes. Les colonnes représentent une valeur d'un type particulier et sont identifiées par un nom décrivant ce que représente la valeur, tandis que les lignes contiennent les valeurs réelles. Les colonnes ont souvent un ensemble spécifique de règles ou de restrictions sur les valeurs, pour garantir que les valeurs représentent correctement la colonne. Par exemple, imaginez une feuille de calcul de clients où chaque ligne doit avoir un numéro de téléphone et où les numéros de téléphone ne contiennent jamais de caractères alphabétiques. Des règles peuvent être appliquées à la colonne des numéros de téléphone pour s'assurer qu'elle n'est jamais vide et ne contient que des chiffres.
Un avantage des données structurées est qu'elles peuvent être organisées de manière à être reliées à d'autres données structurées. Cependant, comme les données sont conçues pour être organisées d'une manière spécifique, apporter des modifications à leur structure globale peut demander beaucoup d'efforts. Par exemple, ajouter une colonne d'e-mails à la feuille de calcul des clients qui ne peut pas être vide signifie qu'il faudra trouver comment ajouter ces valeurs aux lignes existantes de clients dans l'ensemble de données.
Exemples de données structurées : feuilles de calcul, bases de données relationnelles, numéros de téléphone, relevés bancaires.
### Données Non Structurées
Les données non structurées ne peuvent généralement pas être catégorisées en lignes ou colonnes et ne suivent pas un format ou un ensemble de règles. Comme les données non structurées ont moins de restrictions sur leur structure, il est plus facile d'ajouter de nouvelles informations par rapport à un ensemble de données structuré. Si un capteur capturant des données sur la pression barométrique toutes les 2 minutes reçoit une mise à jour lui permettant désormais de mesurer et d'enregistrer la température, cela ne nécessite pas de modifier les données existantes si elles sont non structurées. Cependant, cela peut rendre l'analyse ou l'exploration de ce type de données plus longue. Par exemple, un scientifique qui souhaite trouver la température moyenne du mois précédent à partir des données du capteur découvre que le capteur a enregistré un "e" dans certaines de ses données pour indiquer qu'il était en panne, au lieu d'un nombre typique, ce qui signifie que les données sont incomplètes.
Exemples de données non structurées : fichiers texte, messages texte, fichiers vidéo.
### Données Semi-Structurées
Les données semi-structurées ont des caractéristiques qui en font une combinaison de données structurées et non structurées. Elles ne suivent généralement pas un format de lignes et colonnes, mais sont organisées d'une manière considérée comme structurée et peuvent suivre un format fixe ou un ensemble de règles. La structure varie selon les sources, allant d'une hiérarchie bien définie à quelque chose de plus flexible permettant une intégration facile de nouvelles informations. Les métadonnées sont des indicateurs qui aident à décider comment les données sont organisées et stockées et portent divers noms en fonction du type de données. Quelques noms courants pour les métadonnées : balises, éléments, entités et attributs. Par exemple, un message e-mail typique aura un sujet, un corps et un ensemble de destinataires et peut être organisé par expéditeur ou date d'envoi.
Exemples de données semi-structurées : HTML, fichiers CSV, JavaScript Object Notation (JSON).
## Sources de Données
Une source de données est l'emplacement initial où les données ont été générées ou où elles "résident" et varie en fonction de la manière et du moment où elles ont été collectées. Les données générées par leurs utilisateurs sont appelées données primaires, tandis que les données secondaires proviennent d'une source ayant collecté des données pour un usage général. Par exemple, un groupe de scientifiques collectant des observations dans une forêt tropicale serait considéré comme primaire, et s'ils décident de les partager avec d'autres scientifiques, cela serait considéré comme secondaire pour ceux qui les utilisent.
Les bases de données sont une source courante et reposent sur un système de gestion de bases de données pour héberger et maintenir les données, où les utilisateurs utilisent des commandes appelées requêtes pour explorer les données. Les fichiers comme sources de données peuvent être des fichiers audio, image et vidéo ainsi que des feuilles de calcul comme Excel. Les sources Internet sont un emplacement courant pour héberger des données, où des bases de données ainsi que des fichiers peuvent être trouvés. Les interfaces de programmation d'applications, également appelées API, permettent aux programmeurs de créer des moyens de partager des données avec des utilisateurs externes via Internet, tandis que le processus de web scraping extrait des données d'une page web. Les [leçons sur le Travail avec les Données](../../../../../../../../../2-Working-With-Data) se concentrent sur la manière d'utiliser diverses sources de données.
## Conclusion
Dans cette leçon, nous avons appris :
- Ce que sont les données
- Comment les données sont décrites
- Comment les données sont classées et catégorisées
- Où les données peuvent être trouvées
## 🚀 Défi
Kaggle est une excellente source d'ensembles de données ouverts. Utilisez l'[outil de recherche d'ensembles de données](https://www.kaggle.com/datasets) pour trouver des ensembles de données intéressants et classifiez 3 à 5 ensembles de données selon ces critères :
- Les données sont-elles quantitatives ou qualitatives ?
- Les données sont-elles structurées, non structurées ou semi-structurées ?
## [Quiz Post-Cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/5)
## Révision & Auto-Étude
- Cette unité de Microsoft Learn, intitulée [Classifiez vos Données](https://docs.microsoft.com/en-us/learn/modules/choose-storage-approach-in-azure/2-classify-data), propose une explication détaillée des données structurées, semi-structurées et non structurées.
## Devoir
[Classifiez des Ensembles de Données](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,77 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "2e5cacb967c1e9dfd07809bfc441a0b4",
"translation_date": "2025-08-24T12:42:03+00:00",
"source_file": "1-Introduction/03-defining-data/assignment.md",
"language_code": "fr"
}
-->
# Classification des ensembles de données
## Instructions
Suivez les consignes de cet exercice pour identifier et classer les données selon l'un de chacun des types suivants :
**Types de structure** : Structuré, Semi-structuré ou Non structuré
**Types de valeur** : Qualitatif ou Quantitatif
**Types de source** : Primaire ou Secondaire
1. Une entreprise a été rachetée et a maintenant une société mère. Les data scientists ont reçu un tableur contenant les numéros de téléphone des clients de la part de la société mère.
Type de structure :
Type de valeur :
Type de source :
---
2. Une montre connectée collecte les données de fréquence cardiaque de son utilisateur, et les données brutes sont au format JSON.
Type de structure :
Type de valeur :
Type de source :
---
3. Une enquête sur le moral des employés, réalisée sur le lieu de travail, est stockée dans un fichier CSV.
Type de structure :
Type de valeur :
Type de source :
---
4. Des astrophysiciens accèdent à une base de données de galaxies collectées par une sonde spatiale. Les données contiennent le nombre de planètes dans chaque galaxie.
Type de structure :
Type de valeur :
Type de source :
---
5. Une application de gestion financière personnelle utilise des API pour se connecter aux comptes financiers d'un utilisateur afin de calculer son patrimoine net. L'utilisateur peut voir toutes ses transactions sous forme de lignes et colonnes, dans un format similaire à un tableur.
Type de structure :
Type de valeur :
Type de source :
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Identifie correctement tous les types de structure, de valeur et de source | Identifie correctement 3 types de structure, de valeur et de source | Identifie correctement 2 types ou moins de structure, de valeur et de source |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,274 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "b706a07cfa87ba091cbb91e0aa775600",
"translation_date": "2025-08-24T12:45:46+00:00",
"source_file": "1-Introduction/04-stats-and-probability/README.md",
"language_code": "fr"
}
-->
# Une brève introduction aux statistiques et probabilités
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/04-Statistics-Probability.png)|
|:---:|
| Statistiques et Probabilités - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
La théorie des statistiques et des probabilités sont deux domaines des mathématiques étroitement liés et très pertinents pour la science des données. Il est possible de travailler avec des données sans une connaissance approfondie des mathématiques, mais il est tout de même préférable de connaître au moins quelques concepts de base. Nous allons ici présenter une courte introduction pour vous aider à démarrer.
[![Vidéo d'introduction](../../../../1-Introduction/04-stats-and-probability/images/video-prob-and-stats.png)](https://youtu.be/Z5Zy85g4Yjw)
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/6)
## Probabilité et variables aléatoires
La **probabilité** est un nombre compris entre 0 et 1 qui exprime à quel point un **événement** est probable. Elle est définie comme le nombre de résultats positifs (qui mènent à l'événement), divisé par le nombre total de résultats, en supposant que tous les résultats sont également probables. Par exemple, lorsque nous lançons un dé, la probabilité d'obtenir un nombre pair est de 3/6 = 0,5.
Lorsque nous parlons d'événements, nous utilisons des **variables aléatoires**. Par exemple, la variable aléatoire qui représente un nombre obtenu en lançant un dé prendra des valeurs de 1 à 6. L'ensemble des nombres de 1 à 6 est appelé **espace échantillon**. Nous pouvons parler de la probabilité qu'une variable aléatoire prenne une certaine valeur, par exemple P(X=3)=1/6.
La variable aléatoire dans l'exemple précédent est appelée **discrète**, car elle a un espace échantillon dénombrable, c'est-à-dire qu'il existe des valeurs distinctes qui peuvent être énumérées. Il existe des cas où l'espace échantillon est un intervalle de nombres réels, ou l'ensemble complet des nombres réels. Ces variables sont appelées **continues**. Un bon exemple est l'heure d'arrivée d'un bus.
## Distribution de probabilité
Dans le cas des variables aléatoires discrètes, il est facile de décrire la probabilité de chaque événement à l'aide d'une fonction P(X). Pour chaque valeur *s* de l'espace échantillon *S*, elle donnera un nombre compris entre 0 et 1, de sorte que la somme de toutes les valeurs de P(X=s) pour tous les événements soit égale à 1.
La distribution discrète la plus connue est la **distribution uniforme**, dans laquelle il existe un espace échantillon de N éléments, avec une probabilité égale de 1/N pour chacun d'eux.
Il est plus difficile de décrire la distribution de probabilité d'une variable continue, avec des valeurs tirées d'un intervalle [a,b], ou de l'ensemble complet des nombres réels . Prenons l'exemple de l'heure d'arrivée d'un bus. En réalité, pour chaque heure d'arrivée exacte *t*, la probabilité qu'un bus arrive exactement à cette heure est de 0 !
> Vous savez maintenant que des événements avec une probabilité de 0 se produisent, et très souvent ! Au moins chaque fois qu'un bus arrive !
Nous ne pouvons parler que de la probabilité qu'une variable tombe dans un intervalle donné de valeurs, par exemple P(t<sub>1</sub>≤X<t<sub>2</sub>). Dans ce cas, la distribution de probabilité est décrite par une **fonction de densité de probabilité** p(x), telle que
![P(t_1\le X<t_2)=\int_{t_1}^{t_2}p(x)dx](../../../../1-Introduction/04-stats-and-probability/images/probability-density.png)
Un analogue continu de la distribution uniforme est appelé **uniforme continue**, qui est défini sur un intervalle fini. La probabilité que la valeur X tombe dans un intervalle de longueur l est proportionnelle à l, et augmente jusqu'à 1.
Une autre distribution importante est la **distribution normale**, dont nous parlerons plus en détail ci-dessous.
## Moyenne, variance et écart-type
Supposons que nous tirons une séquence de n échantillons d'une variable aléatoire X : x<sub>1</sub>, x<sub>2</sub>, ..., x<sub>n</sub>. Nous pouvons définir la **moyenne** (ou **moyenne arithmétique**) de la séquence de manière traditionnelle comme (x<sub>1</sub>+x<sub>2</sub>+x<sub>n</sub>)/n. En augmentant la taille de l'échantillon (c'est-à-dire en prenant la limite avec n→∞), nous obtiendrons la moyenne (également appelée **espérance**) de la distribution. Nous noterons l'espérance par **E**(x).
> Il peut être démontré que pour toute distribution discrète avec des valeurs {x<sub>1</sub>, x<sub>2</sub>, ..., x<sub>N</sub>} et des probabilités correspondantes p<sub>1</sub>, p<sub>2</sub>, ..., p<sub>N</sub>, l'espérance serait égale à E(X)=x<sub>1</sub>p<sub>1</sub>+x<sub>2</sub>p<sub>2</sub>+...+x<sub>N</sub>p<sub>N</sub>.
Pour identifier à quel point les valeurs sont dispersées, nous pouvons calculer la variance σ<sup>2</sup> = ∑(x<sub>i</sub> - μ)<sup>2</sup>/n, où μ est la moyenne de la séquence. La valeur σ est appelée **écart-type**, et σ<sup>2</sup> est appelée **variance**.
## Mode, médiane et quartiles
Parfois, la moyenne ne représente pas adéquatement la valeur "typique" des données. Par exemple, lorsqu'il y a quelques valeurs extrêmes complètement hors de portée, elles peuvent affecter la moyenne. Une autre bonne indication est la **médiane**, une valeur telle que la moitié des points de données sont inférieurs à celle-ci, et l'autre moitié - supérieurs.
Pour nous aider à comprendre la distribution des données, il est utile de parler des **quartiles** :
* Le premier quartile, ou Q1, est une valeur telle que 25 % des données sont inférieures à celle-ci
* Le troisième quartile, ou Q3, est une valeur telle que 75 % des données sont inférieures à celle-ci
Graphiquement, nous pouvons représenter la relation entre la médiane et les quartiles dans un diagramme appelé **boîte à moustaches** :
<img src="images/boxplot_explanation.png" width="50%"/>
Ici, nous calculons également l'**étendue interquartile** IQR=Q3-Q1, et les **valeurs aberrantes** - des valeurs qui se situent en dehors des limites [Q1-1.5*IQR,Q3+1.5*IQR].
Pour une distribution finie contenant un petit nombre de valeurs possibles, une bonne valeur "typique" est celle qui apparaît le plus fréquemment, appelée **mode**. Cela s'applique souvent aux données catégoriques, comme les couleurs. Considérons une situation où nous avons deux groupes de personnes - certains qui préfèrent fortement le rouge, et d'autres qui préfèrent le bleu. Si nous codons les couleurs par des nombres, la valeur moyenne pour une couleur préférée se situerait quelque part dans le spectre orange-vert, ce qui n'indique pas la préférence réelle d'aucun des groupes. Cependant, le mode serait soit l'une des couleurs, soit les deux couleurs, si le nombre de personnes votant pour elles est égal (dans ce cas, nous appelons l'échantillon **multimodal**).
## Données du monde réel
Lorsque nous analysons des données issues de la vie réelle, elles ne sont souvent pas des variables aléatoires à proprement parler, dans le sens où nous ne réalisons pas d'expériences avec un résultat inconnu. Par exemple, considérons une équipe de joueurs de baseball, et leurs données corporelles, telles que la taille, le poids et l'âge. Ces nombres ne sont pas exactement aléatoires, mais nous pouvons tout de même appliquer les mêmes concepts mathématiques. Par exemple, une séquence de poids de personnes peut être considérée comme une séquence de valeurs tirées d'une variable aléatoire. Voici la séquence des poids de joueurs de baseball réels de la [Major League Baseball](http://mlb.mlb.com/index.jsp), tirée de [ce jeu de données](http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights) (pour votre commodité, seules les 20 premières valeurs sont affichées) :
```
[180.0, 215.0, 210.0, 210.0, 188.0, 176.0, 209.0, 200.0, 231.0, 180.0, 188.0, 180.0, 185.0, 160.0, 180.0, 185.0, 197.0, 189.0, 185.0, 219.0]
```
> **Note** : Pour voir un exemple de travail avec ce jeu de données, consultez le [notebook associé](../../../../1-Introduction/04-stats-and-probability/notebook.ipynb). Il y a également un certain nombre de défis tout au long de cette leçon, et vous pouvez les compléter en ajoutant du code à ce notebook. Si vous ne savez pas comment manipuler les données, ne vous inquiétez pas - nous reviendrons sur le travail avec les données en Python plus tard. Si vous ne savez pas comment exécuter du code dans un Jupyter Notebook, consultez [cet article](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
Voici le diagramme en boîte montrant la moyenne, la médiane et les quartiles pour nos données :
![Diagramme en boîte des poids](../../../../1-Introduction/04-stats-and-probability/images/weight-boxplot.png)
Comme nos données contiennent des informations sur différents **rôles** de joueurs, nous pouvons également réaliser un diagramme en boîte par rôle - cela nous permettra de comprendre comment les valeurs des paramètres diffèrent selon les rôles. Cette fois, nous considérerons la taille :
![Diagramme en boîte par rôle](../../../../1-Introduction/04-stats-and-probability/images/boxplot_byrole.png)
Ce diagramme suggère qu'en moyenne, la taille des joueurs de première base est supérieure à celle des joueurs de deuxième base. Plus tard dans cette leçon, nous apprendrons comment tester cette hypothèse de manière plus formelle, et comment démontrer que nos données sont statistiquement significatives pour le prouver.
> Lorsqu'on travaille avec des données du monde réel, nous supposons que tous les points de données sont des échantillons tirés d'une certaine distribution de probabilité. Cette hypothèse nous permet d'appliquer des techniques d'apprentissage automatique et de construire des modèles prédictifs fonctionnels.
Pour voir quelle est la distribution de nos données, nous pouvons tracer un graphique appelé **histogramme**. L'axe X contiendra un certain nombre d'intervalles de poids différents (appelés **bins**), et l'axe vertical montrera le nombre de fois où notre échantillon de variable aléatoire se trouvait dans un intervalle donné.
![Histogramme des données réelles](../../../../1-Introduction/04-stats-and-probability/images/weight-histogram.png)
À partir de cet histogramme, vous pouvez voir que toutes les valeurs sont centrées autour d'un certain poids moyen, et plus nous nous éloignons de ce poids, moins il y a de poids de cette valeur. Autrement dit, il est très improbable que le poids d'un joueur de baseball soit très différent du poids moyen. La variance des poids montre dans quelle mesure les poids sont susceptibles de différer de la moyenne.
> Si nous prenons les poids d'autres personnes, pas de la ligue de baseball, la distribution sera probablement différente. Cependant, la forme de la distribution sera la même, mais la moyenne et la variance changeront. Ainsi, si nous entraînons notre modèle sur des joueurs de baseball, il est probable qu'il donne des résultats erronés lorsqu'il est appliqué à des étudiants d'une université, car la distribution sous-jacente est différente.
## Distribution normale
La distribution des poids que nous avons vue ci-dessus est très typique, et de nombreuses mesures issues du monde réel suivent le même type de distribution, mais avec des moyennes et des variances différentes. Cette distribution est appelée **distribution normale**, et elle joue un rôle très important en statistiques.
Utiliser une distribution normale est une manière correcte de générer des poids aléatoires de joueurs de baseball potentiels. Une fois que nous connaissons le poids moyen `mean` et l'écart-type `std`, nous pouvons générer 1000 échantillons de poids de la manière suivante :
```python
samples = np.random.normal(mean,std,1000)
```
Si nous traçons l'histogramme des échantillons générés, nous verrons une image très similaire à celle montrée ci-dessus. Et si nous augmentons le nombre d'échantillons et le nombre de bins, nous pouvons générer une image d'une distribution normale plus proche de l'idéal :
![Distribution normale avec moyenne=0 et écart-type=1](../../../../1-Introduction/04-stats-and-probability/images/normal-histogram.png)
*Distribution normale avec moyenne=0 et écart-type=1*
## Intervalles de confiance
Lorsque nous parlons des poids des joueurs de baseball, nous supposons qu'il existe une certaine **variable aléatoire W** qui correspond à la distribution de probabilité idéale des poids de tous les joueurs de baseball (appelée **population**). Notre séquence de poids correspond à un sous-ensemble de tous les joueurs de baseball que nous appelons **échantillon**. Une question intéressante est : pouvons-nous connaître les paramètres de la distribution de W, c'est-à-dire la moyenne et la variance de la population ?
La réponse la plus simple serait de calculer la moyenne et la variance de notre échantillon. Cependant, il pourrait arriver que notre échantillon aléatoire ne représente pas précisément la population complète. Ainsi, il est logique de parler d'**intervalle de confiance**.
> **Intervalle de confiance** est l'estimation de la vraie moyenne de la population à partir de notre échantillon, avec une précision selon une certaine probabilité (ou **niveau de confiance**).
Supposons que nous avons un échantillon X<sub>1</sub>, ..., X<sub>n</sub> provenant de notre distribution. Chaque fois que nous tirons un échantillon de notre distribution, nous obtenons une valeur moyenne différente μ. Ainsi, μ peut être considéré comme une variable aléatoire. Un **intervalle de confiance** avec une confiance p est une paire de valeurs (L<sub>p</sub>,R<sub>p</sub>), telle que **P**(L<sub>p</sub>≤μ≤R<sub>p</sub>) = p, c'est-à-dire que la probabilité que la valeur moyenne mesurée tombe dans l'intervalle est égale à p.
Il dépasse le cadre de cette courte introduction de discuter en détail comment ces intervalles de confiance sont calculés. Plus de détails peuvent être trouvés [sur Wikipedia](https://en.wikipedia.org/wiki/Confidence_interval). En bref, nous définissons la distribution de la moyenne de l'échantillon calculée par rapport à la vraie moyenne de la population, appelée **distribution de Student**.
> **Fait intéressant** : La distribution de Student porte le nom du mathématicien William Sealy Gosset, qui a publié son article sous le pseudonyme "Student". Il travaillait dans la brasserie Guinness et, selon une des versions, son employeur ne voulait pas que le grand public sache qu'ils utilisaient des tests statistiques pour déterminer la qualité des matières premières.
Si nous voulons estimer la moyenne μ de notre population avec une confiance p, nous devons prendre le *percentile (1-p)/2* d'une distribution de Student A, qui peut être obtenu à partir de tables ou calculé à l'aide de fonctions intégrées dans des logiciels statistiques (par exemple Python, R, etc.). Ensuite, l'intervalle pour μ serait donné par X±A*D/√n, où X est la moyenne obtenue de l'échantillon, D est l'écart-type.
> **Note** : Nous omettons également la discussion d'un concept important des [degrés de liberté](https://en.wikipedia.org/wiki/Degrees_of_freedom_(statistics)), qui est essentiel en relation avec la distribution de Student. Vous pouvez consulter des livres plus complets sur les statistiques pour approfondir ce concept.
Un exemple de calcul d'intervalle de confiance pour les poids et les tailles est donné dans les [notebooks associés](../../../../1-Introduction/04-stats-and-probability/notebook.ipynb).
| p | Moyenne du poids |
|------|------------------|
| 0.85 | 201.73±0.94 |
| 0.90 | 201.73±1.08 |
| 0.95 | 201.73±1.28 |
Remarquez que plus la probabilité de confiance est élevée, plus l'intervalle de confiance est large.
## Test d'hypothèse
Dans notre ensemble de données sur les joueurs de baseball, il existe différents rôles de joueurs, qui peuvent être résumés ci-dessous (consultez le [notebook associé](../../../../1-Introduction/04-stats-and-probability/notebook.ipynb) pour voir comment ce tableau peut être calculé) :
| Rôle | Taille | Poids | Nombre |
|--------------------|------------|------------|--------|
| Receveur | 72.723684 | 204.328947 | 76 |
| Frappeur désigné | 74.222222 | 220.888889 | 18 |
| Premier but | 74.000000 | 213.109091 | 55 |
| Champ extérieur | 73.010309 | 199.113402 | 194 |
| Lanceur de relève | 74.374603 | 203.517460 | 315 |
| Deuxième but | 71.362069 | 184.344828 | 58 |
| Arrêt-court | 71.903846 | 182.923077 | 52 |
| Lanceur partant | 74.719457 | 205.163636 | 221 |
| Troisième but | 73.044444 | 200.955556 | 45 |
Nous pouvons remarquer que la taille moyenne des premiers buts est supérieure à celle des deuxièmes buts. Ainsi, nous pourrions être tentés de conclure que **les premiers buts sont plus grands que les deuxièmes buts**.
> Cette affirmation est appelée **une hypothèse**, car nous ne savons pas si le fait est réellement vrai ou non.
Cependant, il n'est pas toujours évident de savoir si nous pouvons tirer cette conclusion. D'après la discussion ci-dessus, nous savons que chaque moyenne a un intervalle de confiance associé, et donc cette différence peut simplement être une erreur statistique. Nous avons besoin d'une méthode plus formelle pour tester notre hypothèse.
Calculons les intervalles de confiance séparément pour les tailles des premiers et des deuxièmes buts :
| Confiance | Premiers buts | Deuxièmes buts |
|-----------|---------------|----------------|
| 0.85 | 73.62..74.38 | 71.04..71.69 |
| 0.90 | 73.56..74.44 | 70.99..71.73 |
| 0.95 | 73.47..74.53 | 70.92..71.81 |
Nous pouvons voir qu'à aucun niveau de confiance les intervalles ne se chevauchent. Cela prouve notre hypothèse que les premiers buts sont plus grands que les deuxièmes buts.
Plus formellement, le problème que nous résolvons est de voir si **deux distributions de probabilité sont identiques**, ou du moins ont les mêmes paramètres. Selon la distribution, nous devons utiliser différents tests pour cela. Si nous savons que nos distributions sont normales, nous pouvons appliquer le **[test t de Student](https://en.wikipedia.org/wiki/Student%27s_t-test)**.
Dans le test t de Student, nous calculons ce qu'on appelle la **valeur t**, qui indique la différence entre les moyennes, en tenant compte de la variance. Il est démontré que la valeur t suit la **distribution de Student**, ce qui nous permet d'obtenir la valeur seuil pour un niveau de confiance donné **p** (cela peut être calculé ou consulté dans des tables numériques). Nous comparons ensuite la valeur t à ce seuil pour approuver ou rejeter l'hypothèse.
En Python, nous pouvons utiliser le package **SciPy**, qui inclut la fonction `ttest_ind` (en plus de nombreuses autres fonctions statistiques utiles !). Elle calcule la valeur t pour nous et effectue également la recherche inverse de la valeur p de confiance, afin que nous puissions simplement regarder la confiance pour tirer une conclusion.
Par exemple, notre comparaison entre les tailles des premiers et des deuxièmes buts nous donne les résultats suivants :
```python
from scipy.stats import ttest_ind
tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Designated_Hitter',['Height']],equal_var=False)
print(f"T-value = {tval[0]:.2f}\nP-value: {pval[0]}")
```
```
T-value = 7.65
P-value: 9.137321189738925e-12
```
Dans notre cas, la valeur p est très faible, ce qui signifie qu'il existe des preuves solides soutenant que les premiers buts sont plus grands.
Il existe également différents autres types d'hypothèses que nous pourrions vouloir tester, par exemple :
* Prouver qu'un échantillon donné suit une distribution. Dans notre cas, nous avons supposé que les tailles sont distribuées normalement, mais cela nécessite une vérification statistique formelle.
* Prouver que la valeur moyenne d'un échantillon correspond à une valeur prédéfinie.
* Comparer les moyennes de plusieurs échantillons (par exemple, quelle est la différence dans les niveaux de bonheur entre différents groupes d'âge).
## Loi des grands nombres et théorème central limite
L'une des raisons pour lesquelles la distribution normale est si importante est le **théorème central limite**. Supposons que nous avons un grand échantillon de N valeurs indépendantes X<sub>1</sub>, ..., X<sub>N</sub>, échantillonnées à partir de n'importe quelle distribution avec une moyenne μ et une variance σ<sup>2</sup>. Ensuite, pour un N suffisamment grand (en d'autres termes, lorsque N→∞), la moyenne Σ<sub>i</sub>X<sub>i</sub> serait distribuée normalement, avec une moyenne μ et une variance σ<sup>2</sup>/N.
> Une autre façon d'interpréter le théorème central limite est de dire que, quelle que soit la distribution, lorsque vous calculez la moyenne d'une somme de valeurs de variables aléatoires, vous obtenez une distribution normale.
D'après le théorème central limite, il s'ensuit également que, lorsque N→∞, la probabilité que la moyenne de l'échantillon soit égale à μ devient 1. Cela est connu sous le nom de **loi des grands nombres**.
## Covariance et corrélation
L'une des choses que fait la science des données est de trouver des relations entre les données. Nous disons que deux séquences **corrèlent** lorsqu'elles présentent un comportement similaire en même temps, c'est-à-dire qu'elles augmentent/diminuent simultanément, ou qu'une séquence augmente lorsque l'autre diminue et vice versa. En d'autres termes, il semble y avoir une relation entre deux séquences.
> La corrélation n'indique pas nécessairement une relation causale entre deux séquences ; parfois, les deux variables peuvent dépendre d'une cause externe, ou cela peut être purement par hasard que les deux séquences corrèlent. Cependant, une corrélation mathématique forte est une bonne indication que deux variables sont d'une certaine manière connectées.
Mathématiquement, le concept principal qui montre la relation entre deux variables aléatoires est la **covariance**, qui est calculée comme suit : Cov(X,Y) = **E**\[(X-**E**(X))(Y-**E**(Y))\]. Nous calculons la déviation des deux variables par rapport à leurs valeurs moyennes, puis le produit de ces déviations. Si les deux variables dévient ensemble, le produit sera toujours une valeur positive, ce qui donnera une covariance positive. Si les deux variables dévient de manière désynchronisée (c'est-à-dire qu'une tombe en dessous de la moyenne lorsque l'autre dépasse la moyenne), nous obtiendrons toujours des nombres négatifs, ce qui donnera une covariance négative. Si les déviations ne sont pas dépendantes, elles s'additionneront à peu près à zéro.
La valeur absolue de la covariance ne nous dit pas grand-chose sur l'ampleur de la corrélation, car elle dépend de la magnitude des valeurs réelles. Pour la normaliser, nous pouvons diviser la covariance par l'écart-type des deux variables, pour obtenir la **corrélation**. L'avantage est que la corrélation est toujours dans la plage [-1,1], où 1 indique une corrélation positive forte entre les valeurs, -1 une corrélation négative forte, et 0 aucune corrélation (les variables sont indépendantes).
**Exemple** : Nous pouvons calculer la corrélation entre les poids et les tailles des joueurs de baseball à partir de l'ensemble de données mentionné ci-dessus :
```python
print(np.corrcoef(weights,heights))
```
En conséquence, nous obtenons une **matrice de corrélation** comme celle-ci :
```
array([[1. , 0.52959196],
[0.52959196, 1. ]])
```
> La matrice de corrélation C peut être calculée pour n'importe quel nombre de séquences d'entrée S<sub>1</sub>, ..., S<sub>n</sub>. La valeur de C<sub>ij</sub> est la corrélation entre S<sub>i</sub> et S<sub>j</sub>, et les éléments diagonaux sont toujours égaux à 1 (ce qui est également l'auto-corrélation de S<sub>i</sub>).
Dans notre cas, la valeur 0.53 indique qu'il existe une certaine corrélation entre le poids et la taille d'une personne. Nous pouvons également réaliser un diagramme de dispersion d'une valeur par rapport à l'autre pour voir la relation visuellement :
![Relation entre poids et taille](../../../../1-Introduction/04-stats-and-probability/images/weight-height-relationship.png)
> Plus d'exemples de corrélation et de covariance peuvent être trouvés dans le [notebook associé](../../../../1-Introduction/04-stats-and-probability/notebook.ipynb).
## Conclusion
Dans cette section, nous avons appris :
* les propriétés statistiques de base des données, telles que la moyenne, la variance, le mode et les quartiles
* les différentes distributions de variables aléatoires, y compris la distribution normale
* comment trouver la corrélation entre différentes propriétés
* comment utiliser un appareil mathématique et statistique solide pour prouver certaines hypothèses
* comment calculer les intervalles de confiance pour une variable aléatoire donnée un échantillon de données
Bien que cela ne soit certainement pas une liste exhaustive des sujets qui existent dans la probabilité et les statistiques, cela devrait suffire à vous donner un bon départ dans ce cours.
## 🚀 Défi
Utilisez le code d'exemple dans le notebook pour tester d'autres hypothèses :
1. Les premiers buts sont plus âgés que les deuxièmes buts
2. Les premiers buts sont plus grands que les troisièmes buts
3. Les arrêts-courts sont plus grands que les deuxièmes buts
## [Quiz post-lecture](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/7)
## Révision et auto-apprentissage
La probabilité et les statistiques sont un sujet si vaste qu'il mérite son propre cours. Si vous souhaitez approfondir la théorie, vous pouvez continuer à lire certains des livres suivants :
1. [Carlos Fernandez-Granda](https://cims.nyu.edu/~cfgranda/) de l'Université de New York propose d'excellentes notes de cours [Probability and Statistics for Data Science](https://cims.nyu.edu/~cfgranda/pages/stuff/probability_stats_for_DS.pdf) (disponibles en ligne)
1. [Peter et Andrew Bruce. Practical Statistics for Data Scientists.](https://www.oreilly.com/library/view/practical-statistics-for/9781491952955/) [[code d'exemple en R](https://github.com/andrewgbruce/statistics-for-data-scientists)].
1. [James D. Miller. Statistics for Data Science](https://www.packtpub.com/product/statistics-for-data-science/9781788290678) [[code d'exemple en R](https://github.com/PacktPublishing/Statistics-for-Data-Science)]
## Devoir
[Petite étude sur le diabète](assignment.md)
## Crédits
Cette leçon a été rédigée avec ♥️ par [Dmitry Soshnikov](http://soshnikov.com)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,38 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "01d1b493e8b51a6ebb42524f6b1bcfff",
"translation_date": "2025-08-24T12:49:43+00:00",
"source_file": "1-Introduction/04-stats-and-probability/assignment.md",
"language_code": "fr"
}
-->
# Petite étude sur le diabète
Dans cet exercice, nous allons travailler avec un petit ensemble de données de patients diabétiques provenant de [ici](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html).
| | ÂGE | SEXE | IMC | TA | S1 | S2 | S3 | S4 | S5 | S6 | Y |
|---|-----|------|-----|----|----|----|----|----|----|----|----|
| 0 | 59 | 2 | 32.1 | 101. | 157 | 93.2 | 38.0 | 4. | 4.8598 | 87 | 151 |
| 1 | 48 | 1 | 21.6 | 87.0 | 183 | 103.2 | 70. | 3. | 3.8918 | 69 | 75 |
| 2 | 72 | 2 | 30.5 | 93.0 | 156 | 93.6 | 41.0 | 4.0 | 4. | 85 | 141 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
## Instructions
* Ouvrez le [notebook de l'exercice](../../../../1-Introduction/04-stats-and-probability/assignment.ipynb) dans un environnement jupyter notebook
* Complétez toutes les tâches listées dans le notebook, à savoir :
* [ ] Calculer les valeurs moyennes et la variance pour toutes les variables
* [ ] Tracer des boxplots pour l'IMC, la TA et Y en fonction du sexe
* [ ] Quelle est la distribution des variables Âge, Sexe, IMC et Y ?
* [ ] Tester la corrélation entre les différentes variables et la progression de la maladie (Y)
* [ ] Tester l'hypothèse selon laquelle le degré de progression du diabète est différent entre les hommes et les femmes
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | --- |
Toutes les tâches requises sont complètes, illustrées graphiquement et expliquées | La plupart des tâches sont complètes, mais les explications ou les conclusions tirées des graphiques et/ou des valeurs obtenues manquent | Seules les tâches de base, comme le calcul des moyennes/variances et les graphiques simples, sont complètes, aucune conclusion n'est tirée des données
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,29 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "696a8474a01054281704cbfb09148949",
"translation_date": "2025-08-24T12:20:48+00:00",
"source_file": "1-Introduction/README.md",
"language_code": "fr"
}
-->
# Introduction à la Science des Données
![données en action](../../../1-Introduction/images/data.jpg)
> Photo par <a href="https://unsplash.com/@dawson2406?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Stephen Dawson</a> sur <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
Dans ces leçons, vous découvrirez comment la Science des Données est définie et apprendrez les considérations éthiques qu'un scientifique des données doit prendre en compte. Vous apprendrez également comment les données sont définies et explorerez un peu les statistiques et la probabilité, les domaines académiques fondamentaux de la Science des Données.
### Sujets
1. [Définir la Science des Données](01-defining-data-science/README.md)
2. [Éthique en Science des Données](02-ethics/README.md)
3. [Définir les Données](03-defining-data/README.md)
4. [Introduction aux Statistiques et à la Probabilité](04-stats-and-probability/README.md)
### Crédits
Ces leçons ont été écrites avec ❤️ par [Nitya Narasimhan](https://twitter.com/nitya) et [Dmitry Soshnikov](https://twitter.com/shwars).
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,193 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "870a0086adbc313a8eea5489bdcb2522",
"translation_date": "2025-08-24T12:00:50+00:00",
"source_file": "2-Working-With-Data/05-relational-databases/README.md",
"language_code": "fr"
}
-->
# Travailler avec les données : Bases de données relationnelles
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/05-RelationalData.png)|
|:---:|
| Travailler avec les données : Bases de données relationnelles - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Il est probable que vous ayez déjà utilisé un tableur pour stocker des informations. Vous aviez un ensemble de lignes et de colonnes, où les lignes contenaient les informations (ou données), et les colonnes décrivaient ces informations (parfois appelées métadonnées). Une base de données relationnelle repose sur ce principe fondamental de colonnes et de lignes dans des tables, vous permettant de répartir les informations sur plusieurs tables. Cela vous permet de travailler avec des données plus complexes, d'éviter les duplications et d'avoir une flexibilité dans la manière d'explorer les données. Explorons les concepts d'une base de données relationnelle.
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/8)
## Tout commence par des tables
Une base de données relationnelle a pour élément central les tables. Tout comme dans un tableur, une table est une collection de colonnes et de lignes. Les lignes contiennent les données ou informations avec lesquelles nous souhaitons travailler, comme le nom d'une ville ou la quantité de précipitations. Les colonnes décrivent les données qu'elles stockent.
Commençons notre exploration en créant une table pour stocker des informations sur les villes. Nous pourrions commencer par leur nom et leur pays. Vous pourriez stocker cela dans une table comme suit :
| Ville | Pays |
| --------- | ------------- |
| Tokyo | Japon |
| Atlanta | États-Unis |
| Auckland | Nouvelle-Zélande |
Remarquez que les noms des colonnes **ville**, **pays** et **population** décrivent les données stockées, et chaque ligne contient des informations sur une ville.
## Les limites d'une approche avec une seule table
Il est probable que la table ci-dessus vous semble relativement familière. Ajoutons maintenant des données supplémentaires à notre base de données en pleine croissance - les précipitations annuelles (en millimètres). Nous nous concentrerons sur les années 2018, 2019 et 2020. Si nous devions les ajouter pour Tokyo, cela pourrait ressembler à ceci :
| Ville | Pays | Année | Quantité |
| ------ | ------- | ----- | -------- |
| Tokyo | Japon | 2020 | 1690 |
| Tokyo | Japon | 2019 | 1874 |
| Tokyo | Japon | 2018 | 1445 |
Que remarquez-vous à propos de notre table ? Vous pourriez remarquer que nous dupliquons le nom et le pays de la ville encore et encore. Cela pourrait occuper beaucoup d'espace de stockage, et il est largement inutile d'avoir plusieurs copies. Après tout, Tokyo n'a qu'un seul nom qui nous intéresse.
OK, essayons autre chose. Ajoutons de nouvelles colonnes pour chaque année :
| Ville | Pays | 2018 | 2019 | 2020 |
| --------- | ------------- | ---- | ---- | ---- |
| Tokyo | Japon | 1445 | 1874 | 1690 |
| Atlanta | États-Unis | 1779 | 1111 | 1683 |
| Auckland | Nouvelle-Zélande | 1386 | 942 | 1176 |
Bien que cela évite la duplication des lignes, cela ajoute quelques autres défis. Nous devrions modifier la structure de notre table chaque fois qu'une nouvelle année est ajoutée. De plus, à mesure que nos données augmentent, avoir nos années comme colonnes rendra plus difficile la récupération et le calcul des valeurs.
C'est pourquoi nous avons besoin de plusieurs tables et de relations. En divisant nos données, nous pouvons éviter les duplications et avoir plus de flexibilité dans la manière dont nous travaillons avec nos données.
## Les concepts de relations
Revenons à nos données et déterminons comment nous voulons les diviser. Nous savons que nous voulons stocker le nom et le pays de nos villes, donc cela fonctionnera probablement mieux dans une seule table.
| Ville | Pays |
| --------- | ------------- |
| Tokyo | Japon |
| Atlanta | États-Unis |
| Auckland | Nouvelle-Zélande |
Mais avant de créer la table suivante, nous devons déterminer comment référencer chaque ville. Nous avons besoin d'une forme d'identifiant, ID ou (en termes techniques de base de données) une clé primaire. Une clé primaire est une valeur utilisée pour identifier une ligne spécifique dans une table. Bien que cela puisse être basé sur une valeur elle-même (nous pourrions utiliser le nom de la ville, par exemple), cela devrait presque toujours être un numéro ou un autre identifiant. Nous ne voulons pas que l'ID change, car cela casserait la relation. Vous constaterez que dans la plupart des cas, la clé primaire ou l'ID sera un numéro généré automatiquement.
> ✅ La clé primaire est fréquemment abrégée en PK
### villes
| ville_id | Ville | Pays |
| -------- | --------- | ------------- |
| 1 | Tokyo | Japon |
| 2 | Atlanta | États-Unis |
| 3 | Auckland | Nouvelle-Zélande |
> ✅ Vous remarquerez que nous utilisons les termes "id" et "clé primaire" de manière interchangeable pendant cette leçon. Les concepts ici s'appliquent aux DataFrames, que vous explorerez plus tard. Les DataFrames n'utilisent pas la terminologie de "clé primaire", cependant vous remarquerez qu'ils se comportent de manière similaire.
Avec notre table des villes créée, stockons les précipitations. Plutôt que de dupliquer les informations complètes sur la ville, nous pouvons utiliser l'ID. Nous devrions également nous assurer que la table nouvellement créée a une colonne *id*, car toutes les tables devraient avoir un ID ou une clé primaire.
### précipitations
| precipitation_id | ville_id | Année | Quantité |
| ---------------- | -------- | ----- | -------- |
| 1 | 1 | 2018 | 1445 |
| 2 | 1 | 2019 | 1874 |
| 3 | 1 | 2020 | 1690 |
| 4 | 2 | 2018 | 1779 |
| 5 | 2 | 2019 | 1111 |
| 6 | 2 | 2020 | 1683 |
| 7 | 3 | 2018 | 1386 |
| 8 | 3 | 2019 | 942 |
| 9 | 3 | 2020 | 1176 |
Remarquez la colonne **ville_id** dans la table nouvellement créée **précipitations**. Cette colonne contient des valeurs qui font référence aux IDs dans la table **villes**. En termes techniques de données relationnelles, cela s'appelle une **clé étrangère** ; c'est une clé primaire d'une autre table. Vous pouvez simplement la considérer comme une référence ou un pointeur. **ville_id** 1 fait référence à Tokyo.
> [!NOTE] La clé étrangère est fréquemment abrégée en FK
## Récupérer les données
Avec nos données séparées en deux tables, vous vous demandez peut-être comment les récupérer. Si nous utilisons une base de données relationnelle comme MySQL, SQL Server ou Oracle, nous pouvons utiliser un langage appelé Structured Query Language ou SQL. SQL (parfois prononcé "sequel") est un langage standard utilisé pour récupérer et modifier des données dans une base de données relationnelle.
Pour récupérer des données, vous utilisez la commande `SELECT`. En son cœur, vous **sélectionnez** les colonnes que vous souhaitez voir **depuis** la table dans laquelle elles sont contenues. Si vous vouliez afficher uniquement les noms des villes, vous pourriez utiliser ce qui suit :
```sql
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
```
`SELECT` est l'endroit où vous listez les colonnes, et `FROM` est l'endroit où vous listez les tables.
> [NOTE] La syntaxe SQL est insensible à la casse, ce qui signifie que `select` et `SELECT` signifient la même chose. Cependant, selon le type de base de données que vous utilisez, les colonnes et les tables pourraient être sensibles à la casse. En conséquence, il est recommandé de toujours traiter tout en programmation comme si c'était sensible à la casse. Lors de l'écriture de requêtes SQL, la convention courante est de mettre les mots-clés en majuscules.
La requête ci-dessus affichera toutes les villes. Imaginons que nous voulions afficher uniquement les villes en Nouvelle-Zélande. Nous avons besoin d'une forme de filtre. Le mot-clé SQL pour cela est `WHERE`, ou "où quelque chose est vrai".
```sql
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
```
## Joindre les données
Jusqu'à présent, nous avons récupéré des données d'une seule table. Maintenant, nous voulons rassembler les données des tables **villes** et **précipitations**. Cela se fait en les *joignant* ensemble. Vous allez effectivement créer une liaison entre les deux tables et faire correspondre les valeurs d'une colonne de chaque table.
Dans notre exemple, nous allons faire correspondre la colonne **ville_id** dans **précipitations** avec la colonne **ville_id** dans **villes**. Cela associera la valeur des précipitations à sa ville respective. Le type de jointure que nous effectuerons est ce qu'on appelle une jointure *interne*, ce qui signifie que si des lignes ne correspondent pas à quelque chose dans l'autre table, elles ne seront pas affichées. Dans notre cas, chaque ville a des précipitations, donc tout sera affiché.
Récupérons les précipitations de 2019 pour toutes nos villes.
Nous allons le faire en étapes. La première étape consiste à joindre les données ensemble en indiquant les colonnes pour la liaison - **ville_id** comme souligné précédemment.
```sql
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
```
Nous avons mis en évidence les deux colonnes que nous voulons, et le fait que nous voulons joindre les tables ensemble par **ville_id**. Maintenant, nous pouvons ajouter l'instruction `WHERE` pour filtrer uniquement l'année 2019.
```sql
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942
```
## Résumé
Les bases de données relationnelles sont centrées sur la division des informations entre plusieurs tables qui sont ensuite réunies pour l'affichage et l'analyse. Cela offre une grande flexibilité pour effectuer des calculs et manipuler les données. Vous avez vu les concepts fondamentaux d'une base de données relationnelle, et comment effectuer une jointure entre deux tables.
## 🚀 Défi
Il existe de nombreuses bases de données relationnelles disponibles sur Internet. Vous pouvez explorer les données en utilisant les compétences que vous avez apprises ci-dessus.
## Quiz après le cours
## [Quiz après le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/9)
## Révision et auto-apprentissage
Il existe plusieurs ressources disponibles sur [Microsoft Learn](https://docs.microsoft.com/learn?WT.mc_id=academic-77958-bethanycheum) pour continuer votre exploration des concepts SQL et des bases de données relationnelles.
- [Décrire les concepts des données relationnelles](https://docs.microsoft.com//learn/modules/describe-concepts-of-relational-data?WT.mc_id=academic-77958-bethanycheum)
- [Commencer à interroger avec Transact-SQL](https://docs.microsoft.com//learn/paths/get-started-querying-with-transact-sql?WT.mc_id=academic-77958-bethanycheum) (Transact-SQL est une version de SQL)
- [Contenu SQL sur Microsoft Learn](https://docs.microsoft.com/learn/browse/?products=azure-sql-database%2Csql-server&expanded=azure&WT.mc_id=academic-77958-bethanycheum)
## Devoir
[Titre du devoir](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,71 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "2f2d7693f28e4b2675f275e489dc5aac",
"translation_date": "2025-08-24T12:02:55+00:00",
"source_file": "2-Working-With-Data/05-relational-databases/assignment.md",
"language_code": "fr"
}
-->
# Affichage des données des aéroports
Vous disposez d'une [base de données](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db) construite avec [SQLite](https://sqlite.org/index.html) qui contient des informations sur les aéroports. Le schéma est affiché ci-dessous. Vous utiliserez l'[extension SQLite](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum) dans [Visual Studio Code](https://code.visualstudio.com?WT.mc_id=academic-77958-bethanycheum) pour afficher des informations sur les aéroports de différentes villes.
## Instructions
Pour commencer cet exercice, vous devrez effectuer quelques étapes. Vous devrez installer certains outils et télécharger la base de données d'exemple.
### Configurez votre système
Vous pouvez utiliser Visual Studio Code et l'extension SQLite pour interagir avec la base de données.
1. Rendez-vous sur [code.visualstudio.com](https://code.visualstudio.com?WT.mc_id=academic-77958-bethanycheum) et suivez les instructions pour installer Visual Studio Code
1. Installez l'[extension SQLite](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum) comme indiqué sur la page du Marketplace
### Téléchargez et ouvrez la base de données
Ensuite, vous téléchargerez et ouvrirez la base de données.
1. Téléchargez le [fichier de base de données depuis GitHub](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db) et enregistrez-le dans un répertoire
1. Ouvrez Visual Studio Code
1. Ouvrez la base de données dans l'extension SQLite en sélectionnant **Ctrl-Maj-P** (ou **Cmd-Maj-P** sur un Mac) et en tapant `SQLite: Open database`
1. Sélectionnez **Choose database from file** et ouvrez le fichier **airports.db** que vous avez téléchargé précédemment
1. Après avoir ouvert la base de données (aucune mise à jour ne s'affichera à l'écran), créez une nouvelle fenêtre de requête en sélectionnant **Ctrl-Maj-P** (ou **Cmd-Maj-P** sur un Mac) et en tapant `SQLite: New query`
Une fois ouverte, la nouvelle fenêtre de requête peut être utilisée pour exécuter des instructions SQL sur la base de données. Vous pouvez utiliser la commande **Ctrl-Maj-Q** (ou **Cmd-Maj-Q** sur un Mac) pour exécuter des requêtes sur la base de données.
> [!NOTE] Pour plus d'informations sur l'extension SQLite, vous pouvez consulter la [documentation](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum)
## Schéma de la base de données
Le schéma d'une base de données correspond à la conception et à la structure de ses tables. La base de données **airports** contient deux tables : `cities`, qui répertorie les villes du Royaume-Uni et d'Irlande, et `airports`, qui contient la liste de tous les aéroports. Comme certaines villes peuvent avoir plusieurs aéroports, deux tables ont été créées pour stocker ces informations. Dans cet exercice, vous utiliserez des jointures pour afficher des informations sur différentes villes.
| Villes |
| ----------------- |
| id (PK, entier) |
| city (texte) |
| country (texte) |
| Aéroports |
| -------------------------------- |
| id (PK, entier) |
| name (texte) |
| code (texte) |
| city_id (FK vers id dans **Cities**) |
## Exercice
Créez des requêtes pour retourner les informations suivantes :
1. tous les noms de villes dans la table `Cities`
1. toutes les villes en Irlande dans la table `Cities`
1. tous les noms d'aéroports avec leur ville et leur pays
1. tous les aéroports à Londres, Royaume-Uni
## Grille d'évaluation
| Exemplaire | Adéquat | À améliorer |
| ---------- | -------- | ----------------- |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,156 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "32ddfef8121650f2ca2f3416fd283c37",
"translation_date": "2025-08-24T12:17:04+00:00",
"source_file": "2-Working-With-Data/06-non-relational/README.md",
"language_code": "fr"
}
-->
# Travailler avec les données : données non relationnelles
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/06-NoSQL.png)|
|:---:|
|Travailler avec les données NoSQL - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/10)
Les données ne se limitent pas aux bases de données relationnelles. Cette leçon se concentre sur les données non relationnelles et couvrira les bases des tableurs et du NoSQL.
## Tableurs
Les tableurs sont un moyen populaire de stocker et d'explorer des données car ils nécessitent moins de travail pour être configurés et utilisés. Dans cette leçon, vous apprendrez les composants de base d'un tableur, ainsi que les formules et les fonctions. Les exemples seront illustrés avec Microsoft Excel, mais la plupart des parties et des sujets auront des noms et des étapes similaires par rapport à d'autres logiciels de tableur.
![Un classeur Microsoft Excel vide avec deux feuilles de calcul](../../../../2-Working-With-Data/06-non-relational/images/parts-of-spreadsheet.png)
Un tableur est un fichier accessible dans le système de fichiers d'un ordinateur, d'un appareil ou d'un système de fichiers basé sur le cloud. Le logiciel lui-même peut être basé sur un navigateur ou une application qui doit être installée sur un ordinateur ou téléchargée en tant qu'application. Dans Excel, ces fichiers sont également définis comme **classeur**, et cette terminologie sera utilisée pour le reste de cette leçon.
Un classeur contient une ou plusieurs **feuilles de calcul**, où chaque feuille est identifiée par des onglets. Dans une feuille de calcul, on trouve des rectangles appelés **cellules**, qui contiennent les données réelles. Une cellule est l'intersection d'une ligne et d'une colonne, où les colonnes sont identifiées par des caractères alphabétiques et les lignes par des chiffres. Certains tableurs contiennent des en-têtes dans les premières lignes pour décrire les données contenues dans une cellule.
Avec ces éléments de base d'un classeur Excel, nous utiliserons un exemple tiré des [modèles Microsoft](https://templates.office.com/) axé sur un inventaire pour explorer d'autres parties d'un tableur.
### Gérer un inventaire
Le fichier de tableur nommé "InventoryExample" est un tableur formaté contenant des articles d'un inventaire et comprenant trois feuilles de calcul, où les onglets sont intitulés "Inventory List", "Inventory Pick List" et "Bin Lookup". La ligne 4 de la feuille Inventory List est l'en-tête, qui décrit la valeur de chaque cellule dans la colonne d'en-tête.
![Une formule mise en surbrillance dans un exemple de liste d'inventaire dans Microsoft Excel](../../../../2-Working-With-Data/06-non-relational/images/formula-excel.png)
Il existe des cas où une cellule dépend des valeurs d'autres cellules pour générer sa propre valeur. Le tableur Inventory List suit le coût de chaque article de l'inventaire, mais que faire si nous avons besoin de connaître la valeur totale de l'inventaire ? Les [**formules**](https://support.microsoft.com/fr-fr/office/overview-of-formulas-34519a4e-1e8d-4f4b-84d4-d642c4f63263) effectuent des actions sur les données des cellules et sont utilisées pour calculer la valeur de l'inventaire dans cet exemple. Ce tableur utilise une formule dans la colonne Inventory Value pour calculer la valeur de chaque article en multipliant la quantité sous l'en-tête QTY et son coût sous l'en-tête COST. En double-cliquant ou en mettant en surbrillance une cellule, vous verrez la formule. Vous remarquerez que les formules commencent par un signe égal, suivi du calcul ou de l'opération.
![Une fonction mise en surbrillance dans un exemple de liste d'inventaire dans Microsoft Excel](../../../../2-Working-With-Data/06-non-relational/images/function-excel.png)
Nous pouvons utiliser une autre formule pour additionner toutes les valeurs de la colonne Inventory Value afin d'obtenir la valeur totale. Cela pourrait être calculé en ajoutant chaque cellule individuellement, mais cela peut être une tâche fastidieuse. Excel propose des [**fonctions**](https://support.microsoft.com/fr-fr/office/sum-function-043e1c7d-7726-4e80-8f32-07b23e057f89), ou des formules prédéfinies pour effectuer des calculs sur les valeurs des cellules. Les fonctions nécessitent des arguments, qui sont les valeurs requises pour effectuer ces calculs. Lorsque les fonctions nécessitent plus d'un argument, ils doivent être listés dans un ordre particulier, sinon la fonction risque de ne pas calculer la valeur correcte. Cet exemple utilise la fonction SUM et utilise les valeurs de la colonne Inventory Value comme argument pour générer le total indiqué sous la ligne 3, colonne B (également appelée B3).
## NoSQL
NoSQL est un terme générique pour les différentes façons de stocker des données non relationnelles et peut être interprété comme "non-SQL", "non-relationnel" ou "pas seulement SQL". Ces types de systèmes de bases de données peuvent être classés en 4 catégories.
![Représentation graphique d'une base de données clé-valeur montrant 4 clés numériques uniques associées à 4 valeurs différentes](../../../../2-Working-With-Data/06-non-relational/images/kv-db.png)
> Source : [Blog de Michał Białecki](https://www.michalbialecki.com/2018/03/18/azure-cosmos-db-key-value-database-cloud/)
Les bases de données [clé-valeur](https://docs.microsoft.com/fr-fr/azure/architecture/data-guide/big-data/non-relational-data#keyvalue-data-stores) associent des clés uniques, qui sont des identifiants uniques, à une valeur. Ces paires sont stockées à l'aide d'une [table de hachage](https://www.hackerearth.com/practice/data-structures/hash-tables/basics-of-hash-tables/tutorial/) avec une fonction de hachage appropriée.
![Représentation graphique d'une base de données graphe montrant les relations entre des personnes, leurs intérêts et leurs localisations](../../../../2-Working-With-Data/06-non-relational/images/graph-db.png)
> Source : [Microsoft](https://docs.microsoft.com/fr-fr/azure/cosmos-db/graph/graph-introduction#graph-database-by-example)
Les bases de données [graphe](https://docs.microsoft.com/fr-fr/azure/architecture/data-guide/big-data/non-relational-data#graph-data-stores) décrivent les relations entre les données et sont représentées comme une collection de nœuds et d'arêtes. Un nœud représente une entité, quelque chose qui existe dans le monde réel, comme un étudiant ou un relevé bancaire. Les arêtes représentent la relation entre deux entités. Chaque nœud et chaque arête ont des propriétés qui fournissent des informations supplémentaires sur chacun d'eux.
![Représentation graphique d'une base de données colonnaire montrant une base de données client avec deux familles de colonnes nommées Identité et Infos de contact](../../../../2-Working-With-Data/06-non-relational/images/columnar-db.png)
Les bases de données [colonnes](https://docs.microsoft.com/fr-fr/azure/architecture/data-guide/big-data/non-relational-data#columnar-data-stores) organisent les données en colonnes et lignes comme une structure relationnelle, mais chaque colonne est divisée en groupes appelés familles de colonnes, où toutes les données sous une colonne sont liées et peuvent être récupérées ou modifiées en une seule unité.
### Bases de données documentaires avec Azure Cosmos DB
Les bases de données [documentaires](https://docs.microsoft.com/fr-fr/azure/architecture/data-guide/big-data/non-relational-data#document-data-stores) s'appuient sur le concept de base de données clé-valeur et sont constituées d'une série de champs et d'objets. Cette section explorera les bases de données documentaires avec l'émulateur Cosmos DB.
Une base de données Cosmos DB correspond à la définition de "Pas seulement SQL", où la base de données documentaire de Cosmos DB utilise SQL pour interroger les données. La [leçon précédente](../05-relational-databases/README.md) sur SQL couvre les bases du langage, et nous pourrons appliquer certaines des mêmes requêtes à une base de données documentaire ici. Nous utiliserons l'émulateur Cosmos DB, qui nous permet de créer et d'explorer une base de données documentaire localement sur un ordinateur. En savoir plus sur l'émulateur [ici](https://docs.microsoft.com/fr-fr/azure/cosmos-db/local-emulator?tabs=ssl-netstd21).
Un document est une collection de champs et de valeurs d'objets, où les champs décrivent ce que représente la valeur de l'objet. Voici un exemple de document.
```json
{
"firstname": "Eva",
"age": 44,
"id": "8c74a315-aebf-4a16-bb38-2430a9896ce5",
"_rid": "bHwDAPQz8s0BAAAAAAAAAA==",
"_self": "dbs/bHwDAA==/colls/bHwDAPQz8s0=/docs/bHwDAPQz8s0BAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-9f95-010a691e01d7\"",
"_attachments": "attachments/",
"_ts": 1630544034
}
```
Les champs d'intérêt dans ce document sont : `firstname`, `id` et `age`. Les autres champs avec des traits de soulignement ont été générés par Cosmos DB.
#### Explorer les données avec l'émulateur Cosmos DB
Vous pouvez télécharger et installer l'émulateur [pour Windows ici](https://aka.ms/cosmosdb-emulator). Consultez cette [documentation](https://docs.microsoft.com/fr-fr/azure/cosmos-db/local-emulator?tabs=ssl-netstd21#run-on-linux-macos) pour les options permettant d'exécuter l'émulateur sur macOS et Linux.
L'émulateur lance une fenêtre de navigateur, où la vue Explorer vous permet d'explorer les documents.
![La vue Explorer de l'émulateur Cosmos DB](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-explorer.png)
Si vous suivez, cliquez sur "Start with Sample" pour générer une base de données exemple appelée SampleDB. Si vous développez SampleDB en cliquant sur la flèche, vous trouverez un conteneur appelé `Persons`. Un conteneur contient une collection d'éléments, qui sont les documents à l'intérieur du conteneur. Vous pouvez explorer les quatre documents individuels sous `Items`.
![Explorer les données d'exemple dans l'émulateur Cosmos DB](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons.png)
#### Interroger les données documentaires avec l'émulateur Cosmos DB
Nous pouvons également interroger les données d'exemple en cliquant sur le bouton "New SQL Query" (deuxième bouton à partir de la gauche).
`SELECT * FROM c` retourne tous les documents dans le conteneur. Ajoutons une clause WHERE pour trouver toutes les personnes de moins de 40 ans.
`SELECT * FROM c where c.age < 40`
![Exécuter une requête SELECT sur les données d'exemple dans l'émulateur Cosmos DB pour trouver les documents ayant une valeur de champ age inférieure à 40](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons-query.png)
La requête retourne deux documents, remarquez que la valeur du champ age pour chaque document est inférieure à 40.
#### JSON et documents
Si vous êtes familier avec le JavaScript Object Notation (JSON), vous remarquerez que les documents ressemblent à du JSON. Il existe un fichier `PersonsData.json` dans ce répertoire contenant plus de données que vous pouvez télécharger dans le conteneur Persons de l'émulateur via le bouton `Upload Item`.
Dans la plupart des cas, les API qui retournent des données JSON peuvent être directement transférées et stockées dans des bases de données documentaires. Voici un autre document, il représente des tweets du compte Twitter de Microsoft qui ont été récupérés à l'aide de l'API Twitter, puis insérés dans Cosmos DB.
```json
{
"created_at": "2021-08-31T19:03:01.000Z",
"id": "1432780985872142341",
"text": "Blank slate. Like this tweet if youve ever painted in Microsoft Paint before. https://t.co/cFeEs8eOPK",
"_rid": "dhAmAIUsA4oHAAAAAAAAAA==",
"_self": "dbs/dhAmAA==/colls/dhAmAIUsA4o=/docs/dhAmAIUsA4oHAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-9f84-a0958ad901d7\"",
"_attachments": "attachments/",
"_ts": 1630537000
```
Les champs d'intérêt dans ce document sont : `created_at`, `id` et `text`.
## 🚀 Défi
Il existe un fichier `TwitterData.json` que vous pouvez télécharger dans la base de données SampleDB. Il est recommandé de l'ajouter à un conteneur séparé. Cela peut être fait en :
1. Cliquant sur le bouton "New Container" en haut à droite
1. Sélectionnant la base de données existante (SampleDB) et en créant un identifiant de conteneur pour le conteneur
1. Définissant la clé de partition sur `/id`
1. Cliquant sur OK (vous pouvez ignorer le reste des informations dans cette vue car il s'agit d'un petit ensemble de données exécuté localement sur votre machine)
1. Ouvrant votre nouveau conteneur et téléchargeant le fichier Twitter Data avec le bouton `Upload Item`
Essayez d'exécuter quelques requêtes SELECT pour trouver les documents contenant "Microsoft" dans le champ text. Astuce : essayez d'utiliser le [mot-clé LIKE](https://docs.microsoft.com/fr-fr/azure/cosmos-db/sql/sql-query-keywords#using-like-with-the--wildcard-character).
## [Quiz après le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/11)
## Révision et auto-apprentissage
- Il existe des fonctionnalités et des formats supplémentaires ajoutés à ce tableur que cette leçon ne couvre pas. Microsoft propose une [grande bibliothèque de documentation et de vidéos](https://support.microsoft.com/excel) sur Excel si vous souhaitez en apprendre davantage.
- Cette documentation architecturale détaille les caractéristiques des différents types de données non relationnelles : [Données non relationnelles et NoSQL](https://docs.microsoft.com/fr-fr/azure/architecture/data-guide/big-data/non-relational-data).
- Cosmos DB est une base de données non relationnelle basée sur le cloud qui peut également stocker les différents types de NoSQL mentionnés dans cette leçon. Découvrez-en plus sur ces types dans ce [module Microsoft Learn sur Cosmos DB](https://docs.microsoft.com/fr-fr/learn/paths/work-with-nosql-data-in-azure-cosmos-db/).
## Devoir
[Soda Profits](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,31 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "f824bfdb8b12d33293913f76f5c787c5",
"translation_date": "2025-08-24T12:19:11+00:00",
"source_file": "2-Working-With-Data/06-non-relational/assignment.md",
"language_code": "fr"
}
-->
# Bénéfices de Soda
## Instructions
La [feuille de calcul Coca Cola Co](../../../../2-Working-With-Data/06-non-relational/CocaColaCo.xlsx) manque de certains calculs. Votre tâche est de :
1. Calculer les bénéfices bruts des exercices '15, '16, '17 et '18
- Bénéfice brut = Revenus d'exploitation nets - Coût des marchandises vendues
1. Calculer la moyenne de tous les bénéfices bruts. Essayez de le faire avec une fonction.
- Moyenne = Somme des bénéfices bruts divisée par le nombre d'exercices fiscaux (10)
- Documentation sur la [fonction MOYENNE](https://support.microsoft.com/en-us/office/average-function-047bac88-d466-426c-a32b-8f33eb960cf6)
1. Ce fichier est un fichier Excel, mais il devrait être modifiable sur n'importe quelle plateforme de tableur.
[Crédit de la source des données à Yiyi Wang](https://www.kaggle.com/yiyiwang0826/cocacola-excel)
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | --- |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,287 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "116c5d361fbe812e59a73f37ce721d36",
"translation_date": "2025-08-24T12:11:28+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "fr"
}
-->
# Travailler avec les données : Python et la bibliothèque Pandas
| ![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| Travailler avec Python - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
[![Vidéo d'introduction](../../../../2-Working-With-Data/07-python/images/video-ds-python.png)](https://youtu.be/dZjWOGbsN4Y)
Bien que les bases de données offrent des moyens très efficaces de stocker des données et de les interroger à l'aide de langages de requête, la manière la plus flexible de traiter les données est d'écrire votre propre programme pour les manipuler. Dans de nombreux cas, effectuer une requête de base de données serait une méthode plus efficace. Cependant, dans certains cas où un traitement de données plus complexe est nécessaire, cela ne peut pas être facilement réalisé avec SQL.
Le traitement des données peut être programmé dans n'importe quel langage de programmation, mais certains langages sont plus adaptés au travail avec les données. Les data scientists préfèrent généralement l'un des langages suivants :
* **[Python](https://www.python.org/)**, un langage de programmation généraliste, souvent considéré comme l'une des meilleures options pour les débutants en raison de sa simplicité. Python dispose de nombreuses bibliothèques supplémentaires qui peuvent vous aider à résoudre de nombreux problèmes pratiques, comme extraire vos données d'une archive ZIP ou convertir une image en niveaux de gris. En plus de la science des données, Python est également souvent utilisé pour le développement web.
* **[R](https://www.r-project.org/)** est un outil traditionnel développé pour le traitement statistique des données. Il contient également un vaste dépôt de bibliothèques (CRAN), ce qui en fait un bon choix pour le traitement des données. Cependant, R n'est pas un langage de programmation généraliste et est rarement utilisé en dehors du domaine de la science des données.
* **[Julia](https://julialang.org/)** est un autre langage développé spécifiquement pour la science des données. Il est conçu pour offrir de meilleures performances que Python, ce qui en fait un excellent outil pour les expérimentations scientifiques.
Dans cette leçon, nous nous concentrerons sur l'utilisation de Python pour un traitement simple des données. Nous supposerons une familiarité de base avec le langage. Si vous souhaitez une introduction plus approfondie à Python, vous pouvez consulter l'une des ressources suivantes :
* [Apprenez Python de manière ludique avec Turtle Graphics et Fractals](https://github.com/shwars/pycourse) - Un cours d'introduction rapide à la programmation Python sur GitHub
* [Faites vos premiers pas avec Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) - Parcours d'apprentissage sur [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Les données peuvent se présenter sous de nombreuses formes. Dans cette leçon, nous examinerons trois formes de données : **données tabulaires**, **texte** et **images**.
Nous nous concentrerons sur quelques exemples de traitement de données, plutôt que de vous donner un aperçu complet de toutes les bibliothèques associées. Cela vous permettra de comprendre les principales possibilités et de savoir où trouver des solutions à vos problèmes lorsque vous en aurez besoin.
> **Conseil le plus utile**. Lorsque vous devez effectuer une opération sur des données que vous ne savez pas comment réaliser, essayez de chercher sur Internet. [Stackoverflow](https://stackoverflow.com/) contient souvent de nombreux exemples de code utiles en Python pour de nombreuses tâches courantes.
## [Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/12)
## Données tabulaires et Dataframes
Vous avez déjà rencontré des données tabulaires lorsque nous avons parlé des bases de données relationnelles. Lorsque vous avez beaucoup de données contenues dans plusieurs tables liées, il est logique d'utiliser SQL pour travailler avec elles. Cependant, il existe de nombreux cas où nous avons une table de données et où nous devons obtenir une **compréhension** ou des **insights** sur ces données, comme la distribution, la corrélation entre les valeurs, etc. En science des données, il y a de nombreux cas où nous devons effectuer des transformations des données originales, suivies de visualisations. Ces deux étapes peuvent être facilement réalisées avec Python.
Il existe deux bibliothèques très utiles en Python qui peuvent vous aider à travailler avec des données tabulaires :
* **[Pandas](https://pandas.pydata.org/)** vous permet de manipuler ce qu'on appelle des **Dataframes**, qui sont analogues aux tables relationnelles. Vous pouvez avoir des colonnes nommées et effectuer différentes opérations sur les lignes, les colonnes et les dataframes en général.
* **[Numpy](https://numpy.org/)** est une bibliothèque pour travailler avec des **tensors**, c'est-à-dire des **tableaux** multidimensionnels. Les tableaux contiennent des valeurs du même type sous-jacent et sont plus simples que les dataframes, mais ils offrent davantage d'opérations mathématiques et créent moins de surcharge.
Il existe également quelques autres bibliothèques que vous devriez connaître :
* **[Matplotlib](https://matplotlib.org/)** est une bibliothèque utilisée pour la visualisation des données et la création de graphiques
* **[SciPy](https://www.scipy.org/)** est une bibliothèque contenant des fonctions scientifiques supplémentaires. Nous avons déjà rencontré cette bibliothèque en parlant de probabilité et de statistiques
Voici un morceau de code que vous utiliseriez typiquement pour importer ces bibliothèques au début de votre programme Python :
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
```
Pandas repose sur quelques concepts de base.
### Series
**Series** est une séquence de valeurs, similaire à une liste ou un tableau numpy. La principale différence est que les séries ont également un **index**, et lorsque nous opérons sur des séries (par exemple, les additionner), l'index est pris en compte. L'index peut être aussi simple qu'un numéro de ligne entier (c'est l'index utilisé par défaut lors de la création d'une série à partir d'une liste ou d'un tableau), ou il peut avoir une structure complexe, comme un intervalle de dates.
> **Note** : Il y a du code introductif sur Pandas dans le notebook associé [`notebook.ipynb`](../../../../2-Working-With-Data/07-python/notebook.ipynb). Nous ne présentons ici que quelques exemples, et vous êtes bien sûr invité à consulter le notebook complet.
Prenons un exemple : nous voulons analyser les ventes de notre stand de glaces. Générons une série de chiffres de ventes (nombre d'articles vendus chaque jour) pour une certaine période :
```python
start_date = "Jan 1, 2020"
end_date = "Mar 31, 2020"
idx = pd.date_range(start_date,end_date)
print(f"Length of index is {len(idx)}")
items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx)
items_sold.plot()
```
![Graphique de séries temporelles](../../../../2-Working-With-Data/07-python/images/timeseries-1.png)
Supposons maintenant que chaque semaine nous organisons une fête pour nos amis et que nous prenons 10 packs de glace supplémentaires pour la fête. Nous pouvons créer une autre série, indexée par semaine, pour le démontrer :
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
Lorsque nous additionnons deux séries, nous obtenons le nombre total :
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```
![Graphique de séries temporelles](../../../../2-Working-With-Data/07-python/images/timeseries-2.png)
> **Note** que nous n'utilisons pas la syntaxe simple `total_items+additional_items`. Si nous l'avions fait, nous aurions obtenu de nombreux `NaN` (*Not a Number*) dans la série résultante. Cela est dû au fait qu'il manque des valeurs pour certains points d'index dans la série `additional_items`, et additionner `NaN` à quoi que ce soit donne `NaN`. Ainsi, nous devons spécifier le paramètre `fill_value` lors de l'addition.
Avec les séries temporelles, nous pouvons également **reéchantillonner** la série avec différents intervalles de temps. Par exemple, supposons que nous voulons calculer le volume moyen des ventes mensuelles. Nous pouvons utiliser le code suivant :
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![Moyennes mensuelles des séries temporelles](../../../../2-Working-With-Data/07-python/images/timeseries-3.png)
### DataFrame
Un DataFrame est essentiellement une collection de séries avec le même index. Nous pouvons combiner plusieurs séries ensemble dans un DataFrame :
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])
```
Cela créera une table horizontale comme celle-ci :
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| --- | --- | ---- | --- | --- | ------ | --- | ------ | ---- | ---- |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | I | like | to | use | Python | and | Pandas | very | much |
Nous pouvons également utiliser des séries comme colonnes et spécifier les noms de colonnes à l'aide d'un dictionnaire :
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
Cela nous donnera une table comme celle-ci :
| | A | B |
| --- | --- | ------ |
| 0 | 1 | I |
| 1 | 2 | like |
| 2 | 3 | to |
| 3 | 4 | use |
| 4 | 5 | Python |
| 5 | 6 | and |
| 6 | 7 | Pandas |
| 7 | 8 | very |
| 8 | 9 | much |
**Note** que nous pouvons également obtenir cette disposition de table en transposant la table précédente, par exemple en écrivant :
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
```
Ici `.T` signifie l'opération de transposition du DataFrame, c'est-à-dire changer les lignes et les colonnes, et l'opération `rename` nous permet de renommer les colonnes pour correspondre à l'exemple précédent.
Voici quelques-unes des opérations les plus importantes que nous pouvons effectuer sur les DataFrames :
**Sélection de colonnes**. Nous pouvons sélectionner des colonnes individuelles en écrivant `df['A']` - cette opération retourne une série. Nous pouvons également sélectionner un sous-ensemble de colonnes dans un autre DataFrame en écrivant `df[['B','A']]` - cela retourne un autre DataFrame.
**Filtrage** de certaines lignes selon des critères. Par exemple, pour ne conserver que les lignes où la colonne `A` est supérieure à 5, nous pouvons écrire `df[df['A']>5]`.
> **Note** : La manière dont le filtrage fonctionne est la suivante. L'expression `df['A']<5` retourne une série booléenne, qui indique si l'expression est `True` ou `False` pour chaque élément de la série originale `df['A']`. Lorsque la série booléenne est utilisée comme index, elle retourne un sous-ensemble de lignes dans le DataFrame. Ainsi, il n'est pas possible d'utiliser une expression booléenne Python arbitraire, par exemple, écrire `df[df['A']>5 and df['A']<7]` serait incorrect. À la place, vous devez utiliser l'opération spéciale `&` sur les séries booléennes, en écrivant `df[(df['A']>5) & (df['A']<7)]` (*les parenthèses sont importantes ici*).
**Créer de nouvelles colonnes calculables**. Nous pouvons facilement créer de nouvelles colonnes calculables pour notre DataFrame en utilisant une expression intuitive comme celle-ci :
```python
df['DivA'] = df['A']-df['A'].mean()
```
Cet exemple calcule la divergence de A par rapport à sa valeur moyenne. Ce qui se passe réellement ici, c'est que nous calculons une série, puis nous assignons cette série au côté gauche, créant une autre colonne. Ainsi, nous ne pouvons pas utiliser d'opérations incompatibles avec les séries, par exemple, le code ci-dessous est incorrect :
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
```
Cet exemple, bien que syntaxiquement correct, donne un résultat incorrect, car il assigne la longueur de la série `B` à toutes les valeurs de la colonne, et non la longueur des éléments individuels comme nous l'avions prévu.
Si nous devons calculer des expressions complexes comme celle-ci, nous pouvons utiliser la fonction `apply`. Le dernier exemple peut être écrit comme suit :
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
df['LenB'] = df['B'].apply(len)
```
Après les opérations ci-dessus, nous obtiendrons le DataFrame suivant :
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
| 0 | 1 | I | -4.0 | 1 |
| 1 | 2 | like | -3.0 | 4 |
| 2 | 3 | to | -2.0 | 2 |
| 3 | 4 | use | -1.0 | 3 |
| 4 | 5 | Python | 0.0 | 6 |
| 5 | 6 | and | 1.0 | 3 |
| 6 | 7 | Pandas | 2.0 | 6 |
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**Sélectionner des lignes en fonction de leur numéro** peut être fait en utilisant la construction `iloc`. Par exemple, pour sélectionner les 5 premières lignes du DataFrame :
```python
df.iloc[:5]
```
**Regroupement** est souvent utilisé pour obtenir un résultat similaire aux *tableaux croisés dynamiques* dans Excel. Supposons que nous voulons calculer la valeur moyenne de la colonne `A` pour chaque nombre donné de `LenB`. Nous pouvons alors regrouper notre DataFrame par `LenB` et appeler `mean` :
```python
df.groupby(by='LenB').mean()
```
Si nous devons calculer la moyenne et le nombre d'éléments dans le groupe, nous pouvons utiliser une fonction `aggregate` plus complexe :
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
```
Cela nous donne la table suivante :
| LenB | Count | Mean |
| ---- | ----- | -------- |
| 1 | 1 | 1.000000 |
| 2 | 1 | 3.000000 |
| 3 | 2 | 5.000000 |
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### Obtenir des données
Nous avons vu à quel point il est facile de construire des Series et des DataFrames à partir d'objets Python. Cependant, les données se présentent généralement sous forme de fichier texte ou de tableau Excel. Heureusement, Pandas nous offre un moyen simple de charger des données depuis le disque. Par exemple, lire un fichier CSV est aussi simple que cela :
```python
df = pd.read_csv('file.csv')
```
Nous verrons plus d'exemples de chargement de données, y compris leur récupération depuis des sites web externes, dans la section "Challenge".
### Impression et Visualisation
Un Data Scientist doit souvent explorer les données, il est donc important de pouvoir les visualiser. Lorsque le DataFrame est volumineux, il est souvent utile de vérifier que tout fonctionne correctement en affichant les premières lignes. Cela peut être fait en appelant `df.head()`. Si vous exécutez cela depuis Jupyter Notebook, le DataFrame sera affiché sous une forme tabulaire agréable.
Nous avons également vu l'utilisation de la fonction `plot` pour visualiser certaines colonnes. Bien que `plot` soit très utile pour de nombreuses tâches et prenne en charge différents types de graphiques via le paramètre `kind=`, vous pouvez toujours utiliser la bibliothèque `matplotlib` brute pour tracer quelque chose de plus complexe. Nous couvrirons la visualisation des données en détail dans des leçons de cours séparées.
Cette vue d'ensemble couvre les concepts les plus importants de Pandas, mais la bibliothèque est très riche, et il n'y a pas de limite à ce que vous pouvez faire avec elle ! Appliquons maintenant ces connaissances pour résoudre un problème spécifique.
## 🚀 Challenge 1 : Analyser la propagation du COVID
Le premier problème sur lequel nous allons nous concentrer est la modélisation de la propagation de l'épidémie de COVID-19. Pour ce faire, nous utiliserons les données sur le nombre de personnes infectées dans différents pays, fournies par le [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) de [l'Université Johns Hopkins](https://jhu.edu/). Le jeu de données est disponible dans [ce dépôt GitHub](https://github.com/CSSEGISandData/COVID-19).
Puisque nous voulons démontrer comment traiter les données, nous vous invitons à ouvrir [`notebook-covidspread.ipynb`](../../../../2-Working-With-Data/07-python/notebook-covidspread.ipynb) et à le lire de haut en bas. Vous pouvez également exécuter les cellules et relever certains défis que nous avons laissés pour vous à la fin.
![Propagation du COVID](../../../../2-Working-With-Data/07-python/images/covidspread.png)
> Si vous ne savez pas comment exécuter du code dans Jupyter Notebook, consultez [cet article](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Travailler avec des données non structurées
Bien que les données soient très souvent sous forme tabulaire, dans certains cas, nous devons traiter des données moins structurées, comme du texte ou des images. Dans ce cas, pour appliquer les techniques de traitement des données que nous avons vues précédemment, nous devons **extraire** des données structurées. Voici quelques exemples :
* Extraire des mots-clés d'un texte et voir à quelle fréquence ces mots-clés apparaissent
* Utiliser des réseaux neuronaux pour extraire des informations sur les objets dans une image
* Obtenir des informations sur les émotions des personnes à partir d'un flux vidéo
## 🚀 Challenge 2 : Analyser les articles sur le COVID
Dans ce défi, nous continuerons avec le sujet de la pandémie de COVID et nous concentrerons sur le traitement des articles scientifiques sur le sujet. Il existe [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) avec plus de 7000 articles (au moment de la rédaction) sur le COVID, disponibles avec des métadonnées et des résumés (et pour environ la moitié d'entre eux, le texte complet est également fourni).
Un exemple complet d'analyse de ce jeu de données en utilisant le service cognitif [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) est décrit [dans cet article de blog](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Nous discuterons d'une version simplifiée de cette analyse.
> **NOTE** : Nous ne fournissons pas une copie du jeu de données dans ce dépôt. Vous devrez peut-être d'abord télécharger le fichier [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) depuis [ce jeu de données sur Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Une inscription sur Kaggle peut être requise. Vous pouvez également télécharger le jeu de données sans inscription [ici](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), mais cela inclura tous les textes complets en plus du fichier de métadonnées.
Ouvrez [`notebook-papers.ipynb`](../../../../2-Working-With-Data/07-python/notebook-papers.ipynb) et lisez-le de haut en bas. Vous pouvez également exécuter les cellules et relever certains défis que nous avons laissés pour vous à la fin.
![Traitement médical du COVID](../../../../2-Working-With-Data/07-python/images/covidtreat.png)
## Traitement des données d'image
Récemment, des modèles d'IA très puissants ont été développés pour comprendre les images. De nombreuses tâches peuvent être résolues en utilisant des réseaux neuronaux pré-entraînés ou des services cloud. Voici quelques exemples :
* **Classification d'images**, qui peut vous aider à catégoriser une image dans l'une des classes prédéfinies. Vous pouvez facilement entraîner vos propres classificateurs d'images en utilisant des services comme [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Détection d'objets** pour détecter différents objets dans une image. Des services comme [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) peuvent détecter un certain nombre d'objets courants, et vous pouvez entraîner un modèle [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) pour détecter des objets spécifiques d'intérêt.
* **Détection de visages**, y compris l'âge, le genre et les émotions. Cela peut être fait via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Tous ces services cloud peuvent être appelés en utilisant [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), et peuvent donc être facilement intégrés dans votre flux de travail d'exploration de données.
Voici quelques exemples d'exploration de données à partir de sources d'images :
* Dans l'article de blog [Comment apprendre la science des données sans coder](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/), nous explorons des photos Instagram, en essayant de comprendre ce qui pousse les gens à donner plus de "likes" à une photo. Nous extrayons d'abord autant d'informations que possible des images en utilisant [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), puis nous utilisons [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) pour construire un modèle interprétable.
* Dans [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies), nous utilisons [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) pour extraire les émotions des personnes sur des photographies d'événements, afin de tenter de comprendre ce qui rend les gens heureux.
## Conclusion
Que vous disposiez déjà de données structurées ou non structurées, avec Python, vous pouvez effectuer toutes les étapes liées au traitement et à la compréhension des données. C'est probablement le moyen le plus flexible de traiter les données, et c'est la raison pour laquelle la majorité des data scientists utilisent Python comme principal outil. Apprendre Python en profondeur est probablement une bonne idée si vous êtes sérieux dans votre parcours en science des données !
## [Quiz post-lecture](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/13)
## Révision et Auto-étude
**Livres**
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Ressources en ligne**
* Tutoriel officiel [10 minutes pour Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Documentation sur la visualisation avec Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Apprendre Python**
* [Apprenez Python de manière ludique avec Turtle Graphics et Fractals](https://github.com/shwars/pycourse)
* [Faites vos premiers pas avec Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) sur [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Devoir
[Effectuez une étude de données plus détaillée pour les défis ci-dessus](assignment.md)
## Crédits
Cette leçon a été rédigée avec ♥️ par [Dmitry Soshnikov](http://soshnikov.com)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,35 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "dc8f035ce92e4eaa078ab19caa68267a",
"translation_date": "2025-08-24T12:15:00+00:00",
"source_file": "2-Working-With-Data/07-python/assignment.md",
"language_code": "fr"
}
-->
# Devoir sur le traitement des données en Python
Dans ce devoir, nous vous demandons d'approfondir le code que nous avons commencé à développer dans nos défis. Le devoir se compose de deux parties :
## Modélisation de la propagation du COVID-19
- [ ] Tracez des graphiques *R* pour 5-6 pays différents sur un seul graphique pour comparaison, ou en utilisant plusieurs graphiques côte à côte.
- [ ] Analysez comment le nombre de décès et de guérisons est corrélé au nombre de cas infectés.
- [ ] Déterminez combien de temps dure typiquement une maladie en corrélant visuellement le taux d'infection et le taux de décès, et en recherchant des anomalies. Vous devrez peut-être examiner différents pays pour le découvrir.
- [ ] Calculez le taux de mortalité et comment il évolue au fil du temps. *Vous pourriez vouloir prendre en compte la durée de la maladie en jours pour décaler une série temporelle avant de faire les calculs.*
## Analyse des articles sur le COVID-19
- [ ] Construisez une matrice de co-occurrence des différents médicaments, et identifiez quels médicaments sont souvent mentionnés ensemble (c'est-à-dire dans un même résumé). Vous pouvez modifier le code pour construire une matrice de co-occurrence pour les médicaments et les diagnostics.
- [ ] Visualisez cette matrice à l'aide d'une carte thermique.
- [ ] En guise de défi supplémentaire, visualisez la co-occurrence des médicaments en utilisant un [diagramme en cordes](https://en.wikipedia.org/wiki/Chord_diagram). [Cette bibliothèque](https://pypi.org/project/chord/) pourrait vous aider à dessiner un diagramme en cordes.
- [ ] En guise d'autre défi supplémentaire, extrayez les dosages des différents médicaments (comme **400mg** dans *prendre 400mg de chloroquine quotidiennement*) en utilisant des expressions régulières, et construisez un dataframe qui montre les différents dosages pour différents médicaments. **Note** : prenez en compte les valeurs numériques qui se trouvent à proximité textuelle du nom du médicament.
## Barème
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Toutes les tâches sont complètes, illustrées graphiquement et expliquées, incluant au moins un des deux défis supplémentaires | Plus de 5 tâches sont complètes, aucun défi supplémentaire n'est tenté, ou les résultats ne sont pas clairs | Moins de 5 (mais plus de 3) tâches sont complètes, les visualisations n'aident pas à démontrer le point
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,340 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "3ade580a06b5f04d57cc83a768a8fb77",
"translation_date": "2025-08-24T12:05:44+00:00",
"source_file": "2-Working-With-Data/08-data-preparation/README.md",
"language_code": "fr"
}
-->
# Travailler avec les données : Préparation des données
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/08-DataPreparation.png)|
|:---:|
|Préparation des données - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/14)
Selon sa source, les données brutes peuvent contenir des incohérences qui posent des défis pour l'analyse et la modélisation. En d'autres termes, ces données peuvent être qualifiées de "sales" et nécessiter un nettoyage. Cette leçon se concentre sur les techniques de nettoyage et de transformation des données pour gérer les problèmes de données manquantes, inexactes ou incomplètes. Les sujets abordés dans cette leçon utiliseront Python et la bibliothèque Pandas et seront [illustrés dans le notebook](../../../../2-Working-With-Data/08-data-preparation/notebook.ipynb) de ce répertoire.
## L'importance de nettoyer les données
- **Facilité d'utilisation et de réutilisation** : Lorsque les données sont correctement organisées et normalisées, il est plus facile de les rechercher, les utiliser et les partager avec d'autres.
- **Cohérence** : La science des données nécessite souvent de travailler avec plusieurs ensembles de données, où des ensembles provenant de différentes sources doivent être fusionnés. Assurer une standardisation commune pour chaque ensemble de données garantit leur utilité une fois combinés.
- **Précision des modèles** : Des données nettoyées améliorent la précision des modèles qui en dépendent.
## Objectifs et stratégies courants de nettoyage
- **Explorer un ensemble de données** : L'exploration des données, qui sera abordée dans une [leçon ultérieure](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/4-Data-Science-Lifecycle/15-analyzing), peut vous aider à identifier les données nécessitant un nettoyage. Observer visuellement les valeurs d'un ensemble de données peut donner une idée des problèmes à résoudre. L'exploration peut inclure des requêtes simples, des visualisations et des échantillonnages.
- **Formatage** : Selon la source, les données peuvent présenter des incohérences dans leur présentation. Cela peut poser des problèmes pour la recherche et la représentation des valeurs, où elles sont visibles dans l'ensemble de données mais mal représentées dans les visualisations ou les résultats de requêtes. Les problèmes courants de formatage incluent les espaces blancs, les dates et les types de données. La résolution de ces problèmes dépend souvent des utilisateurs des données. Par exemple, les normes sur la présentation des dates et des nombres peuvent varier selon les pays.
- **Doublons** : Les données ayant plusieurs occurrences peuvent produire des résultats inexacts et doivent généralement être supprimées. Cela peut se produire fréquemment lors de la fusion de plusieurs ensembles de données. Cependant, dans certains cas, les doublons peuvent contenir des informations supplémentaires et nécessiter d'être conservés.
- **Données manquantes** : Les données manquantes peuvent entraîner des résultats biaisés ou faibles. Ces problèmes peuvent parfois être résolus en rechargeant les données, en remplissant les valeurs manquantes par calcul ou code (comme Python), ou simplement en supprimant les valeurs et les données associées. Les raisons des données manquantes et les actions pour les résoudre dépendent souvent de leur origine.
## Explorer les informations d'un DataFrame
> **Objectif d'apprentissage** : À la fin de cette sous-section, vous devriez être à l'aise pour trouver des informations générales sur les données stockées dans les DataFrames de pandas.
Une fois vos données chargées dans pandas, elles seront probablement dans un DataFrame (voir la [leçon précédente](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python#dataframe) pour un aperçu détaillé). Cependant, si votre DataFrame contient 60 000 lignes et 400 colonnes, comment commencer à comprendre ce que vous avez ? Heureusement, [pandas](https://pandas.pydata.org/) offre des outils pratiques pour examiner rapidement les informations générales sur un DataFrame, ainsi que les premières et dernières lignes.
Pour explorer cette fonctionnalité, nous importerons la bibliothèque Python scikit-learn et utiliserons un ensemble de données emblématique : l'ensemble de données **Iris**.
```python
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
```
| |longueur du sépale (cm)|largeur du sépale (cm)|longueur du pétale (cm)|largeur du pétale (cm)|
|----------------------------------------|------------------------|----------------------|-----------------------|----------------------|
|0 |5.1 |3.5 |1.4 |0.2 |
|1 |4.9 |3.0 |1.4 |0.2 |
|2 |4.7 |3.2 |1.3 |0.2 |
|3 |4.6 |3.1 |1.5 |0.2 |
|4 |5.0 |3.6 |1.4 |0.2 |
- **DataFrame.info** : Pour commencer, la méthode `info()` est utilisée pour afficher un résumé du contenu présent dans un `DataFrame`. Jetons un coup d'œil à cet ensemble de données pour voir ce que nous avons :
```python
iris_df.info()
```
```
RangeIndex: 150 entries, 0 to 149
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sepal length (cm) 150 non-null float64
1 sepal width (cm) 150 non-null float64
2 petal length (cm) 150 non-null float64
3 petal width (cm) 150 non-null float64
dtypes: float64(4)
memory usage: 4.8 KB
```
D'après cela, nous savons que l'ensemble de données *Iris* contient 150 entrées réparties sur quatre colonnes sans valeurs nulles. Toutes les données sont stockées sous forme de nombres à virgule flottante 64 bits.
- **DataFrame.head()** : Ensuite, pour vérifier le contenu réel du `DataFrame`, nous utilisons la méthode `head()`. Voyons à quoi ressemblent les premières lignes de notre `iris_df` :
```python
iris_df.head()
```
```
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
```
- **DataFrame.tail()** : À l'inverse, pour vérifier les dernières lignes du `DataFrame`, nous utilisons la méthode `tail()` :
```python
iris_df.tail()
```
```
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8
```
> **À retenir** : En examinant simplement les métadonnées ou les premières et dernières valeurs d'un DataFrame, vous pouvez rapidement avoir une idée de la taille, de la forme et du contenu des données avec lesquelles vous travaillez.
## Gérer les données manquantes
> **Objectif d'apprentissage** : À la fin de cette sous-section, vous devriez savoir comment remplacer ou supprimer les valeurs nulles des DataFrames.
La plupart du temps, les ensembles de données que vous souhaitez utiliser (ou devez utiliser) contiennent des valeurs manquantes. La manière dont ces données manquantes sont gérées implique des compromis subtils qui peuvent affecter votre analyse finale et les résultats réels.
Pandas gère les valeurs manquantes de deux manières. La première, que vous avez déjà vue dans les sections précédentes, est `NaN`, ou Not a Number. Il s'agit d'une valeur spéciale faisant partie de la spécification IEEE pour les nombres à virgule flottante, utilisée uniquement pour indiquer des valeurs manquantes de type flottant.
Pour les valeurs manquantes autres que les flottants, pandas utilise l'objet Python `None`. Bien que cela puisse sembler déroutant d'avoir deux types de valeurs indiquant la même chose, il existe des raisons programmatiques solides pour ce choix de conception. En pratique, cela permet à pandas de proposer un compromis efficace dans la majorité des cas. Cependant, `None` et `NaN` ont des restrictions qu'il faut garder à l'esprit concernant leur utilisation.
Découvrez-en plus sur `NaN` et `None` dans le [notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb) !
- **Détecter les valeurs nulles** : Dans `pandas`, les méthodes `isnull()` et `notnull()` sont vos principales méthodes pour détecter les données nulles. Les deux renvoient des masques booléens sur vos données. Nous utiliserons `numpy` pour les valeurs `NaN` :
```python
import numpy as np
example1 = pd.Series([0, np.nan, '', None])
example1.isnull()
```
```
0 False
1 True
2 False
3 True
dtype: bool
```
Regardez attentivement la sortie. Y a-t-il quelque chose qui vous surprend ? Bien que `0` soit un nul arithmétique, il reste un entier valide et pandas le traite comme tel. `''` est un peu plus subtil. Bien que nous l'ayons utilisé dans la Section 1 pour représenter une chaîne vide, il reste un objet chaîne et non une représentation de null pour pandas.
Maintenant, utilisons ces méthodes de manière plus pratique. Vous pouvez utiliser des masques booléens directement comme index de `Series` ou `DataFrame`, ce qui est utile pour travailler avec des valeurs manquantes (ou présentes) isolées.
> **À retenir** : Les méthodes `isnull()` et `notnull()` produisent des résultats similaires dans les `DataFrame`s : elles affichent les résultats et l'index de ces résultats, ce qui vous sera très utile pour manipuler vos données.
- **Supprimer les valeurs nulles** : En plus d'identifier les valeurs manquantes, pandas offre un moyen pratique de supprimer les valeurs nulles des `Series` et `DataFrame`s. (Surtout pour les grands ensembles de données, il est souvent préférable de simplement supprimer les valeurs manquantes [NA] de votre analyse plutôt que de les gérer autrement.) Pour voir cela en action, revenons à `example1` :
```python
example1 = example1.dropna()
example1
```
```
0 0
2
dtype: object
```
Notez que cela devrait ressembler à votre sortie de `example3[example3.notnull()]`. La différence ici est que, plutôt que de simplement indexer les valeurs masquées, `dropna` a supprimé ces valeurs manquantes de la `Series` `example1`.
Les `DataFrame`s ayant deux dimensions, elles offrent plus d'options pour supprimer des données.
```python
example2 = pd.DataFrame([[1, np.nan, 7],
[2, 5, 8],
[np.nan, 6, 9]])
example2
```
| | 0 | 1 | 2 |
|------|---|---|---|
|0 |1.0|NaN|7 |
|1 |2.0|5.0|8 |
|2 |NaN|6.0|9 |
(Avez-vous remarqué que pandas a converti deux des colonnes en flottants pour accueillir les `NaN` ?)
Vous ne pouvez pas supprimer une seule valeur d'un `DataFrame`, vous devez donc supprimer des lignes ou des colonnes entières. Selon ce que vous faites, vous pourriez vouloir l'un ou l'autre, et pandas vous offre des options pour les deux. En science des données, les colonnes représentent généralement des variables et les lignes des observations, vous êtes donc plus susceptible de supprimer des lignes de données ; le paramètre par défaut de `dropna()` est de supprimer toutes les lignes contenant des valeurs nulles :
```python
example2.dropna()
```
```
0 1 2
1 2.0 5.0 8
```
Si nécessaire, vous pouvez supprimer les valeurs nulles des colonnes. Utilisez `axis=1` pour le faire :
```python
example2.dropna(axis='columns')
```
```
2
0 7
1 8
2 9
```
Notez que cela peut supprimer beaucoup de données que vous pourriez vouloir conserver, en particulier dans les petits ensembles de données. Que faire si vous souhaitez uniquement supprimer les lignes ou colonnes contenant plusieurs ou toutes les valeurs nulles ? Vous pouvez spécifier ces paramètres dans `dropna` avec les paramètres `how` et `thresh`.
Par défaut, `how='any'` (si vous souhaitez vérifier par vous-même ou voir les autres paramètres de la méthode, exécutez `example4.dropna?` dans une cellule de code). Vous pourriez alternativement spécifier `how='all'` pour ne supprimer que les lignes ou colonnes contenant toutes des valeurs nulles. Étendons notre exemple de `DataFrame` pour voir cela en action.
```python
example2[3] = np.nan
example2
```
| |0 |1 |2 |3 |
|------|---|---|---|---|
|0 |1.0|NaN|7 |NaN|
|1 |2.0|5.0|8 |NaN|
|2 |NaN|6.0|9 |NaN|
Le paramètre `thresh` vous donne un contrôle plus précis : vous définissez le nombre de valeurs *non nulles* qu'une ligne ou colonne doit avoir pour être conservée :
```python
example2.dropna(axis='rows', thresh=3)
```
```
0 1 2 3
1 2.0 5.0 8 NaN
```
Ici, la première et la dernière ligne ont été supprimées, car elles contiennent seulement deux valeurs non nulles.
- **Remplir les valeurs nulles** : Selon votre ensemble de données, il peut parfois être plus logique de remplir les valeurs nulles avec des valeurs valides plutôt que de les supprimer. Vous pourriez utiliser `isnull` pour le faire directement, mais cela peut être laborieux, surtout si vous avez beaucoup de valeurs à remplir. Comme cette tâche est courante en science des données, pandas propose `fillna`, qui renvoie une copie de la `Series` ou du `DataFrame` avec les valeurs manquantes remplacées par celles de votre choix. Créons un autre exemple de `Series` pour voir comment cela fonctionne en pratique.
```python
example3 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
example3
```
```
a 1.0
b NaN
c 2.0
d NaN
e 3.0
dtype: float64
```
Vous pouvez remplir toutes les entrées nulles avec une seule valeur, comme `0` :
```python
example3.fillna(0)
```
```
a 1.0
b 0.0
c 2.0
d 0.0
e 3.0
dtype: float64
```
Vous pouvez **remplir vers l'avant** les valeurs nulles, c'est-à-dire utiliser la dernière valeur valide pour remplir une valeur nulle :
```python
example3.fillna(method='ffill')
```
```
a 1.0
b 1.0
c 2.0
d 2.0
e 3.0
dtype: float64
```
Vous pouvez également **remplir vers l'arrière** pour propager la prochaine valeur valide en arrière afin de remplir une valeur nulle :
```python
example3.fillna(method='bfill')
```
```
a 1.0
b 2.0
c 2.0
d 3.0
e 3.0
dtype: float64
```
Comme vous pouvez le deviner, cela fonctionne de la même manière avec les `DataFrame`s, mais vous pouvez également spécifier un `axis` le long duquel remplir les valeurs nulles. En reprenant l'exemple `example2` utilisé précédemment :
```python
example2.fillna(method='ffill', axis=1)
```
```
0 1 2 3
0 1.0 1.0 7.0 7.0
1 2.0 5.0 8.0 8.0
2 NaN 6.0 9.0 9.0
```
Notez que lorsqu'une valeur précédente n'est pas disponible pour le remplissage vers l'avant, la valeur nulle reste.
> **À retenir :** Il existe plusieurs façons de gérer les valeurs manquantes dans vos ensembles de données. La stratégie spécifique que vous utilisez (les supprimer, les remplacer, ou même la manière dont vous les remplacez) doit être dictée par les particularités de ces données. Vous développerez une meilleure compréhension de la gestion des valeurs manquantes à mesure que vous manipulerez et interagirez avec des ensembles de données.
## Suppression des données dupliquées
> **Objectif d'apprentissage :** À la fin de cette sous-section, vous devriez être à l'aise pour identifier et supprimer les valeurs dupliquées dans les DataFrames.
En plus des données manquantes, vous rencontrerez souvent des données dupliquées dans des ensembles de données réels. Heureusement, `pandas` offre un moyen simple de détecter et de supprimer les entrées dupliquées.
- **Identifier les doublons : `duplicated`** : Vous pouvez facilement repérer les valeurs dupliquées en utilisant la méthode `duplicated` de pandas, qui renvoie un masque booléen indiquant si une entrée dans un `DataFrame` est un doublon d'une entrée précédente. Créons un autre exemple de `DataFrame` pour voir cela en action.
```python
example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],
'numbers': [1, 2, 1, 3, 3]})
example4
```
| |lettres|nombres|
|------|-------|-------|
|0 |A |1 |
|1 |B |2 |
|2 |A |1 |
|3 |B |3 |
|4 |B |3 |
```python
example4.duplicated()
```
```
0 False
1 False
2 True
3 False
4 True
dtype: bool
```
- **Supprimer les doublons : `drop_duplicates`** : retourne simplement une copie des données pour lesquelles toutes les valeurs `duplicated` sont `False` :
```python
example4.drop_duplicates()
```
```
letters numbers
0 A 1
1 B 2
3 B 3
```
Les méthodes `duplicated` et `drop_duplicates` considèrent par défaut toutes les colonnes, mais vous pouvez spécifier qu'elles examinent uniquement un sous-ensemble de colonnes dans votre `DataFrame` :
```python
example4.drop_duplicates(['letters'])
```
```
letters numbers
0 A 1
1 B 2
```
> **À retenir :** Supprimer les données dupliquées est une étape essentielle dans presque tous les projets de science des données. Les données dupliquées peuvent modifier les résultats de vos analyses et vous donner des résultats inexacts !
## 🚀 Défi
Tous les matériaux abordés sont disponibles sous forme de [Jupyter Notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/2-Working-With-Data/08-data-preparation/notebook.ipynb). De plus, des exercices sont présents après chaque section, essayez-les !
## [Quiz après le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/15)
## Révision et auto-apprentissage
Il existe de nombreuses façons de découvrir et d'aborder la préparation de vos données pour l'analyse et la modélisation, et le nettoyage des données est une étape importante qui nécessite une expérience pratique. Essayez ces défis sur Kaggle pour explorer des techniques que cette leçon n'a pas couvertes.
- [Défi de nettoyage des données : Analyse des dates](https://www.kaggle.com/rtatman/data-cleaning-challenge-parsing-dates/)
- [Défi de nettoyage des données : Mise à l'échelle et normalisation des données](https://www.kaggle.com/rtatman/data-cleaning-challenge-scale-and-normalize-data)
## Devoir
[Évaluation des données d'un formulaire](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,26 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "f9d5a7275e046223fa6474477674b810",
"translation_date": "2025-08-24T12:08:22+00:00",
"source_file": "2-Working-With-Data/08-data-preparation/assignment.md",
"language_code": "fr"
}
-->
# Évaluation des données d'un formulaire
Un client a testé un [petit formulaire](../../../../2-Working-With-Data/08-data-preparation/index.html) pour recueillir des données de base sur sa clientèle. Il vous a apporté ses résultats pour valider les données collectées. Vous pouvez ouvrir la page `index.html` dans le navigateur pour examiner le formulaire.
On vous a fourni un [jeu de données de fichiers csv](../../../../data/form.csv) contenant les entrées du formulaire ainsi que quelques visualisations de base. Le client a signalé que certaines visualisations semblent incorrectes, mais il ne sait pas comment les corriger. Vous pouvez explorer cela dans le [notebook de l'exercice](../../../../2-Working-With-Data/08-data-preparation/assignment.ipynb).
## Instructions
Utilisez les techniques de cette leçon pour formuler des recommandations sur le formulaire afin qu'il capture des informations précises et cohérentes.
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | ---
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,29 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "abc3309ab41bc5a7846f70ee1a055838",
"translation_date": "2025-08-24T11:59:04+00:00",
"source_file": "2-Working-With-Data/README.md",
"language_code": "fr"
}
-->
# Travailler avec les données
![amour des données](../../../2-Working-With-Data/images/data-love.jpg)
> Photo par <a href="https://unsplash.com/@swimstaralex?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexander Sinn</a> sur <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
Dans ces leçons, vous apprendrez certaines des façons dont les données peuvent être gérées, manipulées et utilisées dans les applications. Vous découvrirez les bases des bases de données relationnelles et non relationnelles, ainsi que la manière dont les données peuvent y être stockées. Vous apprendrez les fondamentaux de la gestion des données avec Python et explorerez plusieurs méthodes pour utiliser Python afin de gérer et d'exploiter les données.
### Sujets
1. [Bases de données relationnelles](05-relational-databases/README.md)
2. [Bases de données non relationnelles](06-non-relational/README.md)
3. [Travailler avec Python](07-python/README.md)
4. [Préparer les données](08-data-preparation/README.md)
### Crédits
Ces leçons ont été écrites avec ❤️ par [Christopher Harrison](https://twitter.com/geektrainer), [Dmitry Soshnikov](https://twitter.com/shwars) et [Jasmine Greenaway](https://twitter.com/paladique)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,215 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "43c402d9d90ae6da55d004519ada5033",
"translation_date": "2025-08-24T14:05:28+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/README.md",
"language_code": "fr"
}
-->
# Visualiser des quantités
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| Visualiser des quantités - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Dans cette leçon, vous allez explorer comment utiliser l'une des nombreuses bibliothèques Python disponibles pour apprendre à créer des visualisations intéressantes autour du concept de quantité. En utilisant un ensemble de données nettoyé sur les oiseaux du Minnesota, vous pouvez découvrir de nombreux faits intéressants sur la faune locale.
## [Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/16)
## Observer l'envergure des ailes avec Matplotlib
Une bibliothèque excellente pour créer des graphiques simples ou sophistiqués de divers types est [Matplotlib](https://matplotlib.org/stable/index.html). En termes généraux, le processus de création de graphiques avec ces bibliothèques inclut l'identification des parties de votre dataframe que vous souhaitez cibler, la réalisation des transformations nécessaires sur ces données, l'attribution des valeurs des axes x et y, le choix du type de graphique à afficher, puis l'affichage du graphique. Matplotlib offre une grande variété de visualisations, mais pour cette leçon, concentrons-nous sur celles les plus adaptées à la visualisation de quantités : les graphiques en ligne, les nuages de points et les diagrammes en barres.
> ✅ Utilisez le graphique le mieux adapté à la structure de vos données et à l'histoire que vous souhaitez raconter.
> - Pour analyser les tendances au fil du temps : ligne
> - Pour comparer des valeurs : barre, colonne, camembert, nuage de points
> - Pour montrer comment les parties se rapportent à un tout : camembert
> - Pour montrer la distribution des données : nuage de points, barre
> - Pour montrer les tendances : ligne, colonne
> - Pour montrer les relations entre les valeurs : ligne, nuage de points, bulle
Si vous avez un ensemble de données et que vous devez découvrir combien d'un certain élément est inclus, l'une des premières tâches sera d'inspecter ses valeurs.
✅ Il existe d'excellents 'cheat sheets' pour Matplotlib [ici](https://matplotlib.org/cheatsheets/cheatsheets.pdf).
## Construire un graphique en ligne sur les valeurs d'envergure des ailes des oiseaux
Ouvrez le fichier `notebook.ipynb` à la racine de ce dossier de leçon et ajoutez une cellule.
> Note : les données sont stockées à la racine de ce dépôt dans le dossier `/data`.
```python
import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
```
Ces données sont un mélange de texte et de chiffres :
| | Nom | NomScientifique | Catégorie | Ordre | Famille | Genre | StatutConservation | LongueurMin | LongueurMax | MasseMin | MasseMax | EnvergureMin | EnvergureMax |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | Dendrocygne à ventre noir | Dendrocygna autumnalis | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | Dendrocygne fauve | Dendrocygna bicolor | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | Oie des neiges | Anser caerulescens | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | Oie de Ross | Anser rossii | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | Oie rieuse | Anser albifrons | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Commençons par tracer certaines des données numériques en utilisant un graphique en ligne basique. Supposons que vous souhaitiez une vue de l'envergure maximale pour ces oiseaux intéressants.
```python
wingspan = birds['MaxWingspan']
wingspan.plot()
```
![Envergure maximale](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-02.png)
Que remarquez-vous immédiatement ? Il semble y avoir au moins un cas aberrant - quelle envergure impressionnante ! Une envergure de 2300 centimètres équivaut à 23 mètres - y aurait-il des ptérodactyles qui rôdent dans le Minnesota ? Enquêtons.
Bien que vous puissiez effectuer un tri rapide dans Excel pour trouver ces cas aberrants, qui sont probablement des erreurs de frappe, continuez le processus de visualisation en travaillant directement depuis le graphique.
Ajoutez des étiquettes à l'axe des x pour montrer de quels types d'oiseaux il s'agit :
```
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.xticks(rotation=45)
x = birds['Name']
y = birds['MaxWingspan']
plt.plot(x, y)
plt.show()
```
![envergure avec étiquettes](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-labels-02.png)
Même avec la rotation des étiquettes réglée à 45 degrés, il y en a trop pour être lisibles. Essayons une stratégie différente : étiqueter uniquement les cas aberrants et placer les étiquettes dans le graphique. Vous pouvez utiliser un nuage de points pour faire plus de place aux étiquettes :
```python
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
for i in range(len(birds)):
x = birds['Name'][i]
y = birds['MaxWingspan'][i]
plt.plot(x, y, 'bo')
if birds['MaxWingspan'][i] > 500:
plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12)
plt.show()
```
Que se passe-t-il ici ? Vous avez utilisé `tick_params` pour masquer les étiquettes du bas, puis créé une boucle sur votre ensemble de données d'oiseaux. En traçant le graphique avec de petits points bleus ronds en utilisant `bo`, vous avez vérifié si un oiseau avait une envergure maximale supérieure à 500 et affiché son étiquette à côté du point si c'était le cas. Vous avez légèrement décalé les étiquettes sur l'axe y (`y * (1 - 0.05)`) et utilisé le nom de l'oiseau comme étiquette.
Qu'avez-vous découvert ?
![cas aberrants](../../../../3-Data-Visualization/09-visualization-quantities/images/labeled-wingspan-02.png)
## Filtrer vos données
Le pygargue à tête blanche et le faucon des prairies, bien qu'ils soient probablement de très grands oiseaux, semblent être mal étiquetés, avec un `0` supplémentaire ajouté à leur envergure maximale. Il est peu probable que vous rencontriez un pygargue à tête blanche avec une envergure de 25 mètres, mais si c'est le cas, faites-le nous savoir ! Créons un nouveau dataframe sans ces deux cas aberrants :
```python
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
for i in range(len(birds)):
x = birds['Name'][i]
y = birds['MaxWingspan'][i]
if birds['Name'][i] not in ['Bald eagle', 'Prairie falcon']:
plt.plot(x, y, 'bo')
plt.show()
```
En filtrant les cas aberrants, vos données sont maintenant plus cohérentes et compréhensibles.
![nuage de points des envergures](../../../../3-Data-Visualization/09-visualization-quantities/images/scatterplot-wingspan-02.png)
Maintenant que nous avons un ensemble de données plus propre, du moins en termes d'envergure, découvrons-en davantage sur ces oiseaux.
Bien que les graphiques en ligne et les nuages de points puissent afficher des informations sur les valeurs des données et leur distribution, nous voulons réfléchir aux valeurs inhérentes à cet ensemble de données. Vous pourriez créer des visualisations pour répondre aux questions suivantes sur les quantités :
> Combien de catégories d'oiseaux existe-t-il, et quels sont leurs nombres ?
> Combien d'oiseaux sont éteints, en danger, rares ou communs ?
> Combien y a-t-il des différents genres et ordres selon la terminologie de Linné ?
## Explorer les diagrammes en barres
Les diagrammes en barres sont pratiques lorsque vous devez montrer des regroupements de données. Explorons les catégories d'oiseaux présentes dans cet ensemble de données pour voir laquelle est la plus courante en nombre.
Dans le fichier notebook, créez un diagramme en barres basique.
✅ Notez que vous pouvez soit filtrer les deux oiseaux aberrants identifiés dans la section précédente, soit corriger l'erreur dans leur envergure, soit les laisser tels quels pour ces exercices qui ne dépendent pas des valeurs d'envergure.
Si vous souhaitez créer un diagramme en barres, vous pouvez sélectionner les données sur lesquelles vous voulez vous concentrer. Les diagrammes en barres peuvent être créés à partir de données brutes :
```python
birds.plot(x='Category',
kind='bar',
stacked=True,
title='Birds of Minnesota')
```
![données complètes sous forme de diagramme en barres](../../../../3-Data-Visualization/09-visualization-quantities/images/full-data-bar-02.png)
Ce diagramme en barres, cependant, est illisible car il y a trop de données non regroupées. Vous devez sélectionner uniquement les données que vous souhaitez représenter, alors regardons la longueur des oiseaux en fonction de leur catégorie.
Filtrez vos données pour inclure uniquement la catégorie des oiseaux.
✅ Remarquez que vous utilisez Pandas pour gérer les données, puis laissez Matplotlib faire le graphique.
Étant donné qu'il y a de nombreuses catégories, vous pouvez afficher ce graphique verticalement et ajuster sa hauteur pour tenir compte de toutes les données :
```python
category_count = birds.value_counts(birds['Category'].values, sort=True)
plt.rcParams['figure.figsize'] = [6, 12]
category_count.plot.barh()
```
![catégorie et longueur](../../../../3-Data-Visualization/09-visualization-quantities/images/category-counts-02.png)
Ce diagramme en barres montre une bonne vue du nombre d'oiseaux dans chaque catégorie. En un clin d'œil, vous voyez que le plus grand nombre d'oiseaux dans cette région appartient à la catégorie des Canards/Oies/Oiseaux aquatiques. Le Minnesota est le 'pays des 10 000 lacs', donc ce n'est pas surprenant !
✅ Essayez d'autres comptages sur cet ensemble de données. Y a-t-il quelque chose qui vous surprend ?
## Comparer les données
Vous pouvez essayer différentes comparaisons de données regroupées en créant de nouveaux axes. Essayez une comparaison de la LongueurMax d'un oiseau, basée sur sa catégorie :
```python
maxlength = birds['MaxLength']
plt.barh(y=birds['Category'], width=maxlength)
plt.rcParams['figure.figsize'] = [6, 12]
plt.show()
```
![comparer les données](../../../../3-Data-Visualization/09-visualization-quantities/images/category-length-02.png)
Rien de surprenant ici : les colibris ont la LongueurMax la plus faible par rapport aux pélicans ou aux oies. C'est bien lorsque les données ont du sens logiquement !
Vous pouvez créer des visualisations plus intéressantes de diagrammes en barres en superposant des données. Superposons la LongueurMin et la LongueurMax pour une catégorie d'oiseaux donnée :
```python
minLength = birds['MinLength']
maxLength = birds['MaxLength']
category = birds['Category']
plt.barh(category, maxLength)
plt.barh(category, minLength)
plt.show()
```
Dans ce graphique, vous pouvez voir la plage par catégorie d'oiseaux de la LongueurMin et de la LongueurMax. Vous pouvez affirmer en toute sécurité que, selon ces données, plus l'oiseau est grand, plus sa plage de longueur est large. Fascinant !
![valeurs superposées](../../../../3-Data-Visualization/09-visualization-quantities/images/superimposed-02.png)
## 🚀 Défi
Cet ensemble de données sur les oiseaux offre une mine d'informations sur différents types d'oiseaux dans un écosystème particulier. Cherchez sur Internet et voyez si vous pouvez trouver d'autres ensembles de données sur les oiseaux. Entraînez-vous à créer des graphiques et des diagrammes autour de ces oiseaux pour découvrir des faits que vous ne connaissiez pas.
## [Quiz après la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/17)
## Révision et étude personnelle
Cette première leçon vous a donné des informations sur la façon d'utiliser Matplotlib pour visualiser des quantités. Faites des recherches sur d'autres façons de travailler avec des ensembles de données pour la visualisation. [Plotly](https://github.com/plotly/plotly.py) est une bibliothèque que nous ne couvrirons pas dans ces leçons, alors jetez un œil à ce qu'elle peut offrir.
## Devoir
[Graphiques en lignes, nuages de points et barres](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "ad163c4fda72c8278280b61cad317ff4",
"translation_date": "2025-08-24T14:07:24+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/assignment.md",
"language_code": "fr"
}
-->
# Lignes, Nuages de points et Barres
## Instructions
Dans cette leçon, vous avez travaillé avec des graphiques en ligne, des nuages de points et des graphiques en barres pour mettre en évidence des faits intéressants sur ce jeu de données. Dans cet exercice, explorez davantage le jeu de données pour découvrir un fait concernant un type d'oiseau donné. Par exemple, créez un notebook visualisant toutes les données intéressantes que vous pouvez trouver sur les oies des neiges. Utilisez les trois types de graphiques mentionnés ci-dessus pour raconter une histoire dans votre notebook.
## Critères d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Un notebook est présenté avec de bonnes annotations, une narration solide et des graphiques attrayants | Le notebook manque l'un de ces éléments | Le notebook manque deux de ces éléments
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,215 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "87faccac113d772551486a67a607153e",
"translation_date": "2025-08-24T13:37:59+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/README.md",
"language_code": "fr"
}
-->
# Visualiser les distributions
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| Visualiser les distributions - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Dans la leçon précédente, vous avez appris des faits intéressants sur un ensemble de données concernant les oiseaux du Minnesota. Vous avez identifié des données erronées en visualisant les valeurs aberrantes et examiné les différences entre les catégories d'oiseaux en fonction de leur longueur maximale.
## [Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
## Explorer l'ensemble de données sur les oiseaux
Une autre façon d'explorer les données est d'examiner leur distribution, c'est-à-dire comment les données sont organisées le long d'un axe. Par exemple, vous pourriez vouloir en savoir plus sur la distribution générale, pour cet ensemble de données, de l'envergure maximale ou de la masse corporelle maximale des oiseaux du Minnesota.
Découvrons quelques faits sur les distributions des données dans cet ensemble de données. Dans le fichier _notebook.ipynb_ à la racine de ce dossier de leçon, importez Pandas, Matplotlib et vos données :
```python
import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
```
| | Nom | NomScientifique | Catégorie | Ordre | Famille | Genre | StatutConservation | MinLongueur | MaxLongueur | MinMasseCorporelle | MaxMasseCorporelle | MinEnvergure | MaxEnvergure |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | Dendrocygne à ventre noir | Dendrocygna autumnalis | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | Dendrocygne fauve | Dendrocygna bicolor | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | Oie des neiges | Anser caerulescens | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | Oie de Ross | Anser rossii | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | Oie rieuse | Anser albifrons | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
En général, vous pouvez rapidement examiner la façon dont les données sont distribuées en utilisant un diagramme de dispersion, comme nous l'avons fait dans la leçon précédente :
```python
birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))
plt.title('Max Length per Order')
plt.ylabel('Order')
plt.xlabel('Max Length')
plt.show()
```
![longueur maximale par ordre](../../../../3-Data-Visualization/10-visualization-distributions/images/scatter-wb.png)
Cela donne un aperçu de la distribution générale de la longueur corporelle par ordre d'oiseaux, mais ce n'est pas la méthode optimale pour afficher les véritables distributions. Cette tâche est généralement réalisée en créant un histogramme.
## Travailler avec des histogrammes
Matplotlib offre d'excellents moyens de visualiser la distribution des données à l'aide d'histogrammes. Ce type de graphique ressemble à un diagramme en barres où la distribution peut être observée à travers la montée et la descente des barres. Pour construire un histogramme, vous avez besoin de données numériques. Pour créer un histogramme, vous pouvez tracer un graphique en définissant le type comme 'hist' pour Histogramme. Ce graphique montre la distribution de la masse corporelle maximale pour l'ensemble de données dans sa plage de données numériques. En divisant le tableau de données en petits intervalles, il peut afficher la distribution des valeurs des données :
```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()
```
![distribution sur l'ensemble du dataset](../../../../3-Data-Visualization/10-visualization-distributions/images/dist1-wb.png)
Comme vous pouvez le voir, la plupart des 400+ oiseaux de cet ensemble de données se situent dans la plage de moins de 2000 pour leur masse corporelle maximale. Obtenez plus d'informations sur les données en modifiant le paramètre `bins` à un nombre plus élevé, comme 30 :
```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
plt.show()
```
![distribution sur l'ensemble du dataset avec un paramètre bins plus élevé](../../../../3-Data-Visualization/10-visualization-distributions/images/dist2-wb.png)
Ce graphique montre la distribution de manière un peu plus détaillée. Un graphique moins biaisé vers la gauche pourrait être créé en veillant à ne sélectionner que les données dans une plage donnée :
Filtrez vos données pour obtenir uniquement les oiseaux dont la masse corporelle est inférieure à 60, et affichez 40 `bins` :
```python
filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()
```
![histogramme filtré](../../../../3-Data-Visualization/10-visualization-distributions/images/dist3-wb.png)
✅ Essayez d'autres filtres et points de données. Pour voir la distribution complète des données, supprimez le filtre `['MaxBodyMass']` pour afficher les distributions étiquetées.
L'histogramme offre également des améliorations intéressantes en termes de couleur et d'étiquetage :
Créez un histogramme 2D pour comparer la relation entre deux distributions. Comparons `MaxBodyMass` et `MaxLength`. Matplotlib propose une méthode intégrée pour montrer la convergence en utilisant des couleurs plus vives :
```python
x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']
fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)
```
Il semble y avoir une corrélation attendue entre ces deux éléments le long d'un axe attendu, avec un point de convergence particulièrement fort :
![graphique 2D](../../../../3-Data-Visualization/10-visualization-distributions/images/2D-wb.png)
Les histogrammes fonctionnent bien par défaut pour les données numériques. Que faire si vous devez examiner les distributions selon des données textuelles ?
## Explorer l'ensemble de données pour les distributions à l'aide de données textuelles
Cet ensemble de données contient également de bonnes informations sur la catégorie des oiseaux, leur genre, espèce et famille, ainsi que leur statut de conservation. Explorons ces informations de conservation. Quelle est la distribution des oiseaux selon leur statut de conservation ?
> ✅ Dans l'ensemble de données, plusieurs acronymes sont utilisés pour décrire le statut de conservation. Ces acronymes proviennent des [Catégories de la Liste Rouge de l'UICN](https://www.iucnredlist.org/), une organisation qui catalogue le statut des espèces.
>
> - CR : En danger critique
> - EN : En danger
> - EX : Éteint
> - LC : Préoccupation mineure
> - NT : Quasi menacé
> - VU : Vulnérable
Ces valeurs sont basées sur du texte, vous devrez donc effectuer une transformation pour créer un histogramme. En utilisant le dataframe filteredBirds, affichez son statut de conservation avec son envergure minimale. Que voyez-vous ?
```python
x1 = filteredBirds.loc[filteredBirds.ConservationStatus=='EX', 'MinWingspan']
x2 = filteredBirds.loc[filteredBirds.ConservationStatus=='CR', 'MinWingspan']
x3 = filteredBirds.loc[filteredBirds.ConservationStatus=='EN', 'MinWingspan']
x4 = filteredBirds.loc[filteredBirds.ConservationStatus=='NT', 'MinWingspan']
x5 = filteredBirds.loc[filteredBirds.ConservationStatus=='VU', 'MinWingspan']
x6 = filteredBirds.loc[filteredBirds.ConservationStatus=='LC', 'MinWingspan']
kwargs = dict(alpha=0.5, bins=20)
plt.hist(x1, **kwargs, color='red', label='Extinct')
plt.hist(x2, **kwargs, color='orange', label='Critically Endangered')
plt.hist(x3, **kwargs, color='yellow', label='Endangered')
plt.hist(x4, **kwargs, color='green', label='Near Threatened')
plt.hist(x5, **kwargs, color='blue', label='Vulnerable')
plt.hist(x6, **kwargs, color='gray', label='Least Concern')
plt.gca().set(title='Conservation Status', ylabel='Min Wingspan')
plt.legend();
```
![collation envergure et conservation](../../../../3-Data-Visualization/10-visualization-distributions/images/histogram-conservation-wb.png)
Il ne semble pas y avoir de bonne corrélation entre l'envergure minimale et le statut de conservation. Testez d'autres éléments de l'ensemble de données en utilisant cette méthode. Vous pouvez également essayer différents filtres. Trouvez-vous une corrélation ?
## Graphiques de densité
Vous avez peut-être remarqué que les histogrammes que nous avons examinés jusqu'à présent sont "en escalier" et ne s'écoulent pas de manière fluide en arc. Pour afficher un graphique de densité plus fluide, vous pouvez essayer un graphique de densité.
Pour travailler avec des graphiques de densité, familiarisez-vous avec une nouvelle bibliothèque de tracé, [Seaborn](https://seaborn.pydata.org/generated/seaborn.kdeplot.html).
En chargeant Seaborn, essayez un graphique de densité basique :
```python
import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()
```
![Graphique de densité](../../../../3-Data-Visualization/10-visualization-distributions/images/density1.png)
Vous pouvez voir comment le graphique reflète le précédent pour les données d'envergure minimale ; il est juste un peu plus fluide. Selon la documentation de Seaborn, "Par rapport à un histogramme, le KDE peut produire un graphique moins encombré et plus interprétable, surtout lorsqu'on trace plusieurs distributions. Mais il a le potentiel d'introduire des distorsions si la distribution sous-jacente est bornée ou non fluide. Comme un histogramme, la qualité de la représentation dépend également de la sélection de bons paramètres de lissage." [source](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) En d'autres termes, les valeurs aberrantes, comme toujours, feront mal fonctionner vos graphiques.
Si vous vouliez revisiter cette ligne irrégulière de MaxBodyMass dans le deuxième graphique que vous avez construit, vous pourriez la lisser très bien en la recréant avec cette méthode :
```python
sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()
```
![ligne de masse corporelle lissée](../../../../3-Data-Visualization/10-visualization-distributions/images/density2.png)
Si vous vouliez une ligne lisse, mais pas trop lisse, modifiez le paramètre `bw_adjust` :
```python
sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()
```
![ligne de masse corporelle moins lissée](../../../../3-Data-Visualization/10-visualization-distributions/images/density3.png)
✅ Lisez les paramètres disponibles pour ce type de graphique et expérimentez !
Ce type de graphique offre des visualisations magnifiquement explicatives. Avec quelques lignes de code, par exemple, vous pouvez montrer la densité de masse corporelle maximale par ordre d'oiseaux :
```python
sns.kdeplot(
data=filteredBirds, x="MaxBodyMass", hue="Order",
fill=True, common_norm=False, palette="crest",
alpha=.5, linewidth=0,
)
```
![masse corporelle par ordre](../../../../3-Data-Visualization/10-visualization-distributions/images/density4.png)
Vous pouvez également cartographier la densité de plusieurs variables dans un seul graphique. Testez la longueur maximale et la longueur minimale d'un oiseau par rapport à son statut de conservation :
```python
sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")
```
![densités multiples, superposées](../../../../3-Data-Visualization/10-visualization-distributions/images/multi.png)
Peut-être vaut-il la peine de rechercher si le regroupement des oiseaux "Vulnérables" selon leurs longueurs est significatif ou non.
## 🚀 Défi
Les histogrammes sont un type de graphique plus sophistiqué que les diagrammes de dispersion, les diagrammes en barres ou les diagrammes linéaires de base. Faites une recherche sur Internet pour trouver de bons exemples d'utilisation des histogrammes. Comment sont-ils utilisés, que démontrent-ils, et dans quels domaines ou champs d'étude ont-ils tendance à être utilisés ?
## [Quiz après la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)
## Révision et auto-apprentissage
Dans cette leçon, vous avez utilisé Matplotlib et commencé à travailler avec Seaborn pour afficher des graphiques plus sophistiqués. Faites des recherches sur `kdeplot` dans Seaborn, une "courbe de densité de probabilité continue dans une ou plusieurs dimensions". Lisez la [documentation](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) pour comprendre son fonctionnement.
## Devoir
[Appliquez vos compétences](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "40eeb9b9f94009c537c7811f9f27f037",
"translation_date": "2025-08-24T13:39:51+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/assignment.md",
"language_code": "fr"
}
-->
# Appliquez vos compétences
## Instructions
Jusqu'à présent, vous avez travaillé avec le jeu de données sur les oiseaux du Minnesota pour découvrir des informations sur les quantités d'oiseaux et la densité de population. Mettez en pratique vos compétences en appliquant ces techniques à un autre jeu de données, peut-être issu de [Kaggle](https://www.kaggle.com/). Créez un notebook pour raconter une histoire à partir de ce jeu de données, et assurez-vous d'utiliser des histogrammes pour en discuter.
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | --- |
Un notebook est présenté avec des annotations sur ce jeu de données, y compris sa source, et utilise au moins 5 histogrammes pour découvrir des faits sur les données. | Un notebook est présenté avec des annotations incomplètes ou des bugs. | Un notebook est présenté sans annotations et contient des bugs.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,201 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "af6a12015c6e250e500b570a9fa42593",
"translation_date": "2025-08-24T14:09:02+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/README.md",
"language_code": "fr"
}
-->
# Visualiser les proportions
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/11-Visualizing-Proportions.png)|
|:---:|
|Visualiser les proportions - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Dans cette leçon, vous utiliserez un ensemble de données axé sur la nature pour visualiser les proportions, comme le nombre de types différents de champignons présents dans un ensemble de données sur les champignons. Explorons ces fascinants champignons à l'aide d'un ensemble de données provenant d'Audubon, qui répertorie des informations sur 23 espèces de champignons à lamelles des familles Agaricus et Lepiota. Vous expérimenterez des visualisations savoureuses telles que :
- Des diagrammes circulaires 🥧
- Des diagrammes en anneau 🍩
- Des diagrammes en gaufre 🧇
> 💡 Un projet très intéressant appelé [Charticulator](https://charticulator.com) de Microsoft Research propose une interface gratuite de glisser-déposer pour les visualisations de données. Dans l'un de leurs tutoriels, ils utilisent également cet ensemble de données sur les champignons ! Vous pouvez donc explorer les données et apprendre à utiliser la bibliothèque en même temps : [Tutoriel Charticulator](https://charticulator.com/tutorials/tutorial4.html).
## [Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/20)
## Faites connaissance avec vos champignons 🍄
Les champignons sont très intéressants. Importons un ensemble de données pour les étudier :
```python
import pandas as pd
import matplotlib.pyplot as plt
mushrooms = pd.read_csv('../../data/mushrooms.csv')
mushrooms.head()
```
Un tableau est affiché avec des données intéressantes pour l'analyse :
| classe | forme du chapeau | surface du chapeau | couleur du chapeau | meurtri | odeur | attache des lamelles | espacement des lamelles | taille des lamelles | couleur des lamelles | forme du pied | racine du pied | surface du pied au-dessus de l'anneau | surface du pied en-dessous de l'anneau | couleur du pied au-dessus de l'anneau | couleur du pied en-dessous de l'anneau | type de voile | couleur du voile | nombre d'anneaux | type d'anneau | couleur des spores | population | habitat |
| --------- | ---------------- | ------------------ | ------------------ | ------- | ------- | -------------------- | ----------------------- | ------------------- | -------------------- | ------------- | -------------- | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------- | ---------------- | ---------------- | ------------- | ----------------- | ---------- | ------- |
| Toxique | Convexe | Lisse | Marron | Meurtri | Piquant | Libre | Serré | Étroit | Noir | Élargi | Égal | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Noir | Dispersé | Urbain |
| Comestible| Convexe | Lisse | Jaune | Meurtri | Amande | Libre | Serré | Large | Noir | Élargi | Massue | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Marron | Nombreux | Herbes |
| Comestible| Cloché | Lisse | Blanc | Meurtri | Anis | Libre | Serré | Large | Marron | Élargi | Massue | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Marron | Nombreux | Prairies|
| Toxique | Convexe | Écailleux | Blanc | Meurtri | Piquant | Libre | Serré | Étroit | Marron | Élargi | Égal | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Noir | Dispersé | Urbain |
Vous remarquez immédiatement que toutes les données sont textuelles. Vous devrez convertir ces données pour pouvoir les utiliser dans un graphique. La plupart des données, en fait, sont représentées comme un objet :
```python
print(mushrooms.select_dtypes(["object"]).columns)
```
Le résultat est :
```output
Index(['class', 'cap-shape', 'cap-surface', 'cap-color', 'bruises', 'odor',
'gill-attachment', 'gill-spacing', 'gill-size', 'gill-color',
'stalk-shape', 'stalk-root', 'stalk-surface-above-ring',
'stalk-surface-below-ring', 'stalk-color-above-ring',
'stalk-color-below-ring', 'veil-type', 'veil-color', 'ring-number',
'ring-type', 'spore-print-color', 'population', 'habitat'],
dtype='object')
```
Prenez ces données et convertissez la colonne 'classe' en catégorie :
```python
cols = mushrooms.select_dtypes(["object"]).columns
mushrooms[cols] = mushrooms[cols].astype('category')
```
```python
edibleclass=mushrooms.groupby(['class']).count()
edibleclass
```
Maintenant, si vous imprimez les données des champignons, vous pouvez voir qu'elles ont été regroupées en catégories selon la classe toxique/comestible :
| | forme du chapeau | surface du chapeau | couleur du chapeau | meurtri | odeur | attache des lamelles | espacement des lamelles | taille des lamelles | couleur des lamelles | forme du pied | ... | surface du pied en-dessous de l'anneau | couleur du pied au-dessus de l'anneau | couleur du pied en-dessous de l'anneau | type de voile | couleur du voile | nombre d'anneaux | type d'anneau | couleur des spores | population | habitat |
| --------- | ---------------- | ------------------ | ------------------ | ------- | ---- | -------------------- | ----------------------- | ------------------- | -------------------- | ------------- | --- | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------- | ---------------- | ---------------- | ------------- | ----------------- | ---------- | ------- |
| classe | | | | | | | | | | | | | | | | | | | | | |
| Comestible| 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | ... | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 |
| Toxique | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | ... | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 |
Si vous suivez l'ordre présenté dans ce tableau pour créer vos étiquettes de catégorie de classe, vous pouvez construire un diagramme circulaire :
## Diagramme circulaire !
```python
labels=['Edible','Poisonous']
plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%')
plt.title('Edible?')
plt.show()
```
Et voilà, un diagramme circulaire montrant les proportions de ces données selon ces deux classes de champignons. Il est très important de respecter l'ordre des étiquettes, surtout ici, alors assurez-vous de vérifier l'ordre avec lequel le tableau des étiquettes est construit !
![diagramme circulaire](../../../../3-Data-Visualization/11-visualization-proportions/images/pie1-wb.png)
## Diagrammes en anneau !
Un diagramme en anneau est un diagramme circulaire avec un trou au centre, ce qui le rend visuellement plus intéressant. Regardons nos données avec cette méthode.
Examinez les différents habitats où poussent les champignons :
```python
habitat=mushrooms.groupby(['habitat']).count()
habitat
```
Ici, vous regroupez vos données par habitat. Il y en a 7 répertoriés, alors utilisez-les comme étiquettes pour votre diagramme en anneau :
```python
labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood']
plt.pie(habitat['class'], labels=labels,
autopct='%1.1f%%', pctdistance=0.85)
center_circle = plt.Circle((0, 0), 0.40, fc='white')
fig = plt.gcf()
fig.gca().add_artist(center_circle)
plt.title('Mushroom Habitats')
plt.show()
```
![diagramme en anneau](../../../../3-Data-Visualization/11-visualization-proportions/images/donut-wb.png)
Ce code dessine un graphique et un cercle central, puis ajoute ce cercle central au graphique. Modifiez la largeur du cercle central en changeant `0.40` par une autre valeur.
Les diagrammes en anneau peuvent être ajustés de plusieurs façons pour modifier les étiquettes. Les étiquettes, en particulier, peuvent être mises en évidence pour améliorer la lisibilité. Apprenez-en plus dans la [documentation](https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html?highlight=donut).
Maintenant que vous savez comment regrouper vos données et les afficher sous forme de diagramme circulaire ou en anneau, vous pouvez explorer d'autres types de graphiques. Essayez un diagramme en gaufre, qui est simplement une autre façon d'explorer les quantités.
## Diagrammes en gaufre !
Un diagramme de type 'gaufre' est une manière différente de visualiser les quantités sous forme de tableau 2D de carrés. Essayez de visualiser les différentes quantités de couleurs de chapeau de champignon dans cet ensemble de données. Pour ce faire, vous devez installer une bibliothèque d'assistance appelée [PyWaffle](https://pypi.org/project/pywaffle/) et utiliser Matplotlib :
```python
pip install pywaffle
```
Sélectionnez un segment de vos données à regrouper :
```python
capcolor=mushrooms.groupby(['cap-color']).count()
capcolor
```
Créez un diagramme en gaufre en créant des étiquettes, puis en regroupant vos données :
```python
import pandas as pd
import matplotlib.pyplot as plt
from pywaffle import Waffle
data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'],
'amount': capcolor['class']
}
df = pd.DataFrame(data)
fig = plt.figure(
FigureClass = Waffle,
rows = 100,
values = df.amount,
labels = list(df.color),
figsize = (30,30),
colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"],
)
```
Avec un diagramme en gaufre, vous pouvez clairement voir les proportions des couleurs de chapeau dans cet ensemble de données sur les champignons. Fait intéressant, il y a de nombreux champignons à chapeau vert !
![diagramme en gaufre](../../../../3-Data-Visualization/11-visualization-proportions/images/waffle.png)
✅ PyWaffle prend en charge les icônes dans les graphiques qui utilisent n'importe quelle icône disponible dans [Font Awesome](https://fontawesome.com/). Faites des expériences pour créer un diagramme en gaufre encore plus intéressant en utilisant des icônes au lieu de carrés.
Dans cette leçon, vous avez appris trois façons de visualiser les proportions. Tout d'abord, vous devez regrouper vos données en catégories, puis décider de la meilleure façon de les afficher - circulaire, en anneau ou en gaufre. Toutes sont délicieuses et offrent à l'utilisateur un aperçu instantané d'un ensemble de données.
## 🚀 Défi
Essayez de recréer ces graphiques savoureux dans [Charticulator](https://charticulator.com).
## [Quiz après la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/21)
## Révision et étude personnelle
Parfois, il n'est pas évident de savoir quand utiliser un diagramme circulaire, en anneau ou en gaufre. Voici quelques articles à lire sur ce sujet :
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402
Faites des recherches pour trouver plus d'informations sur cette décision délicate.
## Devoir
[Essayez-le dans Excel](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "1e00fe6a244c2f8f9a794c862661dd4f",
"translation_date": "2025-08-24T14:10:41+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/assignment.md",
"language_code": "fr"
}
-->
# Essayez-le dans Excel
## Instructions
Saviez-vous que vous pouvez créer des graphiques en anneau, en secteur et en gaufre dans Excel ? En utilisant un ensemble de données de votre choix, créez ces trois graphiques directement dans une feuille de calcul Excel.
## Grille d'évaluation
| Exemplaire | Adéquat | À améliorer |
| ------------------------------------------------------- | ------------------------------------------------ | ----------------------------------------------------- |
| Une feuille Excel est présentée avec les trois graphiques | Une feuille Excel est présentée avec deux graphiques | Une feuille Excel est présentée avec un seul graphique |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,184 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "cad419b574d5c35eaa417e9abfdcb0c8",
"translation_date": "2025-08-24T13:41:56+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/README.md",
"language_code": "fr"
}
-->
# Visualiser les relations : Tout sur le miel 🍯
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/12-Visualizing-Relationships.png)|
|:---:|
|Visualiser les relations - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
En poursuivant notre recherche axée sur la nature, découvrons des visualisations intéressantes pour montrer les relations entre différents types de miel, selon un ensemble de données provenant du [Département de l'Agriculture des États-Unis](https://www.nass.usda.gov/About_NASS/index.php).
Cet ensemble de données, qui contient environ 600 éléments, présente la production de miel dans de nombreux États américains. Par exemple, vous pouvez examiner le nombre de colonies, le rendement par colonie, la production totale, les stocks, le prix par livre et la valeur du miel produit dans un État donné de 1998 à 2012, avec une ligne par année pour chaque État.
Il sera intéressant de visualiser la relation entre la production annuelle d'un État donné et, par exemple, le prix du miel dans cet État. Alternativement, vous pourriez visualiser la relation entre les rendements de miel par colonie dans différents États. Cette période couvre l'apparition dévastatrice du 'CCD' ou 'Colony Collapse Disorder' (Syndrome d'effondrement des colonies) observée pour la première fois en 2006 (http://npic.orst.edu/envir/ccd.html), ce qui en fait un ensemble de données poignant à étudier. 🐝
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/22)
Dans cette leçon, vous pouvez utiliser Seaborn, que vous avez déjà utilisé, comme une excellente bibliothèque pour visualiser les relations entre les variables. Particulièrement intéressant est l'utilisation de la fonction `relplot` de Seaborn, qui permet de créer des graphiques de dispersion et des graphiques linéaires pour visualiser rapidement les '[relations statistiques](https://seaborn.pydata.org/tutorial/relational.html?highlight=relationships)', ce qui permet au data scientist de mieux comprendre comment les variables sont liées entre elles.
## Graphiques de dispersion
Utilisez un graphique de dispersion pour montrer comment le prix du miel a évolué, année après année, par État. Seaborn, grâce à `relplot`, regroupe commodément les données des États et affiche des points de données pour les données catégoriques et numériques.
Commençons par importer les données et Seaborn :
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()
```
Vous remarquez que les données sur le miel contiennent plusieurs colonnes intéressantes, notamment l'année et le prix par livre. Explorons ces données, regroupées par État américain :
| state | numcol | yieldpercol | totalprod | stocks | priceperlb | prodvalue | year |
| ----- | ------ | ----------- | --------- | -------- | ---------- | --------- | ---- |
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
Créez un graphique de dispersion de base pour montrer la relation entre le prix par livre de miel et son État d'origine. Faites en sorte que l'axe `y` soit suffisamment grand pour afficher tous les États :
```python
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
```
![scatterplot 1](../../../../3-Data-Visualization/12-visualization-relationships/images/scatter1.png)
Maintenant, affichez les mêmes données avec un schéma de couleurs miel pour montrer comment le prix évolue au fil des années. Vous pouvez le faire en ajoutant un paramètre 'hue' pour montrer le changement, année après année :
> ✅ En savoir plus sur les [palettes de couleurs que vous pouvez utiliser dans Seaborn](https://seaborn.pydata.org/tutorial/color_palettes.html) - essayez un magnifique schéma de couleurs arc-en-ciel !
```python
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
```
![scatterplot 2](../../../../3-Data-Visualization/12-visualization-relationships/images/scatter2.png)
Avec ce changement de schéma de couleurs, vous pouvez voir qu'il y a évidemment une forte progression au fil des années en termes de prix du miel par livre. En effet, si vous examinez un échantillon de données pour vérifier (choisissez un État donné, comme l'Arizona), vous pouvez voir un schéma d'augmentation des prix année après année, avec quelques exceptions :
| state | numcol | yieldpercol | totalprod | stocks | priceperlb | prodvalue | year |
| ----- | ------ | ----------- | --------- | ------- | ---------- | --------- | ---- |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
Une autre façon de visualiser cette progression est d'utiliser la taille, plutôt que la couleur. Pour les utilisateurs daltoniens, cela pourrait être une meilleure option. Modifiez votre visualisation pour montrer une augmentation du prix par une augmentation de la circonférence des points :
```python
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
```
Vous pouvez voir la taille des points augmenter progressivement.
![scatterplot 3](../../../../3-Data-Visualization/12-visualization-relationships/images/scatter3.png)
Est-ce un simple cas d'offre et de demande ? En raison de facteurs tels que le changement climatique et l'effondrement des colonies, y a-t-il moins de miel disponible à l'achat année après année, ce qui entraîne une augmentation des prix ?
Pour découvrir une corrélation entre certaines des variables de cet ensemble de données, explorons quelques graphiques linéaires.
## Graphiques linéaires
Question : Y a-t-il une augmentation claire du prix du miel par livre année après année ? Vous pouvez le découvrir facilement en créant un graphique linéaire unique :
```python
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
```
Réponse : Oui, avec quelques exceptions autour de l'année 2003 :
![line chart 1](../../../../3-Data-Visualization/12-visualization-relationships/images/line1.png)
✅ Comme Seaborn regroupe les données autour d'une seule ligne, il affiche "les multiples mesures à chaque valeur x en traçant la moyenne et l'intervalle de confiance à 95 % autour de la moyenne". [Source](https://seaborn.pydata.org/tutorial/relational.html). Ce comportement, qui prend du temps, peut être désactivé en ajoutant `ci=None`.
Question : Eh bien, en 2003, pouvons-nous également observer un pic dans l'approvisionnement en miel ? Que se passe-t-il si vous examinez la production totale année après année ?
```python
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
```
![line chart 2](../../../../3-Data-Visualization/12-visualization-relationships/images/line2.png)
Réponse : Pas vraiment. Si vous regardez la production totale, elle semble en fait avoir augmenté cette année-là, même si, de manière générale, la quantité de miel produite est en déclin pendant ces années.
Question : Dans ce cas, qu'est-ce qui aurait pu provoquer ce pic du prix du miel autour de 2003 ?
Pour le découvrir, vous pouvez explorer une grille de facettes.
## Grilles de facettes
Les grilles de facettes prennent une facette de votre ensemble de données (dans notre cas, vous pouvez choisir 'année' pour éviter d'avoir trop de facettes produites). Seaborn peut ensuite créer un graphique pour chacune de ces facettes de vos coordonnées `x` et `y` choisies pour une comparaison visuelle plus facile. L'année 2003 se démarque-t-elle dans ce type de comparaison ?
Créez une grille de facettes en continuant à utiliser `relplot` comme recommandé par la [documentation de Seaborn](https://seaborn.pydata.org/generated/seaborn.FacetGrid.html?highlight=facetgrid#seaborn.FacetGrid).
```python
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
```
Dans cette visualisation, vous pouvez comparer le rendement par colonie et le nombre de colonies année après année, côte à côte, avec un wrap défini à 3 pour les colonnes :
![facet grid](../../../../3-Data-Visualization/12-visualization-relationships/images/facet.png)
Pour cet ensemble de données, rien de particulièrement remarquable ne ressort concernant le nombre de colonies et leur rendement, année après année et État par État. Existe-t-il une autre façon de rechercher une corrélation entre ces deux variables ?
## Graphiques à double ligne
Essayez un graphique à lignes multiples en superposant deux graphiques linéaires l'un sur l'autre, en utilisant la fonction 'despine' de Seaborn pour supprimer les bordures supérieure et droite, et en utilisant `ax.twinx` [dérivé de Matplotlib](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.twinx.html). Twinx permet à un graphique de partager l'axe x et d'afficher deux axes y. Affichez donc le rendement par colonie et le nombre de colonies, superposés :
```python
fig, ax = plt.subplots(figsize=(12,6))
lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey,
label = 'Number of bee colonies', legend=False)
sns.despine()
plt.ylabel('# colonies')
plt.title('Honey Production Year over Year');
ax2 = ax.twinx()
lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r",
label ='Yield per colony', legend=False)
sns.despine(right=False)
plt.ylabel('colony yield')
ax.figure.legend();
```
![superimposed plots](../../../../3-Data-Visualization/12-visualization-relationships/images/dual-line.png)
Bien que rien ne saute aux yeux autour de l'année 2003, cela nous permet de terminer cette leçon sur une note un peu plus positive : bien qu'il y ait globalement une diminution du nombre de colonies, ce nombre se stabilise, même si leur rendement par colonie diminue.
Allez, les abeilles, allez !
🐝❤️
## 🚀 Défi
Dans cette leçon, vous avez appris un peu plus sur d'autres utilisations des graphiques de dispersion et des grilles linéaires, y compris les grilles de facettes. Lancez-vous le défi de créer une grille de facettes en utilisant un ensemble de données différent, peut-être un que vous avez utilisé avant ces leçons. Notez combien de temps elles prennent à créer et comment vous devez être prudent quant au nombre de grilles que vous devez dessiner en utilisant ces techniques.
## [Quiz après le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/23)
## Révision et auto-apprentissage
Les graphiques linéaires peuvent être simples ou assez complexes. Faites un peu de lecture dans la [documentation de Seaborn](https://seaborn.pydata.org/generated/seaborn.lineplot.html) sur les différentes façons dont vous pouvez les construire. Essayez d'améliorer les graphiques linéaires que vous avez créés dans cette leçon avec d'autres méthodes listées dans la documentation.
## Devoir
[Plongez dans la ruche](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "680419753c086eef51be86607c623945",
"translation_date": "2025-08-24T13:43:51+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/assignment.md",
"language_code": "fr"
}
-->
# Plongée dans la ruche
## Instructions
Dans cette leçon, vous avez commencé à examiner un ensemble de données sur les abeilles et leur production de miel sur une période marquée par des pertes dans la population des colonies d'abeilles. Explorez plus en profondeur cet ensemble de données et construisez un notebook qui raconte l'histoire de la santé de la population d'abeilles, état par état et année par année. Découvrez-vous quelque chose d'intéressant dans cet ensemble de données ?
## Grille d'évaluation
| Exemplaire | Adéquat | À améliorer |
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------- |
| Un notebook est présenté avec une histoire annotée par au moins trois graphiques différents montrant des aspects de l'ensemble de données, état par état et année par année | Le notebook manque l'un de ces éléments | Le notebook manque deux de ces éléments |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,180 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "4ec4747a9f4f7d194248ea29903ae165",
"translation_date": "2025-08-24T13:33:11+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/README.md",
"language_code": "fr"
}
-->
# Créer des Visualisations Significatives
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/13-MeaningfulViz.png)|
|:---:|
| Visualisations Significatives - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
> "Si vous torturez les données suffisamment longtemps, elles avoueront n'importe quoi" -- [Ronald Coase](https://en.wikiquote.org/wiki/Ronald_Coase)
Une des compétences fondamentales d'un data scientist est la capacité à créer une visualisation de données significative qui aide à répondre aux questions que vous pourriez avoir. Avant de visualiser vos données, vous devez vous assurer qu'elles ont été nettoyées et préparées, comme vous l'avez fait dans les leçons précédentes. Ensuite, vous pouvez commencer à décider de la meilleure manière de présenter les données.
Dans cette leçon, vous allez revoir :
1. Comment choisir le bon type de graphique
2. Comment éviter les graphiques trompeurs
3. Comment travailler avec les couleurs
4. Comment styliser vos graphiques pour une meilleure lisibilité
5. Comment créer des solutions de graphiques animés ou en 3D
6. Comment concevoir une visualisation créative
## [Quiz Pré-Lecture](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/24)
## Choisir le bon type de graphique
Dans les leçons précédentes, vous avez expérimenté la création de différents types de visualisations de données en utilisant Matplotlib et Seaborn. En général, vous pouvez sélectionner le [bon type de graphique](https://chartio.com/learn/charts/how-to-select-a-data-vizualization/) en fonction de la question que vous posez, en utilisant ce tableau :
| Vous devez : | Vous devriez utiliser : |
| -------------------------- | ------------------------------- |
| Montrer des tendances dans le temps | Ligne |
| Comparer des catégories | Barre, Camembert |
| Comparer des totaux | Camembert, Barre empilée |
| Montrer des relations | Nuage de points, Ligne, Facette, Double ligne |
| Montrer des distributions | Nuage de points, Histogramme, Boîte |
| Montrer des proportions | Camembert, Donut, Gaufre |
> ✅ Selon la composition de vos données, vous pourriez avoir besoin de les convertir de texte en numérique pour qu'un graphique donné puisse les prendre en charge.
## Éviter les graphiques trompeurs
Même si un data scientist choisit soigneusement le bon graphique pour les bonnes données, il existe de nombreuses façons de présenter les données de manière à prouver un point, souvent au détriment de la vérité. Il existe de nombreux exemples de graphiques et d'infographies trompeurs !
[![Comment les graphiques mentent par Alberto Cairo](../../../../3-Data-Visualization/13-meaningful-visualizations/images/tornado.png)](https://www.youtube.com/watch?v=oX74Nge8Wkw "Comment les graphiques mentent")
> 🎥 Cliquez sur l'image ci-dessus pour une conférence sur les graphiques trompeurs
Ce graphique inverse l'axe X pour montrer l'opposé de la vérité, basé sur les dates :
![mauvais graphique 1](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-1.png)
[Ce graphique](https://media.firstcoastnews.com/assets/WTLV/images/170ae16f-4643-438f-b689-50d66ca6a8d8/170ae16f-4643-438f-b689-50d66ca6a8d8_1140x641.jpg) est encore plus trompeur, car l'œil est attiré vers la droite pour conclure qu'au fil du temps, les cas de COVID ont diminué dans les différents comtés. En réalité, si vous regardez attentivement les dates, vous constaterez qu'elles ont été réarrangées pour donner cette fausse tendance à la baisse.
![mauvais graphique 2](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-2.jpg)
Cet exemple célèbre utilise la couleur ET un axe Y inversé pour tromper : au lieu de conclure que les décès par arme à feu ont augmenté après l'adoption d'une législation favorable aux armes, l'œil est trompé pour penser que c'est l'inverse :
![mauvais graphique 3](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-3.jpg)
Ce graphique étrange montre comment les proportions peuvent être manipulées, avec un effet hilarant :
![mauvais graphique 4](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-4.jpg)
Comparer l'incomparable est une autre astuce douteuse. Il existe un [site web merveilleux](https://tylervigen.com/spurious-correlations) consacré aux 'corrélations fallacieuses', affichant des 'faits' corrélant des choses comme le taux de divorce dans le Maine et la consommation de margarine. Un groupe Reddit collecte également les [mauvaises utilisations](https://www.reddit.com/r/dataisugly/top/?t=all) des données.
Il est important de comprendre à quel point l'œil peut être facilement trompé par des graphiques trompeurs. Même si l'intention du data scientist est bonne, le choix d'un mauvais type de graphique, comme un camembert montrant trop de catégories, peut induire en erreur.
## Couleur
Vous avez vu dans le graphique sur la 'violence armée en Floride' comment la couleur peut ajouter une couche supplémentaire de signification aux graphiques, en particulier ceux qui ne sont pas conçus avec des bibliothèques comme Matplotlib et Seaborn, qui proposent diverses palettes de couleurs validées. Si vous créez un graphique manuellement, prenez le temps d'étudier un peu la [théorie des couleurs](https://colormatters.com/color-and-design/basic-color-theory).
> ✅ Soyez conscient, lors de la conception de graphiques, que l'accessibilité est un aspect important de la visualisation. Certains de vos utilisateurs pourraient être daltoniens - votre graphique est-il lisible pour les utilisateurs ayant des déficiences visuelles ?
Faites attention lorsque vous choisissez des couleurs pour votre graphique, car elles peuvent transmettre une signification que vous ne souhaitez pas. Les 'dames en rose' dans le graphique sur la 'taille' ci-dessus véhiculent une signification 'féminine' qui ajoute à l'étrangeté du graphique lui-même.
Bien que [la signification des couleurs](https://colormatters.com/color-symbolism/the-meanings-of-colors) puisse varier selon les régions du monde et changer selon leur nuance, en général, les significations des couleurs incluent :
| Couleur | Signification |
| ------- | ---------------------- |
| rouge | pouvoir |
| bleu | confiance, loyauté |
| jaune | bonheur, prudence |
| vert | écologie, chance, envie|
| violet | bonheur |
| orange | dynamisme |
Si vous devez créer un graphique avec des couleurs personnalisées, assurez-vous que vos graphiques sont à la fois accessibles et que les couleurs choisies correspondent à la signification que vous souhaitez transmettre.
## Styliser vos graphiques pour une meilleure lisibilité
Les graphiques ne sont pas significatifs s'ils ne sont pas lisibles ! Prenez un moment pour réfléchir à la mise à l'échelle de la largeur et de la hauteur de votre graphique pour qu'il s'adapte bien à vos données. Si une variable (comme les 50 États) doit être affichée, montrez-les verticalement sur l'axe Y si possible, afin d'éviter un graphique nécessitant un défilement horizontal.
Étiquetez vos axes, fournissez une légende si nécessaire, et proposez des infobulles pour une meilleure compréhension des données.
Si vos données sont textuelles et longues sur l'axe X, vous pouvez incliner le texte pour une meilleure lisibilité. [Matplotlib](https://matplotlib.org/stable/tutorials/toolkits/mplot3d.html) propose des graphiques en 3D, si vos données s'y prêtent. Des visualisations sophistiquées peuvent être produites en utilisant `mpl_toolkits.mplot3d`.
![graphique 3D](../../../../3-Data-Visualization/13-meaningful-visualizations/images/3d.png)
## Animation et affichage de graphiques en 3D
Certaines des meilleures visualisations de données aujourd'hui sont animées. Shirley Wu en a créé d'incroyables avec D3, comme '[film flowers](http://bl.ocks.org/sxywu/raw/d612c6c653fb8b4d7ff3d422be164a5d/)', où chaque fleur est une visualisation d'un film. Un autre exemple pour le Guardian est 'bussed out', une expérience interactive combinant des visualisations avec Greensock et D3, ainsi qu'un format d'article narratif pour montrer comment NYC gère son problème de sans-abris en envoyant des gens hors de la ville.
![busing](../../../../3-Data-Visualization/13-meaningful-visualizations/images/busing.png)
> "Bussed Out: How America Moves its Homeless" du [Guardian](https://www.theguardian.com/us-news/ng-interactive/2017/dec/20/bussed-out-america-moves-homeless-people-country-study). Visualisations par Nadieh Bremer & Shirley Wu
Bien que cette leçon ne soit pas suffisante pour enseigner en profondeur ces puissantes bibliothèques de visualisation, essayez D3 dans une application Vue.js en utilisant une bibliothèque pour afficher une visualisation du livre "Les Liaisons Dangereuses" comme un réseau social animé.
> "Les Liaisons Dangereuses" est un roman épistolaire, ou un roman présenté comme une série de lettres. Écrit en 1782 par Choderlos de Laclos, il raconte les manœuvres sociales vicieuses et moralement corrompues de deux protagonistes de l'aristocratie française du XVIIIe siècle, le Vicomte de Valmont et la Marquise de Merteuil. Tous deux rencontrent leur perte à la fin, mais pas sans avoir causé de nombreux dégâts sociaux. Le roman se déroule comme une série de lettres écrites à diverses personnes de leur cercle, complotant pour se venger ou simplement pour semer le trouble. Créez une visualisation de ces lettres pour découvrir les principaux acteurs du récit, visuellement.
Vous allez compléter une application web qui affichera une vue animée de ce réseau social. Elle utilise une bibliothèque conçue pour créer une [visualisation d'un réseau](https://github.com/emiliorizzo/vue-d3-network) avec Vue.js et D3. Lorsque l'application est en cours d'exécution, vous pouvez déplacer les nœuds sur l'écran pour réorganiser les données.
![liaisons](../../../../3-Data-Visualization/13-meaningful-visualizations/images/liaisons.png)
## Projet : Construire un graphique pour montrer un réseau avec D3.js
> Ce dossier de leçon inclut un dossier `solution` où vous pouvez trouver le projet complété, pour référence.
1. Suivez les instructions dans le fichier README.md à la racine du dossier starter. Assurez-vous d'avoir NPM et Node.js installés sur votre machine avant d'installer les dépendances du projet.
2. Ouvrez le dossier `starter/src`. Vous y trouverez un dossier `assets` contenant un fichier .json avec toutes les lettres du roman, numérotées, avec une annotation 'to' et 'from'.
3. Complétez le code dans `components/Nodes.vue` pour activer la visualisation. Recherchez la méthode appelée `createLinks()` et ajoutez la boucle imbriquée suivante.
Parcourez l'objet .json pour capturer les données 'to' et 'from' des lettres et construisez l'objet `links` afin que la bibliothèque de visualisation puisse l'utiliser :
```javascript
//loop through letters
let f = 0;
let t = 0;
for (var i = 0; i < letters.length; i++) {
for (var j = 0; j < characters.length; j++) {
if (characters[j] == letters[i].from) {
f = j;
}
if (characters[j] == letters[i].to) {
t = j;
}
}
this.links.push({ sid: f, tid: t });
}
```
Exécutez votre application depuis le terminal (npm run serve) et profitez de la visualisation !
## 🚀 Défi
Faites un tour sur Internet pour découvrir des visualisations trompeuses. Comment l'auteur trompe-t-il l'utilisateur, et est-ce intentionnel ? Essayez de corriger les visualisations pour montrer à quoi elles devraient ressembler.
## [Quiz Post-Lecture](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/25)
## Révision & Étude Personnelle
Voici quelques articles à lire sur les visualisations de données trompeuses :
https://gizmodo.com/how-to-lie-with-data-visualization-1563576606
http://ixd.prattsi.org/2017/12/visual-lies-usability-in-deceptive-data-visualizations/
Découvrez ces visualisations intéressantes pour des actifs et artefacts historiques :
https://handbook.pubpub.org/
Lisez cet article sur la manière dont l'animation peut améliorer vos visualisations :
https://medium.com/@EvanSinar/use-animation-to-supercharge-data-visualization-cd905a882ad4
## Devoir
[Créez votre propre visualisation personnalisée](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "e56df4c0f49357e30ac8fc77aa439dd4",
"translation_date": "2025-08-24T13:35:06+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/assignment.md",
"language_code": "fr"
}
-->
# Créez votre propre visualisation personnalisée
## Instructions
En utilisant l'exemple de code fourni dans ce projet pour créer un réseau social, concevez des données représentant vos propres interactions sociales. Vous pourriez cartographier votre utilisation des réseaux sociaux ou créer un diagramme de vos membres de famille. Développez une application web intéressante qui propose une visualisation unique d'un réseau social.
## Critères d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Un dépôt GitHub est présenté avec un code qui fonctionne correctement (essayez de le déployer en tant qu'application web statique) et contient un fichier README annoté expliquant le projet | Le dépôt ne fonctionne pas correctement ou n'est pas bien documenté | Le dépôt ne fonctionne pas correctement et n'est pas bien documenté
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,38 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "5c51a54dd89075a7a362890117b7ed9e",
"translation_date": "2025-08-24T13:36:16+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/solution/README.md",
"language_code": "fr"
}
-->
# Projet de visualisation des données Dangerous Liaisons
Pour commencer, vous devez vous assurer que NPM et Node sont installés et fonctionnent sur votre machine. Installez les dépendances (npm install) puis exécutez le projet en local (npm run serve) :
## Configuration du projet
```
npm install
```
### Compile et recharge à chaud pour le développement
```
npm run serve
```
### Compile et minifie pour la production
```
npm run build
```
### Analyse et corrige les fichiers
```
npm run lint
```
### Personnaliser la configuration
Voir [Référence de configuration](https://cli.vuejs.org/config/).
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,38 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "5c51a54dd89075a7a362890117b7ed9e",
"translation_date": "2025-08-24T13:35:42+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/starter/README.md",
"language_code": "fr"
}
-->
# Projet de visualisation de données Dangerous Liaisons
Pour commencer, vous devez vous assurer que NPM et Node sont installés et fonctionnent sur votre machine. Installez les dépendances (npm install) puis exécutez le projet en local (npm run serve) :
## Configuration du projet
```
npm install
```
### Compilation et rechargement à chaud pour le développement
```
npm run serve
```
### Compilation et minification pour la production
```
npm run build
```
### Analyse et correction des fichiers
```
npm run lint
```
### Personnaliser la configuration
Voir [Référence de configuration](https://cli.vuejs.org/config/).
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction professionnelle humaine. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,230 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "22acf28f518a4769ea14fa42f4734b9f",
"translation_date": "2025-08-24T13:53:41+00:00",
"source_file": "3-Data-Visualization/R/09-visualization-quantities/README.md",
"language_code": "fr"
}
-->
# Visualiser des quantités
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| Visualiser des quantités - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Dans cette leçon, vous allez explorer comment utiliser certaines des nombreuses bibliothèques de packages R disponibles pour apprendre à créer des visualisations intéressantes autour du concept de quantité. En utilisant un ensemble de données nettoyé sur les oiseaux du Minnesota, vous pouvez découvrir de nombreux faits intéressants sur la faune locale.
## [Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/16)
## Observer l'envergure des ailes avec ggplot2
Une bibliothèque excellente pour créer des graphiques et des diagrammes simples ou sophistiqués de divers types est [ggplot2](https://cran.r-project.org/web/packages/ggplot2/index.html). En termes généraux, le processus de création de graphiques à l'aide de ces bibliothèques inclut l'identification des parties de votre dataframe que vous souhaitez cibler, la réalisation des transformations nécessaires sur ces données, l'attribution des valeurs des axes x et y, le choix du type de graphique à afficher, puis l'affichage du graphique.
`ggplot2` est un système pour créer des graphiques de manière déclarative, basé sur la grammaire des graphiques. La [grammaire des graphiques](https://en.wikipedia.org/wiki/Ggplot2) est un schéma général pour la visualisation des données qui divise les graphiques en composants sémantiques tels que les échelles et les couches. En d'autres termes, la facilité de création de graphiques pour des données univariées ou multivariées avec peu de code fait de `ggplot2` le package le plus populaire utilisé pour les visualisations en R. L'utilisateur indique à `ggplot2` comment mapper les variables aux esthétiques, les primitives graphiques à utiliser, et `ggplot2` s'occupe du reste.
> ✅ Graphique = Données + Esthétiques + Géométrie
> - Les données font référence à l'ensemble de données
> - Les esthétiques indiquent les variables à étudier (variables x et y)
> - La géométrie fait référence au type de graphique (graphique linéaire, diagramme en barres, etc.)
Choisissez la meilleure géométrie (type de graphique) en fonction de vos données et de l'histoire que vous souhaitez raconter à travers le graphique.
> - Pour analyser les tendances : ligne, colonne
> - Pour comparer des valeurs : barre, colonne, camembert, nuage de points
> - Pour montrer comment les parties se rapportent à un tout : camembert
> - Pour montrer la distribution des données : nuage de points, barre
> - Pour montrer les relations entre les valeurs : ligne, nuage de points, bulle
✅ Vous pouvez également consulter cette [cheatsheet descriptive](https://nyu-cdsc.github.io/learningr/assets/data-visualization-2.1.pdf) pour ggplot2.
## Construire un graphique linéaire sur les valeurs d'envergure des ailes des oiseaux
Ouvrez la console R et importez l'ensemble de données.
> Note : L'ensemble de données est stocké à la racine de ce dépôt dans le dossier `/data`.
Importons l'ensemble de données et observons les premières lignes (les 5 premières lignes) des données.
```r
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
head(birds)
```
Les premières lignes des données contiennent un mélange de texte et de chiffres :
| | Nom | NomScientifique | Catégorie | Ordre | Famille | Genre | StatutConservation | LongueurMin | LongueurMax | MasseMinCorps | MasseMaxCorps | EnvergureMin | EnvergureMax |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | -----------:| -----------:| -------------:| -------------:| ------------:| ------------:|
| 0 | Dendrocygne à ventre noir | Dendrocygna autumnalis | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | Dendrocygne fauve | Dendrocygna bicolor | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | Oie des neiges | Anser caerulescens | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | Oie de Ross | Anser rossii | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | Oie rieuse | Anser albifrons | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Commençons par tracer certaines des données numériques à l'aide d'un graphique linéaire de base. Supposons que vous souhaitiez une vue de l'envergure maximale pour ces oiseaux intéressants.
```r
install.packages("ggplot2")
library("ggplot2")
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line()
```
Ici, vous installez le package `ggplot2` puis l'importez dans l'espace de travail à l'aide de la commande `library("ggplot2")`. Pour tracer un graphique dans ggplot, la fonction `ggplot()` est utilisée et vous spécifiez l'ensemble de données, les variables x et y comme attributs. Dans ce cas, nous utilisons la fonction `geom_line()` car nous visons à tracer un graphique linéaire.
![MaxWingspan-lineplot](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/MaxWingspan-lineplot.png)
Que remarquez-vous immédiatement ? Il semble y avoir au moins un point aberrant - quelle envergure impressionnante ! Une envergure de plus de 2000 centimètres équivaut à plus de 20 mètres - y aurait-il des ptérodactyles qui rôdent dans le Minnesota ? Enquêtons.
Bien que vous puissiez effectuer un tri rapide dans Excel pour trouver ces points aberrants, qui sont probablement des erreurs de saisie, continuez le processus de visualisation en travaillant directement depuis le graphique.
Ajoutez des étiquettes à l'axe x pour montrer de quels types d'oiseaux il s'agit :
```r
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line() +
theme(axis.text.x = element_text(angle = 45, hjust=1))+
xlab("Birds") +
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters")
```
Nous spécifions l'angle dans le `theme` et spécifions les étiquettes des axes x et y dans `xlab()` et `ylab()` respectivement. Le `ggtitle()` donne un nom au graphique.
![MaxWingspan-lineplot-improved](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/MaxWingspan-lineplot-improved.png)
Même avec la rotation des étiquettes réglée à 45 degrés, il y en a trop pour être lisibles. Essayons une stratégie différente : étiqueter uniquement les points aberrants et placer les étiquettes directement dans le graphique. Vous pouvez utiliser un graphique en nuage de points pour faire plus de place aux étiquettes :
```r
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank())
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters") +
```
Que se passe-t-il ici ? Vous avez utilisé la fonction `geom_point()` pour tracer des points de dispersion. Avec cela, vous avez ajouté des étiquettes pour les oiseaux ayant une `MaxWingspan > 500` et également masqué les étiquettes sur l'axe x pour désencombrer le graphique.
Que découvrez-vous ?
![MaxWingspan-scatterplot](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/MaxWingspan-scatterplot.png)
## Filtrer vos données
Le pygargue à tête blanche et le faucon des prairies, bien qu'étant probablement de très grands oiseaux, semblent être mal étiquetés, avec un zéro supplémentaire ajouté à leur envergure maximale. Il est peu probable que vous rencontriez un pygargue à tête blanche avec une envergure de 25 mètres, mais si c'est le cas, faites-le nous savoir ! Créons un nouveau dataframe sans ces deux points aberrants :
```r
birds_filtered <- subset(birds, MaxWingspan < 500)
ggplot(data=birds_filtered, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
ylab("Wingspan (CM)") +
xlab("Birds") +
ggtitle("Max Wingspan in Centimeters") +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.text.x=element_blank(), axis.ticks.x=element_blank())
```
Nous avons créé un nouveau dataframe `birds_filtered` puis tracé un graphique en nuage de points. En filtrant les points aberrants, vos données sont maintenant plus cohérentes et compréhensibles.
![MaxWingspan-scatterplot-improved](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/MaxWingspan-scatterplot-improved.png)
Maintenant que nous avons un ensemble de données plus propre, du moins en termes d'envergure, découvrons-en davantage sur ces oiseaux.
Bien que les graphiques linéaires et en nuage de points puissent afficher des informations sur les valeurs des données et leur distribution, nous voulons réfléchir aux valeurs inhérentes à cet ensemble de données. Vous pourriez créer des visualisations pour répondre aux questions suivantes sur les quantités :
> Combien de catégories d'oiseaux existe-t-il, et quels sont leurs nombres ?
> Combien d'oiseaux sont éteints, en danger, rares ou communs ?
> Combien y a-t-il de genres et d'ordres différents selon la terminologie de Linné ?
## Explorer les diagrammes en barres
Les diagrammes en barres sont pratiques lorsque vous devez montrer des regroupements de données. Explorons les catégories d'oiseaux présentes dans cet ensemble de données pour voir laquelle est la plus courante en nombre.
Créons un diagramme en barres sur les données filtrées.
```r
install.packages("dplyr")
install.packages("tidyverse")
library(lubridate)
library(scales)
library(dplyr)
library(ggplot2)
library(tidyverse)
birds_filtered %>% group_by(Category) %>%
summarise(n=n(),
MinLength = mean(MinLength),
MaxLength = mean(MaxLength),
MinBodyMass = mean(MinBodyMass),
MaxBodyMass = mean(MaxBodyMass),
MinWingspan=mean(MinWingspan),
MaxWingspan=mean(MaxWingspan)) %>%
gather("key", "value", - c(Category, n)) %>%
ggplot(aes(x = Category, y = value, group = key, fill = key)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("#D62728", "#FF7F0E", "#8C564B","#2CA02C", "#1F77B4", "#9467BD")) +
xlab("Category")+ggtitle("Birds of Minnesota")
```
Dans l'extrait suivant, nous installons les packages [dplyr](https://www.rdocumentation.org/packages/dplyr/versions/0.7.8) et [lubridate](https://www.rdocumentation.org/packages/lubridate/versions/1.8.0) pour aider à manipuler et regrouper les données afin de tracer un diagramme en barres empilées. Tout d'abord, vous regroupez les données par la `Category` des oiseaux, puis vous résumez les colonnes `MinLength`, `MaxLength`, `MinBodyMass`, `MaxBodyMass`, `MinWingspan`, `MaxWingspan`. Ensuite, vous tracez le diagramme en barres à l'aide du package `ggplot2` et spécifiez les couleurs pour les différentes catégories et les étiquettes.
![Stacked bar chart](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/stacked-bar-chart.png)
Ce diagramme en barres, cependant, est illisible car il y a trop de données non regroupées. Vous devez sélectionner uniquement les données que vous souhaitez tracer, alors regardons la longueur des oiseaux en fonction de leur catégorie.
Filtrez vos données pour inclure uniquement la catégorie des oiseaux.
Étant donné qu'il y a de nombreuses catégories, vous pouvez afficher ce graphique verticalement et ajuster sa hauteur pour tenir compte de toutes les données :
```r
birds_count<-dplyr::count(birds_filtered, Category, sort = TRUE)
birds_count$Category <- factor(birds_count$Category, levels = birds_count$Category)
ggplot(birds_count,aes(Category,n))+geom_bar(stat="identity")+coord_flip()
```
Vous comptez d'abord les valeurs uniques dans la colonne `Category` puis les triez dans un nouveau dataframe `birds_count`. Ces données triées sont ensuite facturées au même niveau afin qu'elles soient tracées de manière triée. En utilisant `ggplot2`, vous tracez ensuite les données dans un diagramme en barres. Le `coord_flip()` trace des barres horizontales.
![category-length](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/category-length.png)
Ce diagramme en barres montre une bonne vue du nombre d'oiseaux dans chaque catégorie. En un clin d'œil, vous voyez que le plus grand nombre d'oiseaux dans cette région appartient à la catégorie Canards/Oies/Oiseaux aquatiques. Le Minnesota est le "pays des 10 000 lacs", donc ce n'est pas surprenant !
✅ Essayez d'autres comptages sur cet ensemble de données. Y a-t-il quelque chose qui vous surprend ?
## Comparer les données
Vous pouvez essayer différentes comparaisons de données regroupées en créant de nouveaux axes. Essayez une comparaison de la longueur maximale d'un oiseau, en fonction de sa catégorie :
```r
birds_grouped <- birds_filtered %>%
group_by(Category) %>%
summarise(
MaxLength = max(MaxLength, na.rm = T),
MinLength = max(MinLength, na.rm = T)
) %>%
arrange(Category)
ggplot(birds_grouped,aes(Category,MaxLength))+geom_bar(stat="identity")+coord_flip()
```
Nous regroupons les données `birds_filtered` par `Category` puis traçons un graphique en barres.
![comparing data](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/comparingdata.png)
Rien de surprenant ici : les colibris ont la longueur maximale la plus faible par rapport aux pélicans ou aux oies. C'est bien lorsque les données ont du sens logiquement !
Vous pouvez créer des visualisations plus intéressantes de diagrammes en barres en superposant des données. Superposons la longueur minimale et maximale pour une catégorie d'oiseaux donnée :
```r
ggplot(data=birds_grouped, aes(x=Category)) +
geom_bar(aes(y=MaxLength), stat="identity", position ="identity", fill='blue') +
geom_bar(aes(y=MinLength), stat="identity", position="identity", fill='orange')+
coord_flip()
```
![super-imposed values](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/superimposed-values.png)
## 🚀 Défi
Cet ensemble de données sur les oiseaux offre une mine d'informations sur différents types d'oiseaux au sein d'un écosystème particulier. Cherchez sur Internet et voyez si vous pouvez trouver d'autres ensembles de données orientés vers les oiseaux. Entraînez-vous à créer des graphiques et des diagrammes autour de ces oiseaux pour découvrir des faits que vous ne connaissiez pas.
## [Quiz après la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/17)
## Révision et auto-apprentissage
Cette première leçon vous a donné des informations sur la façon d'utiliser `ggplot2` pour visualiser des quantités. Faites des recherches sur d'autres façons de travailler avec des ensembles de données pour la visualisation. Recherchez et explorez des ensembles de données que vous pourriez visualiser en utilisant d'autres packages comme [Lattice](https://stat.ethz.ch/R-manual/R-devel/library/lattice/html/Lattice.html) et [Plotly](https://github.com/plotly/plotly.R#readme).
## Devoir
[Graphiques linéaires, nuages de points et barres](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "0ea21b6513df5ade7419c6b7d65f10b1",
"translation_date": "2025-08-24T13:56:15+00:00",
"source_file": "3-Data-Visualization/R/09-visualization-quantities/assignment.md",
"language_code": "fr"
}
-->
# Lignes, Nuages de Points et Barres
## Instructions
Dans cette leçon, vous avez travaillé avec des graphiques en ligne, des nuages de points et des graphiques en barres pour mettre en évidence des faits intéressants sur ce jeu de données. Dans cet exercice, explorez plus en profondeur le jeu de données pour découvrir un fait sur un type d'oiseau donné. Par exemple, créez un script visualisant toutes les données intéressantes que vous pouvez trouver sur les Oies des neiges. Utilisez les trois types de graphiques mentionnés ci-dessus pour raconter une histoire dans votre notebook.
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Un script est présenté avec de bonnes annotations, une narration solide et des graphiques attrayants | Le script manque d'un de ces éléments | Le script manque de deux de ces éléments
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,183 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "ea67c0c40808fd723594de6896c37ccf",
"translation_date": "2025-08-24T13:45:36+00:00",
"source_file": "3-Data-Visualization/R/10-visualization-distributions/README.md",
"language_code": "fr"
}
-->
# Visualiser les distributions
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| Visualiser les distributions - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Dans la leçon précédente, vous avez appris des faits intéressants sur un jeu de données concernant les oiseaux du Minnesota. Vous avez identifié des données erronées en visualisant les valeurs aberrantes et examiné les différences entre les catégories d'oiseaux en fonction de leur longueur maximale.
## [Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
## Explorer le jeu de données des oiseaux
Une autre façon d'explorer les données est d'examiner leur distribution, c'est-à-dire comment elles sont organisées le long d'un axe. Par exemple, vous pourriez vouloir en savoir plus sur la distribution générale, dans ce jeu de données, de l'envergure maximale ou de la masse corporelle maximale des oiseaux du Minnesota.
Découvrons quelques faits sur les distributions des données dans ce jeu de données. Dans votre console R, importez `ggplot2` et la base de données. Supprimez les valeurs aberrantes de la base de données comme dans le sujet précédent.
```r
library(ggplot2)
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
birds_filtered <- subset(birds, MaxWingspan < 500)
head(birds_filtered)
```
| | Nom | NomScientifique | Catégorie | Ordre | Famille | Genre | StatutConservation | LongueurMin | LongueurMax | MasseCorporelleMin | MasseCorporelleMax | EnvergureMin | EnvergureMax |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | -----------:| -----------:| ------------------:| ------------------:| ------------:| ------------:|
| 0 | Dendrocygne à ventre noir | Dendrocygna autumnalis | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | Dendrocygne fauve | Dendrocygna bicolor | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | Oie des neiges | Anser caerulescens | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | Oie de Ross | Anser rossii | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | Oie rieuse | Anser albifrons | Canards/Oies/Oiseaux aquatiques | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
En général, vous pouvez rapidement examiner la façon dont les données sont distribuées en utilisant un nuage de points, comme nous l'avons fait dans la leçon précédente :
```r
ggplot(data=birds_filtered, aes(x=Order, y=MaxLength,group=1)) +
geom_point() +
ggtitle("Max Length per order") + coord_flip()
```
![longueur max par ordre](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/max-length-per-order.png)
Cela donne un aperçu de la distribution générale de la longueur corporelle par ordre d'oiseaux, mais ce n'est pas la meilleure façon de représenter les distributions réelles. Cette tâche est généralement accomplie en créant un histogramme.
## Travailler avec des histogrammes
`ggplot2` offre d'excellents moyens de visualiser la distribution des données à l'aide d'histogrammes. Ce type de graphique ressemble à un diagramme en barres où la distribution peut être observée à travers la montée et la descente des barres. Pour construire un histogramme, vous avez besoin de données numériques. Pour créer un histogramme, vous pouvez tracer un graphique en définissant le type comme 'hist' pour Histogramme. Ce graphique montre la distribution de la MasseCorporelleMax pour l'ensemble de la plage de données numériques du jeu de données. En divisant l'ensemble des données en plus petits intervalles, il peut afficher la distribution des valeurs des données :
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
geom_histogram(bins=10)+ylab('Frequency')
```
![distribution sur l'ensemble du jeu de données](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/distribution-over-the-entire-dataset.png)
Comme vous pouvez le voir, la plupart des 400+ oiseaux de ce jeu de données ont une MasseCorporelleMax inférieure à 2000. Obtenez plus d'informations sur les données en modifiant le paramètre `bins` à une valeur plus élevée, comme 30 :
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')
```
![distribution-30bins](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/distribution-30bins.png)
Ce graphique montre la distribution de manière un peu plus détaillée. Un graphique moins biaisé vers la gauche pourrait être créé en s'assurant que vous ne sélectionnez que des données dans une plage donnée :
Filtrez vos données pour ne conserver que les oiseaux dont la masse corporelle est inférieure à 60, et affichez 30 `bins` :
```r
birds_filtered_1 <- subset(birds_filtered, MaxBodyMass > 1 & MaxBodyMass < 60)
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_histogram(bins=30)+ylab('Frequency')
```
![histogramme filtré](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/filtered-histogram.png)
✅ Essayez d'autres filtres et points de données. Pour voir la distribution complète des données, supprimez le filtre `['MaxBodyMass']` pour afficher les distributions étiquetées.
L'histogramme offre également des améliorations intéressantes en termes de couleur et d'étiquetage :
Créez un histogramme 2D pour comparer la relation entre deux distributions. Comparons `MaxBodyMass` et `MaxLength`. `ggplot2` propose une méthode intégrée pour montrer la convergence à l'aide de couleurs plus vives :
```r
ggplot(data=birds_filtered_1, aes(x=MaxBodyMass, y=MaxLength) ) +
geom_bin2d() +scale_fill_continuous(type = "viridis")
```
Il semble y avoir une corrélation attendue entre ces deux éléments le long d'un axe attendu, avec un point de convergence particulièrement fort :
![graphique 2D](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/2d-plot.png)
Les histogrammes fonctionnent bien par défaut pour les données numériques. Que faire si vous devez examiner les distributions en fonction de données textuelles ?
## Explorer le jeu de données pour les distributions à l'aide de données textuelles
Ce jeu de données contient également de bonnes informations sur la catégorie des oiseaux, leur genre, leur espèce, leur famille ainsi que leur statut de conservation. Explorons ces informations de conservation. Quelle est la distribution des oiseaux selon leur statut de conservation ?
> ✅ Dans le jeu de données, plusieurs acronymes sont utilisés pour décrire le statut de conservation. Ces acronymes proviennent des [Catégories de la Liste Rouge de l'UICN](https://www.iucnredlist.org/), une organisation qui catalogue le statut des espèces.
>
> - CR : En danger critique d'extinction
> - EN : En danger
> - EX : Éteint
> - LC : Préoccupation mineure
> - NT : Quasi menacé
> - VU : Vulnérable
Ces valeurs sont basées sur du texte, vous devrez donc effectuer une transformation pour créer un histogramme. En utilisant le dataframe filteredBirds, affichez son statut de conservation avec son EnvergureMin. Que remarquez-vous ?
```r
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EX'] <- 'x1'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'CR'] <- 'x2'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EN'] <- 'x3'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'NT'] <- 'x4'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'VU'] <- 'x5'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'LC'] <- 'x6'
ggplot(data=birds_filtered_1, aes(x = MinWingspan, fill = ConservationStatus)) +
geom_histogram(position = "identity", alpha = 0.4, bins = 20) +
scale_fill_manual(name="Conservation Status",values=c("red","green","blue","pink"),labels=c("Endangered","Near Threathened","Vulnerable","Least Concern"))
```
![collation envergure et conservation](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/wingspan-conservation-collation.png)
Il ne semble pas y avoir de bonne corrélation entre l'envergure minimale et le statut de conservation. Testez d'autres éléments du jeu de données en utilisant cette méthode. Vous pouvez également essayer différents filtres. Trouvez-vous une corrélation ?
## Graphiques de densité
Vous avez peut-être remarqué que les histogrammes que nous avons examinés jusqu'à présent sont "en escalier" et ne s'écoulent pas de manière fluide en arc. Pour afficher un graphique de densité plus fluide, vous pouvez essayer un graphique de densité.
Travaillons maintenant avec des graphiques de densité !
```r
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
geom_density()
```
![graphique de densité](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/density-plot.png)
Vous pouvez voir comment le graphique reflète le précédent pour les données d'EnvergureMin ; il est juste un peu plus fluide. Si vous vouliez revisiter cette ligne irrégulière de MasseCorporelleMax dans le deuxième graphique que vous avez construit, vous pourriez la lisser très bien en la recréant avec cette méthode :
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density()
```
![densité masse corporelle](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/bodymass-smooth.png)
Si vous vouliez une ligne lisse, mais pas trop lisse, modifiez le paramètre `adjust` :
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density(adjust = 1/5)
```
![masse corporelle moins lisse](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/less-smooth-bodymass.png)
✅ Lisez les paramètres disponibles pour ce type de graphique et expérimentez !
Ce type de graphique offre des visualisations magnifiquement explicatives. Avec quelques lignes de code, par exemple, vous pouvez montrer la densité de la masse corporelle maximale par ordre d'oiseaux :
```r
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
geom_density(alpha=0.5)
```
![masse corporelle par ordre](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/bodymass-per-order.png)
## 🚀 Défi
Les histogrammes sont un type de graphique plus sophistiqué que les nuages de points, les diagrammes en barres ou les graphiques linéaires de base. Faites une recherche sur Internet pour trouver de bons exemples d'utilisation des histogrammes. Comment sont-ils utilisés, que démontrent-ils, et dans quels domaines ou champs d'étude ont-ils tendance à être utilisés ?
## [Quiz après la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)
## Révision et auto-apprentissage
Dans cette leçon, vous avez utilisé `ggplot2` et commencé à travailler sur des graphiques plus sophistiqués. Faites des recherches sur `geom_density_2d()` une "courbe de densité de probabilité continue dans une ou plusieurs dimensions". Lisez la [documentation](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) pour comprendre comment cela fonctionne.
## Devoir
[Appliquez vos compétences](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "a233d542512136c4dd29aad38ca0175f",
"translation_date": "2025-08-24T13:47:22+00:00",
"source_file": "3-Data-Visualization/R/10-visualization-distributions/assignment.md",
"language_code": "fr"
}
-->
# Appliquez vos compétences
## Instructions
Jusqu'à présent, vous avez travaillé avec le jeu de données sur les oiseaux du Minnesota pour découvrir des informations sur les quantités d'oiseaux et la densité de population. Mettez en pratique vos compétences en appliquant ces techniques à un autre jeu de données, peut-être issu de [Kaggle](https://www.kaggle.com/). Créez un script R pour raconter une histoire à partir de ce jeu de données, et assurez-vous d'utiliser des histogrammes pour en discuter.
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | --- |
Un script est présenté avec des annotations sur ce jeu de données, y compris sa source, et utilise au moins 5 histogrammes pour découvrir des faits sur les données. | Un script est présenté avec des annotations incomplètes ou des erreurs. | Un script est présenté sans annotations et contient des erreurs.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,197 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "47028abaaafa2bcb1079702d20569066",
"translation_date": "2025-08-24T14:01:08+00:00",
"source_file": "3-Data-Visualization/R/11-visualization-proportions/README.md",
"language_code": "fr"
}
-->
# Visualiser les proportions
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/11-Visualizing-Proportions.png)|
|:---:|
|Visualiser les proportions - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Dans cette leçon, vous utiliserez un ensemble de données axé sur la nature pour visualiser des proportions, comme le nombre de types différents de champignons présents dans un ensemble de données sur les champignons. Explorons ces fascinants champignons à l'aide d'un ensemble de données provenant d'Audubon, qui répertorie des informations sur 23 espèces de champignons à lamelles des familles Agaricus et Lepiota. Vous expérimenterez des visualisations savoureuses telles que :
- Les diagrammes circulaires 🥧
- Les diagrammes en anneau 🍩
- Les graphiques en gaufre 🧇
> 💡 Un projet très intéressant appelé [Charticulator](https://charticulator.com) de Microsoft Research propose une interface gratuite de glisser-déposer pour les visualisations de données. Dans l'un de leurs tutoriels, ils utilisent également cet ensemble de données sur les champignons ! Vous pouvez donc explorer les données et apprendre à utiliser la bibliothèque en même temps : [Tutoriel Charticulator](https://charticulator.com/tutorials/tutorial4.html).
## [Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/20)
## Faites connaissance avec vos champignons 🍄
Les champignons sont très intéressants. Importons un ensemble de données pour les étudier :
```r
mushrooms = read.csv('../../data/mushrooms.csv')
head(mushrooms)
```
Un tableau est affiché avec des données intéressantes pour l'analyse :
| classe | forme-chapeau | surface-chapeau | couleur-chapeau | meurtri | odeur | attache-lamelle | espacement-lamelle | taille-lamelle | couleur-lamelle | forme-pied | racine-pied | surface-pied-au-dessus-anneau | surface-pied-en-dessous-anneau | couleur-pied-au-dessus-anneau | couleur-pied-en-dessous-anneau | type-voile | couleur-voile | nombre-anneaux | type-anneau | couleur-spores | population | habitat |
| --------- | ------------- | ---------------- | --------------- | ------- | -------- | ---------------- | ------------------ | -------------- | --------------- | ---------- | ----------- | --------------------------- | ----------------------------- | ---------------------------- | ----------------------------- | ---------- | ------------- | -------------- | ---------- | ------------- | ---------- | ------- |
| Toxique | Convexe | Lisse | Marron | Meurtri | Piquant | Libre | Serré | Étroit | Noir | Élargi | Égal | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Noir | Dispersé | Urbain |
| Comestible| Convexe | Lisse | Jaune | Meurtri | Amande | Libre | Serré | Large | Noir | Élargi | Massue | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Marron | Nombreux | Herbes |
| Comestible| Cloché | Lisse | Blanc | Meurtri | Anis | Libre | Serré | Large | Marron | Élargi | Massue | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Marron | Nombreux | Prairies |
| Toxique | Convexe | Écailleux | Blanc | Meurtri | Piquant | Libre | Serré | Étroit | Marron | Élargi | Égal | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Noir | Dispersé | Urbain |
| Comestible| Convexe | Lisse | Vert | Pas meurtri | Aucun | Libre | Serré | Large | Noir | Effilé | Égal | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Évanescent | Marron | Abondant | Herbes |
| Comestible| Convexe | Écailleux | Jaune | Meurtri | Amande | Libre | Serré | Large | Marron | Élargi | Massue | Lisse | Lisse | Blanc | Blanc | Partiel | Blanc | Un | Pendant | Noir | Nombreux | Herbes |
Vous remarquez immédiatement que toutes les données sont textuelles. Vous devrez convertir ces données pour pouvoir les utiliser dans un graphique. La plupart des données, en fait, sont représentées comme un objet :
```r
names(mushrooms)
```
Le résultat est :
```output
[1] "class" "cap.shape"
[3] "cap.surface" "cap.color"
[5] "bruises" "odor"
[7] "gill.attachment" "gill.spacing"
[9] "gill.size" "gill.color"
[11] "stalk.shape" "stalk.root"
[13] "stalk.surface.above.ring" "stalk.surface.below.ring"
[15] "stalk.color.above.ring" "stalk.color.below.ring"
[17] "veil.type" "veil.color"
[19] "ring.number" "ring.type"
[21] "spore.print.color" "population"
[23] "habitat"
```
Prenez ces données et convertissez la colonne 'classe' en catégorie :
```r
library(dplyr)
grouped=mushrooms %>%
group_by(class) %>%
summarise(count=n())
```
Maintenant, si vous affichez les données des champignons, vous pouvez voir qu'elles ont été regroupées en catégories selon la classe toxique/comestible :
```r
View(grouped)
```
| classe | nombre |
| --------- | ------ |
| Comestible| 4208 |
| Toxique | 3916 |
Si vous suivez l'ordre présenté dans ce tableau pour créer vos étiquettes de catégorie de classe, vous pouvez construire un diagramme circulaire.
## C'est parti pour les diagrammes circulaires !
```r
pie(grouped$count,grouped$class, main="Edible?")
```
Et voilà, un diagramme circulaire montrant les proportions de ces données selon ces deux classes de champignons. Il est très important de respecter l'ordre des étiquettes, surtout ici, alors assurez-vous de vérifier l'ordre dans lequel le tableau des étiquettes est construit !
![diagramme circulaire](../../../../../3-Data-Visualization/R/11-visualization-proportions/images/pie1-wb.png)
## Les diagrammes en anneau !
Un diagramme circulaire un peu plus visuellement intéressant est un diagramme en anneau, qui est un diagramme circulaire avec un trou au milieu. Regardons nos données en utilisant cette méthode.
Examinez les différents habitats où poussent les champignons :
```r
library(dplyr)
habitat=mushrooms %>%
group_by(habitat) %>%
summarise(count=n())
View(habitat)
```
Le résultat est :
| habitat | nombre |
| --------- | ------ |
| Herbes | 2148 |
| Feuilles | 832 |
| Prairies | 292 |
| Sentiers | 1144 |
| Urbain | 368 |
| Déchets | 192 |
| Bois | 3148 |
Ici, vous regroupez vos données par habitat. Il y en a 7 répertoriés, alors utilisez-les comme étiquettes pour votre diagramme en anneau :
```r
library(ggplot2)
library(webr)
PieDonut(habitat, aes(habitat, count=count))
```
![diagramme en anneau](../../../../../3-Data-Visualization/R/11-visualization-proportions/images/donut-wb.png)
Ce code utilise deux bibliothèques - ggplot2 et webr. En utilisant la fonction PieDonut de la bibliothèque webr, nous pouvons créer un diagramme en anneau facilement !
Les diagrammes en anneau dans R peuvent également être réalisés uniquement avec la bibliothèque ggplot2. Vous pouvez en apprendre davantage à ce sujet [ici](https://www.r-graph-gallery.com/128-ring-or-donut-plot.html) et essayer par vous-même.
Maintenant que vous savez comment regrouper vos données et les afficher sous forme de diagramme circulaire ou en anneau, vous pouvez explorer d'autres types de graphiques. Essayez un graphique en gaufre, qui est simplement une autre façon d'explorer les quantités.
## Les graphiques en gaufre !
Un graphique de type 'gaufre' est une manière différente de visualiser les quantités sous forme de tableau 2D de carrés. Essayez de visualiser les différentes quantités de couleurs de chapeau de champignon dans cet ensemble de données. Pour ce faire, vous devez installer une bibliothèque d'assistance appelée [waffle](https://cran.r-project.org/web/packages/waffle/waffle.pdf) et l'utiliser pour générer votre visualisation :
```r
install.packages("waffle", repos = "https://cinc.rud.is")
```
Sélectionnez un segment de vos données à regrouper :
```r
library(dplyr)
cap_color=mushrooms %>%
group_by(cap.color) %>%
summarise(count=n())
View(cap_color)
```
Créez un graphique en gaufre en créant des étiquettes, puis en regroupant vos données :
```r
library(waffle)
names(cap_color$count) = paste0(cap_color$cap.color)
waffle((cap_color$count/10), rows = 7, title = "Waffle Chart")+scale_fill_manual(values=c("brown", "#F0DC82", "#D2691E", "green",
"pink", "purple", "red", "grey",
"yellow","white"))
```
Avec un graphique en gaufre, vous pouvez clairement voir les proportions des couleurs de chapeau dans cet ensemble de données sur les champignons. Fait intéressant, il y a de nombreux champignons à chapeau vert !
![graphique en gaufre](../../../../../3-Data-Visualization/R/11-visualization-proportions/images/waffle.png)
Dans cette leçon, vous avez appris trois façons de visualiser les proportions. Tout d'abord, vous devez regrouper vos données en catégories, puis décider de la meilleure façon de les afficher - circulaire, en anneau ou en gaufre. Tous sont délicieux et offrent à l'utilisateur un aperçu instantané d'un ensemble de données.
## 🚀 Défi
Essayez de recréer ces graphiques savoureux dans [Charticulator](https://charticulator.com).
## [Quiz après la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/21)
## Révision et auto-apprentissage
Parfois, il n'est pas évident de savoir quand utiliser un diagramme circulaire, en anneau ou en gaufre. Voici quelques articles à lire sur ce sujet :
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402
Faites des recherches pour trouver plus d'informations sur cette décision délicate.
## Devoir
[Essayez-le dans Excel](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,175 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "a33c5d4b4156a2b41788d8720b6f724c",
"translation_date": "2025-08-24T13:49:11+00:00",
"source_file": "3-Data-Visualization/R/12-visualization-relationships/README.md",
"language_code": "fr"
}
-->
# Visualiser les relations : Tout sur le miel 🍯
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/12-Visualizing-Relationships.png)|
|:---:|
|Visualiser les relations - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
En poursuivant notre recherche axée sur la nature, découvrons des visualisations intéressantes pour montrer les relations entre différents types de miel, selon un ensemble de données provenant du [Département de l'Agriculture des États-Unis](https://www.nass.usda.gov/About_NASS/index.php).
Cet ensemble de données, composé d'environ 600 éléments, montre la production de miel dans de nombreux États américains. Par exemple, vous pouvez examiner le nombre de colonies, le rendement par colonie, la production totale, les stocks, le prix par livre et la valeur du miel produit dans un État donné de 1998 à 2012, avec une ligne par année pour chaque État.
Il serait intéressant de visualiser la relation entre la production annuelle d'un État donné et, par exemple, le prix du miel dans cet État. Alternativement, vous pourriez visualiser la relation entre le rendement par colonie dans différents États. Cette période couvre le dévastateur "CCD" ou "Colony Collapse Disorder" observé pour la première fois en 2006 (http://npic.orst.edu/envir/ccd.html), ce qui en fait un ensemble de données poignant à étudier. 🐝
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/22)
Dans cette leçon, vous pouvez utiliser ggplot2, que vous avez déjà utilisé, comme une excellente bibliothèque pour visualiser les relations entre les variables. Particulièrement intéressant est l'utilisation des fonctions `geom_point` et `qplot` de ggplot2, qui permettent de créer des diagrammes de dispersion et des graphiques linéaires pour visualiser rapidement les '[relations statistiques](https://ggplot2.tidyverse.org/)', permettant au data scientist de mieux comprendre comment les variables interagissent entre elles.
## Diagrammes de dispersion
Utilisez un diagramme de dispersion pour montrer comment le prix du miel a évolué, année après année, par État. ggplot2, avec `ggplot` et `geom_point`, regroupe commodément les données des États et affiche des points de données pour les données catégoriques et numériques.
Commençons par importer les données et Seaborn :
```r
honey=read.csv('../../data/honey.csv')
head(honey)
```
Vous remarquez que les données sur le miel contiennent plusieurs colonnes intéressantes, notamment l'année et le prix par livre. Explorons ces données, regroupées par État américain :
| état | numcol | rendementparcol | prodtotale | stocks | prixparlb | valeurprod | année |
| ----- | ------ | --------------- | ---------- | -------- | --------- | ---------- | ----- |
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
| FL | 230000 | 98 | 22540000 | 4508000 | 0.64 | 14426000 | 1998 |
Créez un diagramme de dispersion de base pour montrer la relation entre le prix par livre de miel et son État d'origine aux États-Unis. Faites en sorte que l'axe `y` soit suffisamment grand pour afficher tous les États :
```r
library(ggplot2)
ggplot(honey, aes(x = priceperlb, y = state)) +
geom_point(colour = "blue")
```
![scatterplot 1](../../../../../3-Data-Visualization/R/12-visualization-relationships/images/scatter1.png)
Maintenant, affichez les mêmes données avec un schéma de couleurs de miel pour montrer comment le prix évolue au fil des années. Vous pouvez le faire en ajoutant un paramètre 'scale_color_gradientn' pour montrer le changement, année après année :
> ✅ En savoir plus sur le [scale_color_gradientn](https://www.rdocumentation.org/packages/ggplot2/versions/0.9.1/topics/scale_colour_gradientn) - essayez un magnifique schéma de couleurs arc-en-ciel !
```r
ggplot(honey, aes(x = priceperlb, y = state, color=year)) +
geom_point()+scale_color_gradientn(colours = colorspace::heat_hcl(7))
```
![scatterplot 2](../../../../../3-Data-Visualization/R/12-visualization-relationships/images/scatter2.png)
Avec ce changement de schéma de couleurs, vous pouvez voir qu'il y a évidemment une forte progression au fil des années en termes de prix du miel par livre. En effet, si vous examinez un échantillon de données pour vérifier (choisissez un État donné, l'Arizona par exemple), vous pouvez voir un schéma d'augmentation des prix année après année, avec quelques exceptions :
| état | numcol | rendementparcol | prodtotale | stocks | prixparlb | valeurprod | année |
| ----- | ------ | --------------- | ---------- | ------- | --------- | ---------- | ----- |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
Une autre façon de visualiser cette progression est d'utiliser la taille plutôt que la couleur. Pour les utilisateurs daltoniens, cela pourrait être une meilleure option. Modifiez votre visualisation pour montrer une augmentation du prix par une augmentation de la circonférence des points :
```r
ggplot(honey, aes(x = priceperlb, y = state)) +
geom_point(aes(size = year),colour = "blue") +
scale_size_continuous(range = c(0.25, 3))
```
Vous pouvez voir la taille des points augmenter progressivement.
![scatterplot 3](../../../../../3-Data-Visualization/R/12-visualization-relationships/images/scatter3.png)
Est-ce simplement une question d'offre et de demande ? En raison de facteurs tels que le changement climatique et l'effondrement des colonies, y a-t-il moins de miel disponible à l'achat année après année, ce qui entraîne une augmentation des prix ?
Pour découvrir une corrélation entre certaines des variables de cet ensemble de données, explorons quelques graphiques linéaires.
## Graphiques linéaires
Question : Y a-t-il une augmentation claire du prix du miel par livre année après année ? Vous pouvez le découvrir facilement en créant un graphique linéaire unique :
```r
qplot(honey$year,honey$priceperlb, geom='smooth', span =0.5, xlab = "year",ylab = "priceperlb")
```
Réponse : Oui, avec quelques exceptions autour de l'année 2003 :
![line chart 1](../../../../../3-Data-Visualization/R/12-visualization-relationships/images/line1.png)
Question : Eh bien, en 2003, pouvons-nous également voir un pic dans l'approvisionnement en miel ? Que se passe-t-il si vous examinez la production totale année après année ?
```python
qplot(honey$year,honey$totalprod, geom='smooth', span =0.5, xlab = "year",ylab = "totalprod")
```
![line chart 2](../../../../../3-Data-Visualization/R/12-visualization-relationships/images/line2.png)
Réponse : Pas vraiment. Si vous examinez la production totale, elle semble en fait avoir augmenté cette année-là, même si, de manière générale, la quantité de miel produite est en déclin au cours de ces années.
Question : Dans ce cas, qu'est-ce qui aurait pu provoquer ce pic du prix du miel autour de 2003 ?
Pour le découvrir, vous pouvez explorer une grille de facettes.
## Grilles de facettes
Les grilles de facettes prennent un aspect de votre ensemble de données (dans notre cas, vous pouvez choisir 'année' pour éviter de produire trop de facettes). Seaborn peut ensuite créer un graphique pour chacune de ces facettes de vos coordonnées x et y choisies pour une comparaison visuelle plus facile. L'année 2003 se démarque-t-elle dans ce type de comparaison ?
Créez une grille de facettes en utilisant `facet_wrap` comme recommandé par la [documentation de ggplot2](https://ggplot2.tidyverse.org/reference/facet_wrap.html).
```r
ggplot(honey, aes(x=yieldpercol, y = numcol,group = 1)) +
geom_line() + facet_wrap(vars(year))
```
Dans cette visualisation, vous pouvez comparer le rendement par colonie et le nombre de colonies année après année, côte à côte avec un wrap défini à 3 pour les colonnes :
![facet grid](../../../../../3-Data-Visualization/R/12-visualization-relationships/images/facet.png)
Pour cet ensemble de données, rien ne semble particulièrement se démarquer en ce qui concerne le nombre de colonies et leur rendement, année après année et État par État. Existe-t-il une autre façon de rechercher une corrélation entre ces deux variables ?
## Graphiques à lignes multiples
Essayez un graphique à lignes multiples en superposant deux graphiques linéaires l'un sur l'autre, en utilisant les fonctions `par` et `plot` de R. Nous allons tracer l'année sur l'axe x et afficher deux axes y. Ainsi, affichez le rendement par colonie et le nombre de colonies, superposés :
```r
par(mar = c(5, 4, 4, 4) + 0.3)
plot(honey$year, honey$numcol, pch = 16, col = 2,type="l")
par(new = TRUE)
plot(honey$year, honey$yieldpercol, pch = 17, col = 3,
axes = FALSE, xlab = "", ylab = "",type="l")
axis(side = 4, at = pretty(range(y2)))
mtext("colony yield", side = 4, line = 3)
```
![superimposed plots](../../../../../3-Data-Visualization/R/12-visualization-relationships/images/dual-line.png)
Bien que rien ne saute aux yeux autour de l'année 2003, cela nous permet de terminer cette leçon sur une note un peu plus positive : bien qu'il y ait globalement un déclin du nombre de colonies, le nombre de colonies se stabilise même si leur rendement par colonie diminue.
Allez, les abeilles, allez !
🐝❤️
## 🚀 Défi
Dans cette leçon, vous avez appris un peu plus sur d'autres utilisations des diagrammes de dispersion et des grilles linéaires, y compris les grilles de facettes. Lancez-vous le défi de créer une grille de facettes en utilisant un ensemble de données différent, peut-être celui que vous avez utilisé avant ces leçons. Notez combien de temps elles prennent à créer et comment vous devez être prudent quant au nombre de grilles que vous devez dessiner en utilisant ces techniques.
## [Quiz après le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/23)
## Révision et étude personnelle
Les graphiques linéaires peuvent être simples ou assez complexes. Faites quelques lectures dans la [documentation de ggplot2](https://ggplot2.tidyverse.org/reference/geom_path.html#:~:text=geom_line()%20connects%20them%20in,which%20cases%20are%20connected%20together) sur les différentes façons de les construire. Essayez d'améliorer les graphiques linéaires que vous avez construits dans cette leçon avec d'autres méthodes listées dans la documentation.
## Devoir
[Plongez dans la ruche](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,180 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "b4039f1c76548d144a0aee0bf28304ec",
"translation_date": "2025-08-24T13:57:57+00:00",
"source_file": "3-Data-Visualization/R/13-meaningful-vizualizations/README.md",
"language_code": "fr"
}
-->
# Créer des Visualisations Significatives
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/13-MeaningfulViz.png)|
|:---:|
| Visualisations Significatives - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
> "Si vous torturez les données suffisamment longtemps, elles avoueront n'importe quoi" -- [Ronald Coase](https://en.wikiquote.org/wiki/Ronald_Coase)
Une des compétences fondamentales d'un data scientist est la capacité à créer une visualisation de données significative qui aide à répondre aux questions que vous pourriez avoir. Avant de visualiser vos données, vous devez vous assurer qu'elles ont été nettoyées et préparées, comme vous l'avez fait dans les leçons précédentes. Ensuite, vous pouvez commencer à décider de la meilleure façon de présenter les données.
Dans cette leçon, vous allez revoir :
1. Comment choisir le bon type de graphique
2. Comment éviter les graphiques trompeurs
3. Comment travailler avec les couleurs
4. Comment styliser vos graphiques pour une meilleure lisibilité
5. Comment créer des solutions de graphiques animés ou en 3D
6. Comment concevoir une visualisation créative
## [Quiz Pré-Conférence](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/24)
## Choisir le bon type de graphique
Dans les leçons précédentes, vous avez expérimenté la création de toutes sortes de visualisations de données intéressantes en utilisant Matplotlib et Seaborn. En général, vous pouvez sélectionner le [bon type de graphique](https://chartio.com/learn/charts/how-to-select-a-data-vizualization/) pour répondre à votre question en utilisant ce tableau :
| Vous devez : | Vous devriez utiliser : |
| -------------------------- | ------------------------------- |
| Montrer des tendances dans le temps | Ligne |
| Comparer des catégories | Barres, Camembert |
| Comparer des totaux | Camembert, Barres empilées |
| Montrer des relations | Nuage de points, Ligne, Facette, Double ligne |
| Montrer des distributions | Nuage de points, Histogramme, Boîte |
| Montrer des proportions | Camembert, Donut, Gaufre |
> ✅ Selon la composition de vos données, vous pourriez avoir besoin de les convertir de texte en numérique pour qu'un graphique donné puisse les prendre en charge.
## Éviter la tromperie
Même si un data scientist choisit soigneusement le bon graphique pour les bonnes données, il existe de nombreuses façons de présenter les données de manière à prouver un point, souvent au détriment des données elles-mêmes. Il existe de nombreux exemples de graphiques et d'infographies trompeurs !
[![Comment les graphiques mentent par Alberto Cairo](../../../../../3-Data-Visualization/R/13-meaningful-vizualizations/images/tornado.png)](https://www.youtube.com/watch?v=oX74Nge8Wkw "Comment les graphiques mentent")
> 🎥 Cliquez sur l'image ci-dessus pour une conférence sur les graphiques trompeurs
Ce graphique inverse l'axe X pour montrer l'opposé de la vérité, basé sur la date :
![mauvais graphique 1](../../../../../3-Data-Visualization/R/13-meaningful-vizualizations/images/bad-chart-1.png)
[Ce graphique](https://media.firstcoastnews.com/assets/WTLV/images/170ae16f-4643-438f-b689-50d66ca6a8d8/170ae16f-4643-438f-b689-50d66ca6a8d8_1140x641.jpg) est encore plus trompeur, car l'œil est attiré vers la droite pour conclure qu'au fil du temps, les cas de COVID ont diminué dans les différents comtés. En réalité, si vous regardez attentivement les dates, vous constatez qu'elles ont été réarrangées pour donner cette tendance descendante trompeuse.
![mauvais graphique 2](../../../../../3-Data-Visualization/R/13-meaningful-vizualizations/images/bad-chart-2.jpg)
Cet exemple notoire utilise la couleur ET un axe Y inversé pour tromper : au lieu de conclure que les décès par arme à feu ont augmenté après l'adoption d'une législation favorable aux armes, l'œil est en fait trompé pour penser que l'inverse est vrai :
![mauvais graphique 3](../../../../../3-Data-Visualization/R/13-meaningful-vizualizations/images/bad-chart-3.jpg)
Ce graphique étrange montre comment la proportion peut être manipulée, avec un effet hilarant :
![mauvais graphique 4](../../../../../3-Data-Visualization/R/13-meaningful-vizualizations/images/bad-chart-4.jpg)
Comparer l'incomparable est une autre astuce douteuse. Il existe un [site web merveilleux](https://tylervigen.com/spurious-correlations) consacré aux 'corrélations fallacieuses' affichant des 'faits' corrélant des choses comme le taux de divorce dans le Maine et la consommation de margarine. Un groupe Reddit collecte également les [mauvaises utilisations](https://www.reddit.com/r/dataisugly/top/?t=all) des données.
Il est important de comprendre à quel point l'œil peut être facilement trompé par des graphiques trompeurs. Même si l'intention du data scientist est bonne, le choix d'un mauvais type de graphique, comme un camembert montrant trop de catégories, peut être trompeur.
## Couleur
Vous avez vu dans le graphique sur la 'violence armée en Floride' ci-dessus comment la couleur peut ajouter une couche supplémentaire de signification aux graphiques, en particulier ceux qui ne sont pas conçus à l'aide de bibliothèques comme ggplot2 et RColorBrewer, qui proposent diverses bibliothèques et palettes de couleurs validées. Si vous créez un graphique manuellement, prenez le temps d'étudier un peu la [théorie des couleurs](https://colormatters.com/color-and-design/basic-color-theory).
> ✅ Soyez conscient, lors de la conception de graphiques, que l'accessibilité est un aspect important de la visualisation. Certains de vos utilisateurs pourraient être daltoniens - votre graphique est-il lisible pour les utilisateurs ayant des déficiences visuelles ?
Faites attention en choisissant les couleurs pour votre graphique, car elles peuvent transmettre un sens que vous ne souhaitez pas. Les 'dames en rose' dans le graphique sur la 'taille' ci-dessus transmettent une signification distinctement 'féminine' qui ajoute à l'étrangeté du graphique lui-même.
Bien que [la signification des couleurs](https://colormatters.com/color-symbolism/the-meanings-of-colors) puisse varier selon les régions du monde et changer en fonction de leur nuance, en général, les significations des couleurs incluent :
| Couleur | Signification |
| ------- | ---------------------- |
| rouge | pouvoir |
| bleu | confiance, loyauté |
| jaune | bonheur, prudence |
| vert | écologie, chance, envie|
| violet | bonheur |
| orange | dynamisme |
Si vous devez créer un graphique avec des couleurs personnalisées, assurez-vous que vos graphiques sont à la fois accessibles et que la couleur choisie correspond au message que vous souhaitez transmettre.
## Styliser vos graphiques pour une meilleure lisibilité
Les graphiques ne sont pas significatifs s'ils ne sont pas lisibles ! Prenez un moment pour réfléchir à la mise à l'échelle de la largeur et de la hauteur de votre graphique en fonction de vos données. Si une variable (comme les 50 états) doit être affichée, montrez-les verticalement sur l'axe Y si possible, afin d'éviter un graphique défilant horizontalement.
Étiquetez vos axes, fournissez une légende si nécessaire, et proposez des infobulles pour une meilleure compréhension des données.
Si vos données sont textuelles et longues sur l'axe X, vous pouvez incliner le texte pour une meilleure lisibilité. [plot3D](https://cran.r-project.org/web/packages/plot3D/index.html) propose des tracés en 3D, si vos données le permettent. Des visualisations sophistiquées peuvent être produites avec cet outil.
![tracés 3D](../../../../../3-Data-Visualization/R/13-meaningful-vizualizations/images/3d.png)
## Animation et affichage de graphiques en 3D
Certaines des meilleures visualisations de données aujourd'hui sont animées. Shirley Wu en a créé d'incroyables avec D3, comme '[film flowers](http://bl.ocks.org/sxywu/raw/d612c6c653fb8b4d7ff3d422be164a5d/)', où chaque fleur est une visualisation d'un film. Un autre exemple pour le Guardian est 'bussed out', une expérience interactive combinant des visualisations avec Greensock et D3, ainsi qu'un format d'article narratif pour montrer comment NYC gère son problème de sans-abris en envoyant des gens hors de la ville.
![busing](../../../../../3-Data-Visualization/R/13-meaningful-vizualizations/images/busing.png)
> "Bussed Out: How America Moves its Homeless" du [Guardian](https://www.theguardian.com/us-news/ng-interactive/2017/dec/20/bussed-out-america-moves-homeless-people-country-study). Visualisations par Nadieh Bremer & Shirley Wu
Bien que cette leçon ne soit pas suffisante pour enseigner en profondeur ces bibliothèques de visualisation puissantes, essayez D3 dans une application Vue.js en utilisant une bibliothèque pour afficher une visualisation du livre "Les Liaisons Dangereuses" comme un réseau social animé.
> "Les Liaisons Dangereuses" est un roman épistolaire, ou un roman présenté sous forme de lettres. Écrit en 1782 par Choderlos de Laclos, il raconte les manœuvres sociales vicieuses et moralement corrompues de deux protagonistes de l'aristocratie française du XVIIIe siècle, le Vicomte de Valmont et la Marquise de Merteuil. Tous deux rencontrent leur perte à la fin, mais pas sans causer de nombreux dégâts sociaux. Le roman se déroule comme une série de lettres écrites à diverses personnes de leur cercle, complotant pour se venger ou simplement pour semer le trouble. Créez une visualisation de ces lettres pour découvrir les principaux acteurs de la narration, visuellement.
Vous allez compléter une application web qui affichera une vue animée de ce réseau social. Elle utilise une bibliothèque conçue pour créer une [visualisation d'un réseau](https://github.com/emiliorizzo/vue-d3-network) avec Vue.js et D3. Lorsque l'application est en cours d'exécution, vous pouvez déplacer les nœuds sur l'écran pour réorganiser les données.
![liaisons](../../../../../3-Data-Visualization/R/13-meaningful-vizualizations/images/liaisons.png)
## Projet : Construire un graphique pour montrer un réseau avec D3.js
> Ce dossier de leçon inclut un dossier `solution` où vous pouvez trouver le projet complété, pour référence.
1. Suivez les instructions dans le fichier README.md à la racine du dossier de démarrage. Assurez-vous que NPM et Node.js fonctionnent sur votre machine avant d'installer les dépendances de votre projet.
2. Ouvrez le dossier `starter/src`. Vous y trouverez un dossier `assets` contenant un fichier .json avec toutes les lettres du roman, numérotées, avec une annotation 'to' et 'from'.
3. Complétez le code dans `components/Nodes.vue` pour activer la visualisation. Recherchez la méthode appelée `createLinks()` et ajoutez la boucle imbriquée suivante.
Parcourez l'objet .json pour capturer les données 'to' et 'from' des lettres et construisez l'objet `links` afin que la bibliothèque de visualisation puisse l'utiliser :
```javascript
//loop through letters
let f = 0;
let t = 0;
for (var i = 0; i < letters.length; i++) {
for (var j = 0; j < characters.length; j++) {
if (characters[j] == letters[i].from) {
f = j;
}
if (characters[j] == letters[i].to) {
t = j;
}
}
this.links.push({ sid: f, tid: t });
}
```
Exécutez votre application depuis le terminal (npm run serve) et profitez de la visualisation !
## 🚀 Défi
Faites un tour sur Internet pour découvrir des visualisations trompeuses. Comment l'auteur trompe-t-il l'utilisateur, et est-ce intentionnel ? Essayez de corriger les visualisations pour montrer à quoi elles devraient ressembler.
## [Quiz Post-Conférence](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/25)
## Révision & Auto-Étude
Voici quelques articles à lire sur les visualisations de données trompeuses :
https://gizmodo.com/how-to-lie-with-data-visualization-1563576606
http://ixd.prattsi.org/2017/12/visual-lies-usability-in-deceptive-data-visualizations/
Découvrez ces visualisations intéressantes pour des actifs et artefacts historiques :
https://handbook.pubpub.org/
Lisez cet article sur la façon dont l'animation peut améliorer vos visualisations :
https://medium.com/@EvanSinar/use-animation-to-supercharge-data-visualization-cd905a882ad4
## Devoir
[Créez votre propre visualisation personnalisée](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,40 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "1441550a0d789796b2821e04f7f4cc94",
"translation_date": "2025-08-24T13:30:36+00:00",
"source_file": "3-Data-Visualization/README.md",
"language_code": "fr"
}
-->
# Visualisations
![une abeille sur une fleur de lavande](../../../3-Data-Visualization/images/bee.jpg)
> Photo par <a href="https://unsplash.com/@jenna2980?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Jenna Lee</a> sur <a href="https://unsplash.com/s/photos/bees-in-a-meadow?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
Visualiser des données est l'une des tâches les plus importantes pour un data scientist. Les images valent mille mots, et une visualisation peut vous aider à identifier toutes sortes d'éléments intéressants dans vos données, tels que des pics, des valeurs aberrantes, des regroupements, des tendances, et bien plus encore, qui peuvent vous aider à comprendre l'histoire que vos données cherchent à raconter.
Dans ces cinq leçons, vous explorerez des données provenant de la nature et créerez des visualisations intéressantes et esthétiques en utilisant diverses techniques.
| Numéro du sujet | Sujet | Leçon liée | Auteur |
| :--------------: | :---: | :--------: | :----: |
| 1. | Visualiser des quantités | <ul> <li> [Python](09-visualization-quantities/README.md)</li> <li>[R](../../../3-Data-Visualization/R/09-visualization-quantities) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
| 2. | Visualiser des distributions | <ul> <li> [Python](10-visualization-distributions/README.md)</li> <li>[R](../../../3-Data-Visualization/R/10-visualization-distributions) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
| 3. | Visualiser des proportions | <ul> <li> [Python](11-visualization-proportions/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
| 4. | Visualiser des relations | <ul> <li> [Python](12-visualization-relationships/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
| 5. | Créer des visualisations significatives | <ul> <li> [Python](13-meaningful-visualizations/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
### Crédits
Ces leçons sur les visualisations ont été écrites avec 🌸 par [Jen Looper](https://twitter.com/jenlooper), [Jasleen Sondhi](https://github.com/jasleen101010) et [Vidushi Gupta](https://github.com/Vidushi-Gupta).
🍯 Les données sur la production de miel aux États-Unis proviennent du projet de Jessica Li sur [Kaggle](https://www.kaggle.com/jessicali9530/honey-production). Les [données](https://usda.library.cornell.edu/concern/publications/rn301137d) sont issues du [Département de l'Agriculture des États-Unis](https://www.nass.usda.gov/About_NASS/index.php).
🍄 Les données sur les champignons proviennent également de [Kaggle](https://www.kaggle.com/hatterasdunton/mushroom-classification-updated-dataset), révisées par Hatteras Dunton. Ce jeu de données inclut des descriptions d'échantillons hypothétiques correspondant à 23 espèces de champignons à lamelles de la famille Agaricus et Lepiota. Les champignons sont tirés du guide "The Audubon Society Field Guide to North American Mushrooms" (1981). Ce jeu de données a été donné à UCI ML 27 en 1987.
🦆 Les données sur les oiseaux du Minnesota proviennent de [Kaggle](https://www.kaggle.com/hannahcollins/minnesota-birds), extraites de [Wikipedia](https://en.wikipedia.org/wiki/List_of_birds_of_Minnesota) par Hannah Collins.
Tous ces jeux de données sont sous licence [CC0: Creative Commons](https://creativecommons.org/publicdomain/zero/1.0/).
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,121 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "c368f8f2506fe56bca0f7be05c4eb71d",
"translation_date": "2025-08-24T13:17:56+00:00",
"source_file": "4-Data-Science-Lifecycle/14-Introduction/README.md",
"language_code": "fr"
}
-->
# Introduction au cycle de vie de la science des données
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/14-DataScience-Lifecycle.png)|
|:---:|
| Introduction au cycle de vie de la science des données - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
## [Quiz avant le cours](https://red-water-0103e7a0f.azurestaticapps.net/quiz/26)
À ce stade, vous avez probablement compris que la science des données est un processus. Ce processus peut être divisé en 5 étapes :
- Capture
- Traitement
- Analyse
- Communication
- Maintenance
Cette leçon se concentre sur 3 parties du cycle de vie : la capture, le traitement et la maintenance.
![Diagramme du cycle de vie de la science des données](../../../../4-Data-Science-Lifecycle/14-Introduction/images/data-science-lifecycle.jpg)
> Photo par [Berkeley School of Information](https://ischoolonline.berkeley.edu/data-science/what-is-data-science/)
## Capture
La première étape du cycle de vie est très importante, car les étapes suivantes en dépendent. Elle combine pratiquement deux étapes en une : l'acquisition des données et la définition des objectifs et des problèmes à résoudre.
Définir les objectifs du projet nécessitera une compréhension approfondie du problème ou de la question. Tout d'abord, nous devons identifier et acquérir les parties prenantes ayant besoin d'une solution à leur problème. Il peut s'agir de parties prenantes d'une entreprise ou de sponsors du projet, qui peuvent aider à déterminer qui ou quoi bénéficiera de ce projet, ainsi que ce dont ils ont besoin et pourquoi. Un objectif bien défini doit être mesurable et quantifiable pour définir un résultat acceptable.
Questions qu'un data scientist pourrait poser :
- Ce problème a-t-il déjà été abordé auparavant ? Qu'a-t-on découvert ?
- L'objectif et le but sont-ils compris par toutes les parties impliquées ?
- Y a-t-il des ambiguïtés et comment les réduire ?
- Quelles sont les contraintes ?
- À quoi pourrait ressembler le résultat final ?
- Quelles ressources (temps, personnes, calcul) sont disponibles ?
Ensuite, il s'agit d'identifier, de collecter, puis d'explorer les données nécessaires pour atteindre ces objectifs définis. À cette étape d'acquisition, les data scientists doivent également évaluer la quantité et la qualité des données. Cela nécessite une exploration des données pour confirmer que ce qui a été acquis permettra d'atteindre le résultat souhaité.
Questions qu'un data scientist pourrait poser sur les données :
- Quelles données sont déjà disponibles ?
- Qui possède ces données ?
- Quelles sont les préoccupations en matière de confidentialité ?
- Ai-je suffisamment de données pour résoudre ce problème ?
- Les données sont-elles de qualité acceptable pour ce problème ?
- Si je découvre des informations supplémentaires grâce à ces données, devrions-nous envisager de modifier ou redéfinir les objectifs ?
## Traitement
L'étape de traitement du cycle de vie se concentre sur la découverte de motifs dans les données ainsi que sur la modélisation. Certaines techniques utilisées à cette étape nécessitent des méthodes statistiques pour révéler les motifs. Typiquement, cette tâche serait fastidieuse pour un humain avec un grand ensemble de données et repose sur les ordinateurs pour accélérer le processus. Cette étape est également le point où la science des données et l'apprentissage automatique se croisent. Comme vous l'avez appris dans la première leçon, l'apprentissage automatique consiste à construire des modèles pour comprendre les données. Les modèles représentent les relations entre les variables des données et aident à prédire les résultats.
Les techniques courantes utilisées à cette étape sont couvertes dans le programme ML for Beginners. Suivez les liens pour en savoir plus :
- [Classification](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification) : Organiser les données en catégories pour une utilisation plus efficace.
- [Clustering](https://github.com/microsoft/ML-For-Beginners/tree/main/5-Clustering) : Regrouper les données en groupes similaires.
- [Régression](https://github.com/microsoft/ML-For-Beginners/tree/main/2-Regression) : Déterminer les relations entre les variables pour prédire ou prévoir des valeurs.
## Maintenance
Dans le diagramme du cycle de vie, vous avez peut-être remarqué que la maintenance se situe entre la capture et le traitement. La maintenance est un processus continu de gestion, de stockage et de sécurisation des données tout au long du projet et doit être prise en compte pendant toute la durée du projet.
### Stockage des données
Les choix concernant la manière et le lieu de stockage des données peuvent influencer le coût de leur stockage ainsi que les performances d'accès aux données. Ces décisions ne sont pas toujours prises uniquement par un data scientist, mais celui-ci peut être amené à faire des choix sur la manière de travailler avec les données en fonction de leur stockage.
Voici quelques aspects des systèmes modernes de stockage des données qui peuvent influencer ces choix :
**Sur site vs hors site vs cloud public ou privé**
Le stockage sur site fait référence à la gestion des données sur votre propre équipement, comme posséder un serveur avec des disques durs pour stocker les données, tandis que le stockage hors site repose sur des équipements que vous ne possédez pas, comme un centre de données. Le cloud public est un choix populaire pour le stockage des données, ne nécessitant aucune connaissance sur la manière ou le lieu exact où les données sont stockées. Le terme "public" fait référence à une infrastructure unifiée partagée par tous les utilisateurs du cloud. Certaines organisations ayant des politiques de sécurité strictes préfèrent un cloud privé qui leur offre des services cloud dédiés. Vous en apprendrez davantage sur les données dans le cloud dans les [leçons ultérieures](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/5-Data-Science-In-Cloud).
**Données froides vs données chaudes**
Lorsque vous entraînez vos modèles, vous pourriez avoir besoin de plus de données d'entraînement. Si votre modèle est satisfaisant, de nouvelles données arriveront pour qu'il remplisse son objectif. Dans tous les cas, le coût de stockage et d'accès aux données augmentera à mesure que vous en accumulez davantage. Séparer les données rarement utilisées, appelées données froides, des données fréquemment consultées, appelées données chaudes, peut être une option de stockage moins coûteuse grâce à des services matériels ou logiciels. Si les données froides doivent être consultées, leur récupération peut prendre un peu plus de temps par rapport aux données chaudes.
### Gestion des données
En travaillant avec les données, vous pourriez découvrir que certaines d'entre elles doivent être nettoyées à l'aide de techniques abordées dans la leçon sur la [préparation des données](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/08-data-preparation) pour construire des modèles précis. Lorsque de nouvelles données arrivent, elles nécessiteront les mêmes applications pour maintenir une qualité cohérente. Certains projets impliquent l'utilisation d'un outil automatisé pour le nettoyage, l'agrégation et la compression avant que les données ne soient déplacées vers leur emplacement final. Azure Data Factory est un exemple de ces outils.
### Sécurisation des données
L'un des principaux objectifs de la sécurisation des données est de s'assurer que ceux qui les manipulent contrôlent ce qui est collecté et dans quel contexte elles sont utilisées. Garder les données sécurisées implique de limiter l'accès uniquement à ceux qui en ont besoin, de respecter les lois et réglementations locales, ainsi que de maintenir des normes éthiques, comme abordé dans la [leçon sur l'éthique](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/02-ethics).
Voici quelques actions qu'une équipe peut entreprendre en matière de sécurité :
- Confirmer que toutes les données sont chiffrées
- Fournir aux clients des informations sur l'utilisation de leurs données
- Retirer l'accès aux données pour les personnes ayant quitté le projet
- Permettre uniquement à certains membres du projet de modifier les données
## 🚀 Défi
Il existe de nombreuses versions du cycle de vie de la science des données, où chaque étape peut avoir des noms différents et un nombre de phases varié, mais elles contiennent les mêmes processus mentionnés dans cette leçon.
Explorez le [cycle de vie du processus de science des données en équipe](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/lifecycle) et le [processus standard intersectoriel pour l'exploration de données](https://www.datascience-pm.com/crisp-dm-2/). Nommez 3 similitudes et différences entre les deux.
|Processus de science des données en équipe (TDSP)|Processus standard intersectoriel pour l'exploration de données (CRISP-DM)|
|--|--|
|![Cycle de vie de la science des données en équipe](../../../../4-Data-Science-Lifecycle/14-Introduction/images/tdsp-lifecycle2.png) | ![Image du processus CRISP-DM](../../../../4-Data-Science-Lifecycle/14-Introduction/images/CRISP-DM.png) |
| Image par [Microsoft](https://docs.microsoft.comazure/architecture/data-science-process/lifecycle) | Image par [Data Science Process Alliance](https://www.datascience-pm.com/crisp-dm-2/) |
## [Quiz après le cours](https://red-water-0103e7a0f.azurestaticapps.net/quiz/27)
## Révision et auto-apprentissage
Appliquer le cycle de vie de la science des données implique plusieurs rôles et tâches, où certains peuvent se concentrer sur des parties spécifiques de chaque étape. Le processus de science des données en équipe fournit quelques ressources expliquant les types de rôles et de tâches que quelqu'un peut avoir dans un projet.
* [Rôles et tâches dans le processus de science des données en équipe](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/roles-tasks)
* [Exécuter des tâches de science des données : exploration, modélisation et déploiement](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/execute-data-science-tasks)
## Devoir
[Évaluation d'un ensemble de données](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,35 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "564445c39ad29a491abcb9356fc4d47d",
"translation_date": "2025-08-24T13:19:51+00:00",
"source_file": "4-Data-Science-Lifecycle/14-Introduction/assignment.md",
"language_code": "fr"
}
-->
# Évaluation d'un ensemble de données
Un client a sollicité votre équipe pour l'aider à analyser les habitudes de dépenses saisonnières des clients de taxis à New York.
Ils veulent savoir : **Les passagers des taxis jaunes à New York donnent-ils plus de pourboires aux chauffeurs en hiver ou en été ?**
Votre équipe est dans la phase [Capture](Readme.md#Capturing) du cycle de vie de la science des données, et vous êtes chargé de gérer l'ensemble de données. On vous a fourni un notebook et des [données](../../../../data/taxi.csv) à explorer.
Dans ce répertoire, il y a un [notebook](../../../../4-Data-Science-Lifecycle/14-Introduction/notebook.ipynb) qui utilise Python pour charger les données des trajets des taxis jaunes provenant de la [NYC Taxi & Limousine Commission](https://docs.microsoft.com/en-us/azure/open-datasets/dataset-taxi-yellow?tabs=azureml-opendatasets).
Vous pouvez également ouvrir le fichier de données des taxis dans un éditeur de texte ou un logiciel de tableur comme Excel.
## Instructions
- Évaluez si les données de cet ensemble peuvent répondre à la question.
- Explorez le [catalogue NYC Open Data](https://data.cityofnewyork.us/browse?sortBy=most_accessed&utf8=%E2%9C%93). Identifiez un ensemble de données supplémentaire qui pourrait être utile pour répondre à la question du client.
- Rédigez 3 questions que vous poseriez au client pour obtenir des clarifications et mieux comprendre le problème.
Consultez le [dictionnaire de l'ensemble de données](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf) et le [guide utilisateur](https://www1.nyc.gov/assets/tlc/downloads/pdf/trip_record_user_guide.pdf) pour plus d'informations sur les données.
## Rubrique
Exemplaire | Adéquat | À améliorer
--- | --- | --- |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,58 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "d92f57eb110dc7f765c05cbf0f837c77",
"translation_date": "2025-08-24T13:21:43+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/README.md",
"language_code": "fr"
}
-->
# Le Cycle de Vie de la Science des Données : Analyse
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/15-Analyzing.png)|
|:---:|
| Cycle de Vie de la Science des Données : Analyse - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
## Quiz Préliminaire
## [Quiz Préliminaire](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/28)
L'analyse dans le cycle de vie des données confirme que les données peuvent répondre aux questions posées ou résoudre un problème particulier. Cette étape peut également se concentrer sur la vérification qu'un modèle répond correctement à ces questions et problèmes. Cette leçon est axée sur l'Analyse Exploratoire des Données (ou EDA), qui regroupe des techniques permettant de définir les caractéristiques et les relations au sein des données, et qui peuvent être utilisées pour préparer les données à la modélisation.
Nous utiliserons un jeu de données d'exemple provenant de [Kaggle](https://www.kaggle.com/balaka18/email-spam-classification-dataset-csv/version/1) pour montrer comment cela peut être appliqué avec Python et la bibliothèque Pandas. Ce jeu de données contient un décompte de certains mots courants trouvés dans des e-mails, les sources de ces e-mails étant anonymes. Utilisez le [notebook](../../../../4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb) dans ce répertoire pour suivre.
## Analyse Exploratoire des Données
La phase de capture du cycle de vie est celle où les données sont acquises ainsi que les problèmes et questions à traiter, mais comment savoir si les données peuvent aider à atteindre le résultat final ?
Rappelez-vous qu'un data scientist peut poser les questions suivantes lorsqu'il acquiert les données :
- Ai-je suffisamment de données pour résoudre ce problème ?
- Les données sont-elles de qualité acceptable pour ce problème ?
- Si je découvre des informations supplémentaires grâce à ces données, devrions-nous envisager de modifier ou redéfinir les objectifs ?
L'Analyse Exploratoire des Données est le processus qui permet de mieux connaître ces données et peut être utilisée pour répondre à ces questions, ainsi que pour identifier les défis liés à l'utilisation du jeu de données. Concentrons-nous sur certaines des techniques utilisées pour y parvenir.
## Profilage des Données, Statistiques Descriptives et Pandas
Comment évaluer si nous avons suffisamment de données pour résoudre ce problème ? Le profilage des données peut résumer et recueillir des informations générales sur notre jeu de données grâce à des techniques de statistiques descriptives. Le profilage des données nous aide à comprendre ce qui est disponible, et les statistiques descriptives nous aident à comprendre combien de choses sont disponibles.
Dans quelques leçons précédentes, nous avons utilisé Pandas pour fournir des statistiques descriptives avec la [`fonction describe()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html). Elle fournit le décompte, les valeurs maximales et minimales, la moyenne, l'écart type et les quantiles sur les données numériques. Utiliser des statistiques descriptives comme la fonction `describe()` peut vous aider à évaluer ce que vous avez et si vous avez besoin de plus.
## Échantillonnage et Interrogation
Explorer tout un grand jeu de données peut être très chronophage et est généralement une tâche laissée à un ordinateur. Cependant, l'échantillonnage est un outil utile pour comprendre les données et permet d'avoir une meilleure idée de ce que contient le jeu de données et de ce qu'il représente. Avec un échantillon, vous pouvez appliquer des probabilités et des statistiques pour tirer des conclusions générales sur vos données. Bien qu'il n'existe pas de règle définie sur la quantité de données à échantillonner, il est important de noter que plus vous échantillonnez de données, plus la généralisation que vous pouvez faire sera précise.
Pandas dispose de la [`fonction sample()` dans sa bibliothèque](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sample.html) où vous pouvez passer un argument pour indiquer combien d'échantillons aléatoires vous souhaitez recevoir et utiliser.
L'interrogation générale des données peut vous aider à répondre à certaines questions et théories générales que vous pourriez avoir. Contrairement à l'échantillonnage, les requêtes vous permettent de contrôler et de vous concentrer sur des parties spécifiques des données sur lesquelles vous avez des questions.
La [`fonction query()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html) dans la bibliothèque Pandas vous permet de sélectionner des colonnes et d'obtenir des réponses simples sur les données via les lignes récupérées.
## Exploration avec des Visualisations
Vous n'avez pas besoin d'attendre que les données soient complètement nettoyées et analysées pour commencer à créer des visualisations. En fait, avoir une représentation visuelle pendant l'exploration peut aider à identifier des motifs, des relations et des problèmes dans les données. De plus, les visualisations offrent un moyen de communication avec ceux qui ne sont pas impliqués dans la gestion des données et peuvent être une opportunité de partager et clarifier des questions supplémentaires qui n'ont pas été abordées lors de la phase de capture. Consultez la [section sur les Visualisations](../../../../../../../../../3-Data-Visualization) pour en savoir plus sur certaines façons populaires d'explorer visuellement.
## Exploration pour Identifier les Incohérences
Tous les sujets abordés dans cette leçon peuvent aider à identifier les valeurs manquantes ou incohérentes, mais Pandas fournit des fonctions pour vérifier certaines d'entre elles. [isna() ou isnull()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.isna.html) peuvent vérifier les valeurs manquantes. Un aspect important de l'exploration de ces valeurs dans vos données est d'explorer pourquoi elles se sont retrouvées ainsi en premier lieu. Cela peut vous aider à décider quelles [actions entreprendre pour les résoudre](../../../../../../../../../2-Working-With-Data/08-data-preparation/notebook.ipynb).
## [Quiz Préliminaire](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/27)
## Devoir
[Explorer pour des réponses](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,34 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "fcc7547171f4530f159676dd73ed772e",
"translation_date": "2025-08-24T13:23:11+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/assignment.md",
"language_code": "fr"
}
-->
# Exploration pour des réponses
Ceci est une continuation de [l'exercice](../14-Introduction/assignment.md) de la leçon précédente, où nous avons brièvement examiné l'ensemble de données. Maintenant, nous allons examiner les données de manière plus approfondie.
Encore une fois, la question que le client souhaite résoudre est la suivante : **Les passagers des taxis jaunes à New York donnent-ils plus de pourboires aux chauffeurs en hiver ou en été ?**
Votre équipe se trouve dans la phase [Analyse](README.md) du cycle de vie de la science des données, où vous êtes chargé de réaliser une analyse exploratoire des données sur l'ensemble fourni. Vous disposez d'un notebook et d'un ensemble de données contenant 200 transactions de taxis datant de janvier et juillet 2019.
## Instructions
Dans ce répertoire, vous trouverez un [notebook](../../../../4-Data-Science-Lifecycle/15-analyzing/assignment.ipynb) et des données provenant de la [Taxi & Limousine Commission](https://docs.microsoft.com/en-us/azure/open-datasets/dataset-taxi-yellow?tabs=azureml-opendatasets). Consultez le [dictionnaire de l'ensemble de données](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf) et le [guide utilisateur](https://www1.nyc.gov/assets/tlc/downloads/pdf/trip_record_user_guide.pdf) pour plus d'informations sur les données.
Utilisez certaines des techniques abordées dans cette leçon pour effectuer votre propre analyse exploratoire des données dans le notebook (ajoutez des cellules si nécessaire) et répondez aux questions suivantes :
- Quels autres facteurs dans les données pourraient influencer le montant des pourboires ?
- Quelles colonnes seront probablement inutiles pour répondre à la question du client ?
- D'après les informations fournies jusqu'à présent, les données semblent-elles indiquer un comportement saisonnier en matière de pourboires ?
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | ---
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,220 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "1ac43023e78bfe76481a32c878ace516",
"translation_date": "2025-08-24T13:26:23+00:00",
"source_file": "4-Data-Science-Lifecycle/16-communication/README.md",
"language_code": "fr"
}
-->
# Le cycle de vie de la science des données : Communication
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev)](../../sketchnotes/16-Communicating.png)|
|:---:|
| Cycle de vie de la science des données : Communication - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/30)
Testez vos connaissances sur ce qui vous attend avec le quiz avant le cours ci-dessus !
# Introduction
### Qu'est-ce que la communication ?
Commençons cette leçon en définissant ce que signifie communiquer. **Communiquer, c'est transmettre ou échanger des informations.** Les informations peuvent être des idées, des pensées, des sentiments, des messages, des signaux discrets, des données tout ce quun **_émetteur_** (celui qui envoie linformation) veut que le **_récepteur_** (celui qui reçoit linformation) comprenne. Dans cette leçon, nous parlerons des émetteurs comme des communicateurs, et des récepteurs comme du public.
### Communication des données et narration
Nous comprenons que lorsque nous communiquons, lobjectif est de transmettre ou déchanger des informations. Mais lorsque vous communiquez des données, votre objectif ne devrait pas se limiter à transmettre des chiffres à votre public. Votre objectif devrait être de raconter une histoire éclairée par vos données une communication efficace des données et une narration vont de pair. Votre public est plus susceptible de se souvenir dune histoire que vous racontez plutôt que dun chiffre que vous donnez. Plus tard dans cette leçon, nous examinerons quelques façons dutiliser la narration pour communiquer vos données plus efficacement.
### Types de communication
Tout au long de cette leçon, deux types de communication différents seront abordés : la communication unidirectionnelle et la communication bidirectionnelle.
**La communication unidirectionnelle** se produit lorsquun émetteur envoie des informations à un récepteur, sans aucun retour ou réponse. Nous voyons des exemples de communication unidirectionnelle tous les jours dans les e-mails de masse, lorsque les actualités diffusent les dernières informations, ou même lorsquune publicité télévisée vous informe sur les avantages de leur produit. Dans chacun de ces cas, lémetteur ne cherche pas à échanger des informations. Il cherche uniquement à transmettre ou à livrer des informations.
**La communication bidirectionnelle** se produit lorsque toutes les parties impliquées agissent à la fois comme émetteurs et récepteurs. Un émetteur commence par communiquer avec un récepteur, et le récepteur fournit un retour ou une réponse. La communication bidirectionnelle est ce que nous pensons traditionnellement lorsque nous parlons de communication. Nous imaginons généralement des personnes engagées dans une conversation soit en personne, soit par téléphone, sur les réseaux sociaux ou par message texte.
Lorsque vous communiquez des données, il y aura des cas où vous utiliserez une communication unidirectionnelle (par exemple, lors dune présentation à une conférence ou à un grand groupe où les questions ne seront pas posées directement après) et des cas où vous utiliserez une communication bidirectionnelle (par exemple, pour persuader quelques parties prenantes dadopter une idée ou convaincre un collègue de consacrer du temps et des efforts à la création de quelque chose de nouveau).
# Communication efficace
### Vos responsabilités en tant que communicateur
Lorsque vous communiquez, il est de votre responsabilité de vous assurer que votre ou vos récepteurs retiennent les informations que vous souhaitez quils retiennent. Lorsque vous communiquez des données, vous ne voulez pas que vos récepteurs se contentent de retenir des chiffres, vous voulez quils retiennent une histoire éclairée par vos données. Un bon communicateur de données est un bon conteur.
Comment raconter une histoire avec des données ? Il existe une infinité de façons mais voici 6 que nous aborderons dans cette leçon :
1. Comprendre votre public, votre canal et votre méthode de communication
2. Commencer avec la fin en tête
3. Laborder comme une véritable histoire
4. Utiliser des mots et des phrases significatifs
5. Utiliser lémotion
Chacune de ces stratégies est expliquée plus en détail ci-dessous.
### 1. Comprendre votre public, votre canal et votre méthode de communication
La façon dont vous communiquez avec les membres de votre famille est probablement différente de celle dont vous communiquez avec vos amis. Vous utilisez probablement des mots et des phrases différents que les personnes à qui vous parlez sont plus susceptibles de comprendre. Vous devriez adopter la même approche lorsque vous communiquez des données. Réfléchissez à qui vous communiquez. Pensez à leurs objectifs et au contexte quils ont autour de la situation que vous leur expliquez.
Vous pouvez probablement regrouper la majorité de votre public dans une catégorie. Dans un article de _Harvard Business Review_, “[How to Tell a Story with Data](http://blogs.hbr.org/2013/04/how-to-tell-a-story-with-data/)” (Comment raconter une histoire avec des données), Jim Stikeleather, stratège exécutif chez Dell, identifie cinq catégories de publics.
- **Novice** : première exposition au sujet, mais ne veut pas de simplification excessive
- **Généraliste** : conscient du sujet, mais cherche une compréhension globale et des thèmes principaux
- **Managerial** : compréhension approfondie et exploitable des subtilités et des interrelations avec accès aux détails
- **Expert** : davantage dexploration et de découverte, moins de narration, avec beaucoup de détails
- **Exécutif** : na que le temps de saisir la signification et les conclusions des probabilités pondérées
Ces catégories peuvent orienter la manière dont vous présentez les données à votre public.
En plus de réfléchir à la catégorie de votre public, vous devriez également considérer le canal que vous utilisez pour communiquer avec lui. Votre approche devrait être légèrement différente si vous rédigez une note ou un e-mail par rapport à une réunion ou une présentation lors dune conférence.
En plus de comprendre votre public, savoir comment vous communiquerez avec lui (en utilisant une communication unidirectionnelle ou bidirectionnelle) est également essentiel.
Si vous communiquez avec un public majoritairement novice et que vous utilisez une communication unidirectionnelle, vous devez dabord éduquer le public et lui donner le contexte approprié. Ensuite, vous devez lui présenter vos données et lui expliquer ce que vos données signifient et pourquoi elles sont importantes. Dans ce cas, vous voudrez être très concentré sur la clarté, car votre public ne pourra pas vous poser de questions directes.
Si vous communiquez avec un public majoritairement managerial et que vous utilisez une communication bidirectionnelle, vous naurez probablement pas besoin déduquer votre public ou de lui fournir beaucoup de contexte. Vous pourrez peut-être passer directement à la discussion des données que vous avez collectées et pourquoi elles sont importantes. Dans ce scénario, cependant, vous devriez vous concentrer sur le timing et le contrôle de votre présentation. Lorsquon utilise une communication bidirectionnelle (surtout avec un public managerial qui cherche une “compréhension exploitable des subtilités et des interrelations avec accès aux détails”), des questions peuvent surgir pendant votre interaction et orienter la discussion dans une direction qui ne correspond pas à lhistoire que vous essayez de raconter. Lorsque cela se produit, vous pouvez agir et ramener la discussion sur votre histoire.
### 2. Commencer avec la fin en tête
Commencer avec la fin en tête signifie comprendre les conclusions que vous souhaitez que votre public retienne avant de commencer à communiquer avec lui. Être réfléchi sur ce que vous voulez que votre public retienne à lavance peut vous aider à construire une histoire que votre public peut suivre. Commencer avec la fin en tête est approprié pour la communication unidirectionnelle et bidirectionnelle.
Comment commencer avec la fin en tête ? Avant de communiquer vos données, notez vos conclusions clés. Ensuite, à chaque étape de la préparation de lhistoire que vous voulez raconter avec vos données, demandez-vous : “Comment cela sintègre-t-il dans lhistoire que je raconte ?”
Attention Bien que commencer avec la fin en tête soit idéal, vous ne voulez pas communiquer uniquement les données qui soutiennent vos conclusions prévues. Cela sappelle le tri sélectif, qui se produit lorsquun communicateur ne communique que les données qui soutiennent le point quil essaie de faire valoir et ignore toutes les autres données.
Si toutes les données que vous avez collectées soutiennent clairement vos conclusions prévues, tant mieux. Mais sil y a des données que vous avez collectées qui ne soutiennent pas vos conclusions, ou même soutiennent un argument contre vos conclusions clés, vous devriez également communiquer ces données. Si cela se produit, soyez honnête avec votre public et expliquez-lui pourquoi vous choisissez de rester fidèle à votre histoire même si toutes les données ne la soutiennent pas nécessairement.
### 3. Laborder comme une véritable histoire
Une histoire traditionnelle se déroule en 5 phases. Vous avez peut-être entendu ces phases exprimées comme Exposition, Action montante, Climax, Action descendante et Dénouement. Ou les termes plus simples à retenir : Contexte, Conflit, Climax, Clôture, Conclusion. Lorsque vous communiquez vos données et votre histoire, vous pouvez adopter une approche similaire.
Vous pouvez commencer par le contexte, poser le décor et vous assurer que votre public est sur la même longueur donde. Ensuite, introduisez le conflit. Pourquoi avez-vous besoin de collecter ces données ? Quels problèmes cherchiez-vous à résoudre ? Après cela, le climax. Quelles sont les données ? Que signifient-elles ? Quelles solutions les données nous indiquent-elles ? Ensuite, vous arrivez à la clôture, où vous pouvez réitérer le problème et les solutions proposées. Enfin, nous arrivons à la conclusion, où vous pouvez résumer vos conclusions clés et les prochaines étapes que vous recommandez à léquipe.
### 4. Utiliser des mots et des phrases significatifs
Si nous travaillions ensemble sur un produit et que je vous disais : “Nos utilisateurs mettent beaucoup de temps à sinscrire sur notre plateforme,” combien de temps estimeriez-vous que “beaucoup de temps” représente ? Une heure ? Une semaine ? Cest difficile à savoir. Et si je disais cela à un public entier ? Chaque personne dans le public pourrait avoir une idée différente de la durée que prennent les utilisateurs pour sinscrire sur notre plateforme.
À la place, que se passerait-il si je disais : “Nos utilisateurs mettent en moyenne 3 minutes pour sinscrire et sintégrer sur notre plateforme.”
Ce message est plus clair. Lorsque vous communiquez des données, il peut être facile de penser que tout le monde dans votre public pense comme vous. Mais ce nest pas toujours le cas. Assurer la clarté autour de vos données et de ce quelles signifient est lune de vos responsabilités en tant que communicateur. Si les données ou votre histoire ne sont pas claires, votre public aura du mal à suivre, et il est moins probable quil comprenne vos conclusions clés.
Vous pouvez communiquer des données plus clairement en utilisant des mots et des phrases significatifs, plutôt que vagues. Voici quelques exemples :
- Nous avons eu une année *impressionnante* !
- Une personne pourrait penser quimpressionnant signifie une augmentation de 2 % à 3 % des revenus, et une autre pourrait penser que cela signifie une augmentation de 50 % à 60 %.
- Les taux de réussite de nos utilisateurs ont augmenté *considérablement*.
- Quelle est lampleur dune augmentation considérable ?
- Cette initiative nécessitera un effort *important*.
- Quelle quantité deffort est considérée comme importante ?
Utiliser des mots vagues peut être utile comme introduction à des données supplémentaires ou comme résumé de lhistoire que vous venez de raconter. Mais envisagez de vous assurer que chaque partie de votre présentation est claire pour votre public.
### 5. Utiliser lémotion
Lémotion est essentielle dans la narration. Elle est encore plus importante lorsque vous racontez une histoire avec des données. Lorsque vous communiquez des données, tout est centré sur les conclusions que vous souhaitez que votre public retienne. Évoquer une émotion chez un public laide à ressentir de lempathie et le rend plus susceptible dagir. Lémotion augmente également la probabilité quun public se souvienne de votre message.
Vous avez peut-être déjà rencontré cela avec des publicités télévisées. Certaines publicités sont très sombres et utilisent une émotion triste pour se connecter à leur public et faire ressortir les données quelles présentent. Dautres publicités, très joyeuses et optimistes, peuvent vous faire associer leurs données à un sentiment de bonheur.
Comment utiliser lémotion lorsque vous communiquez des données ? Voici quelques façons :
- Utiliser des témoignages et des histoires personnelles
- Lorsque vous collectez des données, essayez de collecter à la fois des données quantitatives et qualitatives, et intégrez les deux types de données lorsque vous communiquez. Si vos données sont principalement quantitatives, recherchez des histoires individuelles pour en savoir plus sur leur expérience avec ce que vos données vous disent.
- Utiliser des images
- Les images aident un public à se projeter dans une situation. Lorsque vous utilisez des images, vous pouvez orienter un public vers lémotion que vous pensez quil devrait ressentir à propos de vos données.
- Utiliser des couleurs
- Différentes couleurs évoquent différentes émotions. Voici quelques couleurs populaires et les émotions quelles évoquent. Attention, les couleurs peuvent avoir des significations différentes selon les cultures.
- Le bleu évoque généralement des émotions de paix et de confiance
- Le vert est souvent associé à la nature et à lenvironnement
- Le rouge est souvent synonyme de passion et dexcitation
- Le jaune est souvent lié à loptimisme et au bonheur
# Étude de cas sur la communication
Emerson est chef de produit pour une application mobile. Emerson a remarqué que les clients soumettent 42 % de plaintes et de rapports de bogues en plus le week-end. Emerson a également remarqué que les clients qui soumettent une plainte qui reste sans réponse après 48 heures sont 32 % plus susceptibles de donner à lapplication une note de 1 ou 2 dans lApp Store.
Après avoir fait des recherches, Emerson a trouvé quelques solutions pour résoudre le problème. Emerson organise une réunion de 30 minutes avec les 3 responsables de lentreprise pour communiquer les données et les solutions proposées.
Lors de cette réunion, lobjectif dEmerson est de faire comprendre aux responsables de lentreprise que les 2 solutions ci-dessous peuvent améliorer la note de lapplication, ce qui se traduira probablement par une augmentation des revenus.
**Solution 1.** Embaucher des représentants du service client pour travailler le week-end
**Solution 2.** Acheter un nouveau système de gestion des tickets du service client permettant aux représentants du service client didentifier facilement les plaintes qui sont dans la file dattente depuis le plus longtemps afin de savoir lesquelles traiter en priorité.
Lors de la réunion, Emerson passe 5 minutes à expliquer pourquoi une mauvaise note sur l'App Store est problématique, 10 minutes à détailler le processus de recherche et l'identification des tendances, 10 minutes à examiner certaines des récentes plaintes des clients, et les 5 dernières minutes à survoler les 2 solutions potentielles.
Cette manière de communiquer a-t-elle été efficace pour Emerson pendant cette réunion ?
Pendant la réunion, un des responsables de lentreprise sest focalisé sur les 10 minutes consacrées aux plaintes des clients quEmerson a présentées. Après la réunion, ces plaintes étaient la seule chose dont ce responsable se souvenait. Un autre responsable sest principalement concentré sur la description du processus de recherche par Emerson. Le troisième responsable se souvenait des solutions proposées par Emerson, mais nétait pas sûr de la manière dont ces solutions pourraient être mises en œuvre.
Dans la situation ci-dessus, on peut constater un écart significatif entre ce quEmerson voulait que les responsables retiennent et ce quils ont réellement retenu de la réunion. Voici une autre approche quEmerson pourrait envisager.
Comment Emerson pourrait-il améliorer cette approche ?
Contexte, Conflit, Climax, Clôture, Conclusion
**Contexte** - Emerson pourrait consacrer les 5 premières minutes à introduire la situation dans son ensemble et sassurer que les responsables comprennent comment les problèmes affectent des indicateurs critiques pour lentreprise, comme le chiffre daffaires.
Cela pourrait être présenté ainsi : "Actuellement, la note de notre application sur lApp Store est de 2,5. Les notes sur lApp Store sont essentielles pour loptimisation de la visibilité dans lApp Store, ce qui influence combien dutilisateurs voient notre application dans les recherches et comment notre application est perçue par les utilisateurs potentiels. Et bien sûr, le nombre dutilisateurs que nous avons est directement lié au chiffre daffaires."
**Conflit** Emerson pourrait ensuite consacrer environ 5 minutes à parler du conflit.
Cela pourrait être formulé ainsi : "Les utilisateurs soumettent 42 % de plaintes et rapports de bugs en plus le week-end. Les clients qui soumettent une plainte qui reste sans réponse après 48 heures sont 32 % moins susceptibles de donner une note supérieure à 2 à notre application sur lApp Store. Améliorer la note de notre application sur lApp Store à 4 augmenterait notre visibilité de 20 à 30 %, ce qui, selon mes projections, augmenterait le chiffre daffaires de 10 %." Bien sûr, Emerson devrait être prêt à justifier ces chiffres.
**Climax** Après avoir posé les bases, Emerson pourrait ensuite passer au Climax pendant environ 5 minutes.
Emerson pourrait introduire les solutions proposées, expliquer comment ces solutions résoudraient les problèmes identifiés, comment elles pourraient être intégrées dans les flux de travail existants, combien elles coûteraient, quel serait leur retour sur investissement, et peut-être même montrer des captures décran ou des maquettes de lapparence des solutions une fois mises en œuvre. Emerson pourrait également partager des témoignages dutilisateurs ayant attendu plus de 48 heures pour obtenir une réponse à leur plainte, ainsi quun témoignage dun représentant actuel du service client de lentreprise commentant le système de gestion des tickets actuel.
**Clôture** Emerson pourrait ensuite consacrer 5 minutes à récapituler les problèmes rencontrés par lentreprise, revenir sur les solutions proposées et rappeler pourquoi ces solutions sont les bonnes.
**Conclusion** Étant donné quil sagit dune réunion avec quelques parties prenantes où une communication bidirectionnelle sera utilisée, Emerson pourrait prévoir de laisser 10 minutes pour des questions, afin de sassurer que tout ce qui pourrait être confus pour les responsables soit clarifié avant la fin de la réunion.
Si Emerson adoptait lapproche n°2, il est beaucoup plus probable que les responsables retiennent de la réunion exactement ce quEmerson voulait quils retiennent à savoir que la manière dont les plaintes et les bugs sont gérés pourrait être améliorée, et quil existe 2 solutions qui pourraient être mises en place pour apporter cette amélioration. Cette approche serait une manière beaucoup plus efficace de communiquer les données et lhistoire quEmerson souhaite transmettre.
# Conclusion
### Résumé des points principaux
- Communiquer, cest transmettre ou échanger des informations.
- Lorsque vous communiquez des données, votre objectif ne devrait pas être simplement de transmettre des chiffres à votre audience. Votre objectif devrait être de raconter une histoire éclairée par vos données.
- Il existe 2 types de communication : la communication unidirectionnelle (linformation est transmise sans intention de réponse) et la communication bidirectionnelle (linformation est échangée dans les deux sens).
- Il existe de nombreuses stratégies pour raconter une histoire avec vos données. Voici 5 stratégies que nous avons abordées :
- Comprendre votre audience, votre support et votre méthode de communication
- Commencer avec la fin en tête
- Laborder comme une véritable histoire
- Utiliser des mots et des phrases significatifs
- Faire appel aux émotions
### Ressources recommandées pour lauto-apprentissage
[The Five C's of Storytelling - Articulate Persuasion](http://articulatepersuasion.com/the-five-cs-of-storytelling/)
[1.4 Your Responsibilities as a Communicator Business Communication for Success (umn.edu)](https://open.lib.umn.edu/businesscommunication/chapter/1-4-your-responsibilities-as-a-communicator/)
[How to Tell a Story with Data (hbr.org)](https://hbr.org/2013/04/how-to-tell-a-story-with-data)
[Two-Way Communication: 4 Tips for a More Engaged Workplace (yourthoughtpartner.com)](https://www.yourthoughtpartner.com/blog/bid/59576/4-steps-to-increase-employee-engagement-through-two-way-communication)
[6 succinct steps to great data storytelling - BarnRaisers, LLC (barnraisersllc.com)](https://barnraisersllc.com/2021/05/02/6-succinct-steps-to-great-data-storytelling/)
[How to Tell a Story With Data | Lucidchart Blog](https://www.lucidchart.com/blog/how-to-tell-a-story-with-data)
[6 Cs of Effective Storytelling on Social Media | Cooler Insights](https://coolerinsights.com/2018/06/effective-storytelling-social-media/)
[The Importance of Emotions In Presentations | Ethos3 - A Presentation Training and Design Agency](https://ethos3.com/2015/02/the-importance-of-emotions-in-presentations/)
[Data storytelling: linking emotions and rational decisions (toucantoco.com)](https://www.toucantoco.com/en/blog/data-storytelling-dataviz)
[Emotional Advertising: How Brands Use Feelings to Get People to Buy (hubspot.com)](https://blog.hubspot.com/marketing/emotions-in-advertising-examples)
[Choosing Colors for Your Presentation Slides | Think Outside The Slide](https://www.thinkoutsidetheslide.com/choosing-colors-for-your-presentation-slides/)
[How To Present Data [10 Expert Tips] | ObservePoint](https://resources.observepoint.com/blog/10-tips-for-presenting-data)
[Microsoft Word - Persuasive Instructions.doc (tpsnva.org)](https://www.tpsnva.org/teach/lq/016/persinstr.pdf)
[The Power of Story for Your Data (thinkhdi.com)](https://www.thinkhdi.com/library/supportworld/2019/power-story-your-data.aspx)
[Common Mistakes in Data Presentation (perceptualedge.com)](https://www.perceptualedge.com/articles/ie/data_presentation.pdf)
[Infographic: Here are 15 Common Data Fallacies to Avoid (visualcapitalist.com)](https://www.visualcapitalist.com/here-are-15-common-data-fallacies-to-avoid/)
[Cherry Picking: When People Ignore Evidence that They Dislike Effectiviology](https://effectiviology.com/cherry-picking/#How_to_avoid_cherry_picking)
[Tell Stories with Data: Communication in Data Science | by Sonali Verghese | Towards Data Science](https://towardsdatascience.com/tell-stories-with-data-communication-in-data-science-5266f7671d7)
[1. Communicating Data - Communicating Data with Tableau [Book] (oreilly.com)](https://www.oreilly.com/library/view/communicating-data-with/9781449372019/ch01.html)
## [Quiz post-conférence](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/31)
Révisez ce que vous venez dapprendre avec le quiz post-conférence ci-dessus !
## Devoir
[Étude de marché](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,24 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "8980d7efd101c82d6d6ffc3458214120",
"translation_date": "2025-08-24T13:29:30+00:00",
"source_file": "4-Data-Science-Lifecycle/16-communication/assignment.md",
"language_code": "fr"
}
-->
# Racontez une histoire
## Instructions
La science des données consiste à raconter des histoires. Choisissez un ensemble de données et rédigez un court article sur l'histoire que vous pourriez en tirer. Que souhaitez-vous que votre ensemble de données révèle ? Que ferez-vous si ses révélations s'avèrent problématiques ? Et si vos données ne dévoilent pas facilement leurs secrets ? Pensez aux scénarios que votre ensemble de données pourrait présenter et notez-les.
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Un essai d'une page est présenté au format .doc avec l'ensemble de données expliqué, documenté, crédité, et une histoire cohérente est présentée à son sujet avec des exemples détaillés tirés des données.| Un essai plus court est présenté dans un format moins détaillé | L'essai manque de l'un des détails mentionnés ci-dessus.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,28 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "dd173fd30fc039a7a299898920680723",
"translation_date": "2025-08-24T13:16:17+00:00",
"source_file": "4-Data-Science-Lifecycle/README.md",
"language_code": "fr"
}
-->
# Le cycle de vie de la science des données
![communication](../../../4-Data-Science-Lifecycle/images/communication.jpg)
> Photo par <a href="https://unsplash.com/@headwayio?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Headway</a> sur <a href="https://unsplash.com/s/photos/communication?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
Dans ces leçons, vous explorerez certains aspects du cycle de vie de la science des données, y compris l'analyse et la communication autour des données.
### Sujets
1. [Introduction](14-Introduction/README.md)
2. [Analyse](15-analyzing/README.md)
3. [Communication](16-communication/README.md)
### Crédits
Ces leçons ont été écrites avec ❤️ par [Jalen McGee](https://twitter.com/JalenMCG) et [Jasmine Greenaway](https://twitter.com/paladique)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,114 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "408c55cab2880daa4e78616308bd5db7",
"translation_date": "2025-08-24T13:06:45+00:00",
"source_file": "5-Data-Science-In-Cloud/17-Introduction/README.md",
"language_code": "fr"
}
-->
# Introduction à la science des données dans le Cloud
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/17-DataScience-Cloud.png)|
|:---:|
| Science des données dans le Cloud : Introduction - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Dans cette leçon, vous apprendrez les principes fondamentaux du Cloud, puis vous verrez pourquoi il peut être intéressant d'utiliser les services Cloud pour exécuter vos projets de science des données. Nous examinerons également quelques exemples de projets de science des données réalisés dans le Cloud.
## [Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/32)
## Qu'est-ce que le Cloud ?
Le Cloud, ou informatique en nuage, désigne la fourniture d'une large gamme de services informatiques à la demande, hébergés sur une infrastructure via Internet. Ces services incluent des solutions telles que le stockage, les bases de données, les réseaux, les logiciels, l'analyse et les services intelligents.
On distingue généralement les Clouds publics, privés et hybrides comme suit :
* Cloud public : un Cloud public est détenu et exploité par un fournisseur de services Cloud tiers qui met ses ressources informatiques à disposition du public via Internet.
* Cloud privé : désigne les ressources informatiques en nuage utilisées exclusivement par une entreprise ou organisation unique, avec des services et une infrastructure maintenus sur un réseau privé.
* Cloud hybride : le Cloud hybride est un système qui combine les Clouds publics et privés. Les utilisateurs optent pour un centre de données sur site tout en permettant aux données et applications de fonctionner sur un ou plusieurs Clouds publics.
La plupart des services d'informatique en nuage se répartissent en trois catégories : Infrastructure en tant que service (IaaS), Plateforme en tant que service (PaaS) et Logiciel en tant que service (SaaS).
* Infrastructure en tant que service (IaaS) : les utilisateurs louent une infrastructure informatique telle que des serveurs, des machines virtuelles (VM), du stockage, des réseaux, des systèmes d'exploitation.
* Plateforme en tant que service (PaaS) : les utilisateurs louent un environnement pour développer, tester, livrer et gérer des applications logicielles. Les utilisateurs n'ont pas à se soucier de la configuration ou de la gestion de l'infrastructure sous-jacente des serveurs, du stockage, du réseau et des bases de données nécessaires au développement.
* Logiciel en tant que service (SaaS) : les utilisateurs accèdent à des applications logicielles via Internet, à la demande et généralement sur une base d'abonnement. Les utilisateurs n'ont pas à se soucier de l'hébergement et de la gestion de l'application logicielle, de l'infrastructure sous-jacente ou de la maintenance, comme les mises à jour logicielles et les correctifs de sécurité.
Parmi les principaux fournisseurs de Cloud figurent Amazon Web Services, Google Cloud Platform et Microsoft Azure.
## Pourquoi choisir le Cloud pour la science des données ?
Les développeurs et les professionnels de l'informatique choisissent de travailler avec le Cloud pour de nombreuses raisons, notamment :
* Innovation : vous pouvez alimenter vos applications en intégrant directement des services innovants créés par les fournisseurs de Cloud dans vos applications.
* Flexibilité : vous ne payez que pour les services dont vous avez besoin et pouvez choisir parmi une large gamme de services. Vous payez généralement à l'usage et adaptez vos services en fonction de vos besoins évolutifs.
* Budget : vous n'avez pas besoin de faire des investissements initiaux pour acheter du matériel et des logiciels, configurer et gérer des centres de données sur site, et vous pouvez simplement payer pour ce que vous utilisez.
* Scalabilité : vos ressources peuvent évoluer en fonction des besoins de votre projet, ce qui signifie que vos applications peuvent utiliser plus ou moins de puissance de calcul, de stockage et de bande passante, en s'adaptant à des facteurs externes à tout moment.
* Productivité : vous pouvez vous concentrer sur votre activité plutôt que de passer du temps sur des tâches qui peuvent être gérées par quelqu'un d'autre, comme la gestion des centres de données.
* Fiabilité : l'informatique en nuage offre plusieurs moyens de sauvegarder en continu vos données et vous pouvez mettre en place des plans de reprise après sinistre pour maintenir votre activité et vos services, même en période de crise.
* Sécurité : vous pouvez bénéficier de politiques, de technologies et de contrôles qui renforcent la sécurité de votre projet.
Ce sont quelques-unes des raisons les plus courantes pour lesquelles les gens choisissent d'utiliser les services Cloud. Maintenant que nous comprenons mieux ce qu'est le Cloud et ses principaux avantages, examinons plus spécifiquement les métiers des data scientists et des développeurs travaillant avec les données, et comment le Cloud peut les aider à relever plusieurs défis auxquels ils pourraient être confrontés :
* Stocker de grandes quantités de données : au lieu d'acheter, de gérer et de protéger de grands serveurs, vous pouvez stocker vos données directement dans le Cloud, avec des solutions telles qu'Azure Cosmos DB, Azure SQL Database et Azure Data Lake Storage.
* Intégration des données : l'intégration des données est une partie essentielle de la science des données, qui vous permet de passer de la collecte de données à la prise de décisions. Avec les services d'intégration de données proposés dans le Cloud, vous pouvez collecter, transformer et intégrer des données provenant de diverses sources dans un entrepôt de données unique, avec Data Factory.
* Traitement des données : le traitement de vastes quantités de données nécessite beaucoup de puissance de calcul, et tout le monde n'a pas accès à des machines suffisamment puissantes pour cela, c'est pourquoi beaucoup choisissent de tirer parti de la puissance de calcul massive du Cloud pour exécuter et déployer leurs solutions.
* Utilisation des services d'analyse de données : des services Cloud comme Azure Synapse Analytics, Azure Stream Analytics et Azure Databricks vous aident à transformer vos données en informations exploitables.
* Utilisation des services d'intelligence artificielle et de machine learning : au lieu de partir de zéro, vous pouvez utiliser des algorithmes de machine learning proposés par le fournisseur de Cloud, avec des services tels qu'AzureML. Vous pouvez également utiliser des services cognitifs tels que la conversion de texte en parole, la reconnaissance visuelle et bien plus.
## Exemples de science des données dans le Cloud
Rendons cela plus concret en examinant quelques scénarios.
### Analyse en temps réel des sentiments sur les réseaux sociaux
Commençons par un scénario couramment étudié par les débutants en machine learning : l'analyse des sentiments sur les réseaux sociaux en temps réel.
Supposons que vous dirigez un site d'actualités et que vous souhaitez exploiter des données en direct pour comprendre quels contenus pourraient intéresser vos lecteurs. Pour en savoir plus, vous pouvez créer un programme qui effectue une analyse des sentiments en temps réel des données provenant de publications Twitter, sur des sujets pertinents pour vos lecteurs.
Les indicateurs clés que vous examinerez sont le volume de tweets sur des sujets spécifiques (hashtags) et les sentiments, établis à l'aide d'outils d'analyse qui réalisent une analyse des sentiments autour des sujets spécifiés.
Les étapes nécessaires pour créer ce projet sont les suivantes :
* Créer un hub d'événements pour la collecte des données en streaming, qui collectera les données de Twitter.
* Configurer et démarrer une application cliente Twitter, qui appellera les API de streaming Twitter.
* Créer un travail Stream Analytics.
* Spécifier les entrées et les requêtes du travail.
* Créer un point de sortie et spécifier les sorties du travail.
* Démarrer le travail.
Pour voir le processus complet, consultez la [documentation](https://docs.microsoft.com/azure/stream-analytics/stream-analytics-twitter-sentiment-analysis-trends?WT.mc_id=academic-77958-bethanycheum&ocid=AID30411099).
### Analyse des articles scientifiques
Prenons un autre exemple de projet créé par [Dmitry Soshnikov](http://soshnikov.com), l'un des auteurs de ce programme.
Dmitry a créé un outil qui analyse les articles sur le COVID. En examinant ce projet, vous verrez comment créer un outil qui extrait des connaissances à partir d'articles scientifiques, obtient des informations et aide les chercheurs à naviguer efficacement dans de grandes collections d'articles.
Voyons les différentes étapes utilisées pour cela :
* Extraction et prétraitement des informations avec [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
* Utilisation de [Azure ML](https://azure.microsoft.com/services/machine-learning?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) pour paralléliser le traitement.
* Stockage et interrogation des informations avec [Cosmos DB](https://azure.microsoft.com/services/cosmos-db?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
* Création d'un tableau de bord interactif pour l'exploration et la visualisation des données avec Power BI.
Pour voir le processus complet, visitez le [blog de Dmitry](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/).
Comme vous pouvez le constater, nous pouvons tirer parti des services Cloud de nombreuses façons pour réaliser de la science des données.
## Note de bas de page
Sources :
* https://azure.microsoft.com/overview/what-is-cloud-computing?ocid=AID3041109
* https://docs.microsoft.com/azure/stream-analytics/stream-analytics-twitter-sentiment-analysis-trends?ocid=AID3041109
* https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/
## Quiz après la leçon
[Quiz après la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/33)
## Devoir
[Étude de marché](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "96f3696153d9ed54b19a1bb65438c104",
"translation_date": "2025-08-24T13:08:27+00:00",
"source_file": "5-Data-Science-In-Cloud/17-Introduction/assignment.md",
"language_code": "fr"
}
-->
# Recherche de Marché
## Instructions
Dans cette leçon, vous avez appris qu'il existe plusieurs fournisseurs de cloud importants. Faites des recherches de marché pour découvrir ce que chacun peut offrir au Data Scientist. Les offres sont-elles comparables ? Rédigez un document pour décrire les offres de trois ou plus de ces fournisseurs de cloud.
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Un document d'une page décrit les offres en science des données de trois fournisseurs de cloud et les différencie. | Un document plus court est présenté. | Un document est présenté sans compléter l'analyse.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,348 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "14b2a7f1c63202920bd98eeb913f5614",
"translation_date": "2025-08-24T13:01:27+00:00",
"source_file": "5-Data-Science-In-Cloud/18-Low-Code/README.md",
"language_code": "fr"
}
-->
# Data Science dans le Cloud : La méthode "Low code/No code"
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/18-DataScience-Cloud.png)|
|:---:|
| Data Science dans le Cloud : Low Code - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Table des matières :
- [Data Science dans le Cloud : La méthode "Low code/No code"](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [Quiz avant le cours](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1. Introduction](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.1 Qu'est-ce qu'Azure Machine Learning ?](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.2 Le projet de prédiction des insuffisances cardiaques :](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.3 Le jeu de données sur les insuffisances cardiaques :](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2. Entraînement Low code/No code d'un modèle dans Azure ML Studio](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.1 Créer un espace de travail Azure ML](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2 Ressources de calcul](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2.1 Choisir les bonnes options pour vos ressources de calcul](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2.2 Créer un cluster de calcul](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.3 Charger le jeu de données](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.4 Entraînement Low code/No code avec AutoML](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3. Déploiement Low code/No code du modèle et consommation de l'endpoint](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3.1 Déploiement du modèle](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3.2 Consommation de l'endpoint](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [🚀 Défi](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [Quiz après le cours](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [Révision et auto-apprentissage](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [Devoir](../../../../5-Data-Science-In-Cloud/18-Low-Code)
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/34)
## 1. Introduction
### 1.1 Qu'est-ce qu'Azure Machine Learning ?
La plateforme cloud Azure propose plus de 200 produits et services cloud conçus pour vous aider à donner vie à de nouvelles solutions. Les data scientists consacrent beaucoup d'efforts à explorer et prétraiter les données, ainsi qu'à tester divers types d'algorithmes d'entraînement pour produire des modèles précis. Ces tâches sont chronophages et utilisent souvent de manière inefficace des ressources de calcul coûteuses.
[Azure ML](https://docs.microsoft.com/azure/machine-learning/overview-what-is-azure-machine-learning?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) est une plateforme cloud pour créer et exploiter des solutions de machine learning dans Azure. Elle inclut une large gamme de fonctionnalités qui aident les data scientists à préparer les données, entraîner des modèles, publier des services prédictifs et surveiller leur utilisation. Surtout, elle leur permet d'augmenter leur efficacité en automatisant de nombreuses tâches chronophages liées à l'entraînement des modèles, et leur offre des ressources de calcul cloud qui s'adaptent efficacement pour gérer de grands volumes de données tout en générant des coûts uniquement lorsqu'elles sont utilisées.
Azure ML fournit tous les outils nécessaires aux développeurs et data scientists pour leurs workflows de machine learning. Ces outils incluent :
- **Azure Machine Learning Studio** : un portail web dans Azure Machine Learning pour des options low-code et no-code pour l'entraînement, le déploiement, l'automatisation, le suivi et la gestion des actifs. Le studio s'intègre au SDK Azure Machine Learning pour une expérience fluide.
- **Jupyter Notebooks** : pour prototyper rapidement et tester des modèles de machine learning.
- **Azure Machine Learning Designer** : permet de glisser-déposer des modules pour construire des expériences et déployer des pipelines dans un environnement low-code.
- **Interface AutoML** : automatise les tâches itératives du développement de modèles de machine learning, permettant de créer des modèles ML à grande échelle, avec efficacité et productivité, tout en maintenant la qualité des modèles.
- **Étiquetage des données** : un outil ML assisté pour étiqueter automatiquement les données.
- **Extension de machine learning pour Visual Studio Code** : fournit un environnement de développement complet pour créer et gérer des projets ML.
- **CLI de machine learning** : offre des commandes pour gérer les ressources Azure ML depuis la ligne de commande.
- **Intégration avec des frameworks open-source** tels que PyTorch, TensorFlow, Scikit-learn et bien d'autres pour entraîner, déployer et gérer le processus ML de bout en bout.
- **MLflow** : une bibliothèque open-source pour gérer le cycle de vie de vos expériences de machine learning. **MLFlow Tracking** est un composant de MLflow qui enregistre et suit les métriques de vos entraînements et les artefacts de modèles, quel que soit l'environnement de votre expérience.
### 1.2 Le projet de prédiction des insuffisances cardiaques :
Il est indéniable que créer et développer des projets est le meilleur moyen de mettre vos compétences et connaissances à l'épreuve. Dans cette leçon, nous allons explorer deux façons différentes de construire un projet de data science pour la prédiction des attaques cardiaques dans Azure ML Studio, via Low code/No code et via le SDK Azure ML, comme illustré dans le schéma suivant :
![project-schema](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/project-schema.PNG)
Chaque méthode a ses avantages et inconvénients. La méthode Low code/No code est plus facile à démarrer car elle implique une interaction avec une interface graphique (GUI), sans nécessiter de connaissances préalables en programmation. Cette méthode permet de tester rapidement la viabilité du projet et de créer un POC (Proof Of Concept). Cependant, à mesure que le projet évolue et que les choses doivent être prêtes pour la production, il devient difficile de créer des ressources via une interface graphique. Il est alors nécessaire d'automatiser tout le processus de manière programmatique, depuis la création des ressources jusqu'au déploiement du modèle. C'est là que la maîtrise du SDK Azure ML devient essentielle.
| | Low code/No code | SDK Azure ML |
|-------------------|------------------|---------------------------|
| Expertise en code | Non requise | Requise |
| Temps de développement | Rapide et facile | Dépend de l'expertise en code |
| Prêt pour la production | Non | Oui |
### 1.3 Le jeu de données sur les insuffisances cardiaques :
Les maladies cardiovasculaires (MCV) sont la première cause de mortalité dans le monde, représentant 31 % de tous les décès. Les facteurs de risque environnementaux et comportementaux tels que l'utilisation du tabac, une alimentation malsaine et l'obésité, l'inactivité physique et la consommation excessive d'alcool peuvent être utilisés comme caractéristiques pour les modèles d'estimation. Être capable d'estimer la probabilité de développement d'une MCV pourrait être très utile pour prévenir les attaques chez les personnes à haut risque.
Kaggle a mis à disposition un [jeu de données sur les insuffisances cardiaques](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data) que nous allons utiliser pour ce projet. Vous pouvez télécharger le jeu de données dès maintenant. Il s'agit d'un jeu de données tabulaire avec 13 colonnes (12 caractéristiques et 1 variable cible) et 299 lignes.
| | Nom de la variable | Type | Description | Exemple |
|----|---------------------------|-----------------|-----------------------------------------------------------|-------------------|
| 1 | age | numérique | âge du patient | 25 |
| 2 | anaemia | booléen | Diminution des globules rouges ou de l'hémoglobine | 0 ou 1 |
| 3 | creatinine_phosphokinase | numérique | Niveau de l'enzyme CPK dans le sang | 542 |
| 4 | diabetes | booléen | Si le patient est diabétique | 0 ou 1 |
| 5 | ejection_fraction | numérique | Pourcentage de sang quittant le cœur à chaque contraction | 45 |
| 6 | high_blood_pressure | booléen | Si le patient est hypertendu | 0 ou 1 |
| 7 | platelets | numérique | Plaquettes dans le sang | 149000 |
| 8 | serum_creatinine | numérique | Niveau de créatinine sérique dans le sang | 0.5 |
| 9 | serum_sodium | numérique | Niveau de sodium sérique dans le sang | jun |
| 10 | sex | booléen | femme ou homme | 0 ou 1 |
| 11 | smoking | booléen | Si le patient fume | 0 ou 1 |
| 12 | time | numérique | période de suivi (jours) | 4 |
|----|---------------------------|-----------------|-----------------------------------------------------------|-------------------|
| 21 | DEATH_EVENT [Cible] | booléen | si le patient décède pendant la période de suivi | 0 ou 1 |
Une fois que vous avez le jeu de données, nous pouvons commencer le projet dans Azure.
## 2. Entraînement Low code/No code d'un modèle dans Azure ML Studio
### 2.1 Créer un espace de travail Azure ML
Pour entraîner un modèle dans Azure ML, vous devez d'abord créer un espace de travail Azure ML. L'espace de travail est la ressource de niveau supérieur pour Azure Machine Learning, offrant un endroit centralisé pour travailler avec tous les artefacts que vous créez lorsque vous utilisez Azure Machine Learning. L'espace de travail conserve un historique de tous les entraînements, y compris les journaux, les métriques, les résultats et une capture instantanée de vos scripts. Vous utilisez ces informations pour déterminer quel entraînement produit le meilleur modèle. [En savoir plus](https://docs.microsoft.com/azure/machine-learning/concept-workspace?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
Il est recommandé d'utiliser le navigateur le plus à jour compatible avec votre système d'exploitation. Les navigateurs suivants sont pris en charge :
- Microsoft Edge (Le nouveau Microsoft Edge, dernière version. Pas Microsoft Edge legacy)
- Safari (dernière version, uniquement sur Mac)
- Chrome (dernière version)
- Firefox (dernière version)
Pour utiliser Azure Machine Learning, créez un espace de travail dans votre abonnement Azure. Vous pouvez ensuite utiliser cet espace de travail pour gérer les données, les ressources de calcul, le code, les modèles et autres artefacts liés à vos charges de travail de machine learning.
> **_NOTE :_** Votre abonnement Azure sera facturé un petit montant pour le stockage des données tant que l'espace de travail Azure Machine Learning existe dans votre abonnement. Nous vous recommandons donc de supprimer l'espace de travail Azure Machine Learning lorsque vous ne l'utilisez plus.
1. Connectez-vous au [portail Azure](https://ms.portal.azure.com/) en utilisant les identifiants Microsoft associés à votre abonnement Azure.
2. Sélectionnez **Créer une ressource**
![workspace-1](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-1.PNG)
Recherchez Machine Learning et sélectionnez la tuile Machine Learning
![workspace-2](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-2.PNG)
Cliquez sur le bouton créer
![workspace-3](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-3.PNG)
Remplissez les paramètres comme suit :
- Abonnement : Votre abonnement Azure
- Groupe de ressources : Créez ou sélectionnez un groupe de ressources
- Nom de l'espace de travail : Entrez un nom unique pour votre espace de travail
- Région : Sélectionnez la région géographique la plus proche de vous
- Compte de stockage : Notez le nouveau compte de stockage par défaut qui sera créé pour votre espace de travail
- Key vault : Notez le nouveau key vault par défaut qui sera créé pour votre espace de travail
- Application insights : Notez la nouvelle ressource Application Insights par défaut qui sera créée pour votre espace de travail
- Registre de conteneurs : Aucun (un sera créé automatiquement la première fois que vous déployez un modèle dans un conteneur)
![workspace-4](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-4.PNG)
- Cliquez sur créer + examiner, puis sur le bouton créer
3. Attendez que votre espace de travail soit créé (cela peut prendre quelques minutes). Ensuite, accédez-y dans le portail. Vous pouvez le trouver via le service Azure Machine Learning.
4. Sur la page d'aperçu de votre espace de travail, lancez Azure Machine Learning Studio (ou ouvrez un nouvel onglet de navigateur et accédez à https://ml.azure.com), et connectez-vous à Azure Machine Learning Studio en utilisant votre compte Microsoft. Si nécessaire, sélectionnez votre répertoire et abonnement Azure, ainsi que votre espace de travail Azure Machine Learning.
![workspace-5](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-5.PNG)
5. Dans Azure Machine Learning Studio, basculez l'icône ☰ en haut à gauche pour afficher les différentes pages de l'interface. Vous pouvez utiliser ces pages pour gérer les ressources de votre espace de travail.
![workspace-6](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-6.PNG)
Vous pouvez gérer votre espace de travail via le portail Azure, mais pour les data scientists et les ingénieurs en opérations de machine learning, Azure Machine Learning Studio offre une interface utilisateur plus ciblée pour gérer les ressources de l'espace de travail.
### 2.2 Ressources de calcul
Les ressources de calcul sont des ressources cloud sur lesquelles vous pouvez exécuter des processus d'entraînement de modèles et d'exploration de données. Il existe quatre types de ressources de calcul que vous pouvez créer :
- **Instances de calcul** : Stations de travail de développement que les data scientists peuvent utiliser pour travailler avec des données et des modèles. Cela implique la création d'une machine virtuelle (VM) et le lancement d'une instance de notebook. Vous pouvez ensuite entraîner un modèle en appelant un cluster de calcul depuis le notebook.
- **Clusters de calcul** : Clusters évolutifs de machines virtuelles pour le traitement à la demande du code d'expérience. Vous en aurez besoin pour entraîner un modèle. Les clusters de calcul peuvent également utiliser des ressources GPU ou CPU spécialisées.
- **Clusters d'inférence** : Cibles de déploiement pour les services prédictifs utilisant vos modèles entraînés.
- **Compute Attaché** : Liens vers des ressources de calcul Azure existantes, telles que des machines virtuelles ou des clusters Azure Databricks.
#### 2.2.1 Choisir les bonnes options pour vos ressources de calcul
Certains facteurs clés sont à considérer lors de la création d'une ressource de calcul, et ces choix peuvent être des décisions critiques à prendre.
**Avez-vous besoin d'un CPU ou d'un GPU ?**
Un CPU (Central Processing Unit) est le circuit électronique qui exécute les instructions d'un programme informatique. Un GPU (Graphics Processing Unit) est un circuit électronique spécialisé capable d'exécuter du code lié aux graphiques à un rythme très élevé.
La principale différence entre l'architecture CPU et GPU est qu'un CPU est conçu pour gérer rapidement une large gamme de tâches (mesurée par la vitesse d'horloge du CPU), mais il est limité dans la simultanéité des tâches pouvant être exécutées. Les GPU sont conçus pour le calcul parallèle et sont donc bien meilleurs pour les tâches d'apprentissage profond.
| CPU | GPU |
|-----------------------------------------|-----------------------------|
| Moins cher | Plus cher |
| Niveau de simultanéité plus faible | Niveau de simultanéité plus élevé |
| Plus lent pour entraîner des modèles d'apprentissage profond | Optimal pour l'apprentissage profond |
**Taille du cluster**
Les clusters plus grands sont plus coûteux mais offrent une meilleure réactivité. Par conséquent, si vous avez du temps mais peu d'argent, vous devriez commencer avec un petit cluster. À l'inverse, si vous avez de l'argent mais peu de temps, vous devriez commencer avec un cluster plus grand.
**Taille de la machine virtuelle (VM)**
En fonction de vos contraintes de temps et de budget, vous pouvez ajuster la taille de votre RAM, disque, nombre de cœurs et vitesse d'horloge. Augmenter tous ces paramètres sera plus coûteux, mais offrira de meilleures performances.
**Instances dédiées ou à faible priorité ?**
Une instance à faible priorité signifie qu'elle est interruptible : en gros, Microsoft Azure peut reprendre ces ressources et les affecter à une autre tâche, interrompant ainsi un travail. Une instance dédiée, ou non interruptible, signifie que le travail ne sera jamais interrompu sans votre permission.
C'est une autre considération entre temps et argent, car les instances interruptibles sont moins chères que les instances dédiées.
#### 2.2.2 Création d'un cluster de calcul
Dans l'[espace de travail Azure ML](https://ml.azure.com/) que nous avons créé précédemment, allez dans la section "Compute" et vous pourrez voir les différentes ressources de calcul que nous venons de discuter (c'est-à-dire instances de calcul, clusters de calcul, clusters d'inférence et calcul attaché). Pour ce projet, nous aurons besoin d'un cluster de calcul pour l'entraînement du modèle. Dans le Studio, cliquez sur le menu "Compute", puis sur l'onglet "Compute cluster" et cliquez sur le bouton "+ New" pour créer un cluster de calcul.
![22](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-1.PNG)
1. Choisissez vos options : Dédié ou Faible priorité, CPU ou GPU, taille de la VM et nombre de cœurs (vous pouvez conserver les paramètres par défaut pour ce projet).
2. Cliquez sur le bouton Suivant.
![23](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-2.PNG)
3. Donnez un nom au cluster de calcul.
4. Choisissez vos options : Nombre minimum/maximum de nœuds, secondes d'inactivité avant réduction, accès SSH. Notez que si le nombre minimum de nœuds est 0, vous économiserez de l'argent lorsque le cluster est inactif. Notez que plus le nombre maximum de nœuds est élevé, plus l'entraînement sera rapide. Le nombre maximum de nœuds recommandé est 3.
5. Cliquez sur le bouton "Create". Cette étape peut prendre quelques minutes.
![29](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-3.PNG)
Super ! Maintenant que nous avons un cluster de calcul, nous devons charger les données dans Azure ML Studio.
### 2.3 Chargement du jeu de données
1. Dans l'[espace de travail Azure ML](https://ml.azure.com/) que nous avons créé précédemment, cliquez sur "Datasets" dans le menu de gauche et cliquez sur le bouton "+ Create dataset" pour créer un jeu de données. Choisissez l'option "From local files" et sélectionnez le jeu de données Kaggle que nous avons téléchargé précédemment.
![24](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-1.PNG)
2. Donnez un nom, un type et une description à votre jeu de données. Cliquez sur Suivant. Téléchargez les données à partir des fichiers. Cliquez sur Suivant.
![25](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-2.PNG)
3. Dans le schéma, changez le type de données en Booléen pour les caractéristiques suivantes : anaemia, diabetes, high blood pressure, sex, smoking, et DEATH_EVENT. Cliquez sur Suivant et sur Créer.
![26](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-3.PNG)
Génial ! Maintenant que le jeu de données est en place et que le cluster de calcul est créé, nous pouvons commencer l'entraînement du modèle !
### 2.4 Entraînement Low code/No code avec AutoML
Le développement traditionnel de modèles d'apprentissage automatique est intensif en ressources, nécessite des connaissances approfondies et du temps pour produire et comparer des dizaines de modèles.
L'apprentissage automatique automatisé (AutoML) est le processus d'automatisation des tâches itératives et chronophages du développement de modèles d'apprentissage automatique. Il permet aux data scientists, analystes et développeurs de créer des modèles ML à grande échelle, avec efficacité et productivité, tout en maintenant la qualité des modèles. Cela réduit le temps nécessaire pour obtenir des modèles ML prêts pour la production, avec une grande facilité et efficacité. [En savoir plus](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
1. Dans l'[espace de travail Azure ML](https://ml.azure.com/) que nous avons créé précédemment, cliquez sur "Automated ML" dans le menu de gauche et sélectionnez le jeu de données que vous venez de télécharger. Cliquez sur Suivant.
![27](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-1.PNG)
2. Entrez un nouveau nom d'expérience, la colonne cible (DEATH_EVENT) et le cluster de calcul que nous avons créé. Cliquez sur Suivant.
![28](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-2.PNG)
3. Choisissez "Classification" et cliquez sur Terminer. Cette étape peut prendre entre 30 minutes et 1 heure, selon la taille de votre cluster de calcul.
![30](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-3.PNG)
4. Une fois l'exécution terminée, cliquez sur l'onglet "Automated ML", cliquez sur votre exécution, et cliquez sur l'algorithme dans la carte "Best model summary".
![31](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-4.PNG)
Ici, vous pouvez voir une description détaillée du meilleur modèle généré par AutoML. Vous pouvez également explorer d'autres modèles générés dans l'onglet Modèles. Prenez quelques minutes pour explorer les modèles dans le bouton Explanations (aperçu). Une fois que vous avez choisi le modèle que vous souhaitez utiliser (ici, nous choisirons le meilleur modèle sélectionné par AutoML), nous verrons comment le déployer.
## 3. Déploiement et consommation du modèle Low code/No code
### 3.1 Déploiement du modèle
L'interface d'apprentissage automatique automatisé vous permet de déployer le meilleur modèle en tant que service web en quelques étapes. Le déploiement est l'intégration du modèle afin qu'il puisse faire des prédictions basées sur de nouvelles données et identifier des opportunités potentielles. Pour ce projet, le déploiement en tant que service web signifie que les applications médicales pourront consommer le modèle pour faire des prédictions en direct sur le risque de crise cardiaque de leurs patients.
Dans la description du meilleur modèle, cliquez sur le bouton "Deploy".
![deploy-1](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-1.PNG)
15. Donnez-lui un nom, une description, un type de calcul (Azure Container Instance), activez l'authentification et cliquez sur Deploy. Cette étape peut prendre environ 20 minutes. Le processus de déploiement comprend plusieurs étapes, notamment l'enregistrement du modèle, la génération des ressources et leur configuration pour le service web. Un message de statut apparaît sous "Deploy status". Sélectionnez Actualiser périodiquement pour vérifier le statut du déploiement. Il est déployé et en cours d'exécution lorsque le statut est "Healthy".
![deploy-2](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-2.PNG)
16. Une fois déployé, cliquez sur l'onglet Endpoint et cliquez sur l'endpoint que vous venez de déployer. Vous pouvez y trouver tous les détails nécessaires sur l'endpoint.
![deploy-3](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-3.PNG)
Incroyable ! Maintenant que nous avons un modèle déployé, nous pouvons commencer la consommation de l'endpoint.
### 3.2 Consommation de l'endpoint
Cliquez sur l'onglet "Consume". Ici, vous pouvez trouver l'endpoint REST et un script Python dans l'option de consommation. Prenez le temps de lire le code Python.
Ce script peut être exécuté directement depuis votre machine locale et consommera votre endpoint.
![35](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/consumption-1.PNG)
Prenez un moment pour vérifier ces 2 lignes de code :
```python
url = 'http://98e3715f-xxxx-xxxx-xxxx-9ec22d57b796.centralus.azurecontainer.io/score'
api_key = '' # Replace this with the API key for the web service
```
La variable `url` est l'endpoint REST trouvé dans l'onglet de consommation et la variable `api_key` est la clé primaire également trouvée dans l'onglet de consommation (uniquement si vous avez activé l'authentification). C'est ainsi que le script peut consommer l'endpoint.
18. En exécutant le script, vous devriez voir la sortie suivante :
```python
b'"{\\"result\\": [true]}"'
```
Cela signifie que la prédiction d'insuffisance cardiaque pour les données fournies est vraie. Cela a du sens car si vous regardez de plus près les données générées automatiquement dans le script, tout est à 0 et faux par défaut. Vous pouvez modifier les données avec l'exemple d'entrée suivant :
```python
data = {
"data":
[
{
'age': "0",
'anaemia': "false",
'creatinine_phosphokinase': "0",
'diabetes': "false",
'ejection_fraction': "0",
'high_blood_pressure': "false",
'platelets': "0",
'serum_creatinine': "0",
'serum_sodium': "0",
'sex': "false",
'smoking': "false",
'time': "0",
},
{
'age': "60",
'anaemia': "false",
'creatinine_phosphokinase': "500",
'diabetes': "false",
'ejection_fraction': "38",
'high_blood_pressure': "false",
'platelets': "260000",
'serum_creatinine': "1.40",
'serum_sodium': "137",
'sex': "false",
'smoking': "false",
'time': "130",
},
],
}
```
Le script devrait retourner :
```python
b'"{\\"result\\": [true, false]}"'
```
Félicitations ! Vous venez de consommer le modèle déployé et de l'entraîner sur Azure ML !
> **_NOTE :_** Une fois le projet terminé, n'oubliez pas de supprimer toutes les ressources.
## 🚀 Défi
Examinez attentivement les explications et les détails du modèle qu'AutoML a générés pour les meilleurs modèles. Essayez de comprendre pourquoi le meilleur modèle est meilleur que les autres. Quels algorithmes ont été comparés ? Quelles sont les différences entre eux ? Pourquoi le meilleur modèle est-il plus performant dans ce cas ?
## [Quiz après le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/35)
## Révision et auto-apprentissage
Dans cette leçon, vous avez appris à entraîner, déployer et consommer un modèle pour prédire le risque d'insuffisance cardiaque de manière Low code/No code dans le cloud. Si vous ne l'avez pas encore fait, plongez plus profondément dans les explications du modèle qu'AutoML a générées pour les meilleurs modèles et essayez de comprendre pourquoi le meilleur modèle est meilleur que les autres.
Vous pouvez aller plus loin dans AutoML Low code/No code en lisant cette [documentation](https://docs.microsoft.com/azure/machine-learning/tutorial-first-experiment-automated-ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
## Devoir
[Projet de science des données Low code/No code sur Azure ML](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "8fdc4a5fd9bc27a8d2ebef995dfbf73f",
"translation_date": "2025-08-24T13:05:03+00:00",
"source_file": "5-Data-Science-In-Cloud/18-Low-Code/assignment.md",
"language_code": "fr"
}
-->
# Projet de Data Science Low code/No code sur Azure ML
## Instructions
Nous avons vu comment utiliser la plateforme Azure ML pour entraîner, déployer et consommer un modèle de manière Low code/No code. Maintenant, cherchez des données que vous pourriez utiliser pour entraîner un autre modèle, le déployer et le consommer. Vous pouvez rechercher des jeux de données sur [Kaggle](https://kaggle.com) et [Azure Open Datasets](https://azure.microsoft.com/services/open-datasets/catalog?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
## Grille d'évaluation
| Exemplaire | Adéquat | À améliorer |
|------------|---------|-------------|
|Lors du téléchargement des données, vous avez pris soin de modifier le type des caractéristiques si nécessaire. Vous avez également nettoyé les données si besoin. Vous avez effectué un entraînement sur un jeu de données via AutoML, et vous avez vérifié les explications du modèle. Vous avez déployé le meilleur modèle et vous avez réussi à le consommer. | Lors du téléchargement des données, vous avez pris soin de modifier le type des caractéristiques si nécessaire. Vous avez effectué un entraînement sur un jeu de données via AutoML, vous avez déployé le meilleur modèle et vous avez réussi à le consommer. | Vous avez déployé le meilleur modèle entraîné par AutoML et vous avez réussi à le consommer. |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,313 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "73dead89dc2ddda4d6ec0232814a191e",
"translation_date": "2025-08-24T13:11:12+00:00",
"source_file": "5-Data-Science-In-Cloud/19-Azure/README.md",
"language_code": "fr"
}
-->
# Data Science dans le Cloud : La méthode "Azure ML SDK"
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/19-DataScience-Cloud.png)|
|:---:|
| Data Science dans le Cloud : Azure ML SDK - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Table des matières :
- [Data Science dans le Cloud : La méthode "Azure ML SDK"](../../../../5-Data-Science-In-Cloud/19-Azure)
- [Quiz avant le cours](../../../../5-Data-Science-In-Cloud/19-Azure)
- [1. Introduction](../../../../5-Data-Science-In-Cloud/19-Azure)
- [1.1 Qu'est-ce que l'Azure ML SDK ?](../../../../5-Data-Science-In-Cloud/19-Azure)
- [1.2 Présentation du projet de prédiction d'insuffisance cardiaque et du jeu de données](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2. Entraîner un modèle avec l'Azure ML SDK](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.1 Créer un espace de travail Azure ML](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.2 Créer une instance de calcul](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.3 Charger le jeu de données](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.4 Créer des notebooks](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.5 Entraîner un modèle](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.5.1 Configurer l'espace de travail, l'expérience, le cluster de calcul et le jeu de données](../../../../5-Data-Science-In-Cloud/19-Azure)
- [2.5.2 Configuration AutoML et entraînement](../../../../5-Data-Science-In-Cloud/19-Azure)
- [3. Déploiement du modèle et consommation de l'endpoint avec l'Azure ML SDK](../../../../5-Data-Science-In-Cloud/19-Azure)
- [3.1 Sauvegarder le meilleur modèle](../../../../5-Data-Science-In-Cloud/19-Azure)
- [3.2 Déploiement du modèle](../../../../5-Data-Science-In-Cloud/19-Azure)
- [3.3 Consommation de l'endpoint](../../../../5-Data-Science-In-Cloud/19-Azure)
- [🚀 Défi](../../../../5-Data-Science-In-Cloud/19-Azure)
- [Quiz après le cours](../../../../5-Data-Science-In-Cloud/19-Azure)
- [Révision et auto-apprentissage](../../../../5-Data-Science-In-Cloud/19-Azure)
- [Devoir](../../../../5-Data-Science-In-Cloud/19-Azure)
## [Quiz avant le cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/36)
## 1. Introduction
### 1.1 Qu'est-ce que l'Azure ML SDK ?
Les data scientists et les développeurs en IA utilisent l'Azure Machine Learning SDK pour construire et exécuter des workflows de machine learning avec le service Azure Machine Learning. Vous pouvez interagir avec le service dans n'importe quel environnement Python, y compris Jupyter Notebooks, Visual Studio Code ou votre IDE Python préféré.
Les principales fonctionnalités du SDK incluent :
- Explorer, préparer et gérer le cycle de vie de vos jeux de données utilisés dans les expériences de machine learning.
- Gérer les ressources cloud pour surveiller, journaliser et organiser vos expériences de machine learning.
- Entraîner des modèles localement ou en utilisant des ressources cloud, y compris l'entraînement de modèles accélérés par GPU.
- Utiliser le machine learning automatisé, qui accepte des paramètres de configuration et des données d'entraînement. Il itère automatiquement à travers les algorithmes et les réglages d'hyperparamètres pour trouver le meilleur modèle pour effectuer des prédictions.
- Déployer des services web pour convertir vos modèles entraînés en services RESTful pouvant être consommés dans n'importe quelle application.
[En savoir plus sur l'Azure Machine Learning SDK](https://docs.microsoft.com/python/api/overview/azure/ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
Dans la [leçon précédente](../18-Low-Code/README.md), nous avons vu comment entraîner, déployer et consommer un modèle de manière Low code/No code. Nous avons utilisé le jeu de données sur l'insuffisance cardiaque pour générer un modèle de prédiction d'insuffisance cardiaque. Dans cette leçon, nous allons faire exactement la même chose, mais en utilisant l'Azure Machine Learning SDK.
![schéma-projet](../../../../5-Data-Science-In-Cloud/19-Azure/images/project-schema.PNG)
### 1.2 Présentation du projet de prédiction d'insuffisance cardiaque et du jeu de données
Consultez [ici](../18-Low-Code/README.md) la présentation du projet de prédiction d'insuffisance cardiaque et du jeu de données.
## 2. Entraîner un modèle avec l'Azure ML SDK
### 2.1 Créer un espace de travail Azure ML
Pour simplifier, nous allons travailler sur un notebook Jupyter. Cela implique que vous avez déjà un espace de travail et une instance de calcul. Si vous avez déjà un espace de travail, vous pouvez passer directement à la section 2.3 Création de notebook.
Sinon, veuillez suivre les instructions de la section **2.1 Créer un espace de travail Azure ML** dans la [leçon précédente](../18-Low-Code/README.md) pour créer un espace de travail.
### 2.2 Créer une instance de calcul
Dans l'[espace de travail Azure ML](https://ml.azure.com/) que nous avons créé précédemment, allez dans le menu de calcul et vous verrez les différentes ressources de calcul disponibles.
![instance-calcul-1](../../../../5-Data-Science-In-Cloud/19-Azure/images/compute-instance-1.PNG)
Créons une instance de calcul pour provisionner un notebook Jupyter.
1. Cliquez sur le bouton + Nouveau.
2. Donnez un nom à votre instance de calcul.
3. Choisissez vos options : CPU ou GPU, taille de la VM et nombre de cœurs.
4. Cliquez sur le bouton Créer.
Félicitations, vous venez de créer une instance de calcul ! Nous utiliserons cette instance de calcul pour créer un notebook dans la section [Création de notebooks](../../../../5-Data-Science-In-Cloud/19-Azure).
### 2.3 Charger le jeu de données
Consultez la [leçon précédente](../18-Low-Code/README.md) dans la section **2.3 Charger le jeu de données** si vous n'avez pas encore téléchargé le jeu de données.
### 2.4 Créer des notebooks
> **_NOTE :_** Pour l'étape suivante, vous pouvez soit créer un nouveau notebook à partir de zéro, soit télécharger le [notebook que nous avons créé](../../../../5-Data-Science-In-Cloud/19-Azure/notebook.ipynb) dans votre Azure ML Studio. Pour le télécharger, cliquez simplement sur le menu "Notebook" et téléchargez le notebook.
Les notebooks sont une partie très importante du processus de data science. Ils peuvent être utilisés pour effectuer une analyse exploratoire des données (EDA), appeler un cluster de calcul pour entraîner un modèle, ou appeler un cluster d'inférence pour déployer un endpoint.
Pour créer un notebook, nous avons besoin d'un nœud de calcul qui héberge l'instance de notebook Jupyter. Retournez à l'[espace de travail Azure ML](https://ml.azure.com/) et cliquez sur Instances de calcul. Dans la liste des instances de calcul, vous devriez voir [l'instance de calcul que nous avons créée précédemment](../../../../5-Data-Science-In-Cloud/19-Azure).
1. Dans la section Applications, cliquez sur l'option Jupyter.
2. Cochez la case "Oui, je comprends" et cliquez sur le bouton Continuer.
![notebook-1](../../../../5-Data-Science-In-Cloud/19-Azure/images/notebook-1.PNG)
3. Cela devrait ouvrir un nouvel onglet de navigateur avec votre instance de notebook Jupyter comme suit. Cliquez sur le bouton "Nouveau" pour créer un notebook.
![notebook-2](../../../../5-Data-Science-In-Cloud/19-Azure/images/notebook-2.PNG)
Maintenant que nous avons un notebook, nous pouvons commencer à entraîner le modèle avec Azure ML SDK.
### 2.5 Entraîner un modèle
Tout d'abord, si vous avez un doute, consultez la [documentation Azure ML SDK](https://docs.microsoft.com/python/api/overview/azure/ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109). Elle contient toutes les informations nécessaires pour comprendre les modules que nous allons voir dans cette leçon.
#### 2.5.1 Configurer l'espace de travail, l'expérience, le cluster de calcul et le jeu de données
Vous devez charger l'`espace de travail` à partir du fichier de configuration en utilisant le code suivant :
```python
from azureml.core import Workspace
ws = Workspace.from_config()
```
Cela renvoie un objet de type `Workspace` qui représente l'espace de travail. Ensuite, vous devez créer une `expérience` en utilisant le code suivant :
```python
from azureml.core import Experiment
experiment_name = 'aml-experiment'
experiment = Experiment(ws, experiment_name)
```
Pour obtenir ou créer une expérience à partir d'un espace de travail, vous demandez l'expérience en utilisant son nom. Le nom de l'expérience doit comporter entre 3 et 36 caractères, commencer par une lettre ou un chiffre, et ne contenir que des lettres, des chiffres, des underscores et des tirets. Si l'expérience n'est pas trouvée dans l'espace de travail, une nouvelle expérience est créée.
Ensuite, vous devez créer un cluster de calcul pour l'entraînement en utilisant le code suivant. Notez que cette étape peut prendre quelques minutes.
```python
from azureml.core.compute import AmlCompute
aml_name = "heart-f-cluster"
try:
aml_compute = AmlCompute(ws, aml_name)
print('Found existing AML compute context.')
except:
print('Creating new AML compute context.')
aml_config = AmlCompute.provisioning_configuration(vm_size = "Standard_D2_v2", min_nodes=1, max_nodes=3)
aml_compute = AmlCompute.create(ws, name = aml_name, provisioning_configuration = aml_config)
aml_compute.wait_for_completion(show_output = True)
cts = ws.compute_targets
compute_target = cts[aml_name]
```
Vous pouvez obtenir le jeu de données à partir de l'espace de travail en utilisant le nom du jeu de données de la manière suivante :
```python
dataset = ws.datasets['heart-failure-records']
df = dataset.to_pandas_dataframe()
df.describe()
```
#### 2.5.2 Configuration AutoML et entraînement
Pour configurer AutoML, utilisez la classe [AutoMLConfig](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.automlconfig(class)?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
Comme décrit dans la documentation, il existe de nombreux paramètres avec lesquels vous pouvez jouer. Pour ce projet, nous utiliserons les paramètres suivants :
- `experiment_timeout_minutes` : Durée maximale (en minutes) pendant laquelle l'expérience est autorisée à s'exécuter avant d'être automatiquement arrêtée et que les résultats soient disponibles.
- `max_concurrent_iterations` : Nombre maximal d'itérations d'entraînement simultanées autorisées pour l'expérience.
- `primary_metric` : Métrique principale utilisée pour déterminer l'état de l'expérience.
- `compute_target` : La cible de calcul Azure Machine Learning pour exécuter l'expérience AutoML.
- `task` : Type de tâche à exécuter. Les valeurs peuvent être 'classification', 'regression' ou 'forecasting' selon le type de problème AutoML à résoudre.
- `training_data` : Les données d'entraînement à utiliser dans l'expérience. Elles doivent contenir à la fois les caractéristiques d'entraînement et une colonne d'étiquettes (éventuellement une colonne de poids d'échantillon).
- `label_column_name` : Nom de la colonne d'étiquettes.
- `path` : Chemin complet vers le dossier du projet Azure Machine Learning.
- `enable_early_stopping` : Indique si l'arrêt anticipé doit être activé si le score ne s'améliore pas à court terme.
- `featurization` : Indicateur pour savoir si l'étape de featurization doit être effectuée automatiquement ou non, ou si une featurization personnalisée doit être utilisée.
- `debug_log` : Fichier journal pour écrire les informations de débogage.
```python
from azureml.train.automl import AutoMLConfig
project_folder = './aml-project'
automl_settings = {
"experiment_timeout_minutes": 20,
"max_concurrent_iterations": 3,
"primary_metric" : 'AUC_weighted'
}
automl_config = AutoMLConfig(compute_target=compute_target,
task = "classification",
training_data=dataset,
label_column_name="DEATH_EVENT",
path = project_folder,
enable_early_stopping= True,
featurization= 'auto',
debug_log = "automl_errors.log",
**automl_settings
)
```
Maintenant que votre configuration est définie, vous pouvez entraîner le modèle en utilisant le code suivant. Cette étape peut prendre jusqu'à une heure selon la taille de votre cluster.
```python
remote_run = experiment.submit(automl_config)
```
Vous pouvez exécuter le widget RunDetails pour afficher les différentes expériences.
```python
from azureml.widgets import RunDetails
RunDetails(remote_run).show()
```
## 3. Déploiement du modèle et consommation de l'endpoint avec l'Azure ML SDK
### 3.1 Sauvegarder le meilleur modèle
L'objet `remote_run` est de type [AutoMLRun](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.run.automlrun?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109). Cet objet contient la méthode `get_output()` qui renvoie la meilleure exécution et le modèle ajusté correspondant.
```python
best_run, fitted_model = remote_run.get_output()
```
Vous pouvez voir les paramètres utilisés pour le meilleur modèle en imprimant simplement le modèle ajusté et voir les propriétés du meilleur modèle en utilisant la méthode [get_properties()](https://docs.microsoft.com/python/api/azureml-core/azureml.core.run(class)?view=azure-ml-py#azureml_core_Run_get_properties?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
```python
best_run.get_properties()
```
Enregistrez maintenant le modèle avec la méthode [register_model](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.run.automlrun?view=azure-ml-py#register-model-model-name-none--description-none--tags-none--iteration-none--metric-none-?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
```python
model_name = best_run.properties['model_name']
script_file_name = 'inference/score.py'
best_run.download_file('outputs/scoring_file_v_1_0_0.py', 'inference/score.py')
description = "aml heart failure project sdk"
model = best_run.register_model(model_name = model_name,
model_path = './outputs/',
description = description,
tags = None)
```
### 3.2 Déploiement du modèle
Une fois le meilleur modèle sauvegardé, nous pouvons le déployer avec la classe [InferenceConfig](https://docs.microsoft.com/python/api/azureml-core/azureml.core.model.inferenceconfig?view=azure-ml-py?ocid=AID3041109). InferenceConfig représente les paramètres de configuration pour un environnement personnalisé utilisé pour le déploiement. La classe [AciWebservice](https://docs.microsoft.com/python/api/azureml-core/azureml.core.webservice.aciwebservice?view=azure-ml-py) représente un modèle de machine learning déployé en tant qu'endpoint de service web sur Azure Container Instances. Un service déployé est créé à partir d'un modèle, d'un script et de fichiers associés. Le service web résultant est un endpoint HTTP équilibré avec une API REST. Vous pouvez envoyer des données à cette API et recevoir la prédiction retournée par le modèle.
Le modèle est déployé en utilisant la méthode [deploy](https://docs.microsoft.com/python/api/azureml-core/azureml.core.model(class)?view=azure-ml-py#deploy-workspace--name--models--inference-config-none--deployment-config-none--deployment-target-none--overwrite-false--show-output-false-?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
```python
from azureml.core.model import InferenceConfig, Model
from azureml.core.webservice import AciWebservice
inference_config = InferenceConfig(entry_script=script_file_name, environment=best_run.get_environment())
aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1,
memory_gb = 1,
tags = {'type': "automl-heart-failure-prediction"},
description = 'Sample service for AutoML Heart Failure Prediction')
aci_service_name = 'automl-hf-sdk'
aci_service = Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig)
aci_service.wait_for_deployment(True)
print(aci_service.state)
```
Cette étape devrait prendre quelques minutes.
### 3.3 Consommation de l'endpoint
Vous consommez votre endpoint en créant un exemple d'entrée :
```python
data = {
"data":
[
{
'age': "60",
'anaemia': "false",
'creatinine_phosphokinase': "500",
'diabetes': "false",
'ejection_fraction': "38",
'high_blood_pressure': "false",
'platelets': "260000",
'serum_creatinine': "1.40",
'serum_sodium': "137",
'sex': "false",
'smoking': "false",
'time': "130",
},
],
}
test_sample = str.encode(json.dumps(data))
```
Ensuite, vous pouvez envoyer cette entrée à votre modèle pour obtenir une prédiction :
```python
response = aci_service.run(input_data=test_sample)
response
```
Cela devrait produire `'{"result": [false]}'`. Cela signifie que les données du patient que nous avons envoyées à l'endpoint ont généré la prédiction `false`, ce qui indique que cette personne n'est probablement pas susceptible de faire une crise cardiaque.
Félicitations ! Vous venez de consommer le modèle déployé et entraîné sur Azure ML avec le SDK Azure ML !
> **_NOTE:_** Une fois le projet terminé, n'oubliez pas de supprimer toutes les ressources.
## 🚀 Défi
Il y a beaucoup d'autres choses que vous pouvez faire avec le SDK, mais malheureusement, nous ne pouvons pas tout voir dans cette leçon. Bonne nouvelle, apprendre à parcourir la documentation du SDK peut vous mener très loin par vous-même. Consultez la documentation du SDK Azure ML et trouvez la classe `Pipeline` qui vous permet de créer des pipelines. Un Pipeline est une collection d'étapes pouvant être exécutées comme un workflow.
**ASTUCE :** Rendez-vous sur la [documentation du SDK](https://docs.microsoft.com/python/api/overview/azure/ml/?view=azure-ml-py?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) et tapez des mots-clés dans la barre de recherche comme "Pipeline". Vous devriez trouver la classe `azureml.pipeline.core.Pipeline` dans les résultats de recherche.
## [Quiz post-cours](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/37)
## Révision et auto-apprentissage
Dans cette leçon, vous avez appris à entraîner, déployer et consommer un modèle pour prédire le risque d'insuffisance cardiaque avec le SDK Azure ML dans le cloud. Consultez cette [documentation](https://docs.microsoft.com/python/api/overview/azure/ml/?view=azure-ml-py?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) pour plus d'informations sur le SDK Azure ML. Essayez de créer votre propre modèle avec le SDK Azure ML.
## Devoir
[Projet de science des données avec le SDK Azure ML](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "386efdbc19786951341f6956247ee990",
"translation_date": "2025-08-24T13:14:07+00:00",
"source_file": "5-Data-Science-In-Cloud/19-Azure/assignment.md",
"language_code": "fr"
}
-->
# Projet de Data Science avec Azure ML SDK
## Instructions
Nous avons vu comment utiliser la plateforme Azure ML pour entraîner, déployer et consommer un modèle avec Azure ML SDK. Maintenant, cherchez des données que vous pourriez utiliser pour entraîner un autre modèle, le déployer et le consommer. Vous pouvez rechercher des ensembles de données sur [Kaggle](https://kaggle.com) et [Azure Open Datasets](https://azure.microsoft.com/services/open-datasets/catalog?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
## Critères d'évaluation
| Exemplaire | Adéquat | À améliorer |
|------------|---------|-------------|
|Lors de la configuration AutoML, vous avez consulté la documentation du SDK pour voir quels paramètres vous pouviez utiliser. Vous avez effectué un entraînement sur un ensemble de données via AutoML en utilisant Azure ML SDK, et vous avez vérifié les explications du modèle. Vous avez déployé le meilleur modèle et vous avez pu le consommer via Azure ML SDK. | Vous avez effectué un entraînement sur un ensemble de données via AutoML en utilisant Azure ML SDK, et vous avez vérifié les explications du modèle. Vous avez déployé le meilleur modèle et vous avez pu le consommer via Azure ML SDK. | Vous avez effectué un entraînement sur un ensemble de données via AutoML en utilisant Azure ML SDK. Vous avez déployé le meilleur modèle et vous avez pu le consommer via Azure ML SDK. |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,33 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "8dfe141a0f46f7d253e07f74913c7f44",
"translation_date": "2025-08-24T12:57:55+00:00",
"source_file": "5-Data-Science-In-Cloud/README.md",
"language_code": "fr"
}
-->
# La Data Science dans le Cloud
![cloud-picture](../../../5-Data-Science-In-Cloud/images/cloud-picture.jpg)
> Photo par [Jelleke Vanooteghem](https://unsplash.com/@ilumire) sur [Unsplash](https://unsplash.com/s/photos/cloud?orientation=landscape)
Lorsqu'il s'agit de faire de la data science avec des données massives, le cloud peut être une véritable révolution. Dans les trois prochaines leçons, nous allons découvrir ce qu'est le cloud et pourquoi il peut être très utile. Nous allons également explorer un jeu de données sur l'insuffisance cardiaque et construire un modèle pour aider à évaluer la probabilité qu'une personne souffre d'une insuffisance cardiaque. Nous utiliserons la puissance du cloud pour entraîner, déployer et consommer un modèle de deux manières différentes. Une première méthode en utilisant uniquement l'interface utilisateur dans une approche Low code/No code, et une seconde méthode en utilisant le kit de développement logiciel Azure Machine Learning (Azure ML SDK).
![project-schema](../../../5-Data-Science-In-Cloud/19-Azure/images/project-schema.PNG)
### Sujets
1. [Pourquoi utiliser le Cloud pour la Data Science ?](17-Introduction/README.md)
2. [La Data Science dans le Cloud : L'approche "Low code/No code"](18-Low-Code/README.md)
3. [La Data Science dans le Cloud : L'approche "Azure ML SDK"](19-Azure/README.md)
### Crédits
Ces leçons ont été écrites avec ☁️ et 💕 par [Maud Levy](https://twitter.com/maudstweets) et [Tiffany Souterre](https://twitter.com/TiffanySouterre)
Les données pour le projet de prédiction de l'insuffisance cardiaque proviennent de [
Larxel](https://www.kaggle.com/andrewmvd) sur [Kaggle](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data). Elles sont sous licence [Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,153 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "67076ed50f54e7d26ba1ba378d6078f1",
"translation_date": "2025-08-24T12:53:48+00:00",
"source_file": "6-Data-Science-In-Wild/20-Real-World-Examples/README.md",
"language_code": "fr"
}
-->
# La Science des Données dans le Monde Réel
| ![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-RealWorld.png) |
| :--------------------------------------------------------------------------------------------------------------: |
| La Science des Données dans le Monde Réel - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Nous sommes presque à la fin de ce parcours d'apprentissage !
Nous avons commencé par définir la science des données et l'éthique, exploré divers outils et techniques pour l'analyse et la visualisation des données, passé en revue le cycle de vie de la science des données, et examiné comment étendre et automatiser les flux de travail de la science des données grâce aux services de cloud computing. Vous vous demandez probablement : _"Comment puis-je appliquer tout cela dans des contextes réels ?"_
Dans cette leçon, nous allons explorer les applications concrètes de la science des données dans l'industrie et plonger dans des exemples spécifiques dans les domaines de la recherche, des humanités numériques et de la durabilité. Nous examinerons des opportunités de projets étudiants et conclurons avec des ressources utiles pour continuer votre parcours d'apprentissage !
## Quiz Avant la Leçon
[Quiz avant la leçon](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/38)
## Science des Données + Industrie
Grâce à la démocratisation de l'IA, les développeurs trouvent désormais plus facile de concevoir et d'intégrer des prises de décision basées sur l'IA et des insights basés sur les données dans les expériences utilisateur et les flux de travail de développement. Voici quelques exemples de l'application de la science des données dans des contextes réels à travers l'industrie :
* [Google Flu Trends](https://www.wired.com/2015/10/can-learn-epic-failure-google-flu-trends/) a utilisé la science des données pour corréler les termes de recherche avec les tendances de la grippe. Bien que l'approche ait eu des défauts, elle a sensibilisé aux possibilités (et aux défis) des prédictions de santé basées sur les données.
* [Prédictions de Routage UPS](https://www.technologyreview.com/2018/11/21/139000/how-ups-uses-ai-to-outsmart-bad-weather/) - explique comment UPS utilise la science des données et l'apprentissage automatique pour prédire les itinéraires optimaux de livraison, en tenant compte des conditions météorologiques, des schémas de trafic, des délais de livraison, et plus encore.
* [Visualisation des Itinéraires des Taxis de NYC](http://chriswhong.github.io/nyctaxi/) - les données recueillies grâce aux [lois sur la liberté d'information](https://chriswhong.com/open-data/foil_nyc_taxi/) ont permis de visualiser une journée dans la vie des taxis de NYC, nous aidant à comprendre comment ils naviguent dans la ville animée, l'argent qu'ils gagnent, et la durée des trajets sur une période de 24 heures.
* [Uber Data Science Workbench](https://eng.uber.com/dsw/) - utilise les données (sur les lieux de prise en charge et de dépose, la durée des trajets, les itinéraires préférés, etc.) recueillies à partir de millions de trajets Uber *quotidiennement* pour construire un outil d'analyse des données permettant de prendre des décisions sur les prix, la sécurité, la détection de fraude et la navigation.
* [Analyse des Sports](https://towardsdatascience.com/scope-of-analytics-in-sports-world-37ed09c39860) - se concentre sur l'_analyse prédictive_ (analyse des équipes et des joueurs - pensez à [Moneyball](https://datasciencedegree.wisconsin.edu/blog/moneyball-proves-importance-big-data-big-ideas/) - et gestion des fans) et la _visualisation des données_ (tableaux de bord des équipes et des fans, jeux, etc.) avec des applications comme le recrutement de talents, les paris sportifs et la gestion des inventaires/lieux.
* [Science des Données dans la Banque](https://data-flair.training/blogs/data-science-in-banking/) - met en évidence la valeur de la science des données dans l'industrie financière avec des applications allant de la modélisation des risques et la détection de fraude, à la segmentation des clients, la prédiction en temps réel et les systèmes de recommandation. L'analyse prédictive alimente également des mesures critiques comme les [scores de crédit](https://dzone.com/articles/using-big-data-and-predictive-analytics-for-credit).
* [Science des Données dans la Santé](https://data-flair.training/blogs/data-science-in-healthcare/) - met en lumière des applications comme l'imagerie médicale (par exemple, IRM, radiographie, scanner), la génomique (séquençage ADN), le développement de médicaments (évaluation des risques, prédiction de succès), l'analyse prédictive (soins aux patients et logistique des fournitures), le suivi et la prévention des maladies, etc.
![Applications de la Science des Données dans le Monde Réel](../../../../6-Data-Science-In-Wild/20-Real-World-Examples/images/data-science-applications.png) Crédit Image : [Data Flair: 6 Amazing Data Science Applications ](https://data-flair.training/blogs/data-science-applications/)
La figure montre d'autres domaines et exemples d'application des techniques de science des données. Vous voulez explorer d'autres applications ? Consultez la section [Révision & Auto-Étude](../../../../6-Data-Science-In-Wild/20-Real-World-Examples) ci-dessous.
## Science des Données + Recherche
| ![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-Research.png) |
| :---------------------------------------------------------------------------------------------------------------: |
| Science des Données & Recherche - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Alors que les applications concrètes se concentrent souvent sur des cas d'utilisation industriels à grande échelle, les applications et projets de _recherche_ peuvent être utiles sous deux perspectives :
* _opportunités d'innovation_ - explorer le prototypage rapide de concepts avancés et tester des expériences utilisateur pour des applications de prochaine génération.
* _défis de déploiement_ - enquêter sur les dommages potentiels ou les conséquences involontaires des technologies de science des données dans des contextes réels.
Pour les étudiants, ces projets de recherche peuvent offrir des opportunités d'apprentissage et de collaboration qui améliorent votre compréhension du sujet, et élargissent votre sensibilisation et votre engagement avec des personnes ou des équipes travaillant dans des domaines d'intérêt. À quoi ressemblent les projets de recherche et comment peuvent-ils avoir un impact ?
Prenons un exemple - l'[Étude MIT Gender Shades](http://gendershades.org/overview.html) de Joy Buolamwini (MIT Media Labs) avec un [article de recherche phare](http://proceedings.mlr.press/v81/buolamwini18a/buolamwini18a.pdf) co-écrit avec Timnit Gebru (alors chez Microsoft Research) qui se concentrait sur :
* **Quoi :** L'objectif du projet de recherche était d'_évaluer les biais présents dans les algorithmes et ensembles de données d'analyse faciale automatisée_ en fonction du genre et du type de peau.
* **Pourquoi :** L'analyse faciale est utilisée dans des domaines comme l'application de la loi, la sécurité des aéroports, les systèmes de recrutement et plus encore - des contextes où des classifications inexactes (par exemple, dues à des biais) peuvent causer des dommages économiques et sociaux potentiels aux individus ou groupes concernés. Comprendre (et éliminer ou atténuer) les biais est essentiel pour une utilisation équitable.
* **Comment :** Les chercheurs ont reconnu que les benchmarks existants utilisaient principalement des sujets à peau claire, et ont créé un nouvel ensemble de données (1000+ images) _plus équilibré_ par genre et type de peau. L'ensemble de données a été utilisé pour évaluer la précision de trois produits de classification de genre (de Microsoft, IBM & Face++).
Les résultats ont montré que bien que la précision globale de la classification soit bonne, il y avait une différence notable dans les taux d'erreur entre divers sous-groupes - avec un **mauvais genre** plus élevé pour les femmes ou les personnes à peau foncée, indicatif de biais.
**Principaux Résultats :** Sensibilisation accrue au fait que la science des données nécessite des _ensembles de données représentatifs_ (sous-groupes équilibrés) et des _équipes inclusives_ (origines diverses) pour reconnaître et éliminer ou atténuer ces biais plus tôt dans les solutions d'IA. Les efforts de recherche comme celui-ci sont également essentiels pour que de nombreuses organisations définissent des principes et des pratiques pour une _IA responsable_ afin d'améliorer l'équité dans leurs produits et processus d'IA.
**Vous voulez en savoir plus sur les efforts de recherche pertinents chez Microsoft ?**
* Consultez les [Projets de Recherche Microsoft](https://www.microsoft.com/research/research-area/artificial-intelligence/?facet%5Btax%5D%5Bmsr-research-area%5D%5B%5D=13556&facet%5Btax%5D%5Bmsr-content-type%5D%5B%5D=msr-project) sur l'Intelligence Artificielle.
* Explorez les projets étudiants de la [Microsoft Research Data Science Summer School](https://www.microsoft.com/en-us/research/academic-program/data-science-summer-school/).
* Consultez le projet [Fairlearn](https://fairlearn.org/) et les initiatives [IA Responsable](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6).
## Science des Données + Humanités
| ![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-Humanities.png) |
| :---------------------------------------------------------------------------------------------------------------: |
| Science des Données & Humanités Numériques - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
Les Humanités Numériques [ont été définies](https://digitalhumanities.stanford.edu/about-dh-stanford) comme "une collection de pratiques et d'approches combinant des méthodes computationnelles avec une enquête humaniste". Les [projets de Stanford](https://digitalhumanities.stanford.edu/projects) comme _"rebooting history"_ et _"poetic thinking"_ illustrent le lien entre les [Humanités Numériques et la Science des Données](https://digitalhumanities.stanford.edu/digital-humanities-and-data-science) - en mettant l'accent sur des techniques comme l'analyse de réseau, la visualisation de l'information, l'analyse spatiale et textuelle qui peuvent nous aider à revisiter des ensembles de données historiques et littéraires pour en tirer de nouvelles perspectives.
*Vous voulez explorer et étendre un projet dans ce domaine ?*
Consultez ["Emily Dickinson and the Meter of Mood"](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671) - un excellent exemple de [Jen Looper](https://twitter.com/jenlooper) qui pose la question de savoir comment nous pouvons utiliser la science des données pour revisiter une poésie familière et réévaluer sa signification et les contributions de son auteur dans de nouveaux contextes. Par exemple, _pouvons-nous prédire la saison dans laquelle un poème a été écrit en analysant son ton ou son sentiment_ - et qu'est-ce que cela nous dit sur l'état d'esprit de l'auteur pendant la période concernée ?
Pour répondre à cette question, nous suivons les étapes du cycle de vie de la science des données :
* [`Acquisition des Données`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#acquiring-the-dataset) - pour collecter un ensemble de données pertinent pour l'analyse. Les options incluent l'utilisation d'une API (par exemple, [Poetry DB API](https://poetrydb.org/index.html)) ou le scraping de pages web (par exemple, [Project Gutenberg](https://www.gutenberg.org/files/12242/12242-h/12242-h.htm)) avec des outils comme [Scrapy](https://scrapy.org/).
* [`Nettoyage des Données`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#clean-the-data) - explique comment le texte peut être formaté, assaini et simplifié à l'aide d'outils de base comme Visual Studio Code et Microsoft Excel.
* [`Analyse des Données`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#working-with-the-data-in-a-notebook) - explique comment nous pouvons maintenant importer l'ensemble de données dans des "Notebooks" pour analyse en utilisant des packages Python (comme pandas, numpy et matplotlib) pour organiser et visualiser les données.
* [`Analyse des Sentiments`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#sentiment-analysis-using-cognitive-services) - explique comment nous pouvons intégrer des services cloud comme Text Analytics, en utilisant des outils low-code comme [Power Automate](https://flow.microsoft.com/en-us/) pour des flux de travail automatisés de traitement des données.
En utilisant ce flux de travail, nous pouvons explorer les impacts saisonniers sur le sentiment des poèmes, et nous aider à façonner nos propres perspectives sur l'auteur. Essayez-le vous-même - puis étendez le notebook pour poser d'autres questions ou visualiser les données de nouvelles manières !
> Vous pouvez utiliser certains des outils du [Digital Humanities toolkit](https://github.com/Digital-Humanities-Toolkit) pour poursuivre ces pistes d'enquête.
## Science des Données + Durabilité
| ![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-Sustainability.png) |
| :---------------------------------------------------------------------------------------------------------------: |
| Science des Données & Durabilité - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
L'[Agenda 2030 pour le Développement Durable](https://sdgs.un.org/2030agenda) - adopté par tous les membres des Nations Unies en 2015 - identifie 17 objectifs, dont certains se concentrent sur **Protéger la Planète** contre la dégradation et l'impact du changement climatique. L'initiative [Microsoft Sustainability](https://www.microsoft.com/en-us/sustainability) soutient ces objectifs en explorant les moyens par lesquels les solutions technologiques peuvent soutenir et construire des futurs plus durables avec un [focus sur 4 objectifs](https://dev.to/azure/a-visual-guide-to-sustainable-software-engineering-53hh) - être négatif en carbone, positif en eau, zéro déchet, et bio-diversifié d'ici 2030.
Relever ces défis de manière évolutive et rapide nécessite une réflexion à l'échelle du cloud - et des données à grande échelle. L'initiative [Planetary Computer](https://planetarycomputer.microsoft.com/) fournit 4 composants pour aider les scientifiques des données et les développeurs dans cet effort :
* [Catalogue de Données](https://planetarycomputer.microsoft.com/catalog) - avec des pétaoctets de données sur les systèmes terrestres (gratuites et hébergées sur Azure).
* [API Planétaire](https://planetarycomputer.microsoft.com/docs/reference/stac/) - pour aider les utilisateurs à rechercher des données pertinentes dans l'espace et le temps.
* [Hub](https://planetarycomputer.microsoft.com/docs/overview/environment/) - environnement géré pour les scientifiques afin de traiter des ensembles de données géospatiales massifs.
* [Applications](https://planetarycomputer.microsoft.com/applications) - vitrine des cas d'utilisation et des outils pour des insights sur la durabilité.
**Le projet Planetary Computer est actuellement en aperçu (à partir de septembre 2021)** - voici comment vous pouvez commencer à contribuer à des solutions durables en utilisant la science des données.
* [Demandez un accès](https://planetarycomputer.microsoft.com/account/request) pour débuter l'exploration et vous connecter avec vos pairs.
* [Explorez la documentation](https://planetarycomputer.microsoft.com/docs/overview/about) pour comprendre les ensembles de données et les API pris en charge.
* Découvrez des applications comme [Ecosystem Monitoring](https://analytics-lab.org/ecosystemmonitoring/) pour trouver des idées d'applications inspirantes.
Réfléchissez à la manière dont vous pouvez utiliser la visualisation de données pour révéler ou amplifier des informations pertinentes sur des sujets comme le changement climatique et la déforestation. Ou pensez à la façon dont ces informations peuvent être utilisées pour créer de nouvelles expériences utilisateur qui motivent des changements de comportement pour un mode de vie plus durable.
## Science des données + Étudiants
Nous avons parlé d'applications concrètes dans l'industrie et la recherche, et exploré des exemples d'applications de la science des données dans les humanités numériques et la durabilité. Alors, comment pouvez-vous développer vos compétences et partager votre expertise en tant que débutants en science des données ?
Voici quelques exemples de projets étudiants en science des données pour vous inspirer.
* [École d'été en science des données de MSR](https://www.microsoft.com/en-us/research/academic-program/data-science-summer-school/#!projects) avec des [projets](https://github.com/msr-ds3) sur GitHub explorant des sujets comme :
- [Biais racial dans l'utilisation de la force par la police](https://www.microsoft.com/en-us/research/video/data-science-summer-school-2019-replicating-an-empirical-analysis-of-racial-differences-in-police-use-of-force/) | [Github](https://github.com/msr-ds3/stop-question-frisk)
- [Fiabilité du système de métro de NYC](https://www.microsoft.com/en-us/research/video/data-science-summer-school-2018-exploring-the-reliability-of-the-nyc-subway-system/) | [Github](https://github.com/msr-ds3/nyctransit)
* [Numérisation de la culture matérielle : Exploration des distributions socio-économiques à Sirkap](https://claremont.maps.arcgis.com/apps/Cascade/index.html?appid=bdf2aef0f45a4674ba41cd373fa23afc) - par [Ornella Altunyan](https://twitter.com/ornelladotcom) et son équipe à Claremont, utilisant [ArcGIS StoryMaps](https://storymaps.arcgis.com/).
## 🚀 Défi
Recherchez des articles qui recommandent des projets de science des données adaptés aux débutants - comme [ces 50 domaines thématiques](https://www.upgrad.com/blog/data-science-project-ideas-topics-beginners/) ou [ces 21 idées de projets](https://www.intellspot.com/data-science-project-ideas) ou [ces 16 projets avec code source](https://data-flair.training/blogs/data-science-project-ideas/) que vous pouvez déconstruire et remixer. Et n'oubliez pas de bloguer sur vos parcours d'apprentissage et de partager vos idées avec nous tous.
## Quiz post-conférence
[Quiz post-conférence](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/39)
## Révision & Auto-apprentissage
Vous voulez explorer davantage de cas d'utilisation ? Voici quelques articles pertinents :
* [17 Applications et exemples de science des données](https://builtin.com/data-science/data-science-applications-examples) - juillet 2021
* [11 Applications époustouflantes de la science des données dans le monde réel](https://myblindbird.com/data-science-applications-real-world/) - mai 2021
* [La science des données dans le monde réel](https://towardsdatascience.com/data-science-in-the-real-world/home) - Collection d'articles
* Science des données dans : [Éducation](https://data-flair.training/blogs/data-science-in-education/), [Agriculture](https://data-flair.training/blogs/data-science-in-agriculture/), [Finance](https://data-flair.training/blogs/data-science-in-finance/), [Cinéma](https://data-flair.training/blogs/data-science-at-movies/) et plus encore.
## Devoir
[Explorez un ensemble de données de Planetary Computer](assignment.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,48 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "d1e05715f9d97de6c4f1fb0c5a4702c0",
"translation_date": "2025-08-24T12:56:54+00:00",
"source_file": "6-Data-Science-In-Wild/20-Real-World-Examples/assignment.md",
"language_code": "fr"
}
-->
# Explorer un Jeu de Données du Planetary Computer
## Instructions
Dans cette leçon, nous avons abordé divers domaines d'application de la science des données, avec des études approfondies sur des exemples liés à la recherche, la durabilité et les humanités numériques. Dans cet exercice, vous explorerez l'un de ces exemples plus en détail et appliquerez vos connaissances sur les visualisations et analyses de données pour tirer des enseignements à partir de données sur la durabilité.
Le projet [Planetary Computer](https://planetarycomputer.microsoft.com/) propose des jeux de données et des API accessibles avec un compte - demandez-en un si vous souhaitez essayer l'étape bonus de l'exercice. Le site offre également une fonctionnalité [Explorer](https://planetarycomputer.microsoft.com/explore) que vous pouvez utiliser sans créer de compte.
`Étapes :`
L'interface Explorer (illustrée dans la capture d'écran ci-dessous) vous permet de sélectionner un jeu de données (parmi les options proposées), une requête prédéfinie (pour filtrer les données) et une option de rendu (pour créer une visualisation pertinente). Dans cet exercice, votre tâche est de :
1. Lire la [documentation de l'Explorer](https://planetarycomputer.microsoft.com/docs/overview/explorer/) - comprendre les options.
2. Explorer le [Catalogue](https://planetarycomputer.microsoft.com/catalog) des jeux de données - découvrir leur utilité.
3. Utiliser l'Explorer - choisir un jeu de données qui vous intéresse, sélectionner une requête et une option de rendu pertinentes.
![L'Explorer du Planetary Computer](../../../../6-Data-Science-In-Wild/20-Real-World-Examples/images/planetary-computer-explorer.png)
`Votre tâche :`
Étudiez maintenant la visualisation affichée dans le navigateur et répondez aux questions suivantes :
* Quelles _caractéristiques_ le jeu de données possède-t-il ?
* Quels _enseignements_ ou résultats la visualisation fournit-elle ?
* Quelles sont les _implications_ de ces enseignements pour les objectifs de durabilité du projet ?
* Quelles sont les _limites_ de la visualisation (c'est-à-dire, quelles informations n'avez-vous pas obtenues) ?
* Si vous pouviez accéder aux données brutes, quelles _visualisations alternatives_ créeriez-vous, et pourquoi ?
`Points Bonus :`
Demandez un compte - et connectez-vous une fois accepté.
* Utilisez l'option _Launch Hub_ pour ouvrir les données brutes dans un Notebook.
* Explorez les données de manière interactive et implémentez les visualisations alternatives que vous avez imaginées.
* Analysez maintenant vos visualisations personnalisées - avez-vous pu tirer les enseignements qui vous manquaient auparavant ?
## Grille d'évaluation
Exemplaire | Adéquat | À améliorer
--- | --- | -- |
Les cinq questions principales ont été répondues. L'étudiant a clairement identifié comment les visualisations actuelles et alternatives pourraient fournir des enseignements sur les objectifs ou résultats de durabilité. | L'étudiant a répondu en détail à au moins les trois premières questions, montrant qu'il a eu une expérience pratique avec l'Explorer. | L'étudiant n'a pas répondu à plusieurs questions ou a fourni des réponses insuffisantes, indiquant qu'aucune tentative significative n'a été faite pour le projet. |
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "07faf02ff163e609edf0b0308dc5d4e6",
"translation_date": "2025-08-24T12:50:55+00:00",
"source_file": "6-Data-Science-In-Wild/README.md",
"language_code": "fr"
}
-->
# La science des données dans la nature
Applications concrètes de la science des données dans divers secteurs.
### Sujets
1. [La science des données dans le monde réel](20-Real-World-Examples/README.md)
### Crédits
Écrit avec ❤️ par [Nitya Narasimhan](https://twitter.com/nitya)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,21 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "c06b12caf3c901eb3156e3dd5b0aea56",
"translation_date": "2025-08-24T11:56:49+00:00",
"source_file": "CODE_OF_CONDUCT.md",
"language_code": "fr"
}
-->
# Code de conduite Open Source de Microsoft
Ce projet a adopté le [Code de conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/).
Ressources :
- [Code de conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/)
- [FAQ sur le Code de conduite de Microsoft](https://opensource.microsoft.com/codeofconduct/faq/)
- Contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou préoccupation
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,21 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "61aff2b3273d4ab66709493b43f91ca1",
"translation_date": "2025-08-24T11:58:23+00:00",
"source_file": "CONTRIBUTING.md",
"language_code": "fr"
}
-->
# Contribuer
Ce projet accueille les contributions et suggestions. La plupart des contributions nécessitent que vous acceptiez un Accord de Licence de Contributeur (CLA) déclarant que vous avez le droit, et que vous accordez effectivement, les droits nécessaires pour que nous puissions utiliser votre contribution. Pour plus de détails, visitez https://cla.microsoft.com.
Lorsque vous soumettez une pull request, un CLA-bot déterminera automatiquement si vous devez fournir un CLA et annotera la PR en conséquence (par exemple, étiquette, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez à le faire qu'une seule fois pour tous les dépôts utilisant notre CLA.
Ce projet a adopté le [Code de Conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/).
Pour plus d'informations, consultez la [FAQ sur le Code de Conduite](https://opensource.microsoft.com/codeofconduct/faq/)
ou contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou commentaire supplémentaire.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,162 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "6bb17a440fdabf0823105136a5b81029",
"translation_date": "2025-08-24T11:51:58+00:00",
"source_file": "README.md",
"language_code": "fr"
}
-->
# Science des Données pour Débutants - Un Programme
Azure Cloud Advocates chez Microsoft sont ravis de proposer un programme de 10 semaines et 20 leçons dédié à la science des données. Chaque leçon comprend des quiz avant et après la leçon, des instructions écrites pour compléter la leçon, une solution et un devoir. Notre pédagogie basée sur les projets vous permet d'apprendre tout en construisant, une méthode éprouvée pour ancrer de nouvelles compétences.
**Un grand merci à nos auteurs :** [Jasmine Greenaway](https://www.twitter.com/paladique), [Dmitry Soshnikov](http://soshnikov.com), [Nitya Narasimhan](https://twitter.com/nitya), [Jalen McGee](https://twitter.com/JalenMcG), [Jen Looper](https://twitter.com/jenlooper), [Maud Levy](https://twitter.com/maudstweets), [Tiffany Souterre](https://twitter.com/TiffanySouterre), [Christopher Harrison](https://www.twitter.com/geektrainer).
**🙏 Remerciements spéciaux 🙏 à nos [Microsoft Student Ambassadors](https://studentambassadors.microsoft.com/) auteurs, relecteurs et contributeurs de contenu,** notamment Aaryan Arora, [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), ChhailBihari Dubey, [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Max Blum](https://www.linkedin.com/in/max-blum-6036a1186/), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Rohit Yadav](https://www.linkedin.com/in/rty2423), Samridhi Sharma, [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200), [Sheena Narula](https://www.linkedin.com/in/sheena-narua-n/), [Tauqeer Ahmad](https://www.linkedin.com/in/tauqeerahmad5201/), Yogendrasingh Pawar, [Vidushi Gupta](https://www.linkedin.com/in/vidushi-gupta07/), [Jasleen Sondhi](https://www.linkedin.com/in/jasleen-sondhi/)
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](./sketchnotes/00-Title.png)|
|:---:|
| Science des Données pour Débutants - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
## Annonce - Nouveau programme sur l'IA générative tout juste publié !
Nous venons de publier un programme de 12 leçons sur l'IA générative. Venez apprendre des sujets tels que :
- la création de prompts et l'ingénierie des prompts
- la génération d'applications de texte et d'images
- les applications de recherche
Comme d'habitude, chaque leçon comprend des devoirs, des vérifications de connaissances et des défis.
Découvrez-le ici :
> https://aka.ms/genai-beginners
# Êtes-vous étudiant ?
Commencez avec les ressources suivantes :
- [Page Hub Étudiant](https://docs.microsoft.com/en-gb/learn/student-hub?WT.mc_id=academic-77958-bethanycheum) Sur cette page, vous trouverez des ressources pour débutants, des packs étudiants et même des moyens d'obtenir un bon pour une certification gratuite. C'est une page à mettre en favori et à consulter régulièrement, car nous mettons à jour le contenu au moins une fois par mois.
- [Microsoft Learn Student Ambassadors](https://studentambassadors.microsoft.com?WT.mc_id=academic-77958-bethanycheum) Rejoignez une communauté mondiale d'ambassadeurs étudiants, cela pourrait être votre porte d'entrée chez Microsoft.
# Pour Commencer
> **Enseignants** : nous avons [inclus quelques suggestions](for-teachers.md) sur la façon d'utiliser ce programme. Nous serions ravis de recevoir vos retours [dans notre forum de discussion](https://github.com/microsoft/Data-Science-For-Beginners/discussions) !
> **[Étudiants](https://aka.ms/student-page)** : pour utiliser ce programme de manière autonome, clonez l'intégralité du dépôt et complétez les exercices par vous-même, en commençant par un quiz pré-lecture. Ensuite, lisez la leçon et complétez le reste des activités. Essayez de créer les projets en comprenant les leçons plutôt qu'en copiant le code de solution ; cependant, ce code est disponible dans les dossiers /solutions de chaque leçon orientée projet. Une autre idée serait de former un groupe d'étude avec des amis et de parcourir le contenu ensemble. Pour aller plus loin, nous recommandons [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-77958-bethanycheum).
## Rencontrez l'Équipe
[![Vidéo promo](../../ds-for-beginners.gif)](https://youtu.be/8mzavjQSMM4 "Vidéo promo")
**Gif par** [Mohit Jaisal](https://www.linkedin.com/in/mohitjaisal)
> 🎥 Cliquez sur l'image ci-dessus pour une vidéo sur le projet et les personnes qui l'ont créé !
## Pédagogie
Nous avons choisi deux principes pédagogiques lors de la création de ce programme : garantir qu'il soit basé sur des projets et qu'il inclue des quiz fréquents. À la fin de cette série, les étudiants auront appris les principes de base de la science des données, y compris les concepts éthiques, la préparation des données, différentes façons de travailler avec les données, la visualisation des données, l'analyse des données, des cas d'utilisation réels de la science des données, et plus encore.
De plus, un quiz à faible enjeu avant un cours oriente l'intention de l'étudiant vers l'apprentissage d'un sujet, tandis qu'un second quiz après le cours assure une meilleure rétention. Ce programme a été conçu pour être flexible et amusant et peut être suivi en totalité ou en partie. Les projets commencent petits et deviennent de plus en plus complexes à la fin du cycle de 10 semaines.
> Retrouvez notre [Code de Conduite](CODE_OF_CONDUCT.md), nos [Directives de Contribution](CONTRIBUTING.md), et nos [Directives de Traduction](TRANSLATIONS.md). Nous accueillons vos retours constructifs !
## Chaque leçon comprend :
- Un sketchnote optionnel
- Une vidéo complémentaire optionnelle
- Un quiz d'échauffement avant la leçon
- Une leçon écrite
- Pour les leçons basées sur des projets, des guides étape par étape pour construire le projet
- Des vérifications de connaissances
- Un défi
- Des lectures complémentaires
- Un devoir
- Un quiz après la leçon
> **Une note sur les quiz** : Tous les quiz sont contenus dans le dossier Quiz-App, pour un total de 40 quiz de trois questions chacun. Ils sont liés dans les leçons, mais l'application de quiz peut être exécutée localement ou déployée sur Azure ; suivez les instructions dans le dossier `quiz-app`. Ils sont progressivement localisés.
## Leçons
|![ Sketchnote par [(@sketchthedocs)](https://sketchthedocs.dev) ](./sketchnotes/00-Roadmap.png)|
|:---:|
| Science des Données pour Débutants : Feuille de Route - _Sketchnote par [@nitya](https://twitter.com/nitya)_ |
| Numéro de Leçon | Sujet | Regroupement des Leçons | Objectifs d'Apprentissage | Leçon Liée | Auteur |
| :-----------: | :----------------------------------------: | :--------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------: | :----: |
| 01 | Définir la Science des Données | [Introduction](1-Introduction/README.md) | Apprenez les concepts de base de la science des données et comment elle est liée à l'intelligence artificielle, l'apprentissage automatique et les big data. | [leçon](1-Introduction/01-defining-data-science/README.md) [vidéo](https://youtu.be/beZ7Mb_oz9I) | [Dmitry](http://soshnikov.com) |
| 02 | Éthique en Science des Données | [Introduction](1-Introduction/README.md) | Concepts, défis et cadres de l'éthique des données. | [leçon](1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) |
| 03 | Définir les Données | [Introduction](1-Introduction/README.md) | Comment les données sont classifiées et leurs sources courantes. | [leçon](1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) |
| 04 | Introduction aux Statistiques et Probabilités | [Introduction](1-Introduction/README.md) | Les techniques mathématiques de probabilité et de statistiques pour comprendre les données. | [leçon](1-Introduction/04-stats-and-probability/README.md) [vidéo](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) |
| 05 | Travailler avec des Données Relationnelles | [Travailler avec les Données](2-Working-With-Data/README.md) | Introduction aux données relationnelles et aux bases de l'exploration et de l'analyse des données relationnelles avec le langage SQL (Structured Query Language). | [leçon](2-Working-With-Data/05-relational-databases/README.md) | [Christopher](https://www.twitter.com/geektrainer) | | |
| 06 | Travailler avec des Données NoSQL | [Travailler avec les Données](2-Working-With-Data/README.md) | Introduction aux données non relationnelles, leurs différents types et les bases de l'exploration et de l'analyse des bases de données documentaires. | [leçon](2-Working-With-Data/06-non-relational/README.md) | [Jasmine](https://twitter.com/paladique)|
| 07 | Travailler avec Python | [Travailler avec les Données](2-Working-With-Data/README.md) | Bases de l'utilisation de Python pour l'exploration des données avec des bibliothèques comme Pandas. Une compréhension de base de la programmation Python est recommandée. | [leçon](2-Working-With-Data/07-python/README.md) [vidéo](https://youtu.be/dZjWOGbsN4Y) | [Dmitry](http://soshnikov.com) |
| 08 | Préparation des données | [Travailler avec les données](2-Working-With-Data/README.md) | Techniques pour nettoyer et transformer les données afin de gérer les défis liés aux données manquantes, inexactes ou incomplètes. | [leçon](2-Working-With-Data/08-data-preparation/README.md) | [Jasmine](https://www.twitter.com/paladique) |
| 09 | Visualiser des quantités | [Visualisation des données](3-Data-Visualization/README.md) | Apprenez à utiliser Matplotlib pour visualiser des données sur les oiseaux 🦆 | [leçon](3-Data-Visualization/09-visualization-quantities/README.md) | [Jen](https://twitter.com/jenlooper) |
| 10 | Visualiser les distributions de données | [Visualisation des données](3-Data-Visualization/README.md) | Visualiser des observations et des tendances dans un intervalle. | [leçon](3-Data-Visualization/10-visualization-distributions/README.md) | [Jen](https://twitter.com/jenlooper) |
| 11 | Visualiser les proportions | [Visualisation des données](3-Data-Visualization/README.md) | Visualiser des pourcentages discrets et groupés. | [leçon](3-Data-Visualization/11-visualization-proportions/README.md) | [Jen](https://twitter.com/jenlooper) |
| 12 | Visualiser les relations | [Visualisation des données](3-Data-Visualization/README.md) | Visualiser les connexions et corrélations entre des ensembles de données et leurs variables. | [leçon](3-Data-Visualization/12-visualization-relationships/README.md) | [Jen](https://twitter.com/jenlooper) |
| 13 | Visualisations significatives | [Visualisation des données](3-Data-Visualization/README.md) | Techniques et conseils pour rendre vos visualisations utiles pour résoudre efficacement des problèmes et obtenir des insights. | [leçon](3-Data-Visualization/13-meaningful-visualizations/README.md) | [Jen](https://twitter.com/jenlooper) |
| 14 | Introduction au cycle de vie de la science des données | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Introduction au cycle de vie de la science des données et à sa première étape : l'acquisition et l'extraction des données. | [leçon](4-Data-Science-Lifecycle/14-Introduction/README.md) | [Jasmine](https://twitter.com/paladique) |
| 15 | Analyse | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Cette phase du cycle de vie de la science des données se concentre sur les techniques d'analyse des données. | [leçon](4-Data-Science-Lifecycle/15-analyzing/README.md) | [Jasmine](https://twitter.com/paladique) | | |
| 16 | Communication | [Cycle de vie](4-Data-Science-Lifecycle/README.md) | Cette phase du cycle de vie de la science des données se concentre sur la présentation des insights issus des données de manière compréhensible pour les décideurs. | [leçon](4-Data-Science-Lifecycle/16-communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | |
| 17 | Science des données dans le cloud | [Données dans le cloud](5-Data-Science-In-Cloud/README.md) | Cette série de leçons introduit la science des données dans le cloud et ses avantages. | [leçon](5-Data-Science-In-Cloud/17-Introduction/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) |
| 18 | Science des données dans le cloud | [Données dans le cloud](5-Data-Science-In-Cloud/README.md) | Entraîner des modèles en utilisant des outils Low Code. | [leçon](5-Data-Science-In-Cloud/18-Low-Code/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) |
| 19 | Science des données dans le cloud | [Données dans le cloud](5-Data-Science-In-Cloud/README.md) | Déployer des modèles avec Azure Machine Learning Studio. | [leçon](5-Data-Science-In-Cloud/19-Azure/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) et [Maud](https://twitter.com/maudstweets) |
| 20 | Science des données dans la nature | [Dans la nature](6-Data-Science-In-Wild/README.md) | Projets de science des données appliqués au monde réel. | [leçon](6-Data-Science-In-Wild/20-Real-World-Examples/README.md) | [Nitya](https://twitter.com/nitya) |
## GitHub Codespaces
Suivez ces étapes pour ouvrir cet exemple dans un Codespace :
1. Cliquez sur le menu déroulant Code et sélectionnez l'option Open with Codespaces.
2. Sélectionnez + New codespace en bas du panneau.
Pour plus d'informations, consultez la [documentation GitHub](https://docs.github.com/en/codespaces/developing-in-codespaces/creating-a-codespace-for-a-repository#creating-a-codespace).
## VSCode Remote - Containers
Suivez ces étapes pour ouvrir ce dépôt dans un conteneur en utilisant votre machine locale et VSCode avec l'extension VS Code Remote - Containers :
1. Si c'est la première fois que vous utilisez un conteneur de développement, assurez-vous que votre système répond aux prérequis (par exemple, avoir Docker installé) dans [la documentation de démarrage](https://code.visualstudio.com/docs/devcontainers/containers#_getting-started).
Pour utiliser ce dépôt, vous pouvez soit ouvrir le dépôt dans un volume Docker isolé :
**Remarque** : En arrière-plan, cela utilisera la commande Remote-Containers : **Clone Repository in Container Volume...** pour cloner le code source dans un volume Docker au lieu du système de fichiers local. Les [volumes](https://docs.docker.com/storage/volumes/) sont le mécanisme préféré pour la persistance des données des conteneurs.
Ou ouvrez une version clonée ou téléchargée localement du dépôt :
- Clonez ce dépôt sur votre système de fichiers local.
- Appuyez sur F1 et sélectionnez la commande **Remote-Containers: Open Folder in Container...**.
- Sélectionnez la copie clonée de ce dossier, attendez que le conteneur démarre, et essayez les fonctionnalités.
## Accès hors ligne
Vous pouvez exécuter cette documentation hors ligne en utilisant [Docsify](https://docsify.js.org/#/). Forkez ce dépôt, [installez Docsify](https://docsify.js.org/#/quickstart) sur votre machine locale, puis dans le dossier racine de ce dépôt, tapez `docsify serve`. Le site sera servi sur le port 3000 de votre localhost : `localhost:3000`.
> Remarque : les notebooks ne seront pas rendus via Docsify, donc lorsque vous devez exécuter un notebook, faites-le séparément dans VS Code avec un kernel Python actif.
## Besoin d'aide !
Si vous souhaitez traduire tout ou une partie du curriculum, veuillez suivre notre guide [Traductions](TRANSLATIONS.md).
## Autres curriculums
Notre équipe produit d'autres curriculums ! Découvrez :
- [IA générative pour les débutants](https://aka.ms/genai-beginners)
- [IA générative pour les débutants .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet)
- [IA générative avec JavaScript](https://github.com/microsoft/generative-ai-with-javascript)
- [IA générative avec Java](https://aka.ms/genaijava)
- [IA pour les débutants](https://aka.ms/ai-beginners)
- [Science des données pour les débutants](https://aka.ms/datascience-beginners)
- [ML pour les débutants](https://aka.ms/ml-beginners)
- [Cybersécurité pour les débutants](https://github.com/microsoft/Security-101)
- [Développement web pour les débutants](https://aka.ms/webdev-beginners)
- [IoT pour les débutants](https://aka.ms/iot-beginners)
- [Développement XR pour les débutants](https://github.com/microsoft/xr-development-for-beginners)
- [Maîtriser GitHub Copilot pour la programmation en binôme](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming)
- [Maîtriser GitHub Copilot pour les développeurs C#/.NET](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers)
- [Choisissez votre propre aventure avec Copilot](https://github.com/microsoft/CopilotAdventures)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,49 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "0d575483100c332b2dbaefef915bb3c4",
"translation_date": "2025-08-24T11:57:34+00:00",
"source_file": "SECURITY.md",
"language_code": "fr"
}
-->
## Sécurité
Microsoft prend très au sérieux la sécurité de ses produits logiciels et services, y compris tous les dépôts de code source gérés via nos organisations GitHub, qui incluent [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), et [nos organisations GitHub](https://opensource.microsoft.com/).
Si vous pensez avoir identifié une vulnérabilité de sécurité dans un dépôt appartenant à Microsoft qui correspond à [la définition d'une vulnérabilité de sécurité de Microsoft](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), veuillez nous la signaler comme décrit ci-dessous.
## Signalement des problèmes de sécurité
**Veuillez ne pas signaler de vulnérabilités de sécurité via les issues publiques sur GitHub.**
À la place, veuillez les signaler au Microsoft Security Response Center (MSRC) à l'adresse [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
Si vous préférez soumettre votre rapport sans vous connecter, envoyez un email à [secure@microsoft.com](mailto:secure@microsoft.com). Si possible, chiffrez votre message avec notre clé PGP ; vous pouvez la télécharger depuis la [page de la clé PGP du Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
Vous devriez recevoir une réponse sous 24 heures. Si, pour une raison quelconque, vous ne recevez pas de réponse, veuillez nous recontacter par email pour vous assurer que nous avons bien reçu votre message initial. Des informations supplémentaires sont disponibles sur [microsoft.com/msrc](https://www.microsoft.com/msrc).
Veuillez inclure les informations demandées ci-dessous (autant que possible) pour nous aider à mieux comprendre la nature et l'étendue du problème potentiel :
* Type de problème (par exemple, débordement de tampon, injection SQL, script intersites, etc.)
* Chemins complets des fichiers source liés à la manifestation du problème
* Emplacement du code source affecté (tag/branche/commit ou URL directe)
* Toute configuration spéciale requise pour reproduire le problème
* Instructions détaillées pour reproduire le problème
* Code de preuve de concept ou d'exploitation (si possible)
* Impact du problème, y compris comment un attaquant pourrait exploiter le problème
Ces informations nous aideront à traiter votre rapport plus rapidement.
Si vous signalez dans le cadre d'un programme de récompense pour bugs, des rapports plus complets peuvent contribuer à une récompense plus élevée. Veuillez consulter notre page [Programme de récompense pour bugs de Microsoft](https://microsoft.com/msrc/bounty) pour plus de détails sur nos programmes actifs.
## Langues préférées
Nous préférons que toutes les communications soient en anglais.
## Politique
Microsoft suit le principe de la [Divulgation coordonnée des vulnérabilités](https://www.microsoft.com/en-us/msrc/cvd).
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,22 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "872be8bc1b93ef1dd9ac3d6e8f99f6ab",
"translation_date": "2025-08-24T11:54:54+00:00",
"source_file": "SUPPORT.md",
"language_code": "fr"
}
-->
# Support
## Comment signaler des problèmes et obtenir de l'aide
Ce projet utilise GitHub Issues pour suivre les bugs et les demandes de fonctionnalités. Veuillez rechercher les problèmes existants avant d'en créer de nouveaux afin d'éviter les doublons. Pour signaler un nouveau problème, soumettez votre bug ou votre demande de fonctionnalité en tant que nouvel Issue.
Pour obtenir de l'aide et poser des questions sur l'utilisation de ce projet, créez un Issue.
## Politique de support de Microsoft
Le support pour ce dépôt se limite aux ressources mentionnées ci-dessus.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,38 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "3767555b3cc28a2865c79202f4374204",
"translation_date": "2025-08-24T12:19:59+00:00",
"source_file": "docs/_sidebar.md",
"language_code": "fr"
}
-->
- Introduction
- [Définir la science des données](../1-Introduction/01-defining-data-science/README.md)
- [Éthique de la science des données](../1-Introduction/02-ethics/README.md)
- [Définir les données](../1-Introduction/03-defining-data/README.md)
- [Probabilités et statistiques](../1-Introduction/04-stats-and-probability/README.md)
- Travailler avec les données
- [Bases de données relationnelles](../2-Working-With-Data/05-relational-databases/README.md)
- [Bases de données non relationnelles](../2-Working-With-Data/06-non-relational/README.md)
- [Python](../2-Working-With-Data/07-python/README.md)
- [Préparation des données](../2-Working-With-Data/08-data-preparation/README.md)
- Visualisation des données
- [Visualiser des quantités](../3-Data-Visualization/09-visualization-quantities/README.md)
- [Visualiser des distributions](../3-Data-Visualization/10-visualization-distributions/README.md)
- [Visualiser des proportions](../3-Data-Visualization/11-visualization-proportions/README.md)
- [Visualiser des relations](../3-Data-Visualization/12-visualization-relationships/README.md)
- [Visualisations significatives](../3-Data-Visualization/13-meaningful-visualizations/README.md)
- Cycle de vie de la science des données
- [Introduction](../4-Data-Science-Lifecycle/14-Introduction/README.md)
- [Analyse](../4-Data-Science-Lifecycle/15-analyzing/README.md)
- [Communication](../4-Data-Science-Lifecycle/16-communication/README.md)
- Science des données dans le cloud
- [Introduction](../5-Data-Science-In-Cloud/17-Introduction/README.md)
- [Low Code](../5-Data-Science-In-Cloud/18-Low-Code/README.md)
- [Azure](../5-Data-Science-In-Cloud/19-Azure/README.md)
- Science des données sur le terrain
- [Science des données sur le terrain](../6-Data-Science-In-Wild/README.md)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,76 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "87f157ea00d36c1d12c14390d9852b50",
"translation_date": "2025-08-24T11:55:51+00:00",
"source_file": "for-teachers.md",
"language_code": "fr"
}
-->
## Pour les enseignants
Souhaitez-vous utiliser ce programme dans votre classe ? N'hésitez pas !
En fait, vous pouvez l'utiliser directement sur GitHub en utilisant GitHub Classroom.
Pour ce faire, clonez ce dépôt. Vous devrez créer un dépôt pour chaque leçon, donc il faudra extraire chaque dossier dans un dépôt séparé. Ainsi, [GitHub Classroom](https://classroom.github.com/classrooms) pourra gérer chaque leçon individuellement.
Ces [instructions complètes](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) vous donneront une idée de la manière de configurer votre classe.
## Utiliser le dépôt tel quel
Si vous souhaitez utiliser ce dépôt tel qu'il est actuellement, sans passer par GitHub Classroom, c'est également possible. Vous devrez communiquer avec vos étudiants pour leur indiquer quelle leçon suivre ensemble.
Dans un format en ligne (Zoom, Teams ou autre), vous pourriez créer des salles de discussion pour les quiz et encadrer les étudiants afin de les préparer à apprendre. Ensuite, invitez les étudiants à participer aux quiz et à soumettre leurs réponses sous forme de "issues" à un moment donné. Vous pourriez faire de même avec les devoirs, si vous souhaitez que les étudiants travaillent de manière collaborative et ouverte.
Si vous préférez un format plus privé, demandez à vos étudiants de cloner le programme, leçon par leçon, dans leurs propres dépôts GitHub privés, et donnez-vous accès. Ils pourront alors compléter les quiz et les devoirs de manière privée et vous les soumettre via des "issues" sur votre dépôt de classe.
Il existe de nombreuses façons de faire fonctionner cela dans un format de classe en ligne. Faites-nous savoir ce qui fonctionne le mieux pour vous !
## Inclus dans ce programme :
20 leçons, 40 quiz et 20 devoirs. Des sketchnotes accompagnent les leçons pour les apprenants visuels. De nombreuses leçons sont disponibles en Python et en R et peuvent être réalisées à l'aide de notebooks Jupyter dans VS Code. Découvrez comment configurer votre classe pour utiliser cette pile technologique : https://code.visualstudio.com/docs/datascience/jupyter-notebooks.
Tous les sketchnotes, y compris un poster grand format, se trouvent dans [ce dossier](../../sketchnotes).
Le programme complet est disponible [en PDF](../../pdf/readme.pdf).
Vous pouvez également exécuter ce programme comme un site web autonome, accessible hors ligne, en utilisant [Docsify](https://docsify.js.org/#/). [Installez Docsify](https://docsify.js.org/#/quickstart) sur votre machine locale, puis dans le dossier racine de votre copie locale de ce dépôt, tapez `docsify serve`. Le site web sera accessible sur le port 3000 de votre localhost : `localhost:3000`.
Une version accessible hors ligne du programme s'ouvrira sous forme de page web autonome : https://localhost:3000
Les leçons sont regroupées en 6 parties :
- 1 : Introduction
- 1 : Définir la science des données
- 2 : Éthique
- 3 : Définir les données
- 4 : Aperçu des probabilités et statistiques
- 2 : Travailler avec les données
- 5 : Bases de données relationnelles
- 6 : Bases de données non relationnelles
- 7 : Python
- 8 : Préparation des données
- 3 : Visualisation des données
- 9 : Visualisation des quantités
- 10 : Visualisation des distributions
- 11 : Visualisation des proportions
- 12 : Visualisation des relations
- 13 : Visualisations significatives
- 4 : Cycle de vie de la science des données
- 14 : Introduction
- 15 : Analyse
- 16 : Communication
- 5 : Science des données dans le cloud
- 17 : Introduction
- 18 : Options low-code
- 19 : Azure
- 6 : Science des données dans la pratique
- 20 : Aperçu
## Donnez-nous votre avis !
Nous voulons que ce programme fonctionne pour vous et vos étudiants. Donnez-nous votre feedback sur les forums de discussion ! N'hésitez pas à créer un espace de classe sur les forums de discussion pour vos étudiants.
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,137 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "e92c33ea498915a13c9aec162616db18",
"translation_date": "2025-08-24T13:15:09+00:00",
"source_file": "quiz-app/README.md",
"language_code": "fr"
}
-->
# Quiz
Ces quiz sont les quiz avant et après les cours du programme de science des données disponible sur https://aka.ms/datascience-beginners
## Ajouter un ensemble de quiz traduit
Ajoutez une traduction de quiz en créant des structures de quiz correspondantes dans les dossiers `assets/translations`. Les quiz originaux se trouvent dans `assets/translations/en`. Les quiz sont divisés en plusieurs groupes. Assurez-vous d'aligner la numérotation avec la section de quiz appropriée. Il y a un total de 40 quiz dans ce programme, avec une numérotation commençant à 0.
Après avoir modifié les traductions, modifiez le fichier index.js dans le dossier de traduction pour importer tous les fichiers en suivant les conventions de `en`.
Modifiez le fichier `index.js` dans `assets/translations` pour importer les nouveaux fichiers traduits.
Ensuite, modifiez le menu déroulant dans `App.vue` de cette application pour ajouter votre langue. Faites correspondre l'abréviation localisée au nom du dossier de votre langue.
Enfin, modifiez tous les liens de quiz dans les leçons traduites, si elles existent, pour inclure cette localisation comme paramètre de requête : `?loc=fr` par exemple.
## Configuration du projet
```
npm install
```
### Compilation et rechargement à chaud pour le développement
```
npm run serve
```
### Compilation et minification pour la production
```
npm run build
```
### Analyse et correction des fichiers
```
npm run lint
```
### Personnaliser la configuration
Voir [Référence de configuration](https://cli.vuejs.org/config/).
Crédits : Merci à la version originale de cette application de quiz : https://github.com/arpan45/simple-quiz-vue
## Déploiement sur Azure
Voici un guide étape par étape pour vous aider à démarrer :
1. Forker un dépôt GitHub
Assurez-vous que le code de votre application web statique se trouve dans votre dépôt GitHub. Forkez ce dépôt.
2. Créer une application web statique Azure
- Créez un [compte Azure](http://azure.microsoft.com)
- Accédez au [portail Azure](https://portal.azure.com)
- Cliquez sur "Créer une ressource" et recherchez "Application Web Statique".
- Cliquez sur "Créer".
3. Configurer l'application web statique
- Bases :
- Abonnement : Sélectionnez votre abonnement Azure.
- Groupe de ressources : Créez un nouveau groupe de ressources ou utilisez-en un existant.
- Nom : Donnez un nom à votre application web statique.
- Région : Choisissez la région la plus proche de vos utilisateurs.
- #### Détails du déploiement :
- Source : Sélectionnez "GitHub".
- Compte GitHub : Autorisez Azure à accéder à votre compte GitHub.
- Organisation : Sélectionnez votre organisation GitHub.
- Dépôt : Choisissez le dépôt contenant votre application web statique.
- Branche : Sélectionnez la branche à partir de laquelle vous souhaitez déployer.
- #### Détails de la construction :
- Préréglages de construction : Choisissez le framework avec lequel votre application est construite (par exemple, React, Angular, Vue, etc.).
- Emplacement de l'application : Spécifiez le dossier contenant le code de votre application (par exemple, / si c'est à la racine).
- Emplacement de l'API : Si vous avez une API, spécifiez son emplacement (optionnel).
- Emplacement de sortie : Spécifiez le dossier où la sortie de la construction est générée (par exemple, build ou dist).
4. Réviser et créer
Révisez vos paramètres et cliquez sur "Créer". Azure configurera les ressources nécessaires et créera un workflow GitHub Actions dans votre dépôt.
5. Workflow GitHub Actions
Azure créera automatiquement un fichier de workflow GitHub Actions dans votre dépôt (.github/workflows/azure-static-web-apps-<nom>.yml). Ce workflow gérera le processus de construction et de déploiement.
6. Surveiller le déploiement
Accédez à l'onglet "Actions" dans votre dépôt GitHub.
Vous devriez voir un workflow en cours d'exécution. Ce workflow construira et déploiera votre application web statique sur Azure.
Une fois le workflow terminé, votre application sera en ligne à l'URL Azure fournie.
### Exemple de fichier de workflow
Voici un exemple de ce à quoi pourrait ressembler le fichier de workflow GitHub Actions :
name: Azure Static Web Apps CI/CD
```
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize, reopened, closed]
branches:
- main
jobs:
build_and_deploy_job:
runs-on: ubuntu-latest
name: Build and Deploy Job
steps:
- uses: actions/checkout@v2
- name: Build And Deploy
id: builddeploy
uses: Azure/static-web-apps-deploy@v1
with:
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
repo_token: ${{ secrets.GITHUB_TOKEN }}
action: "upload"
app_location: "quiz-app" # App source code path
api_location: ""API source code path optional
output_location: "dist" #Built app content directory - optional
```
### Ressources supplémentaires
- [Documentation des applications web statiques Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started)
- [Documentation GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,19 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "3a848466cb63aff1a93411affb152c2a",
"translation_date": "2025-08-24T12:50:26+00:00",
"source_file": "sketchnotes/README.md",
"language_code": "fr"
}
-->
Retrouvez toutes les sketchnotes ici !
## Crédits
Nitya Narasimhan, artiste
![sketchnote de la feuille de route](../../../sketchnotes/00-Roadmap.png)
**Avertissement** :
Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.

@ -0,0 +1,78 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "2583a9894af7123b2fcae3376b14c035",
"translation_date": "2025-08-24T12:34:34+00:00",
"source_file": "1-Introduction/01-defining-data-science/README.md",
"language_code": "hk"
}
-->
## 數據的類型
正如我們之前提到的,數據無處不在。我們只需要以正確的方式捕捉它!區分 **結構化數據** 和 **非結構化數據** 是很有用的。前者通常以某種良好的結構形式表示,通常是表格或多個表格,而後者則僅僅是一堆文件。有時我們還可以談論 **半結構化數據**,它具有某種結構,但可能差異很大。
| 結構化數據 | 半結構化數據 | 非結構化數據 |
| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | --------------------------------------- |
| 包含人員及其電話號碼的列表 | 帶有鏈接的維基百科頁面 | 《大英百科全書》的文本 |
| 過去 20 年中每分鐘建築物所有房間的溫度數據 | 以 JSON 格式存儲的科學論文集合,包括作者、出版日期和摘要 | 包含公司文件的文件共享 |
| 進入建築物的所有人員的年齡和性別數據 | 網頁 | 監控攝像頭的原始視頻流 |
## 數據的來源
數據的來源有很多,幾乎不可能列出所有可能的來源!然而,我們可以提到一些典型的數據來源:
* **結構化數據**
- **物聯網** (IoT),包括來自不同傳感器(如溫度或壓力傳感器)的數據,提供了大量有用的數據。例如,如果辦公樓配備了物聯網傳感器,我們可以自動控制供暖和照明以降低成本。
- **調查問卷**,例如在購買後或訪問網站後要求用戶完成的問卷。
- **行為分析**,例如幫助我們了解用戶在網站上的瀏覽深度,以及離開網站的典型原因。
* **非結構化數據**
- **文本**可以提供豐富的洞察,例如整體 **情感分數**,或提取關鍵詞和語義信息。
- **圖像**或 **視頻**。監控攝像頭的視頻可以用來估算道路上的交通流量,並通知人們可能的交通堵塞。
- 網絡服務器的 **日誌** 可以用來了解我們網站上最常被訪問的頁面,以及訪問時長。
* **半結構化數據**
- **社交網絡**圖表可以提供有關用戶個性及其在信息傳播中的潛在影響力的數據。
- 當我們擁有一堆派對照片時,我們可以嘗試通過構建人們互相拍照的圖表來提取 **群體動態** 數據。
了解不同的數據來源後,您可以嘗試思考不同的場景,看看數據科學技術如何應用於更好地了解情況並改進業務流程。
## 數據的用途
在數據科學中,我們專注於數據旅程的以下步驟:
當然,根據實際數據的情況,有些步驟可能會缺失(例如,當我們已經擁有數據庫中的數據,或者不需要模型訓練時),或者某些步驟可能會重複多次(例如數據處理)。
## 數字化與數字轉型
在過去十年中,許多企業開始意識到在做出業務決策時數據的重要性。要將數據科學原則應用於業務運營,首先需要收集一些數據,即將業務流程轉化為數字形式。這被稱為 **數字化**。將數據科學技術應用於這些數據以指導決策,可以顯著提高生產力(甚至可能改變業務方向),這被稱為 **數字轉型**。
讓我們考慮一個例子。假設我們有一門數據科學課程(像這門課程),我們在線上向學生提供,並希望利用數據科學來改進它。我們該怎麼做?
我們可以從問「什麼可以數字化?」開始。最簡單的方法是測量每位學生完成每個模塊所需的時間,並通過在每個模塊結束時進行選擇題測試來測量所獲得的知識。通過計算所有學生的平均完成時間,我們可以找出哪些模塊對學生來說最具挑戰性,並著手簡化它們。
你可能會認為這種方法並不理想,因為模組的長度可能各不相同。或許更公平的做法是根據模組的長度(以字元數計算)來劃分時間,然後比較這些值。
當我們開始分析多項選擇題的測試結果時,可以嘗試找出學生在哪些概念上有困難,並利用這些資訊改進內容。為了做到這一點,我們需要設計測試,使每個問題對應到某個特定的概念或知識塊。
如果我們想進一步深入分析,可以將每個模組所需的時間與學生的年齡類別進行對比。我們可能會發現,某些年齡類別的學生完成模組所需的時間過長,或者在完成之前就中途退出。這可以幫助我們為模組提供年齡建議,並減少因錯誤期望而導致的不滿意。
## 🚀 挑戰
在這個挑戰中,我們將嘗試通過分析文本來找出與數據科學領域相關的概念。我們會選取一篇關於數據科學的維基百科文章,下載並處理文本,然後生成一個像這樣的文字雲:
![數據科學文字雲](../../../../1-Introduction/01-defining-data-science/images/ds_wordcloud.png)
訪問 [`notebook.ipynb`](../../../../../../../../../1-Introduction/01-defining-data-science/notebook.ipynb ':ignore') 閱讀代碼。你也可以運行代碼,並即時查看它如何執行所有數據轉換。
> 如果你不知道如何在 Jupyter Notebook 中運行代碼,可以參考 [這篇文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/1)
## 作業
* **任務 1**:修改上述代碼,找出與 **大數據** 和 **機器學習** 領域相關的概念
* **任務 2**[思考數據科學場景](assignment.md)
## 鳴謝
這節課由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,44 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "4e0f1773b9bee1be3b28f9fe2c71b3de",
"translation_date": "2025-08-24T12:37:26+00:00",
"source_file": "1-Introduction/01-defining-data-science/assignment.md",
"language_code": "hk"
}
-->
# 作業:數據科學場景
在這個第一個作業中,我們要求你思考一些不同領域的真實生活過程或問題,以及如何使用數據科學流程來改善它。請思考以下問題:
1. 你可以收集哪些數據?
1. 你會如何收集這些數據?
1. 你會如何存儲這些數據?這些數據的規模可能有多大?
1. 你可能從這些數據中獲得哪些洞察?基於這些數據,我們可以做出哪些決策?
嘗試思考三個不同的問題或過程,並針對每個問題領域描述上述每個點。
以下是一些問題領域和問題,幫助你開始思考:
1. 如何使用數據改善學校中兒童的教育過程?
1. 如何使用數據在疫情期間控制疫苗接種?
1. 如何使用數據確保自己在工作中保持高效?
## 指引
填寫以下表格(如果需要,可以用自己的問題領域替代建議的問題領域):
| 問題領域 | 問題 | 收集哪些數據 | 如何存儲數據 | 我們可以做出的洞察/決策 |
|----------|------|--------------|--------------|--------------------------|
| 教育 | | | | |
| 疫苗接種 | | | | |
| 生產力 | | | | |
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
能夠為所有問題領域識別合理的數據來源、存儲方式以及可能的決策/洞察 | 解決方案的某些方面未詳細說明,未討論數據存儲,至少描述了兩個問題領域 | 僅描述部分數據解決方案,僅考慮了一個問題領域。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,46 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "a8f79b9c0484c35b4f26e8aec7fc4d56",
"translation_date": "2025-08-24T12:38:27+00:00",
"source_file": "1-Introduction/01-defining-data-science/solution/assignment.md",
"language_code": "hk"
}
-->
# 作業:數據科學場景
在這個第一個作業中,我們要求你思考一些不同領域中的真實生活過程或問題,以及如何使用數據科學流程來改善它。請思考以下問題:
1. 你可以收集哪些數據?
1. 你會如何收集這些數據?
1. 你會如何存儲這些數據?數據的規模可能有多大?
1. 從這些數據中你可能能夠獲得哪些洞察?基於這些數據,我們可以做出哪些決策?
嘗試思考三個不同的問題/過程,並針對每個問題領域描述上述每個點。
以下是一些問題領域和問題,幫助你開始思考:
1. 如何使用數據改善學校中兒童的教育過程?
1. 如何使用數據在疫情期間控制疫苗接種?
1. 如何使用數據確保自己在工作中保持高效?
## 指引
填寫以下表格(如果需要,可以用自己的問題領域替代建議的問題領域):
| 問題領域 | 問題 | 收集哪些數據 | 如何存儲數據 | 我們可以做出的洞察/決策 |
|----------|------|--------------|--------------|--------------------------|
| 教育 | 在大學中,我們通常有低出席率的課堂,我們假設出席課堂的學生在考試中表現更好。我們希望刺激出席率並測試這個假設。 | 我們可以通過課堂中的安全攝像頭拍攝的照片來追蹤出席率,或者通過追蹤學生手機的藍牙/無線網絡地址來追蹤出席率。考試數據已經在大學數據庫中可用。 | 如果我們追蹤安全攝像頭的圖像——我們需要存儲課堂期間拍攝的幾張5-10張照片非結構化數據然後使用人工智能識別學生的面部將數據轉換為結構化形式。 | 我們可以計算每位學生的平均出席率,並查看是否與考試成績有任何相關性。我們會在[概率與統計](../../04-stats-and-probability/README.md)部分中更詳細地討論相關性。為了刺激學生出席率,我們可以在學校門戶網站上發布每週出席率排名,並在出席率最高的學生中抽獎。 |
| 疫苗接種 | | | | |
| 生產力 | | | | |
> *我們僅提供一個答案作為示例,以便你了解此作業的期望。*
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
能夠為所有問題領域識別合理的數據來源、存儲數據的方法以及可能的決策/洞察 | 解決方案的某些方面未詳細說明,未討論數據存儲,至少描述了兩個問題領域 | 僅描述了部分數據解決方案,僅考慮了一個問題領域。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,266 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "8796f41f566a0a8ebb72863a83d558ed",
"translation_date": "2025-08-24T12:23:45+00:00",
"source_file": "1-Introduction/02-ethics/README.md",
"language_code": "hk"
}
-->
# 數據倫理簡介
|![ 由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記 ](../../sketchnotes/02-Ethics.png)|
|:---:|
| 數據科學倫理 - _由 [@nitya](https://twitter.com/nitya) 繪製的手繪筆記_ |
---
我們都是生活在數據化世界中的數據公民。
市場趨勢顯示,到 2022 年,每三家大型組織中就有一家會通過線上[市場和交易所](https://www.gartner.com/smarterwithgartner/gartner-top-10-trends-in-data-and-analytics-for-2020/)購買和出售數據。作為**應用程式開發者**,我們將更容易且更便宜地將數據驅動的洞察力和算法驅動的自動化整合到日常用戶體驗中。但隨著人工智能的普及,我們也需要了解這些算法在大規模應用下可能帶來的[武器化](https://www.youtube.com/watch?v=TQHs8SA1qpk)危害。
趨勢還表明,到 2025 年,我們將創建和消耗超過 [180 澤字節](https://www.statista.com/statistics/871513/worldwide-data-created/)的數據。作為**數據科學家**,這讓我們能夠前所未有地訪問個人數據。這意味著我們可以建立用戶的行為檔案,並以某種方式影響決策,創造一種[自由選擇的假象](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice),同時可能將用戶推向我們偏好的結果。這也引發了關於數據隱私和用戶保護的更廣泛問題。
數據倫理現在是數據科學和工程的_必要護欄_幫助我們將數據驅動行動可能帶來的潛在危害和意外後果降到最低。[Gartner 人工智能技術成熟度曲線](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/)將數字倫理、負責任的人工智能和人工智能治理等相關趨勢列為推動人工智能_民主化_和_工業化_這些更大趨勢的關鍵驅動因素。
![Gartner 的 2020 年人工智能技術成熟度曲線](https://images-cdn.newscred.com/Zz1mOWJhNzlkNDA2ZTMxMWViYjRiOGFiM2IyMjQ1YmMwZQ==)
在本課程中,我們將探索數據倫理這一迷人的領域——從核心概念和挑戰,到案例研究和應用人工智能概念(如治理),幫助在處理數據和人工智能的團隊和組織中建立倫理文化。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/2) 🎯
## 基本定義
讓我們從理解基本術語開始。
“倫理”一詞來自[希臘語 "ethikos"](https://en.wikipedia.org/wiki/Ethics)(及其詞根 "ethos"意為_品格或道德本質_。
**倫理**是指在社會中規範我們行為的共同價值觀和道德原則。倫理不是基於法律,而是基於廣泛接受的“對與錯”的標準。然而,倫理考量可以影響公司治理舉措和政府法規,從而創造更多的合規激勵。
**數據倫理**是一個[新興的倫理分支](https://royalsocietypublishing.org/doi/full/10.1098/rsta.2016.0360#sec-1)研究和評估與_數據、算法及相關實踐_相關的道德問題。在這裡**“數據”**專注於生成、記錄、管理、處理、傳播、共享和使用的行為,**“算法”**專注於人工智能、代理、機器學習和機器人,**“實踐”**專注於負責任的創新、編程、駭客行為和倫理守則等主題。
**應用倫理**是[道德考量的實際應用](https://en.wikipedia.org/wiki/Applied_ethics)。它是積極調查_現實世界行動、產品和流程_中的倫理問題並採取糾正措施以確保這些行為與我們定義的倫理價值保持一致的過程。
**倫理文化**是關於[將應用倫理_操作化_](https://hbr.org/2019/05/how-to-design-an-ethical-organization),確保我們的倫理原則和實踐在整個組織中以一致且可擴展的方式被採用。成功的倫理文化會定義全組織範圍的倫理原則,提供有意義的合規激勵,並通過鼓勵和放大組織各層級的期望行為來強化倫理規範。
## 倫理概念
在本節中,我們將討論**共同價值觀**(原則)和**倫理挑戰**(問題)等數據倫理概念,並探索**案例研究**,幫助您在現實世界的背景中理解這些概念。
### 1. 倫理原則
每個數據倫理策略都始於定義_倫理原則_——描述可接受行為並指導我們在數據和人工智能項目中的合規行動的“共同價值觀”。您可以在個人或團隊層面定義這些原則。然而大多數大型組織會在公司層面定義一個_倫理人工智能_使命聲明或框架並在所有團隊中一致執行。
**範例:** 微軟的[負責任人工智能](https://www.microsoft.com/en-us/ai/responsible-ai)使命聲明寫道_“我們致力於推動以以人為本的倫理原則為驅動的人工智能發展”_並在以下框架中確定了六個倫理原則
![微軟的負責任人工智能](https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png)
讓我們簡要探討這些原則。_透明性_和_問責性_是其他原則的基石因此我們從這裡開始
* [**問責性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)讓從業者對其數據和人工智能操作以及對這些倫理原則的合規負責。
* [**透明性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)確保數據和人工智能行動對用戶是_可理解的_可解釋的解釋決策背後的內容和原因。
* [**公平性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6)——專注於確保人工智能對_所有人_公平對待解決數據和系統中的任何系統性或隱性社會技術偏見。
* [**可靠性與安全性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)——確保人工智能行為與定義的價值觀_一致_將潛在危害或意外後果降到最低。
* [**隱私與安全**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)——關注數據來源的理解並為用戶提供_數據隱私及相關保護_。
* [**包容性**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6)——專注於有意設計人工智能解決方案並使其適應_廣泛的人類需求_和能力。
> 🚨 想一想您的數據倫理使命聲明可能是什麼。探索其他組織的倫理人工智能框架——這裡有來自 [IBM](https://www.ibm.com/cloud/learn/ai-ethics)、[Google](https://ai.google/principles) 和 [Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/) 的範例。它們有哪些共同的價值觀?這些原則如何與它們所處的人工智能產品或行業相關?
### 2. 倫理挑戰
一旦我們定義了倫理原則下一步就是評估我們的數據和人工智能行動是否與這些共同價值觀一致。思考您的行動可以分為兩類_數據收集_和_算法設計_。
在數據收集方面,行動可能涉及**個人數據**或可識別活人的個人身份信息PII。這包括[多樣的非個人數據項目](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en)這些數據_共同_可以識別一個人。倫理挑戰可能與_數據隱私_、_數據所有權_以及相關主題如_知情同意_和用戶的_知識產權_相關。
在算法設計方面,行動將涉及收集和管理**數據集**,然後使用它們來訓練和部署**數據模型**以在現實世界的背景中預測結果或自動化決策。倫理挑戰可能來自_數據集偏見_、_數據質量_問題、_不公平性_和算法中的_錯誤表述_——包括一些系統性問題。
在這兩種情況下,倫理挑戰都突出了我們的行動可能與共同價值觀發生衝突的領域。為了檢測、減輕、最小化或消除這些問題,我們需要針對我們的行動提出道德的“是/否”問題,然後根據需要採取糾正措施。讓我們來看看一些倫理挑戰及其引發的道德問題:
#### 2.1 數據所有權
數據收集通常涉及可識別數據主體的個人數據。[數據所有權](https://permission.io/blog/data-ownership)是關於與數據的創建、處理和傳播相關的_控制_和[用戶權利](https://permission.io/blog/data-ownership)。
需要提出的道德問題包括:
* 誰擁有數據?(用戶還是組織)
* 數據主體擁有哪些權利?(例如:訪問、刪除、可攜性)
* 組織擁有哪些權利?(例如:糾正惡意用戶評論)
#### 2.2 知情同意
[知情同意](https://legaldictionary.net/informed-consent/)是指用戶在_充分了解_相關事實包括目的、潛在風險和替代方案的情況下同意某項行動如數據收集
需要探討的問題包括:
* 用戶(數據主體)是否允許數據的捕獲和使用?
* 用戶是否理解捕獲該數據的目的?
* 用戶是否理解參與可能帶來的潛在風險?
#### 2.3 知識產權
[知識產權](https://en.wikipedia.org/wiki/Intellectual_property)是指由人類創造的無形產物可能對個人或企業具有_經濟價值_。
需要探討的問題包括:
* 收集的數據是否對用戶或企業具有經濟價值?
* **用戶**是否擁有這裡的知識產權?
* **組織**是否擁有這裡的知識產權?
* 如果這些權利存在,我們如何保護它們?
#### 2.4 數據隱私
[數據隱私](https://www.northeastern.edu/graduate/blog/what-is-data-privacy/)或信息隱私是指在涉及個人身份信息時,保護用戶隱私和身份的行為。
需要探討的問題包括:
* 用戶的(個人)數據是否安全,防止駭客攻擊和洩漏?
* 用戶的數據是否僅限於授權用戶和授權情境訪問?
* 在數據共享或傳播時,是否保護了用戶的匿名性?
* 用戶是否可以從匿名數據集中被重新識別?
#### 2.5 被遺忘權
[被遺忘權](https://en.wikipedia.org/wiki/Right_to_be_forgotten)或[刪除權](https://www.gdpreu.org/right-to-be-forgotten/)為用戶提供額外的個人數據保護。具體來說它賦予用戶在_特定情況下_要求刪除或移除個人數據的權利允許他們在網上獲得一個新的開始而不會因過去的行為受到影響。
需要探討的問題包括:
* 系統是否允許數據主體請求刪除?
* 用戶撤回同意是否應觸發自動刪除?
* 是否有數據是在未經同意或非法手段下收集的?
* 我們是否符合政府對數據隱私的法規?
#### 2.6 數據集偏見
數據集或[收集偏見](http://researcharticles.com/index.php/bias-in-data-collection-in-research/)是指為算法開發選擇了一個_非代表性_的數據子集可能導致對不同群體的結果不公平。偏見類型包括選擇或抽樣偏見、志願者偏見和工具偏見。
需要探討的問題包括:
* 我們是否招募了一個具有代表性的數據主體集合?
* 我們是否測試了收集或管理的數據集是否存在各種偏見?
* 我們是否可以減輕或消除發現的任何偏見?
#### 2.7 數據質量
[數據質量](https://lakefs.io/data-quality-testing/)檢查用於開發算法的數據集的有效性,確保特徵和記錄符合我們人工智能目的所需的準確性和一致性要求。
需要探討的問題包括:
* 我們是否捕獲了適合我們用例的有效_特徵_
* 是否在不同數據來源中_一致地_捕獲了數據
* 數據集是否對不同條件或場景_完整_
* 捕獲的信息是否_準確_反映了現實
#### 2.8 算法公平性
[算法公平性](https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f)檢查算法設計是否系統性地對特定數據群體進行歧視從而導致在_資源分配_資源被拒絕或剝奪和_服務質量_AI對某些群體的準確性低於其他群體方面的[潛在傷害](https://docs.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml)。
需要探討的問題包括:
* 我們是否評估了模型在不同群體和條件下的準確性?
* 我們是否仔細檢查了系統可能帶來的傷害(例如,刻板印象)?
* 我們是否可以修正數據或重新訓練模型以減輕已識別的傷害?
探索像[AI公平性檢查清單](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4t6dA)這樣的資源以了解更多。
#### 2.9 錯誤呈現
[數據錯誤呈現](https://www.sciencedirect.com/topics/computer-science/misrepresentation)是指我們是否以欺騙性的方式傳達來自誠實報告數據的洞察,以支持某種期望的敘述。
需要探討的問題包括:
* 我們是否報告了不完整或不準確的數據?
* 我們是否以誤導性的方式可視化數據,從而得出錯誤結論?
* 我們是否使用選擇性的統計技術來操縱結果?
* 是否存在其他可能提供不同結論的解釋?
#### 2.10 自由選擇
[自由選擇的假象](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice)發生在系統的“選擇架構”使用決策算法來引導人們選擇某種偏好的結果,同時表面上給予他們選擇和控制的權利。這些[黑暗模式](https://www.darkpatterns.org/)可能對用戶造成社會和經濟上的傷害。由於用戶的決策會影響行為檔案,這些行為可能進一步驅動未來的選擇,從而放大或延續這些傷害的影響。
需要探討的問題包括:
* 用戶是否理解做出該選擇的影響?
* 用戶是否了解(替代)選擇及其各自的優缺點?
* 用戶是否可以在事後撤銷自動化或受影響的選擇?
### 3. 案例研究
將這些倫理挑戰放在現實世界的背景中,研究案例有助於了解當忽視這些倫理問題時,對個人和社會可能造成的傷害和後果。
以下是一些例子:
| 倫理挑戰 | 案例研究 |
|--- |--- |
| **知情同意** | 1972年 - [塔斯基吉梅毒研究](https://en.wikipedia.org/wiki/Tuskegee_Syphilis_Study) - 參與研究的非裔美國男性被承諾提供免費醫療服務但研究人員欺騙他們未告知其診斷或治療的可用性。許多受試者死亡其伴侶或子女也受到影響該研究持續了40年。 |
| **數據隱私** | 2007年 - [Netflix數據獎](https://www.wired.com/2007/12/why-anonymous-data-sometimes-isnt/)向研究人員提供了_來自5萬名用戶的1千萬條匿名電影評分_以改進推薦算法。然而研究人員能夠將匿名數據與_外部數據集_如IMDb評論中的個人身份數據相關聯實際上“去匿名化”了一些Netflix用戶。|
| **數據收集偏差** | 2013年 - 波士頓市[開發了Street Bump](https://www.boston.gov/transportation/street-bump),一款讓市民報告坑洞的應用,幫助城市獲取更好的道路數據以解決問題。然而,[低收入群體的人更少擁有汽車和手機](https://hbr.org/2013/04/the-hidden-biases-in-big-data)使得他們的道路問題在該應用中不可見。開發者與學者合作解決_公平性_問題。 |
| **算法公平性** | 2018年 - MIT [Gender Shades研究](http://gendershades.org/overview.html)評估了性別分類AI產品的準確性揭示了對女性和有色人種準確性不足的問題。一個[2019年Apple Card](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/)似乎給女性提供的信用額度低於男性。這兩個案例都說明了算法偏差導致的社會經濟傷害問題。|
| **數據錯誤呈現** | 2020年 - [喬治亞州公共衛生部發布的COVID-19圖表](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening)似乎通過非時間順序的x軸排序誤導公眾關於確診病例趨勢的認知這說明了通過可視化技巧進行的錯誤呈現。 |
| **自由選擇的假象** | 2020年 - 學習應用[ABCmouse支付了1千萬美元以解決FTC投訴](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/),家長被迫支付無法取消的訂閱費用。這說明了選擇架構中的黑暗模式,導致用戶做出潛在有害的選擇。 |
| **數據隱私與用戶權利** | 2021年 - Facebook [數據洩露](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users)暴露了5.3億用戶的數據導致向FTC支付50億美元的和解金。然而它拒絕通知用戶洩露事件違反了用戶關於數據透明性和訪問的權利。 |
想了解更多案例研究?查看以下資源:
* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - 涵蓋多個行業的倫理困境。
* [數據科學倫理課程](https://www.coursera.org/learn/data-science-ethics#syllabus) - 探討標誌性案例研究。
* [問題出在哪裡](https://deon.drivendata.org/examples/) - Deon清單中的案例示例。
> 🚨 想想你見過的案例研究——你是否曾經遇到過或受到過類似倫理挑戰的影響?你能想到至少一個其他案例來說明我們在本節中討論的倫理挑戰嗎?
## 應用倫理
我們已經討論了倫理概念、挑戰以及現實世界中的案例研究。但我們如何開始在項目中_應用_倫理原則和實踐我們又如何_實現_這些實踐以改進治理讓我們來探索一些現實世界的解決方案
### 1. 專業守則
專業守則為組織提供了一種選擇通過“激勵”成員支持其倫理原則和使命聲明。守則是專業行為的_道德指導方針_幫助員工或成員做出符合組織原則的決策。它的效力取決於成員的自願遵守然而許多組織提供額外的獎勵和懲罰來激勵成員遵守。
例子包括:
* [Oxford Munich](http://www.code-of-ethics.org/code-of-conduct/)倫理守則
* [數據科學協會](http://datascienceassn.org/code-of-conduct.html)行為守則創建於2013年
* [ACM倫理與專業行為守則](https://www.acm.org/code-of-ethics)自1993年起
> 🚨 你是否屬於某個專業工程或數據科學組織?探索他們的網站,看看是否定義了專業倫理守則。這些守則說明了哪些倫理原則?他們如何“激勵”成員遵守守則?
### 2. 倫理檢查清單
雖然專業守則定義了從業者所需的_倫理行為_但它們在執行方面[存在已知的局限性](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md),特別是在大規模項目中。因此,許多數據科學專家[提倡使用檢查清單](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md),這些清單可以**將原則轉化為實踐**,以更具決定性和可操作的方式實現。
檢查清單將問題轉化為“是/否”任務,可以被操作化,並作為標準產品發布工作流程的一部分進行跟蹤。
例子包括:
* [Deon](https://deon.drivendata.org/) - 一個通用的數據倫理檢查清單,基於[行業建議](https://deon.drivendata.org/#checklist-citations)創建,並提供命令行工具以便於集成。
* [隱私審核清單](https://cyber.harvard.edu/ecommerce/privacyaudit.html) - 從法律和社會風險角度提供信息處理實踐的一般指導。
* [AI公平性檢查清單](https://www.microsoft.com/en-us/research/project/ai-fairness-checklist/) - 由AI從業者創建用於支持公平性檢查的採用和集成到AI開發週期中。
* [數據與AI倫理的22個問題](https://medium.com/the-organization/22-questions-for-ethics-in-data-and-ai-efb68fd19429) - 更開放的框架,結構化用於設計、實施和組織背景下的倫理問題初步探索。
### 3. 倫理法規
倫理是關於定義共同價值觀並_自願_做正確的事情。**合規**則是關於_遵守法律_如果有相關規定。**治理**廣泛涵蓋了組織運營以執行倫理原則並遵守既定法律的所有方式。
今天,治理在組織內有兩種形式。首先,它是關於定義**倫理AI**原則並建立實踐以實現這些原則在組織內所有AI相關項目中的採用。其次它是關於遵守其運營地區的所有政府規定的**數據保護法規**。
數據保護和隱私法規的例子:
* `1974年`[美國隱私法案](https://www.justice.gov/opcl/privacy-act-1974) - 規範_聯邦政府_對個人信息的收集、使用和披露。
* `1996年`[美國健康保險便攜性與責任法案HIPAA](https://www.cdc.gov/phlp/publications/topic/hipaa.html) - 保護個人健康數據。
* `1998年`[美國兒童在線隱私保護法案COPPA](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule) - 保護13歲以下兒童的數據隱私。
* `2018年`[通用數據保護條例GDPR](https://gdpr-info.eu/) - 提供用戶權利、數據保護和隱私。
* `2018年`[加州消費者隱私法案CCPA](https://www.oag.ca.gov/privacy/ccpa) - 賦予消費者更多對其個人數據的_權利_。
* `2021年`,中國[個人信息保護法](https://www.reuters.com/world/china/china-passes-new-personal-data-privacy-law-take-effect-nov-1-2021-08-20/)剛剛通過,成為全球最強的在線數據隱私法規之一。
> 🚨 歐盟定義的GDPR通用數據保護條例仍然是當今最具影響力的數據隱私法規之一。你知道它還定義了[8項用戶權利](https://www.freeprivacypolicy.com/blog/8-user-rights-gdpr)來保護公民的數字隱私和個人數據嗎?了解這些權利是什麼以及它們為什麼重要。
### 4. 倫理文化
需要注意的是_合規_做到“符合法律條文”與解決[系統性問題](https://www.coursera.org/learn/data-science-ethics/home/week/4)如僵化、信息不對稱和分配不公平之間仍然存在無形的差距而這些問題可能加速AI的武器化。
後者需要[協作方式來定義倫理文化](https://towardsdatascience.com/why-ai-ethics-requires-a-culture-driven-approach-26f451afa29f),在行業內建立情感聯繫和一致的共同價值觀。這需要在組織內建立更[正式的數據倫理文化](https://www.codeforamerica.org/news/formalizing-an-ethical-data-culture/)——允許_任何人_在過程早期[拉響安燈繩](https://en.wikipedia.org/wiki/Andon_(manufacturing))提出倫理問題並將_倫理評估_例如在招聘中作為AI項目團隊組建的核心標準。
---
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/3) 🎯
## 回顧與自學
課程和書籍有助於理解核心倫理概念和挑戰,而案例研究和工具則有助於在現實世界中應用倫理實踐。以下是一些入門資源:
* [機器學習初學者](https://github.com/microsoft/ML-For-Beginners/blob/main/1-Introduction/3-fairness/README.md) - 來自Microsoft的公平性課程。
* [負責任人工智能的原則](https://docs.microsoft.com/en-us/learn/modules/responsible-ai-principles/) - Microsoft Learn 提供的免費學習路徑。
* [倫理與數據科學](https://resources.oreilly.com/examples/0636920203964) - O'Reilly 電子書 (M. Loukides, H. Mason 等人著)
* [數據科學倫理](https://www.coursera.org/learn/data-science-ethics#syllabus) - 密歇根大學提供的線上課程。
* [倫理解構](https://ethicsunwrapped.utexas.edu/case-studies) - 德州大學的案例研究。
# 作業
[撰寫一篇數據倫理案例研究](assignment.md)
**免責聲明**
本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,33 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "b588c0fc73014f52520c666efc3e0cc3",
"translation_date": "2025-08-24T12:31:46+00:00",
"source_file": "1-Introduction/02-ethics/assignment.md",
"language_code": "hk"
}
-->
## 撰寫數據倫理案例研究
## 指引
你已經學習了各種[數據倫理挑戰](README.md#2-ethics-challenges),並且看過一些反映現實世界中數據倫理挑戰的[案例研究](README.md#3-case-studies)範例。
在這次作業中,你將撰寫一篇自己的案例研究,反映你自身經歷或你熟悉的相關現實世界情境中的數據倫理挑戰。只需按照以下步驟進行:
1. `選擇一個數據倫理挑戰`。查看[課堂範例](README.md#2-ethics-challenges)或探索線上範例,例如[Deon 清單](https://deon.drivendata.org/examples/)以獲取靈感。
2. `描述一個現實世界的例子`。思考你聽過的情境(新聞頭條、研究報告等)或親身經歷的情境(本地社區),其中出現了這個特定挑戰。思考與該挑戰相關的數據倫理問題,並討論因為這個問題而可能產生的潛在傷害或意外後果。加分項:思考可能的解決方案或流程,這些方案可能有助於消除或減輕該挑戰的不利影響。
3. `提供相關資源列表`。分享一個或多個資源(文章連結、個人博客文章或圖片、線上研究報告等),以證明這是一個現實世界中發生的事件。加分項:分享能展示該事件潛在傷害與後果的資源,或突顯防止事件重演的正面措施的資源。
## 評分標準
卓越 | 合格 | 需改進
--- | --- | -- |
識別出一個或多個數據倫理挑戰。<br/><br/>案例研究清楚地描述了一個反映該挑戰的現實世界事件,並突顯了其造成的不良後果或傷害。<br/><br/>至少有一個連結資源證明事件的發生。 | 識別出一個數據倫理挑戰。<br/><br/>至少簡要討論了一個相關的傷害或後果。<br/><br/>然而,討論有限或缺乏現實世界事件的證據。 | 識別出一個數據挑戰。<br/><br/>然而,描述或資源未能充分反映該挑戰或證明其現實世界的發生。 |
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,83 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "356d12cffc3125db133a2d27b827a745",
"translation_date": "2025-08-24T12:39:49+00:00",
"source_file": "1-Introduction/03-defining-data/README.md",
"language_code": "hk"
}
-->
# 定義數據
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記](../../sketchnotes/03-DefiningData.png)|
|:---:|
|定義數據 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 提供_ |
數據是用於進行發現和支持明智決策的事實、信息、觀察和測量。一個數據點是數據集中單一的數據單位,而數據集則是數據點的集合。數據集可能有不同的格式和結構,通常基於其來源或數據的來源。例如,一家公司的每月收入可能以電子表格的形式存在,而智能手錶的每小時心率數據可能以 [JSON](https://stackoverflow.com/a/383699) 格式存在。對於數據科學家來說,在一個數據集中處理不同類型的數據是很常見的。
本課程的重點是根據數據的特徵和來源來識別和分類數據。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/4)
## 數據的描述方式
### 原始數據
原始數據是來自其來源的初始狀態,尚未經過分析或整理的數據。為了理解數據集中的情況,需要將其整理成一種人類和技術都能理解的格式。數據集的結構描述了它的組織方式,可以分為結構化、非結構化和半結構化。這些結構類型會根據來源有所不同,但最終會歸入這三個類別。
### 定量數據
定量數據是數據集中以數字形式表示的觀察值通常可以進行分析、測量並用於數學運算。一些定量數據的例子包括一個國家的人口、一個人的身高或一家公司季度收入。通過進一步分析定量數據可以用來發現空氣質量指數AQI的季節性趨勢或者估算典型工作日高峰時段交通的概率。
### 定性數據
定性數據,也稱為分類數據,是無法像定量數據那樣客觀測量的數據。它通常是各種形式的主觀數據,用於捕捉某物的質量,例如產品或流程。有時,定性數據是數字形式,但通常不會用於數學運算,例如電話號碼或時間戳。一些定性數據的例子包括:視頻評論、汽車的品牌和型號,或者你最親密朋友的最喜歡的顏色。定性數據可以用來了解消費者最喜歡哪些產品,或者識別求職簡歷中的熱門關鍵詞。
### 結構化數據
結構化數據是以行和列的形式組織的數據,其中每一行都有相同的一組列。列代表特定類型的值,並用名稱標識該值的含義,而行則包含實際的值。列通常會有一組特定的規則或限制,以確保值能準確地表示該列。例如,想像一個客戶的電子表格,其中每一行必須有一個電話號碼,且電話號碼不能包含字母字符。可能會對電話號碼列應用規則,以確保它永遠不會為空,並且只包含數字。
結構化數據的一個優勢是,它可以以某種方式組織起來,使其能與其他結構化數據相關聯。然而,由於數據被設計為以特定方式組織,對其整體結構進行更改可能需要付出很大的努力。例如,為客戶電子表格添加一個不能為空的電子郵件列,意味著你需要弄清楚如何為數據集中現有的客戶行添加這些值。
結構化數據的例子:電子表格、關係型數據庫、電話號碼、銀行對賬單
### 非結構化數據
非結構化數據通常無法分類為行或列,並且沒有固定的格式或規則可循。由於非結構化數據對其結構的限制較少,與結構化數據相比,添加新信息更為容易。例如,如果一個每兩分鐘捕獲一次氣壓數據的傳感器收到了一個更新,現在可以測量和記錄溫度,那麼如果數據是非結構化的,就不需要更改現有數據。然而,這可能會使分析或調查這類數據的過程變得更長。例如,一位科學家希望從傳感器數據中找到上個月的平均溫度,但發現傳感器在某些記錄數據中記錄了一個 "e" 來表示它壞了,而不是一個典型的數字,這意味著數據是不完整的。
非結構化數據的例子:文本文件、短信、視頻文件
### 半結構化數據
半結構化數據具有結構化和非結構化數據的特徵。它通常不符合行和列的格式,但以某種被認為是結構化的方式組織,並可能遵循固定的格式或規則。結構會因來源而異,例如從明確定義的層次結構到更靈活的結構,允許輕鬆整合新信息。元數據是幫助決定數據如何組織和存儲的指標,根據數據類型會有不同的名稱。一些常見的元數據名稱包括標籤、元素、實體和屬性。例如,一封典型的電子郵件消息會有主題、正文和一組收件人,並可以根據發送者或發送時間進行組織。
半結構化數據的例子HTML、CSV 文件、JavaScript Object Notation (JSON)
## 數據來源
數據來源是數據生成的初始位置,或者數據“存在”的地方,會根據數據的收集方式和時間而有所不同。由用戶生成的數據被稱為原始數據,而二手數據則來自於為一般用途收集數據的來源。例如,一組科學家在雨林中收集觀察數據被認為是原始數據,而如果他們決定與其他科學家分享這些數據,對於使用這些數據的人來說,這些數據就被認為是二手數據。
數據庫是常見的數據來源,依賴於數據庫管理系統來託管和維護數據,用戶通過稱為查詢的命令來探索數據。作為數據來源的文件可以是音頻、圖像和視頻文件,也可以是像 Excel 這樣的電子表格。互聯網來源是託管數據的常見位置其中可以找到數據庫和文件。應用程序編程接口API允許程序員通過互聯網創建與外部用戶共享數據的方法而網頁抓取則是從網頁中提取數據的過程。[《處理數據》課程](../../../../../../../../../2-Working-With-Data) 將重點介紹如何使用各種數據來源。
## 總結
在本課程中,我們學習了:
- 什麼是數據
- 數據的描述方式
- 數據的分類和歸類方式
- 數據的來源
## 🚀 挑戰
Kaggle 是一個優秀的開放數據集來源。使用 [數據集搜索工具](https://www.kaggle.com/datasets) 找到一些有趣的數據集,並根據以下標準對 3-5 個數據集進行分類:
- 數據是定量的還是定性的?
- 數據是結構化的、非結構化的還是半結構化的?
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/5)
## 複習與自學
- Microsoft Learn 單元 [分類你的數據](https://docs.microsoft.com/en-us/learn/modules/choose-storage-approach-in-azure/2-classify-data) 詳細介紹了結構化、半結構化和非結構化數據。
## 作業
[分類數據集](assignment.md)
**免責聲明**
本文件使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,77 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "2e5cacb967c1e9dfd07809bfc441a0b4",
"translation_date": "2025-08-24T12:41:55+00:00",
"source_file": "1-Introduction/03-defining-data/assignment.md",
"language_code": "hk"
}
-->
# 分類數據集
## 指引
按照此作業中的提示,識別並分類數據,並為每種數據類型選擇以下之一:
**結構類型**:結構化、半結構化或非結構化
**數值類型**:定性或定量
**來源類型**:原始或次級
1. 一家公司被收購,現在有了母公司。數據科學家從母公司收到了一份包含客戶電話號碼的電子表格。
結構類型:
數值類型:
來源類型:
---
2. 一款智能手錶正在收集佩戴者的心率數據,原始數據以 JSON 格式存儲。
結構類型:
數值類型:
來源類型:
---
3. 一份存儲在 CSV 文件中的員工士氣工作場所調查。
結構類型:
數值類型:
來源類型:
---
4. 天體物理學家正在訪問由太空探測器收集的星系數據庫。數據包含每個星系中的行星數量。
結構類型:
數值類型:
來源類型:
---
5. 一款個人理財應用程式使用 API 連接到用戶的金融賬戶,以計算其淨資產。用戶可以看到所有交易,格式為行和列,類似於電子表格。
結構類型:
數值類型:
來源類型:
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
正確識別所有結構、數值和來源 | 正確識別 3 個結構、數值和來源 | 正確識別 2 個或更少的結構、數值和來源 |
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,275 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "b706a07cfa87ba091cbb91e0aa775600",
"translation_date": "2025-08-24T12:44:41+00:00",
"source_file": "1-Introduction/04-stats-and-probability/README.md",
"language_code": "hk"
}
-->
# 統計學與概率簡介
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/04-Statistics-Probability.png)|
|:---:|
| 統計學與概率 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
統計學與概率論是數學中兩個密切相關的領域,對於數據科學非常重要。雖然在沒有深入數學知識的情況下也可以處理數據,但了解一些基本概念仍然是有益的。在這裡,我們將提供一個簡短的介紹,幫助你入門。
[![介紹影片](../../../../1-Introduction/04-stats-and-probability/images/video-prob-and-stats.png)](https://youtu.be/Z5Zy85g4Yjw)
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/6)
## 概率與隨機變量
**概率** 是介於 0 和 1 之間的一個數字,用來表示某個 **事件** 發生的可能性。它被定義為正面結果(導致事件發生的結果)的數量,除以所有可能結果的總數,前提是所有結果的概率相等。例如,當我們擲骰子時,得到偶數的概率是 3/6 = 0.5。
當我們談論事件時,我們使用 **隨機變量**。例如,表示擲骰子結果的隨機變量可以取值 1 到 6。1 到 6 的數字集合被稱為 **樣本空間**。我們可以討論隨機變量取某個值的概率,例如 P(X=3)=1/6。
上述例子中的隨機變量被稱為 **離散型**,因為它有一個可數的樣本空間,即可以枚舉的獨立值。有些情況下,樣本空間是一個實數範圍,或者整個實數集合。這樣的變量被稱為 **連續型**。一個很好的例子是公車到達的時間。
## 概率分佈
對於離散型隨機變量,我們可以通過函數 P(X) 輕鬆描述每個事件的概率。對於樣本空間 *S* 中的每個值 *s*,它會給出一個介於 0 和 1 之間的數字,並且所有事件的 P(X=s) 值的總和為 1。
最著名的離散分佈是 **均勻分佈**,其中樣本空間有 N 個元素,每個元素的概率均為 1/N。
描述連續型變量的概率分佈則更為困難,這些變量的值可能來自某個區間 [a,b],或者整個實數集合 ℝ。以公車到達時間為例,事實上,公車在某個精確時間 *t* 到達的概率是 0
> 現在你知道了,概率為 0 的事件是會發生的,而且非常頻繁!至少每次公車到達時都是如此!
我們只能討論變量落在某個值區間內的概率,例如 P(t<sub>1</sub>≤X<t<sub>2</sub>)。在這種情況下,概率分佈由 **概率密度函數** p(x) 描述,其公式如下:
![P(t_1\le X<t_2)=\int_{t_1}^{t_2}p(x)dx](../../../../1-Introduction/04-stats-and-probability/images/probability-density.png)
連續型均勻分佈是均勻分佈的連續版本,定義在有限區間內。變量 X 落入某個區間的概率與區間長度 l 成正比,並且概率最大為 1。
另一個重要的分佈是 **正態分佈**,我們將在下面詳細討論。
## 平均值、方差與標準差
假設我們抽取了 n 個隨機變量 X 的樣本x<sub>1</sub>, x<sub>2</sub>, ..., x<sub>n</sub>。我們可以用傳統方式定義序列的 **平均值**(或 **算術平均值**)為 (x<sub>1</sub>+x<sub>2</sub>+...+x<sub>n</sub>)/n。當樣本數量增大即 n→∞我們將得到分佈的平均值也稱為 **期望值**)。我們用 **E**(x) 表示期望值。
> 可以證明,對於任何離散分佈,其值為 {x<sub>1</sub>, x<sub>2</sub>, ..., x<sub>N</sub>},對應的概率為 p<sub>1</sub>, p<sub>2</sub>, ..., p<sub>N</sub>,期望值為 E(X)=x<sub>1</sub>p<sub>1</sub>+x<sub>2</sub>p<sub>2</sub>+...+x<sub>N</sub>p<sub>N</sub>
為了確定數值的分散程度,我們可以計算方差 σ<sup>2</sup> = ∑(x<sub>i</sub> - μ)<sup>2</sup>/n其中 μ 是序列的平均值。σ 被稱為 **標準差**,而 σ<sup>2</sup> 被稱為 **方差**。
## 眾數、中位數與四分位數
有時候,平均值並不能充分代表數據的「典型」值。例如,當有一些極端值完全超出範圍時,它們可能會影響平均值。另一個良好的指標是 **中位數**,即一個值,使得一半的數據點低於它,另一半高於它。
為了幫助我們理解數據的分佈,討論 **四分位數** 是有幫助的:
* 第一四分位數Q125% 的數據低於該值
* 第三四分位數Q375% 的數據低於該值
我們可以用一個叫做 **盒形圖** 的圖表來表示中位數與四分位數之間的關係:
<img src="images/boxplot_explanation.png" width="50%"/>
在這裡,我們還計算了 **四分位距** IQR=Q3-Q1以及所謂的 **離群值**——位於 [Q1-1.5*IQR,Q3+1.5*IQR] 範圍之外的值。
對於包含少量可能值的有限分佈,一個好的「典型」值是出現頻率最高的值,稱為 **眾數**。它通常應用於分類數據,例如顏色。考慮以下情況:有兩組人,一組強烈偏愛紅色,另一組偏愛藍色。如果我們用數字編碼顏色,最喜歡的顏色的平均值可能會落在橙色或綠色範圍,這並不能反映任何一組的實際偏好。然而,眾數可能是其中一種顏色,或者如果兩種顏色的投票人數相等,則樣本被稱為 **多眾數**。
## 真實世界數據
當我們分析真實世界的數據時,它們通常不是隨機變量,因為我們並未進行未知結果的實驗。例如,考慮一支棒球隊的球員及其身體數據,如身高、體重和年齡。這些數字並不完全是隨機的,但我們仍然可以應用相同的數學概念。例如,一組人的體重可以被視為從某個隨機變量中抽取的一組值。以下是來自 [美國職業棒球大聯盟](http://mlb.mlb.com/index.jsp) 的球員體重數據序列,取自 [這個數據集](http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights)(為方便起見,僅顯示前 20 個值):
```
[180.0, 215.0, 210.0, 210.0, 188.0, 176.0, 209.0, 200.0, 231.0, 180.0, 188.0, 180.0, 185.0, 160.0, 180.0, 185.0, 197.0, 189.0, 185.0, 219.0]
```
> **注意**:要查看使用此數據集的示例,請參考 [配套筆記本](../../../../1-Introduction/04-stats-and-probability/notebook.ipynb)。本課程中還有許多挑戰,你可以通過向該筆記本添加一些代碼來完成它們。如果你不確定如何操作數據,請不要擔心——我們稍後會回到使用 Python 處理數據的部分。如果你不知道如何在 Jupyter Notebook 中運行代碼,請參考 [這篇文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)。
以下是顯示我們數據的平均值、中位數和四分位數的盒形圖:
![體重盒形圖](../../../../1-Introduction/04-stats-and-probability/images/weight-boxplot.png)
由於我們的數據包含不同球員 **角色** 的信息,我們也可以按角色繪製盒形圖——這可以幫助我們了解參數值在不同角色之間的差異。這次我們將考慮身高:
![按角色的盒形圖](../../../../1-Introduction/04-stats-and-probability/images/boxplot_byrole.png)
這個圖表表明,平均而言,一壘手的身高高於二壘手的身高。在本課程的後面,我們將學習如何更正式地檢驗這一假設,以及如何證明我們的數據在統計上具有顯著性。
> 在處理真實世界數據時,我們假設所有數據點都是從某個概率分佈中抽取的樣本。這一假設使我們能夠應用機器學習技術並構建有效的預測模型。
為了查看我們數據的分佈,我們可以繪製一個叫做 **直方圖** 的圖表。X 軸包含不同的體重區間(即 **箱**),而垂直軸顯示隨機變量樣本落在給定區間內的次數。
![真實世界數據的直方圖](../../../../1-Introduction/04-stats-and-probability/images/weight-histogram.png)
從這個直方圖中可以看出,所有值都集中在某個平均體重附近,距離平均體重越遠,該值出現的次數越少。也就是說,棒球球員的體重非常接近平均體重的可能性很高。體重的方差顯示了體重與平均值可能的差異程度。
> 如果我們取其他人的體重數據,而不是棒球聯盟的球員,分佈可能會有所不同。然而,分佈的形狀會保持一致,但平均值和方差會改變。因此,如果我們在棒球球員上訓練模型,當應用於大學學生時可能會得出錯誤的結果,因為底層分佈不同。
## 正態分佈
我們上面看到的體重分佈非常典型,許多來自真實世界的測量值遵循相同類型的分佈,但具有不同的平均值和方差。這種分佈被稱為 **正態分佈**,在統計學中具有非常重要的作用。
使用正態分佈是生成潛在棒球球員隨機體重的正確方法。一旦我們知道平均體重 `mean` 和標準差 `std`,我們可以用以下方式生成 1000 個體重樣本:
```python
samples = np.random.normal(mean,std,1000)
```
如果我們繪製生成樣本的直方圖,我們會看到與上面類似的圖像。如果我們增加樣本數量和箱數,我們可以生成更接近理想的正態分佈圖像:
![均值=0標準差=1 的正態分佈](../../../../1-Introduction/04-stats-and-probability/images/normal-histogram.png)
*均值=0標準差=1 的正態分佈*
## 置信區間
當我們談論棒球球員的體重時,我們假設存在某個 **隨機變量 W**,它對應於所有棒球球員體重的理想概率分佈(即 **總體**)。我們的體重序列對應於所有棒球球員的一個子集,稱為 **樣本**。一個有趣的問題是,我們能否知道 W 的分佈參數,即總體的平均值和方差?
最簡單的答案是計算樣本的平均值和方差。然而,可能出現的情況是,我們的隨機樣本並不能準確代表完整的總體。因此,討論 **置信區間** 是有意義的。
> **信賴區間** 是根據我們的樣本來估算母體的真實平均值,其準確性在某一特定的概率(或稱為 **信心水平**)內。
假設我們有一個樣本 X<sub>1</sub>, ..., X<sub>n</sub> 來自我們的分佈。每次從分佈中抽取樣本時,我們都會得到不同的平均值 μ。因此,μ 可以被視為一個隨機變數。一個具有置信度 p 的 **置信區間** 是一對值 (L<sub>p</sub>,R<sub>p</sub>),使得 **P**(L<sub>p</sub>≤μ≤R<sub>p</sub>) = p即測量的平均值落在區間內的概率等於 p。
詳細討論如何計算這些置信區間超出了我們的簡短介紹範圍。更多細節可以參考 [維基百科](https://en.wikipedia.org/wiki/Confidence_interval)。簡而言之,我們定義了計算的樣本平均值相對於母體真實平均值的分佈,這被稱為 **學生分佈**。
> **有趣的事實**:學生分佈的名稱來自數學家 William Sealy Gosset他以筆名 "Student" 發表了他的論文。他在健力士啤酒廠工作,根據其中一個版本,他的雇主不希望公眾知道他們使用統計測試來檢測原材料的質量。
如果我們想以置信度 p 估計母體的平均值 μ,我們需要取學生分佈 A 的 *(1-p)/2 百分位數*,這可以從表格中獲取,或者使用統計軟件(例如 Python、R 等)的內建函數計算。然後 μ 的區間可以表示為 X±A*D/√n其中 X 是樣本的平均值D 是標準差。
> **注意**:我們也省略了與學生分佈相關的重要概念 [自由度](https://en.wikipedia.org/wiki/Degrees_of_freedom_(statistics)) 的討論。您可以參考更完整的統計書籍以更深入地理解這個概念。
一個關於體重和身高的置信區間計算示例可以在 [附帶的筆記本](../../../../1-Introduction/04-stats-and-probability/notebook.ipynb) 中找到。
| p | 體重平均值 |
|-----|-----------|
| 0.85 | 201.73±0.94 |
| 0.90 | 201.73±1.08 |
| 0.95 | 201.73±1.28 |
注意,置信概率越高,置信區間越寬。
## 假設檢定
在我們的棒球球員數據集中,有不同的球員角色,可以總結如下(查看 [附帶的筆記本](../../../../1-Introduction/04-stats-and-probability/notebook.ipynb) 以了解如何計算此表格):
| 角色 | 身高 | 體重 | 數量 |
|------|--------|--------|-------|
| 捕手 | 72.723684 | 204.328947 | 76 |
| 指定打擊手 | 74.222222 | 220.888889 | 18 |
| 一壘手 | 74.000000 | 213.109091 | 55 |
| 外野手 | 73.010309 | 199.113402 | 194 |
| 救援投手 | 74.374603 | 203.517460 | 315 |
| 二壘手 | 71.362069 | 184.344828 | 58 |
| 游擊手 | 71.903846 | 182.923077 | 52 |
| 先發投手 | 74.719457 | 205.163636 | 221 |
| 三壘手 | 73.044444 | 200.955556 | 45 |
我們可以注意到,一壘手的平均身高比二壘手高。因此,我們可能會得出結論:**一壘手比二壘手高**。
> 這個陳述被稱為 **假設**,因為我們不知道這個事實是否真的成立。
然而,是否可以得出這個結論並不總是顯而易見的。從上面的討論中我們知道,每個平均值都有一個相關的置信區間,因此這種差異可能僅僅是統計誤差。我們需要更正式的方法來檢驗我們的假設。
讓我們分別計算一壘手和二壘手的身高置信區間:
| 置信度 | 一壘手 | 二壘手 |
|------------|---------------|----------------|
| 0.85 | 73.62..74.38 | 71.04..71.69 |
| 0.90 | 73.56..74.44 | 70.99..71.73 |
| 0.95 | 73.47..74.53 | 70.92..71.81 |
我們可以看到,在任何置信度下,這些區間都不重疊。這證明了我們的假設,即一壘手比二壘手高。
更正式地說,我們正在解決的問題是檢查 **兩個概率分佈是否相同**,或者至少是否具有相同的參數。根據分佈,我們需要使用不同的檢驗方法。如果我們知道分佈是正態分佈,我們可以應用 **[學生 t 檢驗](https://en.wikipedia.org/wiki/Student%27s_t-test)**。
在學生 t 檢驗中,我們計算所謂的 **t 值**,它表示平均值之間的差異,並考慮到方差。已證明 t 值遵循 **學生分佈**,這使我們能夠獲得給定置信度 **p** 的閾值(這可以計算或在數值表中查找)。然後我們將 t 值與該閾值進行比較,以批准或拒絕假設。
在 Python 中,我們可以使用 **SciPy** 套件,其中包括 `ttest_ind` 函數(以及許多其他有用的統計函數!)。它為我們計算 t 值,並且還反向查找置信 p 值,因此我們只需查看置信度即可得出結論。
例如,我們對一壘手和二壘手身高的比較給出了以下結果:
```python
from scipy.stats import ttest_ind
tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Designated_Hitter',['Height']],equal_var=False)
print(f"T-value = {tval[0]:.2f}\nP-value: {pval[0]}")
```
```
T-value = 7.65
P-value: 9.137321189738925e-12
```
在我們的情況下p 值非常低,這意味著有強有力的證據支持一壘手更高。
此外,我們可能希望檢驗其他類型的假設,例如:
* 證明某個樣本遵循某種分佈。在我們的情況下,我們假設身高是正態分佈的,但這需要正式的統計驗證。
* 證明樣本的平均值與某個預定值相符
* 比較多個樣本的平均值(例如,不同年齡組的幸福水平差異)
## 大數法則與中心極限定理
正態分佈如此重要的原因之一是所謂的 **中心極限定理**。假設我們有一個由獨立的 N 個值 X<sub>1</sub>, ..., X<sub>N</sub> 組成的大樣本,這些值來自任何具有平均值 μ 和方差 σ<sup>2</sup> 的分佈。那麼,當 N 足夠大時(換句話說,當 N→∞平均值 Σ<sub>i</sub>X<sub>i</sub> 將呈正態分佈,平均值為 μ,方差為 σ<sup>2</sup>/N。
> 另一種解釋中心極限定理的方法是說,無論分佈如何,當您計算任何隨機變數值的和的平均值時,最終都會得到正態分佈。
根據中心極限定理,當 N→∞ 時,樣本平均值等於 μ 的概率變為 1。這被稱為 **大數法則**。
## 協方差與相關性
數據科學的一項工作是尋找數據之間的關係。我們說兩個序列 **相關**,當它們在同一時間表現出相似的行為,即它們同時上升/下降,或者一個序列上升時另一個序列下降,反之亦然。換句話說,兩個序列之間似乎存在某種關係。
> 相關性並不一定表示兩個序列之間存在因果關係;有時兩個變量可能依賴於某個外部原因,或者兩個序列的相關性可能純屬偶然。然而,強數學相關性是一個很好的指標,表明兩個變量以某種方式相互關聯。
數學上,顯示兩個隨機變數之間關係的主要概念是 **協方差**其計算公式為Cov(X,Y) = **E**\[(X-**E**(X))(Y-**E**(Y))\]。我們計算兩個變數偏離其平均值的偏差,然後計算這些偏差的乘積。如果兩個變數一起偏離,乘積將始終為正值,並累加為正協方差。如果兩個變數不同步偏離(即一個低於平均值時另一個高於平均值),我們將始終得到負數,並累加為負協方差。如果偏差不相關,它們將累加為大約零。
協方差的絕對值並不能告訴我們相關性有多大,因為它取決於實際值的大小。為了標準化,我們可以將協方差除以兩個變數的標準差,得到 **相關性**。相關性的好處是它始終在 [-1,1] 範圍內,其中 1 表示值之間的強正相關,-1 表示強負相關0 表示完全無相關(變數獨立)。
**示例**:我們可以計算棒球球員的體重和身高之間的相關性:
```python
print(np.corrcoef(weights,heights))
```
結果,我們得到如下的 **相關矩陣**
```
array([[1. , 0.52959196],
[0.52959196, 1. ]])
```
> 相關矩陣 C 可以為任意數量的輸入序列 S<sub>1</sub>, ..., S<sub>n</sub> 計算。C<sub>ij</sub> 的值是 S<sub>i</sub> 和 S<sub>j</sub> 之間的相關性,對角元素始終為 1這也是 S<sub>i</sub> 的自相關性)。
在我們的情況下,值 0.53 表明體重和身高之間存在一定的相關性。我們還可以繪製一個值對另一個值的散點圖,以直觀地查看關係:
![體重與身高的關係](../../../../1-Introduction/04-stats-and-probability/images/weight-height-relationship.png)
> 更多關於相關性和協方差的示例可以在 [附帶的筆記本](../../../../1-Introduction/04-stats-and-probability/notebook.ipynb) 中找到。
## 結論
在本節中,我們學習了:
* 數據的基本統計屬性,例如平均值、方差、眾數和四分位數
* 隨機變數的不同分佈,包括正態分佈
* 如何找到不同屬性之間的相關性
* 如何使用數學和統計的嚴謹工具來證明一些假設
* 如何根據數據樣本計算隨機變數的置信區間
雖然這絕不是概率和統計中所有主題的完整列表,但應該足以讓您在本課程中有一個良好的開始。
## 🚀 挑戰
使用筆記本中的示例代碼來測試以下假設:
1. 一壘手比二壘手年齡更大
2. 一壘手比三壘手更高
3. 游擊手比二壘手更高
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/7)
## 回顧與自學
概率和統計是一個非常廣泛的主題,值得開設自己的課程。如果您有興趣深入理論,可以繼續閱讀以下書籍:
1. [Carlos Fernandez-Granda](https://cims.nyu.edu/~cfgranda/)(紐約大學)有很棒的講義 [Probability and Statistics for Data Science](https://cims.nyu.edu/~cfgranda/pages/stuff/probability_stats_for_DS.pdf)(在線提供)
1. [Peter 和 Andrew Bruce. Practical Statistics for Data Scientists.](https://www.oreilly.com/library/view/practical-statistics-for/9781491952955/) [[R 示例代碼](https://github.com/andrewgbruce/statistics-for-data-scientists)]。
1. [James D. Miller. Statistics for Data Science](https://www.packtpub.com/product/statistics-for-data-science/9781788290678) [[R 示例代碼](https://github.com/PacktPublishing/Statistics-for-Data-Science)]
## 作業
[小型糖尿病研究](assignment.md)
## 致謝
本課程由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,38 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "01d1b493e8b51a6ebb42524f6b1bcfff",
"translation_date": "2025-08-24T12:49:33+00:00",
"source_file": "1-Introduction/04-stats-and-probability/assignment.md",
"language_code": "hk"
}
-->
# 小型糖尿病研究
在這次作業中,我們將使用一個來自[這裡](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html)的小型糖尿病患者數據集。
| | 年齡 | 性別 | BMI | 血壓 | S1 | S2 | S3 | S4 | S5 | S6 | Y |
|---|-----|-----|-----|----|----|----|----|----|----|----|----|
| 0 | 59 | 2 | 32.1 | 101. | 157 | 93.2 | 38.0 | 4. | 4.8598 | 87 | 151 |
| 1 | 48 | 1 | 21.6 | 87.0 | 183 | 103.2 | 70. | 3. | 3.8918 | 69 | 75 |
| 2 | 72 | 2 | 30.5 | 93.0 | 156 | 93.6 | 41.0 | 4.0 | 4. | 85 | 141 |
| ... | ... | ... | ... | ...| ...| ...| ...| ...| ...| ...| ... |
## 指引
* 在 jupyter notebook 環境中打開 [assignment notebook](../../../../1-Introduction/04-stats-and-probability/assignment.ipynb)
* 完成 notebook 中列出的所有任務,包括:
* [ ] 計算所有值的平均值和方差
* [ ] 根據性別繪製 BMI、血壓和 Y 的箱型圖
* [ ] 分析年齡、性別、BMI 和 Y 變數的分佈情況
* [ ] 測試不同變數與疾病進展Y之間的相關性
* [ ] 檢驗糖尿病進展程度在男性和女性之間是否存在差異的假設
## 評分標準
卓越 | 合格 | 需改進
--- | --- | -- |
所有要求的任務均已完成,並有圖形展示和詳細解釋 | 大部分任務已完成,但缺少圖表的解釋或數據的結論 | 只完成了基本任務,例如計算平均值/方差和基本圖表,未對數據得出任何結論
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,29 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "696a8474a01054281704cbfb09148949",
"translation_date": "2025-08-24T12:20:41+00:00",
"source_file": "1-Introduction/README.md",
"language_code": "hk"
}
-->
# 數據科學入門
![數據運作中](../../../1-Introduction/images/data.jpg)
> 圖片由 <a href="https://unsplash.com/@dawson2406?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Stephen Dawson</a> 提供,來自 <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
在這些課程中,你將了解什麼是數據科學,並學習數據科學家必須考慮的倫理問題。你還會學到數據的定義,並簡單了解統計學和概率論,這是數據科學的核心學術領域。
### 主題
1. [數據科學的定義](01-defining-data-science/README.md)
2. [數據科學倫理](02-ethics/README.md)
3. [數據的定義](03-defining-data/README.md)
4. [統計學與概率論入門](04-stats-and-probability/README.md)
### 鳴謝
這些課程由 [Nitya Narasimhan](https://twitter.com/nitya) 和 [Dmitry Soshnikov](https://twitter.com/shwars) 用 ❤️ 編寫。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,193 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "870a0086adbc313a8eea5489bdcb2522",
"translation_date": "2025-08-24T12:00:22+00:00",
"source_file": "2-Working-With-Data/05-relational-databases/README.md",
"language_code": "hk"
}
-->
# 使用數據:關係型數據庫
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/05-RelationalData.png)|
|:---:|
| 使用數據:關係型數據庫 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
你可能曾經使用過電子表格來存儲信息。電子表格由一組行和列組成,其中行包含信息(或數據),列描述信息(有時稱為元數據)。關係型數據庫基於表格中的行和列這一核心原則構建,允許你將信息分散到多個表中。這使得你可以處理更複雜的數據,避免重複,並在探索數據時擁有更大的靈活性。讓我們一起探索關係型數據庫的概念。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/8)
## 一切從表格開始
關係型數據庫的核心是表格。就像電子表格一樣,表格是一組行和列的集合。行包含我們希望處理的數據或信息,例如城市名稱或降雨量。列則描述存儲的數據。
讓我們開始探索,建立一個表格來存儲城市的信息。我們可以從城市名稱和國家開始。你可以將其存儲在如下表格中:
| 城市 | 國家 |
| -------- | ------------- |
| 東京 | 日本 |
| 亞特蘭大 | 美國 |
| 奧克蘭 | 新西蘭 |
注意,**城市**、**國家**和**人口**這些列名描述了存儲的數據,每一行包含一個城市的信息。
## 單一表格方法的局限性
上述表格可能對你來說相當熟悉。現在讓我們開始向這個初步的數據庫添加一些額外的數據——年度降雨量以毫米為單位。我們將重點放在2018年、2019年和2020年。如果我們為東京添加數據可能會像這樣
| 城市 | 國家 | 年份 | 降雨量 |
| ----- | ------- | ---- | ------ |
| 東京 | 日本 | 2020 | 1690 |
| 東京 | 日本 | 2019 | 1874 |
| 東京 | 日本 | 2018 | 1445 |
你注意到我們的表格有什麼問題嗎?你可能會注意到我們重複了城市名稱和國家多次。這可能會佔用相當多的存儲空間,而且多次複製是完全不必要的。畢竟,東京只有一個名稱是我們感興趣的。
好吧,讓我們嘗試另一種方法。讓我們為每一年添加新的列:
| 城市 | 國家 | 2018 | 2019 | 2020 |
| -------- | ------------- | ---- | ---- | ---- |
| 東京 | 日本 | 1445 | 1874 | 1690 |
| 亞特蘭大 | 美國 | 1779 | 1111 | 1683 |
| 奧克蘭 | 新西蘭 | 1386 | 942 | 1176 |
雖然這避免了行的重複,但也帶來了一些其他挑戰。我們每次有新的一年都需要修改表格的結構。此外,隨著數據的增長,將年份作為列會使檢索和計算數值變得更加困難。
這就是為什麼我們需要多個表格和關係。通過拆分數據,我們可以避免重複,並在處理數據時擁有更大的靈活性。
## 關係的概念
讓我們回到數據,確定如何拆分它。我們知道我們希望存儲城市的名稱和國家,因此這可能最適合存儲在一個表格中。
| 城市 | 國家 |
| -------- | ------------- |
| 東京 | 日本 |
| 亞特蘭大 | 美國 |
| 奧克蘭 | 新西蘭 |
但在創建下一個表格之前我們需要弄清楚如何引用每個城市。我們需要某種形式的標識符、ID或在技術數據庫術語中主鍵。主鍵是一個用於標識表中某一特定行的值。雖然這可以基於某個值本身例如我們可以使用城市的名稱但它幾乎應該始終是一個數字或其他標識符。我們不希望ID發生變化因為這會破壞關係。你會發現在大多數情況下主鍵或ID通常是一個自動生成的數字。
> ✅ 主鍵通常縮寫為PK
### 城市表
| city_id | 城市 | 國家 |
| ------- | -------- | ------------- |
| 1 | 東京 | 日本 |
| 2 | 亞特蘭大 | 美國 |
| 3 | 奧克蘭 | 新西蘭 |
> ✅ 在本課程中你會注意到我們交替使用“id”和“主鍵”這些術語。這些概念同樣適用於DataFrames你稍後會探索。DataFrames不使用“主鍵”這一術語但你會注意到它們的行為非常相似。
創建了城市表後讓我們存儲降雨量。與其重複城市的完整信息我們可以使用ID。我們還應確保新創建的表格也有一個*id*列因為所有表格都應該有一個id或主鍵。
### 降雨量表
| rainfall_id | city_id | 年份 | 降雨量 |
| ----------- | ------- | ---- | ------ |
| 1 | 1 | 2018 | 1445 |
| 2 | 1 | 2019 | 1874 |
| 3 | 1 | 2020 | 1690 |
| 4 | 2 | 2018 | 1779 |
| 5 | 2 | 2019 | 1111 |
| 6 | 2 | 2020 | 1683 |
| 7 | 3 | 2018 | 1386 |
| 8 | 3 | 2019 | 942 |
| 9 | 3 | 2020 | 1176 |
注意新創建的**降雨量**表中的**city_id**列。這一列包含引用**城市**表中ID的值。在技術關係型數據術語中這被稱為**外鍵**;它是來自另一個表的主鍵。你可以簡單地將其視為一個引用或指針。**city_id** 1引用的是東京。
> [!NOTE] 外鍵通常縮寫為FK
## 檢索數據
將數據分成兩個表後你可能會想知道如何檢索它。如果我們使用像MySQL、SQL Server或Oracle這樣的關係型數據庫我們可以使用一種叫做結構化查詢語言SQL的語言。SQL有時讀作sequel是一種標準語言用於在關係型數據庫中檢索和修改數據。
要檢索數據,你可以使用命令`SELECT`。其核心是,你**選擇**想要查看的列,**從**它們所在的表中。如果你只想顯示城市的名稱,可以使用以下命令:
```sql
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
```
`SELECT`是列出列名的地方,`FROM`是列出表名的地方。
> [NOTE] SQL語法不區分大小寫這意味著`select`和`SELECT`是相同的。然而根據你使用的數據庫類型列名和表名可能區分大小寫。因此最佳做法是始終將編程中的所有內容視為區分大小寫。在編寫SQL查詢時常見的約定是將關鍵字全部用大寫字母表示。
上述查詢將顯示所有城市。假設我們只想顯示新西蘭的城市。我們需要某種形式的篩選器。SQL中的關鍵字是`WHERE`,即“某些條件為真”。
```sql
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
```
## 合併數據
到目前為止,我們只從單個表中檢索數據。現在我們希望將**城市**和**降雨量**中的數據結合在一起。這可以通過*合併*它們來完成。你將有效地在兩個表之間創建一個接縫,並匹配每個表中的列值。
在我們的例子中,我們將匹配**降雨量**表中的**city_id**列與**城市**表中的**city_id**列。這將把降雨量值與其相應的城市匹配。我們將執行的合併類型稱為*內部合併*,這意味著如果某些行與另一個表中的任何內容不匹配,它們將不會顯示。在我們的例子中,每個城市都有降雨量,因此所有內容都會顯示。
讓我們檢索2019年所有城市的降雨量。
我們將分步完成。第一步是通過指示接縫的列來合併數據——如前所述的**city_id**。
```sql
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
```
我們已經突出顯示了我們想要的兩列,以及我們希望通過**city_id**合併表格的事實。現在我們可以添加`WHERE`語句來篩選出僅2019年的數據。
```sql
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942
```
## 總結
關係型數據庫的核心是將信息分成多個表,然後將其重新組合以進行顯示和分析。這提供了高度的靈活性來執行計算或以其他方式操作數據。你已經了解了關係型數據庫的核心概念,以及如何在兩個表之間進行合併。
## 🚀 挑戰
網絡上有許多關係型數據庫可供使用。你可以通過使用上述技能來探索數據。
## 課後測驗
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/9)
## 回顧與自學
[Microsoft Learn](https://docs.microsoft.com/learn?WT.mc_id=academic-77958-bethanycheum)上有多種資源可供你繼續探索SQL和關係型數據庫的概念
- [描述關係型數據的概念](https://docs.microsoft.com//learn/modules/describe-concepts-of-relational-data?WT.mc_id=academic-77958-bethanycheum)
- [開始使用Transact-SQL進行查詢](https://docs.microsoft.com//learn/paths/get-started-querying-with-transact-sql?WT.mc_id=academic-77958-bethanycheum)Transact-SQL是SQL的一個版本
- [Microsoft Learn上的SQL內容](https://docs.microsoft.com/learn/browse/?products=azure-sql-database%2Csql-server&expanded=azure&WT.mc_id=academic-77958-bethanycheum)
## 作業
[作業標題](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要信息,建議使用專業的人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,71 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "2f2d7693f28e4b2675f275e489dc5aac",
"translation_date": "2025-08-24T12:02:42+00:00",
"source_file": "2-Working-With-Data/05-relational-databases/assignment.md",
"language_code": "hk"
}
-->
# 顯示機場數據
你已獲得一個基於 [SQLite](https://sqlite.org/index.html) 的 [資料庫](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db),其中包含有關機場的資訊。以下顯示了其架構。你將使用 [Visual Studio Code](https://code.visualstudio.com?WT.mc_id=academic-77958-bethanycheum) 中的 [SQLite 擴展](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum) 來顯示不同城市的機場資訊。
## 指引
要開始這項作業,你需要完成幾個步驟。你需要安裝一些工具並下載示例資料庫。
### 設置你的系統
你可以使用 Visual Studio Code 和 SQLite 擴展來與資料庫互動。
1. 前往 [code.visualstudio.com](https://code.visualstudio.com?WT.mc_id=academic-77958-bethanycheum),按照指示安裝 Visual Studio Code
1. 按照 Marketplace 頁面的指示安裝 [SQLite 擴展](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum)
### 下載並打開資料庫
接下來,你需要下載並打開資料庫。
1. 從 [GitHub 下載資料庫文件](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db),並將其保存到一個目錄中
1. 打開 Visual Studio Code
1. 在 SQLite 擴展中打開資料庫,按下 **Ctl-Shift-P**(或在 Mac 上按 **Cmd-Shift-P**),並輸入 `SQLite: Open database`
1. 選擇 **Choose database from file**,然後打開你之前下載的 **airports.db** 文件
1. 打開資料庫後(螢幕上不會有更新顯示),通過按下 **Ctl-Shift-P**(或在 Mac 上按 **Cmd-Shift-P**),並輸入 `SQLite: New query` 來創建一個新的查詢窗口
打開後,新的查詢窗口可用於對資料庫執行 SQL 語句。你可以使用命令 **Ctl-Shift-Q**(或在 Mac 上按 **Cmd-Shift-Q**)來執行資料庫查詢。
> [!NOTE] 有關 SQLite 擴展的更多資訊,你可以參考 [文檔](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum)
## 資料庫架構
資料庫的架構是其表的設計和結構。**airports** 資料庫有兩個表,`cities` 包含英國和愛爾蘭的城市列表,`airports` 包含所有機場的列表。由於某些城市可能有多個機場,因此創建了兩個表來存儲資訊。在此練習中,你將使用連接來顯示不同城市的資訊。
| Cities |
| ---------------- |
| id (PK, integer) |
| city (text) |
| country (text) |
| Airports |
| -------------------------------- |
| id (PK, integer) |
| name (text) |
| code (text) |
| city_id (FK to id in **Cities**) |
## 作業
創建查詢以返回以下資訊:
1. `Cities` 表中的所有城市名稱
1. `Cities` 表中所有位於愛爾蘭的城市
1. 所有機場名稱及其所在城市和國家
1. 所有位於英國倫敦的機場
## 評分標準
| 優秀 | 合格 | 需要改進 |
| --------- | --------- | ------------- |
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,156 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "32ddfef8121650f2ca2f3416fd283c37",
"translation_date": "2025-08-24T12:16:34+00:00",
"source_file": "2-Working-With-Data/06-non-relational/README.md",
"language_code": "hk"
}
-->
# 使用數據:非關聯式數據
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記筆記](../../sketchnotes/06-NoSQL.png)|
|:---:|
|使用 NoSQL 數據 - _速記筆記由 [@nitya](https://twitter.com/nitya) 提供_ |
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/10)
數據並不限於關聯式數據庫。本課程聚焦於非關聯式數據,並涵蓋電子表格和 NoSQL 的基礎知識。
## 電子表格
電子表格是一種流行的數據存儲和探索方式,因為它需要較少的設置工作即可開始使用。在本課程中,您將學習電子表格的基本組成部分,以及公式和函數。示例將以 Microsoft Excel 為例,但大多數部分和主題在其他電子表格軟件中都有類似的名稱和步驟。
![一個空的 Microsoft Excel 工作簿,包含兩個工作表](../../../../2-Working-With-Data/06-non-relational/images/parts-of-spreadsheet.png)
電子表格是一個文件,可以在電腦、設備或基於雲的文件系統中訪問。軟件本身可能是基於瀏覽器的,也可能是必須安裝在電腦上的應用程序或下載的應用。 在 Excel 中,這些文件也被定義為 **工作簿**,本課程的其餘部分將使用這一術語。
工作簿包含一個或多個 **工作表**,每個工作表都由標籤標記。在工作表中有稱為 **儲存格** 的矩形,這些儲存格包含實際數據。儲存格是行和列的交叉點,其中列用字母標記,行用數字標記。一些電子表格會在前幾行中包含標題,以描述儲存格中的數據。
了解了 Excel 工作簿的這些基本元素後,我們將使用 [Microsoft Templates](https://templates.office.com/) 中的一個專注於庫存的示例來演示電子表格的其他部分。
### 管理庫存
名為 "InventoryExample" 的電子表格文件是一個格式化的庫存項目表,包含三個工作表,標籤分別為 "Inventory List"、"Inventory Pick List" 和 "Bin Lookup"。Inventory List 工作表的第 4 行是標題,描述了標題列中每個儲存格的值。
![Microsoft Excel 庫存列表示例中突出顯示的公式](../../../../2-Working-With-Data/06-non-relational/images/formula-excel.png)
有些情況下,儲存格的值依賴於其他儲存格的值來生成。在庫存列表電子表格中,我們跟蹤庫存中每件物品的成本,但如果我們需要知道整個庫存的價值呢?[**公式**](https://support.microsoft.com/en-us/office/overview-of-formulas-34519a4e-1e8d-4f4b-84d4-d642c4f63263) 用於對儲存格數據執行操作,在此示例中用於計算庫存的成本。此電子表格在 Inventory Value 列中使用公式,通過將 QTY 標題下的數量與 COST 標題下的成本相乘來計算每件物品的價值。雙擊或突出顯示儲存格將顯示公式。您會注意到公式以等號開頭,後面是計算或操作。
![Microsoft Excel 庫存列表示例中突出顯示的函數](../../../../2-Working-With-Data/06-non-relational/images/function-excel.png)
我們可以使用另一個公式將所有 Inventory Value 的值相加以獲得其總價值。這可以通過逐個儲存格相加來計算但這可能是一項繁瑣的任務。Excel 提供了 [**函數**](https://support.microsoft.com/en-us/office/sum-function-043e1c7d-7726-4e80-8f32-07b23e057f89),即預定義的公式,用於對儲存格值進行計算。函數需要參數,即執行這些計算所需的值。當函數需要多個參數時,它們需要按特定順序列出,否則函數可能無法計算正確的值。此示例使用 SUM 函數,並使用 Inventory Value 的值作為參數來生成列於第 3 行、第 B 列(也稱為 B3的總值。
## NoSQL
NoSQL 是一個涵蓋非關聯式數據存儲方式的術語,可以解釋為 "非 SQL"、"非關聯式" 或 "不僅僅是 SQL"。這些類型的數據庫系統可以分為四種類型。
![鍵值數據存儲的圖形表示,顯示 4 個唯一的數字鍵與 4 個不同的值相關聯](../../../../2-Working-With-Data/06-non-relational/images/kv-db.png)
> 來源:[Michał Białecki Blog](https://www.michalbialecki.com/2018/03/18/azure-cosmos-db-key-value-database-cloud/)
[鍵值](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#keyvalue-data-stores) 數據庫將唯一鍵(唯一標識符)與值配對。這些配對使用 [哈希表](https://www.hackerearth.com/practice/data-structures/hash-tables/basics-of-hash-tables/tutorial/) 和適當的哈希函數存儲。
![圖形數據存儲的圖形表示,顯示人、他們的興趣和位置之間的關係](../../../../2-Working-With-Data/06-non-relational/images/graph-db.png)
> 來源:[Microsoft](https://docs.microsoft.com/en-us/azure/cosmos-db/graph/graph-introduction#graph-database-by-example)
[圖形](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#graph-data-stores) 數據庫描述數據中的關係,並表示為節點和邊的集合。節點表示實體,即現實世界中存在的事物,例如學生或銀行對賬單。邊表示兩個實體之間的關係。每個節點和邊都有屬性,提供有關節點和邊的附加信息。
![列式數據存儲的圖形表示,顯示一個客戶數據庫,包含兩個列族,分別為 Identity 和 Contact Info](../../../../2-Working-With-Data/06-non-relational/images/columnar-db.png)
[列式](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#columnar-data-stores) 數據存儲以列和行的形式組織數據,類似於關聯式數據結構,但每列被分為稱為列族的組,其中一列下的所有數據都是相關的,可以作為一個單元檢索和更改。
### 使用 Azure Cosmos DB 的文檔數據存儲
[文檔](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#document-data-stores) 數據存儲基於鍵值數據存儲的概念,由一系列字段和對象組成。本節將使用 Cosmos DB 模擬器探索文檔數據庫。
Cosmos DB 數據庫符合 "不僅僅是 SQL" 的定義,其中 Cosmos DB 的文檔數據庫依賴 SQL 來查詢數據。[前一課程](../05-relational-databases/README.md) 涵蓋了 SQL 的基礎知識,我們將能夠在此處將一些相同的查詢應用於文檔數據庫。我們將使用 Cosmos DB 模擬器,該模擬器允許我們在電腦上本地創建和探索文檔數據庫。閱讀更多關於模擬器的信息 [此處](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21)。
文檔是字段和對象值的集合,其中字段描述對象值代表的內容。以下是一個文檔示例。
```json
{
"firstname": "Eva",
"age": 44,
"id": "8c74a315-aebf-4a16-bb38-2430a9896ce5",
"_rid": "bHwDAPQz8s0BAAAAAAAAAA==",
"_self": "dbs/bHwDAA==/colls/bHwDAPQz8s0=/docs/bHwDAPQz8s0BAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-9f95-010a691e01d7\"",
"_attachments": "attachments/",
"_ts": 1630544034
}
```
此文檔中的關鍵字段包括:`firstname`、`id` 和 `age`。其餘帶下劃線的字段由 Cosmos DB 自動生成。
#### 使用 Cosmos DB 模擬器探索數據
您可以 [在此處下載並安裝 Windows 版模擬器](https://aka.ms/cosmosdb-emulator)。有關如何在 macOS 和 Linux 上運行模擬器的選項,請參考 [此文檔](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21#run-on-linux-macos)。
模擬器會啟動一個瀏覽器窗口,其中的 Explorer 視圖允許您探索文檔。
![Cosmos DB 模擬器的 Explorer 視圖](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-explorer.png)
如果您正在跟隨教程,請點擊 "Start with Sample" 生成一個名為 SampleDB 的示例數據庫。如果您點擊箭頭展開 SampleDB您會看到一個名為 `Persons` 的容器,容器包含一系列項目,即容器中的文檔。您可以探索 `Items` 下的四個單獨文檔。
![在 Cosmos DB 模擬器中探索示例數據](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons.png)
#### 使用 Cosmos DB 模擬器查詢文檔數據
我們還可以通過點擊 "New SQL Query" 按鈕(左側第二個按鈕)來查詢示例數據。
`SELECT * FROM c` 返回容器中的所有文檔。讓我們添加一個 where 子句,查找年齡小於 40 的人。
`SELECT * FROM c where c.age < 40`
![在 Cosmos DB 模擬器中運行 SELECT 查詢,查找年齡字段值小於 40 的文檔](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons-query.png)
查詢返回了兩個文檔,注意每個文檔的年齡值都小於 40。
#### JSON 與文檔
如果您熟悉 JavaScript Object Notation (JSON),您會注意到文檔看起來與 JSON 類似。此目錄中有一個 `PersonsData.json` 文件,您可以通過模擬器中的 `Upload Item` 按鈕將其上傳到 Persons 容器。
在大多數情況下,返回 JSON 數據的 API 可以直接轉移並存儲到文檔數據庫中。以下是另一個文檔,它表示從 Microsoft Twitter 帳戶檢索的推文,該推文使用 Twitter API 獲取,然後插入到 Cosmos DB 中。
```json
{
"created_at": "2021-08-31T19:03:01.000Z",
"id": "1432780985872142341",
"text": "Blank slate. Like this tweet if youve ever painted in Microsoft Paint before. https://t.co/cFeEs8eOPK",
"_rid": "dhAmAIUsA4oHAAAAAAAAAA==",
"_self": "dbs/dhAmAA==/colls/dhAmAIUsA4o=/docs/dhAmAIUsA4oHAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-9f84-a0958ad901d7\"",
"_attachments": "attachments/",
"_ts": 1630537000
```
此文檔中的關鍵字段包括:`created_at`、`id` 和 `text`
## 🚀 挑戰
目錄中有一個 `TwitterData.json` 文件,您可以將其上傳到 SampleDB 數據庫。建議您將其添加到一個單獨的容器中。這可以通過以下步驟完成:
1. 點擊右上角的 "New Container" 按鈕
1. 選擇現有數據庫 (SampleDB),為容器創建一個容器 ID
1. 將分區鍵設置為 `/id`
1. 點擊 OK您可以忽略此視圖中的其他信息因為這是一個在本地運行的小型數據集
1. 打開您的新容器,並使用 `Upload Item` 按鈕上傳 Twitter Data 文件
嘗試運行一些 SELECT 查詢,查找 text 字段中包含 Microsoft 的文檔。提示:嘗試使用 [LIKE 關鍵字](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/sql-query-keywords#using-like-with-the--wildcard-character)。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/11)
## 回顧與自學
- 此電子表格中添加了一些本課程未涵蓋的額外格式和功能。如果您有興趣了解更多Microsoft 提供了 [大量 Excel 文檔和視頻庫](https://support.microsoft.com/excel)。
- 此架構文檔詳細介紹了不同類型非關聯式數據的特徵:[非關聯式數據和 NoSQL](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data)。
- Cosmos DB 是一個基於雲的非關聯式數據庫,也可以存儲本課程中提到的不同 NoSQL 類型。了解更多這些類型的信息,請參考 [Cosmos DB Microsoft Learn 模塊](https://docs.microsoft.com/en-us/learn/paths/work-with-nosql-data-in-azure-cosmos-db/)。
## 作業
[Soda Profits](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,31 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "f824bfdb8b12d33293913f76f5c787c5",
"translation_date": "2025-08-24T12:19:02+00:00",
"source_file": "2-Working-With-Data/06-non-relational/assignment.md",
"language_code": "hk"
}
-->
# 汽水利潤
## 指引
[Coca Cola Co 試算表](../../../../2-Working-With-Data/06-non-relational/CocaColaCo.xlsx) 缺少了一些計算。你的任務是:
1. 計算 2015、2016、2017 和 2018 財年的毛利潤
- 毛利潤 = 營業收入淨額 - 銷售成本
1. 計算所有毛利潤的平均值。嘗試使用函數來完成。
- 平均值 = 毛利潤總和除以財年數量 (10)
- [AVERAGE 函數](https://support.microsoft.com/en-us/office/average-function-047bac88-d466-426c-a32b-8f33eb960cf6) 的文件
1. 這是一個 Excel 文件,但應該可以在任何試算表平台中編輯
[數據來源感謝 Yiyi Wang](https://www.kaggle.com/yiyiwang0826/cocacola-excel)
## 評分標準
優秀 | 合格 | 需要改進
--- | --- | -- |
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,288 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "116c5d361fbe812e59a73f37ce721d36",
"translation_date": "2025-08-24T12:10:31+00:00",
"source_file": "2-Working-With-Data/07-python/README.md",
"language_code": "hk"
}
-->
# 使用數據Python 和 Pandas 庫
| ![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| 使用 Python - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
[![介紹影片](../../../../2-Working-With-Data/07-python/images/video-ds-python.png)](https://youtu.be/dZjWOGbsN4Y)
雖然數據庫提供了非常高效的方式來存儲數據並使用查詢語言進行查詢,但最靈活的數據處理方式是編寫自己的程序來操作數據。在許多情況下,使用數據庫查詢可能更有效。然而,在某些需要更複雜數據處理的情況下,使用 SQL 可能不容易完成。
數據處理可以用任何編程語言來編寫,但有些語言在處理數據方面更高效。數據科學家通常偏好以下幾種語言:
* **[Python](https://www.python.org/)** 是一種通用編程語言因其簡單易學常被認為是初學者的最佳選擇之一。Python 擁有許多附加庫,可以幫助解決許多實際問題,例如從 ZIP 壓縮檔案中提取數據或將圖片轉換為灰度。此外Python 除了用於數據科學外,還常用於網頁開發。
* **[R](https://www.r-project.org/)** 是一個傳統工具箱專為統計數據處理而設計。它擁有大量的庫CRAN使其成為數據處理的良好選擇。然而R 不是通用編程語言,通常僅用於數據科學領域。
* **[Julia](https://julialang.org/)** 是另一種專為數據科學設計的語言。它旨在提供比 Python 更好的性能,是科學實驗的理想工具。
在本課程中,我們將重點使用 Python 進行簡單的數據處理。我們假設您已對該語言有基本的熟悉。如果您希望深入了解 Python可以參考以下資源
* [用 Turtle Graphics 和 Fractals 趣味學習 Python](https://github.com/shwars/pycourse) - 基於 GitHub 的 Python 快速入門課程
* [從零開始學習 Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum) 上的學習路徑
數據可以有多種形式。在本課程中,我們將探討三種數據形式——**表格數據**、**文本**和**圖片**。
我們將專注於一些數據處理的例子,而不是全面介紹所有相關庫。這樣可以幫助您了解主要概念,並在需要時知道如何尋找解決方案。
> **最有用的建議**:當您需要對數據執行某些操作但不知道如何操作時,嘗試在互聯網上搜索。[Stackoverflow](https://stackoverflow.com/) 通常包含許多針對常見任務的 Python 代碼示例。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/12)
## 表格數據和 Dataframes
當我們討論關係型數據庫時,您已經接觸過表格數據。當您擁有大量數據,並且這些數據存儲在許多不同的關聯表中時,使用 SQL 來處理它們是非常合理的。然而,在許多情況下,我們擁有一個數據表,並希望對這些數據進行一些**理解**或**洞察**,例如分佈情況、值之間的相關性等。在數據科學中,經常需要對原始數據進行一些轉換,然後進行可視化。這兩個步驟都可以輕鬆地使用 Python 完成。
以下是 Python 中處理表格數據最有用的兩個庫:
* **[Pandas](https://pandas.pydata.org/)** 允許您操作所謂的 **Dataframes**,類似於關係型表格。您可以擁有命名的列,並對行、列以及整個 Dataframe 執行各種操作。
* **[Numpy](https://numpy.org/)** 是一個用於處理 **張量**(即多維**數組**)的庫。數組的值具有相同的基礎類型,比 Dataframe 更簡單,但提供了更多的數學操作,並且開銷更少。
此外,還有幾個您應該了解的庫:
* **[Matplotlib](https://matplotlib.org/)** 是一個用於數據可視化和繪製圖表的庫
* **[SciPy](https://www.scipy.org/)** 是一個包含一些額外科學函數的庫。我們在討論概率和統計時已經接觸過該庫
以下是您通常在 Python 程序開頭用於導入這些庫的代碼:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
```
Pandas 的核心概念圍繞幾個基本概念。
### Series
**Series** 是一系列值,類似於列表或 numpy 數組。主要區別在於 Series 還具有**索引**,當我們對 Series 進行操作(例如相加)時,索引會被考慮。索引可以像整數行號一樣簡單(當從列表或數組創建 Series 時,默認使用此索引),也可以具有複雜結構,例如日期區間。
> **注意**:在附帶的筆記本 [`notebook.ipynb`](../../../../2-Working-With-Data/07-python/notebook.ipynb) 中有一些 Pandas 的入門代碼。我們在此僅列出部分示例,您可以查看完整的筆記本。
舉個例子:我們想分析冰淇淋店的銷售情況。讓我們生成一段時間內的銷售數據(每天售出的商品數量):
```python
start_date = "Jan 1, 2020"
end_date = "Mar 31, 2020"
idx = pd.date_range(start_date,end_date)
print(f"Length of index is {len(idx)}")
items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx)
items_sold.plot()
```
![時間序列圖](../../../../2-Working-With-Data/07-python/images/timeseries-1.png)
假設每週我們都會舉辦一次朋友聚會,並額外準備 10 盒冰淇淋。我們可以創建另一個以週為索引的 Series 來展示這一點:
```python
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
```
當我們將兩個 Series 相加時,得到的就是總數:
```python
total_items = items_sold.add(additional_items,fill_value=0)
total_items.plot()
```
![時間序列圖](../../../../2-Working-With-Data/07-python/images/timeseries-2.png)
> **注意** 我們並未使用簡單的語法 `total_items+additional_items`。如果使用該語法,結果 Series 中會有許多 `NaN`*非數值*)值。這是因為 `additional_items` Series 的某些索引點缺少值,而將 `NaN` 與任何值相加都會得到 `NaN`。因此,我們需要在相加時指定 `fill_value` 參數。
使用時間序列,我們還可以**重新採樣**不同的時間間隔。例如,假設我們想計算每月的平均銷售量,可以使用以下代碼:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![每月時間序列平均值](../../../../2-Working-With-Data/07-python/images/timeseries-3.png)
### DataFrame
DataFrame 本質上是具有相同索引的多個 Series 的集合。我們可以將幾個 Series 組合成一個 DataFrame
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
df = pd.DataFrame([a,b])
```
這將創建如下的水平表格:
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| --- | --- | ---- | --- | --- | ------ | --- | ------ | ---- | ---- |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 1 | I | like | to | use | Python | and | Pandas | very | much |
我們還可以使用 Series 作為列,並通過字典指定列名:
```python
df = pd.DataFrame({ 'A' : a, 'B' : b })
```
這將生成如下表格:
| | A | B |
| --- | --- | ------ |
| 0 | 1 | I |
| 1 | 2 | like |
| 2 | 3 | to |
| 3 | 4 | use |
| 4 | 5 | Python |
| 5 | 6 | and |
| 6 | 7 | Pandas |
| 7 | 8 | very |
| 8 | 9 | much |
**注意** 我們也可以通過轉置前面的表格來獲得此表格佈局,例如:
```python
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
```
這裡 `.T` 表示轉置 DataFrame 的操作,即交換行和列,而 `rename` 操作允許我們重命名列以匹配前面的示例。
以下是一些可以對 DataFrame 執行的重要操作:
**列選擇**。我們可以通過 `df['A']` 選擇單個列——此操作返回一個 Series。我們也可以通過 `df[['B','A']]` 選擇列的子集到另一個 DataFrame——此操作返回另一個 DataFrame。
**篩選**符合條件的行。例如,要僅保留列 `A` 大於 5 的行,我們可以寫 `df[df['A']>5]`
> **注意**:篩選的工作方式如下。表達式 `df['A']<5` 返回一個布爾 Series指示原始 Series `df['A']` 中每個元素是否符合條件。當布爾 Series 用作索引時,它返回 DataFrame 中的行子集。因此,不能使用任意的 Python 布爾表達式,例如,寫 `df[df['A']>5 and df['A']<7]` 是錯誤的。相反,您應使用布爾 Series 的特殊 `&` 操作,寫 `df[(df['A']>5) & (df['A']<7)]`*括號很重要*)。
**創建新的可計算列**。我們可以通過直觀的表達式輕鬆為 DataFrame 創建新的可計算列:
```python
df['DivA'] = df['A']-df['A'].mean()
```
此示例計算列 A 與其平均值的偏差。實際上,我們是在計算一個 Series然後將此 Series 分配給左側,創建另一列。因此,我們不能使用與 Series 不兼容的操作,例如,以下代碼是錯誤的:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "Hi"
df['LenB'] = len(df['B']) # <- Wrong result
```
後一個示例雖然語法正確,但結果錯誤,因為它將 Series `B` 的長度分配給列中的所有值,而不是分配給每個元素的長度。
如果需要計算此類複雜表達式,可以使用 `apply` 函數。上述示例可以寫成:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
df['LenB'] = df['B'].apply(len)
```
執行上述操作後,我們將得到以下 DataFrame
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
| 0 | 1 | I | -4.0 | 1 |
| 1 | 2 | like | -3.0 | 4 |
| 2 | 3 | to | -2.0 | 2 |
| 3 | 4 | use | -1.0 | 3 |
| 4 | 5 | Python | 0.0 | 6 |
| 5 | 6 | and | 1.0 | 3 |
| 6 | 7 | Pandas | 2.0 | 6 |
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**基於行號選擇行**可以使用 `iloc` 結構。例如,要選擇 DataFrame 的前 5 行:
```python
df.iloc[:5]
```
**分組**通常用於獲得類似於 Excel 中 *樞紐表* 的結果。假設我們想計算列 `A` 的平均值,按 `LenB` 的不同值分組。那麼我們可以按 `LenB` 分組 DataFrame然後調用 `mean`
```python
df.groupby(by='LenB').mean()
```
如果我們需要計算平均值和組中的元素數量,可以使用更複雜的 `aggregate` 函數:
```python
df.groupby(by='LenB') \
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
```
這將生成以下表格:
| LenB | Count | Mean |
| ---- | ----- | -------- |
| 1 | 1 | 1.000000 |
| 2 | 1 | 3.000000 |
| 3 | 2 | 5.000000 |
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### 獲取數據
我們已經看到如何從 Python 物件中輕鬆構建 Series 和 DataFrame。然而數據通常以文字檔案或 Excel 表格的形式出現。幸運的是Pandas 提供了一種簡單的方法來從磁碟中載入數據。例如,讀取 CSV 檔案就像這樣簡單:
```python
df = pd.read_csv('file.csv')
```
我們會在「挑戰」部分看到更多載入數據的例子,包括從外部網站抓取數據。
### 列印與繪圖
數據科學家經常需要探索數據,因此能夠視覺化數據非常重要。當 DataFrame 很大時,我們通常只想確保我們的操作是正確的,這可以通過列印出前幾行來完成。這可以使用 `df.head()` 方法實現。如果你在 Jupyter Notebook 中執行,它會以漂亮的表格形式顯示 DataFrame。
我們也已經看過使用 `plot` 函數來視覺化某些欄位。雖然 `plot` 對於許多任務非常有用,並且通過 `kind=` 參數支持多種圖表類型,但你也可以使用原生的 `matplotlib` 庫來繪製更複雜的圖表。我們會在單獨的課程中詳細介紹數據視覺化。
這個概述涵蓋了 Pandas 的一些重要概念,但這個庫非常豐富,幾乎沒有你不能用它完成的事情!現在,讓我們應用這些知識來解決具體的問題。
## 🚀 挑戰 1分析 COVID 傳播
我們將專注於的第一個問題是模擬 COVID-19 的疫情傳播。為此,我們將使用由 [約翰霍普金斯大學](https://jhu.edu/) 的 [系統科學與工程中心](https://systems.jhu.edu/) (CSSE) 提供的不同國家感染人數數據。數據集可在 [這個 GitHub 資料庫](https://github.com/CSSEGISandData/COVID-19) 中找到。
由於我們想展示如何處理數據,我們邀請你打開 [`notebook-covidspread.ipynb`](../../../../2-Working-With-Data/07-python/notebook-covidspread.ipynb) 並從頭到尾閱讀。你也可以執行單元格,並完成我們在最後為你留下的一些挑戰。
![COVID 傳播](../../../../2-Working-With-Data/07-python/images/covidspread.png)
> 如果你不知道如何在 Jupyter Notebook 中執行程式碼,可以參考 [這篇文章](https://soshnikov.com/education/how-to-execute-notebooks-from-github/)。
## 處理非結構化數據
雖然數據通常以表格形式出現,但在某些情況下,我們需要處理較少結構化的數據,例如文字或圖片。在這種情況下,要應用我們之前看到的數據處理技術,我們需要以某種方式**提取**結構化數據。以下是一些例子:
* 從文字中提取關鍵字,並查看這些關鍵字出現的頻率
* 使用神經網絡從圖片中提取物件資訊
* 從視頻鏡頭中獲取人們的情緒資訊
## 🚀 挑戰 2分析 COVID 相關論文
在這個挑戰中,我們將繼續探討 COVID 疫情的主題,並專注於處理相關的科學論文。有一個 [CORD-19 數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge),其中包含超過 7000 篇(撰寫時的數量)關於 COVID 的論文,並附有元數據和摘要(其中約一半還提供全文)。
使用 [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) 認知服務分析此數據集的完整範例已在 [這篇部落格文章](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/) 中描述。我們將討論此分析的簡化版本。
> **NOTE**: 我們並未在此資料庫中提供數據集的副本。你可能需要先從 [Kaggle 的這個數據集](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 下載 [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) 檔案。可能需要在 Kaggle 註冊。你也可以從 [這裡](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html) 無需註冊下載數據集,但它將包括所有全文以及元數據檔案。
打開 [`notebook-papers.ipynb`](../../../../2-Working-With-Data/07-python/notebook-papers.ipynb) 並從頭到尾閱讀。你也可以執行單元格,並完成我們在最後為你留下的一些挑戰。
![COVID 醫療處理](../../../../2-Working-With-Data/07-python/images/covidtreat.png)
## 處理圖片數據
最近,已經開發出非常強大的 AI 模型,能夠理解圖片。有許多任務可以使用預訓練的神經網絡或雲端服務解決。一些例子包括:
* **圖片分類**,可以幫助你將圖片分類到預定義的類別中。你可以使用像 [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) 這樣的服務輕鬆訓練自己的圖片分類器。
* **物件檢測**,用於檢測圖片中的不同物件。像 [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) 這樣的服務可以檢測許多常見物件,你也可以訓練 [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) 模型來檢測一些特定的感興趣物件。
* **人臉檢測**,包括年齡、性別和情緒檢測。這可以通過 [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) 完成。
所有這些雲端服務都可以通過 [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum) 調用,因此可以輕鬆地整合到你的數據探索工作流程中。
以下是一些探索圖片數據來源的例子:
* 在部落格文章 [如何在不編碼的情況下學習數據科學](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) 中,我們探索 Instagram 照片,試圖了解什麼使人們對照片按更多讚。我們首先使用 [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) 從圖片中提取盡可能多的資訊,然後使用 [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) 建立可解釋的模型。
* 在 [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) 中,我們使用 [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) 提取活動照片中人們的情緒,試圖了解什麼讓人們感到快樂。
## 結論
無論你已經擁有結構化數據還是非結構化數據,使用 Python 你都可以執行與數據處理和理解相關的所有步驟。這可能是數據處理最靈活的方式,這也是為什麼大多數數據科學家將 Python 作為他們的主要工具。如果你對數據科學之旅是認真的,深入學習 Python 可能是一個好主意!
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/13)
## 回顧與自學
**書籍**
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**線上資源**
* 官方 [10 分鐘學 Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html) 教程
* [Pandas 視覺化文檔](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**學習 Python**
* [用 Turtle Graphics 和分形圖形以有趣的方式學習 Python](https://github.com/shwars/pycourse)
* [在 Microsoft Learn 上開始你的 Python 第一課](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum)
## 作業
[對上述挑戰進行更詳細的數據研究](assignment.md)
## 致謝
這節課由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 編寫。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,35 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "dc8f035ce92e4eaa078ab19caa68267a",
"translation_date": "2025-08-24T12:14:49+00:00",
"source_file": "2-Working-With-Data/07-python/assignment.md",
"language_code": "hk"
}
-->
# 使用 Python 進行數據處理的作業
在這份作業中,我們將要求你詳細說明我們在挑戰中開始開發的代碼。作業分為兩部分:
## COVID-19 傳播建模
- [ ] 在一個圖表中繪製 5-6 個不同國家的 *R* 圖表進行比較,或者使用多個圖表並排展示。
- [ ] 查看死亡人數和康復人數與感染病例數的相關性。
- [ ] 通過視覺化比較感染率和死亡率,找出疾病通常持續的時間,並尋找一些異常情況。你可能需要查看不同國家的數據來得出結論。
- [ ] 計算致死率以及其隨時間的變化。*你可能需要考慮疾病的持續天數,將一個時間序列進行時間偏移後再進行計算。*
## COVID-19 論文分析
- [ ] 構建不同藥物的共現矩陣,查看哪些藥物經常一起出現(即在同一摘要中提到)。你可以修改用於構建藥物和診斷共現矩陣的代碼。
- [ ] 使用熱圖視覺化該矩陣。
- [ ] 作為額外挑戰,使用 [chord diagram](https://en.wikipedia.org/wiki/Chord_diagram) 視覺化藥物的共現情況。[這個庫](https://pypi.org/project/chord/) 可能會幫助你繪製 chord diagram。
- [ ] 作為另一個額外挑戰,使用正則表達式提取不同藥物的劑量(例如 *每天服用 400mg 氯喹* 中的 **400mg**),並構建一個數據框架,顯示不同藥物的不同劑量。**注意**:考慮藥物名稱附近的數值。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
所有任務均完成,並有圖形展示和解釋,包括至少完成一個額外挑戰 | 完成超過 5 項任務,但未嘗試額外挑戰,或結果不夠清晰 | 完成少於 5 項(但超過 3 項)任務,視覺化未能有效展示重點
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,340 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "3ade580a06b5f04d57cc83a768a8fb77",
"translation_date": "2025-08-24T12:05:02+00:00",
"source_file": "2-Working-With-Data/08-data-preparation/README.md",
"language_code": "hk"
}
-->
# 處理數據:數據準備
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/08-DataPreparation.png)|
|:---:|
|數據準備 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/14)
根據數據來源,原始數據可能包含一些不一致性,這些不一致性會在分析和建模過程中帶來挑戰。換句話說,這些數據可以被歸類為「髒數據」,需要進行清理。本課程重點介紹清理和轉換數據的技術,以應對缺失、不準確或不完整的數據挑戰。本課程涵蓋的主題將使用 Python 和 Pandas 庫,並在本目錄中的[筆記本](../../../../2-Working-With-Data/08-data-preparation/notebook.ipynb)中進行演示。
## 清理數據的重要性
- **易於使用和重用**:當數據被正確組織和標準化後,更容易搜索、使用和與他人共享。
- **一致性**:數據科學通常需要處理多個數據集,來自不同來源的數據集需要合併在一起。確保每個單獨的數據集具有共同的標準化,能保證合併後的數據仍然有用。
- **模型準確性**:清理過的數據能提高依賴於它的模型的準確性。
## 常見的清理目標和策略
- **探索數據集**:數據探索(在[後續課程](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/4-Data-Science-Lifecycle/15-analyzing)中會介紹)可以幫助你發現需要清理的數據。通過可視化觀察數據集中的值,可以設置對其餘部分的期望,或者提供解決問題的思路。探索可以包括基本查詢、可視化和抽樣。
- **格式化**:根據來源,數據在呈現方式上可能存在不一致性。這可能導致在搜索和表示值時出現問題,數據雖然在數據集中可見,但在可視化或查詢結果中未正確表示。常見的格式化問題包括解決空白、日期和數據類型。解決格式化問題通常由使用數據的人來完成。例如,不同國家對日期和數字的表示標準可能不同。
- **重複數據**:多次出現的數據可能會產生不準確的結果,通常應該刪除。這在合併兩個或多個數據集時很常見。然而,有些情況下,合併數據集中的重複部分可能包含額外信息,需要保留。
- **缺失數據**:缺失數據可能導致不準確以及結果偏差。有時可以通過重新加載數據、使用 Python 等代碼計算填充缺失值,或者直接刪除缺失值及其相關數據來解決。數據缺失的原因有很多,解決缺失值的行動取決於它們缺失的方式和原因。
## 探索 DataFrame 信息
> **學習目標**:完成本小節後,你應該能夠熟練地查找存儲在 pandas DataFrame 中的數據的一般信息。
當你將數據加載到 pandas 中後,它很可能會以 DataFrame 的形式存在(參考之前的[課程](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python#dataframe)了解詳細概述)。然而,如果你的 DataFrame 中的數據集有 60,000 行和 400 列,你該如何開始了解你正在處理的內容?幸運的是,[pandas](https://pandas.pydata.org/) 提供了一些方便的工具,可以快速查看 DataFrame 的整體信息以及前幾行和後幾行。
為了探索這些功能,我們將導入 Python 的 scikit-learn 庫並使用一個經典數據集:**Iris 數據集**。
```python
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
```
| |sepal length (cm)|sepal width (cm)|petal length (cm)|petal width (cm)|
|----------------------------------------|-----------------|----------------|-----------------|----------------|
|0 |5.1 |3.5 |1.4 |0.2 |
|1 |4.9 |3.0 |1.4 |0.2 |
|2 |4.7 |3.2 |1.3 |0.2 |
|3 |4.6 |3.1 |1.5 |0.2 |
|4 |5.0 |3.6 |1.4 |0.2 |
- **DataFrame.info**:首先,`info()` 方法用於打印 `DataFrame` 中內容的摘要。我們來看看這個數據集:
```python
iris_df.info()
```
```
RangeIndex: 150 entries, 0 to 149
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 sepal length (cm) 150 non-null float64
1 sepal width (cm) 150 non-null float64
2 petal length (cm) 150 non-null float64
3 petal width (cm) 150 non-null float64
dtypes: float64(4)
memory usage: 4.8 KB
```
從中我們知道 *Iris* 數據集有 150 條記錄,分布在四列中,沒有空值。所有數據都存儲為 64 位浮點數。
- **DataFrame.head()**:接下來,為了檢查 `DataFrame` 的實際內容,我們使用 `head()` 方法。讓我們看看 `iris_df` 的前幾行:
```python
iris_df.head()
```
```
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
```
- **DataFrame.tail()**:相反,為了檢查 `DataFrame` 的後幾行,我們使用 `tail()` 方法:
```python
iris_df.tail()
```
```
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8
```
> **重點**:僅僅通過查看 DataFrame 中的信息元數據或前幾行和後幾行的值,你就可以立即了解你正在處理的數據的大小、形狀和內容。
## 處理缺失數據
> **學習目標**:完成本小節後,你應該知道如何替換或刪除 DataFrame 中的空值。
大多數情況下,你想使用(或必須使用)的數據集中都會有缺失值。如何處理缺失數據涉及微妙的權衡,這可能會影響你的最終分析和現實世界的結果。
Pandas 以兩種方式處理缺失值。第一種方式你在之前的部分中已經見過:`NaN`即非數值Not a Number。這實際上是一個特殊值是 IEEE 浮點規範的一部分,僅用於表示缺失的浮點值。
對於浮點數以外的缺失值pandas 使用 Python 的 `None` 對象。雖然你可能會覺得遇到兩種不同的值來表示基本相同的事情有些混亂,但這種設計選擇有其合理的編程原因,實際上,這種方式在大多數情況下提供了一個良好的折衷。不過,`None` 和 `NaN` 都有一些限制,你需要注意它們的使用方式。
在[筆記本](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb)中了解更多關於 `NaN``None` 的信息!
- **檢測空值**:在 `pandas` 中,`isnull()` 和 `notnull()` 方法是檢測空數據的主要方法。兩者都返回布爾掩碼。我們將使用 `numpy` 來處理 `NaN` 值:
```python
import numpy as np
example1 = pd.Series([0, np.nan, '', None])
example1.isnull()
```
```
0 False
1 True
2 False
3 True
dtype: bool
```
仔細查看輸出。有什麼讓你感到驚訝嗎?雖然 `0` 是一個算術空值但它仍然是一個完全有效的整數pandas 將其視為這樣。`''` 更微妙一些。雖然我們在第一部分中使用它來表示空字符串值,但它仍然是一個字符串對象,而不是 pandas 所認為的空值表示。
現在,讓我們反過來以更接近實際使用的方式使用這些方法。你可以直接將布爾掩碼用作 ``Series`` 或 ``DataFrame`` 的索引,這在處理孤立的缺失(或存在)值時非常有用。
> **重點**`isnull()` 和 `notnull()` 方法在 `DataFrame` 中的使用結果相似:它們顯示結果及其索引,這對你處理數據時非常有幫助。
- **刪除空值**除了識別缺失值pandas 還提供了一種方便的方法來刪除 `Series``DataFrame` 中的空值。(特別是在大型數據集上,通常更建議直接刪除分析中的缺失 [NA] 值,而不是以其他方式處理它們。)讓我們回到 `example1`
```python
example1 = example1.dropna()
example1
```
```
0 0
2
dtype: object
```
注意,這應該看起來像你的 `example3[example3.notnull()]` 的輸出。不同之處在於,`dropna` 已經從 `Series` `example1` 中刪除了那些缺失值。
由於 `DataFrame` 是二維的,它提供了更多刪除數據的選項。
```python
example2 = pd.DataFrame([[1, np.nan, 7],
[2, 5, 8],
[np.nan, 6, 9]])
example2
```
| | 0 | 1 | 2 |
|------|---|---|---|
|0 |1.0|NaN|7 |
|1 |2.0|5.0|8 |
|2 |NaN|6.0|9 |
(你是否注意到 pandas 將兩列數據提升為浮點數以容納 `NaN`
你不能從 `DataFrame` 中刪除單個值因此你必須刪除整行或整列。根據你的操作需求你可能需要刪除其中之一pandas 為此提供了選擇。由於在數據科學中,列通常表示變量,行表示觀察值,你更可能刪除數據行;`dropna()` 的默認設置是刪除所有包含任何空值的行:
```python
example2.dropna()
```
```
0 1 2
1 2.0 5.0 8
```
如果需要,你可以刪除列中的 NA 值。使用 `axis=1` 來完成:
```python
example2.dropna(axis='columns')
```
```
2
0 7
1 8
2 9
```
注意,這可能會刪除你可能想保留的大量數據,特別是在較小的數據集中。如果你只想刪除包含幾個或所有空值的行或列怎麼辦?你可以在 `dropna` 中使用 `how``thresh` 參數來指定這些設置。
默認情況下,`how='any'`(如果你想自己檢查或查看該方法的其他參數,可以在代碼單元中運行 `example4.dropna?`)。你也可以選擇指定 `how='all'`,以便僅刪除包含所有空值的行或列。讓我們擴展示例 `DataFrame` 來看看這是如何運作的。
```python
example2[3] = np.nan
example2
```
| |0 |1 |2 |3 |
|------|---|---|---|---|
|0 |1.0|NaN|7 |NaN|
|1 |2.0|5.0|8 |NaN|
|2 |NaN|6.0|9 |NaN|
`thresh` 參數提供了更細粒度的控制:你可以設置行或列需要保留的*非空*值的數量:
```python
example2.dropna(axis='rows', thresh=3)
```
```
0 1 2 3
1 2.0 5.0 8 NaN
```
在這裡,第一行和最後一行被刪除,因為它們只有兩個非空值。
- **填充空值**:根據你的數據集,有時填充空值比刪除它們更合理。你可以使用 `isnull` 來就地完成這項工作但如果你有很多值需要填充這可能會很繁瑣。由於這是數據科學中的常見任務pandas 提供了 `fillna`,它返回一個 `Series``DataFrame` 的副本,其中的缺失值被替換為你選擇的值。讓我們創建另一個示例 `Series` 來看看這在實踐中如何運作。
```python
example3 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
example3
```
```
a 1.0
b NaN
c 2.0
d NaN
e 3.0
dtype: float64
```
你可以用單一值(例如 `0`)填充所有空值:
```python
example3.fillna(0)
```
```
a 1.0
b 0.0
c 2.0
d 0.0
e 3.0
dtype: float64
```
你可以**向前填充**空值,即使用最後一個有效值填充空值:
```python
example3.fillna(method='ffill')
```
```
a 1.0
b 1.0
c 2.0
d 2.0
e 3.0
dtype: float64
```
你也可以**向後填充**,即向後傳播下一個有效值以填充空值:
```python
example3.fillna(method='bfill')
```
```
a 1.0
b 2.0
c 2.0
d 3.0
e 3.0
dtype: float64
```
正如你可能猜到的,這對 `DataFrame` 也同樣有效,但你還可以指定沿著哪個 `axis` 填充空值。再次使用之前的 `example2`
```python
example2.fillna(method='ffill', axis=1)
```
```
0 1 2 3
0 1.0 1.0 7.0 7.0
1 2.0 5.0 8.0 8.0
2 NaN 6.0 9.0 9.0
```
注意,當前一個值不可用進行向前填充時,空值仍然保留。
> **重點提示:** 在處理數據集中缺失值時,有多種方法可供選擇。具體採用哪種策略(刪除、替換,甚至是如何替換)應該根據數據的特性來決定。隨著你處理和分析更多數據集,你將更能掌握如何應對缺失值。
## 刪除重複數據
> **學習目標:** 在本小節結束時,你應該能夠熟練地識別並刪除 DataFrame 中的重複值。
除了缺失數據外,你在現實世界的數據集中還會經常遇到重複數據。幸運的是,`pandas` 提供了一種簡單的方法來檢測和刪除重複條目。
- **識別重複值:`duplicated`**:你可以使用 pandas 中的 `duplicated` 方法輕鬆地找到重複值。該方法返回一個布爾掩碼,指示 `DataFrame` 中某條目是否是之前條目的重複。我們來創建另一個示例 `DataFrame`,看看它是如何運作的。
```python
example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],
'numbers': [1, 2, 1, 3, 3]})
example4
```
| |letters|numbers|
|------|-------|-------|
|0 |A |1 |
|1 |B |2 |
|2 |A |1 |
|3 |B |3 |
|4 |B |3 |
```python
example4.duplicated()
```
```
0 False
1 False
2 True
3 False
4 True
dtype: bool
```
- **刪除重複值:`drop_duplicates`**:該方法返回一個副本,其中所有 `duplicated` 值為 `False` 的數據被保留:
```python
example4.drop_duplicates()
```
```
letters numbers
0 A 1
1 B 2
3 B 3
```
`duplicated``drop_duplicates` 默認會考慮所有列,但你可以指定它們僅檢查 `DataFrame` 中的某些列:
```python
example4.drop_duplicates(['letters'])
```
```
letters numbers
0 A 1
1 B 2
```
> **重點提示:** 刪除重複數據是幾乎每個數據科學項目中的重要步驟。重複數據可能會改變你的分析結果,導致不準確的結論!
## 🚀 挑戰
所有討論的材料都已作為 [Jupyter Notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/2-Working-With-Data/08-data-preparation/notebook.ipynb) 提供。此外,每個部分之後還有練習題,試著完成它們吧!
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/15)
## 回顧與自學
有許多方法可以發現並準備你的數據進行分析和建模,而清理數據是一個需要「親身實踐」的重要步驟。試試 Kaggle 上的這些挑戰,探索本課未涵蓋的技術。
- [數據清理挑戰:解析日期](https://www.kaggle.com/rtatman/data-cleaning-challenge-parsing-dates/)
- [數據清理挑戰:數據縮放與標準化](https://www.kaggle.com/rtatman/data-cleaning-challenge-scale-and-normalize-data)
## 作業
[評估表單中的數據](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,26 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "f9d5a7275e046223fa6474477674b810",
"translation_date": "2025-08-24T12:08:15+00:00",
"source_file": "2-Working-With-Data/08-data-preparation/assignment.md",
"language_code": "hk"
}
-->
# 評估表單數據
一位客戶正在測試一個[小型表單](../../../../2-Working-With-Data/08-data-preparation/index.html),用來收集有關其客戶群的一些基本數據。他們將測試結果交給你,請你驗證他們收集的數據。你可以在瀏覽器中打開 `index.html` 頁面查看該表單。
你已獲得一份[CSV 記錄數據集](../../../../data/form.csv),其中包含來自表單的條目以及一些基本的可視化圖表。客戶指出,其中一些可視化圖表看起來不正確,但他們不確定如何解決這些問題。你可以在[作業筆記本](../../../../2-Working-With-Data/08-data-preparation/assignment.ipynb)中進行探索。
## 指引
使用本課中的技術,對表單提出建議,以確保其能夠收集準確且一致的信息。
## 評分標準
優秀 | 合格 | 需要改進
--- | --- | ---
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,29 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "abc3309ab41bc5a7846f70ee1a055838",
"translation_date": "2025-08-24T11:58:55+00:00",
"source_file": "2-Working-With-Data/README.md",
"language_code": "hk"
}
-->
# 使用數據
![data love](../../../2-Working-With-Data/images/data-love.jpg)
> 圖片由 <a href="https://unsplash.com/@swimstaralex?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexander Sinn</a> 提供,來自 <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
在這些課程中,你將學習如何管理、操作和應用數據。你會了解關係型數據庫和非關係型數據庫,以及數據如何存儲在其中。你將學習使用 Python 管理數據的基礎知識,並探索多種使用 Python 管理和挖掘數據的方法。
### 主題
1. [關係型數據庫](05-relational-databases/README.md)
2. [非關係型數據庫](06-non-relational/README.md)
3. [使用 Python](07-python/README.md)
4. [準備數據](08-data-preparation/README.md)
### 鳴謝
這些課程由 [Christopher Harrison](https://twitter.com/geektrainer)、[Dmitry Soshnikov](https://twitter.com/shwars) 和 [Jasmine Greenaway](https://twitter.com/paladique) 用 ❤️ 編寫。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。

@ -0,0 +1,220 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "43c402d9d90ae6da55d004519ada5033",
"translation_date": "2025-08-24T14:04:59+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/README.md",
"language_code": "hk"
}
-->
# 可視化數量
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記筆記](../../sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| 可視化數量 - _速記筆記由 [@nitya](https://twitter.com/nitya) 繪製_ |
在這節課中,你將探索如何使用眾多可用的 Python 庫之一,學習如何圍繞數量的概念創建有趣的可視化。使用一個關於明尼蘇達州鳥類的清理過的數據集,你可以了解許多關於當地野生動物的有趣事實。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/16)
## 使用 Matplotlib 觀察翼展
[Matplotlib](https://matplotlib.org/stable/index.html) 是一個非常出色的庫,可以用來創建各種簡單和複雜的圖表和圖形。一般來說,使用這些庫繪製數據的過程包括:識別你想要針對的數據框部分,對數據進行必要的轉換,分配其 x 和 y 軸值決定顯示哪種類型的圖表然後顯示圖表。Matplotlib 提供了多種可視化方式,但在這節課中,我們將重點放在最適合可視化數量的圖表上:折線圖、散點圖和柱狀圖。
> ✅ 根據數據的結構和你想要講述的故事,選擇最合適的圖表。
> - 分析時間趨勢:折線圖
> - 比較數值:柱狀圖、條形圖、餅圖、散點圖
> - 顯示部分與整體的關係:餅圖
> - 顯示數據分佈:散點圖、柱狀圖
> - 顯示趨勢:折線圖、條形圖
> - 顯示數值之間的關係:折線圖、散點圖、氣泡圖
如果你有一個數據集,需要了解某個項目的數量,第一步通常是檢查其值。
✅ Matplotlib 有非常好的「速查表」,可以在[這裡](https://matplotlib.org/cheatsheets/cheatsheets.pdf)找到。
## 建立鳥類翼展值的折線圖
打開本課文件夾根目錄中的 `notebook.ipynb` 文件,並添加一個單元格。
> 注意:數據存儲在此倉庫的根目錄 `/data` 文件夾中。
```python
import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
```
這些數據是文本和數字的混合:
| | 名稱 | 學名 | 類別 | 目 | 科 | 屬 | 保育狀況 | 最小長度 | 最大長度 | 最小體重 | 最大體重 | 最小翼展 | 最大翼展 |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | 黑腹樹鴨 | Dendrocygna autumnalis | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | 棕樹鴨 | Dendrocygna bicolor | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | 雪鵝 | Anser caerulescens | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | 羅斯鵝 | Anser rossii | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | 大白額雁 | Anser albifrons | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
讓我們開始使用基本折線圖繪製一些數字數據。假設你想查看這些有趣鳥類的最大翼展。
```python
wingspan = birds['MaxWingspan']
wingspan.plot()
```
![最大翼展](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-02.png)
你立即注意到什麼似乎至少有一個異常值——這是一個相當大的翼展2300 厘米的翼展相當於 23 米——明尼蘇達州有翼龍在飛翔嗎?讓我們調查一下。
雖然你可以在 Excel 中快速排序找到這些異常值(可能是錯誤),但繼續從圖表內部進行可視化處理。
在 x 軸上添加標籤以顯示涉及哪些鳥類:
```
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.xticks(rotation=45)
x = birds['Name']
y = birds['MaxWingspan']
plt.plot(x, y)
plt.show()
```
![帶標籤的翼展](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-labels-02.png)
即使將標籤旋轉設置為 45 度,仍然太多以至於無法閱讀。讓我們嘗試另一種策略:僅標記那些異常值,並在圖表內設置標籤。你可以使用散點圖來為標籤留出更多空間:
```python
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
for i in range(len(birds)):
x = birds['Name'][i]
y = birds['MaxWingspan'][i]
plt.plot(x, y, 'bo')
if birds['MaxWingspan'][i] > 500:
plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12)
plt.show()
```
這裡發生了什麼?你使用 `tick_params` 隱藏底部標籤,然後對你的鳥類數據集進行循環。通過使用 `bo` 繪製帶有小圓形藍點的圖表,你檢查了任何最大翼展超過 500 的鳥類,並在點旁邊顯示其標籤。你在 y 軸上稍微偏移標籤 (`y * (1 - 0.05)`),並使用鳥類名稱作為標籤。
你發現了什麼?
![異常值](../../../../3-Data-Visualization/09-visualization-quantities/images/labeled-wingspan-02.png)
## 篩選數據
禿鷹和草原隼,雖然可能是非常大的鳥類,但似乎被錯誤標記了,其最大翼展多加了一個 `0`。不太可能遇到翼展 25 米的禿鷹,但如果真的遇到,請告訴我們!讓我們創建一個新的數據框,去掉這兩個異常值:
```python
plt.title('Max Wingspan in Centimeters')
plt.ylabel('Wingspan (CM)')
plt.xlabel('Birds')
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
for i in range(len(birds)):
x = birds['Name'][i]
y = birds['MaxWingspan'][i]
if birds['Name'][i] not in ['Bald eagle', 'Prairie falcon']:
plt.plot(x, y, 'bo')
plt.show()
```
通過篩選掉異常值,你的數據現在更加一致且易於理解。
![翼展散點圖](../../../../3-Data-Visualization/09-visualization-quantities/images/scatterplot-wingspan-02.png)
現在我們至少在翼展方面有一個更乾淨的數據集,讓我們了解更多關於這些鳥類的信息。
雖然折線圖和散點圖可以顯示數據值及其分佈的信息,但我們想要思考這個數據集中固有的值。你可以創建可視化來回答以下關於數量的問題:
> 有多少類別的鳥類?它們的數量是多少?
> 有多少鳥類是滅絕、瀕危、稀有或常見的?
> 根據林奈的術語,有多少屬和目?
## 探索柱狀圖
當你需要顯示數據分組時,柱狀圖非常實用。讓我們探索這個數據集中存在的鳥類類別,看看哪一類最常見。
在 notebook 文件中,創建一個基本柱狀圖。
✅ 注意,你可以篩選掉我們在上一節中識別的兩隻異常鳥類,編輯它們的翼展錯誤,或者保留它們,因為這些練習不依賴於翼展值。
如果你想創建柱狀圖,可以選擇你想要關注的數據。柱狀圖可以從原始數據創建:
```python
birds.plot(x='Category',
kind='bar',
stacked=True,
title='Birds of Minnesota')
```
![完整數據柱狀圖](../../../../3-Data-Visualization/09-visualization-quantities/images/full-data-bar-02.png)
然而,這個柱狀圖不可讀,因為有太多未分組的數據。你需要選擇你想要繪製的數據,所以讓我們看看基於鳥類類別的長度。
篩選數據以僅包含鳥類的類別。
✅ 注意,你使用 Pandas 管理數據,然後讓 Matplotlib 繪製圖表。
由於有許多類別,你可以垂直顯示此圖表並調整其高度以容納所有數據:
```python
category_count = birds.value_counts(birds['Category'].values, sort=True)
plt.rcParams['figure.figsize'] = [6, 12]
category_count.plot.barh()
```
![類別和長度](../../../../3-Data-Visualization/09-visualization-quantities/images/category-counts-02.png)
這個柱狀圖很好地顯示了每個類別中鳥類的數量。一眼就能看出,這個地區最多的鳥類屬於鴨/鵝/水禽類別。明尼蘇達州是「萬湖之地」,所以這並不令人驚訝!
✅ 嘗試對此數據集進行其他計數。有什麼讓你感到驚訝嗎?
## 比較數據
你可以通過創建新軸嘗試不同的分組數據比較。嘗試比較基於鳥類類別的最大長度:
```python
maxlength = birds['MaxLength']
plt.barh(y=birds['Category'], width=maxlength)
plt.rcParams['figure.figsize'] = [6, 12]
plt.show()
```
![比較數據](../../../../3-Data-Visualization/09-visualization-quantities/images/category-length-02.png)
這裡沒有什麼令人驚訝的:蜂鳥的最大長度最小,而鵜鶘或鵝的最大長度最大。當數據符合邏輯時,這是件好事!
你可以通過疊加數據創建更有趣的柱狀圖可視化。讓我們疊加最小長度和最大長度在給定鳥類類別上:
```python
minLength = birds['MinLength']
maxLength = birds['MaxLength']
category = birds['Category']
plt.barh(category, maxLength)
plt.barh(category, minLength)
plt.show()
```
在這個圖表中,你可以看到每個鳥類類別的最小長度和最大長度範圍。你可以安全地說,根據這些數據,鳥越大,其長度範圍越大。真是有趣!
![疊加值](../../../../3-Data-Visualization/09-visualization-quantities/images/superimposed-02.png)
## 🚀 挑戰
這個鳥類數據集提供了關於特定生態系統中不同類型鳥類的大量信息。在網上搜索,看看你是否能找到其他與鳥類相關的數據集。練習圍繞這些鳥類構建圖表和圖形,發現你之前未曾意識到的事實。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/17)
## 回顧與自學
這第一節課提供了一些關於如何使用 Matplotlib 可視化數量的信息。進一步研究其他用於數據集可視化的方法。[Plotly](https://github.com/plotly/plotly.py) 是我們不會在這些課程中涵蓋的一個工具,看看它能提供什麼。
## 作業
[折線圖、散點圖和柱狀圖](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "ad163c4fda72c8278280b61cad317ff4",
"translation_date": "2025-08-24T14:07:17+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/assignment.md",
"language_code": "hk"
}
-->
# 折線圖、散點圖和柱狀圖
## 指引
在這節課中,你學習了如何使用折線圖、散點圖和柱狀圖來展示這個數據集中的有趣事實。在這個作業中,深入探索數據集,發掘有關某種鳥類的有趣事實。例如,創建一個筆記本,視覺化所有你能發現的有關雪雁的有趣數據。使用上述三種圖表,在你的筆記本中講述一個故事。
## 評分標準
優秀 | 合格 | 需要改進
--- | --- | -- |
筆記本包含良好的註解、完整的故事敘述以及吸引人的圖表 | 筆記本缺少其中一個元素 | 筆記本缺少其中兩個元素
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,216 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "87faccac113d772551486a67a607153e",
"translation_date": "2025-08-24T13:37:30+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/README.md",
"language_code": "hk"
}
-->
# 可視化分佈
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記筆記](../../sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| 可視化分佈 - _由 [@nitya](https://twitter.com/nitya) 繪製的速記筆記_ |
在上一課中,你學到了一些關於明尼蘇達州鳥類數據集的有趣事實。通過可視化異常值,你發現了一些錯誤的數據,並查看了不同鳥類分類的最大長度差異。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
## 探索鳥類數據集
另一種深入了解數據的方法是查看其分佈,即數據如何沿著某個軸排列。例如,你可能想了解這個數據集中鳥類的最大翼展或最大體重的一般分佈。
讓我們來發現一些關於這個數據集中分佈的事實。在本課文件夾根目錄中的 _notebook.ipynb_ 文件中,導入 Pandas、Matplotlib 和你的數據:
```python
import pandas as pd
import matplotlib.pyplot as plt
birds = pd.read_csv('../../data/birds.csv')
birds.head()
```
| | 名稱 | 學名 | 類別 | 目 | 科 | 屬 | 保育狀況 | 最小長度 | 最大長度 | 最小體重 | 最大體重 | 最小翼展 | 最大翼展 |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | 黑腹樹鴨 | Dendrocygna autumnalis | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | 棕樹鴨 | Dendrocygna bicolor | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | 雪鵝 | Anser caerulescens | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | 羅斯鵝 | Anser rossii | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | 大白額鵝 | Anser albifrons | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
通常,你可以通過使用散點圖快速查看數據的分佈方式,就像我們在上一課中所做的那樣:
```python
birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))
plt.title('Max Length per Order')
plt.ylabel('Order')
plt.xlabel('Max Length')
plt.show()
```
![每個目最大長度](../../../../3-Data-Visualization/10-visualization-distributions/images/scatter-wb.png)
這提供了每個鳥類目身體長度的一般分佈概覽,但這並不是顯示真實分佈的最佳方式。這項任務通常通過創建直方圖來完成。
## 使用直方圖
Matplotlib 提供了非常好的方法來使用直方圖可視化數據分佈。這種類型的圖表類似於柱狀圖,分佈可以通過柱狀的升降來看到。要構建直方圖,你需要數值數據。要構建直方圖,你可以繪製一個圖表,將類型定義為 'hist' 以表示直方圖。此圖表顯示了整個數據集的最大體重分佈。通過將給定的數據數組分成更小的區間,它可以顯示數據值的分佈:
```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()
```
![整個數據集的分佈](../../../../3-Data-Visualization/10-visualization-distributions/images/dist1-wb.png)
如你所見,這個數據集中的 400 多種鳥類大多數的最大體重都在 2000 以下。通過將 `bins` 參數更改為更高的數字,例如 30可以獲得更多洞察
```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
plt.show()
```
![使用更大 bins 參數的分佈](../../../../3-Data-Visualization/10-visualization-distributions/images/dist2-wb.png)
此圖表以更細緻的方式顯示了分佈。通過確保僅選擇給定範圍內的數據,可以創建一個不太偏向左側的圖表:
篩選你的數據以僅獲取體重低於 60 的鳥類,並顯示 40 個 `bins`
```python
filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()
```
![篩選後的直方圖](../../../../3-Data-Visualization/10-visualization-distributions/images/dist3-wb.png)
✅ 嘗試其他篩選器和數據點。要查看數據的完整分佈,移除 `['MaxBodyMass']` 篩選器以顯示標籤分佈。
直方圖還提供了一些不錯的顏色和標籤增強功能可以嘗試:
創建一個 2D 直方圖來比較兩個分佈之間的關係。讓我們比較 `MaxBodyMass``MaxLength`。Matplotlib 提供了一種內置方法來通過更亮的顏色顯示收斂:
```python
x = filteredBirds['MaxBodyMass']
y = filteredBirds['MaxLength']
fig, ax = plt.subplots(tight_layout=True)
hist = ax.hist2d(x, y)
```
似乎這兩個元素沿著預期的軸存在預期的相關性,其中有一個特別強的收斂點:
![2D 圖](../../../../3-Data-Visualization/10-visualization-distributions/images/2D-wb.png)
直方圖默認對數值數據效果很好。如果你需要根據文本數據查看分佈怎麼辦?
## 使用文本數據探索數據集的分佈
此數據集還包括有關鳥類類別及其屬、種、科以及保育狀況的良好信息。讓我們深入了解這些保育信息。根據保育狀況,鳥類的分佈是什麼樣的?
> ✅ 在數據集中,使用了幾個縮寫來描述保育狀況。這些縮寫來自 [IUCN 紅色名錄分類](https://www.iucnredlist.org/),一個記錄物種狀況的組織。
>
> - CR: 極危
> - EN: 瀕危
> - EX: 滅絕
> - LC: 無危
> - NT: 近危
> - VU: 易危
這些是基於文本的值,因此你需要進行轉換以創建直方圖。使用篩選後的鳥類數據框,顯示其保育狀況及其最小翼展。你看到了什麼?
```python
x1 = filteredBirds.loc[filteredBirds.ConservationStatus=='EX', 'MinWingspan']
x2 = filteredBirds.loc[filteredBirds.ConservationStatus=='CR', 'MinWingspan']
x3 = filteredBirds.loc[filteredBirds.ConservationStatus=='EN', 'MinWingspan']
x4 = filteredBirds.loc[filteredBirds.ConservationStatus=='NT', 'MinWingspan']
x5 = filteredBirds.loc[filteredBirds.ConservationStatus=='VU', 'MinWingspan']
x6 = filteredBirds.loc[filteredBirds.ConservationStatus=='LC', 'MinWingspan']
kwargs = dict(alpha=0.5, bins=20)
plt.hist(x1, **kwargs, color='red', label='Extinct')
plt.hist(x2, **kwargs, color='orange', label='Critically Endangered')
plt.hist(x3, **kwargs, color='yellow', label='Endangered')
plt.hist(x4, **kwargs, color='green', label='Near Threatened')
plt.hist(x5, **kwargs, color='blue', label='Vulnerable')
plt.hist(x6, **kwargs, color='gray', label='Least Concern')
plt.gca().set(title='Conservation Status', ylabel='Min Wingspan')
plt.legend();
```
![翼展和保育狀況的對比](../../../../3-Data-Visualization/10-visualization-distributions/images/histogram-conservation-wb.png)
最小翼展和保育狀況之間似乎沒有良好的相關性。使用此方法測試數據集的其他元素。你也可以嘗試不同的篩選器。你是否發現任何相關性?
## 密度圖
你可能已經注意到,我們到目前為止看到的直方圖是“階梯式”的,並沒有平滑地呈弧形。要顯示更平滑的密度圖,你可以嘗試密度圖。
要使用密度圖,請熟悉一個新的繪圖庫 [Seaborn](https://seaborn.pydata.org/generated/seaborn.kdeplot.html)。
加載 Seaborn嘗試一個基本的密度圖
```python
import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()
```
![密度圖](../../../../3-Data-Visualization/10-visualization-distributions/images/density1.png)
你可以看到該圖表反映了之前的最小翼展數據;它只是稍微平滑了一些。根據 Seaborn 的文檔“相對於直方圖KDE 可以生成一個不那麼混亂且更易於解釋的圖表,尤其是在繪製多個分佈時。但如果基礎分佈是有界的或不平滑的,它可能會引入失真。與直方圖一樣,表示的質量也取決於選擇良好的平滑參數。” [來源](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) 換句話說,異常值一如既往地會使你的圖表表現不佳。
如果你想重新訪問第二個圖表中那條鋸齒狀的 MaxBodyMass 線,你可以通過使用此方法非常好地將其平滑化:
```python
sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()
```
![平滑的體重線](../../../../3-Data-Visualization/10-visualization-distributions/images/density2.png)
如果你想要一條平滑但不過於平滑的線,請編輯 `bw_adjust` 參數:
```python
sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()
```
![較少平滑的體重線](../../../../3-Data-Visualization/10-visualization-distributions/images/density3.png)
✅ 閱讀此類圖表可用的參數並進行實驗!
這種類型的圖表提供了非常具有解釋性的可視化。例如,通過幾行代碼,你可以顯示每個鳥類目最大體重的密度:
```python
sns.kdeplot(
data=filteredBirds, x="MaxBodyMass", hue="Order",
fill=True, common_norm=False, palette="crest",
alpha=.5, linewidth=0,
)
```
![每個目體重密度](../../../../3-Data-Visualization/10-visualization-distributions/images/density4.png)
你還可以在一個圖表中映射多個變量的密度。測試鳥類的最大長度和最小長度與其保育狀況的關係:
```python
sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")
```
![多個密度,疊加](../../../../3-Data-Visualization/10-visualization-distributions/images/multi.png)
或許值得研究根據鳥類長度的“易危”群體是否具有意義。
## 🚀 挑戰
直方圖是一種比基本散點圖、柱狀圖或折線圖更複雜的圖表類型。上網搜索直方圖的良好使用示例。它們如何使用,它們展示了什麼,以及它們通常在哪些領域或研究領域中使用?
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)
## 回顧與自學
在本課中,你使用了 Matplotlib 並開始使用 Seaborn 來顯示更複雜的圖表。研究 Seaborn 中的 `kdeplot`,這是一個“在一個或多個維度上的連續概率密度曲線”。閱讀 [文檔](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) 以了解其工作原理。
## 作業
[應用你的技能](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "40eeb9b9f94009c537c7811f9f27f037",
"translation_date": "2025-08-24T13:39:45+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/assignment.md",
"language_code": "hk"
}
-->
# 運用你的技能
## 指引
到目前為止,你已經使用了明尼蘇達州鳥類數據集來探索有關鳥類數量和人口密度的信息。嘗試使用不同的數據集來練習這些技術,或許可以從 [Kaggle](https://www.kaggle.com/) 獲取數據。建立一個筆記本,講述這個數據集的故事,並確保在討論時使用直方圖。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
提供了一個包含有關此數據集的註解包括其來源的筆記本並使用至少5個直方圖來探索數據的事實。 | 提供了一個包含不完整註解或有錯誤的筆記本。 | 提供了一個沒有註解且包含錯誤的筆記本。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,203 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "af6a12015c6e250e500b570a9fa42593",
"translation_date": "2025-08-24T14:08:37+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/README.md",
"language_code": "hk"
}
-->
# 視覺化比例
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記筆記](../../sketchnotes/11-Visualizing-Proportions.png)|
|:---:|
|視覺化比例 - _由 [@nitya](https://twitter.com/nitya) 繪製的速記筆記_ |
在這節課中,你將使用一個以自然為主題的數據集來視覺化比例,例如在一個關於蘑菇的數據集中有多少不同種類的真菌。讓我們使用一個來自 Audubon 的數據集來探索這些迷人的真菌,該數據集列出了 Agaricus 和 Lepiota 家族中 23 種有鰓蘑菇的詳細信息。你將嘗試一些有趣的視覺化方式,例如:
- 餅圖 🥧
- 圓環圖 🍩
- 格子圖 🧇
> 💡 微軟研究的一個非常有趣的項目 [Charticulator](https://charticulator.com) 提供了一個免費的拖放界面來進行數據視覺化。在他們的一個教程中也使用了這個蘑菇數據集!因此,你可以同時探索數據並學習這個庫:[Charticulator 教程](https://charticulator.com/tutorials/tutorial4.html)。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/20)
## 認識你的蘑菇 🍄
蘑菇非常有趣。讓我們導入一個數據集來研究它們:
```python
import pandas as pd
import matplotlib.pyplot as plt
mushrooms = pd.read_csv('../../data/mushrooms.csv')
mushrooms.head()
```
一個表格被打印出來,包含一些很棒的分析數據:
| 類別 | 菌蓋形狀 | 菌蓋表面 | 菌蓋顏色 | 是否有瘀傷 | 氣味 | 鰓附著方式 | 鰓間距 | 鰓大小 | 鰓顏色 | 菌柄形狀 | 菌柄根部 | 菌柄環上表面 | 菌柄環下表面 | 菌柄環上顏色 | 菌柄環下顏色 | 菌幕類型 | 菌幕顏色 | 環數量 | 環類型 | 孢子印顏色 | 分布情況 | 棲息地 |
| --------- | --------- | --------- | --------- | --------- | ------- | --------------- | ------------ | --------- | ---------- | ----------- | ---------- | ------------------------ | ------------------------ | ---------------------- | ---------------------- | --------- | ---------- | ----------- | --------- | ----------------- | ---------- | ------- |
| 有毒 | 凸形 | 光滑 | 棕色 | 有瘀傷 | 刺鼻 | 自由 | 緊密 | 狹窄 | 黑色 | 擴大 | 等長 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 黑色 | 分散 | 城市 |
| 可食用 | 凸形 | 光滑 | 黃色 | 有瘀傷 | 杏仁味 | 自由 | 緊密 | 寬廣 | 黑色 | 擴大 | 棍狀 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 棕色 | 數量多 | 草地 |
| 可食用 | 鐘形 | 光滑 | 白色 | 有瘀傷 | 茴香味 | 自由 | 緊密 | 寬廣 | 棕色 | 擴大 | 棍狀 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 棕色 | 數量多 | 草原 |
| 有毒 | 凸形 | 鱗片狀 | 白色 | 有瘀傷 | 刺鼻 | 自由 | 緊密 | 狹窄 | 棕色 | 擴大 | 等長 | 光滑 | 光滑 | 白色 | 白色 | 部分 | 白色 | 一個 | 垂懸 | 黑色 | 分散 | 城市 |
你會立刻注意到所有的數據都是文本格式。你需要將這些數據轉換才能在圖表中使用。事實上,大部分數據是以對象形式表示的:
```python
print(mushrooms.select_dtypes(["object"]).columns)
```
輸出為:
```output
Index(['class', 'cap-shape', 'cap-surface', 'cap-color', 'bruises', 'odor',
'gill-attachment', 'gill-spacing', 'gill-size', 'gill-color',
'stalk-shape', 'stalk-root', 'stalk-surface-above-ring',
'stalk-surface-below-ring', 'stalk-color-above-ring',
'stalk-color-below-ring', 'veil-type', 'veil-color', 'ring-number',
'ring-type', 'spore-print-color', 'population', 'habitat'],
dtype='object')
```
將這些數據轉換,將 '類別' 列轉換為分類:
```python
cols = mushrooms.select_dtypes(["object"]).columns
mushrooms[cols] = mushrooms[cols].astype('category')
```
```python
edibleclass=mushrooms.groupby(['class']).count()
edibleclass
```
現在,如果你打印出蘑菇數據,你可以看到它已經根據有毒/可食用類別分組:
| | 菌蓋形狀 | 菌蓋表面 | 菌蓋顏色 | 是否有瘀傷 | 氣味 | 鰓附著方式 | 鰓間距 | 鰓大小 | 鰓顏色 | 菌柄形狀 | ... | 菌柄環下表面 | 菌柄環上顏色 | 菌柄環下顏色 | 菌幕類型 | 菌幕顏色 | 環數量 | 環類型 | 孢子印顏色 | 分布情況 | 棲息地 |
| --------- | --------- | --------- | --------- | --------- | ---- | --------------- | ------------ | --------- | ---------- | ----------- | --- | ------------------------ | ---------------------- | ---------------------- | --------- | ---------- | ----------- | --------- | ----------------- | ---------- | ------- |
| 類別 | | | | | | | | | | | | | | | | | | | | | |
| 可食用 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | ... | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 |
| 有毒 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | ... | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 |
如果你按照這個表格中呈現的順序來創建你的類別標籤,你可以製作一個餅圖:
## 餅圖!
```python
labels=['Edible','Poisonous']
plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%')
plt.title('Edible?')
plt.show()
```
完成,一個餅圖展示了根據這兩類蘑菇的數據比例。正確排列標籤的順序非常重要,尤其是在這裡,因此請務必核對標籤數組的順序!
![餅圖](../../../../3-Data-Visualization/11-visualization-proportions/images/pie1-wb.png)
## 圓環圖!
一個更具視覺吸引力的餅圖是圓環圖,它是一個中間有洞的餅圖。讓我們用這種方法來查看數據。
看看蘑菇生長的各種棲息地:
```python
habitat=mushrooms.groupby(['habitat']).count()
habitat
```
在這裡,你將數據按棲息地分組。共有 7 種棲息地,因此使用它們作為圓環圖的標籤:
```python
labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood']
plt.pie(habitat['class'], labels=labels,
autopct='%1.1f%%', pctdistance=0.85)
center_circle = plt.Circle((0, 0), 0.40, fc='white')
fig = plt.gcf()
fig.gca().add_artist(center_circle)
plt.title('Mushroom Habitats')
plt.show()
```
![圓環圖](../../../../3-Data-Visualization/11-visualization-proportions/images/donut-wb.png)
這段代碼繪製了一個圖表和一個中心圓,然後將該中心圓添加到圖表中。通過更改 `0.40` 的值來編輯中心圓的寬度。
圓環圖可以通過多種方式進行調整以更改標籤。特別是標籤可以被突出顯示以提高可讀性。更多信息請參考 [文檔](https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html?highlight=donut)。
現在你知道如何分組數據並將其顯示為餅圖或圓環圖,你可以探索其他類型的圖表。試試格子圖,這是一種不同的方式來探索數量。
## 格子圖!
格子圖是一種以 2D 方塊陣列視覺化數量的方式。試著視覺化這個數據集中蘑菇菌蓋顏色的不同數量。為此,你需要安裝一個名為 [PyWaffle](https://pypi.org/project/pywaffle/) 的輔助庫並使用 Matplotlib
```python
pip install pywaffle
```
選擇一段數據進行分組:
```python
capcolor=mushrooms.groupby(['cap-color']).count()
capcolor
```
通過創建標籤並分組數據來製作格子圖:
```python
import pandas as pd
import matplotlib.pyplot as plt
from pywaffle import Waffle
data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'],
'amount': capcolor['class']
}
df = pd.DataFrame(data)
fig = plt.figure(
FigureClass = Waffle,
rows = 100,
values = df.amount,
labels = list(df.color),
figsize = (30,30),
colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"],
)
```
使用格子圖,你可以清楚地看到這個蘑菇數據集中菌蓋顏色的比例。有趣的是,有很多綠色菌蓋的蘑菇!
![格子圖](../../../../3-Data-Visualization/11-visualization-proportions/images/waffle.png)
✅ PyWaffle 支持在圖表中使用 [Font Awesome](https://fontawesome.com/) 中的任何圖標。嘗試使用圖標代替方塊來創建更有趣的格子圖。
在這節課中,你學到了三種視覺化比例的方法。首先,你需要將數據分組到分類中,然後決定哪種方式最適合展示數據——餅圖、圓環圖或格子圖。這些方法都很有趣,能讓用戶快速了解數據集。
## 🚀 挑戰
試著在 [Charticulator](https://charticulator.com) 中重現這些有趣的圖表。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/21)
## 回顧與自學
有時候,何時使用餅圖、圓環圖或格子圖並不明顯。以下是一些相關文章:
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402
進行一些研究以獲取更多關於這個選擇的資訊。
## 作業
[在 Excel 中試試看](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "1e00fe6a244c2f8f9a794c862661dd4f",
"translation_date": "2025-08-24T14:10:35+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/assignment.md",
"language_code": "hk"
}
-->
# 在 Excel 中試試看
## 指引
你知道嗎?你可以在 Excel 中製作甜甜圈圖、圓餅圖和華夫圖!使用你選擇的數據集,直接在 Excel 試算表中創建這三種圖表。
## 評分標準
| 優秀表現 | 合格表現 | 需要改進的表現 |
| --------------------------------------------------- | --------------------------------------------- | -------------------------------------------------- |
| 提交的 Excel 試算表包含所有三種圖表 | 提交的 Excel 試算表包含其中兩種圖表 | 提交的 Excel 試算表僅包含其中一種圖表 |
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,186 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "cad419b574d5c35eaa417e9abfdcb0c8",
"translation_date": "2025-08-24T13:41:24+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/README.md",
"language_code": "hk"
}
-->
# 視覺化關係:關於蜂蜜 🍯
|![ Sketchnote by [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/12-Visualizing-Relationships.png)|
|:---:|
|視覺化關係 - _Sketchnote by [@nitya](https://twitter.com/nitya)_ |
延續我們研究的自然主題,讓我們探索一些有趣的視覺化方式,展示不同種類蜂蜜之間的關係。這些視覺化基於一個來自[美國農業部](https://www.nass.usda.gov/About_NASS/index.php)的數據集。
這個包含約600項目數據的數據集展示了美國多個州的蜂蜜生產情況。例如您可以查看每個州在1998年至2012年間的蜂群數量、每群產量、總生產量、庫存、每磅價格以及蜂蜜生產的價值每年每州一行數據。
我們可以視覺化某州每年的生產量與該州蜂蜜價格之間的關係。或者您可以視覺化各州每群蜂蜜產量之間的關係。這段時間涵蓋了2006年首次出現的毀滅性“蜂群崩潰症”CCDColony Collapse Disorderhttp://npic.orst.edu/envir/ccd.html因此這是一個值得研究的數據集。🐝
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/22)
在本課中,您可以使用之前使用過的 Seaborn 庫,這是一個很好的工具來視覺化變量之間的關係。特別有趣的是使用 Seaborn 的 `relplot` 函數,它可以快速生成散點圖和折線圖,視覺化“[統計關係](https://seaborn.pydata.org/tutorial/relational.html?highlight=relationships)”,幫助數據科學家更好地理解變量之間的關聯。
## 散點圖
使用散點圖展示蜂蜜價格每年每州的變化。Seaborn 的 `relplot` 可以方便地將州數據分組,並顯示分類數據和數值數據的數據點。
首先,導入數據和 Seaborn
```python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
honey = pd.read_csv('../../data/honey.csv')
honey.head()
```
您會注意到蜂蜜數據中有幾個有趣的列,包括年份和每磅價格。讓我們按美國州分組來探索這些數據:
| 州 | 蜂群數量 | 每群產量 | 總生產量 | 庫存 | 每磅價格 | 生產價值 | 年份 |
| ----- | -------- | -------- | -------- | -------- | ---------- | --------- | ---- |
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
創建一個基本的散點圖,展示蜂蜜每磅價格與其來源州之間的關係。讓 `y` 軸足夠高以顯示所有州:
```python
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
```
![scatterplot 1](../../../../3-Data-Visualization/12-visualization-relationships/images/scatter1.png)
接下來,使用蜂蜜色系展示價格隨年份的變化。您可以通過添加 'hue' 參數來顯示每年的變化:
> ✅ 了解更多關於 [Seaborn 可用的色彩調色板](https://seaborn.pydata.org/tutorial/color_palettes.html) - 試試美麗的彩虹色系!
```python
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
```
![scatterplot 2](../../../../3-Data-Visualization/12-visualization-relationships/images/scatter2.png)
通過這種色彩方案的改變,您可以明顯看到蜂蜜每磅價格隨年份的強烈增長趨勢。事實上,如果您查看數據中的樣本集(例如選擇一個州,亞利桑那州),您可以看到價格逐年上漲的模式,僅有少數例外:
| 州 | 蜂群數量 | 每群產量 | 總生產量 | 庫存 | 每磅價格 | 生產價值 | 年份 |
| ----- | -------- | -------- | -------- | ------- | ---------- | --------- | ---- |
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
另一種視覺化這種增長的方法是使用大小而不是顏色。對於色盲用戶,這可能是一個更好的選擇。編輯您的視覺化,通過點的大小顯示價格的增長:
```python
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
```
您可以看到點的大小逐漸增大。
![scatterplot 3](../../../../3-Data-Visualization/12-visualization-relationships/images/scatter3.png)
這是否是一個簡單的供需問題?由於氣候變化和蜂群崩潰等因素,是否每年可供購買的蜂蜜減少,因此價格上漲?
為了探索數據集中某些變量之間的相關性,讓我們來看看一些折線圖。
## 折線圖
問題:蜂蜜每磅價格是否每年都明顯上漲?您可以通過創建一個單一折線圖來最容易地發現這一點:
```python
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
```
答案是的但在2003年左右有一些例外
![line chart 1](../../../../3-Data-Visualization/12-visualization-relationships/images/line1.png)
✅ 由於 Seaborn 將數據聚合到一條線上它通過繪製均值和均值周圍的95%置信區間來顯示“每個 x 值的多個測量值”。[來源](https://seaborn.pydata.org/tutorial/relational.html)。這種耗時的行為可以通過添加 `ci=None` 禁用。
問題那麼在2003年我們是否也能看到蜂蜜供應的激增如果您查看每年的總生產量呢
```python
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
```
![line chart 2](../../../../3-Data-Visualization/12-visualization-relationships/images/line2.png)
答案:並不完全。如果您查看總生產量,實際上在那一年似乎有所增加,儘管總體而言,蜂蜜的生產量在這些年中呈下降趨勢。
問題在這種情況下2003年蜂蜜價格的激增可能是什麼原因
為了探索這一點,您可以使用 Facet Grid。
## Facet Grids
Facet Grids 將數據集的一個方面(在我們的例子中,您可以選擇“年份”,以避免生成過多的 Facet。Seaborn 可以為您選擇的 x 和 y 坐標的每個 Facet 繪製一個圖表方便比較。2003年是否在這種比較中顯得突出
根據 [Seaborn 的文檔](https://seaborn.pydata.org/generated/seaborn.FacetGrid.html?highlight=facetgrid#seaborn.FacetGrid),繼續使用 `relplot` 創建 Facet Grid。
```python
sns.relplot(
data=honey,
x="yieldpercol", y="numcol",
col="year",
col_wrap=3,
kind="line"
```
在這個視覺化中您可以比較每群產量和蜂群數量每年每州的變化並將列數設置為3
![facet grid](../../../../3-Data-Visualization/12-visualization-relationships/images/facet.png)
對於這個數據集,關於蜂群數量和每群產量每年每州的變化,並沒有特別突出的地方。是否有其他方式可以找到這兩個變量之間的相關性?
## 雙折線圖
嘗試使用多折線圖,通過將兩個折線圖疊加在一起,使用 Seaborn 的 'despine' 移除其上方和右側的框架,並使用 `ax.twinx` [源自 Matplotlib](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.twinx.html)。Twins 允許圖表共享 x 軸並顯示兩個 y 軸。因此,疊加顯示每群產量和蜂群數量:
```python
fig, ax = plt.subplots(figsize=(12,6))
lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey,
label = 'Number of bee colonies', legend=False)
sns.despine()
plt.ylabel('# colonies')
plt.title('Honey Production Year over Year');
ax2 = ax.twinx()
lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r",
label ='Yield per colony', legend=False)
sns.despine(right=False)
plt.ylabel('colony yield')
ax.figure.legend();
```
![superimposed plots](../../../../3-Data-Visualization/12-visualization-relationships/images/dual-line.png)
雖然在2003年沒有明顯的異常但這讓我們可以以一個稍微樂觀的角度結束這節課儘管蜂群數量總體上在下降但蜂群數量正在穩定即使每群產量在減少。
加油,蜜蜂們,加油!
🐝❤️
## 🚀 挑戰
在本課中,您學到了更多關於散點圖和折線圖的其他用途,包括 Facet Grids。挑戰自己使用不同的數據集創建 Facet Grid也許是您之前使用過的數據集。注意它們的生成時間以及如何小心選擇需要繪製的格子數量。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/23)
## 回顧與自學
折線圖可以很簡單,也可以非常複雜。閱讀 [Seaborn 文檔](https://seaborn.pydata.org/generated/seaborn.lineplot.html),了解您可以構建折線圖的各種方式。嘗試使用文檔中列出的其他方法來增強您在本課中構建的折線圖。
## 作業
[深入蜂巢](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "680419753c086eef51be86607c623945",
"translation_date": "2025-08-24T13:43:46+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/assignment.md",
"language_code": "hk"
}
-->
# 探索蜂巢
## 指引
在這節課中,你開始研究一個有關蜜蜂及其蜂蜜生產的數據集,涵蓋了一段時間內蜜蜂群體數量整體下降的情況。深入分析這個數據集,建立一個筆記本,講述蜜蜂群體健康狀況的故事,按州和年份進行分析。你是否在這個數據集中發現了任何有趣的內容?
## 評分標準
| 卓越表現 | 合格表現 | 需要改進 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------- |
| 提供了一個筆記本,並附有至少三個不同的圖表,展示數據集的各個方面,按州和年份進行分析 | 筆記本缺少其中一個元素 | 筆記本缺少其中兩個元素 |
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,180 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "4ec4747a9f4f7d194248ea29903ae165",
"translation_date": "2025-08-24T13:32:40+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/README.md",
"language_code": "hk"
}
-->
# 製作有意義的視覺化圖表
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速寫筆記](../../sketchnotes/13-MeaningfulViz.png)|
|:---:|
| 有意義的視覺化圖表 - _由 [@nitya](https://twitter.com/nitya) 繪製的速寫筆記_ |
> 「如果你對數據折磨得夠久,它會承認任何事情」-- [Ronald Coase](https://en.wikiquote.org/wiki/Ronald_Coase)
作為一名數據科學家,基本技能之一就是能夠創建有意義的數據視覺化,幫助回答你可能有的問題。在進行數據視覺化之前,你需要確保數據已經像之前課程中那樣被清理和準備好。之後,你就可以開始決定如何最好地呈現數據。
在本課中,你將學習:
1. 如何選擇合適的圖表類型
2. 如何避免誤導性的圖表
3. 如何使用顏色
4. 如何設計圖表以提高可讀性
5. 如何構建動畫或3D圖表解決方案
6. 如何創建創意視覺化
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/24)
## 選擇合適的圖表類型
在之前的課程中,你已經嘗試使用 Matplotlib 和 Seaborn 創建各種有趣的數據視覺化。通常,你可以根據這張表格選擇[合適的圖表類型](https://chartio.com/learn/charts/how-to-select-a-data-vizualization/)來回答你的問題:
| 你的需求是: | 你應該使用: |
| -------------------------- | ------------------------------- |
| 展示隨時間變化的數據趨勢 | 折線圖 |
| 比較不同類別 | 柱狀圖、餅圖 |
| 比較總量 | 餅圖、堆疊柱狀圖 |
| 展示關係 | 散點圖、折線圖、分面圖、雙折線圖 |
| 展示分佈 | 散點圖、直方圖、箱型圖 |
| 展示比例 | 餅圖、甜甜圈圖、華夫圖 |
> ✅ 根據數據的組成,你可能需要將其從文本轉換為數字,以支持某些圖表。
## 避免誤導
即使數據科學家謹慎地為正確的數據選擇了合適的圖表,仍然有許多方法可以以某種方式展示數據來證明某個觀點,往往以犧牲數據本身為代價。有許多誤導性圖表和信息圖的例子!
[![Alberto Cairo 的《How Charts Lie》](../../../../3-Data-Visualization/13-meaningful-visualizations/images/tornado.png)](https://www.youtube.com/watch?v=oX74Nge8Wkw "How charts lie")
> 🎥 點擊上方圖片觀看關於誤導性圖表的會議演講
這張圖表反轉了 X 軸,根據日期顯示了與事實相反的內容:
![糟糕的圖表 1](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-1.png)
[這張圖表](https://media.firstcoastnews.com/assets/WTLV/images/170ae16f-4643-438f-b689-50d66ca6a8d8/170ae16f-4643-438f-b689-50d66ca6a8d8_1140x641.jpg) 更具誤導性,因為視覺上吸引人注意的是右側,讓人得出隨時間推移各縣的 COVID 病例數下降的結論。事實上,如果仔細查看日期,你會發現它們被重新排列以製造出誤導性的下降趨勢。
![糟糕的圖表 2](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-2.jpg)
這個臭名昭著的例子使用顏色和反轉的 Y 軸來誤導:與其得出槍支友好立法通過後槍支死亡率激增的結論,事實上視覺上被誤導以為情況正好相反:
![糟糕的圖表 3](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-3.jpg)
這張奇怪的圖表展示了比例如何被操控,效果令人捧腹:
![糟糕的圖表 4](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-4.jpg)
比較不可比的事物是另一種不正當的手段。有一個[精彩的網站](https://tylervigen.com/spurious-correlations)專門展示「虛假的相關性」,顯示像緬因州的離婚率和人造黃油消耗量之間的「事實」相關性。一個 Reddit 群組也收集了[糟糕的數據使用](https://www.reddit.com/r/dataisugly/top/?t=all)。
理解眼睛如何容易被誤導性圖表欺騙是很重要的。即使數據科學家的意圖是好的,選擇糟糕的圖表類型,例如顯示過多類別的餅圖,也可能具有誤導性。
## 顏色
你在上面「佛羅里達槍支暴力」的圖表中看到,顏色可以為圖表提供額外的意義層次,尤其是那些不是使用像 Matplotlib 和 Seaborn 這樣的庫設計的圖表,這些庫自帶各種經過驗證的顏色庫和調色板。如果你是手動製作圖表,可以稍微研究一下[顏色理論](https://colormatters.com/color-and-design/basic-color-theory)。
> ✅ 在設計圖表時,請注意可訪問性是視覺化的一個重要方面。你的部分用戶可能是色盲——你的圖表是否能很好地為視覺障礙用戶顯示?
選擇圖表顏色時要小心,因為顏色可能傳達你未曾意料的含義。上面「身高」圖表中的「粉紅女士」傳達了一種明顯的「女性化」意義,這增加了圖表本身的怪異感。
雖然[顏色的含義](https://colormatters.com/color-symbolism/the-meanings-of-colors)可能因地區而異,並且通常根據其色調而改變。一般來說,顏色的含義包括:
| 顏色 | 含義 |
| ------ | ------------------- |
| 紅色 | 力量 |
| 藍色 | 信任、忠誠 |
| 黃色 | 快樂、警告 |
| 綠色 | 生態、幸運、嫉妒 |
| 紫色 | 快樂 |
| 橙色 | 活力 |
如果你需要使用自定義顏色構建圖表,請確保你的圖表既可訪問又符合你想要傳達的含義。
## 設計圖表以提高可讀性
如果圖表不可讀,它就沒有意義!花點時間考慮設計圖表的寬度和高度,以便與數據良好匹配。如果需要顯示一個變量(例如所有 50 個州),請盡可能在 Y 軸上垂直顯示,以避免水平滾動的圖表。
標記你的軸,必要時提供圖例,並提供工具提示以更好地理解數據。
如果你的數據在 X 軸上是文本且冗長,可以將文本角度調整以提高可讀性。[Matplotlib](https://matplotlib.org/stable/tutorials/toolkits/mplot3d.html) 提供了 3D 繪圖功能,如果你的數據支持它。可以使用 `mpl_toolkits.mplot3d` 創建更高級的數據視覺化。
![3D 圖表](../../../../3-Data-Visualization/13-meaningful-visualizations/images/3d.png)
## 動畫和 3D 圖表顯示
如今一些最好的數據視覺化是動畫化的。Shirley Wu 使用 D3 創建了令人驚嘆的作品,例如「[電影花朵](http://bl.ocks.org/sxywu/raw/d612c6c653fb8b4d7ff3d422be164a5d/)」每朵花都是一部電影的視覺化。另一個為《衛報》創作的例子是「Bussed Out」這是一個結合 Greensock 和 D3 的交互式體驗,並採用滾動敘事文章格式,展示紐約市如何通過將無家可歸者送出城市來處理其無家可歸問題。
![Bussed Out](../../../../3-Data-Visualization/13-meaningful-visualizations/images/busing.png)
> 「Bussed Out: How America Moves its Homeless」來自[衛報](https://www.theguardian.com/us-news/ng-interactive/2017/dec/20/bussed-out-america-moves-homeless-people-country-study)。視覺化由 Nadieh Bremer 和 Shirley Wu 創作
雖然本課不足以深入教授這些強大的視覺化庫,但你可以嘗試在 Vue.js 應用中使用 D3並使用一個庫來顯示《危險關係》這本書的動畫社交網絡視覺化。
> 《危險關係》是一部書信體小說,即以一系列信件形式呈現的小說。由 Choderlos de Laclos 於 1782 年撰寫,講述了 18 世紀晚期法國貴族中兩位主角 Vicomte de Valmont 和 Marquise de Merteuil 的惡毒、道德敗壞的社交手段。兩人最終都遭遇了悲劇,但在此之前造成了大量的社會損害。小說以他們圈子中各種人寫的信件形式展開,信件內容包括復仇計劃或純粹製造麻煩。創建這些信件的視覺化,探索敘事中的主要角色,並以視覺方式呈現。
你將完成一個網頁應用,顯示這個社交網絡的動畫視圖。它使用了一個庫,該庫旨在使用 Vue.js 和 D3 創建[網絡視覺化](https://github.com/emiliorizzo/vue-d3-network)。當應用運行時,你可以在屏幕上拖動節點來重新排列數據。
![危險關係](../../../../3-Data-Visualization/13-meaningful-visualizations/images/liaisons.png)
## 項目:使用 D3.js 構建一個展示網絡的圖表
> 本課文件夾包含一個 `solution` 文件夾,你可以在其中找到完成的項目供參考。
1. 按照起始文件夾根目錄中的 README.md 文件中的指示操作。在安裝項目依賴項之前,確保你的機器上已運行 NPM 和 Node.js。
2. 打開 `starter/src` 文件夾。你會發現一個 `assets` 文件夾,其中有一個 .json 文件包含所有信件的編號以及「to」和「from」的註釋。
3. 完成 `components/Nodes.vue` 中的代碼以啟用視覺化。找到名為 `createLinks()` 的方法,並添加以下嵌套循環。
循環遍歷 .json 對象以捕獲信件的「to」和「from」數據並構建 `links` 對象,以便視覺化庫可以使用它:
```javascript
//loop through letters
let f = 0;
let t = 0;
for (var i = 0; i < letters.length; i++) {
for (var j = 0; j < characters.length; j++) {
if (characters[j] == letters[i].from) {
f = j;
}
if (characters[j] == letters[i].to) {
t = j;
}
}
this.links.push({ sid: f, tid: t });
}
```
從終端運行你的應用npm run serve享受視覺化效果
## 🚀 挑戰
在互聯網上探索誤導性視覺化。作者如何欺騙用戶,這是故意的嗎?嘗試修正這些視覺化,展示它們應該如何呈現。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/25)
## 回顧與自學
以下是一些關於誤導性數據視覺化的文章:
https://gizmodo.com/how-to-lie-with-data-visualization-1563576606
http://ixd.prattsi.org/2017/12/visual-lies-usability-in-deceptive-data-visualizations/
看看這些有趣的歷史資產和文物視覺化:
https://handbook.pubpub.org/
閱讀這篇文章,了解動畫如何增強你的視覺化:
https://medium.com/@EvanSinar/use-animation-to-supercharge-data-visualization-cd905a882ad4
## 作業
[創建你自己的自定義視覺化](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "e56df4c0f49357e30ac8fc77aa439dd4",
"translation_date": "2025-08-24T13:35:00+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/assignment.md",
"language_code": "hk"
}
-->
# 建立你自己的自訂視覺化
## 指引
使用此專案中的程式碼範例來建立一個社交網絡,模擬你自己的社交互動數據。你可以繪製你的社交媒體使用情況,或者製作一個家庭成員的圖表。創建一個有趣的網頁應用程式,展示一個獨特的社交網絡視覺化。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
提供一個 GitHub 儲存庫,包含能正常運行的程式碼(嘗試將其部署為靜態網頁應用程式),並附有註解清晰的 README 文件解釋專案 | 儲存庫無法正常運行或文件記錄不充分 | 儲存庫無法正常運行且文件記錄不充分
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,38 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "5c51a54dd89075a7a362890117b7ed9e",
"translation_date": "2025-08-24T13:36:10+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/solution/README.md",
"language_code": "hk"
}
-->
# 危險關係數據可視化項目
要開始,請確保你的電腦已安裝並運行 NPM 和 Node。安裝依賴項npm install然後在本地運行項目npm run serve
## 項目設置
```
npm install
```
### 編譯並熱加載開發環境
```
npm run serve
```
### 編譯並壓縮生產環境
```
npm run build
```
### 檢查並修復文件
```
npm run lint
```
### 自定義配置
請參閱 [配置參考](https://cli.vuejs.org/config/)。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,38 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "5c51a54dd89075a7a362890117b7ed9e",
"translation_date": "2025-08-24T13:35:36+00:00",
"source_file": "3-Data-Visualization/13-meaningful-visualizations/starter/README.md",
"language_code": "hk"
}
-->
# 危險關係數據可視化項目
開始之前,請確保你的電腦已安裝 NPM 和 Node。安裝依賴項npm install然後在本地運行項目npm run serve
## 項目設置
```
npm install
```
### 編譯並熱重載以進行開發
```
npm run serve
```
### 編譯並壓縮以進行生產環境
```
npm run build
```
### 檢查並修復文件
```
npm run lint
```
### 自定義配置
請參閱 [配置參考](https://cli.vuejs.org/config/)。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋不承擔責任。

@ -0,0 +1,232 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "22acf28f518a4769ea14fa42f4734b9f",
"translation_date": "2025-08-24T13:53:10+00:00",
"source_file": "3-Data-Visualization/R/09-visualization-quantities/README.md",
"language_code": "hk"
}
-->
# 視覺化數量
|![由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的速記筆記](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| 視覺化數量 - _由 [@nitya](https://twitter.com/nitya) 繪製的速記筆記_ |
在這節課中,你將探索如何使用一些 R 套件庫來學習如何圍繞數量概念創建有趣的視覺化。使用一個關於明尼蘇達州鳥類的清理過的數據集,你可以了解許多關於當地野生動物的有趣事實。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/16)
## 使用 ggplot2 觀察翼展
一個非常出色的庫是 [ggplot2](https://cran.r-project.org/web/packages/ggplot2/index.html),它可以用來創建各種簡單和複雜的圖表。一般來說,使用這些庫繪製數據的過程包括:識別你想要處理的數據框部分,對數據進行必要的轉換,分配 x 和 y 軸的值,決定要顯示的圖表類型,然後顯示圖表。
`ggplot2` 是一個基於圖形語法Grammar of Graphics聲明性創建圖形的系統。[圖形語法](https://en.wikipedia.org/wiki/Ggplot2) 是一種數據視覺化的通用方案,它將圖表分解為語義組件,例如比例和層次。換句話說,使用少量代碼即可輕鬆為單變量或多變量數據創建圖表,使得 `ggplot2` 成為 R 中最受歡迎的視覺化套件。使用者告訴 `ggplot2` 如何將變量映射到美學屬性、使用哪些圖形元素,然後 `ggplot2` 負責其餘部分。
> ✅ 圖表 = 數據 + 美學 + 幾何
> - 數據指的是數據集
> - 美學表示要研究的變量x 和 y 變量)
> - 幾何指的是圖表類型(折線圖、柱狀圖等)
根據你的數據和想要通過圖表講述的故事,選擇最合適的幾何(圖表類型)。
> - 分析趨勢:折線圖、柱狀圖
> - 比較數值:條形圖、柱狀圖、餅圖、散點圖
> - 展示部分與整體的關係:餅圖
> - 展示數據分佈:散點圖、柱狀圖
> - 展示數值之間的關係:折線圖、散點圖、氣泡圖
✅ 你也可以查看這份描述性的 [ggplot2 速查表](https://nyu-cdsc.github.io/learningr/assets/data-visualization-2.1.pdf)。
## 建立鳥類翼展值的折線圖
打開 R 控制台並導入數據集。
> 注意:數據集存儲在此倉庫的 `/data` 文件夾中。
讓我們導入數據集並觀察數據的前五行。
```r
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
head(birds)
```
數據的前幾行包含文本和數字的混合:
| | 名稱 | 學名 | 類別 | 目 | 科 | 屬 | 保育狀態 | 最小長度 | 最大長度 | 最小體重 | 最大體重 | 最小翼展 | 最大翼展 |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | 黑腹樹鴨 | Dendrocygna autumnalis | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | 棕樹鴨 | Dendrocygna bicolor | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | 雪鵝 | Anser caerulescens | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | 羅斯鵝 | Anser rossii | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | 大白額雁 | Anser albifrons | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
讓我們開始使用基本折線圖繪製一些數字數據。假設你想查看這些有趣鳥類的最大翼展。
```r
install.packages("ggplot2")
library("ggplot2")
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line()
```
在這裡,你安裝了 `ggplot2` 套件,然後使用 `library("ggplot2")` 命令將其導入工作空間。要在 ggplot 中繪製任何圖表,使用 `ggplot()` 函數並指定數據集、x 和 y 變量作為屬性。在這種情況下,我們使用 `geom_line()` 函數,因為我們的目標是繪製折線圖。
![MaxWingspan-lineplot](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/MaxWingspan-lineplot.png)
你立即注意到什麼似乎至少有一個異常值——那是一個相當大的翼展2000+ 厘米的翼展超過了 20 米——明尼蘇達州有翼龍在飛嗎?讓我們調查一下。
雖然你可以在 Excel 中快速排序以找到這些異常值(可能是輸入錯誤),但繼續在圖表中進行視覺化處理。
為 x 軸添加標籤以顯示涉及哪些鳥類:
```r
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line() +
theme(axis.text.x = element_text(angle = 45, hjust=1))+
xlab("Birds") +
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters")
```
我們在 `theme` 中指定角度,並在 `xlab()``ylab()` 中分別指定 x 和 y 軸標籤。`ggtitle()` 為圖表/圖形命名。
![MaxWingspan-lineplot-improved](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/MaxWingspan-lineplot-improved.png)
即使將標籤旋轉設置為 45 度,仍然太多以至於無法閱讀。讓我們嘗試另一種策略:僅標記那些異常值並在圖表內設置標籤。你可以使用散點圖來為標籤留出更多空間:
```r
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank())
ylab("Wingspan (CM)") +
ggtitle("Max Wingspan in Centimeters") +
```
這裡發生了什麼?你使用 `geom_point()` 函數繪製散點。通過這個,你為 `MaxWingspan > 500` 的鳥類添加了標籤,並隱藏了 x 軸上的標籤以減少圖表的混亂。
你發現了什麼?
![MaxWingspan-scatterplot](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/MaxWingspan-scatterplot.png)
## 篩選數據
禿鷹和草原隼,雖然可能是非常大的鳥類,但似乎被錯誤標記了,最大翼展多了一個零。遇到翼展 25 米的禿鷹的可能性不大,但如果真的遇到,請告訴我們!讓我們創建一個新的數據框,去掉這兩個異常值:
```r
birds_filtered <- subset(birds, MaxWingspan < 500)
ggplot(data=birds_filtered, aes(x=Name, y=MaxWingspan,group=1)) +
geom_point() +
ylab("Wingspan (CM)") +
xlab("Birds") +
ggtitle("Max Wingspan in Centimeters") +
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
theme(axis.text.x=element_blank(), axis.ticks.x=element_blank())
```
我們創建了一個新的數據框 `birds_filtered`,然後繪製了一個散點圖。通過篩選掉異常值,你的數據現在更加一致且易於理解。
![MaxWingspan-scatterplot-improved](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/MaxWingspan-scatterplot-improved.png)
現在我們至少在翼展方面有了一個更乾淨的數據集,讓我們了解更多關於這些鳥類的信息。
雖然折線圖和散點圖可以顯示數據值及其分佈的信息,但我們想要思考這個數據集中固有的數值。你可以創建視覺化來回答以下關於數量的問題:
> 有多少類別的鳥類?它們的數量是多少?
> 有多少鳥類是滅絕、瀕危、稀有或常見的?
> 根據林奈的術語,有多少屬和目?
## 探索條形圖
當你需要展示數據分組時,條形圖非常實用。讓我們探索這個數據集中存在的鳥類類別,看看哪一類最常見。
讓我們在篩選過的數據上創建一個條形圖。
```r
install.packages("dplyr")
install.packages("tidyverse")
library(lubridate)
library(scales)
library(dplyr)
library(ggplot2)
library(tidyverse)
birds_filtered %>% group_by(Category) %>%
summarise(n=n(),
MinLength = mean(MinLength),
MaxLength = mean(MaxLength),
MinBodyMass = mean(MinBodyMass),
MaxBodyMass = mean(MaxBodyMass),
MinWingspan=mean(MinWingspan),
MaxWingspan=mean(MaxWingspan)) %>%
gather("key", "value", - c(Category, n)) %>%
ggplot(aes(x = Category, y = value, group = key, fill = key)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("#D62728", "#FF7F0E", "#8C564B","#2CA02C", "#1F77B4", "#9467BD")) +
xlab("Category")+ggtitle("Birds of Minnesota")
```
在以下代碼片段中,我們安裝了 [dplyr](https://www.rdocumentation.org/packages/dplyr/versions/0.7.8) 和 [lubridate](https://www.rdocumentation.org/packages/lubridate/versions/1.8.0) 套件,以幫助操作和分組數據以繪製堆疊條形圖。首先,你按鳥類的 `Category` 分組數據,然後總結 `MinLength`、`MaxLength`、`MinBodyMass`、`MaxBodyMass`、`MinWingspan`、`MaxWingspan` 列。然後,使用 `ggplot2` 套件繪製條形圖並指定不同類別的顏色和標籤。
![堆疊條形圖](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/stacked-bar-chart.png)
然而,這個條形圖因為數據未分組而難以閱讀。你需要選擇你想要繪製的數據,所以讓我們看看基於鳥類類別的鳥類長度。
篩選數據以僅包含鳥類的類別。
由於有許多類別,你可以垂直顯示此圖表並調整其高度以容納所有數據:
```r
birds_count<-dplyr::count(birds_filtered, Category, sort = TRUE)
birds_count$Category <- factor(birds_count$Category, levels = birds_count$Category)
ggplot(birds_count,aes(Category,n))+geom_bar(stat="identity")+coord_flip()
```
你首先計算 `Category` 列中的唯一值,然後將它們排序到新的數據框 `birds_count` 中。這些排序後的數據在相同層次中進行分級,以便按排序方式繪製。使用 `ggplot2`,你接著繪製數據的條形圖。`coord_flip()` 繪製水平條形圖。
![類別長度](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/category-length.png)
這個條形圖很好地展示了每個類別中鳥類的數量。一眼就能看出,在這個地區,鴨/鵝/水禽類別的鳥類數量最多。明尼蘇達州是“萬湖之地”,所以這並不令人驚訝!
✅ 嘗試在這個數據集上進行其他計數。是否有任何結果令你驚訝?
## 比較數據
你可以通過創建新的軸嘗試不同的分組數據比較。嘗試基於鳥類類別比較鳥類的最大長度:
```r
birds_grouped <- birds_filtered %>%
group_by(Category) %>%
summarise(
MaxLength = max(MaxLength, na.rm = T),
MinLength = max(MinLength, na.rm = T)
) %>%
arrange(Category)
ggplot(birds_grouped,aes(Category,MaxLength))+geom_bar(stat="identity")+coord_flip()
```
我們按 `Category` 分組 `birds_filtered` 數據,然後繪製條形圖。
![比較數據](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/comparingdata.png)
這裡沒有什麼令人驚訝的:蜂鳥的最大長度比鵜鶘或鵝要小得多。當數據符合邏輯時,這是件好事!
你可以通過疊加數據創建更有趣的條形圖。讓我們在給定的鳥類類別上疊加最小和最大長度:
```r
ggplot(data=birds_grouped, aes(x=Category)) +
geom_bar(aes(y=MaxLength), stat="identity", position ="identity", fill='blue') +
geom_bar(aes(y=MinLength), stat="identity", position="identity", fill='orange')+
coord_flip()
```
![疊加數值](../../../../../3-Data-Visualization/R/09-visualization-quantities/images/superimposed-values.png)
## 🚀 挑戰
這個鳥類數據集提供了關於特定生態系統中不同類型鳥類的大量信息。在網上搜索,看看你是否能找到其他與鳥類相關的數據集。練習圍繞這些鳥類構建圖表和圖形,發現你之前未曾意識到的事實。
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/17)
## 回顧與自學
這第一課提供了一些關於如何使用 `ggplot2` 視覺化數量的信息。進一步研究其他方法來處理數據集進行視覺化。研究並尋找可以使用其他套件(如 [Lattice](https://stat.ethz.ch/R-manual/R-devel/library/lattice/html/Lattice.html) 和 [Plotly](https://github.com/plotly/plotly.R#readme))進行視覺化的數據集。
## 作業
[折線圖、散點圖和條形圖](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "0ea21b6513df5ade7419c6b7d65f10b1",
"translation_date": "2025-08-24T13:56:10+00:00",
"source_file": "3-Data-Visualization/R/09-visualization-quantities/assignment.md",
"language_code": "hk"
}
-->
# 線圖、散點圖和柱狀圖
## 指引
在這節課中,你學習了如何使用折線圖、散點圖和柱狀圖來展示這個數據集中的有趣事實。在這次作業中,深入探索數據集,發掘關於某種鳥類的有趣事實。例如,創建一個腳本,視覺化所有你能找到的關於雪雁的有趣數據。使用上述三種圖表,在你的筆記本中講述一個故事。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | -- |
腳本有良好的註解、清晰的故事敘述以及吸引人的圖表 | 腳本缺少其中一個元素 | 腳本缺少其中兩個元素
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,183 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "ea67c0c40808fd723594de6896c37ccf",
"translation_date": "2025-08-24T13:45:05+00:00",
"source_file": "3-Data-Visualization/R/10-visualization-distributions/README.md",
"language_code": "hk"
}
-->
# 可視化分佈
|![ 由 [(@sketchthedocs)](https://sketchthedocs.dev) 繪製的手繪筆記 ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| 可視化分佈 - _手繪筆記由 [@nitya](https://twitter.com/nitya) 繪製_ |
在上一課中,你學習了關於明尼蘇達州鳥類數據集的一些有趣事實。通過可視化異常值,你發現了一些錯誤的數據,並通過最大長度比較了不同鳥類類別之間的差異。
## [課前測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
## 探索鳥類數據集
另一種深入了解數據的方法是查看其分佈,即數據如何沿著某個軸排列。例如,你可能想了解這個數據集中鳥類的最大翼展或最大體重的整體分佈情況。
讓我們來發現一些關於這個數據集中數據分佈的事實。在你的 R 控制台中,導入 `ggplot2` 和數據庫。像上一個主題中一樣,從數據庫中移除異常值。
```r
library(ggplot2)
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
birds_filtered <- subset(birds, MaxWingspan < 500)
head(birds_filtered)
```
| | 名稱 | 學名 | 類別 | 目 | 科 | 屬 | 保育狀況 | 最小長度 | 最大長度 | 最小體重 | 最大體重 | 最小翼展 | 最大翼展 |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 0 | 黑腹樹鴨 | Dendrocygna autumnalis | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
| 1 | 棕樹鴨 | Dendrocygna bicolor | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 樹鴨屬 | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
| 2 | 雪雁 | Anser caerulescens | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
| 3 | 羅斯雁 | Anser rossii | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
| 4 | 大白額雁 | Anser albifrons | 鴨/鵝/水禽 | 雁形目 | 鴨科 | 雁屬 | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
通常,你可以通過像上一課中那樣使用散點圖快速查看數據的分佈方式:
```r
ggplot(data=birds_filtered, aes(x=Order, y=MaxLength,group=1)) +
geom_point() +
ggtitle("Max Length per order") + coord_flip()
```
![每目最大長度](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/max-length-per-order.png)
這提供了每個鳥類目中身體長度的一般分佈概覽,但這並不是顯示真實分佈的最佳方式。這個任務通常通過創建直方圖來完成。
## 使用直方圖
`ggplot2` 提供了非常好的方法來使用直方圖可視化數據分佈。這種類型的圖表類似於條形圖,通過條形的升降可以看到分佈情況。要構建直方圖,你需要數值數據。構建直方圖時,可以將圖表類型定義為 'hist' 來表示直方圖。這個圖表顯示了整個數據集中最大體重的數值範圍的分佈。通過將數據陣列分成更小的區間,它可以顯示數據值的分佈:
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
geom_histogram(bins=10)+ylab('Frequency')
```
![整個數據集的分佈](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/distribution-over-the-entire-dataset.png)
如你所見,這個數據集中大多數的 400 多種鳥類的最大體重都在 2000 以下。通過將 `bins` 參數更改為更高的數字,例如 30可以獲得更多的數據洞察
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')
```
![30個區間的分佈](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/distribution-30bins.png)
這個圖表以更細緻的方式顯示了分佈。通過確保只選擇特定範圍內的數據,可以創建一個不那麼偏向左側的圖表:
篩選數據以僅獲取體重低於 60 的鳥類,並顯示 30 個 `bins`
```r
birds_filtered_1 <- subset(birds_filtered, MaxBodyMass > 1 & MaxBodyMass < 60)
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_histogram(bins=30)+ylab('Frequency')
```
![篩選後的直方圖](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/filtered-histogram.png)
✅ 試試其他篩選條件和數據點。要查看數據的完整分佈,移除 `['MaxBodyMass']` 篩選器以顯示帶標籤的分佈。
直方圖還提供了一些不錯的顏色和標籤增強功能可以嘗試:
創建一個 2D 直方圖來比較兩個分佈之間的關係。我們來比較 `MaxBodyMass``MaxLength`。`ggplot2` 提供了一種內建方式來通過更亮的顏色顯示匯聚點:
```r
ggplot(data=birds_filtered_1, aes(x=MaxBodyMass, y=MaxLength) ) +
geom_bin2d() +scale_fill_continuous(type = "viridis")
```
可以看到這兩個元素沿著預期的軸有一個預期的相關性,其中有一個特別強的匯聚點:
![2D 圖表](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/2d-plot.png)
直方圖對於數值數據默認效果很好。如果你需要根據文本數據查看分佈該怎麼辦?
## 使用文本數據探索數據集的分佈
這個數據集還包括關於鳥類類別、屬、種和科以及其保育狀況的良好信息。我們來深入了解這些保育信息。鳥類根據其保育狀況的分佈是什麼樣的?
> ✅ 在數據集中,使用了一些縮寫來描述保育狀況。這些縮寫來自 [IUCN 紅色名錄分類](https://www.iucnredlist.org/),這是一個記錄物種狀況的組織。
>
> - CR: 極危
> - EN: 瀕危
> - EX: 滅絕
> - LC: 無危
> - NT: 近危
> - VU: 易危
這些是基於文本的值,因此你需要進行轉換來創建直方圖。使用篩選後的 `filteredBirds` 數據框,顯示其保育狀況與最小翼展。你看到了什麼?
```r
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EX'] <- 'x1'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'CR'] <- 'x2'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EN'] <- 'x3'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'NT'] <- 'x4'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'VU'] <- 'x5'
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'LC'] <- 'x6'
ggplot(data=birds_filtered_1, aes(x = MinWingspan, fill = ConservationStatus)) +
geom_histogram(position = "identity", alpha = 0.4, bins = 20) +
scale_fill_manual(name="Conservation Status",values=c("red","green","blue","pink"),labels=c("Endangered","Near Threathened","Vulnerable","Least Concern"))
```
![翼展與保育狀況的對比](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/wingspan-conservation-collation.png)
最小翼展與保育狀況之間似乎沒有明顯的相關性。使用這種方法測試數據集中的其他元素。你也可以嘗試不同的篩選條件。你發現了任何相關性嗎?
## 密度圖
你可能已經注意到,我們目前看到的直方圖是“階梯式”的,並沒有平滑地呈現弧形。要顯示更平滑的密度圖,可以嘗試密度圖。
現在讓我們來使用密度圖!
```r
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
geom_density()
```
![密度圖](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/density-plot.png)
你可以看到這個圖表反映了之前的最小翼展數據,只是稍微平滑了一些。如果你想重新訪問第二個圖表中那條鋸齒狀的最大體重線,可以通過這種方法非常好地將其平滑化:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density()
```
![體重密度](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/bodymass-smooth.png)
如果你想要一條平滑但不過於平滑的線,可以編輯 `adjust` 參數:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density(adjust = 1/5)
```
![較少平滑的體重](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/less-smooth-bodymass.png)
✅ 閱讀此類圖表可用的參數並進行實驗!
這種類型的圖表提供了非常直觀的可視化效果。例如,只需幾行代碼,你就可以顯示每個鳥類目中的最大體重密度:
```r
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
geom_density(alpha=0.5)
```
![每目體重密度](../../../../../3-Data-Visualization/R/10-visualization-distributions/images/bodymass-per-order.png)
## 🚀 挑戰
直方圖是一種比基本散點圖、條形圖或折線圖更高級的圖表類型。在互聯網上搜索一些直方圖的良好使用範例。它們是如何使用的?它們展示了什麼?它們通常在哪些領域或研究領域中使用?
## [課後測驗](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)
## 回顧與自學
在本課中,你使用了 `ggplot2` 並開始製作更高級的圖表。研究一下 `geom_density_2d()`,這是一種“在一個或多個維度上的連續概率密度曲線”。閱讀 [文檔](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) 以了解其工作原理。
## 作業
[應用你的技能](assignment.md)
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始語言的文件應被視為具權威性的來源。對於重要信息,建議使用專業的人類翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。

@ -0,0 +1,23 @@
<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "a233d542512136c4dd29aad38ca0175f",
"translation_date": "2025-08-24T13:47:15+00:00",
"source_file": "3-Data-Visualization/R/10-visualization-distributions/assignment.md",
"language_code": "hk"
}
-->
# 運用你的技能
## 指引
到目前為止,你已經使用了明尼蘇達州鳥類數據集來探索有關鳥類數量和種群密度的信息。嘗試運用這些技術,選擇一個不同的數據集進行練習,或許可以從 [Kaggle](https://www.kaggle.com/) 獲取數據。撰寫一個 R 腳本,講述這個數據集的故事,並確保在討論時使用直方圖。
## 評分標準
卓越 | 合格 | 需要改進
--- | --- | --- |
提供了一個帶有關於數據集(包括來源)註解的腳本,並使用至少 5 個直方圖來發現數據的相關信息。 | 提供了一個帶有不完整註解或存在錯誤的腳本。 | 提供了一個沒有註解且包含錯誤的腳本。
**免責聲明**
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原文文件作為權威來源。如涉及關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或誤釋概不負責。

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save