2. Importer les données en base - PatGendre/hmvl GitHub Wiki
1. élimination des doublons dans les fichiers RD
Le problème principal constaté au départ est que de nombreux fichiers ont un contenu identique. Les fichiers sont envoyés 2 fois par heure, et il y a souvent plusieurs doublons envoyés successivement.
Grâce aux explications fournies par les mainteneurs du CIGT, nous avons écrit un script consistant à éliminer ces doublons avant l'import en base. Ce script doit donc être exécuté avant d'importer.
Le script duplicates.py renomme les fichiers en doublon en ajoutant une extension .dup ou .dd (selon que le doublon a le même nom que le fichier original, ou pas).
Par exemple, pour le 2/4 de 10h à 18h, on trouve 8000 fichiers RD originaux (et 112 fichiers csv Labocom) pour 19000 fichiers en doublons, qui ne seront donc pas importés.
Pour l'exécuter :
python duplicates.py nomrépertoire_aaaammjj_à_dédoublonner [nomrépertoire2] [nomrepértoire3...]
2. Lecture des données HmVL et écriture dans un fichier CSV
La fonction jourhmvl2csv écrit le contenu d'un fichier RD dans un fichier csv, facile à importer ensuite dans un DataFrame pandas par exemple. Il est possible aussi d'utiliser des fonctions pour convertir en CSV un seul fichier hmlvl RD ou Labocom. L'idée est que l'import sera réalisé chaque nuit par exemple à 2H, dans une tâche planifiée ou un cron sur le serveur, pour les données du jour précédent, en créant un gros fichier avec toutes les données d'une journée. Pour le jour "2020-MM-JJ", la commande sera par exemple:
python jourhmvl2csv.py --jour "2020-04-25" --nomcsv "../2504.csv" --nomlog "../2504.log" --pwd "lemotdepasse" --racine ".."
(le fichier log contient la liste des fichiers exportés en csv)
3. (Optionnel) Import du fichier CSV en base de données
Rappel: on peut se limiter à utiliser les fichiers csv, sans stocker les données en BD postgresql. Si on veut stocker les données en base, il faut ensuite importer le fichier csv en base (2504.csv dans l'exemple précédent), par une commande SQL du type:
COPY hmvl(hdt0,hdt,station,status,voie,vitesse,longueur,statuttr) FROM '/home/users/test-hmvl/2504.csv' WITH CSV HEADER;
Si on doit lancer la commande en batch/cron shell linux ou tâche planifiée windows,
on peut la lancer via une commande
psql -h localhost -U dirmed -W pwd -f copy.sql -d hmvl
où copy.sql est un fichier contenant la commande SQL précédente et pwd est le mot de passe. Si on doit changer la commande précédente chaque jour, on peut aussi faire ça en shell, avec une commande du genre:
sed -i 's/XXXXX/2020-05-12/g'
Si on a mis XXXXX.csv dans le fichier copy.sql.
La commande suivante lancera l'importation en base de la journée de données du 2/4.
python jourhmvl2pg.py --jour "2020-04-02"
4. Lire les données
Ensuite il est facile de lire les données stockées en base ou dans un fichier csv depuis une console python.
Ce notebook montre des exemples d'utilisation des données.