def conocer_actor(details, casting, actorName) -> dict: # Este es el requerimiento opcional. lista = [ node["id"] for node in h.travel(casting) if node["actor1_name"] == actorName or node["actor2_name"] == actorName or node["actor3_name"] == actorName or node["actor4_name"] == actorName or node["actor5_name"] == actorName ] actInf = [] for node in h.travel(details): if node["id"] in lista: ac = { "num": {node["id"]}, "avg": {node["vote_average"]}, "title": node["title"], "director_name": node["director_name"], } ac["numPeliculas"] = len(ac["num"]) ac["vote_average"] = ac["avg"] / len(ac["avg"]) actInf.append(ac) return actInf
def entender_genero(map_genero, genero): lst = mp.get(map_genero, genero)["value"] length = lt.size(lst) avg_vote_lst = [int(i["vote_count"]) for i in h.travel(lst)] avg_vote = sum(avg_vote_lst) / len(avg_vote_lst) return lst, length, avg_vote
def descubrir_productoras(map_productoras, prod): lst = mp.get(map_productoras, prod)["value"] length = lt.size(lst) avg_vote_lst = [int(i["vote_count"]) for i in h.travel(lst)] avg_vote = sum(avg_vote_lst) / len(avg_vote_lst) return lst, length, avg_vote
def entender_genero(details, genero): lista_genero = h.filter(details, "genres", genero, impl="ARRAY_LIST") length = lt.size(lista_genero) avg_vote_lst = [int(i["vote_count"]) for i in h.travel(lista_genero)] avg_vote = sum(avg_vote_lst) / len(avg_vote_lst) return lista_genero, length, avg_vote
def crear_ranking_peli(details, x=10, ascendent=True): if ascendent: sort.quickSort(details, h.comp_count_avg_asc) else: sort.quickSort(details, h.comp_count_avg_desc) ranking = [item for item in itert.islice(h.travel(details), 0, x)] return ranking
def buenasPeliculas(director_name, casting, details) -> tuple: lst1 = [ node["id"] for node in h.travel(casting) if node["director_name"] == director_name ] lst2 = [ float(node["vote_average"]) for node in h.travel(details) if node["id"] in lst1 and float(node["vote_average"]) >= 6 ] if len(lst2) <= 0: return (0, 0) else: return (len(lst2), (sum(lst2)) / len(lst2))
def pel_countrie(m_pais, m_id_cast, pais): lst = mp.get(m_pais, pais)["value"] dir = [ mp.get(m_id_cast, i)["value"]["first"]["info"]["director_name"] for i in h.travel(lst, "id") ] return lst, dir
def conocer_director(details, casting, director_name) -> dict: lst = [ node["id"] for node in h.travel(casting) if node["director_name"] == director_name ] info = [] for node in h.travel(details): if node["id"] in lst: d = { "id": node["id"], "title": node["title"], "vote_average": node["vote_average"], } info.append(d) return info
def crear_ranking_genero(details, genero, retrieve=10, ascendent=True): dgend = h.filter(details, "genres", genero, impl="ARRAY_LIST") if ascendent: sort.quickSort(dgend, h.comp_count_avg_asc) else: sort.quickSort(dgend, h.comp_count_avg_desc) raw = [item for item in itert.islice(h.travel(dgend), 0, retrieve)] ranking = [peli["title"] for peli in raw] avg_vote_lst = [int(i["vote_count"]) for i in raw] avg_vote = sum(avg_vote_lst) / len(avg_vote_lst) return ranking, avg_vote
def main(): """ Método principal del programa, se encarga de manejar todos los metodos adicionales creados Instancia una lista vacia en la cual se guardarán los datos cargados desde el archivo Args: None Return: None """ while True: printMenu() # imprimir el menu de opciones en consola # leer opción ingresada inputs = input("Seleccione una opción para continuar\n") if len(inputs) > 0: if int(inputs[0]) == 1: # opcion 1 lista_details = h.loadCSVFile( details, impl="ARRAY_LIST", cmpfunction=None ) lista_casting = h.loadCSVFile( casting, impl="ARRAY_LIST", cmpfunction=None ) elif int(inputs[0]) == 2: # opcion 2 director = input("Ingrese el nombre del director\n") buenaspelis = req.buenasPeliculas( director, lista_casting, lista_details ) print( f"Se encontraron {buenaspelis[0]} buenas películas con los parámetros dados." ) print( f"El promedio de la votación por dichas películas es de {buenaspelis[1]}." ) elif int(inputs[0]) == 3: # opcion 3 num = int(input("Cuántas entradas quiere para el ranking? \n")) asc = bool( int( input( "Digite:\n" + "1 si desea se muestren las peliculas mejor calificadas\n" + "0 si desea que se muestren las peor calificadas\n" ) ) ) try: ranking = req.crear_ranking_peli(lista_details, num, asc) print("El ranking de películas es:\n") cont = 0 pal = "ascendentemente" if asc else "descendentemente" print(f"Ranking ordenado por votos {pal}:\n") for i in ranking: cont += 1 spc = 25 - len(i["title"]) print( f"{cont}. {i['title']}{' '*spc} - vote count: {i['vote_count']} - vote average: {i['vote_average']}" ) print() except UnboundLocalError: print("\n" * 10 + "!!!\n\nPrimero carga los datos\n\n!!!") elif int(inputs[0]) == 5: # opcion 5 director = input("Ingrese el nombre del director\n") try: information = req.conocer_director( lista_details, lista_casting, director ) for d in information: print( "id:", d["id"], " - " "title:", d["title"], " - ", "vote average:", d["vote_average"], ) except UnboundLocalError: print("\n" * 10 + "!!!\n\nPrimero carga los datos\n\n!!!") elif int(inputs[0]) == 4: # opcion 4 name = input("Ingrese el nombre del actor\n") try: inf = req.conocer_actor(lista_details, lista_casting, name) for ac in inf: print( (ac["title"]) + "," + (ac["numPeliculas"]) + "," + (ac["vote_average"]) + "," + (ac["director_name"]) ) except UnboundLocalError: print("\n" * 10 + "!!!\n\nPrimero carga los datos\n\n!!!") elif int(inputs[0]) == 6: # opcion 6 genero = input("Digite el género sobre el cuál desea trabajar:\n") try: lista, longitud, promedio = req.entender_genero( lista_details, genero ) cont = 0 print("Las películas que tienen dicho género son\n") for i in h.travel(lista, parameter="title"): cont += 1 print(f"{cont}. {i}") print(f"En total son {longitud} películas.") print( f"El voto promedio para las películas de género {genero} es {promedio}" ) print() except UnboundLocalError: print("\n" * 10 + "!!!\n\nPrimero carga los datos\n\n!!!") elif int(inputs[0]) == 6: # opcion 7 print("Que genero quiere para crear el ranking? ") g = input() print("cuantas entradas quiere? ") e = int(input()) print("De peor a mejor (1) - De mejor a peor (2) ? ") s = int(input()) if s == 1: s = True else: s = False try: ranking, avg_v = req.crear_ranking_genero(lista_details, g, e, s) if s == 1: st = "mejores" else: st = "peores" print(f"Las {e} {st} peliculas del genero {g} son:") for c, i in enumerate(ranking): print(f"N{c+1}. {i}") print(f"Con promedio de votos {avg_v}") except UnboundLocalError: print("\n" * 10 + "!!!\n\nPrimero carga los datos\n\n!!!") elif int(inputs[0]) == 0: # opcion 0, salir sys.exit(0)
def main(): while True: controller.printMenu() # imprimir el menu de opciones en consola # leer opción ingresada inputs = input("Seleccione una opción para continuar\n") if len(inputs) > 0: if int(inputs[0]) == 1: # opcion 1 casting_key = "id" details_key = "id" mp_casting = controller.load_csv_map_byAtts( casting, casting_key) mp_details = controller.load_csv_map_byAtts( details, details_key) print( f"Se crearon los maps:\n\tcasting, con {mp.size(mp_casting)} elementos, ordenado por la llave {casting_key}\n\tdetails, con {mp.size(mp_details)} elementos, ordenado por la llave {details_key}" ) elif int(inputs[0]) == 2: # Reto 1 productora = input( "Digite la productora sobre la cual este interesado:\n") p = controller.load_csv_map_byAttribute( details, "production_companies") lista, longitud, promedio = controller.descubrir_productoras( p, productora) cont = 0 print("Las películas de la productora son\n") for i in h.travel(lista, parameter="title"): cont += 1 print(f"{cont}. {i}") print(f"En total son {longitud} películas.") print( f"El voto promedio para las películas de la productora {productora} es {promedio}" ) print() elif int(inputs[0]) == 3: nombre_director = input( "Digite el nombre del director que desea conocer:\n") controller.req2(casting, details, nombre_director) elif int(inputs[0]) == 4: nombre_actor = input( "Digite el nombre del actor que desea conocer:\n") try: respuesta = controller.req3(casting, nombre_actor, mp_details, mp_casting) print( f"Sobre el actor {nombre_actor}:\nParticipó en las películas:\n" ) res_iter = it.newIterator(respuesta[0]) while it.hasNext(res_iter): print(f'\t{it.next(res_iter)}') print(f"\nEn total, son {respuesta[1]} películas.") print( f"Sus películas obtuvieron una calificación promedio de {respuesta[2]}" ) except: print("Debe cargar los datos primero!\n") continue pass elif int(inputs[0]) == 5: # Reto 4 genero = input( "Digite el género sobre el cuál desea trabajar:\n") g = controller.load_csv_map_byAttribute(details, "genres") lista, longitud, promedio = controller.entender_genero( g, genero) cont = 0 print("Las películas que tienen dicho género son\n") for i in h.travel(lista, parameter="title"): cont += 1 print(f"{cont}. {i}") print(f"En total son {longitud} películas.") print( f"El voto promedio para las películas de género {genero} es {promedio}" ) print() elif int(inputs[0]) == 6: pais = input("Digite el pais de interes:\n") try: p = controller.load_csv_map_byAttribute( details, "production_countries") list, directors = controller.pel_countrie( p, mp_casting, pais) c = 0 for i in h.travel(list): t = i["original_title"] r = i["release_date"] print( f"Pelicula: {t} Año de produccion: {r} y director: {directors[c]}" ) c += 1 print() except UnboundLocalError: print("\n" * 10 + "!!!\n\nPrimero carga los datos\n\n!!!") elif int(inputs[0]) == 0: # opcion 0, salir sys.exit(0)