Bonjour,
Je dois travailler sur une très grosse base de données. Il m'est bien sûr impossible de la charger directement avec un simple read.csv en raison d'un problème d'allocation de buffer. On effet si j'essaye j'obtiens ce message :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 donnees <- read.csv2("DataOPCDA.csv",header=FALSE,sep=";") Erreur dans scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : could not allocate memory (1024 Mb) in C function 'R_AllocStringBuffer' De plus : Messages d'avis : 1: In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : Reached total allocation of 1500Mb: see help(memory.size) 2: In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : Reached total allocation of 1500Mb: see help(memory.size)
Après quelques recherches sur les problèmes de chargement de grosses base de données, j'ai essayé d'augmenter la capacité d'allocation en jouant sur la fonction memory.size() mais sans succès.
Je suis ensuite tombé sur la librairie bigmemory. L'utilisation de la fonction read.big.matrix() me permet de charger ma base de données. Le seul problème c'est qu'une de mes colonnes contient un timestamp. Pour vous donner une idée voici les 15 premières lignes de mon fichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 1 5.0 34.4 192 25/02/2010 10:53 2 11.0 15.03 192 25/02/2010 10:53 3 21.0 56.3 192 25/02/2010 10:53 4 31.0 63.2 192 25/02/2010 10:53 6 1.0 33.5 192 25/02/2010 11:03 7 6.0 15.0 192 25/02/2010 11:02 8 21.0 58.5 192 25/02/2010 11:03 9 31.0 67.7 192 25/02/2010 11:03 11 1.0 0.0 0 25/02/2010 14:28 12 2.0 0.0 0 25/02/2010 14:28 13 3.0 0.0 0 25/02/2010 14:28 14 4.0 0.0 0 25/02/2010 14:28 15 5.0 0.0 0 25/02/2010 14:28
La fonction n'arrive donc pas à récuperer ma dernière colonne elle s'arrête au premier / (normal vu qu'elle attend un double par défaut)
Si je lui demande d'afficher mes 15 premières lignes j'obtiens bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 donnees[1:25,1:5] [,1] [,2] [,3] [,4] [,5] [1,] 5 1 34.40 192 25 [2,] 2 11 15.03 192 25 [3,] 3 21 56.30 192 25 [4,] 4 31 63.20 192 25 [5,] 6 1 33.50 192 25 [6,] 7 11 15.00 192 25 [7,] 6 21 58.50 192 25 [8,] 9 31 67.70 192 25 [9,] 11 1 0.00 0 25 [10,] 12 2 0.00 0 25 [11,] 13 3 0.00 0 25 [12,] 14 4 0.00 0 25 [13,] 15 5 0.00 0 25 [14,] 16 6 0.00 0 25 [15,] 17 7 0.00 0 25
Ma question est donc la suivante : est-il possible de charger une matrice contenant une chaîne de caractère avec cette fonction read.big.matrix(). Si non, avez vous un moyen efficace de charger une grosse base de données contenant des timestamp ?
Merci d'avance.
Partager