@ flodin Вам было бы полезно предоставить пример кода, который вы используете для чтения в таком файле R. Я регулярно работаю с наборами данных того размера, о котором вы упомянули, и у вас нет проблем, о которых вы упоминаете. Одна вещь, которая может вас кусать, если вы не часто используете R, это то, что если вы не говорите R, что такое тип столбца R, то сначала нужно выполнить некоторый поиск по файлу, и все это требует времени. Посмотрите на аргумент colClasses
в ?read.table
.
Для вашего примера я бы сделал:
dat <- read.csv("foo.csv", colClasses = c(rep("character",2), rep("integer", 3)))
затем постобработка переменных date
и time
в класс объектов даты и времени R, таких как POSIXct
, с чем-то вроде:
dat <- transform(dat, dateTime = as.POSIXct(paste(date, time)))
В качестве примера, давайте прочитаем в вашем примере набор данных, скопируем его 50 000 раз и запишем, а затем предложим время для различных способов чтения, с foo
, содержащим ваши данные:
> foo <- read.csv("log.csv")
> foo
date time PS.Eden.Space.used PS.Old.Gen.Used
1 2011-06-28 00:00:03 45004472 184177208
2 2011-06-28 00:00:18 45292232 184177208
PS.Perm.Gen.Used
1 94048296
2 94048296
Повторите это, 50000 раз:
out <- data.frame(matrix(nrow = nrow(foo) * 50000, ncol = ncol(foo)))
out[, 1] <- rep(foo[,1], times = 50000)
out[, 2] <- rep(foo[,2], times = 50000)
out[, 3] <- rep(foo[,3], times = 50000)
out[, 4] <- rep(foo[,4], times = 50000)
out[, 5] <- rep(foo[,5], times = 50000)
names(out) <- names(foo)
Выпиши
write.csv(out, file = "bigLog.csv", row.names = FALSE)
Время загрузки наивного и правильного пути:
system.time(in1 <- read.csv("bigLog.csv"))
system.time(in2 <- read.csv("bigLog.csv",
colClasses = c(rep("character",2),
rep("integer", 3))))
Что очень быстро на моем скромном ноутбуке:
> system.time(in1 <- read.csv("bigLog.csv"))
user system elapsed
0.355 0.008 0.366
> system.time(in2 <- read.csv("bigLog.csv",
colClasses = c(rep("character",2),
rep("integer", 3))))
user system elapsed
0.282 0.003 0.287
Для обоих способов чтения в.
Что касается печати, графика может быть немного медленной, но в зависимости от вашей ОС это может быть немного ускорено путем изменения устройства, которое вы печатаете - в Linux, например, не используйте устройство по умолчанию X11()
, который использует Cairo, вместо этого попробуйте старое окно X без сглаживания. Кроме того, что вы надеетесь увидеть с набором данных размером до 100 000 наблюдений на графическом устройстве с небольшим количеством пикселей? Возможно, попытайтесь переосмыслить вашу стратегию анализа данных - никакое программное обеспечение для статистики не сможет спасти вас от того, что вы сделали что-то дурное.
Звучит так, как будто вы разрабатываете код / анализ в процессе работы над полным набором данных. Было бы гораздо разумнее просто работать с небольшим подмножеством данных при разработке нового кода или новых способов просмотра ваших данных, скажем, со случайной выборкой из 1000 строк, и работать с этим объектом вместо всего объекта данных. Таким образом вы защититесь от случайного медленного выполнения:
working <- out[sample(nrow(out), 1000), ]
например. Затем используйте working
вместо out. В качестве альтернативы, во время тестирования и написания скрипта установите аргумент nrows
, чтобы сказать 1000
в вызове для загрузки данных в R (см. ?read.csv
). Таким образом, пока вы тестируете, вы читаете только подмножество данных, но одно простое изменение позволит вам запустить ваш скрипт для полного набора данных.
Для наборов данных такого размера, о которых вы говорите, я не вижу никаких проблем при использовании R. Ваша точка зрения о том, что вы не стали достаточно опытным, чтобы использовать R, будет более чем вероятно применима к другим языкам сценариев, которые могут быть предложены, например, как питон. Существует препятствие для входа, но этого следует ожидать, если вы хотите использовать мощь такого языка, как python или R. Если вы пишете сценарии, которые хорошо комментируются (вместо простого подключения к командной строке), и сосредоточитесь на несколько ключевых операций импорта / манипуляции с данными, немного прорисовки и некоторого простого анализа, освоение этого небольшого подмножества языка не займет много времени.