Skip to content

Instantly share code, notes, and snippets.

@RCura
Last active April 1, 2017 13:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RCura/29c814567ca796a90899ae39a50abf2f to your computer and use it in GitHub Desktop.
Save RCura/29c814567ca796a90899ae39a50abf2f to your computer and use it in GitHub Desktop.
Exemple simple d'analyse de la base SIRENE
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()
@RCura
Copy link
Author

RCura commented Apr 1, 2017

sirene_depts_annee_idf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment