Добавил:
По своей натуре перфекционист. Поэтому люблю все аккуратно оформлять и упорядочивать, складывать по полочкам. Вот, не пропадать же добру, нажитому за четыре кропотливых семестра. Тут я выложил все мои ответы, курсовые, отчеты и некоторые ДЗ. Они могут вам помочь для получения зачета или сдачи экзамена. Если чего-то не нашли в папочках, то попытайте удачу в разделе НЕОТСОРТИРОВАННОЕ на моей страничке, там все 4 семестра разложены по папкам. ГРУППА КТ-43-15. Годы обучения 2015-2019. Коллекция будет пополняться. Что ж, удачки :З Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
86
Добавлен:
15.09.2017
Размер:
451.1 Кб
Скачать

При просмотре структуры встроенных данных mtcars можно заметить, что тип двигателя и тип коробки передач представляют из себя 0 и 1. В таком виде сложно с первого взгляда понять к какой категории относится та или иная строка. Поэтому превратим наши 0 и 1 в более удобочитаемый вид. В функции factor () сначала указывается переменная, которую нужно превратить в категорию, после указываются наименования этих категорий.

df$vs <- factor(df$vs , labels = c("V", "S")) df$am <- factor(df$am , labels = c("Auto", "Manual"))

Ранее мы познакомились с некоторыми описательными статистиками (mean, median). Ниже перечислены ещё две дополнительные описательные статистики: sd - стандартное отклонение, range - размах (минимальное и максимальное значения).

median(df$mpg) mean(df$disp) sd(df$hp) range(df$cyl)

mean_disp <- mean(df$disp)

Описательные статистики можно находить не только для всей переменной, но и для тех значений, которые соответствуют какому-то условию.

mean(df$mpg[df$cyl == 6])

Или нескольким условиям.

mean(df$mpg[df$cyl == 6 & df$vs == "V"])

sd(df$hp[df$cyl != 3 & df$am == "Auto"])

Что же делать, если мы хотим создать одну или несколько описательных статистик для какой-либо группы или категории? Конечно, можно найти несколько раз среднее значений для одной переменной у такой-то категории, потом у следующей и так далее, и так далее, а потом объединить это все в новый датафрейм. Но не лучше ли будет, использовать какую-нибудь готовую функцию, чтобы это все упростить? Рассмотрим функцию aggregate (). Сначала указывается к каким данным будут применяется описательные статистики. Далее указывается по каким категориям полученные данные будут группироваться. И в конце указывается формула, которая будет применена к выбранным данным.

?aggregate

mean.hp.vs <- aggregate(x = df$hp, by = list(df$vs), FUN = mean)

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

colnames(mean.hp.vs) <- c("VS", "Mean HP")

Кроме стандартной структуры записи, агрегирование можно записать в виде формулы, словно в функциональном программировании:

aggregate(hp ~ vs, df, mean)

aggregate(hp ~ vs + am, df, mean)

aggregate(x = df$hp, by = list (df$vs, df$am), FUN = mean)

Рассмотрим еще несколько примеров агрегирования. В ниже приведенном коде можно заметить функцию c(). Как мы помним, она объединяет несколько значений в один вектор. Но если раньше при ее использовании в индексах у нас выводились только те значения, которые находятся в c(), то при исполнении данного куска кода наоборот выводятся все значения, кроме указанных. Это происходит благодаря знаку минуса. При записи функции агрегирования, в которой несколько переменных для подсчета, в виде формулы необходимо выбранные переменные объединить при помощи функции cbind ():

aggregate(x = df[,-c(8,9)], by = list(df$am), FUN = median)

aggregate(df[,c(1,3)], by = list(df$am, df$vs), FUN = sd)

aggregate(cbind(mpg, disp) ~ am + vs, df, sd)

В R существует множество пакетов для обработки данных. Какие-то лучше в одном случае, какие-то в другом, но сейчас мы

поговорим о пакете “psych”. Чтобы начать работать с любым пакетом в R, сначала надо его установить. Установка происходит либо при помощи функции install.packages (), в скобках которых указывается имя устанавливаемого пакета, либо через системное меню. Установка пакета не позволит немедленно приступить к работе с ним. После установки необходимо запустить пакет при помощи функции library ().

install.packages("psych")

library(psych)

?describe

Итак, до этого мы использовали только один тип описательной статистики. Но что если мы хотим вывести сразу несколько видов? Для этого мы и воспользуемся пакетом “psych”. Для начала воспользуемся функцией describeBy(). Основную структуру этой функции можно описать следующим образом: describeBy (данные для описательных статистик, данные для разбиения по категориям, вывод результатов в виде датафрейма или списка, количество чисел после запятой, сокращенный или расширенный вариант расчета описательных статистик):

descr2 <- describeBy(x = df[,-c(8,9)], group = df$vs, mat = T, digits = 1)

descr3 <- describeBy(x = df[,-c(8,9)], group = df$vs, mat = T, digits = 1, fast = T)

describeBy(df$qsec, group = list(df$vs, df$am), digits = 1, fast = T)

При работе с данными можно встретиться с пропущенными значениями. Естественно с пустотой невозможно выполнить логические или арифметические операции. Это все равно что пытаться кидать вещи в черную дыру, надеясь на то, что через некоторое время можно будет их оттуда достать. Так что же можно сделать с пропущенными значениями. Например, можно найти все пустые позиции при помощи функции is.na (). Или удалить все пропущенные значения с помощью аргумента na.rm.

sum(is.na(df))

df$mpg[1:10] <- NA

mean(df$mpg, na.rm = T)

Итак, мы разобрались, как получать описательные статистики. Но, как правило, они дополняются какими-то графиками на их основе. Так что далее рассмотрим, как можно работать с различными видами графиков в R. В целом структура графиков между собой не сильно различается: вид_графика(данные, подпись оси х, подпись оси у, наименование графика):

hist(df$mpg, breaks = 20, xlab = "MPG", main ="Histogram of MPG",

col = "green", cex.lab = 1.3, cex.axis = 1.3)

plot(density(df$mpg), xlab = "MPG", main ="Density of MPG",

col = "green", cex.lab = 1.3, cex.axis = 1.3)

Соседние файлы в папке R Language лабы (Сковорцов)