<Données en tables - recherche

Connexion élèves

Choisir le(s) module(s) à installer :

Recherche dans des données en tables

Recherche simple

Premières recherches

Une fois les données indexées, il faut les exploiter.
La première exploitation est bien sur la recherche de données. Voici une fonction de recherche de données :

def recherche(donnees,clef_rech,val_rech,clef_aff):
	'''
	donnees : tableau de dictionnaires contenant les données
	clef_rech : clef à laquelle appartient la valeur recherchée  
	val_rech : valeur recherchée
	clef_aff : clef de la valeur que l'on veut afficher 
	'''
	for element in donnees:
		if element[clef_rech] == val_rech:
			return element[clef_aff]		
		
Vous ne voyez peut-être pas la différence entreclef_rech et clef_aff, nous allons donc mener quelques recherches :
  1. Dans le même fichier regroupez la fonction index_dico() et la fonction recherche().
  2. Grâce à la fonction recherche, rechercher :
    1. la monnaie utilisée au Botswana
    2. la superficie de Hong Kong
    3. le code iso de la Micronésie (Micronesia)
    4. le pays dont le code iso est CR
# codez ces questions ici

SOLUTION

quelques drapeaux

Gestion des doublons

La fonction précédente n'est en fait pas très "robuste". Nous allons donc tenter de la mettre en échec :
  1. Rechercher le nom des pays dont la monnaie est l'euro.
  2. Quel problème apparaît ici ?
# codez ces questions ici

SOLUTION


Il va donc falloir gérer les doublons dans nos recherches.
Pour cela nous allons devoir construire un tableau contenant toutes les réponses à une recherche pour regrouper les éventuels doublons.
Une des solutions "élégante" et compacte est d'utiliser la création de tableau par compréhension.
En testant et le code ci-dessous puis en s'en inspirant :

dico=[{'couleur':'rouge','nom':'chaperon'},{'couleur':"bleue",'nom':'Les Schtroumpfs'},{'couleur':'vert','nom':'martien'}]

resultat=[r['nom'] for r in dico if r['couleur']=='vert']

print (resultat)	
		
  1. coder une fonction recherche2(donnees,clef_rech,eletrech,clef_aff)->list: qui renvoie la liste des réponses à la recherche.
    Cette fonction peut s'écrire en une seule ligne !
  2. Tester ensuite cette fonction avec :

print(recherche2(dicoPays,'currency_code','EUR','name'))	
		
# codez ces questions ici

SOLUTION

Recherche par critères

Nous avons, jusque là, effectué des recherches "simples" sur un seul critère.
Dans la pratique les recherches sur les bases de données sont souvent multicritères.
Par exemple :
"Rechercher les pays de la zone euro dont la population est inférieure à 100 000 habitants"
  1. Coder la fonction rechercheA(données) qui renvoie la liste des pays de la zone Euro dont la population est inférieure à 100 000 habitants
  2. Coder la fonction rechercheB(données) qui renvoie le nom des pays dont la monnaie est le Dollar et dont la superficie est supérieure à 9000000 km²
  3. Énoncer en une phrase la recherche effectuée par le code ci-dessous:
    
    [p['name'] for p in dicoPaays if (int(p['population'])<1000 or float(p['area'])>10000000)]
    		
# codez ces questions ici

SOLUTION

Tests de cohérence

Quand on gère une grande quantité de données, la difficulté est de maintenir constamment la cohérence des données.
En effet des erreurs peuvent apparaître lors de la saisie ou de la mise à jour des données.
Pour cela il est nécessaire de faire des tests de cohérence régulièrement sur les données.
La cohérence des données contenues dans une table peut porter sur différents points :
  • Le domaine des données (une surface est un nombre, le code du pays est formé de deux lettres majuscules...)
  • Le contenu des données (deux pays ne peuvent pas avoir le même code, le code du continent est forcément pris dans la liste ('AF', 'AS', 'EU', 'NA', 'OC', 'SA') ...)
Les données contenues dans le fichier dont vous disposez comportent deux erreurs de cohérence. Vous devez :
  1. Coder une fonction coherenceA(donnees) permettant de détecter une incohérence de domaine sur le champ capital qui doit contenir le code de la ville capitale du pays concerné.
  2. Coder une fonction coherenceB(donnees) permettant de de détecter une incohérence de contenu sur le champ continent.
# codez ces questions ici

SOLUTION