Любимые жанры фильмов киноманов с 2015 по 2020 год (Парсинг веб-страниц с использованием R)
Table Of Content
- Установка пакетов xml2 и rvest
- Определение веб-адреса
- Выбор нужной части для парсинга (длительность)
- Удаление единиц измерения/букв (очистка данных)
- Преобразуем данные в числовой формат
- Выбираем часть, которую нужно спарсить (жанр)
- Извлекаем текстовые данные о жанре
- Поскольку данные все еще содержат символы "\n", удалим их сначала
- Также удалим пустые пробелы
- Поскольку каждый фильм может иметь несколько жанров, мы оставляем только первое описание жанра для каждого фильма
- Конвертирование данных жанра из текста в фактор
- Выбор нужной части для парсинга (рейтинг)
- Извлечение текстовых данных рейтинга
- Преобразование в числовой формат
- Выбор нужной части для парсинга (сборы)
- Удаление символов "M" и "$"
- Проверка количества данных в gross_data, так как не все фильмы содержат информацию о сборах
- Заменяем пропущенные данные на значение NA
- Конвертируем данные gross в числовой формат
- Создаем фрейм данных
- Импортируем библиотеку ggplot2
- Строим график точек
- Строим график среднего дохода
Assalamu’alaikum wr wb
Привет, друзья! Как дела?
В этой моей первой статье я решил узнать, какие жанры фильмов нравятся зрителям за последние 6 лет (с 2015 по 2020 год), а также какова средняя выручка от фильмов в каждый из этих годов. В общих чертах, для решения этой задачи нам понадобится 3 шага: парсинг данных с веб-сайта imdb.com, очистка данных и визуализация. (Полный синтаксис приведен в конце статьи)
Сначала мы будем парсить данные с веб-сайта imdb.com с использованием R. Для парсинга данных с веб-сайта imdb.com нам понадобятся пакеты "rvest" и "xml2".
После установки обоих пакетов мы определяем веб-адрес, с которого мы будем получать данные. В этот раз мы попробуем получить данные с следующего веб-сайта (imdb.com в 2018 году)
Используемый синтаксис:
Затем мы получим данные о жанрах
Для получения этих данных нам понадобится расширение для Chrome под названием SelectorGadget, чтобы его скачать, следуйте изображениям ниже
После установки SelectorGadget следующим шагом будет выбор жанра, как показано на следующем изображении
Текст «.genre», указанный стрелкой, будет использован как дополнение к синтаксису для парсинга данных, и вот синтаксис и его результат
Затем мы получим текстовые данные из вышеприведенного результата
Затем мы очистим эти данные, удалив символы «\n» и пустые пробелы
Поскольку один фильм может иметь несколько жанров, каждый фильм будет отнесен только к первому жанру в описании
Затем мы преобразуем текстовые данные жанров в факторы
Повторите шаги по получению и очистке данных для рейтинга и выручки
Получение данных о рейтинге:
Получение данных о выручке:
Перед преобразованием данных о выручке в числовые данные, давайте проверим, есть ли пропущенные значения выручки, так как не все фильмы имеют информацию о выручке
Затем давайте проверим, какие фильмы не имеют информации о выручке на этом веб-сайте
После ручной проверки заменим пустые значения на «NA» с помощью следующего синтаксиса
Затем преобразуем эти данные в числовые данные
Затем найдем сводку или результаты нескольких показателей централизации данных
Затем создадим фрейм данных из этих данных
Затем мы визуализируем эти данные с помощью следующего синтаксиса
И вот результат
Итак, парсинг данных за 2018 год завершен. Для 2015, 2016, 2017, 2019 и 2020 годы вы можете найти сами, заменив веб-адрес и пропущенные значения выручки. Вот результаты сводки и визуализации для каждого из этих годов
2015 год
2016 год
2017 год
2018 год
2019 год
2020 год
График линии для средней выручки фильмов с 2015 по 2020 год
2015 год
2016 год
2017 год
2018 год
2019 год
2020 год
Итак, из визуализации выше видно, что зрители в 2015-2018 годах предпочитали фильмы жанра экшн, в то время как в 2019 и 2020 годах произошли изменения, и зрители больше предпочитают фильмы жанра драма и анимация. Поэтому рекомендуется продюсерам фильмов создавать фильмы жанра экшн с добавлением немного драмы/анимации.
Вот и все для моей первой статьи, надеюсь, она была полезной.
Wassalamu’alaikum wr wb
Ссылка на источник:
- Hakim, R. F. (2019, September 25). Web Scraping dengan R. From Medium.com: https://medium.com/@986110101/web-scraping-dengan-r-53d07fb81fc9
Полный синтаксис:
Установка пакетов 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")