[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