Skip to content

Commit c8b045d

Browse files
Intégration de melodi (#91)
* charge la liste de donnees complete * correctifs * gestion excel dans melodi * gère correctement le nommage des fichiers telecharges pour melodi * test sur les différents fichiers dans melodi * correctif * debug * readme et nouvelle version
1 parent 22afc9a commit c8b045d

File tree

9 files changed

+76
-17
lines changed

9 files changed

+76
-17
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: doremifasol
22
Title: Data on Insee Website
3-
Version: 0.5.5.9001
3+
Version: 0.5.6.0001
44
Authors@R: c(
55
person("Pierre", "Lamarche", email = "[email protected]", role = c("aut", "cre")),
66
person("Pierre-Yves", "Berrard", role = "aut", email = "[email protected]"),

R/chargerDonnees.R

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,21 +85,26 @@ chargerDonnees <- function(telechargementFichier, vars = NULL, ...) {
8585
res <- as.data.frame(do.call(rbind, res_int))
8686
}
8787
} else if (telechargementFichier$type == "xlsx") {
88-
if (!is.null(telechargementFichier$argsImport$sheet)) {
89-
res <- as.data.frame(do.call(readxl::read_xlsx, telechargementFichier$argsImport))
90-
} else {
88+
if (!is.null(telechargementFichier$argsImport$sheet) && telechargementFichier$argsImport$sheet != "__MELODI__") {
89+
res <- as.data.frame(do.call(readxl::read_xlsx, telechargementFichier$argsImport))
90+
} else {
9191
onglets <- readxl::excel_sheets(telechargementFichier$argsImport$path)
92-
res_int <- lapply(intersect(onglets, toupper(onglets)), function(x) {
92+
if (!is.null(telechargementFichier$argsImport$sheet) && telechargementFichier$argsImport$sheet == "__MELODI__"){
93+
onglets <- onglets[!onglets %in% c("M\u00e9tadonn\u00e9es", "Documentation")]
94+
} else {
95+
onglet <- intersect(onglets, toupper(onglets))
96+
}
97+
res_int <- lapply(onglets, function(x) {
9398
telechargementFichier$argsImport[["sheet"]] <- x
9499
table <- do.call(readxl::read_xlsx, c(telechargementFichier$argsImport, ...))
95100
table$onglet <- x
96101
return(as.data.frame(table))
97102
})
98103
#res <- as.data.frame(do.call(rbind, res_int))
99104
res <- res_int
100-
names(res) <- intersect(onglets, toupper(onglets))
105+
names(res) <- onglets
101106
}
102-
} else if (telechargementFichier$type == "json") {
107+
} else if (telechargementFichier$type == "json") {
103108
if (!is.null(vars))
104109
warning("Il n'est pas possible de filtrer les variables charg\u00e9es en m\u00e9moire sur le format JSON pour le moment.")
105110
res <- do.call(chargerDonneesJson, telechargementFichier$argsImport)

R/millesimesDisponibles.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
millesimesDisponibles <- function(donnees) {
1111
## check the parameter donnees takes a valid value
1212
donnees <- toupper(donnees)
13-
liste_nom <- unlist(lapply(ld, function(x) return(x$nom)))
13+
liste_nom <- toupper(unlist(lapply(ld, function(x) return(x$nom))))
1414
if (!donnees %in% liste_nom)
1515
stop("Le param\u00e8tre donnees est mal sp\u00e9cifi\u00e9, la valeur n'est pas r\u00e9f\u00e9renc\u00e9e")
1616
liste_possible <- ld[which(liste_nom == donnees)]

R/telechargerFichier.R

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ telechargerFichier <- function(donnees, date=NULL, telDir=getOption("doremifasol
2323

2424
## vérifie donnees et date. si ok les infos nécessaires sont extraites dans caract
2525
caract <- infosDonnees(donnees, date)
26-
26+
2727
## test de la connexion
2828
if (!curl::has_internet()) stop("aucune connexion Internet")
2929

@@ -39,7 +39,19 @@ telechargerFichier <- function(donnees, date=NULL, telDir=getOption("doremifasol
3939
## télécharge les fichiers csv, xls, xlsx...
4040
if (!caract$api_rest) {
4141

42-
nomFichier <- file.path(telDir, basename(caract$lien))
42+
if (caract$zip){
43+
if (grepl(".*\\.zip", basename(caract$lien))){
44+
nomFichier <- file.path(telDir, basename(caract$lien))
45+
} else {
46+
nomFichier <- file.path(telDir, paste0(caract$nom, ".zip"))
47+
}
48+
} else {
49+
if (grepl(paste0(".*\\.", caract$type), basename(caract$lien))){
50+
nomFichier <- file.path(telDir, basename(caract$lien))
51+
} else {
52+
nomFichier <- file.path(telDir, paste0(caract$nom, ".", caract$type))
53+
}
54+
}
4355
dl <- NULL
4456

4557
if (!file.exists(nomFichier) || force) {

R/utile.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
infosDonnees <- function(donnees, date = NULL, silencieux = FALSE) {
2222

2323
donnees <- toupper(donnees) # pour rendre insensible à la casse
24-
liste_nom <- vapply(ld, `[[`, "nom", FUN.VALUE = character(1))
24+
liste_nom <- toupper(vapply(ld, `[[`, "nom", FUN.VALUE = character(1)))
2525
res <- ld[liste_nom == donnees]
2626

2727
# 1 - identifiant introuvable

R/zzz.R

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,20 @@
11
.onLoad <- function(libname, pkgname) {
22
#data(liste_donnees)
3+
if (curl::has_internet()) {
4+
requete_melodi <- httr::GET("https://minio.lab.sspcloud.fr/pierrelamarche/melodi/liste_donnees.json")
5+
ld_melodi <- jsonlite::fromJSON(httr::content(requete_melodi, as = "text", encoding = "utf-8"),
6+
simplifyDataFrame = FALSE)
7+
ld_melodi <- lapply(ld_melodi, function(x) {
8+
within(x, {
9+
if (!is.null(x$date_ref))
10+
date_ref <- as.Date(date_ref, format = "%Y-%m-%d")
11+
if(!is.null(x$separateur))
12+
separateur <- paste0("quote(\"", separateur, "\")")
13+
})
14+
}
15+
)
16+
assign("ld", c(ld, ld_melodi),
17+
envir = asNamespace("doremifasol")
18+
)
19+
}
320
}

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@
1313

1414
## Français
1515

16+
## 🚀 Nouvelle fonctionnalité
17+
18+
Le catalogue de données intègre désormais les données mises à disposition dans [l'API Melodi](https://portail-api.insee.fr/catalog/all). Outre la [liste de données] disponible dans le _package_, les données listées dans le catalogue de Melodi sont intégrées _via_ [ce fichier](https://minio.lab.sspcloud.fr/) qui est mis quotidiennement à jour.
19+
1620
### De quoi s'agit-il ?
1721

1822
Le _package_ `doremifasol` (_Données en R Mises à disposition par l’Insee et Facilement Sollicitables_) permet d'importer facilement dans R des données mises à disposition sur le site de l'Insee.
1923

2024
Il offre deux fonctionnalités principales :
2125

22-
* télécharger et importer dans R des fichiers disponibles sur insee.fr (Base Permanente des Équipements, Recensement de Population, Filosofi...) ;
26+
* télécharger et importer dans R des fichiers disponibles sur insee.fr (Base Permanente des Équipements, Recensement de Population, Filosofi...), **y compris les données mises à disposition _via_ Melodi** ;
2327
* requêter l'[API](https://api.insee.fr/catalogue) Sirene et recupérer les résultats dans R.
2428

2529
L'objectif du _package_ est de rendre transparentes les différentes tâches à réaliser avant de pouvoir traiter les données : recherche sur le site, téléchargement, décompression, import dans R...
@@ -91,6 +95,10 @@ Agent du Service Statistique Public, ou utilisateur des données mises à dispos
9195

9296
## English
9397

98+
## 🚀 New Feature
99+
100+
The data catalog now includes data made available in the [Melodi API](https://portail-api.insee.fr/catalog/all). In addition to the [list of data] available in the package, the data listed in the Melodi catalog is integrated via [this file](https://minio.lab.sspcloud.fr/) which is updated on a daily basis.
101+
94102
### What is it about?
95103

96104
`doremifasol` (data with R made available by Insee and easily retrievable in French) is a R package mainly aiming at showing off data available on Insee's website (Insee, for the French Institute for Statistics and Economic Studies), helping the user to put them on stage and extract the information they carry. So it is about analysing data, creating maps, quantifying phenomenons and in general using the data without the painful effort to retrieve them on the website, as well as import them into R's memory. The name of the _package_ stands for the five first notes of music, and pushing the metaphore, underlines its aim at helping the users to easily pratice their _solfège_ in R.

tests/testthat/test_liste_donnees.R

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ test_that("pas de valeurs incongrues", {
2323

2424
# lien (motif, pas existence)
2525
url_pattern <- "^https://www.insee.fr/fr/statistiques/fichier/\\d{5,}/.+\\.(zip|xls|xlsx|parquet)$"
26-
api_url_pattern <- "^https://api.insee.fr/entreprises/sirene(/V3.11)?/sire[nt](/(liensSuccession|nonDiffusibles))?$"
26+
api_sirene_url_pattern <- "^https://api.insee.fr/entreprises/sirene(/V3.11)?/sire[nt](/(liensSuccession|nonDiffusibles))?$"
27+
api_melodi_url_pattern <- "^https://api.insee.fr/melodi/.*$"
2728
expect_true(
28-
all(grepl(paste0(url_pattern, "|", api_url_pattern), df_ld$lien))
29+
all(grepl(paste0(url_pattern, "|", api_sirene_url_pattern, "|", api_melodi_url_pattern), df_ld$lien))
2930
)
3031

3132
# type
@@ -43,7 +44,7 @@ test_that("pas de valeurs incongrues", {
4344

4445
# big_zip
4546
expect_true(
46-
all(df_ld$big_zip[df_ld$zip] %in% c(TRUE, FALSE))
47+
with(df_ld, all(big_zip[zip] %in% c(TRUE, FALSE)))
4748
)
4849

4950
# premiere_ligne / derniere_ligne
@@ -64,3 +65,4 @@ test_that("pas de valeurs incongrues", {
6465
)
6566

6667
})
68+

tests/testthat/test_telechargerDonnees.R

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ test_that("Télécharger des données sur l'API pour les entreprises créées un
115115
skip_if_no_app()
116116
check_configuration()
117117
expect_s3_class(telechargerDonnees("SIRENE_SIRET_LIENS", argsApi = list(q = "siretEtablissementPredecesseur:32957439600019")),
118-
"try-error")
118+
"try-error")
119119
})
120120
## test dl sur l'API Sirene avec une requête sur les unités non diffusibles
121121
test_that("Télécharger des données sur l'API pour les unités non diffusibles", {
@@ -130,5 +130,20 @@ test_that("Erreur de syntaxe dans la requête sur l'API Sirene", {
130130
check_configuration()
131131
expect_s3_class(telechargerDonnees("SIRENE_SIREN_NONDIFF",
132132
argsApi = list(q = 'dateDernierTraitementUniteLegale:"2018-11-01" TO "2018-11-15"')),
133-
"try-error")
133+
"try-error")
134+
})
135+
## test dl de données sur mélodi - csv brut
136+
test_that("Télécharger le csv sur l'API melodi", {
137+
expect_s3_class(telechargerDonnees("DS_BPE"),
138+
c("insee_data_frame", "data.frame"))
139+
})
140+
## test dl de données sur mélodi - csv zippé
141+
test_that("Télécharger un produit csv zippé sur melodi", {
142+
expect_s3_class(telechargerDonnees("DS_ANTIPOL_CSV_FR"),
143+
c("insee_data_frame", "data.frame"))
144+
})
145+
## test dl de données sur mélodi - XLSX
146+
test_that("Télécharger un produit xlsx zippé sur melodi", {
147+
expect_type(telechargerDonnees("ANTIPOL_GLOBAL_T0_FR"),
148+
"list")
134149
})

0 commit comments

Comments
 (0)