Ga naar hoofdinhoud

Tutorial: Aanbevelingssysteem voor streamingplatforms

In deze Python-tutorial verken je filmdatavan populaire streamingplatforms en bouw je een aanbevelingssysteem.
Bijgewerkt 2 okt 2026  · 10 min lezen

Verken met AI

ChatGPTClaudePerplexity

Door de nieuwe cultuur van bingewatchen van tv-series en films, verbruiken gebruikers in hoog tempo content via beschikbare diensten zoals Netflix, Prime Video, Hulu en Disney+. Sommige van deze nieuwe platforms, zoals Hulu en YouTube TV, bieden ook live streams aan van sport, liveconcerten/tours en nieuwszenders. Livestreaming is nog niet omarmd door sommige streamingplatforms, zoals Netflix.

Streamingplatforms geven gebruikers meer flexibiliteit om hun favoriete series en films te kijken, op elk moment en op elk apparaat. Deze diensten kunnen meer jonge en moderne consumenten aantrekken dankzij de grote variëteit aan tv- en filmcontent. Het stelt hen in staat om gemiste programma’s te bekijken wanneer het hen uitkomt. In deze tutorial analyseer je filmdatasets van de streamingplatforms Netflix, Prime Video, Hulu en Disney+ en probeer je hun kijkers beter te begrijpen.

banner: carrièreopbouwende Python-vaardigheden met DataCamp

De dataset begrijpen

Deze data bevat uitsluitend films die beschikbaar zijn op streamingplatforms zoals Netflix, Prime Video, Hulu en Disney+. Je kunt de dataset downloaden van Kaggle hier.

Laten we de data-attributen in detail beschrijven:

  • ID: Een unieke ID voor elk record.
  • Title: De naam van de film
  • Year: Het releasejaar van de film.
  • Age: de doelgroep (leeftijdsgroep)
  • IMDb: IMDb-score van films.
  • Rotten Tomatoes: Rotten Tomatoes %
  • Netflix: of de film op Netflix staat
  • Hulu: of de film op Hulu staat
  • Prime Video: of de film op Prime Video staat
  • Disney+: of de film op Disney+ staat
  • Type: Film of tv-serie
  • Directors: Naam van de regisseur
  • Genres: Type genre
  • Country: Land van herkomst
  • Language: Taal van herkomst
  • Runtime: Speelduur van de film

Laten we de benodigde modules importeren en de dataset laden:

 # Import required libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.feature_extraction.text import TfidfVectorizer    
from nltk.tokenize import RegexpTokenizer
import numpy as np
from sklearn import preprocessing
from scipy.sparse import hstack
import pandas_profiling
# Load dataset
df = pd.read_csv("tvshow.csv")
df=df.iloc[:,1:] # removing in unnamed index column
df.head()
  Unnamed: 0 ID Title Year Age IMDb Rotten Tomatoes Netflix Hulu Prime Video Disney+ Type Directors Genres Country Language Runtime
