1 TD 8 : SQL. (correction page??) Abordé lors de cette séance programmation algorithme. SQL index



Documents pareils
TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Le langage SQL Rappels

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Cours 4 : Agrégats et GROUP BY

TD n 10 : Ma première Base de Données

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Présentation Windows Azure Hadoop Big Data - BI

Manuel Viadeis CRM Connecteur intégration L100 étendue.

TD3 - Facturation avec archivage automatisé

Langage SQL : créer et interroger une base

MODE OPERATOIRE OPENOFFICE BASE

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

SQL Historique

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

1. Base de données SQLite

1 Introduction et installation

MAÎTRISE DE L ENVIRONNEMENT WINDOWS VISTA

Thème : Gestion commerciale

Initiation à Excel. Frédéric Gava (MCF)

Utiliser Access ou Excel pour gérer vos données

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

Base de données relationnelle et requêtes SQL

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

Chapitre 3 : outil «Documents»

Paginer les données côté serveur, mettre en cache côté client

Database Manager Guide de l utilisateur DMAN-FR-01/01/12

COMPRENDRE LES DIFFERENTS TYPES DE CONNEXION LORS DE LA

TP Bases de données réparties

SAP BusinessObjects Web Intelligence (WebI) BI 4

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Excel avancé. Frédéric Gava (MCF)

Devoir Data WareHouse

BTS/CGO P10 SYSTEME INFORMATION Année

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Business Intelligence

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

td3a correction session7az

PRÉSENTÉ PAR : NOVEMBRE 2007

Documentation. Manuel Utilisateur. E-Shop

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Initiation à la programmation en Python

Documentation. Manuel Utilisateur. E-Shop

TP2_1 DE BUSINESS INTELLIGENCE ISIMA ZZ3 F3

RACCOURCIS CLAVIERS. DEFINITION : Une «combinaison de touches» est un appui simultané sur plusieurs touches.

Application 1- VBA : Test de comportements d'investissements

Notes de cours : bases de données distribuées et repliquées

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Systèmes de Gestion de Bases de Données

Optimisation SQL. Quelques règles de bases

Les bases fondamentales du langage Transact SQL

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

Cours SQL. Base du langage SQL et des bases de données

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

ORIENTATIONS POUR LA CLASSE DE TROISIÈME

Le Langage SQL version Oracle

S8 - INFORMATIQUE COMMERCIALE

ENVOI EN NOMBRE DE MESSAGES AUDIO

Créer le schéma relationnel d une base de données ACCESS

Convertisseur BBAN/IBAN

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

EXCEL et base de données

Formation Tutorée A Distance (FTAD) en BUREAUTIQUE

2 Serveurs OLAP et introduction au Data Mining

Introduction aux Bases de Données 2004/2005

La Clé informatique. Formation Excel XP Aide-mémoire

EXCEL TUTORIEL 2012/2013

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Tél. : (241) / Fax : (241) eqc@bgfi.com.

1 Modélisation d être mauvais payeur

CORRIGES DES CAS TRANSVERSAUX. Corrigés des cas : Emprunts

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

Microsoft Excel : tables de données

Jean-François Boulicaut & Mohand-Saïd Hacid

Guide de rapports ADT Sélecte

INF 1250 INTRODUCTION AUX BASES DE DONNÉES. Guide d étude

Cours Bases de données 2ème année IUT

INTRODUCTION AU DATA MINING

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Installation de Joomla avec Filezilla

données en connaissance et en actions?

Guide d utilisation commandes des pièces de rechange Rev.1.0.3

Traitement des données avec Microsoft EXCEL 2010

pyensae StockPrices September 1, Manipulation de séries financières avec la classe StockPrices

GUIDE D UTILISATION DU BROWSER DE BEYOND 20/20

SUGARCRM MODULE RAPPORTS

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

TUTORIAL REUTERS. Utilisation de l'utilitaire de recherche Reuters

Programmation Web. Madalina Croitoru IUT Montpellier

Les bases de données

PHP 5. La base de données MySql. A. Belaïd 1

Guide de recherche documentaire à l usage des doctorants. Partie 1 : Exploiter les bases de données académiques

Business Intelligence avec Excel, Power BI et Office 365

SOMMAIRE. Travailler avec les requêtes... 3

