MODUL PRAKTIKUM
Oleh
Diyo Sukma Pradana
PERBEDAAN CONTENT & ALGORITMA NAÏVE
COLLABORATIVE BAYES
𝑃 𝑥 𝑐 𝑃(𝑐)
𝑃 𝑐𝑥 =
𝑃(𝑥)
Banyak Siswa/i Sekolah Menengah Atas (SMA) yang kebingungan dalam memilih kegiatan
ekstrakurikuler yang cocok dan sesuai dengan minat juga bakat mereka. Juga belum diketahui
metode terbaik dalam membuat sistem rekomendasi seputar kasus ini, maka ada 2 identifikasi
masalah:
1. Belum adanya suatu sistem rekomendasi untuk pemilihan ekstrakurikuler bagi siswa SMA
2. Belum diketahui metode terbaik antara metode Content-based Filtering dan Collaborative
Filtering dalam membuat sistem rekomendasi ekstrakurikuler siswa SMA
LANGKAH
PENYELESAIAN
KASUS
PEMBAHASAN
02. Data Understanding dan Memahami data lebih lanjut, apa saja atribut
Univariate Exploratory Data didalamnya dan berfungsi sebagai apa
Analysis
Import dahulu library pandas, lalu upload dataset berextensi excel/xlsx pada google colab,
panggil dengan kode pd.read.excel.
Univariate Exploratory Data Analysis
df_cbeskul.info()
Tahapan ini berfokus pada merapihkan dataset yang akan digunakan, mengeksplorasi data
untuk melihat korelasi setiap variabel/atribut dan juga visualisasi data.
Univariate Exploratory Data Analysis
Untuk visualisasi data kita bisa menggunakan library matplotlib
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.pie([value_count_bidang['Akademik & Kebahasaan'],
value_count_bidang['Olahraga'],
value_count_bidang['IT'],
value_count_bidang['Kesenian'],
value_count_bidang['Bela Negara'],
value_count_bidang['Lingkungan Hidup']],
labels=['Akademik & Kebahasan', 'Olahraga', 'IT', 'Kesenian', 'Bela Negara',
'Lingkungan Hidup'],
autopct='%1.1f%%', startangle=45, radius=2)
ax.set_title("Bidang Ekstrakurikuler", pad=100)
plt.show()
DATA PREPROCESSING
Dari 16 kolom yang tersedia kita hanya mengambil 8 kolom yaitu: Nama, Bidang
Ekstrakurikuler, Gender, Jurusan, Teman Berpengaruh, Lama Pertemuan, Banyak Pertemuan
dan Minat Bakat.
df_cbeskul.head()
DATA PREPARATION
Pada tahapan ini, kita mengecek keseluruhan dataset yang sudah jadi apakah ada isian
yang kosong/null/Missing Value.
df_cbeskul.isnull().sum()
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Install Library yang akan dipakai:
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import CountVectorizer NLTK: rake_nltk, berfungsi
untuk ektraksi kata kunci
!pip install rake-nltk Sastrawi, berfungsi untuk
from rake_nltk import Rake
menghapus kata hubung
import nltk
nltk.download('stopwords') seperti dan, yang, jika, dan
import nltk
sebagainya
nltk.download('punkt')
from nltk.corpus import stopwords Scikit-Learn, diantaranya
df_cbeskul['Key_words'] = ""
r = Rake()
r.extract_keywords_from_text(plot)
key_words_dict_scores = r.get_word_degrees()
row['Key_words'] = list(key_words_dict_scores.keys())
list_stopwords = set(stopwords.words('indonesian'))
def stopwords_removal(words):
return [word for word in words if word not in list_stopwords]
df_cbeskul['Key_words'] = df_cbeskul['Key_words'].apply(stopwords_removal)
df_cbeskul
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Selanjutnya menggabungkan 6 kolom kata-kata tersebut dalam kolom baru bernama
bag_of_words
df_cbeskul['bag_of_words'] = ''
columns = df_cbeskul.columns
for index, row in df_cbeskul.iterrows():
words = ''
for col in columns:
if col == 'Key_words':
words = words + ' '.join(row[col])+ ' '
else:
words = words + row[col]+ ' '
row['bag_of_words'] = words
df_cbeskul.head()
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Tahap selanjutnya merubah representasi teks menjadi vektor dengan library countvectorizer :
count = CountVectorizer()
count_matrix = count.fit_transform(df_cbeskul['bag_of_words'])
count.get_feature_names()
MODEL DEVELOPMENT : CONTENT
BASED FILTERING
Untuk melihat hasil refresentasi vektor, bisa dengan kode:
cv_count = pd.DataFrame(count_matrix.toarray())
cv_count
Selanjutnya untuk melihat kemiripan antara dokumen, kita menggunakan cosine similarity:
cosine_sim = cosine_similarity(count_matrix)
cosine_sim
recommended = []
top_indexes = list(score_series.iloc[1:2].index)
for i in top_indexes:
recommended.append(list(df_cbeskul['bag_of_words'])[i])
return recommended
x = recommendations('Siswa01')
for i in x:
print(i.split()[0])