Sebelumnya saya telah menjelaskan teori tentang sistem rekomendasi yang akan kita buat, jika belum membaca tulisan saya di part pertama silahkan baca di tautan berikut ini
pada kesempatan kali ini saya akan membuat sistem rekomendasi berdasarkan tingkat kesamaan data atau biasa disebut content based filtering, data yang akan saya gunakan berasal dari tautan berikut ini
baiklah langsung saja kita praktekan
1. Muat Dataset
untuk membaca data csv tersebut saya menggunakan library pandas
import pandas as pd
data = pd.read_csv("movies_metadata.csv")
2. Memilih data yang diperlukan
disini saya akan menggunakan overview atau sinopsis film untuk mencoba membandingkan dengan film yang lain dan dihitung tingkat kemiripannya. jadi data yang akan saya pilih adalah overview dan title
film = data[["original_title", "overview"]]
film.head()
3. Menghilangkan outlier dan stopwords
outlier di dalam data text berupa kumpulan punctuation seperti : !@#$^&* karakter tersebut harus dihilangkan karena tidak memiliki makna yang begitu berarti, kemudian kita harus menghilangkan stopwords seperti : yang, dia, demikian, ingin, juga dll. untuk membersihkan data kita dari hal tersebut disini saya akan menggunakan library yang bernama mern
pertama install library tersebut melalui perintah berikut
# pip3 install mernfrom mern import TextOutlier
outlier_remover = TextOutlier()# punctuation
outlier_punctuation=outlier_remover.remove_punctuation(film['overview'].values) # stopwordsclean_data =
outlier_remover.remove_stopwords(outlier_punctuation, "english")
untuk menghilangkan stopwords, fungsi remove_stopwords memerlukan bahasa, masukan bahasa sesuai dengan bahasa yang digunakan pada dataset kalian. karena dataset saya berbahasa inggris jadi saya memasukan english
4. Menghitung bobot data
untuk menghitung bobot saya akan menggunakan metode TF-IDF, seperti yang saya jelaskan di artikel sebelumnya
# menghitung bobot data from sklearn.feature_extraction.text import TfidfVectorizer
vector = TfidfVectorizer()
transformed = vector.fit_transform(clean_data).toarray()# memilih index film berdasarkan judultitle = data['original_title'].str.lower().tolist()
jika kita lihat maka penampakan datanya akan terlihat seperti ini
5. Menghitung tingkat kesamaan film
data yang telah kita transformasikan dengan metode TF-IDF tadi akan kita gunakan untuk menghitung tingkat kesamaan antara film A dengan film yang lainnya. untuk menghitung tingkat kesamaan ini saya akan menggunakan rumus cosine similarity
sebelum kita menghitung tingakat kesamaannya kita perlu memilih film yang mana yang akan kita bandingkan, disini saya akan mengambil index array berdasarkan title dari film tersebut, dan disini saya akan memilih film toy story
misalnya seperti ini
nama = ['alex', 'george', 'david']
print(nama.index('alex')# hasilnya adalah 0, karena alex berada di index ke 0
mencari index array berdasarkan title
# memilih index film berdasarkan judultitle = data['original_title'].str.lower().tolist()
input_title = "toy story"
index_film = title.index(input_title)
print("index film %d"%(index_film))# menghitung kesamaanfrom sklearn.metrics.pairwise import cosine_similaritysimilarity = []for tfidf in transformed:
calculate = cosine_similarity(transformed[index_film].reshape(1,-1), tfidf.reshape(1,-1))
similarity.append(calculate)###
copy_similarity = [i for i in similarity]copy_similarity.sort(reverse=True)
6. Menampilkan hasil rekomendasi
pada kode diatas terlihat bahwa terdapat variable similarity, dan copy_similarity. variable similarity saya gunakan untuk menampung tingkat kesamaan data tanpa diurutkan, sedangkan copy_similarity saya gunakan untuk mengurutkan tingkat kesamaan dari yang terbesar sampai ke terkecil.
dari hasil perhitungan diatas berikut adalalah rekomendasi film yang dihasilkan
kode utuh
import pands as pd data = pd.read_csv("movies_metadata") data.head() # memilih kolom yang diperlukan film = data[["original_title", "overview"]] film.head() # menghilangkan outlier dan stopwords from mern import TextOutlier outlier_remover = TextOutlier() # punctuation outlier_punctuation = outlier_remover.remove_punctuation(film['overview'].values) # stopwords clean_data = outlier_remover.remove_stopwords(outlier_punctuation, "english") # menghitung bobot data from sklearn.feature_extraction.text import TfidfVectorizer vector = TfidfVectorizer() transformed = vector.fit_transform(clean_data).toarray() # memilih index film berdasarkan judul title = data['original_title'].str.lower().tolist() input_title = "toy story" index_film = title.index(input_title) print("index film %d"%(index_film)) # menghitung tingkat kemiripan dengan menggunakan cosine similarity from sklearn.metrics.pairwise import cosine_similarity similarity = [] for tfidf in transformed: calculate = cosine_similarity(transformed[index_film].reshape(1,-1), tfidf.reshape(1,-1)) similarity.append(calculate) copy_similarity = [i for i in similarity] copy_similarity.sort(reverse=True) # result similar_data = [] for i in copy_similarity: similar_data.append(title[similarity.index(i)]) # menampilkan 10 film dari yang paling mirip for film_rekomendasi in similar_data[0:10]: print(film_rekomendasi)
0 Comments