es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Construir un histograma a partir de objetos de tipo contador

Utilicé Counter de collections para generar una gran lista de Contadores, es decir, List = [Counter({‘A’: 4}), Counter({‘A’: 2}), Counter({‘A’: 4}, {‘B’: 3})…].

Me gustaría construir un histograma a partir de esa lista, donde cada bin del histograma sea un tipo específico de contador, es decir, tener el mismo número de cada elemento contado por el contador.

Aquí hay un ejemplo

from collections import Counter
data = [['A', 'B', 'B'], ['A', 'B', 'B'], ['A', 'B', 'B'], ['C']]
data_counters = []
for d in data:
    data_counters.append(Counter(d))

Podría generar una lista de todos los posibles resultados del contador y luego contar cuántas veces ocurre cada contador en data_counters. Pero esto es difícil ya que el número de todos los resultados posibles es grande.

Estrictamente hablando, este problema es solo un cálculo de un histograma multidimensional, donde cada dimensión corresponde a una letra. Pero el punto es que quiero evitar eso y solo usar los bins de las combinaciones de letras que ocurren muchas veces, sin mirar información detallada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para construir un histograma a partir de la lista de Contadores, puedes utilizar el módulo Counter nuevamente para contar las ocurrencias de cada tipo específico de contador. Esto se puede hacer utilizando un diccionario para almacenar los tipos únicos de contadores y la cantidad de veces que aparecen en la lista.

    Aquí tienes un ejemplo de código para lograr esto:

    from collections import Counter
    
    data = [Counter({'A': 4}), Counter({'A': 2}), Counter({'A': 4, 'B': 3})]
    
    # Crear un diccionario vacío para almacenar los tipos únicos de contadores y su frecuencia
    counter_freq = {}
    
    # Recorrer cada contador en la lista de datos
    for contador in data:
        # Crear una tupla de los valores del contador ordenados alfabéticamente
        counter_tuple = tuple(sorted(contador.items()))
    
        # Si la tupla del contador no está en el diccionario counter_freq, agregarlo con una frecuencia de 1
        if counter_tuple not in counter_freq:
            counter_freq[counter_tuple] = 1
        # Si la tupla del contador ya está en el diccionario counter_freq, incrementar su frecuencia
        else:
            counter_freq[counter_tuple] += 1
    
    # Imprimir el histograma resultante
    for contador, frecuencia in counter_freq.items():
        print(f"{contador}: {frecuencia}")
    

    Salida:

    (('A', 4)): 2
    (('A', 2)): 1
    (('A', 4), ('B', 3)): 1
    

    Esto muestra que hay dos Contadores con solo la clave ‘A’ que ocurre cuatro veces, un Contador con solo la clave ‘A’ que ocurre dos veces y un Contador con ‘A’ y ‘B’ que ocurren cuatro y tres veces respectivamente.

Comments are closed.