--- title: "Extraction et préparation des données" author: "François Pelletier" date: "10 octobre 2015" output: html_document --- #Extraction et préparation des données du jeu «Tableau de bord de l’état de santé des projets en ressources informationnelles de l’administration publique» ##Extraction des métadonnées ```{r} library(XML) library(dplyr) source("FilterList.R") # Identifiant unique du jeu de données UUID = "c60b2248-0ca4-4b12-89d3-2f087a319bea" # URL pour récupérer les métadonnées urlRDF <- paste0("http://www.donnees.gouv.qc.ca/geonetwork/srv/eng/rdf.metadata.get?uuid=",UUID) # Document de métadonnées RDFdoc<- urlRDF %>% xmlTreeParse %>% xmlRoot ``` Quel est le contenu du fichier de métadonnées ? ```{r} # Fréquence de chaque type de noeuds RDFdoc %>% names %>% table %>% as.data.frame %>% "colnames<-"(c("Type de noeud","Fréquence")) # Nombre de champs dans chaque noeud xmlSApply(RDFdoc, xmlSize) # Extraction à une profondeur de 1 champs <- xmlSApply(RDFdoc, function(x) xmlSApply(x, xmlValue)) # Je veux seulement les champs de type «Distribution» champsDistribution <- champs[names(champs) == "Distribution"] ``` Je veux extraire les noms des fichiers de données pour les télécharger ```{r} datafileNames <- champsDistribution %>% lapply(function(x) as.character(x[x["format"]=="WWW:DOWNLOAD-1.0-ftp--downloadWWW:DOWNLOAD-1.0-ftp--download"])) %>% FilterList(function(x) !identical(character(0),x)) %>% as.data.frame %>% t datafileNames ``` Les fichiers actuels présentent des erreurs d'encodage qui devront être corrigées manuellement. Voir le courriel joint. ```{r eval=FALSE} rawdata <- list() rawdata <- lapply(datafileNames[,1],read.csv2,header=FALSE,sep=";",encoding="utf-8",skip = 1) ``` Je télécharge donc les fichiers manuellement ```{r eval=FALSE} lapply(datafileNames[,1], function (x) system2("wget", x)) noms_fichiers_telecharges <- list.files(path = ".", pattern = ".csv") system("bash conversion_csv.sh") ``` Je les importe ensuite ```{r} rawdata <- list() rawdata <-lapply(1:7,function(i) rawdata[[i]] <- read.csv2(paste0("tr_tableau_de_bord_",i,".csv"), header = TRUE, sep=";", encoding="utf-8", stringsAsFactors = FALSE, dec = ",")) rawdata %>% lapply(names) ``` Je corrige les incohérences manuellement jusqu'à temps que je puisse faire la jointure des données ```{r} rawdata[[4]]$Pourcentage_avancement[levels(rawdata[[4]]$Pourcentage_avancement) == "-"] <- NA rawdata[[4]]$Pourcentage_avancement <- as.integer(rawdata[[4]]$Pourcentage_avancement) rawdata[[1]]$Cote_de_coût <- as.numeric(rawdata[[1]]$Cote_de_coût) rawdata[[2]]$Cote_de_coût <- as.numeric(rawdata[[2]]$Cote_de_coût) rawdata[[3]]$Cote_de_coût <- as.numeric(rawdata[[3]]$Cote_de_coût) rawdata[[1]]$Variation_de_coût <- as.numeric(rawdata[[1]]$Variation_de_coût) rawdata[[2]]$Variation_de_coût <- as.numeric(rawdata[[2]]$Variation_de_coût) rawdata[[3]]$Variation_de_coût <- as.numeric(rawdata[[3]]$Variation_de_coût) rawdata[[1]]$Variation_écheancier <- as.numeric(rawdata[[1]]$Variation_écheancier) rawdata[[2]]$Variation_écheancier <- as.numeric(rawdata[[2]]$Variation_écheancier) rawdata[[3]]$Variation_écheancier <- as.numeric(rawdata[[3]]$Variation_écheancier) rawdata[[5]]$Montant_reel_depense <- gsub(",", ".", rawdata[[5]]$Montant_reel_depense) rawdata[[5]]$Montant_reel_depense <- gsub(" ", "", rawdata[[5]]$Montant_reel_depense) rawdata[[5]]$Montant_reel_depense <- as.numeric(rawdata[[5]]$Montant_reel_depense) rawdata[[5]]$Montant_reel_depense[105:450] <- rawdata[[5]]$Montant_reel_depense[105:450]*1000 rawdata[[5]]$Cout_estime_pour_completer_le_projet <- gsub(",", ".", rawdata[[5]]$Cout_estime_pour_completer_le_projet) rawdata[[5]]$Cout_estime_pour_completer_le_projet <- gsub(" ", "", rawdata[[5]]$Cout_estime_pour_completer_le_projet) rawdata[[5]]$Cout_estime_pour_completer_le_projet <- as.numeric(rawdata[[5]]$Cout_estime_pour_completer_le_projet) rawdata[[5]]$Cout_estime_pour_completer_le_projet[105:450] <- rawdata[[5]]$Cout_estime_pour_completer_le_projet[105:450]*1000 rawdata[[5]]$Budget_autorise_revise <- gsub(",", ".", rawdata[[5]]$Budget_autorise_revise) rawdata[[5]]$Budget_autorise_revise <- gsub(" ", "", rawdata[[5]]$Budget_autorise_revise) rawdata[[5]]$Budget_autorise_revise <- as.numeric(rawdata[[5]]$Budget_autorise_revise) rawdata[[5]]$Budget_autorise_revise[105:450] <- rawdata[[5]]$Budget_autorise_revise[105:450]*1000 rawdata[[5]]$Budget_autorise_initial <- gsub(",", ".", rawdata[[5]]$Budget_autorise_initial) rawdata[[5]]$Budget_autorise_initial <- gsub(" ", "", rawdata[[5]]$Budget_autorise_initial) rawdata[[5]]$Budget_autorise_initial <- as.numeric(rawdata[[5]]$Budget_autorise_initial) rawdata[[5]]$Budget_autorise_initial[105:450] <- rawdata[[5]]$Budget_autorise_initial[105:450]*1000 convertir.noms <- function(noms) { noms <- noms %>% iconv(to="ASCII//TRANSLIT") %>% tolower noms[noms=="date_de_fin_revise"] <- "date_de_fin_revisee" noms } for (i in 1:7) { names(rawdata[[i]]) <- convertir.noms(names(rawdata[[i]])) } ``` Jointure de tous les fichiers de données dans une même table ```{r} rawdata2 <- dplyr::bind_rows(rawdata) ```