Un automate génère des fichiers "big data" (sur lesquels je n'ai pas la main)
Un fichier csv avec des ";" pour séparer les colonnes.
Je voulais l'attaquer en Fortran pour faire des opérations dessus (avec des boucles) avant de générer un fichier plus condensé que je pourrais ensuite analyser avec R.
Le truc c'est que la largeur des colonnes n'est pas fixe d'un enregistrement à l'autre. J'ai pensé le lire avec R (il parvient à lire 19 millions de lignes avec 19 colonnes, même s'il lui faut du temps) pour ensuite réécrire dans un format lisible en Fortran. Du moment qu'il y a des séparateurs identifiés, R s'en sort.
Ca ressemble à ceci, où la datation (date et heure) est répétée 5 fois.
Code : Tout sélectionner
999000000000000;DAC.ART.DAAMIC101;2019-03-19;10:17:19;0.9995;2019-03-19;10:17:19;0.305;2019-03-19;10:17:19;12.0;2019-03-19;10:17:19;445;2019-03-19;10:17:19;1.0;2019-03-19;10:17:19
999000000000000;DAC.ART.DAAMIC101;2019-03-19;10:17:19;1.0;2019-03-19;10:17:19;0.38;2019-03-19;10:17:19;13.0;2019-03-19;10:17:19;802;2019-03-19;10:17:19;1.0;2019-03-19;10:17:19
999000000000000;DAC.ART.DAAMIC101;2019-03-19;10:17:20;1.0;2019-03-19;10:17:20;0.36;2019-03-19;10:17:20;13.0;2019-03-19;10:17:20;139;2019-03-19;10:17:20;1.0;2019-03-19;10:17:20
999000000000000;DAC.ART.DAAMIC101;2019-03-19;10:17:20;1.0;2019-03-19;10:17:20;0.355;2019-03-19;10:17:20;13.0;2019-03-19;10:17:20;474;2019-03-19;10:17:20;1.0;2019-03-19;10:17:20
999000000000000;DAC.ART.DAAMIC101;2019-03-19;10:17:20;1.0;2019-03-19;10:17:20;0.295;2019-03-19;10:17:20;14.0;2019-03-19;10:17:20;661;2019-03-19;10:17:20;1.0;2019-03-19;10:17:20
Après lecture et écriture (11 minutes plus tard) ça donne ça :
Code : Tout sélectionner
9.99e+14 DAC.ART.DAAMIC101 2019-03-19 10:17:19 0.9995 0.305 12 445
9.99e+14 DAC.ART.DAAMIC101 2019-03-19 10:17:19 1 0.38 13 802
9.99e+14 DAC.ART.DAAMIC101 2019-03-19 10:17:20 1 0.36 13 139
9.99e+14 DAC.ART.DAAMIC101 2019-03-19 10:17:20 1 0.355 13 474
9.99e+14 DAC.ART.DAAMIC101 2019-03-19 10:17:20 1 0.295 14 661
Plusieurs remarques :
1) je n'ai volontairement réécrit que les colonnes c(1:5,8,11,14)
2) j'ai transformé la première colonne (animal) en facteur en espérant la retrouver à l'identique et elle est sous forme de nombre. Comment puis-je lui faire écrire 999000000000000 à la place ? En tous cas lui faire écrire sur 15 positions. Car ce chiffre correspond à un animal non identifié. La plupart du temps on a un autre numéro. Sur 15 positions.
3) je voudrais que les chiffres soient dans un format fixé identique d'une ligne à l'autre: par exemple 1.0000 et non pas 1, si la ligne suivante je trouve 0.9995. Et si j'écris un entier, j'aimerais qu'il soit sur 2 positions (09 et pas 9).
4) C'est long (11 minutes pour 3.2 G) mais je suis prêt à supporter cette opération 1 fois quand je dépouille mes données (pas tous les jours). Sachant que les expérimentations peuvent générer des fichiers d'une taille encore supérieure.
L'idée (je le rappelle) est d'obtenir un fichier que je puisse lire en FORTRAN et je ne sais lire en FORTRAN que des fichiers parfaitement alignés.
Plus précisément je sais lire en Fortran un fichier du moment que les champs sont séparés par au moins un espace, mais comme je réalise des opérations qui prennent les dates en compte, je m'en tire avec des fonctions maison qui lisent les chaines de caractère et isolent les composantes de la date et de l'heure. Et pour cela j'ai besoin de lire sous forme numérique ces morceaux, ce qui n'est possible que s'ils sont alignés.
Si R n'est pas adapté, la solution est peut-être dans python (que je ne maitrise absolument pas) ? Je suis preneur de tout conseil.
Merci