Skip to content
Extraits de code Groupes Projets
Valider e8d85192 rédigé par Adrien Payen's avatar Adrien Payen
Parcourir les fichiers

last update

parent 7cbfb8e0
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Aucun aperçu pour ce type de fichier
Fichier supprimé
Fichier ajouté
Fichier supprimé
......@@ -391,13 +391,13 @@ def directors_nationality(data_1):
for director in directors:
if director in directors_nationality_dict:
# Use a set to store unique nationalities for each director
directors_nationality_dict[director]['nationalities'].add(str(nationality))
# Ajouter la nationalité seulement si elle n'est pas déjà présente dans la liste
if str(nationality) not in directors_nationality_dict[director]['nationalities']:
directors_nationality_dict[director]['nationalities'].add(str(nationality))
directors_nationality_dict[director]['number of movies or series'] += 1
else:
directors_nationality_dict[director] = {'nationalities': set(), 'number of movies or series': 1}
directors_nationality_dict[director]['nationalities'].add(str(nationality))
directors_nationality_dict[director] = {'nationalities': {str(nationality)}, 'number of movies or series': 1}
# Remove duplicates from the nationalities list for each director
# Remove consecutive duplicates from the nationalities list for each director
for director_info in directors_nationality_dict.values():
......@@ -411,10 +411,10 @@ def directors_nationality(data_1):
# Display the list of directors and their nationalities
print("Directors and their nationalities, sorted by the number of movies and series produced:")
for director, info in sorted_directors:
for i, (director, info) in enumerate(sorted_directors[:25]):
director_name = str(director) if pd.notna(director) else 'Unknown'
nationalities_str = ', '.join(str(n) for n in info['nationalities'])
print(f"{director_name}: {nationalities_str} - {info['number of movies or series']} movies/series")
print(f"{i+1}. {director_name}: {nationalities_str} - {info['number of movies or series']} movies/series")
# Save to CSV using the DataFrame
save_to_csv(directors_df) # Commenting this out since the 'save_to_csv' function is not provided
......@@ -536,30 +536,34 @@ def read_user_ratings(file_path):
return ratings
def create_category_matrix(catalog, categories):
# Créez la matrice avec une rangée et une colonne supplémentaires pour les noms de catégories
category_matrix = [[0 for _ in range(len(categories) + 1)] for _ in range(len(categories) + 1)]
def create_category_matrix(catalog, categories, output_file_path):
# Créez la matrice sans les noms de catégories
category_matrix = [[0 for _ in range(len(categories))] for _ in range(len(categories))]
# Ajoutez les noms de catégories à la première ligne et à la première colonne
for i in range(len(categories)):
category_matrix[0][i + 1] = categories[i] # Ajoutez les noms de catégories à la première ligne
category_matrix[i + 1][0] = categories[i] # Ajoutez les noms de catégories à la première colonne
# Remplissez la matrice avec les données
for show_id, movie_categories in catalog.items():
for i in range(len(categories)):
if categories[i] in movie_categories[1]:
for j in range(len(categories)):
if categories[j] in movie_categories[1]:
category_matrix[i + 1][j + 1] += 1 # Commencez à remplir à partir de la deuxième ligne et de la deuxième colonne
# Ajoutez les noms de catégories à la première colonne et les données de la matrice
# Assurez-vous que les indices sont valides avant d'incrémenter
if i < len(category_matrix) and j < len(category_matrix[i]):
category_matrix[i][j] += 1
# Ajoutez les noms de catégories à la première ligne et à la première colonne du DataFrame
category_matrix_with_names = [[category] + row for category, row in zip(categories, category_matrix)]
df = pd.DataFrame(category_matrix_with_names, columns=[''] + categories)
# Enregistrez le DataFrame dans un fichier Excel avec les noms de colonnes et de lignes
df.to_excel(output_file_path, index=False)
return category_matrix
def recommend_movies(user_id, catalog, user_ratings, category_matrix, threshold=0.5):
def recommend_movies(user_id, catalog, user_ratings, category_matrix, threshold=0.9999):
global categories # Déclarer categories en tant que variable globale
categories = list(set(category for _, movie_info in catalog.items() for category in movie_info[1])) # permet d'actualiser la variable catégories global au niveau local
categories = list(set(category for _, movie_info in catalog.items() for category in movie_info[1])) # permet d'actualiser la variable catégories global au niveau local
user_id = int(user_id) # Convertir user_id en entier
......@@ -567,12 +571,17 @@ def recommend_movies(user_id, catalog, user_ratings, category_matrix, threshold=
category_index = {}
# Créer le dictionnaire pour stocker les indices des catégories
category_index = {category: i + 1 for i, category in enumerate(categories)}
category_index = {category: i for i, category in enumerate(categories)}
# Ajout de l'affectation manquante
user_categories = categories
for show_id, categories in catalog.items():
# Check if the user has rated the show
if show_id in user_ratings and user_id in user_ratings[show_id] and user_ratings[show_id][user_id] == 0:
# Liste des catégories communes entre le film/série et les films/séries notés par l'utilisateur
common_categories = [category for category in categories[1] if category in catalog[show_id][1]]
common_categories = [category for category in categories[1] if category in user_categories]
if common_categories:
# Calculez la similarité entre le film/série et les films/séries notés par l'utilisateur
similarity = sum(
......@@ -589,26 +598,39 @@ def recommend_movies(user_id, catalog, user_ratings, category_matrix, threshold=
return sorted_suggestions[:5]
# Ajout d'impression pour déboguer
print("User categories:", categories)
def recommandation_algorithm() :
# Replace file_path_1 and file_path_2 with the actual file paths
file_path_1 = "/Users/adrien/vscodeworkspace/coding-project/projet_en_groupe/data_cp_2023/netflix_titles-2.csv"
file_path_2 = "/Users/adrien/vscodeworkspace/coding-project/projet_en_groupe/data_cp_2023/ratings.csv"
user_id = input("quel est ton user ? ")
while True:
user_id = input("Quel est ton user ? ")
try:
user_id = int(user_id)
# Check if user_id is between 1 and 100
if 1 <= user_id <= 100:
break # Sort de la boucle si l'identifiant est valide
else:
print("L'identifiant de l'utilisateur doit être compris entre 1 et 100.")
except ValueError as e:
print(f"Veuillez entrer un identifiant d'utilisateur valide. Erreur: {e}")
try:
user_id = int(user_id)
except ValueError:
print("Veuillez entrer un identifiant d'utilisateur valide.")
exit()
# Read data from CSV files
catalog = read_movie_series_info(file_path_1)
ratings = read_user_ratings(file_path_2)
# Create category matrix
categories = list(set(category for _, movie_info in catalog.items() for category in movie_info[1]))
category_matrix = create_category_matrix(catalog, categories)
output_file_path = "matrice_categories.xlsx"
category_matrix = create_category_matrix(catalog, categories, output_file_path)
# Display movies already viewed by the user
print("Films déjà vus par l'utilisateur:")
......@@ -646,7 +668,7 @@ def action() :
print("16. Display the nationalities of directors and sort the list based on the number of movies and series directed")
print("17. Display basic statistics")
print("18. Get Personalized Recommendations")
print("... Enter STOP to stop")
print("STOP to stop")
command = input("Enter the number of what you want to do: ")
if command == "1" :
......@@ -685,7 +707,7 @@ def action() :
basic_statistics(data_1)
elif command == "18" :
recommandation_algorithm()
elif command == "..." :
elif command == "STOP" :
return False
......
Ce diff est replié.
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter