brendabor commited on
Commit
cf87f54
1 Parent(s): 27d5ed6

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -0
app.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ from sklearn.preprocessing import StandardScaler
4
+ from sklearn.metrics.pairwise import cosine_similarity
5
+
6
+ # Load your dataset
7
+ df1 = pd.read_csv('your_dataset.csv') # Replace 'your_dataset.csv' with your actual dataset filename
8
+
9
+ # Copy the content-based recommendation code
10
+ audio_features = df1[['danceability', 'energy', 'key', 'loudness', 'mode', 'speechiness',
11
+ 'acousticness', 'instrumentalness', 'liveness', 'valence', 'tempo',
12
+ 'duration_ms', 'time_signature']]
13
+ mood_cats = df1[['mood_cats']]
14
+
15
+ # Normalize audio features
16
+ scaler = StandardScaler()
17
+ audio_features_scaled = scaler.fit_transform(audio_features)
18
+
19
+ # Combine mood and audio features
20
+ combined_features = pd.concat([mood_cats, pd.DataFrame(audio_features_scaled)], axis=1)
21
+
22
+ # Calculate similarity matrix
23
+ similarity_matrix = cosine_similarity(combined_features)
24
+
25
+ def recommend_cont(song_index, num_recommendations=5):
26
+ song_similarity = similarity_matrix[song_index]
27
+ # Get indices and similarity scores of top similar songs
28
+ similar_songs = sorted(list(enumerate(song_similarity)), key=lambda x: x[1], reverse=True)[1:num_recommendations+1]
29
+ recommended_song_indices = [idx for idx, similarity in similar_songs]
30
+ recommended_songs = df1.iloc[recommended_song_indices].copy()
31
+ recommended_songs['score'] = [similarity for idx, similarity in similar_songs]
32
+ return recommended_songs
33
+
34
+ # Streamlit app
35
+ st.title('Content-Based Recommender System')
36
+
37
+ # Select a song index
38
+ selected_index = st.slider('Select a song index', 0, len(df1)-1, 0)
39
+
40
+ # Get recommendations
41
+ recommended_songs = recommend_cont(selected_index)
42
+
43
+ # Display recommended songs using st.write
44
+ st.subheader('Recommended Songs:')
45
+ for index in recommended_songs.index:
46
+ st.write(f"Song Index: {index}, Title: {recommended_songs.loc[index, 'track_name']}, Artist: {recommended_songs.loc[index, 'track_artist']}, Score: {recommended_songs.loc[index, 'score']}")
47
+