- Procédure pour importer les données mensuelles
- Structure des fichiers
- Mettre à jour les outils
- Mettre les nouveaux fichiers dans un répertoire spécifique
- Télécharger le fichier Siren
- Télécharger le fichier Diane
- Créer un objet admin pour l'intégration des données
- Mettre à jour la commande
sfdata
(optionnel) - Lancer l'import
- Lancer le compactage
- Calcul des variables et génération de la liste de detection
- Maintenance: nettoyage des données hors périmètre
Note: Les informations liées à l'environnement de production ont été déplacées sur notre wiki d'équipe.
Cette procédure décrit:
- la structure recommandée pour organiser les fichiers par (sous-)batch;
- comment récupérer les fichiers de données de nos partenaires;
- comment constituer un objet
batch
à partir de ces fichiers, en vue de les importer dans la base de données MongoDB, à l'aide desfdata
. (cf Processus de traitement des données)
Un batch est un ensemble de fichiers de données permettant de constituer (à minima) un périmètre SIREN (aussi appelé filtre ou filter) à partir de données effectif
fraiches. Les fichiers d'un batch sont réunis dans un même répertoire. Le nom d'un batch est sous la forme AAMM
, soit les deux derniers chiffres de l'année suivi par les deux chiffres du mois.
Un sous-batch est un ensemble de fichiers de données venant compléter un batch déjà importé, en ré-utilisant le périmètre SIREN de ce batch. Les fichiers d'un sous-batch sont réunis dans un même répertoire, lui-même contenu dans le répertoire du batch qu'il complète. Le nom d'un sous-batch est sous la forme AAMM_NN
, soit le nom du batch parent suivi par un numéro à incrémenter pour chaque sous-batch.
Voici une illustration de la structure des répertoires attendue par prepare-import
, en supposant que nous ayons deux batches et un sous-batch sur la période de Février 2018:
|-- 1801
|-- 1802
| |-- 1802_01
La génération de batch ou sous-batch s'effectue depuis le répertoire contenant les batches:
$ ~/prepare-import/prepare-import --batch 1801
$ ~/prepare-import/prepare-import --batch 1802
$ ~/prepare-import/prepare-import --batch 1802_01
Les informations suivantes seront inférées automatiquement par prepare-import
:
filter
: fichier de périmètre SIREN hérité ou généré depuis le fichiereffectif
du batch parentdate_fin_effectif
: date détectée depuis le fichiereffectif
du batch parent
Note: quand on appelle prepare-import
sur un sous-batch, le fichier filter
du batch parent sera copié dans le répertoire du sous-batch, et intégré dans l'objet Admin
résultant, en conservant le même nom de fichier.
cd ~/prepare-import/
git pull # pour mettre à jour les outils
go build
sudo su
cd /var/lib/goup_base/public
mkdir _<batch>_
~/prepare-import/tools/goupy.py . # pour afficher les métadonnées de chaque fichier de données
# /!\ Attention commande suivante non fonctionnelle !
find -maxdepth 1 -ctime -10 -print0 | xargs -0 mv -t _<batch>_/
cd _<batch>_
curl https://files.data.gouv.fr/insee-sirene/StockUniteLegale_utf8.zip | zcat > sireneUL.csv
curl https://data.cquest.org/geo_sirene/v2019/last/StockEtablissement_utf8_geo.csv.gz | zcat > StockEtablissement_utf8_geo.csv
Notes:
- Disponible depuis la page de la Base Sirene, le fichier
sireneUL.csv
contient les données par entreprise- Le fichier
StockEtablissement_utf8_geo.csv
contient les données par établissement de data.gouv.fr enrichies de leur géolocalisation. La composantev2019
représente la version du format de fichier, et non la fraicheur des données.
-
Se connecter sur le site Diane+
-
Identifier le numéro de la nouvelle variable à importer. (ex:
CF00011
) Le suivant du dernier numéro déjà importé dans: Mes données > Données importées > Importer nouvelle variable -
Créer la nouvelle variable en indiquant qu'il s'agit d'un champs
identifiant d'entreprise
. Télécharger le fichier. -
Transformer le filtre de périmètre généré par
prepare-import
lors du dernier import d'un fichiereffectif
:$ tools/filter_to_diane -v var_num="CF000xx" ../20xx/filter_20xx.csv > ../diane_req/diane_filter_20xx.csv
puis$ ssconvert ../diane_req/diane_filter_20xx.csv ../diane_req/diane_filter_20xx.xls
... en spécifiant le numéro de la nouvelle variable dans le paramètrevar_num
. Par exemple si le dernier estCF00011
dans diane+ alors il faut passerCF00012
au script. -
Dans l'interface importer nouvelle variable de Diane+, envoyer le fichier Excel ainsi généré.
-
Sélectionner la nouvelle variable dans: Mes données > Données importées > Entreprises avec une donnée importée
Autres ...
Cette sélection peut-être complétée avec: Entreprises mises à jour > Données financières et descriptives
~/prepare-import/prepare-import -batch "<BATCH>"
Penser à changer le nom du batch en langage naturel: ex "Février 2020".
Insérer le document résultant dans la collection Admin
.
cd opensignauxfaibles
git checkout master # sélectionne la branche principale de sfdata
git pull # met à jour le code source de sfdata
make build-prod # compile sfdata pour l'environnement de production
./sfdata --help # vérifie que la commande fonctionne
Documentation d'usage: Commande
sfdata
./sfdata check --batch="2002_1"
Vérifier dans les logs que les fichiers sont bien valides. Corriger le batch si nécéssaire.
Puis:
./sfdata import --batch="2002_1"
Documentation de référence: Workflow classique et Spécificités de l'import
Le compactage consiste à intégrer dans la collection RawData
les données du batch qui viennent d'être importées dans la collection ImportedData
.
Commencer par vérifier la validité des données importées:
./sfdata validate --collection="ImportedData" # valider les données importées
./sfdata validate --collection="RawData" # valider les données déjà en bdd (recommandé)
Les entrées de données invalides seront rendues dans la sortie standard.
Puis, avant de lancer le compactage, corriger ou supprimer les entrées invalides éventuellement trouvées dans les collections ImportedData
et/ou Rawdata
.
Une fois les données validées:
./sfdata compact --since-batch="2002_1"
Documentation de référence: Spécificités du compactage
Documentation de référence: Exécution des calculs pour populer la collection
Features
Dans le cas où certaines entités (entreprises et/ou établissements) seraient représentées dans la collection RawData
alors qu'elles ne figurent pas dans le périmètre SIREN (représenté par le fichier filtre rattaché à tout batch importé dans la base de donnée), il convient de les retirer afin d'alléger le stockage et les traitements de données.
Ce traitement est destructif et irréversible, il convient de porter une attention particulière si le nombre de document à supprimer est conséquent.
Pour cela, utiliser la commande sfdata pruneEntities
:
# dry-run, pour compter les entités à supprimer
./sfdata pruneEntities --batch=2010 --count
# après vérification, supprimer ces entités de RawData
./sfdata pruneEntities --batch=2010 --delete
Remplacer l'identifiant de batch par celui du dernier batch importé avec un fichier filtre à jour.