Cours NSI Terminale - Thème 2.
A partir de maintenant, vous avez les connaissances pour réaliser une application s'appuyant sur une base de données. Il ne reste plus qu'à les appliquer dans le cadre d'un projet ou un mini projet. Un exemple de mini-projet possible dans le domaine du BigData consiste à récupérer des données officielles et à s'aider du langage SQL pour les exploiter.
Une source intéressante pour récupérer des données est data.gouv.fr. Voici un exemple de jeu de données : https://www.data.gouv.fr/fr/datasets/resultats-du-controle-sanitaire-de-leau-distribuee-commune-par-commune/#_
La description de chacun des fichiers se trouve ici : https://static.data.gouv.fr/resources/resultats-du-controle-sanitaire-de-leau-distribuee-commune-par-commune/20190710-030936/20190708-eau-distrib-documentation-v4.pdf
import sqlite3
bdd = sqlite3.connect("dis_db")
curseur = bdd.cursor()
# Creation table Communes
requete = """
CREATE TABLE Communes
(
IdCommune INTEGER PRIMARY KEY,
inseecommune TEXT,
nomcommune TEXT,
quartier TEXT,
cdreseau TEXT,
nomreseau TEXT,
debutalim DATE
);"""
curseur.execute(requete)
# Creation des tables Prelevements et Resultats
# YOUR CODE HERE
raise NotImplementedError()
# On enregistre les changements !
bdd.commit()
# Exemple d'import d'un fichier CSV dans une BDD
import csv
with open('DIS_COM_UDI_2020.txt', newline='') as csvfile:
nb_lignes = 0
lignes = csv.reader(csvfile)
entete = True
for l in lignes:
if entete:
entete = False
else:
nb_lignes += 1
requete = f"""
INSERT INTO Communes
(inseecommune,nomcommune,quartier,cdreseau,nomreseau,debutalim)
VALUES
(?, ?, ?, ?, ?, ?)
"""
curseur.execute(requete, l)
bdd.commit()
print(f"{nb_lignes} enregistrements créés")
# Procédez de même pour le fichier prélèvement
# YOUR CODE HERE
raise NotImplementedError()
curseur.execute("SELECT COUNT(*) FROM Prelevements;")
assert curseur.fetchone()[0] == 126730
# et enfin le fichier Resultat
# YOUR CODE HERE
raise NotImplementedError()
curseur.execute("SELECT COUNT(*) FROM Resultats;")
assert curseur.fetchone()[0] == 3683342
Nous avons à présent une vraie base de données avec de vraies données, en nombre conséquent. Une petite requête sur la table Resultats suffit pour s'en convaincre : Plus de 3 millions et demi d'enregistrements !
une fonction liste_communes prenant en entrée un curseur et un numéro de département et renvoyant la liste des communes dans de département présentes dans la base.
une fonction anomalies() prenant un curseur et un nom de commune et qui renvoie la date et la conclusion du prélévement (champ conclusionprel dans Prelevements dans la commune) et la référence du prélèvement (champ referenceprel dans Prelevements) en cas d'anomalie. Vous repèrerez dans la base la phrase type lorsque tout va bien !
une fonction resultat() prenant en paramètres un curseur et une référence de prélèvement et qui renvoie les résultats détaillés de l'analyse avec les informations suivantes :
# YOUR CODE HERE
raise NotImplementedError()
assert "CAEN" in liste_communes(curseur, 14)
# YOUR CODE HERE
raise NotImplementedError()
anomalies(curseur, "HEROUVILLE-SAINT-CLAIR")
# YOUR CODE HERE
raise NotImplementedError()
resultats(curseur, "01400207768")
Interrogez la base de données pour rechercher des anomalies dans votre commune ou les environs, et récupérez les résultats détaillés des analyses en cas de problème pour identifier la source de l'anomalie.
Au fil de votre parcours de la base, vous pouvez avoir envie de créer d'autres fonctions pour afficher d'autres informations. Ne vous privez pas !!!
# Amusez vous !
liste_communes(curseur,14)
Vous avez les outils à présent pout construire une application graphique (avec TKInter par exemple) ou bien un site web mettant à disposition ces résultats. Cela peut faire l'objet d'un projet.
On n'oublie pas de fermer l'accès à la base de données :)
Vous aurez pu constater au cours de vos requêtes que les réponses de la base de données sont immédiates malgré les millions d'enregistrement que celle-ci contient !!
Voici un petit aperçu de l'utilisation d'une base de donnée dans le monde réel.
bdd.close()