c'est fini tout est bon

master
Paul Squizzato 9 months ago
parent 4c5bc9d059
commit 77e509aec8

2
.gitignore vendored

@ -175,5 +175,5 @@ cython_debug/
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.idea/

@ -1,65 +0,0 @@
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sklearn as sk
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error
# dfRatingsTropGrand = pd.read_csv("processedData/actorsRatingsPerMovie.tsv",sep='\t')
# tconst ratings actorNames averageRatingMovie
# dfRatings = dfRatingsTropGrand[dfRatingsTropGrand['ratings'].apply(lambda x: len(eval(x)) >= 4)]
# dfRatings.to_csv("processedData/actorsRatingsPerMovieGoodToUse.tsv", index=False, sep="\t")
dfRatings = pd.read_csv("processedData/actorsRatingsPerMovieGoodToUse.tsv", sep="\t")
dfActeurs = pd.read_csv("processedData/actorsRatingsGroupedWithName.tsv", sep="\t")
print("Veuillez entrer un entier positif inférieur ou égal à ",len(dfRatings))
print("(Plus le nombre est petit, le temps de préparation sera moins long, mais la précision du modèle sera plus petite)")
val = input(": ")
val = int(val)
listMovies = dfRatings.sample(val)['tconst'].values
# listMovies = dfRatings['tconst'].values
listRatingsA = []
listRatingsM = []
datas = []
nbDiese = 0
for i in range(len(listMovies)):
valPrct = i / len(listMovies) * 100
print("{:.2f}".format(valPrct), "%", end="\r")
film = listMovies[i]
bob = (dfRatings.averageRatingMovie.loc[dfRatings.tconst == film].values[0],
eval(dfRatings.ratings.loc[dfRatings.tconst == film].values[0]))
listRatingsA.append(bob[1][:4])
listRatingsM.append(bob[0])
print("")
x = listRatingsA
y = listRatingsM
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.3)
lnrg = LinearRegression()
# clf = lnrg.fit(xtrain,ytrain)
xtrain = np.array(xtrain)
clf = lnrg.fit(x, y)
predictions = lnrg.predict(xtest)
print("\nPréparation du modèle de regréssion linéaire terminée\n")
print('Erreur quadratique : ', mean_squared_error(ytest, predictions))
print('Écart moyen : ', mean_absolute_error(ytest, predictions),"\n")
def calculPrevision(listNomsActeurs):
if len(listNomsActeurs) == 4:
print('\nPrédiction en cours...\n')
notesActeurs = []
for nom in listNomsActeurs:
note = dfActeurs.loc[dfActeurs.primaryName == nom].averageRatingMean.values[0]
print(nom, " a pour note moyenne : ", note)
notesActeurs.append(note)
prediction = clf.predict([notesActeurs])[0]
print("\nNote prédite : ", "{:.2f}".format(prediction), "\n")
else:
print("La liste d'acteurs n'est pas de la bonne taille")

@ -5,6 +5,11 @@ import asyncio
import time
from concurrent.futures import ThreadPoolExecutor
import threading
import sklearn as sk
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error
from joblib import dump
# Variable globale pour indiquer quand le script principal a terminé
script_done = False
@ -105,6 +110,43 @@ def data_manipulation(DataIsLoaded = None):
# actorsRatingsPerMovie = pd.DataFrame(list(allActorRatingsMovies.items()), columns=['tconst', 'ratings'])
# actorsRatingsPerMovie.to_csv("actorsRatingsPerMovie.tsv", index=False, sep="\t")
def creationModele():
dfRatings = pd.read_csv("processedData/actorsRatingsPerMovieGoodToUse.tsv", sep="\t")
# listMovies = dfRatings.sample(int(len(dfRatings)//100))['tconst'].values
listMovies = dfRatings['tconst'].values
listRatingsA = []
listRatingsM = []
datas = []
nbDiese = 0
for i in range(len(listMovies)):
valPrct = i / len(listMovies) * 100
print("{:.2f}".format(valPrct), "%", end="\r")
film = listMovies[i]
bob = (dfRatings.averageRatingMovie.loc[dfRatings.tconst == film].values[0],
eval(dfRatings.ratings.loc[dfRatings.tconst == film].values[0]))
listRatingsA.append(bob[1][:4])
listRatingsM.append(bob[0])
print("")
x = listRatingsA
y = listRatingsM
xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.3)
lnrg = LinearRegression()
# clf = lnrg.fit(xtrain,ytrain)
xtrain = np.array(xtrain)
clf = lnrg.fit(x, y)
predictions = lnrg.predict(xtest)
print("\nPréparation du modèle de regréssion linéaire terminée\n")
print('Erreur quadratique : ', mean_squared_error(ytest, predictions))
print('Écart moyen : ', mean_absolute_error(ytest, predictions), "\n")
dump(clf, "processedData/modele.joblib")
# Fonction principale pour exécuter à la fois le timer et la manipulation de données
if __name__ == "__main__":
# Crée un thread pour suivre le temps

@ -3,7 +3,9 @@ import os
from typing import List
import numpy as np
import pandas as pd
from calculsIA import *
from joblib import load
from getRatingsActeur import creationModele
def levenshtein_distance(s1, s2):
if len(s1) < len(s2):
@ -28,7 +30,7 @@ def levenshtein_distance(s1, s2):
def find_closest_actor_name(input_name, actor_names):
if input_name in actor_names:
return input_name
closest_name = None
min_distance = float('inf')
for i in range(len(actor_names)):
@ -84,19 +86,40 @@ def add_actor(actor_names):
return None
def calculPrevision(listNomsActeurs, dfActeurs, clf):
if len(listNomsActeurs) == 4:
print('\nPrédiction en cours...\n')
notesActeurs = []
for nom in listNomsActeurs:
note = dfActeurs.loc[dfActeurs.primaryName == nom].averageRatingMean.values[0]
print(nom, " a pour note moyenne : ", note)
notesActeurs.append(note)
prediction = clf.predict([notesActeurs])[0]
print("\nNote prédite : ", "{:.2f}".format(prediction), "\n")
else:
print("La liste d'acteurs n'est pas de la bonne taille")
def find_direct_actor_name(df, searchedValue):
if 'primaryName' in df.columns:
if searchedValue in df['primaryName'].values:
return searchedValue
return None
if __name__ == "__main__":
mustContinue = True
if not os.path.exists("processedData/actorsRatingsGroupedWithName.tsv"):
print("Veuillez lancer getRatingsActeur.py avant d'exécuter ce programme.")
exit()
dfActeurs = pd.read_csv("processedData/actorsRatingsGroupedWithName.tsv", sep="\t")
if not os.path.exists("processedData/uniqueActorNames.tsv"):
saveUniqueActorsSorted("processedData/actorsRatingsGroupedWithName.tsv", "processedData/uniqueActorNames.tsv")
if not os.path.exists("processedData/modele.joblib"):
creationModele()
clf = load('processedData/modele.joblib')
actor_names = getUniqueActorNames("processedData/uniqueActorNames.tsv")
selectedActorNames = []
print("Bienvenue dans MoviePrecog!")
while mustContinue:
print("1: Ajouter un acteur à la liste (4 acteurs / actrices requis)")
@ -120,7 +143,7 @@ if __name__ == "__main__":
selectedActorNames.clear()
print("La liste a été vidée.")
elif choice == '4':
calculPrevision(selectedActorNames)
calculPrevision(selectedActorNames, dfActeurs, clf)
elif choice == '5':
print("Au revoir !")
mustContinue = False

Binary file not shown.
Loading…
Cancel
Save