Привет, Хабр!
Библиотека dplyr в R позволяет манипулировать данными, проводить фильтрацию, выборку, сортировку, группировку данных и многое другое.
В этой статье как раз и рассмотрим эту библиотеку!
Для начала установим:
install.packages("dplyr")
Основные функции dplyr
Функция filter()
используется для выбора строк из данных, которые соответствуют определенным условиям:
library(dplyr)
# создаем фрейм данных с информацией о студентах
students <- data.frame(
name = c("Alice", "Bob", "Charlie", "David"),
age = c(22, 25, 21, 24),
grade = c("A", "B", "C", "A")
)
# фильтруем данные, чтобы выбрать студентов, старше 21 года
filtered_students <- filter(students, age > 21)
print(filtered_students)
Функция select()
используется для выбора определенных столбцов из данных:
# выбираем только столбцы с именами студентов и их оценками
selected_data <- select(students, name, grade)
mutate()
позволяет создавать новые переменные на основе существующих данных:
# создаем новую переменную для студентов с возрастом более 23 лет
mutated_data <- mutate(students, senior = ifelse(age > 23, "Yes", "No"))
print(mutated_data)
summarize()
используется для вычисления сводной информации по данным:
# вычисляем средний возраст студентов
summary_data <- summarize(students, average_age = mean(age))
print(summary_data)
arrange()
используется для сортировки данных по определенным столбцам:
# сортируем студентов по возрасту по возрастанию
sorted_data <- arrange(students, age)
print(sorted_data)
Работа с группами данных
group_by()
используется для группировки данных по одному или нескольким столбцам:
library(dplyr)
# создаем фрейм данных с информацией о продажах
sales <- data.frame(
product = c("A", "B", "A", "B", "A"),
amount = c(100, 150, 200, 120, 180)
)
# группируем данные по продукту
grouped_sales <- group_by(sales, product)
print(grouped_sales)
После группировки данных можно применить summarize()
для вычисления статистик по каждой группе:
summary_data <- summarize(grouped_sales, avg_sales = mean(amount))
print(summary_data)
Можно вычислить несколько статистик сразу для каждой группы, снова юзая summarize()
:
summary_data <- summarize(grouped_sales,
avg_sales = mean(amount),
max_sales = max(amount))
print(summary_data)
Конечно, можно выполнять и другие операции, например, фильтрацию или создание новых переменных:
# фильтрация данных для каждой группы, оставляя только значения выше среднего
filtered_data <- grouped_sales %>%
filter(amount > mean(amount))
print(filtered_data)
Слияние и объединение данных
Методы объединения данных:
left_join()
: объединение данных по ключу из первого (левого) набора данных.right_join():
объединение данных по ключу из второго (правого) набора данных.inner_join()
: возвращает только строки, которые имеют совпадающие значения ключей в обоих наборах данных.full_join()
: возвращает все строки из обоих наборов данных, дополняя пропущенные значения NA, если данных не хватает.
# пример
df1 <- data.frame(id = c(1, 2, 3),
name = c("Ivan", "Kolya", "Nastya"))
df2 <- data.frame(id = c(2, 3, 4),
age = c(25, 30, 35))
# left_join(): объединяем данные по ключу "id", оставляя все строки из df1
left_merged <- left_join(df1, df2, by = "id")
print(left_merged)
# right_join(): объединяем данные по ключу "id", оставляя все строки из df2
right_merged <- right_join(df1, df2, by = "id")
print(right_merged)
# inner_join(): объединяем данные по ключу "id", оставляя только строки с совпадающими значениями ключа
inner_merged <- inner_join(df1, df2, by = "id")
print(inner_merged)
# full_join(): объединяем данные по ключу "id", возвращая все строки из обоих наборов данных
full_merged <- full_join(df1, df2, by = "id")
print(full_merged)
Примеры использования
Анализ данных о продажах:
library(dplyr)
# грузим данные о продажах
sales_data <- read.csv("sales_data.csv")
# фильтрация данных для определенного периода времени
sales_filtered <- sales_data %>%
filter(Date >= as.Date("2023-01-01") & Date <= as.Date("2024-12-31"))
# группировка данных по продукту и вычисление суммарных продаж
sales_summary <- sales_filtered %>%
group_by(Product) %>%
summarise(Total_Sales = sum(Sales))
print(sales_summary)
Обработка данных клиентов:
library(dplyr)
customer_data <- read.csv("customer_data.csv")
# фильтрация данных для определенной страны
customer_filtered <- customer_data %>%
filter(Country == "Spain")
# создание новой переменной для расчета возраста клиентов
customer_processed <- customer_filtered %>%
mutate(Age = year(now()) - Year_of_Birth)
# выборка нужных столбцов
customer_selected <- customer_processed %>%
select(Name, Age, Gender, Email)
print(customer_selected)
Небольшой анализ трафика сайта:
library(dplyr)
web_traffic <- read.csv("web_traffic.csv")
# фильтрация данных для определенной страны и периода времени
traffic_filtered <- web_traffic %>%
filter(Country == "USA", Date >= as.Date("2023-01-01"))
# вычисление средней продолжительности сеанса
average_session_duration <- traffic_filtered %>%
summarise(Avg_Session_Duration = mean(Session_Duration))
print(average_session_duration)
Сводная статистика по сотрудникам и их ЗП:
library(dplyr)
employee_data <- read.csv("employee_data.csv")
# группировка данных по отделу и вычисление средней зарплаты
salary_summary <- employee_data %>%
group_by(Department) %>%
summarise(Avg_Salary = mean(Salary))
# сортировка результатов по убыванию средней зарплаты
salary_summary_sorted <- salary_summary %>%
arrange(desc(Avg_Salary))
print(salary_summary_sorted)
Все необходимые инструменты и методы для манипуляции с данными и анализа можно освоить на онлайн-курсах OTUS: в каталоге можно посмотреть список всех программ, а в календаре — записаться на открытые уроки.
BogdanPetrov
С одной стороны, очередное упоминание R и dplyr это круто. С другой стороны - заметка странноватая и непонятно для кого. Новичкам вряд ли будет что-то понятно, так как нет ни слова про оператор
%>%
. Приведены функции dplyr, но не все и нет ссылки на документацию: https://dplyr.tidyverse.org/reference/index.html. Для чтения CSV используетсяread.csv
, вместоreadr::read_csv
из того же Tidyverse.