Парсинг веб-страниц с использованием R (Популярные жанры фильмов 2015–2020 годов)
Assalamualaikum Wr. Wb.
Привет, друзья!
В этой моей первой статье я хочу узнать, какие жанры фильмов пользуются популярностью у зрителей в период с 2015 по 2020 год, и какова средняя прибыль от фильмов каждого года. Чтобы узнать это, я буду парсить данные с веб-сайта IMDb (Internet Movie Database) с помощью программного обеспечения R. Для этого я буду использовать данные о фильмах, отсортированных по популярности в 2015, 2016, 2017, 2018, 2019 и 2020.
Для парсинга данных с веб-сайта IMDb необходимо установить пакеты "xml2" и "rvest" и активировать их с помощью следующего кода.
install.packages ("xml2")
library (xml2)
install.packages ("rvest")
library (rvest)
После установки обоих пакетов мы получим данные с веб-сайта IMDb. (В этом примере используются данные за 2015)
# Получение данных с веб-сайта
адрес_веб-страницы <- '[https://www.imdb.com/search/title/?count=100&release_date=2015,2015&title_type=feature'](https://www.imdb.com/search/title/?count=100&release_date=2015%2C2015&title_type=feature%27)
веб-страница <- read_html(адрес_веб-страницы)
веб-страница
Затем мы получим данные о жанрах фильмов в 2015 году с веб-сайта IMDb.
данные_жанра_веб-страницы <- html_nodes(веб-страница, '.genre')
данные_жанра_веб-страницы
Вот результат получения данных о жанрах фильмов.
жанры_2015 <- html_text(данные_жанра_веб-страницы)
жанры_2015 <- gsub("\n", "", жанры_2015)
жанры_2015 <- gsub(" ", "", жанры_2015)
жанры_2015 <- gsub(",.*", "", жанры_2015)
жанры_2015 <- as.factor(жанры_2015)
жанры_2015
Таким образом, получаем результат для данных о жанрах фильмов.
жанры_2015
Затем мы получим данные о рейтинге фильмов и их доходе в 2015 году с помощью следующего кода.
данные_рейтинга_веб-страницы <- html_nodes(веб-страница, '.ratings-imdb-rating strong')
данные_рейтинга_веб-страницы
Вот результат получения данных о рейтинге фильмов.
рейтинг_2015 <- html_text(данные_рейтинга_веб-страницы)
рейтинг_2015 <- as.numeric(рейтинг_2015)
рейтинг_2015
Затем мы получим данные о доходе фильмов в 2015 году с помощью следующего кода.
данные_дохода_веб-страницы <- html_nodes(веб-страница, '.ghost~ .text-muted+ span')
доход_2015 <- html_text(данные_дохода_веб-страницы)
доход_2015
Затем мы очистим данные о доходе и преобразуем их из текста в числовой формат, а также проверим количество данных и найдем среднее значение дохода с помощью следующего кода.
доход_2015 <- gsub("M", "", доход_2015)
доход_2015 <- substring(доход_2015, 2, 6)
доход_2015
length(доход_2015)
summary(доход_2015)
Затем мы заменим отсутствующие данные дохода на "NA" и преобразуем данные дохода из текста в числовой формат с помощью следующего кода.
for (i in c(3, 23, 51, 66, 73, 76, 85, 92, 97)) {
a <- доход_2015[1:(i-1)]
b <- доход_2015[i:length(доход_2015)]
доход_2015 <- append(a, list("NA"))
доход_2015 <- append(доход_2015, b)
}
доход_2015 <- as.numeric(доход_2015)
доход_2015
length(доход_2015)
summary(доход_2015)
Затем мы соберем все эти данные в виде фрейма данных с помощью следующего кода.
коллекция_данных_фильмов <- data.frame(Жанр = жанры_2015, Рейтинг = рейтинг_2015, Доход = доход_2015)
коллекция_данных_фильмов
str(коллекция_данных_фильмов)
Вот результат выполнения кода выше.
коллекция_данных_фильмов
Затем мы визуализируем эти данные с помощью пакета "ggplot2", установив его и вызвав его с помощью следующего кода.
install.packages("ggplot2")
library(ggplot2)
Затем мы визуализируем данные в виде столбчатой диаграммы и точечной диаграммы с помощью следующего кода.
# Столбчатая диаграмма
qplot(data = коллекция_данных_фильмов, рейтинг_2015, fill = жанры_2015, bins = 30)
# Точечная диаграмма
ggplot(коллекция_данных_фильмов, aes(x = жанры_2015, y = доход_2015)) +
geom_point(aes(size = рейтинг_2015, col = жанры_2015))
Вот результат выполнения кода выше.
Столбчатая диаграмма:
Точечная диаграмма:
Из этих двух графиков видно, что фильмы жанра "экшн" имеют самый высокий рейтинг и самый высокий доход среди фильмов других жанров в 2015 году.
Для парсинга данных с веб-страниц IMDb за 2016–2020 годы вы можете использовать те же самые шаги и изменить веб-адрес и значения дохода, которые не отображаются. Данные о фильмах по популярности каждого года можно получить по следующим ссылкам: 2016**, 2017, 2018, 2019 и **2020.
В 2020 году на веб-сайте IMDb есть несколько фильмов, для которых отсутствует рейтинг. Поэтому мы должны вручную заполнить эти значения и заменить пустые значения рейтинга на "NA", как мы сделали с пустыми значениями дохода. Для этого можно использовать следующий код.
# Замена отсутствующих данных рейтинга на NA
for (i in c(4, 5, 19, 43, 46, 55, 64, 81, 84, 93, 95, 97)) {
a <- рейтинг_данных[1:(i-1)]
b <- рейтинг_данных[i:length(доход_данных)]
рейтинг_данных <- append(a, list("NA"))
рейтинг_данных <- append(рейтинг_данных, b)
}
Заметки
Необходимо помнить, что популярность фильмов постоянно меняется и влияет на порядок фильмов с отсутствующими значениями, поэтому порядок фильмов и отсутствующие значения могут отличаться от приведенных выше. Так что вам просто нужно изменить их в соответствии с последними данными.
Вот краткое описание данных о популярных фильмах с 2016 по 2020 год.
2016 год
2017 год
2018 год
2019 год
2020 год
Средний доход популярных фильмов с 2015 по 2020 год
Затем мы визуализируем средний доход популярных фильмов с 2015 по 2020 год. Здесь мы будем использовать линейный график с таким синтаксисом.
rata_gross <- c (95.95, 91.77, 104.18, 103.26,
149.74, 102.80)
tahun <- c ("2015", "2016", "2017", "2018",
"2019", "2020")
rata_rata = data.frame (tahun, rata_gross)
rata_rataplot (rata_rata, main = "Средний доход (прибыль) с 2015 по 2020 год",
type = "o", col = "red", lwd = 2, xlab = "год",
ylab = "Средний доход", pch = 15)
}
И получим следующий вывод.
Из линейного графика видно, что доход от фильмов снизился в 2016 году. Одним из факторов, которые, возможно, повлияли на снижение дохода, является увеличение стоимости билетов в кинотеатрах. Согласно отчету Национальной ассоциации владельцев кинотеатров, средняя стоимость билета в третьем квартале 2016 года составляла 8,51 доллара США (110 000 рублей). Затем средний доход от фильмов имеет тенденцию расти, и самый высокий средний доход был в 2019 году. Затем в 2020 году средний доход от фильмов резко снизился. Это связано с пандемией COVID-19, из-за которой люди не хотят выходить из дома, а также с отсрочкой релиза многих фильмов и временным закрытием кинотеатров, что привело к резкому снижению среднего дохода от фильмов в 2020 году.
Вот визуализация данных о популярных фильмах с 2016 по 2020 год с использованием столбчатой диаграммы и точечного графика.
2016 год
2017 год
2018 год
2019 год
2020 год
Тенденции жанров популярных фильмов в 2015, 2016, 2017, 2018, 2019 и 2020 годах
Из столбчатой диаграммы и точечного графика выше можно узнать, что жанр фильма, понравившийся обществу с 2015 по 2020 год, - это "экшн". Это видно из того, что фильмы в жанре "экшн" всегда занимают первое место за последние 6 лет. Помимо жанра "экшн", в 2016 году обществу также понравились фильмы в жанре "приключения" и "анимация". Однако жанр "приключения" имеет тенденцию снижаться в следующие годы до 2020 года.
Рекомендации для продюсеров фильмов
Исходя из проведенной визуализации, продюсерам фильмов следует сохранять качество фильмов в жанре "экшн". Если вы собираетесь снять фильм, сочетание жанра "экшн" с жанром "анимация" или обоими может быть хорошим вариантом, чтобы привлечь внимание общества к просмотру этого фильма. Это связано с тем, что в течение 2015-2020 годов было много поклонников фильмов в жанре "экшн".
Вот и все, спасибо за чтение. Надеюсь, это будет полезно 😊
Вассаламу алайкум Вр. Вб.
Основные источники:
- Хаким, Р. Б. Ф. (2019, 25 сентября). Парсинг с помощью R. https://medium.com/@986110101/web-scraping-dengan-r-53d07fb81fc9