Aujourd’hui l’un de mes modèles que je n’arrivais pas à faire tourner avec openMOLE (tout arrive ) a fini son cycle sur mon vieux phenom II (4 coeur), les autres possibilités sur la grille européenne ou sur CALI étant occupées sur d’autres calculs… (oui en période de relecture les calculs s’accumulent et il faut être organisé… je ne le suis pas).
Le fait est que le modèle a fini de tourner après 25 heures et je m’aperçois que je n’ai pas coché la maudite case qui ne garderait que le dernier enregistrement de chaque simulation… J’ai donc à faire avec un fichier csv de 5Go …
- R, avec un simple read.csv, ne le mange pas (c.f. package data.table peut-être?)
Je me dis qu’on pourrait jouer un peu avec sqlite (histoire de ne pas installer un gros serveur de base de données). Mais pour ça il faut supprimer les 6 premières lignes du fichier csv produit par netlogo. On peut le faire grâce à un outil bash :
tail -n +7 partie2/dion/resultats/Dion1952V2_appledGeo_stability-table.csv > partie2/dion/resultats/small2.csv
Toujours dans la console, on peut vérifier que ça a fonctionné avec head :
head partie2/dion/resultats/Dion1952V2_appledGeo_stability-table.csv
qui renvoie
"[run number]","export","downerQ","coefUpQuality","chooseMode","demandF","nbPLots","standarDevPop","nbCitys","whatWord","priceMaxWineF","marketColor","[step]","gini-index-reserve","gini-index-patch","meanQualityTotal","meanQualityMountain","meanQualityPlain","DiffExtCentral","nbcentralPlots","meanPatchByNetwork","sum [quality] of patches with [owner != -9999 and alti < 0.1]","sum [quality] of patches with [owner != -9999 and alti >= 0.1]"
"3","false","0.5","0.01","false","7000","10","2","10","0","70","false","0","0","0.07083333333333335","0","0","0","0","0","0","48","0"
"4","false","0.5","0.01","false","7000","10","2","10","0","70","false","0","0","0.04285714285714286","0","0","0","0","0","0","42","0"
"2","false","0.5","0.01","false","7000","10","2","10","0","70","false","0","0","0.05348837209302328","0","0","0","0","0","0","43","0"
On passe ensuite à sqlite
$ sqlite
SQLite version 3.8.7.4 2014-12-09 01:34:36
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .separator ","
sqlite> .header on
sqlite> create table dion(run number,export,downerQ,coefUpQuality,chooseMode,demandF,nbPLots,standarDevPop,nbCitys,whatWord,priceMaxWineF,marketColor,step,giniIndexReserve,giniIndexPatch,meanQualityTotal,meanQualityMountain,meanQualityPlain,DiffExtCentral,nbcentralPlots,meanPatchByNetwork,sum_q_viti_moutain,sum_q_viti_plaine);
sqlite>.import "partie2/dion/resultats/Dion1952V2_appledGeo_stability-table.csv" dion
sqlite> DELETE FROM dion WHERE step != 500;
Processus arrêté
C’est un échec!!! Et là il y a GNU Linux, et ces outils incroyables qui redonnent espoir dans les moment d’abattement !
awk -F, 'NR == 1 || $13 == "\"500\""' partie2/dion/resultats/small.csv > partie2/dion/resultats/small500.csv
ou NR == 1 permet de préserver la ligne de header et $13 == »\ »500″\ » permet de conserver toutes les lignes qui au niveau de la colonne 13 ont le paramètre 500, -F , permet de définir le séparateur de champs !!
Note : une autre commande super si vous voulez compter le nombre de lignes du fichier !
cat mycsv.csv | wc -l
Et voilà des petites choses à ne pas oublier!