Transcription:

1 TD 8 : SQL (correction page??) Abordé lors de cette séance programmation algorithme SQL index Le langage SQL est utilisé pour manipuler des bases de données 1. Pour faire simple, on utilise les bases de données quand on ne peut plus se servir d Excel : le tableau dont on se sert est trop grand (comme trier 50000 lignes) on souhaite faire des opérations sur deux feuilles Excel (associer les lignes de l une avec celles de l autre) Lorsque le volume de données est important, il est impossible de les voir dans leur ensemble. On peut en voir soit une partie soit une aggrégation. Par exemple, la société qui gère les vélib a ouvert l accès à ses données. Il est possible de télécharger aussi souvent qu on veut (toutes les minutes par exemple) un état complet des vélos et places disponibles pour toutes les stations de Paris : c est une table qui s enrichit de 1300 lignes toutes les minutes. Première demi-heure : Récupérer les données et premier SELECT. Ce TD nécessite les données suivantes : from pyensae import download_data download_data("sqlitespy.zip", website = xd ) download_data("td8_velib.zip", website = xd ) # 2 secondes # 22 secondes (~7 Mo) Après l exécution de ce programme, vous devriez voir à côté de votre programme : 1. SQLiteSpy.exe : un programme qui permet d explorer les bases de données SQLite. 2. td8_velib.txt : les données de ce TD. Ensuite, on convertit les données au format texte en base de données au format SQLite : from pyensae import import_flatfile_into_database dbf = "td8_velib.db3" import_flatfile_into_database(dbf, "td8_velib.txt") import_flatfile_into_database(dbf, "stations.txt", table="stations") # 2 secondes # 2 minutes Vous devriez voir un fichier td8_velib.db3 que vous pouvez ouvrir avec SQLiteSpy.exe (voir figure 1). Si ces étapes ne fonctionnent pas, vous pouvez directement obtenir le résultat en exécutant : from pyensae import download_data download_data("td8_velib.db3.zip", website = xd ) # 40 secondes (~12 Mo) Lire une partie des données : 1. voir http://fr.wikipedia.org/wiki/base_de_donn%c3%a9es 1

Figure 1 : Copie d écran du logiciel SQLiteSpy.exe avec les données du TD. -- sélectionner les données sur une plage horaire donnée SELECT * WHERE last_update >= 2013-09-13 10:00:00 AND last_update <= 2013-09-13 11:00:00 -- sélectionner certaines colonnes et ordonner les valeurs SELECT available_bike_stands, available_bikes WHERE last_update >= 2013-09-13 10:00:00 AND last_update <= 2013-09-13 11:00:00 ORDER BY available_bike_stands DESC ; -- compter le nombre d emplacements de chaque station SELECT last_update, available_bike_stands + available_bikes AS place, number WHERE last_update >= 2013-09-13 10:00:00 AND last_update <= 2013-09-13 11:00:00 ORDER BY place DESC ; SELECT, MIN, MAX : -- maximum de vélos disponibles sur toutes la base SELECT MAX(available_bike_stands) -- minimum, maximum de vélos disponibles sur toutes la base SELECT MIN(available_bike_stands) UNION ALL SELECT MAX(available_bike_stands) -- ajouter des informations SELECT "min" AS label, MIN(available_bike_stands) UNION ALL SELECT "max" AS label, MAX(available_bike_stands) SELECT, DISTINCT, COUNT, FROM : -- tous les numéros de stations de façon unique SELECT DISTINCT number -- compter le nombre de stations (1230) 2

