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.
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.
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ó.
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:
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.
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.