sql >> Database teknologi >  >> RDS >> SQLite

Oprettelse af en app til Django-filmanbefaling ved hjælp af Jaccard-indeks

Mine mål for dette projekt

  • Forstå nøglekomponenterne i django-rammen
  • Beskriv de grundlæggende principper for et anbefalingssystem
  • Byg en simpel filmanbefalingsapp ved at anvende Jaccard Algorithm baseret på indholdsfiltreringsmekanisme

Github Repository https://github.com/jamattey/Django-Movie-Recommendation

Tech Stack

  • Django Backend
  • HTML-frontend
  • Bootstrap CSS
  • SQLite-database

Om Django Framework

Django opdeler sin applikationslogik i følgende tre Model-View-Controller-lignende komponenter:

Django Model administrerer datamodellering og databasekortlægning samt forretningslogik til at behandle data

Django View beskriver, hvilke data der præsenteres, men ikke hvordan de præsenteres. Typisk uddelegerer og gengiver Django View en HTML-side, som beskriver, hvordan data præsenteres

Django Template genererer dynamiske HTML-sider til at præsentere data

Når en klient sender en anmodning, dirigerer Django-serveren anmodningen til den relevante visning baseret på Django URL-konfigurationen og fungerer som en traditionel controller

Django modeller
Django bruger Django-modeller til at repræsentere databasetabeller og kortlægge dem til objekter, såsom processen kaldes ORM. Django Models forsøger at gøre udviklerens liv lettere ved at abstrahere databaser og kortlægge objekter og metoder til tabeller og SQL-forespørgsler automatisk.

Du skal blot definere klasser som Django-modeller, og vil senere blive mappet til databasetabeller i overensstemmelse hermed. Så kan du simpelthen bruge Django Models API til at udføre CRUD på databasetabellerne uden at skrive en enkelt linje SQL

Django udsigt
I Django er en View i det væsentlige en Python-funktion. En sådan funktion tager en webanmodning og anvender den nødvendige logik til at generere et websvar, såsom HTML-indholdet på en webside, en omdirigering, en 404-fejl, et XML-dokument, et billede eller ethvert andet websvar. View interagerer ofte med Django-modeller for at få nødvendige data i form af QuerySet eller objekter til at generere et websvar.

Django-applikationsudviklingsproces


Først oprettede jeg et Django-projekt, som er en beholder til Django-apps og -indstillinger. Her kan jeg beslutte at oprette og tilføje en eller flere Django-apps til projektet.

I Core Development lavede jeg Django-modeller til at modellere dataene og oprettede visninger for at bestemme, hvilke data der skal præsenteres for brugergrænsefladen. Jeg knytter også anmodnings-URL'erne til vores synspunkter, så Django kan videresende anmodninger til tilsvarende visninger via URL'er. Så kan vi begynde at designe og bygge brugergrænsefladen.

Disse film er udfyldt i en CSV. Siden er ikke vært for egentlige film, men det er en anbefalingsmotor, der bruger almindelig kode og en database.

Denne anbefalingsmotor bruger ikke Machine Learning......endnu 😂😂

For at få anbefalingen til rent faktisk at virke, var jeg nødt til først at markere de film, en bruger har set ved hjælp af Django Admin-webstedet. Så skrev jeg en anbefalingsalgoritme baseret på sete film.

Markering af sete film i Django Admin

  • Kør Django Server
  • besøg admin url app_url/admin
  • Så klikker du ind på filmopslaget og markerer det som set og trykker på Gem.

Kør make_recommendations CMD for at generere anbefalinger

For ethvert anbefalingssystem er nøgleideen altid at komme med en god algoritme/model til at forudsige, om en specifik bruger vil kunne lide eller ikke lide hans/hendes usete element, som vist på følgende skærmbillede:

Der er sandsynligvis hundredvis af gode anbefalingsalgoritmer og kan groft opdeles i to kategorier:

Indholdsfiltrering baseret:

De indholdsfiltreringsbaserede anbefalingsalgoritmer antager, at du måske kan lide en ny film, hvis du har set meget lignende film før. Eller baseret på din brugerprofil (som alder, køn, interesser), vil den forsøge at finde nye film, der matcher din profil.

Samarbejdsfiltrering baseret:

De kollaborative filtreringsalgoritmer antager, at du kan lide en ny film, hvis andre brugere, der ligner dig (lignende profil eller har set lignende film) har set denne film.

I dette projekt vil vi bruge indholdsfiltreringsbaseret algoritme, og vi vil forsøge at anbefale usete/nye film til dig, hvis de ligner dine sete film.

Hvordan beregner vi en sådan filmlighed

Her vil vi bruge Jaccard-lighed, som nok er den enkleste, men meget effektive metode til at beregne lighed mellem to sæt.

Jaccard Similarity er defineret som størrelsen af ​​skæringspunktet mellem to sæt divideret med størrelsen af ​​foreningen af ​​de to sæt.


  1. Kan ikke indlæse DLL 'SqlServerSpatial.dll'

  2. SQLite - Opret en database

  3. 4 måder at adskille timer, minutter og sekunder fra en tidsværdi i MariaDB

  4. Er det muligt at henvise til en kolonne som flere fremmednøgler?