SELECT COUNT(*) FROM ( SELECT DISTINCT number ) Exercice 1 1. Déterminer le nombre de valeur distinctes pour la colonne last_update. 2. Déterminer la première et dernière date. Seconde demi-heure : GROUP BY. L instruction GROUPBY permet d aggréger des valeurs (min, max, sum) sur un ensemble de ligne partageant le même ensemble de valeurs (ou clé). SELECT last_update, SUM(available_bikes) AS velo_disponible GROUP BY last_update Le résultat est un tableau avec de petites valeurs au début et de grandes vers la fin. Cela est dû au processus de création de la base de données 2. Il ne faudra considérer que les dates au-delà de 2013-09-10 11 :30 :19. last_update velo_disponible...... 2013-09-10 11:00:19 74 2013-09-10 11:05:19 74 2013-09-10 11:10:19 74 2013-09-10 11:15:19 118 2013-09-10 11:20:19 2495 2013-09-10 11:25:19 8809 2013-09-10 11:30:19 12813 2013-09-10 11:35:19 12817 2013-09-10 11:40:19 12744...... Que fait la requête suivante? Que se passe-t-il si vous enlevez les symboles " " (on décommente la condition WHERE). SELECT last_update, SUM(available_bikes) AS velo_disponible, COUNT(DISTINCT number) AS stations --WHERE last_update >= "2013-09-10 11:30:19" GROUP BY last_update 2. Certaines stations sont hors service et la dernière arrivée ou le dernier départ remonte à plusieurs jours. A chaque fois qu on récupère les données velib, on dispose pour chaque station de la dernière arrivée ou du dernier départ de vélo. Le champ last_update correspond à cette date. 3

Et celle-ci? SELECT last_update, CASE WHEN available_bikes>0 THEN 1 ELSE 0 END AS vide, COUNT(*) AS nb WHERE last_update >= "2013-09-10 11:30:19" GROUP BY last_update, vide Exercice 2 : Pour chaque station, compter le nombre de plages horaires de cinq minutes où il n y a aucun vélo disponible. Exercice 3 : Si on note X(s) le nombre de plages horaires de cinq minutes où il n y a aucun vélo disponible, construire le tableau suivant : k # {s X(s) = k}. Troisième demi-heure : JOIN. L instruction JOIN sert à associer des lignes d une table avec les lignes d une autre table à partir du moment où elles partagent une information commune. SELECT A.*, B.name -- ajout du nom au bout de chaque ligne AS A JOIN stations AS B ON A.number == B.number On peut s en servir pour calculer un ratio en associant les deux instructions GROUP BY et JOIN. L instruction suivante permet d obtenir la distribution des vélos disponibles sur la période d étude pour chaque station. SELECT A.*, 1.0 * A.available_bikes / B.nb_velo AS distribution_temporelle AS A JOIN ( SELECT number, SUM(available_bikes) AS nb_velo WHERE last_update >= "2013-09-10 11:30:19" GROUP BY number ) AS B ON A.number == B.number WHERE A.last_update >= "2013-09-10 11:30:19" Exercice 4 : Pour chaque station, déterminer la distribution du nombre de vélos disponibles pour chaque période horaire d une journée (par station, il y aura donc 24 * 12 valeurs comprises entre 0 et 1.) Le résultat que vous devriez obtenir est illustré par la figure 2. Quatrième demi-heure : Zones de travail et zones de résidences. 4

Figure 2 : Distribution horaire du nombre de vélos pour 4 stations. On souhaite déterminer si une station se situe plutôt dans une zone de travail ou plutôt dans une zone de résidence. On part de l hypothèse que, dans une zone de travail, les gens arrivent en vélib et repartent en vélib. C est sans doute le cas de la station 8003 (voir figure 2). Les vélos seront plutôt disponibles dans la journée. A l opposé, dans une zone de résidence, les vélos seront disponibles plutôt la nuit. Comment faire à partir de la distribution des vélos disponibles construite à la question précédente? On considère que la plage diurne s étend de 10h à 16h. Vous trouverez une illustration du résultat dans cet article http://www.xavierdupre.fr/blog/2013-09-26_nojs.html. Pour aller plus loin ou pour ceux qui ont fini plus tôt. On repart de la requête précédente pour effectuer un JOIN avec la table stations pour récupérer les coordonnées (lat, long). Après un copier/coller dans Excel, on peut situer les zones de travail sur la région parisienne. Remarques. Pour récupérer les données d une base de données de type sqlite3 depuis Python, il suffit d utiliser le module sqlite3 3. Le court exemple suivant permet de récupérer dans Python le résultat d une requête SQL : import sqlite3 conn = sqlite3.connect(dbf) # on ouvre une connexion sur la base de données data = conn.execute("select * FROM stations") #on exécute une requête SQL for d in data : # on affiche le résultat print (d) # conn.close() # on ferme la connexion 3. http://docs.python.org/2/library/sqlite3.html#module-sqlite3 5