[R-br] Trabalhar com muitos dados
Diogo Ferrari
diogoferrari em gmail.com
Terça Outubro 16 13:56:06 BRT 2012
Trabalho com os dados dos censos usando R. A solução para processamento
paralelo, big data, etc., usando R é o Revolution Analytics (
http://www.revolutionanalytics.com/).
abs
2012/10/16 Roney Fraga <roneyfraga em gmail.com>
> 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.
>
--
Diogo Ferrari
University of San Paulo (USP)
Faculty of Philosophy, Languages, Literature and Human Sciences (FFLCH)
Department of Political Science (DCP)
San Paulo/SP - Brazil
E-mail: diogo.ferrari em usp.br
Open Source! Use R! Use Linux!
"A vida é a arte de tirar conclusões suficientes de dados insuficientes"
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20121016/8564832f/attachment.html>
Mais detalhes sobre a lista de discussão R-br