0 0 1 Inception 2010 13+ 8.8 87% 1 0 0 0 0 Christopher Nolan Action,Adventure,Sci-Fi,Thriller United States,United Kingdom English,Japanese,French 148.0
1 1 2 The Matrix 1999 18+ 8.7 87% 1 0 0 0 0 Lana Wachowski,Lilly Wachowski Action,Sci-Fi United States English 136.0
2 2 3 Avengers: Infinity War 2018 13+ 8.5 84% 1 0 0 0 0 Anthony Russo,Joe Russo Action,Adventure,Sci-Fi United States English 149.0
3 3 4 Back to the Future 1985 7+ 8.5 96% 1 0 0 0 0 Robert Zemeckis Adventure,Comedy,Sci-Fi United States English 116.0
4 4 5 The Good, the Bad and the Ugly 1966 18+ 8.8 97% 1 0 1 0 0 Sergio Leone Western Italy,Spain,West Germany Italian 161.0
# Show initial information about the dataset
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 16744 entries, 0 to 16743
Data columns (total 16 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   ID               16744 non-null  object
 1   Title            16744 non-null  object
 2   Year             16744 non-null  int64  
 3   Age              7354 non-null   object
 4   IMDb             16173 non-null  float64
 5   Rotten Tomatoes  5158 non-null   object
 6   Netflix          16744 non-null  int64  
 7   Hulu             16744 non-null  int64  
 8   Prime Video      16744 non-null  int64  
 9   Disney+          16744 non-null  int64  
 10  Type             16744 non-null  int64  
 11  Directors        16018 non-null  object
 12  Genres           16469 non-null  object
 13  Country          16309 non-null  object
 14  Language         16145 non-null  object
 15  Runtime          16152 non-null  float64
dtypes: float64(2), int64(6), object(8)
memory usage: 2.0+ MB
df.Type.unique()
array([0])

Werken met missende waarden

In deze sectie ga je aan de slag met missende waarden met de functie isnull(). Zie het onderstaande voorbeeld:

 #Finding Missing values in all columns
miss = pd.DataFrame(df.isnull().sum())
miss = miss.rename(columns={0:"miss_count"})
miss["miss_%"] = (miss.miss_count/len(df.ID))*100
miss
  misscount miss%
ID 0 0.000000
Title 0 0.000000
Year 0 0.000000
Age 9390 56.079790
IMDb 571 3.410177
Rotten Tomatoes 11586 69.194935
Netflix 0 0.000000
Hulu 0 0.000000
Prime Video 0 0.000000
Disney+ 0 0.000000
Type 0 0.000000
Directors 726 4.335882
Genres 275 1.642379
Country 435 2.597946
Language 599 3.577401
Runtime 592 3.535595

Je ziet dat de variabelen Age en Rotten Tomatoes meer dan 50% missende waarden hebben, wat zorgwekkend is.

We gaan nu de missende waarden als volgt aanpakken:

  • Kolommen verwijderen met meer dan 50% missende waarden
  • NA verwijderen uit de kolommen IMDb, Directors, Genres, Country, Language en Runtime
  • Index resetten
  • Kolom Year omzetten naar object
# Dropping values with missing % more than 50%
df.drop(['Rotten Tomatoes', 'Age'], axis = 1, inplace=True)
# Dropping Na's from the following columns
df.dropna(subset=['IMDb','Directors', 'Genres', 'Country', 'Language', 'Runtime'],inplace=True)
df.reset_index(inplace=True,drop=True)
# Converting into object type
df.Year = df.Year.astype("object")
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15233 entries, 0 to 15232
Data columns (total 14 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   ID           15233 non-null  object
 1   Title        15233 non-null  object
 2   Year         15233 non-null  object
 3   IMDb         15233 non-null  float64
 4   Netflix      15233 non-null  int64  
 5   Hulu         15233 non-null  int64  
 6   Prime Video  15233 non-null  int64  
 7   Disney+      15233 non-null  int64  
 8   Type         15233 non-null  int64  
 9   Directors    15233 non-null  object
 10  Genres       15233 non-null  object
 11  Country      15233 non-null  object
 12  Language     15233 non-null  object
 13  Runtime      15233 non-null  float64
dtypes: float64(2), int64(5), object(7)
memory usage: 1.6+ MB

Verdelingsplots

Je kunt de verdeling van de kolom Year bekijken met de distplot()-functie van seaborn. Laten we de verdelingsplot van het filmjaar maken.

#checking Distribution of years
plt.figure(figsize=(20,5))
sns.distplot(df['Year'])
plt.show()
verdelingsplot filmjaren

De grafiek laat de verdeling van de jaren van herkomst van films zien. Je kunt concluderen dat de meeste films zijn gemaakt tussen 2000 en 2020. Laten we nu de verdelingsplot van de IMDb-score maken.

# Distribution of IMDb Rating
plt.figure(figsize=(20,5))
sns.distplot(df['IMDb'])
plt.show()
verdelingsplot IMDb-score

De bovenstaande verdelingsplot is licht scheef. Je kunt afleiden dat het gemiddelde IMDb-cijfer van de meeste films 6,5 is.

Laten we de verdelingsplot van de speelduur maken.

# Distribution of runtime
sns.distplot(df['Runtime'])
plt.show()
verdelingsplot speelfilmspeelduur

Uit de bovenstaande grafiek kun je afleiden dat de gemiddelde speelduur van films tussen 80 en 120 minuten ligt.

Verdeling van films per streamingplatform

In deze sectie bekijk je de filmverdeling per streamingplatform. Eerst maak je een functie m_cnt() die films telt voor een gegeven streamingplatform. Daarna kun je cirkeldiagrammen plotten en de aandelen van de platforms begrijpen.

# A function to calculate the movies in different Streaming platforms
def m_cnt(plat, count=False):
    if count==False:
        print('Platform {} Count: {}'. format(plat, df[plat].sum()))
    else:
        return df[plat].sum()
# Let's see count of movies/shows of each streaming platform
m_cnt('Netflix')
m_cnt('Hulu')
m_cnt('Prime Video')
m_cnt('Disney+')
Platform Netflix Count: 3152
Platform Hulu Count: 848
Platform Prime Video Count: 11289
Platform Disney+ Count: 542
# Movies on each platform
lab = 'Prime Video','Netflix', 'Hulu', 'Disney'
s = [m_cnt('Prime Video', count=True),
     m_cnt('Netflix', count=True),
     m_cnt('Hulu', count=True),
     m_cnt('Disney+', count=True)]

explode = (0.1, 0.1, 0.1, 0.1)

#plotting
fig1, ax1 = plt.subplots()
ax1.pie(s,
       labels = lab,
       autopct = '%1.1f%%',
       explode = explode,
       shadow = True,
       startangle = 100)

ax1.axis = ('equal')
plt.show()
streamingplatforms

Uit de bovenstaande grafiek kun je opmaken dat Prime Video het grootste aantal titels host met een aandeel van 71%, en Netflix 20% van de titels host. Disney+ en Hulu hosten de minste titels, respectievelijk 5,4% en 3,4%.

Filmverdeling per genre

In deze sectie bekijk je de filmverdeling per genre. Eerst moet je je data voorbereiden. Je moet omgaan met meerdere genres die in één cel van de dataframe staan. Daarvoor kun je de functies split(), apply() en stack() gebruiken. De functie split() splitst meerdere waarden op komma’s en maakt een lijst. Met apply(pd.Series,1) maak je meerdere kolommen voor elk genre en met de functie stack() stapel je ze in één kolom.

Na deze drie bewerkingen wordt een nieuwe kolom Genres toegevoegd aan de bestaande dataframe en ben je klaar om te plotten. Je kunt de top 10 genres met hun aantal films tonen met de functie value_counts() en de functie plot() van de pandas-bibliotheek gebruiken.

 ##split the genres by ',' & then stack it one after the other for easy analysis.
g = df['Genres'].str.split(',').apply(pd.Series, 1).stack()
g.index = g.index.droplevel(-1)
# Assign name to column
g.name = 'Genres'
# delete column
del df['Genres']
# join new column with the existing dataframe
df_genres = df.join(g)
# Count of movies according to genre
plt.figure(figsize=(15,5))
sns.countplot(x='Genres', data=df_genres)
plt.xticks(rotation=90)
plt.show()
filmgenres

Uit de bovenstaande plot kun je afleiden dat de meeste films het genre Drama en Comedy gemeen hebben.

Filmverdeling per land

In deze sectie bekijk je de filmverdeling per land. Eerst moet je je data voorbereiden. Je moet omgaan met meerdere landen die in één cel van de dataframe staan. Daarvoor kun je de functies split(), apply() en stack() gebruiken. De functie split() splitst meerdere waarden op komma’s en maakt een lijst. Met apply(pd.Series,1) maak je meerdere kolommen voor elk land en met de functie stack() stapel je ze in één kolom.

Na deze drie bewerkingen wordt een nieuwe kolom Country toegevoegd aan de bestaande dataframe en ben je klaar om te plotten. Je kunt de top 10 landen met hun aantal films tonen met de functie value_counts() en de functie plot() van de pandas-bibliotheek gebruiken.

 # Split the Country by ',' & then stack it one after the other for easy analysis.
c = df['Country'].str.split(',').apply(pd.Series, 1).stack()
c.index = c.index.droplevel(-1)
# Assign name to column
c.name = 'Country'
# delete column
del df['Country']
# join new column with the existing dataframe
df_country = df.join(c)
# plotting top 10 country and movie count
df_country['Country'].value_counts()[:10].plot(kind='bar',figsize=(15,5))
plt.show()
landen waar films zijn gemaakt

De bovenstaande grafiek laat zien dat het merendeel van de films in de Verenigde Staten is gemaakt.

Filmverdeling per taal

In deze sectie bekijk je de filmverdeling per taal. Eerst moet je je data voorbereiden. Je moet omgaan met meerdere talen die in één cel van de dataframe staan. Daarvoor kun je de functies split(), apply() en stack() gebruiken. De functie split() splitst meerdere waarden op komma’s en maakt een lijst. Met apply(pd.Series,1) maak je meerdere kolommen voor elke taal en met de functie stack() stapel je ze in één kolom.

Na deze drie bewerkingen wordt een nieuwe kolom Language toegevoegd aan de bestaande dataframe en ben je klaar om te plotten. Je kunt de top 10 talen met hun aantal films tonen met de functie value_counts() en de functie plot() van de pandas-bibliotheek gebruiken.

 # perform stacking operation on language column
l = df['Language'].str.split(',').apply(pd.Series,1).stack()
l.index = l.index.droplevel(-1)
# Assign name to column
l.name = 'Language'
# delete column
del df['Language']
# join new column with the existing dataframe
df_language = df.join(l)
# plotting top 10 Language and movie count
df_language['Language'].value_counts()[:10].plot(kind='bar',figsize=(15,3))
plt.show()
plot met filmtalen

Uit de bovenstaande plot kun je concluderen dat de meerderheid van de films in het Engels is.

Verdeling van IMDb-scores per platform

In deze sectie plot je de platformspecifieke verdeling van IMDb-scores. Om deze resultaten te krijgen, moet je de functie melt() toepassen en een FacetGrid-plot maken. De functie melt() zet een brede dataframe om naar een lange dataframe. Zie het onderstaande voorbeeld:

 # melting platform columns to create visualization
df2 = pd.melt(df, id_vars=["ID","Title","Year","IMDb","Type","Runtime"], var_name="platform")
df2 = df2[df2.value==1]
df2.drop(columns=["value"],axis=1,inplace=True)
# Distribution of IMDB rating in different platform
g = sns.FacetGrid(df2, col = "platform")
g.map(plt.hist, "IMDb")
plt.show()
Verdeling van IMDb-score per platform

De bovenstaande plot toont de gemiddelde verdeling van IMDb-scores op elk platform.

banner: ontdek DataCamp’s Python-cursusbibliotheek

Speelduur per platform, uitgesplitst naar leeftijdsgroep

In de sectie "Werken met missende waarden" heb ik de kolom Age verwijderd. Om resultaten voor Speelduur per platform uitgesplitst naar leeftijdsgroep te krijgen, moet ik de data opnieuw laden en de functie melt() toepassen.

# Load dataset
df = pd.read_csv("tvshow.csv")
df=df.iloc[:,1:]
df.ID = df.ID.astype("object")

# melting platform columns to create visualization
df2 = pd.melt(df, id_vars=["ID","Title","Year","Age","IMDb","Rotten Tomatoes","Type","Runtime"], var_name="platform")
df2 = df2[df2.value==1]
df2.drop(columns=["value"],axis=1,inplace=True)

Nadat de dataset opnieuw is geladen en gemelt, is het tijd om een plot te genereren van speelduur versus streamingplatform voor verschillende leeftijdsgroepen.

# Total of runtime in different platform
ax = sns.barplot(x="platform", y="Runtime",hue="Age", estimator=sum, data=df2)
Speelduur per platform, uitgesplitst naar leeftijdsgroep

De bovenstaande plot laat zien dat de totale speelduur op Prime Video voor gebruikers in de leeftijdsgroep 18+ veel hoger is dan op welke ander platform dan ook. Je kunt concluderen dat het merendeel van de content op Prime Video is gericht op de 18+-leeftijdsgroep.

Een aanbevelingssysteem bouwen

De afgelopen jaren hebben aanbevelingssystemen, met de opkomst van YouTube, Walmart, Netflix en vele andere webgebaseerde diensten, een enorme impact gehad op de industrie. Van het suggereren van producten/diensten tot het vergroten van de bedrijfswaarde via online advertentiemonetisatie en het matchen van de relevantie en voorkeuren van de gebruiker om hen te laten kopen: aanbevelingssystemen zijn onmisbaar in onze dagelijkse zoektochten op het web.

Over het algemeen zijn dit wiskundig georiënteerde raamwerken die zich richten op het aanbevelen van producten/diensten aan eindgebruikers die relevant zijn voor hun behoeften en wensen. Bijvoorbeeld: films om te kijken, artikelen om te lezen, producten om te kopen, muziek om naar te luisteren, of wat dan ook afhankelijk van het domein. Er zijn grofweg drie methoden om een aanbevelingssysteem te bouwen:

  1. Contentgebaseerde methoden: Definieer een model voor gebruikers of items waarmee is geïnteracteerd op basis van de feature-set van items, en raad vergelijkbare items aan aan gebruikers.
  2. Collaborative filtering-methoden: Definieer een model voor gelijkenisscores tussen gebruikers en items of tussen gebruikers onderling, gebruikt voor itemaanbeveling.
  3. Hybride methoden: Gebruik zowel content- als collaboratieve methoden om een beter resultaat te bereiken.

Laten we eerst de dataset preprocessen voor het aanbevelingssysteem. Controleer eerst de missende waarden:

# Reading Data Again
df = pd.read_csv("tvshow.csv")
df=df.iloc[:,1:]
#Finding Missing values in all columns
miss = pd.DataFrame(df.isnull().sum())
miss = miss.rename(columns={0:"miss_count"})
miss["miss_%"] = (miss.miss_count/len(df.ID))*100
miss
#Dropping values with missing % more than 50%
df.drop(['Rotten Tomatoes', 'Age'], axis = 1, inplace=True)
# Dropping Na's from the following columns
df.dropna(subset=['IMDb','Directors', 'Genres', 'Country', 'Language', 'Runtime'],inplace=True)
df.reset_index(inplace=True,drop=True)
# converting into object type
df.ID = df.ID.astype("object")
df.Year = df.Year.astype("object")

Je bouwt twee aanbevelingssystemen op basis van cosinusgelijkenis.

1. Alleen met de numerieke variabele
2. Met zowel numerieke als categorische variabelen

Alleen de numerieke kolom gebruiken

Stap 1: Selecteer de numerieke variabele

ndf = df.select_dtypes(include=['float64',"int64"])

Stap 2: Schaal de numerieke variabele met een min-max-scaler om modelcomplexiteit en traintijd te verminderen

#importing minmax scaler
from sklearn import preprocessing

# Create MinMaxScaler Object
scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))

