Dada una lista de elementos, recuerde que el modo de la lista es el elemento que ocurre con mayor frecuencia.
Me gustaría saber cómo crear una función que pueda encontrar el modo de una lista pero que muestre un mensaje si la lista no tiene un modo (por ejemplo, todos los elementos de la lista solo aparecen una vez). Quiero hacer esta función sin importar ninguna función. Estoy tratando de hacer mi propia función desde cero.
assert(mode[1, 1, 1]) == None
yassert(mode[1, 2, 3, 4]) == None
. Para un número que sea unamode
, debe facilitarse a un mayor número de veces de las que al menos otro número en la lista, y debe no ser el único número en la lista.Respuestas:
Puede usar la
max
función y una tecla. Eche un vistazo a la función python max usando 'key' y la expresión lambda .fuente
O(n**2)
. ¿Lo hace?max(lst, key=lst.count)
. (Y realmente no llamaría a una listalist
.)a = [22, 33, 11, 22, 11]; print(max(set(a), key=a.count))
devoluciones11
. ¿Siempre devolverá el modo mínimo? Y si es así, ¿por qué?Puede usar el
Counter
suministrado en elcollections
paquete que tiene unamode
función -esqueNota: Counter es nuevo en python 2.7 y no está disponible en versiones anteriores.
fuente
Counter(your_list_in_here).most_common(1)[0][0]
. Si hay más de un modo, esto devuelve uno arbitrario.n
más comunesmodes
. Si Counter (your_list_in_here) .most_common (1) [0] [0] te da el primer modo, ¿cómo obtendrías otro más comúnmode
? Solo reemplaza el último0
con1
? Uno puede hacer una función para personalizarlomode
a su gusto ..Python 3.4 incluye el método
statistics.mode
, por lo que es sencillo:Puede tener cualquier tipo de elementos en la lista, no solo numéricos:
fuente
multimode
, que devuelve múltiples modos cuando hay más de uno.Tomando una hoja de algunos software de estadísticas, a saber, SciPy y MATLAB , estos solo devuelven el valor más pequeño más común, por lo que si dos valores ocurren con la misma frecuencia, se devuelve el más pequeño. Esperemos que un ejemplo ayude:
¿Hay alguna razón por la cual no puedes seguir esta convención?
fuente
Hay muchas formas simples de encontrar el modo de una lista en Python como:
O bien, puede encontrar el máximo por su recuento
El problema con esos dos métodos es que no funcionan con múltiples modos. El primero devuelve un error, mientras que el segundo devuelve el primer modo.
Para encontrar los modos de un conjunto, puede usar esta función:
fuente
Extendiendo la respuesta de la Comunidad que no funcionará cuando la lista esté vacía, aquí está el código de modo:
fuente
En caso de que esté interesado en los modos más pequeño, más grande o todos:
fuente
Escribí esta práctica función para encontrar el modo.
fuente
Corto, pero de alguna manera feo:
Usando un diccionario, un poco menos feo:
fuente
Un poco más, pero puede tener múltiples modos y puede obtener cadenas con la mayoría de los recuentos o una combinación de tipos de datos.
fuente
Para un número que sea una
mode
, debe facilitarse a un mayor número de veces de las que al menos otro número en la lista, y debe no ser el único número en la lista. Entonces, refactoré la respuesta de @ mathwizurd (para usar eldifference
método) de la siguiente manera:Estas pruebas pasan con éxito:
fuente
¿Por qué no solo
Esto no tiene algunas verificaciones de error que debería tener, pero encontrará el modo sin importar ninguna función e imprimirá un mensaje si todos los valores aparecen solo una vez. También detectará varios elementos que comparten el mismo recuento máximo, aunque no estaba claro si quería eso.
fuente
Esta función devuelve el modo o modos de una función sin importar cuántos, así como la frecuencia del modo o modos en el conjunto de datos. Si no hay modo (es decir, todos los elementos se producen solo una vez), la función devuelve una cadena de error. Esto es similar a la función anterior de A_nagpal pero, en mi humilde opinión, es más completa, y creo que es más fácil de entender para cualquier principiante de Python (como el suyo) que lea esta pregunta para entender.
fuente
return 'There is no mode for this data set. All values occur only once.'
puede convertirse en un mensaje de error con latraceback
condición `if: la siguiente línea con sangría aumenta ValueError ('No hay modo para este conjunto de datos. Todos los valores ocurren solo una vez'). Aquí hay una lista de diferentes tipos de Errores que puede plantear.Esto devolverá todos los modos:
fuente
Código simple que encuentra el modo de la lista sin ninguna importación:
En caso de modos múltiples, debería devolver el nodo mínimo.
fuente
fuente
fuente
Aquí hay una función simple que obtiene el primer modo que ocurre en una lista. Crea un diccionario con los elementos de la lista como claves y número de ocurrencias y luego lee los valores dict para obtener el modo.
fuente
Si desea un enfoque claro, útil para el aula y que solo utiliza listas y diccionarios por comprensión, puede hacer lo siguiente:
fuente
fuente
Así es como puedes encontrar la media, la mediana y la moda de una lista:
fuente
fuente
Para aquellos que buscan el modo mínimo, por ejemplo: caso de distribución bimodal, usando numpy.
fuente
El modo de un conjunto de datos es el / los miembro (s) que ocurren (s) con más frecuencia en el conjunto. Si hay dos miembros que aparecen con mayor frecuencia con el mismo número de veces, entonces los datos tienen dos modos. Se llama bimodal .
Si hay más de 2 modos, los datos se denominarán multimodales . Si todos los miembros del conjunto de datos aparecen la misma cantidad de veces, entonces el conjunto de datos no tiene modo alguno.La siguiente función
modes()
puede funcionar para encontrar modos en una lista de datos dada:Salida:
Si no queremos importar
numpy
opandas
llamar a ninguna función de estos paquetes, para obtener esta misma salida, lamodes()
función se puede escribir como:fuente