Lewati ke konten utama

Tutorial Sistem Rekomendasi untuk Platform Streaming

Dalam tutorial Python ini, jelajahi data film dari platform streaming populer dan bangun sistem rekomendasi.
Diperbarui 28 Sep 2026  · 10 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Karena budaya baru binge-watching serial TV dan film, pengguna mengonsumsi konten dengan cepat melalui layanan yang tersedia seperti Netflix, Prime Video, Hulu, dan Disney+. Beberapa platform baru ini, seperti Hulu dan YouTube TV, juga menawarkan siaran langsung untuk acara seperti olahraga, konser/tur, dan saluran berita. Siaran langsung masih belum diadopsi oleh beberapa platform streaming, seperti Netflix.

Platform streaming memberi fleksibilitas lebih kepada pengguna untuk menonton serial TV dan film favorit mereka kapan saja, di perangkat apa pun. Layanan ini dapat menarik lebih banyak konsumen muda dan modern karena beragamnya konten TV dan film. Ini memungkinkan mereka menonton program yang terlewat sesuai waktu luang mereka. Dalam tutorial ini, Anda akan menganalisis data film dari platform streaming Netflix, Prime Video, Hulu, dan Disney+ serta mencoba memahami pemirsanya.

banner membangun keterampilan python untuk karier dengan data camp

Memahami Dataset

Data ini hanya terdiri dari film yang tersedia di platform streaming seperti Netflix, Prime Video, Hulu, dan Disney+. Anda dapat mengunduhnya dari Kaggle di sini.

Mari jelaskan atribut data secara rinci:

  • ID: ID unik untuk setiap catatan.
  • Title: Nama film
  • Year: Tahun rilis film.
  • Age: kelompok usia sasaran
  • IMDb: Peringkat IMDB film.
  • Rotten Tomatoes: Persentase Rotten Tomatoes
  • Netflix: apakah film tersebut ada di Netflix
  • Hulu: apakah film tersebut ada di Hulu
  • Prime Video: apakah film tersebut ada di Prime Video
  • Disney+: apakah film tersebut ada di Disney+
  • Type: Film atau acara TV
  • Directors: Nama sutradara
  • Genres: Jenis genre
  • Country: Negara asal
  • Language: Bahasa asal
  • Runtime: Durasi film

Mari impor modul yang diperlukan dan muat dataset:

 # 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])

Menangani Nilai Hilang

Pada bagian ini, Anda akan bekerja dengan nilai hilang menggunakan fungsi isnull(). Mari lihat contohnya di bawah:

 #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

Anda dapat melihat bahwa variabel Age dan Rotten Tomatoes memiliki lebih dari 50% nilai hilang, yang mengkhawatirkan.

Sekarang, kita akan menangani nilai hilang dengan langkah-langkah berikut:

  • Hapus kolom yang memiliki lebih dari 50% nilai hilang
  • Hapus NA dari kolom IMDb, Directors, Genres, Country, Language, dan Runtime
  • Reset indeks
  • Ubah kolom year menjadi 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

Plot Distribusi

Anda dapat memeriksa distribusi kolom Year menggunakan fungsi distplot() dari seaborn. Mari plot distribusi Year film.

#checking Distribution of years
plt.figure(figsize=(20,5))
sns.distplot(df['Year'])
plt.show()
plot distribusi tahun rilis film

Bagan menunjukkan distribusi tahun asal film. Anda dapat menafsirkan bahwa sebagian besar film dibuat antara tahun 2000 hingga 2020. Mari plot distribusi peringkat IMDB.

# Distribution of IMDb Rating
plt.figure(figsize=(20,5))
sns.distplot(df['IMDb'])
plt.show()
plot distribusi peringkat imdb

Plot distribusi di atas sedikit menyimpang. Anda dapat menafsirkan bahwa nilai tengah IMDB sebagian besar film adalah 6,5.