# Create dataframe after transformation
ndfmx = pd.DataFrame((scaler.fit_transform(ndf)))

# assign column names
ndfmx.columns=ndf.columns

# Show initial 5 records
ndfmx.head()

Stap 3: Bereken gelijkenisscore met cosinusgelijkenis

Nu bereken je de gelijkenisscore met cosinusgelijkenis.

# Import cosine similarity
from sklearn.metrics.pairwise import cosine_similarity

# Compute the cosine similarity
sig = cosine_similarity(ndfmx, ndfmx)

# Reverse mapping of indices and movie titles
indices = pd.Series(df.index, index=df['Title']).drop_duplicates()
indices.head()

Stap 4: Schrijf een functie om aanbevelingen te krijgen op basis van de gelijkenisscore

  • De functie neemt twee argumenten: de filmtitel en de gelijkenisscores. Hij zoekt de index van de titel die overeenkomt met de index original_titles in onze reeks indices.
  • Haal de paargewijze gelijkenisscores op van alle films.
  • Sorteer de gelijkenisscores in aflopende volgorde en zet ze om in een lijst.
  • Haal de top 10 filmscores en indices op en retourneer de titels van de top 10 films uit onze dataframe.
def give_rec(title, sig=sig):

    # Get the index corresponding to original_title
    idx = indices[title]

    # Get the pairwise similarity scores
    sig_scores = list(enumerate(sig[idx]))

    # Sort the movies
    sig_scores = sorted(sig_scores, key=lambda x: x[1], reverse=True)

    # Scores of the 10 most similar movies
    sig_scores = sig_scores[1:11]

    # Movie indices
    movie_indices = [i[0] for i in sig_scores]

    # Top 10 most similar movies
    return df['Title'].iloc[movie_indices]
