Основы статистической обработки педагогической информации. Денис Владимирович Соломатин
Чтение книги онлайн.

Читать онлайн книгу Основы статистической обработки педагогической информации - Денис Владимирович Соломатин страница 24

СКАЧАТЬ Приведём пример, в котором сначала все записи группируются по датам и ранжируются, а потом фильтрация оставляет в строках значения, имеющие наибольший и наименьший из рангов в группе. Для сравнения, вызов функции range(неотмененные$dep_time) вернёт список, состоящий из наибольшего и наименьшего значений переменной dep_time:

      неотмененные %>% group_by (year, month, day) %>%

      mutate(ранжирование = min_rank(desc(dep_time))) %>%

      filter(ранжирование %in% range(ранжирование) )

      Ранее в вычислениях уже использовалась функция n(), которая вызывается без аргументов, и возвращает размер текущей группы. Чтобы посчитать количество непустых значений в группе х, используется конструкция sum(!is.na(x)), а чтобы подсчитать число различных (уникальных) значений вызывается n_distinct(x). Например, вычислим, какие направления имеют наибольшее количество перевозчиков:

      неотмененные %>% group_by(dest) %>%

      summarise(перевозчики= n_distinct(carrier)) %>%

      arrange(desc(перевозчики))

      Подсчеты значений настолько востребованы, что в пакете dplyr выделена отдельная функция count() для этого. Подсчитаем число повторений каждого направления, хранящихся в переменной dest таблицы неотмененных авиарейсов:

      неотмененные %>% count(dest)

      При необходимости указывается параметр веса каждого слагаемого (wt). Например, это можно использовать для подсчета общей суммы количества миль, которые пролетел самолет с фиксированным бортовым номером, взятым из поля talinum в базе неотмененных рейсов:

      неотмененные %>% count(tailnum, wt = distance)

      Подсчет числа значений удовлетворяющих логическому выражению, sum(x > 777), или их среднее количество, mean(y == 0), предполагает, что в связке с числовыми функциями TRUE преобразуется в 1, а FALSE в 0. Это делает функции sum() и mean() очень востребованными: sum(x) возвращает количество значений TRUE для аргумента x, а mean(x) возвращает их долю. Вычислим, сколько неотмененных рейсов было до 6 утра по данным за каждые сутки, это обычно указывает на задержку с предыдущего дня:

      неотмененные %>% group_by(year, month, day) %>%

      summarise(утренние_рейсы = sum(dep_time < 600))

      Какова доля неотмененных рейсов, задержавшихся более часа:

      неотмененные %>% group_by(year, month, day) %>%

      summarise(часовая_задержка = mean(arr_delay >= 61))

      При группировании по нескольким переменным, каждая новая сводка выносится на новый уровень группировки. Это облегчает восприятие и постепенно упрощает данные:

      группы_по_дням <– group_by(flights, year, month, day)

      (сводка_по_дням <– summarise(группы_по_дням, полётов = n()))

      (сводка_по_месяцам <– summarise(сводка_по_дням, полётов = sum(полётов)))

      (сводка_за_год <– summarise(сводка_по_месяцам, полётов = sum(полётов)))

      Будьте осторожны при постепенном сворачивании выборки, это приемлемо для итоговых сумм и счетчиков, но нужно не забывать про такие характеристики, как медиана и отклонение, анализ результатов свёртки принципиально невозможен в ранговой статистике. Другими словами, сумма внутригрупповых сумм является общей суммой, но медиана внутригрупповых медиан не будет равна общей медиане, о последнем свойстве порой сознательно забывают при выведении нужных результатов из различных СКАЧАТЬ