Пример #1
0
def info_membros(df_membros: DataFrame, df_interesses: DataFrame,
                 qtd_membros: int) -> tuple:
    """
    Informação dos membros.

    :param DataFrame df_membros: Dataframe de membros
    :param int qtd_membros: quantida de membros a ser buscado

    :return: membros e interesses unicos
    :rtype: tuple
    """
    global INTERESSES, CATEGORIAS

    COLUNAS = ['member_id', 'group_id']
    membros = list()
    controlador = defaultdict(int)

    db = Database()
    for linhas in df_membros:
        for linha in tqdm(linhas.values):
            if sum(controlador.values()) >= qtd_membros * 33:
                break
            else:
                id_membro, id_grupo = linha
                info_grupo = db.get_document('grupos', {'_id': int(id_grupo)},
                                             {'nota': 0})[0]

                if controlador[
                        info_grupo['categoria']] == qtd_membros or info_grupo[
                            'categoria'] not in CATEGORIAS:
                    continue

                mbr_interesses = interesse_membro(id_membro, df_interesses)
                interesses_filtrado = set()
                if any(mbr_interesses):
                    flag = False
                    for interesse in mbr_interesses:
                        for e in interesse.split(','):
                            e = e.strip().lower()
                            if e and e in INTERESSES:
                                flag = True
                                interesses_filtrado.add(e)
                    if flag:
                        membro = {
                            'id_membro': id_membro,
                            'categoria_grupo': info_grupo['categoria']
                        }

                        for interesse in interesses_filtrado:
                            membro[interesse] = 1

                        membros.append(membro)
                        controlador[info_grupo['categoria']] += 1

        if sum(controlador.values()) >= qtd_membros * 33:
            break

    return DataFrame(membros)
Пример #2
0
    def get(self):
        db = Database()

        modelos = db.get_document('versao_modelo')[-1]

        r = list()
        for id_modelo in modelos['ids_modelos']:
            resultado = db.get_document('modelo', {'_id': id_modelo}, {
                '_id': 0,
                'metricas': 1,
                'grupo': 1
            })[0]
            # resultado['metricas'] = resultado['metricas']['macro avg']
            resultado['metricas'] = resultado['metricas']
            r.append(resultado)

        return Resposta.retorno(
            sorted(r, key=lambda modelo: -modelo['metricas']['f1_teste']))