Empfehlungssystem mit inhaltsbasierter Filterung
Empfehlungssystem oder Empfehlungssystem ist ein System, das Benutzern hilft, Dinge zu entdecken, die ihnen gefallen. Es kann zur Empfehlung von Produkten, Filmen oder Musik verwendet werden. Das System nutzt Präferenzen und Tarife, um Vorhersagen über die Wahl eines einzelnen Benutzers zu treffen.
Ein Empfehlungssystem kann inhaltsbasierte Filterung, kollaborative Filterung oder Hybridtechniken verwenden, um Empfehlungen für neue Benutzer basierend auf dem beobachteten Verhalten anderer Benutzer zu generieren.
Mithilfe eines inhaltsbasierten Filtersystems werden Empfehlungen basierend auf der Ähnlichkeit zwischen dem von Ihnen bewerteten Artikel und anderen Artikeln in unserem Katalog abgegeben.
Bei der kollaborativen Filterung werden Ähnlichkeiten zwischen Benutzern genutzt, beispielsweise die Artikel, die sie gekauft oder angesehen haben. Je ähnlicher ein Artikel einem anderen ist, desto höher ist die Wahrscheinlichkeit, dass er empfohlen wird
In diesem Artikel erstellen wir ein Filmempfehlungssystem basierend auf den von Benutzern gesuchten Inhalten.
Voraussetzungen
Stellen Sie sicher, dass die erforderlichen Bibliotheken auf Ihrem Gerät installiert sind. Wenn nicht, können Sie es zunächst installieren, indem Sie sich die Dokumentation auf der Website der jeweiligen Bibliothek ansehen.
Bibliotheken
Importieren Sie alle erforderlichen Bibliotheken.
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
Laden Sie den Datensatz.
movie_rating_df = pd.read_csv('https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/movie_rating_df.csv')
cast_df = pd.read_csv('https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/actor_name.csv')
director_writer_df = pd.read_csv('https://dqlab-dataset.s3-ap-southeast-1.amazonaws.com/directors_writers.csv')
Konvertieren Sie die Namen der Regisseure und Autoren in den Listendatentyp, da einige Filme mehr als einen Regisseur oder Autor haben.
director_writer_df['director_name'] = director_writer_df['director_name'].apply(lambda row: row.split(','))
director_writer_df['writer_name'] = director_writer_df['writer_name'].apply(lambda row: row.split(','))
cast_df = cast_df[['nconst','primaryName','knownForTitles']]
cast_df.head()
cast_df['knownForTitles'].apply(lambda x: len(x.split(','))).unique()
cast_df['knownForTitles'] = cast_df['knownForTitles'].apply(lambda x: x.split(','))
cast_df.head()
df_uni = []
for x in ['knownForTitles']:
idx = cast_df.index.repeat(cast_df['knownForTitles'].str.len())
df1 = pd.DataFrame({
x: np.concatenate(cast_df[x].values)
})
df1.index = idx
df_uni.append(df1)
df_concat = pd.concat(df_uni, axis=1)
unnested_df = df_concat.join(cast_df.drop(['knownForTitles'], 1), how='left')
unnested_df = unnested_df[cast_df.columns.tolist()]
unnested_df.head()
unnested_drop = unnested_df.drop(['nconst'], axis=1)
df_uni = []
for col in ['primaryName']:
dfi = unnested_drop.groupby(['knownForTitles'])[col].apply(list)
df_uni.append(dfi)
df_grouped = pd.concat(df_uni, axis=1).reset_index()
df_grouped.columns = ['knownForTitles','cast_name']
df_grouped.head()
base_df = pd.merge(df_grouped, movie_rating_df, left_on='knownForTitles', right_on='tconst', how='inner')
base_df = pd.merge(base_df, director_writer_df, left_on='tconst', right_on='tconst', how='left')
base_df.head()
base_drop = base_df.drop(['knownForTitles'], axis=1)
base_drop.info()
base_drop['genres'] = base_drop['genres'].fillna('Unknown')
base_drop.isnull().sum()
base_drop[['director_name','writer_name']] = base_drop[['director_name','writer_name']].fillna('Unknown')
base_drop['genres'] = base_drop['genres'].apply(lambda x: x.split(','))
base_drop2 = base_drop.drop(['tconst','isAdult','endYear','originalTitle'], axis=1)
base_drop2 = base_drop2[['primaryTitle','titleType','startYear','runtimeMinutes','genres','averageRating','numVotes','cast_name','director_name','writer_name']]
base_drop2.columns = ['title','type','start','duration','genres','rating','votes','cast_name','director_name','writer_name']
base_drop2.head()
feature_df = base_drop2[['title','cast_name','genres','director_name','writer_name']]
feature_df.head()
Erstellen Sie eine Funktion, um Leerzeichen aus jeder Zeile und jedem ihrer Elemente zu entfernen.
def sanitize(x):
try:
if isinstance(x, list):
return [i.replace(' ','').lower() for i in x]
else:
return [x.replace(' ','').lower()]
except:
print(x)
feature_cols = ['cast_name','genres','writer_name','director_name']
for col in feature_cols:
feature_df[col] = feature_df[col].apply(sanitize)
def soup_feature(x):
return ' '.join(x['cast_name']) + ' ' + ' '.join(x['genres']) + ' ' + ' '.join(x['director_name']) + ' ' + ' '.join(x['writer_name'])
feature_df['soup'] = feature_df.apply(soup_feature, axis=1)
count = CountVectorizer(stop_words='english')
count_matrix = count.fit_transform(feature_df['soup'])
print(count)
count_matrix.shape
cosine_sim = cosine_similarity(count_matrix, count_matrix)
cosine_sim
indices = pd.Series(feature_df.index, index=feature_df['title']).drop_duplicates()
def content_recommender(title):
idx = indices[title]
sim_scores = list(enumerate(cosine_sim[idx]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[1:11]
movie_indices = [i[0] for i in sim_scores]
return base_df.iloc[movie_indices]
content_recommender('The Lion King')
Das Empfehlungssystem ist ein wesentlicher Bestandteil des heutigen Internets. Es kann als Online-Dienst implementiert werden, über den Kunden Produkte oder andere Dienstleistungen auswählen. Dieses System hilft Unternehmen dabei, den Umsatz und die Kundenzufriedenheit zu steigern, indem es Produkte vorschlägt, die wahrscheinlich von Interesse sind.
Bitte folgen Sie mir auf Twitter unter @asisrianto , um die neuesten Updates zum Thema Datenwissenschaft zu erhalten.

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































