Module src.get_all

This file is responsible for handling all data operations such as showing songs that the user can select. Recommendation of songs filtering operations etc.

Expand source code
"""
This file is responsible for handling all data operations such as showing songs that the user can select.
Recommendation of songs filtering operations etc.
"""

import pandas as pd
import random

"""
This function returns songs and their title, artist, year and genre.
"""
def filtered_songs():
    all_songs = pd.read_csv("./data/songs.csv")
    all_songs = all_songs.filter(["title", "artist", "year", "top genre"])
    return all_songs


"""
This function returns all songs in the dataset.
"""
def get_all_songs():
    all_songs = pd.read_csv("./data/songs.csv")
    return all_songs


"""
This function returns recommended songs based on the songs that the user selected.
"""
def recommend(input_songs):
    # removing all songs with count = 1
    songs = get_all_songs()
    songs = songs.groupby('top genre').filter(lambda x: len(x) > 0)
    # creating dictionary of song titles and genre
    playlist = dict(zip(songs['title'], songs['top genre']))
    # creating dictionary to count the frequency of each genre
    freq = {}
    for item in songs['top genre']:
        if (item in freq):
            freq[item] += 1
        else:
            freq[item] = 1
    # create list of all songs from the input genre
    selected_list = []
    output = []
    for input in input_songs:
        if input in playlist.keys():
            for key, value in playlist.items():
                if playlist[input] == value:
                    selected_list.append(key)
            selected_list.remove(input)
    if (len(selected_list) >= 10):
        output = random.sample(selected_list, 10)
    else:
        extra_songs = 10 - len(selected_list)
        song_names = songs['title'].to_list()
        song_names_filtered = [x for x in song_names if x not in selected_list]
        selected_list.extend(random.sample(song_names_filtered, extra_songs))
        output = selected_list.copy()
    return output

Functions

def filtered_songs()
Expand source code
def filtered_songs():
    all_songs = pd.read_csv("./data/songs.csv")
    all_songs = all_songs.filter(["title", "artist", "year", "top genre"])
    return all_songs
def get_all_songs()
Expand source code
def get_all_songs():
    all_songs = pd.read_csv("./data/songs.csv")
    return all_songs
def recommend(input_songs)
Expand source code
def recommend(input_songs):
    # removing all songs with count = 1
    songs = get_all_songs()
    songs = songs.groupby('top genre').filter(lambda x: len(x) > 0)
    # creating dictionary of song titles and genre
    playlist = dict(zip(songs['title'], songs['top genre']))
    # creating dictionary to count the frequency of each genre
    freq = {}
    for item in songs['top genre']:
        if (item in freq):
            freq[item] += 1
        else:
            freq[item] = 1
    # create list of all songs from the input genre
    selected_list = []
    output = []
    for input in input_songs:
        if input in playlist.keys():
            for key, value in playlist.items():
                if playlist[input] == value:
                    selected_list.append(key)
            selected_list.remove(input)
    if (len(selected_list) >= 10):
        output = random.sample(selected_list, 10)
    else:
        extra_songs = 10 - len(selected_list)
        song_names = songs['title'].to_list()
        song_names_filtered = [x for x in song_names if x not in selected_list]
        selected_list.extend(random.sample(song_names_filtered, extra_songs))
        output = selected_list.copy()
    return output