CoderCastrov logo
CoderCastrov
Фильм

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

Любимые жанры фильмов киноманов с 2015 по 2020 год (Парсинг веб-страниц с использованием R)
просмотров
6 мин чтение
#Фильм
Table Of Content

Assalamu’alaikum wr wb

Привет, друзья! Как дела?

В этой моей первой статье я решил узнать, какие жанры фильмов нравятся зрителям за последние 6 лет (с 2015 по 2020 год), а также какова средняя выручка от фильмов в каждый из этих годов. В общих чертах, для решения этой задачи нам понадобится 3 шага: парсинг данных с веб-сайта imdb.com, очистка данных и визуализация. (Полный синтаксис приведен в конце статьи)

Сначала мы будем парсить данные с веб-сайта imdb.com с использованием R. Для парсинга данных с веб-сайта imdb.com нам понадобятся пакеты "rvest" и "xml2".

После установки обоих пакетов мы определяем веб-адрес, с которого мы будем получать данные. В этот раз мы попробуем получить данные с следующего веб-сайта (imdb.com в 2018 году)

Используемый синтаксис:

определение веб-сайта

Затем мы получим данные о жанрах

Для получения этих данных нам понадобится расширение для Chrome под названием SelectorGadget, чтобы его скачать, следуйте изображениям ниже

найти в Google и нажать на первую ссылку нажать на добавить в Chrome нажать на значок расширения, появится маленькое окно внизу экрана

После установки SelectorGadget следующим шагом будет выбор жанра, как показано на следующем изображении

Текст «.genre», указанный стрелкой, будет использован как дополнение к синтаксису для парсинга данных, и вот синтаксис и его результат

Затем мы получим текстовые данные из вышеприведенного результата

Затем мы очистим эти данные, удалив символы «\n» и пустые пробелы

Поскольку один фильм может иметь несколько жанров, каждый фильм будет отнесен только к первому жанру в описании

Затем мы преобразуем текстовые данные жанров в факторы

Повторите шаги по получению и очистке данных для рейтинга и выручки

Получение данных о рейтинге:

получение данных о рейтинге получение текстовых данных преобразование в числовые данные

Получение данных о выручке:

получение текстовых данных о выручке удаление символов «$» и «M»

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

оказывается, только 87 фильмов имеют информацию о выручке

Затем давайте проверим, какие фильмы не имеют информации о выручке на этом веб-сайте

После ручной проверки заменим пустые значения на «NA» с помощью следующего синтаксиса

Затем преобразуем эти данные в числовые данные

Затем найдем сводку или результаты нескольких показателей централизации данных

Затем создадим фрейм данных из этих данных

Затем мы визуализируем эти данные с помощью следующего синтаксиса

И вот результат

Итак, парсинг данных за 2018 год завершен. Для 2015, 2016, 2017, 2019 и 2020 годы вы можете найти сами, заменив веб-адрес и пропущенные значения выручки. Вот результаты сводки и визуализации для каждого из этих годов

2015 год

2016 год

2017 год

2018 год

2019 год

2020 год

График линии для средней выручки фильмов с 2015 по 2020 год

График линии для средней выручки с 2015 по 2020 год

2015 год

2016 год

2017 год

2018 год

2019 год

2020 год

Итак, из визуализации выше видно, что зрители в 2015-2018 годах предпочитали фильмы жанра экшн, в то время как в 2019 и 2020 годах произошли изменения, и зрители больше предпочитают фильмы жанра драма и анимация. Поэтому рекомендуется продюсерам фильмов создавать фильмы жанра экшн с добавлением немного драмы/анимации.

Вот и все для моей первой статьи, надеюсь, она была полезной.

Wassalamu’alaikum wr wb

Ссылка на источник:

Полный синтаксис:

Установка пакетов xml2 и rvest

install.packages("xml2")
library("xml2")
install.packages("rvest")
library("rvest")

Определение веб-адреса

адрес_веб `https://www.imdb.com/search/title/?count=100&release_date=2018,2018&title_type=feature`
страница_веб `read_html(адрес_веб)`
страница_веб

Выбор нужной части для парсинга (длительность)

данные_длительности_страницы <- html_nodes(страница_веб,'.runtime')
данные_длительности_страницы
данные_длительности <- html_text(данные_длительности_страницы)
head(данные_длительности)

Удаление единиц измерения/букв (очистка данных)

данные_длительности <- gsub("мин","",данные_длительности)
данные_длительности

Преобразуем данные в числовой формат

runtime_data <- as.numeric(runtime_data)
runtime_data

Выбираем часть, которую нужно спарсить (жанр)

genre_data_laman <- html_nodes(lamanweb, '.genre')
genre_data_laman

Извлекаем текстовые данные о жанре

genre_data <- html_text(genre_data_laman)
genre_data`

Поскольку данные все еще содержат символы "\n", удалим их сначала

genre_data <- gsub("\n", "", genre_data)

Также удалим пустые пробелы

genre_data <- gsub(" ", "", genre_data)
genre_data

Поскольку каждый фильм может иметь несколько жанров, мы оставляем только первое описание жанра для каждого фильма

genre_data <- gsub(",.*", "", genre_data) genre_data

Конвертирование данных жанра из текста в фактор

`genre_data <- as.factor(genre_data)`
`head(genre_data)`

Выбор нужной части для парсинга (рейтинг)

`rating_data_laman <- html_nodes(lamanweb, '.ratings-imdb-rating strong')`
`rating_data_laman`

Извлечение текстовых данных рейтинга

`rating_data <- html_text(rating_data_laman)`
`rating_data`

Преобразование в числовой формат

`rating_data <- as.numeric(rating_data)`
`rating_data`

Выбор нужной части для парсинга (сборы)

`gross_data_laman <- html_nodes(lamanweb, '.ghost~ .text-muted+ span')`
`gross_data <- html_text(gross_data_laman)`
`gross_data`

Удаление символов "M" и "$"

gross_data <- gsub("M", "", gross_data)
gross_data <- substring(gross_data, 2, 6)
gross_data

Проверка количества данных в gross_data, так как не все фильмы содержат информацию о сборах

length(gross_data)

Заменяем пропущенные данные на значение NA

for (i in c(3,9,31,36,51,60,65,67,75,85,87,94,96)){
  a <- gross_data[1:(i-1)]
  b <- gross_data[i:length(gross_data)]
  gross_data <- append(a, list("NA"))
  gross_data <- append(gross_data, b)
}

Конвертируем данные gross в числовой формат

gross_data <- as.numeric(gross_data)
gross_data
length(gross_data)
summary(gross_data)

Создаем фрейм данных

kumpulan_data_film <- data.frame(Genre = genre_data, Rating = rating_data, Gross_Pendapatan = gross_data)
str(kumpulan_data_film)

Импортируем библиотеку ggplot2

library('ggplot2')

Строим график точек

ggplot(kumpulan_data_film, aes(x = Genre, y = Gross_Pendapatan)) + 
  geom_point(aes(size = Rating, col = Genre))

Строим график среднего дохода

data <- c(91.44, 90.29, 96.71, 101.99, 149.67, 87.42)
tahun <- c(2015, 2016, 2017, 2018, 2019, 2020)
plot(tahun, data, type = "o", col = "blue", xlab = "tahun", ylab = "Rata-Rata Pendapatan", main = "Rata-Rata Gross Pendapatan 2015–2020")