Porovnání všech filmů najednou
Zjišťovat Jaccardovu podobnost mezi dvěma konkrétními filmy je skvělé pro menší analýzy, ale u větších datasetů to může být pomalé.
V tomto cvičení vypočítáš podobnosti mezi všemi filmy a uložíš je do DataFrame pro rychlé a snadné vyhledávání.
Při hledání podobností mezi řádky DataFrame bys mohl/a procházet všechny dvojice a počítat je jednotlivě, ale efektivnější je použít funkci pdist() (párová vzdálenost) z knihovny scipy.
Výsledek pak můžeš přeformátovat do požadovaného obdélníkového tvaru pomocí squareform() ze stejné knihovny. Protože chceš hodnoty podobnosti, nikoli vzdálenosti, odečti výsledné hodnoty od 1.
movie_cross_table je opět načtena za tebe.
Toto cvičení je součástí kurzu
Tvorba doporučovacích systémů v Pythonu
Pokyny k cvičení
- Vypočítej Jaccardovy vzdálenosti mezi všemi filmy a výsledky ulož do proměnné
jaccard_similarity_array. - Vytvoř DataFrame z pole
jaccard_similarity_arraysmovie_genre_df.indexjako řádky i sloupci. - Vypiš prvních 5 řádků DataFrame a prozkoumej skóre podobnosti.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# Import functions from scipy
from scipy.spatial.distance import pdist, squareform
# Calculate all pairwise distances
jaccard_distances = ____(movie_cross_table.values, metric='____')
# Convert the distances to a square matrix
jaccard_similarity_array = 1 - ____(____)
# Wrap the array in a pandas DataFrame
jaccard_similarity_df = pd.____(jaccard_similarity_array, ____=movie_cross_table.index, ____=movie_cross_table.index)
# Print the top 5 rows of the DataFrame
print(jaccard_similarity_df.head())