écriture formattée

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

herve chapuis
Messages : 110
Enregistré le : 05 Déc 2008, 15:26

écriture formattée

Messagepar herve chapuis » 02 Mai 2019, 09:24

Bonjour à tous.

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
Ingénieur de recherche INRAE Toulouse

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: écriture formattée

Messagepar Mickael Canouil » 02 Mai 2019, 13:53

Bonjour,

  1. Aucun intérêt d'effectuer une transformation en facteur (sous entendus en R, en entier)
  2. la fonction sprintf peut vous aider à formater vos données numériques dans le format souhaité
  3. si c'est simplement pour formater un fichier, R n'est clairement pas l’outil le plus adapté. Sans code, il est difficile d'optimiser "c'est long".

L'analyse via fortran est-elle obligatoire ?
Passez du temps à formater les données dans R, sans même utiliser R à proprement parler, c'est un peu "bizarre", d'autant plus que R sait gérer les dates et globalement tout et n'importe quoi.

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron