CoderCastrov logo
CoderCastrov
Парсер веб-страниц

Парсинг веб-страниц с использованием R (Популярные жанры фильмов 2015–2020 годов)

Парсинг веб-страниц с использованием R (Популярные жанры фильмов 2015–2020 годов)
просмотров
6 мин чтение
#Парсер веб-страниц

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 годов было много поклонников фильмов в жанре "экшн".

Вот и все, спасибо за чтение. Надеюсь, это будет полезно 😊

Вассаламу алайкум Вр. Вб.


Основные источники: