2013-02-28 1 views
2

Я работаю с довольно большими наборами данных (около 4 миллионов строк в месяц с 25 числовыми атрибутами и 4 факторами). Я хотел бы создать график, который содержит в месяц (за последние 36 месяцев) коробку для каждого числового атрибута для каждого продукта (один из 4-х факторных атрибутов).Можно ли объединить отдельные сводки ячеек в один и создать объединенный график?

Так как пример для продукта А:

    - 
     _    |   - 
    _|_   |   _|_ 
    | |   |  | | 
    | |   _|_  | | 
    | |   | |  |---| 
    | |   |---|  | | 
    |---|   | |  | | 
    |_ _|   | |  |_ _| 
     |   |_ _|  | 
     |    |   | 
     -    |   - 
        - 

-------------------------------------------------------------- 
    jan '10  feb '10 mar '10 ................... feb '13 

Но так как это довольно большие наборы данных я буду работать с I хотел бы несколько советов, чтобы начать работу, как подойти. Моя идея (но я не уверен, если это возможно), чтобы

  • а) извлечение данных в месяц за продукт
  • б) создать boxplot для этого конкретного месяца (так скажем jan'10 для продукт А)
  • с) хранить сводные данные boxplot где
  • д) повтор переменного тока для всех месяцев до февраля '13
  • е) объединить все сохраненное boxplot сводные данные в одну
  • е) построить комбинированный boxplot g) повторить af для всех других продуктов

Так что мой главный вопрос: Можно ли комбинировать отдельные сводки в одном и создать комбинированный график, как указано выше?

Любая помощь будет оценена,

Спасибо

+0

Чтобы начать работу, вы можете делать такие вещи, как 'result <- boxplot (1: 10, plot = FALSE)', а затем 'bxp (result)' See '? Boxplot' и'? Bxp' – thelatemail

ответ

1

Вот длинная рука пример, который вы, вероятно, можете приготовить что-нибудь вокруг:

чтения в отдельных наборах данных - вы можете перезаписать одни и те же данные или обернуть этот шаг в функции учитывая большое данные, которые вы используете.

dset1 <- 1:10 
dset2 <- 10:20 
dset3 <- 20:30 

магазин некоторые boxplot информация, обратите внимание на plot=FALSE

result1 <- boxplot(dset1,plot=FALSE,names="month1") 
result2 <- boxplot(dset2,plot=FALSE,names="month2") 
result3 <- boxplot(dset3,plot=FALSE,names="month3") 

Группа вверх данных и сюжет с bxp

mylist <- list(result1, result2, result3) 
groupbxp <- do.call(mapply, c(cbind, mylist)) 
bxp(groupbxp) 

Результат:

enter image description here

+0

Это было именно то, что я искал .... Большое спасибо ... таким образом, я могу ежемесячно обновлять обзорный график, добавляя вычисленный boxplot к списку ... great –

+0

Хорошо ... играли с ним (извините, совершенно новые к R) ... но еще не полностью понимая, что делает do.call (mapply, c (cbind, mylist)) функция делает .... –

+1

@GeoffreyStoel - это: http://stackoverflow.com/questions/15148451/cbind-items-from-multiple-lists-recursively Он объединяет отдельные результаты boxplot ('result1',' result2' ...) вместе в один объект, так что 'bxp' может отображать все сразу. На техническом уровне он создает вызов привязки столбцов или '? Cbind' каждого элемента каждого из (' result1', 'result2' ...) вместе. Попробуйте сравнить то, что напечатано для 'mylist' vs' groupbxp', и оно должно быть немного яснее. – thelatemail

0

Вы не сможете предсказать с абсолютной точностью, что значения «fivenum» значений будет для комбинированной сборки значений. Подумайте о ситуации с двумя группами, для которых у вас есть 75-й процентили в каждой группе и подсчет наблюдений в каждой группе. Предположим, что процентили не равны. Вы не можете просто взять взвешенное среднее процентилей, чтобы получить 75-й процентиль агрегированных значений. См. Справочную страницу для ?boxplot.stats. Я бы подумал, однако, что вы можете приблизиться, используя медианные значения коллекций fivenum. Это может быть место для начала экзаменов.

mo.mtx <- tapply(dat$values, dat$month, function(mo.dat) c(fivenum(mo.dat), length(mo.dat)) 
matplot(mo.mtx[, 1:5] , type="l")