Я люблю смотреть фильмы. На данный момент я уверен, что это зависимость, а не хобби. Я даже оцениваю фильмы, которые смотрел, и IMDb говорит мне, что я посмотрел 617 фильмов и 272 сериала. В последнее время мне кажется, что фильмов на мой вкус не осталось, но я не могу понять, как это могло произойти. Есть буквально тысячи фильмов, которые я еще не смотрел. Поэтому я решил использовать бота для рекомендаций фильмов в Интернете, чтобы найти фильмы на свой вкус, но они плохо давали рекомендации. Вот почему я решил создать этот ИИ.

Перво-наперво, мне нужно было найти базу данных для фильмов. В этой статье я буду использовать этот набор данных Kaggle, чтобы поэкспериментировать с ним. Он немного староват (4 года), но имеет хорошие параметры для классификации фильмов. У меня также есть ключ API, но я не собираюсь использовать его для этого проекта.

Теперь, когда у нас есть набор данных, давайте избавимся от ненужных параметров и импортируем их в базу данных MySQL.

Я установил этот коннектор MySQL для подключения сервера MySQL из Python.

Подключиться было довольно легко. Я создал соединение между ними, используя следующие параметры:

Затем я написал такие функции для импорта данных .csv (используя pandas) в таблицы MySQL:

После подготовки всех таблиц я также решил использовать таблицу MySQL для хранения оценок отношений, поэтому я написал эту функцию для вычисления оценки на Python и вставки ее в таблицу MySQL:

Я не хотел создавать много трафика с большим количеством запросов на выборку, поэтому я вычисляю оценку в Python и просто вставляю ее в таблицу отношений.

Теперь, когда у меня есть база данных и я подключен к ней с помощью Python, я могу создать формулу для расчета отношения между двумя фильмами. Я решил сделать конкретные оценки отношений для нескольких вещей, с которыми, как мне кажется, связаны два фильма. Я думаю, что это была самая сложная часть для меня, потому что я не очень хорошо умею связывать две вещи… Но спустя несколько часов я придумал эту простую таблицу:

Хотя это выглядит логично, я хотел убедиться, что это работает так, как задумано, поэтому я заполнил таблицу отношений баллами между всеми фильмами. Теперь пришло время проверить это для «Темного рыцаря»:

Первое, что меня зацепило, это то, что мы можем увидеть трилогию сразу. У обоих более 800 баллов отношений, что является хорошим знаком. Из 10 самых связанных фильмов; Interstellar, Inception и Clash of the Titans казались не очень связанными, поэтому я решил посмотреть расчет для них.

В «Битве Титанов» 200 из 235 очков достаются экипажу. Хотя это не должно связывать эти два фильма, я должен признать, что видел оба, и оба мне понравились. Но ради аргумента я изменю формулу оценки позже.

На самом деле я более чем доволен, потому что он также установил некоторые связи, на которые я сначала не обращал внимания. Как в "Матрице":

Сначала я не мог установить связь между «Матрицей» и «V значит Вендетта», но заметил, что обе они восстают против системных историй, когда смотришь на них. Об отношениях с Терминатором и мной, Роботом, упоминать не приходится…

Я также хочу реализовать комментарии из r/MovieRecommendations в следующей версии, когда выясню, как извлекать названия фильмов из комментариев, не извлекая лишние слова.

Этого вполне достаточно для эксперимента. Спасибо за чтение, и я надеюсь, что это будет полезно для вас. Для меня это был интересный проект, и я многому научился.

Я думаю, что набор данных Kaggle использовал API TMDB для получения данных, поэтому я добавляю его в титры на всякий случай.

В этом проекте используется API TMDB, но он не одобрен и не сертифицирован TMDB.