133 lines
5.4 KiB
Text
133 lines
5.4 KiB
Text
|
---
|
|||
|
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)
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|