Mini-projet bases de données / Perl - go: dept
Transcription
Mini-projet bases de données / Perl - go: dept
Mini-projet bases de données / Perl M1 Bioinformatique 1 Présentation du sujet L’objectif de ce mini-projet est de récupérer des données dans un certain format, de les insérer dans une base de données relationnelles puis d’interroger cette base afin de construire plusieurs tableaux récapitulatifs. Ce travail utilisera la base de données 2014 des communes, départements et régions Françaises qui est disponible sur le site de l’INSEE (http://www.insee.fr/fr/methodes/ nomenclatures/cog/telechargement.asp). Nous utiliserons les fichiers au format DBF. Les données sont structurées de la façon suivante : la France est découpée en régions, qui sont découpées en départements (qui sont eux même découpés en arrondissement, et enfin les arrondissement sont découpés en cantons). Chaque entité (région et département) possède un nom unique et un chef-lieu qui est une commune. Dans la base de données à créer, une commune n’appartient qu’à un seul département. En suivant la hiérarchie région-département, on doit être capable de retrouver facilement la région d’appartenance d’une commune. A ces données, nous ajouterons des statistiques sur les équipements et services des communes pour l’enseignement supérieur en 2013. Il faut télécharger la base au niveau communal et arrondissement municipal au format XLS zippé depuis http://www.insee.fr/fr/themes/detail.asp?reg_id=99&ref_ id=equip-serv-ens-sup-form-serv. Nous utiliserons uniquement la feuille de calcul nommée ’COM’. 2 Travail à faire 2.1 Construction de la base de données relationnelles — A partir de la description donnée ci-dessus, vous devez modéliser une base de données en troisième forme normale avec un maximum de contraintes d’intégrité. Vous devez rédiger un document qui présente un modèle entités-associations et un modèle relationnel qui décrivent votre base de données le plus précisément possible. — Une fois la base de données modélisées, vous devez l’implémenter dans le serveur PostgreSQL. 1 — A l’aide d’un ou plusieurs scripts PERL, vous devez remplir automatiquement la base de données à partir des fichiers téléchargés sur le site de l’INSEE. 2.2 Exploitation de la base de données A partir de la base de données, l’objectif est de construire un rapport de synthèse (par exemple sous la forme de tableaux) en HTML (vous pouvez faire plusieurs fichiers). Ce rapport est constitué d’une partie générale et d’une partie détaillée en fonction d’une liste d’éléments passée en paramètre au script Perl de construction du fichier HTML. Tous les opérateurs mathématiques nécessaires sont déjà implémentés dans la base de données PostgreSQL. Dans la partie générale, il faudra pouvoir naviguer dans une arborescence qui montre pour chaque région, la liste de ses départements. A côté du nom de chaque entité (région ou département) devra apparaître : — Le nom de son chef lieu — Le nombre de communes de cette entitée — la population en 2009 — Le nombre d’instituts universitaires, d’unité de formation et de recherche (UFR), d’écoles d’ingénieurs, de résidences universitaires et de restaurants universitaires. Des statistiques nationales devront aussi être calculées : — Région/département avec le plus/le moins d’instituts universitaires, d’UFR, d’écoles d’ingénieurs, de résidences universitaires et de restaurants universitaires — Nombre moyen et écart-type du nombre d’instituts universitaires, d’UFR, d’écoles d’ingénieurs, de résidences universitaires et de restaurants universitaires pour chaque région et département — Indiquer si il y a une corrélation linéaire entre le nombre d’UFR et le nombre de restaurants universitaires (idem avec les résidences universitaires) au niveau national et pour chaque région. Les informations pour la partie détaillée seront passées en paramètre au script Perl sous la forme d’un fichier structuré entite:nom. Le fichier comportera un couple d’éléments par ligne. Un exemple pourrait être (les majuscules et minuscules ne sont pas forcément respectées) : commune:bordeaux region:aquitaine departement:aveyron Selon le type d’entité géographique, il faudra construire un tableau récapitulatif de toutes les informations disponibles : — pour une région : chef-lieu, nombre de départements, répartition en pourcentage dans chaque département des instituts universitaires, unité de formation et de recherche (UFR), écoles d’ingénieurs, résidences universitaires et restaurants universitaires. 2 — pour un département : chef-lieu, région d’appartenance, nombre d’instituts universitaires, d’unité de formation et de recherche (UFR), d’écoles d’ingénieurs, de résidences universitaires et de restaurants universitaires. — pour une commune : région, département, nombre d’instituts universitaires, d’unité de formation et de recherche (UFR), d’écoles d’ingénieurs, de résidences universitaires et de restaurants universitaires. Annexes A Ajout et compilation d’un module Perl externe (sans avoir les droits root) Si un module n’est pas installé, Perl dispose d’un module spécifique qui est une interface sur la base de données CPAN (voir http://www.cpan.org). Cette interface est appelée avec la ligne de commande suivante : perl -MCPAN -e shell. Une fois configurée, il faut redéfinir quelques variables afin de pouvoir installer les modules convenablement. Avec la commande o conf (l’aide est accessible avec ? ), il faut définir make_install_arg à INSTALLMAN3DIR=/net/cremi/votre_username/perl/man3/ et makepl_arg à PREFIX=/net/cremi/votre_username/perl/lib Donc pour changer makepl_arg, il faudra utiliser : o conf makepl_arg ’PREFIX=/net/cremi/votre_username/perl/lib’ Ensuite, comme le précise la commande, n’oubliez pas de taper o conf commit pour enregistrer vos modifications de façon permanente. Si l’installation d’un module échoue car il manque certaines dépendances, il faudra définir avant le lancement de CPAN la variable d’environnement PERL5LIB afin d’indiquer à Perl où se trouve les modules à charger (5.14.2 est la version courante de Perl. A vérifier avec perl -v). En effet, les dépendances seront installées dans le même répertoire que les modules supplémentaires sachant que ce répertoire ne fait pas partie des chemins de recherche de perl par défaut. export PERL5LIB=\ /net/cremi/votre_username/perl/lib/share/perl/5.14.2/\ :$PERL5LIB N’oubliez pas de remplacer “votre_username” par votre nom d’utilisateur. Avant de pouvoir utiliser les nouveaux modules, il faut indiquer à l’interpréteur Perl où les trouver. Vous pouvez soit utiliser la variable PERL5LIB définie précédemment (et ne pas oublier de modifier les scripts de lancement de votre interpréteur de commande pour éviter d’avoir à tout retaper à chaque fois) ou utiliser le pragma “lib” ajouté au début de vos scripts : 3 #! /usr/bin/perl use strict; use warnings; use lib "/net/cremi/votre_username/perl/lib/share/perl/5.14.2/”; ... B Structure d’un fichier DBF Un fichier DBF (DBASE) peut-être vu comme une relation dans un modèle relationnel. Ce fichier peut être lu par tout tableur digne de ce nom. La première ligne de chaque colonne est toujours au format nom, type, longueur : le champ nom indique le nom de l’attribut, le type indique le type de données de la colonne (par ex. c pour un caractère) et la longueur donne la taille maximale du champ. Par exemple, une colonne d’en-tête VILLE, c, 70 représente un attribut qui s’appelle VILLE de type caractère et de longueur maximale 70. C Lecture des fichiers DBF et XLS avec Perl Plusieurs moyens sont disponibles pour lire des fichiers DBF et XLS. Nous utiliserons le pilote DBD::XBase du module DBI qui permet d’utiliser les fichiers DBF comme une base de données. Chaque fichier DBF est ainsi vu comme une table. L’interrogation des fichiers s’effectue à l’aide du langage SQL. Pour les fichier XLS, nous utiliserons Spreadsheet::ParseExcel. D Utilisation des modules Perl Pour chaque module décrit ici, il existe beaucoup de documentations plus ou moins obsolètes sur Internet. N’oubliez pas que “Google” est votre ami ! D.1 Utilisation basique du pilote DBD::XBase #!/usr/bin/perl use strict; use DBI; my $dbh = DBI->connect("DBI:XBase:.") or die $DBI::errstr; my $sth = $dbh->prepare("select NCC from reg2011") or die $dbh->errstr(); $sth->execute() or die $sth->errstr(); while (my @data = $sth->fetchrow_array()) { print "$data[0]\n"; } 4 $sth->finish(); Chaque fichier DBF situé dans le répertoire courant (le point après DBI:XBase:) est considéré comme une table (ne pas mettre l’extension .dbf). D.2 Utilisation basique du pilote DBD::Pg Soit une relation test(a, b) où a et b sont des entiers. #!/usr/bin/perl use strict; use DBI; # connect my $dbh = DBI->connect("DBI:Pg: dbname=bpinaud;host=dbserver", "bpinaud", "", {’RaiseError’ => 1}); # execute INSERT query my $rows = $dbh->do("INSERT INTO test VALUES (5,3)"); print "$rows row(s) affected\n"; # execute SELECT query my $sth = $dbh->prepare("SELECT * FROM test"); my $num = $sth->execute(); print “query returned $num rows\n”; # iterate through resultset while(my $ref = $sth->fetchrow_hashref()) { print "$ref->{’a’} $ref->{’b’}\n"; } $sth->finish; $dbh->disconnect(); D.3 Utilisation basique du module Spreadsheet::ParseExcel #!/usr/bin/perl use strict; use warnings; use Spreadsheet::ParseExcel; my $parser = Spreadsheet::ParseExcel->new(); #may take some time my $workbook = $parser->parse(’equip-serv-ens-sup-form-serv-com-11.xls’); if ( !defined $workbook ) { die $parser->error(), ".\n"; } my $worksheet; foreach ( $workbook->worksheets() ) { 5 $worksheet = $_; last if $_->get_name() eq ’COM’; } my ( $row_min, $row_max ) = $worksheet->row_range(); my ( $col_min, $col_max ) = $worksheet->col_range(); for my $row ( 6 .. $row_max ) { for my $col ( $col_min .. $col_max ) { my $cell = $worksheet->get_cell( $row, $col ); next unless $cell; print "Row, Col = ($row, $col)\n"; print "Value = ", $cell->value(), "\n"; print "Unformatted = ", $cell->unformatted(), "\n"; print "\n"; } } 6
Documents pareils
Formation programmation Perl DBI avec MySQL Plan de cours
Formation programmation Perl DBI avec MySQL
Plan de cours