Mari plot distribusi Runtime film.

# Distribution of runtime
sns.distplot(df['Runtime'])
plt.show()
plot distribusi durasi film

Dari bagan di atas, Anda dapat menafsirkan bahwa rata-rata durasi film berada antara 80 hingga 120 menit.

Distribusi Film pada Setiap Platform Streaming

Pada bagian ini, Anda akan melihat distribusi film per platform streaming. Pertama, Anda perlu membuat fungsi m_cnt() yang menghitung jumlah film untuk platform streaming tertentu. Setelah itu, Anda dapat membuat plot menggunakan diagram pai dan memahami pangsa platform streaming.

# 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()
platform streaming

Dari plot di atas, dapat dikatakan bahwa Prime Video menayangkan jumlah judul terbanyak dengan pangsa 71% dan Netflix menayangkan 20% judul. Disney+ dan Hulu menayangkan judul paling sedikit, masing-masing 5,4% dan 3,4%.

Distribusi Film Menurut Genre

Pada bagian ini, Anda akan melihat distribusi film per genre. Pertama, Anda perlu menyiapkan data. Anda harus menangani beberapa genre yang diberikan dalam satu sel dataframe. Untuk itu, Anda dapat menggunakan fungsi split(), apply(), dan stack(). Fungsi split() memisahkan beberapa nilai dengan koma dan membuat daftar. apply(pd.Series,1) untuk membuat beberapa kolom untuk setiap genre dan fungsi stack() menumpuknya menjadi satu kolom.

Setelah tiga operasi ini, kolom Genres baru akan digabungkan dengan dataframe yang ada, dan Anda siap untuk membuat plot. Anda dapat menampilkan 10 genre teratas beserta jumlah filmnya menggunakan fungsi value_counts() dan menggunakan fungsi plot() dari pustaka pandas.

 ##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()
genre film

Dari plot di atas, dapat dikatakan bahwa sebagian besar film memiliki genre umum Drama dan Komedi.

Distribusi Film Menurut Negara

Pada bagian ini, Anda akan melihat distribusi film per negara. Pertama, Anda perlu menyiapkan data. Anda harus menangani beberapa negara yang diberikan dalam satu sel dataframe. Untuk itu, Anda dapat menggunakan fungsi split(), apply(), dan stack(). Fungsi split() memisahkan beberapa nilai dengan koma dan membuat daftar. apply(pd.Series,1) untuk membuat beberapa kolom untuk setiap negara dan fungsi stack() menumpuknya menjadi satu kolom.

Setelah tiga operasi ini, kolom Country baru akan digabungkan dengan dataframe yang ada dan Anda siap untuk membuat plot. Anda dapat menampilkan 10 negara teratas beserta jumlah filmnya menggunakan fungsi value_counts() dan menggunakan fungsi plot() dari pustaka pandas.

 # 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()
negara tempat film dibuat

Grafik di atas menunjukkan bahwa mayoritas film dibuat di Amerika Serikat.

Distribusi Film Menurut Bahasa

Pada bagian ini, Anda akan melihat distribusi film per bahasa. Pertama, Anda perlu menyiapkan data. Anda harus menangani beberapa bahasa yang diberikan dalam satu sel dataframe. Untuk itu, Anda dapat menggunakan fungsi split(), apply(), dan stack(). Fungsi split() memisahkan beberapa nilai dengan koma dan membuat daftar. apply(pd.Series,1) untuk membuat beberapa kolom untuk setiap bahasa dan fungsi stack() menumpuknya menjadi satu kolom.

Setelah tiga operasi ini, kolom Language baru akan digabungkan dengan dataframe yang ada, dan Anda siap untuk membuat plot. Anda dapat menampilkan 10 bahasa teratas beserta jumlah filmnya menggunakan fungsi value_counts() dan menggunakan fungsi plot() dari pustaka pandas.

 # 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 bahasa film