# Execute get_rec() function for getting recommendation
give_rec("The Matrix",sig = sig)

Hier zijn de aanbevolen films niet je van het. De reden voor dit matige resultaat is dat je alleen filmbeoordelingen, speelduur en platformvariabelen gebruikt. Je kunt dit verbeteren door andere informatie te gebruiken, zoals genre, regisseurs en land.

Numerieke en tekstuele kolommen gebruiken

Omdat ons vorige aanbevelingssysteem wel werkte maar de aanbevelingen niet optimaal waren, probeer je nu een nieuwe, betere aanpak om de resultaten te verbeteren.

df.head()

Stap 1:

Je voegt tekstuele kolommen samen in één kolom en gebruikt vervolgens een tokenizer en TF-IDF Vectorizer om een sparse matrix te maken met alle TF-IDF-scores van woorden. Daarna selecteer en schaal je de numerieke variabelen en voeg je die toe aan de sparse matrix. Je voert de volgende stappen uit voor preprocessing:

  • Alle object-datatypen selecteren en in een lijst opslaan.
  • Kolommen ID en Title verwijderen.
  • Alle tekst/objectkolommen met komma’s samenvoegen tot één kolom.
  • Een tokenizer maken om ongewenste elementen zoals symbolen en cijfers uit onze data te verwijderen.
  • De tekst omzetten naar TfidfVector. Daarna doen we de preprocessing van de numerieke kolommen
  • Numerieke variabelen selecteren in een dataframe
  • Numerieke variabelen schalen met min-max-scaler (bereik 0,1)
  • Numerieke variabelen toevoegen aan de TF-IDF-sparse matrix met de hstack-functie (hstack wordt gebruikt om horizontale arrays toe te voegen aan een sparse matrix).
