Tryb zbioru danych to element (elementy), który (e) najczęściej występuje (e) w zbiorze. Jeśli istnieją dwa elementy członkowskie, które pojawiają się najczęściej z taką samą liczbą razy, dane mają dwa tryby. To się nazywa bimodalnym .
Gdyby istniało więcej niż 2 tryby, dane byłyby nazywane
multimodalnymi . Jeśli wszystkie elementy w zestawie danych pojawiają się tyle samo razy, oznacza to, że zestaw danych nie
ma trybu .
Następująca funkcja modes()
może działać, aby znaleźć tryb (y) na podanej liście danych:
import numpy as np; import pandas as pd
def modes(arr):
df = pd.DataFrame(arr, columns=['Values'])
dat = pd.crosstab(df['Values'], columns=['Freq'])
if len(np.unique((dat['Freq']))) > 1:
mode = list(dat.index[np.array(dat['Freq'] == max(dat['Freq']))])
return mode
else:
print("There is NO mode in the data set")
Wynik:
# For a list of numbers in x as
In [1]: x = [2, 3, 4, 5, 7, 9, 8, 12, 2, 1, 1, 1, 3, 3, 2, 6, 12, 3, 7, 8, 9, 7, 12, 10, 10, 11, 12, 2]
In [2]: modes(x)
Out[2]: [2, 3, 12]
# For a list of repeated numbers in y as
In [3]: y = [2, 2, 3, 3, 4, 4, 10, 10]
In [4]: modes(y)
There is NO mode in the data set
# For a list of stings/characters in z as
In [5]: z = ['a', 'b', 'b', 'b', 'e', 'e', 'e', 'd', 'g', 'g', 'c', 'g', 'g', 'a', 'a', 'c', 'a']
In [6]: modes(z)
Out[6]: ['a', 'g']
Jeśli nie chcemy importować numpy
ani pandas
wywoływać żadnej funkcji z tych pakietów, to aby uzyskać ten sam wynik, modes()
funkcję można zapisać jako:
def modes(arr):
cnt = []
for i in arr:
cnt.append(arr.count(i))
uniq_cnt = []
for i in cnt:
if i not in uniq_cnt:
uniq_cnt.append(i)
if len(uniq_cnt) > 1:
m = []
for i in list(range(len(cnt))):
if cnt[i] == max(uniq_cnt):
m.append(arr[i])
mode = []
for i in m:
if i not in mode:
mode.append(i)
return mode
else:
print("There is NO mode in the data set")