Skip to content

Latest commit

 

History

History
199 lines (135 loc) · 9.39 KB

procedure-import-donnees.md

File metadata and controls

199 lines (135 loc) · 9.39 KB

Note: Les informations liées à l'environnement de production ont été déplacées sur notre wiki d'équipe.

Procédure pour importer les données mensuelles

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 de sfdata. (cf Processus de traitement des données)

Structure des fichiers

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 fichier effectif du batch parent
  • date_fin_effectif: date détectée depuis le fichier effectif 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.

Mettre à jour les outils

cd ~/prepare-import/
git pull # pour mettre à jour les outils
go build

Mettre les nouveaux fichiers dans un répertoire spécifique

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>_/

Télécharger le fichier Siren

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 composante v2019 représente la version du format de fichier, et non la fraicheur des données.

Télécharger le fichier Diane

  1. Se connecter sur le site Diane+

  2. 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

  3. Créer la nouvelle variable en indiquant qu'il s'agit d'un champs identifiant d'entreprise. Télécharger le fichier.

  4. Transformer le filtre de périmètre généré par prepare-import lors du dernier import d'un fichier effectif: $ 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ètre var_num. Par exemple si le dernier est CF00011 dans diane+ alors il faut passer CF00012 au script.

  5. Dans l'interface importer nouvelle variable de Diane+, envoyer le fichier Excel ainsi généré.

  6. 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

Créer un objet admin pour l'intégration des données

~/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.

Mettre à jour la commande sfdata (optionnel)

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

Lancer l'import

./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

Lancer le compactage

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

Calcul des variables et génération de la liste de detection

Documentation de référence: Exécution des calculs pour populer la collection Features

Maintenance: nettoyage des données hors périmètre

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.