python

Obtener moda de datos en Python

En este tutorial de Python te mostraré cómo obtener la moda de una serie de datos. Es decir, a partir de una lista de datos, saber cuál es el elemento que más se repite (y a este valor se le dice moda).

Sé que hay varios tipos de moda pero en este caso solo vamos a obtener el elemento que más se repite usando Python.

Algoritmo para obtener moda

En este caso necesitamos la estructura de datos hashmap o diccionario para simplificar el algoritmo. Un diccionario es como un arreglo, con la diferencia de que el diccionario nos permite utilizar una cadena como índice.

De este modo, por cada número encontrado en la distribución, vamos a definir una nueva entrada en el diccionario con un valor de 1 (pues se ha encontrado una vez) y después, si volvemos a encontrar el número, vamos a aumentar éste contador.

Finalmente obtenemos el dato que más se haya repetido, usando el mismo algoritmo aplicado para obtener el mayor de 3 números.

Obtener moda en Python

Comenzamos declarando los datos y el diccionario vacío:

# Recuerda que este arreglo puede ser llenado por un usuario: https://parzibyte.me/blog/2020/10/18/python-llenar-arreglo-datos-usuario/
datos = [1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 4]
diccionario_conteo = {}

Ahora recorremos los datos y los agregamos al diccionario. Básicamente llenamos el diccionario con la frecuencia de números (algo así como cuando contamos la frecuencia de palabras) para más tarde obtener la moda, es decir, el elemento más repetido.

for numero in datos:
    clave = str(numero)
    # Si no existe...
    if not clave in diccionario_conteo:
        # lo agregamos:
        diccionario_conteo[clave] = 1
    # Si ya existe...
    else:
        # Lo aumentamos
        diccionario_conteo[clave] += 1

Llegados a este punto ya tenemos un diccionario en donde la clave es el número, y el valor es la cantidad de veces que ese número se repite. Es momento de saber cuál número se repite la mayor cantidad de veces.

Declaramos la frecuencia mayor en 0, y suponemos que el número más repetido es el primero; aunque lo vamos a comprobar más tarde. En caso de que la frecuencia actual sea mayor que la frecuencia mayor, intercambiamos los valores y declaramos el número mayor como el actual.

Dentro del siguiente código vemos algunas conversiones, esto es porque las claves de diccionarios deben ser de tipo string, pero también nos importa el número int.

# Ahora recorremos el diccionario y obtenemos el mayor. Vamos a buscar el que tenga la mayor frecuencia
frecuencia_mayor = 0
numero_mas_repetido = datos[0]
# Imprimimos el diccionario solo para depurar
print(diccionario_conteo)
# Y sacamos el mayor
for numero in diccionario_conteo:
    if diccionario_conteo[numero] > frecuencia_mayor:
        numero_mas_repetido = numero
        frecuencia_mayor = diccionario_conteo[numero]
# Finalmente imprimimos el más repetido, con su conteo
conteo = diccionario_conteo[str(numero_mas_repetido)]
print(
    f"El número que más se repite es {numero_mas_repetido} (encontrado {conteo} ocasiones)"
)

Al terminar, se va a imprimir el número que más se repite, además de la cantidad de veces que se encontró.

Poniendo todo junto

Moda de datos con Python

El código completo para obtener la moda en Python queda de la siguiente manera. Recuerda que en este caso, si hay un empate, se toma al último número encontrado en el diccionario.


"""
 https://parzibyte.me/blog
"""
# Recuerda que este arreglo puede ser llenado por un usuario: https://parzibyte.me/blog/2020/10/18/python-llenar-arreglo-datos-usuario/
datos = [9, 2, 3, 4, 4, 4, 5, 6, 7, 8, 4, 9, 4]
diccionario_conteo = {}
for numero in datos:
    clave = str(numero)
    # Si no existe...
    if not clave in diccionario_conteo:
        # lo agregamos:
        diccionario_conteo[clave] = 1
    # Si ya existe...
    else:
        # Lo aumentamos
        diccionario_conteo[clave] += 1

# Ahora recorremos el diccionario y obtenemos el mayor. Vamos a buscar el que tenga la mayor frecuencia
frecuencia_mayor = 0
numero_mas_repetido = datos[0]
# Imprimimos el diccionario solo para depurar
print(diccionario_conteo)
# Y sacamos el mayor
for numero in diccionario_conteo:
    if diccionario_conteo[numero] > frecuencia_mayor:
        numero_mas_repetido = numero
        frecuencia_mayor = diccionario_conteo[numero]
# Finalmente imprimimos el más repetido, con su conteo
conteo = diccionario_conteo[str(numero_mas_repetido)]
print(
    f"El número que más se repite es {numero_mas_repetido} (encontrado {conteo} ocasiones)"

Puedes ver en la imagen del encabezado que el programa funciona sin importar la cantidad de datos; todo está de manera correcta.

Te dejo con más contenido de Python en mi blog.

También he grabado un vídeo explicando:

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • Buenas noches, compañero felicitarle por el código muy bueno, la verdad me sirvió y e aprendido sobre diccionario que no conocía sobre ello.
    Ya que este código no usa tales funciones de librerías, que facilitan el trabajo, puesto que la lógica es la que mas interesa.
    Tengo una consulta, existe alguna manera de llenar una Lista en python 3.x sin usar append ?
    si es así me gustaría conocerla.
    Muchas gracias por su aporte a las ciencias.

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.