Моите цели за този проект
- Разберете ключовите компоненти на рамката на django
- Опишете основните принципи на една система за препоръки
- Създайте просто приложение за препоръка на филми, като приложите алгоритъм на Jaccard, базиран на механизъм за филтриране на съдържанието
Github хранилище https://github.com/jamattey/Django-Movie-Recommendation
Tech Stack
- Django Backend
- HTML Frontend
- Bootstrap CSS
- База данни SQLite
Относно Django Framework
Django разделя логиката на приложението си на следните три компонента, подобни на модел-изглед-контролер:
Django Model управлява моделирането на данни и картографирането на база данни, както и бизнес логиката за обработка на данни
Django View описва кои данни се представят, но не и как са представени. Обикновено Django View делегира и изобразява HTML страница, която описва как се представят данните
Django Template генерира динамични HTML страници за представяне на данни
Когато клиент изпрати заявка, Django сървърът насочва заявката към подходящия изглед въз основа на конфигурацията на Django URL и действа като традиционен контролер
Django модели
Django използва модели на Django, за да представи таблици на база данни и да ги съпостави с обекти, като процесът се нарича ORM. Django Models се опитва да улесни живота на програмиста, като абстрахира бази данни и автоматично преобразува обекти и методи в таблици и SQL заявки.
Просто трябва да дефинирате класове като Django модели и по-късно ще бъдат съпоставени съответно с таблици на база данни. След това можете просто да използвате API на Django Models, за да изпълнявате CRUD върху таблиците на базата данни, без да пишете нито един ред SQL
Django Views
В Django изгледът по същество е функция на Python. Такава функция приема уеб заявка и прилага необходимата логика за генериране на уеб отговор, като например HTML съдържанието на уеб страница, пренасочване, грешка 404, XML документ, изображение или друг уеб отговор. Често View взаимодейства с Django Models, за да получи необходимите данни под формата на QuerySet или обекти за генериране на уеб отговор.
Процес на разработка на приложение на Django
Първо, създадох проект на Django, който е контейнер за приложения и настройки на Django. Тук мога да реша да създам и добавя едно или повече Django приложения към проекта.
В Core Development създадох Django модели за моделиране на данните и създадох изгледи, за да определя кои данни трябва да бъдат представени на потребителския интерфейс. Също така съпоставям URL адресите на заявката към нашите изгледи, така че Django да може да препраща заявки към съответните изгледи чрез URL адреси. След това можем да започнем да проектираме и изграждаме потребителския интерфейс.
Тези филми са попълнени в CSV. Сайтът не хоства действителни филми, но е двигател за препоръки, използващ обикновен код и база данни.
Тази препоръчителна машина не използва машинно обучение.......все още 😂😂
За да накарам препоръката действително да работи, трябваше първо да маркирам филмите, които потребителят е гледал, използвайки сайта на Django Admin. След това написах препоръчителен алгоритъм въз основа на гледани филми.
Маркиране на гледани филми в Django Admin
- Изпълнете Django Server
- посетете admin url app_url/admin
- След това щракнете върху записа на филма и го маркирате като гледан и натиснете Save.
Изпълнете make_recommendations CMD, за да генерирате препоръки
За всякакви системи за препоръки ключовата идея винаги е да се измисли добър алгоритъм/модел, за да се предвиди дали конкретен потребител ще хареса или не хареса неговия/нейния невиждан елемент, както е показано на следната екранна снимка:
Вероятно има стотици добри алгоритми за препоръки и могат да бъдат разделени грубо на две категории:
Въз основа на филтриране на съдържанието:
Алгоритмите за препоръки, базирани на филтриране на съдържание, предполагат, че може да харесате нов филм, ако преди сте гледали много подобни филми. Или въз основа на вашия потребителски профил (като възраст, пол, интереси), той ще се опита да намери нови филми, съответстващи на вашия профил.
Базирано на съвместно филтриране:
Алгоритмите за съвместно филтриране предполагат, че може да харесате нов филм, ако други потребители, подобни на вас (подобен профил или гледали подобни филми), са гледали този филм.
В този проект ще използваме алгоритъм, базиран на филтриране на съдържание, и ще се опитаме да ви препоръчаме негледани/нови филми, ако са подобни на гледаните от вас филми.
Как да изчислим подобно сходство на филмите
Тук ще използваме сходството на Жакард, което е може би най-простият, но много ефективен метод за изчисляване на сходството между два набора.
Сходството на Жакард се дефинира като размерът на пресечната точка на две групи, разделен на размера на обединението на тези две групи.