Projet 02 bda m1 sii nosql mongodb 2021 2022 bases de donnée
Télécharger PDFProjet MongoDB et PyMongo : Bases de Données Avancées (M1 SII)
Ce projet s'inscrit dans le cadre du cours de Bases de Données Avancées (BDA) pour les étudiants en M1 SII de la Faculté d'Informatique de l'USTHB. Il vise à approfondir la compréhension et la manipulation des bases de données NoSQL, spécifiquement MongoDB, en utilisant le langage Python et le driver PyMongo.
Le livrable de ce projet, à réaliser en binôme, est composé de deux parties :
- Un rapport détaillé : Ce document doit décrire en détail les réponses aux questions posées, incluant les requêtes MongoDB utilisées, les résultats de leur exécution, et des explications des parties non triviales ou complexes des requêtes.
- Une application Python – PyMongo : Il s'agit d'une implémentation pratique en Python utilisant le driver PyMongo pour interagir avec la base de données MongoDB.
Partie I : Importation des Données World dans MongoDB
Pour ce projet, nous utiliserons un jeu de données nommé world-mongodb.json, qui recense les pays du monde. Afin de pouvoir exploiter ces données, vous devez réaliser les étapes suivantes :
- Téléchargez le fichier
world-mongodb.json. - Créez une base de données nommée "BDD" et une collection nommée "world" dans votre instance MongoDB.
- Importez les données du fichier
world-mongodb.jsondans cette collection. - Vérifiez que l'importation a été effectuée correctement. La collection "world" devrait contenir 239 documents.
Description des Informations Contenues dans les Documents
Chaque document de la collection "world" représente un pays. Il est important de noter que tous les pays n'auront pas forcément tous les champs renseignés. Voici une description des principaux champs :
Code: Code du pays en 3 lettres (par exemple, "DZA").Name: Nom du pays (par exemple, "Algeria").Continent: Continent auquel appartient le pays.Region: Région spécifique au sens d'une partie d'un continent.SurfaceArea: Superficie du pays en unités de mesure appropriées.IndepYear: Année d'indépendance du pays. Si ce champ est absent, cela signifie que le pays est dépendant d'un autre.Population: Population totale du pays.LifeExpectancy: Espérance de vie moyenne dans le pays.GNP: Produit National Brut (PNB) actuel.GNPOld: Ancien Produit National Brut (PNB).LocalName: Nom du pays dans sa langue locale.GovernmentForm: Type de gouvernement.HeadOfState: Nom du chef d'État.Code2: Code du pays en 2 lettres (par exemple, "DZ").Cities: Tableau (ou liste de sous-documents) décrivant les villes du pays connues dans la base de données. Chaque élément contient :Name: Nom de la ville.District: Province ou région administrative de la ville.Population: Population de la ville.Capital: Booléen,truesi la ville est la capitale.
Languages: Tableau (ou liste de sous-documents) décrivant les langues parlées dans le pays. Chaque élément contient :Language: Nom de la langue.IsOfficial: Booléen,truesi la langue est une langue officielle (il peut y en avoir plusieurs).Percentage: Pourcentage des habitants du pays parlant cette langue.
Partie II : MongoDB – PyMongo – Python pour l'Analyse de Données
Cette section du projet vous demande d'utiliser Python et le driver PyMongo pour interagir avec la base de données MongoDB et la collection "world". L'objectif est de réaliser diverses analyses et requêtes complexes sur les données des pays. Il est recommandé d'étudier la spécification des fonctions et la notion de modules en Python pour structurer efficacement votre application.
À l'aide de scripts Python et du driver PyMongo, vous devrez accéder à la base de données MongoDB et à la collection "world" pour répondre aux questions suivantes :
- Déterminer le nombre exact de pays enregistrés dans la collection.
- Lister tous les continents distincts présents dans la base de données.
- Afficher toutes les informations détaillées concernant l'Algérie.
- Lister les pays du continent africain dont la population est inférieure à 100 000 habitants.
- Identifier et lister les pays indépendants situés sur le continent océanique.
- Quel est le plus grand continent en termes de superficie totale ? Le résultat attendu est le nom d'un seul continent.
- Pour chaque continent, fournir le nombre total de pays, la population cumulée et, en bonus, le nombre de pays indépendants.
- Calculer la population totale de toutes les villes répertoriées pour l'Algérie.
- Afficher le nom et la population de la capitale de l'Algérie.
- Quelles sont les langues parlées dans plus de 15 pays différents ?
- Pour les pays ayant au moins 100 villes répertoriées, calculer le nombre de villes par pays et trier ces pays par ordre décroissant du nombre de villes.
- Lister les 10 villes les plus habitées, en incluant le pays auquel elles appartiennent, et les afficher par ordre décroissant de leur population.
- Lister tous les pays pour lesquels l'arabe est désigné comme langue officielle.
- Identifier les 5 pays qui possèdent le plus grand nombre de langues parlées différentes.
- Lister les pays pour lesquels la somme des populations de leurs villes est supérieure à la population totale du pays. Cette requête peut aider à identifier d'éventuelles incohérences dans les données ou des cas particuliers.
Foire Aux Questions (FAQ)
Qu'est-ce que PyMongo et quel est son rôle dans ce projet ?
PyMongo est le driver officiel et recommandé pour interagir avec MongoDB à partir de Python. Dans ce projet, il joue un rôle crucial en permettant à l'application Python de se connecter à la base de données MongoDB, d'exécuter des requêtes (insertion, lecture, mise à jour, suppression) et de manipuler les documents et collections, facilitant ainsi l'analyse des données de pays.
Pourquoi choisir MongoDB, une base de données NoSQL, pour ce type de données ?
MongoDB est une base de données orientée document, très flexible, qui ne nécessite pas de schéma prédéfini rigide. Cela est avantageux pour des données comme celles des pays où les documents peuvent avoir des champs variés et certains champs peuvent être absents (par exemple, IndepYear). Sa capacité à stocker des données hiérarchiques (comme les villes ou les langues à l'intérieur d'un pays) directement dans des documents JSON-like la rend particulièrement adaptée à ce type de modélisation.
Comment gérer l'absence de certains champs, comme IndepYear, lors des requêtes MongoDB ?
Dans MongoDB, l'absence d'un champ est une caractéristique normale des documents. Pour des requêtes spécifiques, on peut utiliser l'opérateur $exists pour vérifier si un champ est présent ou absent (par exemple, { "IndepYear": { "$exists": false } } pour trouver les pays sans année d'indépendance). Alternativement, on peut simplement s'assurer que le code de l'application gère les cas où un champ n'est pas trouvé dans un document, ce qui est une pratique courante avec les bases de données NoSQL.