def cargarArchivosUnificados(details,casting, cmpfunction=None): lst=iniciarCatalogo() dialect = csv.excel() dialect.delimiter=";" i = 0 p = 0 print("Cargando archivos...") with open(cf.data_dir + details, encoding="utf-8-sig") as csvfile1: row = csv.DictReader(csvfile1, dialect=dialect) for elemento in row: if i%3290 == 0: print (" " + str(p) + "%" + " completado", end="\r") p+=1 model.agregarFinal(lst,elemento) i+=1 print (" 100%" +" completado\n") print("Uniendo datos...") with open(cf.data_dir + casting, encoding="utf-8-sig") as csvfile2: #Cambiamos el encoding ya que generaba row = csv.DictReader(csvfile2,dialect=dialect) #un error con los archivos grandes i = 1 p = 0 for elemento in row: if i%3290 == 0: print (" " + str(p) + "%" + " completado", end="\r") p+=1 if elemento["id"] == model.buscarPeliculas(lst,i)["id"]: for column in elemento: if column != "id": model.buscarPeliculas(lst,i)[column] = elemento[column] i += 1 print (" 100%" +" completado\n") return lst
def conocerDirector(catalogo, director): a=getParejaKV(catalogo, director) numero=0 promedio=0 lst=model.crearCatalogo() for i in a['value']['elements']: numero+=1 promedio=promedio+float(i['vote_average']) model.agregarFinal(lst,(i['title'])) return lst, round(promedio/numero,2), numero
def limpiarGeneros(mapa,key): peliculas = getParejaKV(mapa,key) peliculas_lista = model.crearCatalogo() suma = 0 for pelicula in peliculas['value']['elements']: model.agregarFinal(peliculas_lista,(pelicula['title'],pelicula['vote_count'],pelicula['genres'])) suma += float(pelicula['vote_count']) size = model.tamanio(peliculas_lista) if size != 0: return (peliculas_lista,size, suma/size) return (peliculas_lista,0,0)
def cargarByCriteria(moviesCatalog,criteria,data,cmpfunction=getKeyFunction,hashType='PROBING',loadfactor=0.5,numelements=17): moviesCatalog[criteria] = crearHash(hashType,loadfactor,numelements) print("Mapa vacío creado exitosamente") productoras = {} #Este ciclo ingresa cada uno de los datos i = 0 p = 0 print("Organizando Archivos...") for element in data['elements']: if i%3290 == 0: print (" " + str(p) + "%" + " completado", end="\r") p+=1 #Caso en el que solo se necesite una columna if criteria == 'genres': generos = element[criteria].split('|') for genero in generos: if genero not in productoras: value = model.crearCatalogo('ARRAY_LIST') model.agregarFinal(value,(element)) productoras[genero] = value else: model.agregarFinal(productoras[genero],element) else: if element[criteria] not in productoras: value = model.crearCatalogo('ARRAY_LIST') model.agregarFinal(value,(element)) productoras[element[criteria]] = value #Condición para separar los géneros por '|' en caso de que el criterio no sea géneros, lo visto en el video sigue funcionando else: model.agregarFinal(productoras[element[criteria]],element) i+=1 #Agregar a la tabla de hash print(" 100%" +" completado\n") print("Creando y organizando un mapa...") i = 0 p = 0 for productora in productoras: if len(productoras) < 100: if i%(len(productoras)/100) == 0: print (" " + str(p) + "%" + " completado", end="\r") p+=1 else: if i%(round(len(productoras)/100)) == 0: print (" " + str(p) + "%" + " completado", end="\r") p+=1 model.agregarAlMap(moviesCatalog[criteria],productora,productoras[productora]) i+=1 print (" 100%" +" completado\n")
def cargarByPerson(moviesCatalog,criteria,data,person,cmpfunction=getKeyFunction,hashType='PROBING',loadfactor=0.5,numelements=16453): moviesCatalog[criteria] = crearHash(hashType,loadfactor,numelements) print("Mapa vacío creado exitosamente") movies_person = model.crearCatalogo('ARRAY_LIST') #Este ciclo ingresa cada uno de los datos i = 0 p = 0 print("Creando y organizando un mapa...") for element in data['elements']: if i%3290 == 0: print (" " + str(p) + "%" + " completado", end="\r") p+=1 #Caso en el que solo se necesite una columna actores_movie = [element["actor1_name"],element["actor2_name"],element["actor3_name"],element["actor4_name"],element["actor5_name"]] if person in actores_movie: model.agregarFinal(movies_person,element) i+=1 #Agregar a la tabla de hash model.agregarAlMap(moviesCatalog[criteria],person, movies_person) print("100%" +" completado\n")
def limpiarPersona(mapa,key): peliculas = getParejaKV(mapa,key) peliculas_lista = model.crearCatalogo() dir = {} suma = 0 for pelicula in peliculas['value']['elements']: model.agregarFinal(peliculas_lista,(pelicula['title'],pelicula['vote_average'],pelicula['director_name'])) suma += float(pelicula['vote_average']) size = model.tamanio(peliculas_lista) for director in peliculas['value']['elements']: if director['director_name'] != 'none': if director['director_name'] not in dir: dir[director["director_name"]] = 1 else: dir[director["director_name"]] += 1 dirColaboraciones = None dir_num =list(dir.values()) dir_name =list(dir.keys()) if len(dir) > 0 and sum(dir_num) != len(dir_num): maxNum = max(dir_num) dirColaboraciones = dir_name[dir_num.index(max(dir_num))] found = False while not found: dir.pop(dir_name[dir_num.index(max(dir_num))]) dir_num = list(dir.values()) dir_name = list(dir.keys()) mxNew = 0 if len(dir_num) > 0: maxNew = max(dir_num) if maxNew == maxNum: dirColaboraciones += ", " + dir_name[dir_num.index(max(dir_num))] else: found = True if size != 0: return (peliculas_lista,size,suma/size,dirColaboraciones) return (peliculas_lista,0,0,dirColaboraciones)
def peliculasPais(catalogo, pais): a=getParejaKV(catalogo, pais) lst=model.crearCatalogo() for i in a['value']['elements']: model.agregarFinal(lst,[i['title'],i['director_name'],i['release_date']]) return lst