Dplyr проще и чище, чем Pandas. Вы смеете переключиться?

Я был фанатом Python последние пару лет. Этот язык отлично подходит для науки о данных, и, будучи языком общего назначения, значительно упрощает работу с частями науки о данных, не связанных с наукой о данных. Но может ли R dplyr превзойти Python pandas в области исследования и подготовки данных? Да, может.

Сегодня мы увидим, как использовать 10 самых распространенных dplyr функций. Это еще не все, что может предложить пакет, поэтому полный список можно найти по этой ссылке. Мы проведем весь анализ с помощью набора данных Gapminder, доступного непосредственно в R.

Вот как импортировать все пакеты, которые нам понадобятся сегодня:

library(dplyr)
library(gapminder)

Начнем исследование со следующего раздела.

Выбрать

Команда выбора используется, когда мы хотим выбрать один или несколько столбцов. Думайте об этом как об операторе SELECT в SQL, где мы можем выбирать только интересующие столбцы, а другие оставлять нетронутыми.

Это первый способ использования select - путем перечисления всех столбцов, которые мы хотим сохранить:

gapminder %>% 
  select(country, year, lifeExp)

Другой метод - указать столбцы, которые мы хотим удалить - с префиксом -:

gapminder %>% 
  select(-continent)

фильтр

Команда filter эквивалентна ключевому слову WHERE в SQL, поскольку мы можем получить только то подмножество, которое нас интересует. Есть несколько способов использования этой команды, и все они показаны ниже.

Оставим только те строки, где указан год 1952:

gapminder %>% 
  filter(year == 1952)

Давайте добавим еще один фильтр - все еще 1952 год, но нам нужны данные только по Хорватии:

gapminder %>%
  filter(year == 1952, country == 'Croatia')

Это здорово, но как мы можем фильтровать по нескольким годам. Здесь пригодится оператор %in%:

gapminder %>%
  filter(year %in% c(1952, 1957), country == 'Croatia')

договариваться

Оператор arrange используется для сортировки данных по отдельным столбцам в возрастающем или убывающем порядке. По умолчанию используется возрастающий порядок. Это эквивалент ключевого слова ORDER BY в SQL.

Давайте отсортируем набор данных Gapminder по численности населения в порядке возрастания:

gapminder %>% 
  arrange(pop)

Проделаем то же самое в порядке убывания:

gapminder %>% 
  arrange(desc(pop))

отчетливый

Этот оператор используется для поиска уникальных элементов данного атрибута. Никаких дополнительных разъяснений не требуется, так что перейдем сразу к коду.

Вот как мы можем увидеть уникальные континенты в наборе данных:

gapminder %>% 
  distinct(continent)

мутировать

Оператор mutate используется для создания новых столбцов. Все остальные столбцы остаются нетронутыми во время этой операции.

Давайте воспользуемся этим, чтобы рассчитать ВВП страны, умножив численность населения на ВВП на душу населения:

gapminder %>%
  mutate(totalGdp = pop * gdpPercap)

трансмутировать

Этот оператор почти идентичен mutate, с той лишь разницей, что transmute не сохраняет другие атрибуты - сохраняется только новый.

Мы еще раз воспользуемся им для расчета общего ВВП, а затем сравним результаты с mutateoperator:

gapminder %>%
  transmute(totalGdp = pop * gdpPercap)

Как и было обещано, отображается только новый столбец totalGdp.

переименовать

Как следует из названия, этот оператор используется для переименования. Будьте осторожны с синтаксисом, так как мы должны сначала указать новое имя.

Давайте переименуем пару столбцов - lifeExp в lifeExpectancy и pop в population:

gapminder %>% 
  rename(lifeExpectancy = lifeExp, population = pop)

суммировать

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

Например, предположим, что мы хотим найти общую среднюю продолжительность жизни:

gapminder %>% 
  summarize(meanLifeExp = mean(lifeExp))

Мы можем связать других операторов, если захотим, скажем, найти среднюю продолжительность жизни в 2007 году:

gapminder %>% 
  filter(year == 2007) %>% 
  summarize(meanLifeExp = mean(lifeExp))

Это замечательно, но summarize наиболее полезен при использовании с операциями группировки. Давайте обсудим это дальше.

группа по

Мы можем использовать операторы группировки, чтобы использовать весь потенциал ранее обсужденных операторов, таких как summarize. Это эквивалент ключевого слова GROUP_BY в SQL, так что вы, вероятно, уже знакомы с ним.

Предположим, мы хотим найти среднюю продолжительность жизни на континенте - без оператора группировки обойтись невозможно:

gapminder %>% 
  group_by(continent) %>% 
  summarize(meanLifeExp = mean(lifeExp))

Мы можем связать несколько операторов вместе и выполнять группировку по нескольким столбцам. Например, давайте посмотрим, как найти среднюю продолжительность жизни на континенте, сгруппированную по годам (только 2002 и 2007 годы):

gapminder %>% 
  filter(year %in% c(2002, 2007)) %>% 
  group_by(continent, year) %>% 
  summarize(meanLifeExp = mean(lifeExp))

если еще

Это не ваш традиционный оператор, поскольку мы используем его внутри других операторов, таких как mutate. Это позволяет нам выполнять векторизованный оператор if-else без написания нескольких строк кода.

Давайте посмотрим, как мы можем сгруппировать по континентам и годам (только 2002 и 2007) и вычислить среднюю продолжительность жизни, а затем создать еще один столбец со значением Y, если средняя продолжительность жизни больше 70, и N иначе:

gapminder %>% 
  filter(year %in% c(2002, 2007)) %>% 
  group_by(continent, year) %>% 
  summarize(meanLifeExp = mean(lifeExp)) %>% 
  mutate(meanLifeExpOver70 = if_else(meanLifeExp > 70, 'Y', 'N'))

Напутственные слова

В конце концов, все, что было сделано в dplyr, можно сделать в pandas. Но согласитесь - dplyr делает это так легко, намного проще и чище. Сравнение между ними - потенциальная тема в другой раз, так что дайте мне знать, если вас это интересует.

Кроме того, дайте мне знать, какой из них вы предпочитаете и почему, и постарайтесь сохранить свое мнение беспристрастным.

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

Первоначально опубликовано на https://www.betterdatascience.com 26 октября 2020 г.