www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Групповая манипуляция в R - 3

Дата публикации Oct 3, 2019

Если вы не читали вторую часть серии анализа данных R, просим вас прочитать следующую статью, в которой мы обсуждалиСтатистическая визуализация в R,

Содержимое этой статьи основано на нескольких книгах, которые я представил во время своих дней IIM-B.

R для всех - Джаред П. Ландер

Практическая наука о данных с R - Нина Зумель и Джон Маунт

Все блоки кода, обсуждаемые в статье, представлены в виде R-разметки вGithub ссылка,

Общее практическое правило для анализа данных заключается в том, что манипулирование данными или манипулирование данными требует 80% усилий. Это часто требует повторных операций с различными разделами данных -split-apply-combine, То есть мы разбиваем данные на отдельные разделы на основе некоторой метрики, применяем какое-либо преобразование к каждому разделу, а затем объединяем все разделы вместе. Существует много способов перебора данных в R, и мы увидим некоторые из наиболее удобных способов сделать это.

Применить Семья

R имеет встроенныйapplyфункции и все его родственники, такие какtapply,lapply,sapply а такжеmapply.Давайте посмотрим, как каждая функция имеет свое использование при манипулировании данными.

подать заявление

apply это первый член этой семьи, который обычно изучают пользователи, и он также является самым ограничительным по своей природе. Он должен быть использован наmatrixЭто означает, что все элементы должны быть одного типа, независимо от того, являются ли ониcharacter,numeric илиlogical, Если используется на каком-либо другом объекте, таком какdata.frame, он будет преобразован вmatrix первый.

Первый аргументapply это объект, с которым мы работаем. Второй аргумент - это поле для применения функции, при этом 1 означает, что нужно работать надrows и 2 означает работать надcolumns, Третий аргумент - это функция, которую мы хотим применить. Любой следующий аргумент будет передан функции.

Чтобы проиллюстрировать его использование, мы начнем с тривиального примера, суммируя строки или столбцыmatrix, Обратите внимание, что это может быть альтернативно выполнено с помощью встроенногоrowSums а такжеcolSums, дающий те же результаты.

theMatrix <- matrix(1:9, nrow=3)
apply(theMatrix,1,sum) ## Row Sum
apply(theMatrix,2,sum) ## Column Sum

Подобно большинствуRфункции, где у нас есть аргументna.rmобрабатывать пропущенные значенияNAв матрице или любой другой тип данных. Давайте добавим немногоNA кtheMatrix,

theMatrix[2,1] <- NA
apply(theMatrix,1,sum)

Добавляяna.rmаргументapply Функция будет игнорировать пропущенные значения и вычислять сумму по строкам и столбцам.

apply(theMatrix,1,sum,na.rm=TRUE)

радостно и круто

lapply работает аналогичноapply но он применяет функцию к каждому элементуlist и возвращать результаты какlist также.

theList <- list(A=matrix(1:9,3), B=1:5,C=matrix(1:4,2), D=2)
lapply(theList,sum)

Имея дело сlists иногда кажется немного громоздким, поэтому возвращать результатvector вместо,sapply может быть введен в эксплуатацию так же, какlapply, И вектор технически является формойlist, такlapply а такжеsapply также может принятьvector как их вклад

sapply(theList,sum)## Counting no of characters in each word
theNames <- c("Jared","Deb","Paul")
sapply(theNames,nchar)

mapply

Возможно, самый упускаемый из виду, но такой полезный член семьиmapply, который применяет функцию к каждому элементу несколькихlists, Часто, сталкиваясь с этим сценарием, люди прибегают к использованию цикла, который, безусловно, не является необходимым. Давайте построим два списка, чтобы понять использованиеmapply с примером. Мы используем встроенныйidentical Функция в R, чтобы увидеть, идентичны ли два списка, сравнивая элемент-элемент.

## build two lists
firstList <- list(A=matrix(1:16,4),B=matrix(1:16,2),c(1:5))
secondList <- list(A=matrix(1:16,4),B=matrix(1:16,8),c(15:1))## test element by element if they are identical
mapply(identical,firstList,secondList)

mapply также может использовать пользовательскую функцию вместо встроенной в R. Давайте построим простую функцию, которая добавляет количество строк каждого соответствующего элемента вlists,

simpleFunc <- function(x,y) {
NROW(x) + NROW(y)
}
mapply(simpleFunc,firstList,secondList)

Есть много других членовapply семьи, которые либо не слишком привыкли, либо были заменены функциями вplyr семьи. Они включают

  • tapply
  • rapply
  • eapply
  • vapply
  • по

совокупный

Люди, которые привыклиSQL Терминология, как правило, хочет выполнять группировку и агрегацию как свою первую задачу R. Способ сделать это состоит в том, чтобы использовать точно названныйaggregate функция. У нас есть несколько способов позвонить,aggregateи мы увидим наиболее удобные способы вызова с помощьюformula нотации.

formulasсостоят из левой стороны и правой стороны, разделенных тильдой(~), Использование методологии формул аналогично тому, как мы создавали графику с использованием ggplot2 в нашей предыдущей статье. Левая сторона представляет переменную, по которой мы хотим выполнить вычисление, а правая сторона представляет одну или несколько переменных, по которым мы хотим сгруппировать вычисления. Чтобы продемонстрировать использование агрегата, мы однажды прибегнем к данным об алмазах в ggplot2.

require(ggplot2)
data(diamonds)
head(diamonds)

В качестве первого примера мы рассчитаемaverage цена за каждый вид огранки в данных алмазов. Первый аргументaggregateэтоformulaуказав, что цена должна быть разбита на разрез. Второй аргумент - это данные для использования, в данном случае, алмазов. Третий аргумент - это функция, применяемая к каждому подмножеству данных.

aggregate(price~cut, diamonds,mean)

Обратите внимание, что мы указали только имя столбца и не должны были идентифицировать данные, потому что это указано во втором аргументе. После третьего аргумента, указывающего функцию, дополнительные именованные аргументы этой функции могут быть переданы следующим образом.

aggregate(price~cut, diamonds,mean,na.rm=TRUE)

Чтобы сгруппировать данные по нескольким переменным, добавьте дополнительную переменную в правой части формулы, разделяя ее знаком плюс (+)

aggregate(price~cut + color, diamonds,mean)

Чтобы объединить две переменные, они должны быть объединены с использованиемcbind в левой части формулы.

aggregate(cbind(price,carat)~ cut + color,diamonds,mean)

Важно отметить, что из приведенного выше примера может быть предоставлена только одна функция, и, следовательно, она применяется к переменным. Чтобы применить более одной функции, проще использоватьdplyr илиdata.tableпакеты, которые расширяют и расширяют возможностиdata.frames,

Агрегирование данных является очень важным шагом в процессе анализа. Иногда это конечная цель, а иногда - подготовка к применению более совершенных методов. В этой статье мы увидели общие методологии для выполнения групповых манипуляций в R. В нашей следующей статье мы будем сравнивать и противопоставлять передовые методы групповых манипуляций, используя два универсальных пакетаdplyr а такжеdata.table,

Продвинутый спор данных в R - 4

Делитесь своими мыслями и поддержкой, комментируя и делясь статьей среди своих коллег.

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map