Dari plot di atas, Anda dapat menyimpulkan bahwa mayoritas film berbahasa Inggris.

Distribusi Peringkat IMDB pada Setiap Platform

Pada bagian ini, Anda akan membuat plot distribusi peringkat IMDB per platform. Untuk mendapatkan hasil ini, Anda perlu menerapkan fungsi melt() dan membuat plot FacetGrid. Fungsi melt() mengonversi dataframe lebar menjadi dataframe panjang. Mari lihat contoh di bawah:

 # 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()
Distribusi peringkat IMDB menurut setiap platform

Plot di atas menunjukkan distribusi rata-rata peringkat IMDB pada setiap platform.

banner jelajahi pustaka kursus python datacamp

Runtime per Platform Bersama Kelompok Usia

Pada bagian "Menangani Nilai Hilang", saya telah menghapus kolom Age. Untuk mendapatkan hasil Runtime per Platform bersama Kelompok Usia, saya perlu memuat data kembali dan menerapkan fungsi melt().

# 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)

Setelah memuat dataset kembali dan melakukan melting, saatnya membuat plot untuk runtime vs. platform streaming untuk berbagai kelompok usia.

# Total of runtime in different platform
ax = sns.barplot(x="platform", y="Runtime",hue="Age", estimator=sum, data=df2)
Runtime per Platform bersama Kelompok Usia

Plot di atas menunjukkan bahwa total runtime di Prime Video oleh pengguna kelompok usia 18+ jauh lebih tinggi dibandingkan platform lain. Anda dapat menafsirkan bahwa sebagian besar konten Prime Video berfokus pada kelompok usia 18+.

Membangun Sistem Rekomendasi

Dalam beberapa tahun terakhir, seiring pesatnya YouTube, Walmart, Netflix, dan banyak layanan berbasis web lainnya, sistem rekomendasi telah memberikan dampak besar di industri. Mulai dari menyarankan produk/layanan hingga meningkatkan nilai perusahaan melalui monetisasi iklan online dan mencocokkan relevansi serta preferensi pengguna agar mereka melakukan pembelian. Sistem rekomendasi tak tergantikan dalam penjelajahan web harian kita.

Secara umum, ini adalah kerangka berbasis matematika yang berfokus pada penyaranan produk/layanan kepada pengguna akhir yang relevan dengan kebutuhan dan keinginan mereka. Misalnya, film untuk ditonton, artikel untuk dibaca, produk untuk dibeli, musik untuk didengarkan, atau apa pun tergantung domainnya. Secara garis besar ada tiga metode untuk membangun Sistem Rekomendasi:

  1. Metode Berbasis Konten: Mendefinisikan model untuk pengguna atau item yang berinteraksi dengannya berdasarkan himpunan fitur item untuk merekomendasikan item serupa kepada pengguna.
  2. Metode Collaborative Filtering: Mendefinisikan model berdasarkan skor kemiripan interaksi pengguna dan item atau skor kemiripan antar pengguna untuk rekomendasi item.
  3. Metode Hibrida: Menggunakan metode berbasis konten dan collaborative untuk mencapai hasil yang lebih baik.

Mari terlebih dahulu melakukan prapemrosesan dataset untuk sistem rekomendasi. Pertama, periksa nilai hilang:

# 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")

Anda akan membangun dua sistem rekomendasi berdasarkan cosine similarity.

1. Menggunakan hanya variabel numerik
2. Menggunakan variabel numerik dan kategorikal

Menggunakan Hanya Kolom Numerik

Langkah 1: Pilih variabel numerik

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

Langkah 2: Skala variabel numerik menggunakan min-max scaler untuk mengurangi kompleksitas model dan waktu pelatihan

#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()

Langkah 3: Hitung skor kemiripan menggunakan cosine similarity

Sekarang, Anda akan menghitung skor kemiripan menggunakan cosine similarity.

# 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()