#the function performs all the important preprocessing steps
def preprocess(df):
    #combining all text columns
    # Selecting all object data type and storing them in list
    s = list(df.select_dtypes(include=['object']).columns)
    # Removing ID and Title column
    s.remove("Title")
    s.remove("ID")
    # Joining all text/object columns using commas into a single column
    df['all_text']= df[s].apply(lambda x: ','.join(x.dropna().astype(str)),axis=1)

    # Creating a tokenizer to remove unwanted elements from our data like symbols and numbers
    token = RegexpTokenizer(r'[a-zA-Z]+')

    # Converting TfidfVector from the text
    cv = TfidfVectorizer(lowercase=True,stop_words='english',ngram_range = (1,1),tokenizer = token.tokenize)
    text_counts= cv.fit_transform(df['all_text'])

    # Aselecting numerical variables
    ndf = df.select_dtypes(include=['float64',"int64"])

    # Scaling Numerical variables
    scaler = preprocessing.MinMaxScaler(feature_range=(0, 1))

    # Applying scaler on our data and converting i into a data frame
    ndfmx = pd.DataFrame((scaler.fit_transform(ndf)))
    ndfmx.columns=ndf.columns    

    # Adding our adding numerical variables in the TF-IDF vector
    IMDb = ndfmx.IMDb.values[:, None]
    X_train_dtm = hstack((text_counts, IMDb))
    Netflix = ndfmx.Netflix.values[:, None]
    X_train_dtm = hstack((X_train_dtm, Netflix))
    Hulu = ndfmx.Hulu.values[:, None]
    X_train_dtm = hstack((X_train_dtm, Hulu))
    Prime = ndfmx["Prime Video"].values[:, None]
    X_train_dtm = hstack((X_train_dtm, Prime))
    Disney = ndfmx["Disney+"].values[:, None]
    X_train_dtm = hstack((X_train_dtm, Disney))
    Runtime = ndfmx.Runtime.values[:, None]
    X_train_dtm = hstack((X_train_dtm, Runtime))
    return X_train_dtm

