Комментарии 7
Как же я рад, что эта статья прошла проверку !!! ??
Стоит всё же добавить, что в пакете Numpy уже есть собственные реализации функций median() и mean(), а также аналогичные — изначально игнорирующие значения NaN: nanmedian() и nanmean().
Мода (Mode) - это наиболее часто встречающееся значение в наборе данных. Мод может быть несколько.
Уточню малость. Распределение принято называть бимодальным (мультимодальным), если функция распределения имеет два или несколько максимумов. Однако высота у этих максимумов совершенно не обязана совпадать. Поэтому сплошь и рядом "наиболее часто встречающееся значение" - всего одно, а распределение тем не менее бимодальное. Хотя вполне может быть и несколько мод одинаковой амплитуды.
Я бы в такой ситуации говорил о "локальных" модах - то есть значениях, которые встречаются чаще соседних.
Вообще, мультимодальные распределения довольно часто возникают, когда
смешивается несколько "обычных" распределений

На картинке пример 4-модального распределения. Причем значения -8.75 и 0 встречаются одинаково часто (две моды примерно одинаковой амплитуды), а значения 9.5 и 17 - тоже одинаково часто, но гораздо реже, чем первые два
P.S. Серая кривая внизу - это аппроксимация получившегося изуверского распределения гауссианом. Видно, что качество аппроксимации катастрофически ужасающее не совсем идеальное ;-) Это я к тому, что если функция (аналитик) ожидает одномодальное распределение, а оно на самом деле совсем другое, то можно интересные результаты на выходе получить.
В общем, если Вы занимаетесь анализом данных, то не ленитесь смотреть на графики во всех возможных разрезах, а не только читать описания вызываемых функций и радоваться возвращаемым результатам.
P.P.S. Ниже - оффтопик:
Это не реальные данные, я просто взял с потолка 4 гауссиана и сложил
А впрочем, изучил сейчас повнимательнее потолок над компом... и уже не уверен: точно ли эти гауссианы оттуда, или же они все-таки
высосаны из пальца
Так как по форме они гораздо больше на пальцы похожи. А высасывала - нейросеть (кожаная), поэтому получилось только 4 шт, а не пять.
Да и вообще
как-то не очень приятно осознавать, что малейшее шевеление - и вот ты уже уперся в свой потолок :-(
А на кодкамп - нашлось и элегантное решение для вычисления мод:
#create NumPy array of values with multiple modes
x = np.array([2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 7])
#find unique values in array along with their counts
vals, counts = np.unique (x, return_counts= True )
#find mode
mode_value = np.argwhere (counts == np.max (counts))
#print list of modes
print(vals[mode_value]. flatten().tolist ())
[2, 4, 5]
Статистика на примерах с Python #1