Langkah 4: Menulis fungsi untuk mendapatkan rekomendasi berdasarkan skor kemiripan

  • Fungsi menerima dua argumen, judul film dan skor kemiripan. Fungsi mencari indeks judul yang sesuai dengan indeks original_titles dalam deret indeks kita.
  • Mengambil skor kemiripan berpasangan untuk semua film.
  • Mengurutkan skor kemiripan secara menurun dan mengonversinya menjadi daftar.
  • Mengambil 10 skor dan indeks film teratas serta mengembalikan judul 10 film teratas dari data frame kita.
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)

Di sini, film yang direkomendasikan belum memuaskan. Alasan hasil yang kurang baik ini adalah karena Anda hanya menggunakan peringkat film, durasi film, dan variabel platform. Anda dapat meningkatkannya dengan menggunakan informasi lain seperti genre, sutradara, dan negara.

Menggunakan Kolom Numerik dan Tekstual

Karna sistem rekomendasi sebelumnya bekerja namun rekomendasinya belum memuaskan, Anda akan mencoba pendekatan baru yang lebih baik untuk meningkatkan hasil.

df.head()

Langkah 1:

Anda akan menggabungkan kolom tekstual ke dalam satu kolom lalu menggunakan tokenizer dan TF-IDF Vectorizer untuk membuat matriks jarang dari seluruh skor TF-IDF kata. Kemudian Anda akan memilih dan menskalakan variabel numerik dan menambahkannya ke matriks jarang tersebut. Anda perlu melakukan langkah-langkah berikut untuk prapemrosesan:

  • Memilih semua tipe data object dan menyimpannya dalam daftar.
  • Menghapus kolom ID dan Title.
  • Menggabungkan semua kolom teks/object dengan koma ke dalam satu kolom.
  • Membuat tokenizer untuk menghapus elemen yang tidak diinginkan dari data seperti simbol dan angka.
  • Mengonversi TfidfVector dari teks Setelah itu kita akan melakukan prapemrosesan kolom numerik
  • Memilih variabel numerik ke dalam DataFrame
  • Menskalakan variabel numerik menggunakan minmax scaler (rentang 0,1)
  • Menambahkan variabel numerik ke matriks jarang vektor TF-IDF menggunakan fungsi hstack (hstack digunakan untuk menambahkan array secara horizontal ke matriks jarang).
#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'])

    # Aelecting 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

Langkah 2: Menerapkan fungsi pada data kita dan membuat matriks jarang

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

Langkah 3: Kembali menerapkan Cosine Similarity untuk menghitung skor kemiripan

# 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()

Langkah 4: Mendapatkan rekomendasi dari sistem yang telah ditingkatkan.

give_rec("The Matrix",sig=sig2)

Kali ini sistem rekomendasi bekerja jauh lebih baik daripada sistem sebelumnya, yang menunjukkan bahwa dengan menambahkan data yang lebih relevan seperti teks deskripsi, sistem rekomendasi berbasis konten dapat ditingkatkan secara signifikan.

Kesimpulan

Selamat, Anda telah sampai di akhir tutorial ini!

Dalam tutorial ini, Anda melakukan analisis eksploratif pada dataset film platform streaming. Anda telah mengeksplorasi nilai hilang, plot distribusi per variabel, dan distribusi film pada setiap platform streaming. Anda juga menemukan wawasan tentang genre, negara, bahasa, peringkat IMDB, dan durasi film. Terakhir, Anda juga telah melihat cara membangun sistem rekomendasi di Python.

Lihat tutorial DataCamp Recommender Systems in Python.

banner pustaka kursus python datacamp
Topik
Python
Data Science
Analisis Data

Pelajari lebih lanjut tentang Python

Kursus

Membangun Recommendation Engine di Python

4 jam
12.9K
Pelajari cara membangun mesin rekomendasi menggunakan Python dengan teknik pembelajaran mesin.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya