Last active
April 1, 2017 13:03
-
-
Save RCura/29c814567ca796a90899ae39a50abf2f to your computer and use it in GitHub Desktop.
Exemple simple d'analyse de la base SIRENE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
library(tidyverse) # tidyverse charge les packages les plus utiles issus de la logique "tidy", | |
# c'est-à-dire : dplyr, tidyr, readr et ggplot2 (entre autre) | |
# Si tidyverse n'est pas disponible, décommenter les ligne suivante | |
# library(dplyr) | |
# library(tidyr) | |
# library(readr) | |
# library(ggplot2) | |
# Lecture des modalités | |
modalites <- read_csv2("liste-modalites-l2.csv") # Fichier pris ici : https://www.data.gouv.fr/s/resources/base-sirene-des-entreprises-et-de-leurs-etablissements-siren-siret/20170112-180748/liste-modalites-l2.csv | |
# On lit un petit extrait (1000 lignes) du fichier "Sirene : stock au 01 avril 2017", disponible | |
# à cette adresse : http://files.data.gouv.fr/sirene/sirene_201703_L_M.zip | |
# Cela nous sert à faire de petits tests avant de se lancer dans la lecture massive du fichier | |
test <- read_csv2(file = "SIRENE/sirene_201703_L_M.zip", # readr::read_csv2 permet directement de lire à l'intérieur du zip, pas besoin de le désarchiver | |
skip = 1, # La première ligne comprend les entêtes, on n'en a pas besoin ici | |
locale = locale(encoding = "latin1"), # C'est bien du codage Windows, donc on le spécifie | |
n_max = 1000, # On ne lit que les 1000 premières lignes | |
col_names = modalites$Nom, # On attribue directement les noms de colonne depuis le fichier de correspondance | |
col_types = paste(rep("c", 100),collapse = "") # ça produit un string composé de 100 "c" ("ccc[...]cccc"), qui indique que chaque colonne est à intégrer en caractère | |
) | |
filtreRegion <- function(x, pos) filter(x, RPET == "11") # On crée une fonction qui a pour but de conserver uniquement les entreprises de la region 11 (IdF) | |
sireneAvril <- read_csv2_chunked(file = "SIRENE/sirene_201703_L_M.zip", # Cette fonction de lecture lit le fichier par bloc (chunk) et applique une fonction ("callback") sur chaque bloc | |
locale = locale(encoding = "latin1"), | |
chunk_size = 10000, # On parcourt le fichier par blocs de 10 000 lignes | |
col_names = modalites$Nom, | |
col_types = paste(rep("c", 100), collapse = ""), | |
callback = DataFrameCallback$new(filtreRegion) # On applique sur chaque chunk la fonction créée précédemment | |
) | |
# L'indicateur de progression reste bloqué longtemps sur 100%, c'est normal. | |
# Exemple d'utilisation | |
sireneExtrait <- sireneAvril %>% | |
select(SIREN, DEPET, COMET, DCRET, APET700, LIBAPET, LIBTEFET) %>% # on garde seulement certaines variables (ID, Departement, Code Commune, date de cration, code et nom catégorie, effectif ) | |
mutate(INSEE = paste0(DEPET, COMET)) %>% # On recrée le code INSEE par concatenation du code Dept et du code Commune | |
mutate(ANNEECREATION = substr(DCRET, 1, 4)) %>% # On ne conserve que les 4 premiers caractères de la date de création (pour avoir l'année) | |
mutate(ANNEECREATION = as.integer(ANNEECREATION)) | |
creationsDeptYear <- sireneExtrait %>% | |
filter(ANNEECREATION > 1950) %>% | |
group_by(DEPET, ANNEECREATION) %>% | |
summarise(NbCreations = n()) %>% # On fait un compte du nombre d'entreprises créées chaque année pour chaque département | |
group_by(ANNEECREATION) %>% | |
mutate(TxCreation = NbCreations / sum(NbCreations)) # On fait un ratio des creations d'entreprises créées par département par année | |
ggplot(creationsDeptYear, aes(x = ANNEECREATION, y = TxCreation, col = DEPET)) + | |
geom_smooth(se = FALSE) + | |
scale_y_continuous(labels = scales::percent) + | |
theme_minimal() | |
Author
RCura
commented
Apr 1, 2017
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment