depensesTI/Extraction.Rmd

132 lines
5.4 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 ladministration 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)
```