Stap 2: De functie toepassen op onze data en een sparse matrix maken

# Preprocessing data
mat =preprocess(df)
mat.shape

Stap 3: Opnieuw cosinusgelijkenis toepassen om de gelijkenisscore te berekenen

# using cosine similarity
from sklearn.metrics.pairwise import cosine_similarity

# Compute the sigmoid kernel
sig2 = cosine_similarity(mat, mat)

# Reverse mapping of indices and movie titles
indices = pd.Series(df.index, index=df['Title']).drop_duplicates()

Stap 4: Een aanbeveling krijgen van ons verbeterde systeem

give_rec("The Matrix",sig=sig2)

Dit keer werkt het aanbevelingssysteem aanzienlijk beter dan het oudere systeem, wat laat zien dat een contentgebaseerd aanbevelingssysteem sterk kan verbeteren door meer relevante data toe te voegen, zoals beschrijvingstekst.

Conclusie

Gefeliciteerd, je bent aan het einde van deze tutorial gekomen!

In deze tutorial heb je een verkennende analyse uitgevoerd op de filmdataset van streamingplatforms. Je hebt missende waarden onderzocht, individuele verdelingsplots gemaakt en de verdeling van films per streamingplatform bekeken. Je hebt ook inzichten gevonden over genre, land, taal, IMDb-scores en speelduur. Tot slot heb je gezien hoe je in Python een aanbevelingssysteem bouwt.

Bekijk de DataCamp-tutorial Recommender Systems in Python.

banner: DataCamp’s Python-cursusbibliotheek
Onderwerpen
Python
Data Science
Data-analyse

Leer meer over Python

Cursus

Aanbevelingssystemen bouwen in Python

4 uur
12.9K
Leer aanbevelingssystemen bouwen in Python met behulp van machine learning-technieken.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken