[R-br] Trabalhar com muitos dados

Fabio Mathias Corrêa fabio.ufla em yahoo.com.br
Terça Outubro 16 19:48:28 BRT 2012


Veja os pacotes bigmemory, bigmatrix, entre outros big...

Costumo abrir arquivos com 20Gb sem problema de Swap.

Valeu!

 
        Fábio Mathias Corrêa


   Universidade Estadual de Santa Cruz
Departamento de Ciências Exatas e da Terra - DCET


Campus Soane Nazaré de Andrade, km 16 Rodovia Ilhéus-Itabuna
CEP 45662-900. Ilhéus-Bahia


Tel.: 73-3680-5076


________________________________
 De: Roney Fraga <roneyfraga em gmail.com>
Para: R-br <r-br em listas.c3sl.ufpr.br> 
Enviadas: Terça-feira, 16 de Outubro de 2012 13:41
Assunto: [R-br] Trabalhar com muitos dados
 

Caros,



Estou trabalhando com os dados dos 
censos populacionais de 2000 e 2010. A minha dificuldade é o volume de 
dados, pois cada censo tem aproximadamente 20 milhões de linhas. 
Considerando os dados estão em arquivos .csv, um único aquivo de 12 GB 
para o censo de 2010 e um arquivo para cada estado no censo de 2000, que totalizam 11 GB. Utilizo um notebook com processador Intel Core i5 
2410M, 8 GB de ram com 3 GB de SWAP e o sistema operacional é o Arch 
Linux. Tenho quatro dúvidas que estão abaixo em meio da minha explicação sobre os problemas que venho enfrentando.


Para ler os arquivos .csv conheço as seguintes opções:


a) trabalhar com um banco de dados relacional. 
R.: estou com um problema com o postgresql que ainda não tenho solução, portanto, essa alternativa esta descartada no momento.

b) utilizar o sqldf.
R.: acredito que o 
sqldf não é eficiênte para trabalhar com arquivos grandes, o processo é 
encerrado antes de concluir a operação. Exemplo:

> library(sqldf)
> read.csv.sql('censo00ba1.csv', sql = "select V0102 from file", header = TRUE, sep = ",")
[ reached getOption("max.print") -- omitted 1498127 rows ]
Warning messages:
1: closing unused connection 4 (censo00ba1.csv) 
2: closing unused connection 5 (censo00ba1.csv) 

1ª dúvida: isso sempre acontece com o sqldf, ou alguém consegue utilizá-lo com para ler arquivos grandes?

c) utilizar o comando cut e grep do Linux/Mac para 
filtrar os dados e ter um arquivo .csv menor, dessa forma é possível ler o arquivo pelo comando do R, read.csv().
R.: utilizei essa opção. Exemplo:
cut -d',' -f1,4,5,6,10,79,81,84,91,92,95,97,111,113,114,149,150,188  br2010.csv > br2010b.csv

Uma vez superada a dificuldade da importação dos dados deletei algumas 
coisas e fiquei com três arquivos com as seguintes dimensões:
> dim(cs);dim(cs2000);dim(cs2010)
[1] 6077327      23          # censos 2000 e 2010 
[1] 2865716      23          # censo 2000
[1] 3211611      23          # censo 2010

Quanto ao processamento:


d) Consigo rodar regressão simples para o censo de 2000 e para o censo de 2010 separadamente, como segue exemplo: 

> ma <- lm(lnrenda ~ factor(ee) + idade + 
idade2 + factor(tt) + factor(cor.raca) + rural + feminino + migrante + 
factor(UF), data=cs2000)
> mb <- lm(lnrenda ~ factor(ee) + idade + idade2 + factor(tt) + factor(cor.raca) + rural + feminino + 
migrante + factor(UF), data=cs2010)

mas não consigo rodar o mesmo modelo para os dados 
do arquivo 'cs', que tem 6.077.327 linhas, que é censo 2000 mais censo 
2010. Pois, aparece a seguinte mensagem de erro:
> mc <- lm(lnrenda ~ factor(ee) + idade + idade2 + factor(tt) + 
factor(cor.raca) + rural + feminino + migrante + factor(UF) + 
factor(ano), data=cs)
Error: cannot allocate vector of size 2.0 Gb

2ª dúvida: qual procedimento posso utilizar para solucionar esse problema de rodar a regressão das 6.077.327 observações?
Um amigo indicou aumentar a memória SWAP, essa é uma boa opção?


3ª dúvida: ao realizar um processo que demanda muita memória ram o R não consegue realizar outro processo pesado em seguida, pois a memória fica ocupada. Exemplo, ao rodar uma regressão em uma 
base de dados com 3 milhões de linhas eu não consigo realizar outra 
regressão pq a memória fica cheia. Dúvida, tem como 'limpar' os dados da memória para poder realizar outros cálculos?

4ª dúvida: trabalhar com paralelismo pode auxiliar nesse tipo de processamento?


Grato pela atenção.
Roney 
_______________________________________________
R-br mailing list
R-br em listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20121016/202022a6/attachment.html>


Mais detalhes sobre a lista de discussão R-br