Netflix — одна из самых популярных платформ для потокового мультимедиа и видео. На их платформе доступно более 8000 фильмов или телешоу, по состоянию на середину 2021 года у них более 200 миллионов подписчиков по всему миру.
В приведенном ниже анализе мы рассмотрим текстовые данные в переменной описания фильма/сериала — мы применим обработку естественного языка, чтобы получить составные настроения и темы.
Набор данных:
Этот табличный набор данных состоит из списков всех фильмов и телешоу, доступных на Netflix. Ниже приведены все столбцы, присутствующие в наборе данных.
Очистка данных:
Удаление нулевых значений.Нулевые значения снижают производительность модели и искажают данные. На приведенном ниже скриншоте мы видим, что у режиссера, актера и страны больше всего нулевых значений — на основе избыточных переменных мы удаляем столбцы директор и актер. На следующем шаге мы используем функцию dropna() для удаления всех строк с нулевыми значениями.
Удаление избыточных переменных. Переменные, содержащие неважные данные, такие как ссылки, описание, снижают производительность модели. Столбцы «show_id», «type», «country», «rating», «date_added», «duration», «listed_in» были удалены.
Фильтры данных для уменьшения высокой дисперсии. Чтобы предотвратить данные с высокой дисперсией, мы применяем фильтры к столбцам и уменьшаем количество строк. На приведенном ниже рисунке видно, что данные смещены вправо, чтобы нормализовать данные, которые мы фильтруем для выпуска_года > 1980.
Очистка текстовых данных:
Текстовые данные являются сложными и представлены на естественном языке (английский, немецкий, французский и т. д.) — природа текстовых данных неструктурирована, и нам нужно очистить и преобразовать их, чтобы Python понял и интерпретировал их.
Ниже приведены шаги, которые мы предпринимаем для очистки текстовых данных:
Токенизация.Токенизация — это процесс извлечения отдельных слов из оператора слов. Мы импортируем функцию nlkt word_tokenize для создания токенов для всех описаний фильмов/сериалов в наборе данных.
Удаление стоп-слов.Стоп-слова — это слова, которые не добавляют никакой ценности для анализа и являются просто заполнителями для естественного языка, например, «the», «a», «an», «is» и т. д. Чтобы удалить стоп-слова, нам нужно импортировать словарь стоп-слов или создать словарь вручную. Я импортировал словарь стоп-слов из библиотеки текстового моделирования Spacy. Чтобы удалить стоп-слова, я создал функцию для применения токенизации и удаления токенов, которые совпадают в словаре стоп-слов из Spacy.
Лемматизация. Это процесс группировки флективных форм слова, чтобы их можно было проанализировать как единый элемент, идентифицируемый по лемме слова или словарной форме.
Ниже приведен код, который мы запускаем для применения токенизации, удаления стоп-слов и лемматизации текста описания в наборе данных:
Ниже приведены этапы очистки текстовых данных до и после:
Анализ настроений с VADER:
VADER (VценностьAwareсловарьи чувствонастроение Reasoner) — это основанный на лексике и правилах инструмент для анализа настроений, специально настроенный на настроения, выраженные в социальных сетях. VADER использует комбинацию лексики настроений — это список лексических характеристик (например, слов), которые обычно помечаются в соответствии с их семантической ориентацией как положительные или отрицательные. VADER не только сообщает о позитивности и негативности, но также сообщает нам о том, насколько положительным или отрицательным является настроение, давая положительную оценку, отрицательную оценку, нейтральную оценку и составную оценку, которая представляет собой сумму всех трех оценок.
Ниже приведен фрагмент кода для применения анализа настроений Вейдера:
Ниже приведен фрагмент из 10 строк с составной оценкой тональности и Sentiment_type:
Обнаружение темы с помощью LDA:
Скрытое распределение Дирихле — это алгоритм обучения без учителя, который представляет документы как смеси тем, которые выдают слова с определенной вероятностью.
Минусы LDA:
- Пользователь должен определить количество создаваемых тем.
- Пользователь должен интерпретировать, какие темы основаны на вероятностях слов, присвоенных темам.
Чтобы python понимал текстовые данные, нам нужно векторизовать их с помощью векторизатора Count, после подходящего преобразования мы получаем большую матрицу количества слов.
Импорт LDA из библиотеки sklearn, создание экземпляра и применение его к матрице из векторизатора Count:
Печать 15 лучших слов, связанных с каждой темой:
Следующий шаг является ручным и полностью субъективным, когда пользователь интерпретирует слова с наибольшей вероятностью, связанные с приведенным выше списком тем, и присваивает теме название категории.
Мы преобразуем матрицу dtm, используя модель LDA, созданную для присвоения каждой ячейке описания сочетания вероятности с каждой темой. Мы берем верхнюю тему, назначенную с помощью функции argmax().
Вывод: