2012-05-29 14 views
7

Mam plik wejściowy, który ma około 20 milionów linii. Rozmiar pliku wynosi około 1,2 G. Czy mimo to mogę wykreślić dane w R. Niektóre z kolumn mają kategorie, większość z nich to liczby.Wykreślanie dużych plików danych w R?

Próbowałem mojego skryptu spiskowania z małym podzbiorem pliku wejściowego około 800K linii, ale mimo że mam około 8G pamięci RAM, nie wydaje mi się, aby móc wykreślić wszystkie dane. Czy istnieje prosty sposób na zrobienie tego.

+9

Co masz nadzieję zobaczyć na wykresie z 20 milionami punktów danych? – Chase

+5

Bez względu na pojemność obliczeniową, będziesz musiał zmniejszyć swoje dane poprzez histogramy, wykresy gęstości 1D i 2D, wykresy heksabinowe, ... –

+0

... kontynuując zgodnie z odpowiedzią @Paul Hiemstra poniżej - jeśli dasz trochę więcej szczegółów na temat (podzbioru) danych można uzyskać interesującą dyskusję na temat możliwości wizualizacji. Ponadto, 'ggplot' może być wolniejszy/bardziej głodny pamięci niż inne możliwości, jeśli naprawdę chcesz wykreślić każdy punkt. –

Odpowiedz

12

Bez wyraźniejszego opisu rodzaju działki, którą chcesz, trudno jest podać konkretne sugestie. Jednak generalnie nie ma potrzeby wykreślać 20 milionów punktów w spisku. Na przykład serie czasu mogą być reprezentowane przez dopasowanie splajnów lub pewnego rodzaju średniej, np. agreguj dane godzinowe do średnich dziennych. Możesz też narysować podzbiór danych, np. tylko jeden punkt dziennie w przykładzie przedziałów czasowych. Uważam więc, że twoim wyzwaniem jest nie tyle uzyskanie 20 milionów punktów, ile nawet 800 tysięcy na działce, ale to, jak skutecznie gromadzić dane w taki sposób, aby przekazać wiadomość, którą chcesz przekazać.

+3

Próbkowanie danych i kilkakrotne powtórzenie procesu pokazałoby również wzory ukryte w danych. –

+1

Zgadzam się z @ RomanLuštrik, jeśli wzorzec powtarza się dla próbek o wartości 10.000 punktów, wiesz, że wzór jest stały (również stacjonarny). Jeśli nie, próbka 10.000 punktów nie jest wystarczająca. –

0

czy rozszerzenie dostępnej pamięci przy pomocy memory.limit(size=2000) (lub czegoś większego) jest pomocne?

3

wykreślanie bezpośrednio na urządzenie plików rastrowych (na przykład wywołanie png()) jest znacznie szybsze. Próbowałem drukować rnorm(100000), a na moim laptopie działka X11 cairo zajęła 2.723 sekundy, natomiast urządzenie png skończyło się w 2.001 sekundach. z 1 milionem punktów, liczby to 27,959 i 19,954 sekundy.

Używam Fedory Linux, a tutaj jest kod.

f = function(n){ 
x = rnorm(n) 
y = rnorm(n) 
png('test.png') 
plot(x, y) 
dev.off()} 

g = function(n){ 
x = rnorm(n) 
y = rnorm(n) 
plot(x, y)} 

system.time(f(100000)) 
system.time(g(100000)) 
4

Pakiet hexbin wykreślić hexbins zamiast rozrzutu dla par zmiennych jak sugeruje Ben Bolker w Speed up plot() function for large dataset pracował dla mnie przez 2 milionów płyt dość z 4GB pamięci RAM. Ale nie udało się uzyskać 200 milionów rekordów/wierszy dla tego samego zestawu zmiennych. Próbowałem zmniejszyć rozmiar bin, aby dostosować czas obliczeń w porównaniu do użycia pamięci RAM, ale to nie pomogło.

W przypadku 20 milionów rekordów można wypróbować sześcioboki z wartością xbins = 20,3040, aby rozpocząć.

1

Zwiększenie pamięci za pomocą memory.limit() pomogło mi ... To jest do plotowania z ggplot prawie 36 tys. Rekordów.

Powiązane problemy