Jak znaleźć średnią, medianę i tryb w Pythonie?
Opublikowany: 2021-06-22Średnia, mediana i moda to podstawowe zagadnienia statystyki. Możesz je łatwo obliczyć w Pythonie, z użyciem zewnętrznych bibliotek i bez nich.
Te trzy są głównymi miarami tendencji centralnej. Centralna tendencja pozwala nam poznać „normalne” lub „średnie” wartości zbioru danych. Jeśli dopiero zaczynasz naukę danych, ten samouczek jest dla Ciebie.

Pod koniec tego samouczka:
- Zrozum pojęcie średniej, mediany i trybu
- Umiejętność tworzenia własnych funkcji średniej, mediany i trybu w Pythonie
- Skorzystaj z modułu statystyk Pythona, aby szybko rozpocząć korzystanie z tych pomiarów
Jeśli chcesz pobrać wersję poniższych ćwiczeń, odwiedź repozytorium GitHub.
Przejdźmy do różnych sposobów obliczania średniej, mediany i trybu.
Obliczanie średniej w Pythonie
Średnia lub średnia arytmetyczna jest najczęściej stosowaną miarą tendencji centralnej.
Pamiętaj, że tendencja centralna jest typową wartością zbioru danych.
Zbiór danych to zbiór danych, dlatego zbiór danych w Pythonie może być dowolną z następujących wbudowanych struktur danych:
- Listy, krotki i zbiory: zbiór obiektów
- Ciągi znaków : zbiór znaków
- Słownik: zbiór par klucz-wartość
Uwaga: Chociaż w Pythonie istnieją inne struktury danych, takie jak kolejki lub stosy, będziemy używać tylko tych wbudowanych.
Możemy obliczyć średnią, dodając wszystkie wartości zbioru danych i dzieląc wynik przez liczbę wartości. Na przykład, jeśli mamy następującą listę liczb:
[1, 2, 3, 4, 5, 6]Średnia lub średnia wynosiłaby 3,5, ponieważ suma listy wynosi 21, a jej długość to 6 . Dwadzieścia jeden podzielone przez sześć to 3,5 . Możesz wykonać to obliczenie za pomocą poniższego obliczenia:
(1 + 2 + 3 + 4 + 5 + 6) / 6 = 21W tym samouczku jako przykładowych danych użyjemy graczy z drużyny koszykarskiej.
Tworzenie niestandardowej funkcji średniej
Zacznijmy od obliczenia średniego (średniego) wieku zawodników w drużynie koszykówki. Nazwa zespołu będzie brzmieć „Maszyny Pythona”.
pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24] def mean(dataset): return sum(dataset) / len(dataset) print(mean(pythonic_machine_ages))Rozkładanie tego kodu:
- „pythonic_machine_ages” to lista zawierająca wiek koszykarzy
- Definiujemy funkcję mean(), która zwraca sumę danego zbioru danych podzieloną przez jego długość
- Funkcja sum() zwraca całkowitą sumę (jak na ironię) wartości iterowalnej listy, w tym przypadku listy. Spróbuj przekazać zbiór danych jako argument, zwróci 211
- Funkcja len() zwraca długość elementu iteracyjnego, jeśli przekażesz do niego zbiór danych, otrzymasz 8
- Przekazujemy wiek drużyny koszykówki do funkcji mean() i wypisujemy wynik.
Jeśli sprawdzisz dane wyjściowe, otrzymasz:
26.375 # Because 211 / 8 = 26.375Wynik ten reprezentuje średni wiek zawodników drużyny koszykarskiej. Zwróć uwagę, że liczba nie pojawia się w zestawie danych, ale dokładnie opisuje wiek większości graczy.
Używanie mean() z modułu statystycznego Pythona
Obliczanie miar tendencji centralnej jest powszechną operacją dla większości deweloperów. Dzieje się tak, ponieważ moduł statystyk Pythona udostępnia różnorodne funkcje do ich obliczania, wraz z innymi podstawowymi zagadnieniami statystycznymi.
Ponieważ jest to część standardowej biblioteki Pythona, nie musisz instalować żadnego zewnętrznego pakietu z PIP.
Oto jak korzystasz z tego modułu:
from statistics import mean pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24] print(mean(pythonic_machine_ages))W powyższym kodzie wystarczy zaimportować funkcję mean() z modułu statystyk i przekazać do niej zestaw danych jako argument. Zwróci to ten sam wynik, co funkcja niestandardowa, którą zdefiniowaliśmy w poprzedniej sekcji:
26.375Teraz masz krystalicznie jasne pojęcie średniej . Kontynuujmy pomiar mediany .
Znalezienie mediany w Pythonie
Mediana to średnia wartość posortowanego zbioru danych. Jest używany — ponownie — do podania „typowej” wartości określonej populacji.
W programowaniu możemy zdefiniować medianę jako wartość, która dzieli sekwencję na dwie części — dolną połowę i wyższą połowę —.
Aby obliczyć medianę, najpierw musimy posortować zbiór danych. Moglibyśmy to zrobić za pomocą algorytmów sortujących lub wbudowanej funkcji sorted() . Drugim krokiem jest określenie, czy długość zestawu danych jest parzysta czy nieparzysta. W zależności od tego niektóre z następujących procesów:
- Nieparzyste: mediana jest średnią wartością zbioru danych
- Parzyste: mediana to suma dwóch średnich wartości podzielona przez dwa
Kontynuując nasz zestaw danych dotyczących drużyny koszykówki, obliczmy medianę wzrostu zawodników w centymetrach:
[181, 187, 196, 196, 198, 203, 207, 211, 215] # Since the dataset is odd, we select the middle value median = 198Jak widać, ponieważ długość zestawu danych jest nieparzysta, możemy przyjąć średnią wartość jako medianę. Co by się jednak stało, gdyby gracz właśnie przeszedł na emeryturę?
Musielibyśmy obliczyć medianę, biorąc dwie środkowe wartości zbioru danych
[181, 187, 196, 198, 203, 207, 211, 215] # We select the two middle values, and divide them by 2 median = (198 + 203) / 2 median = 200.5Tworzenie niestandardowej funkcji mediany
Zaimplementujmy powyższą koncepcję w funkcji Pythona.
Zapamiętaj trzy kroki, które musimy wykonać, aby uzyskać medianę zbioru danych:
- Sortuj zbiór danych: możemy to zrobić za pomocą funkcji sorted()
- Określ, czy jest nieparzysty, czy parzysty: możemy to zrobić, pobierając długość zbioru danych i używając operatora modulo (%)
- Zwróć medianę na podstawie każdego przypadku:
- Dziwne: zwróć średnią wartość
- Parzysty: Zwróć średnią z dwóch średnich wartości
Spowodowałoby to następującą funkcję:
pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215] after_retirement = [181, 187, 196, 198, 203, 207, 211, 215] def median(dataset): data = sorted(dataset) index = len(data) // 2 # If the dataset is odd if len(dataset) % 2 != 0: return data[index] # If the dataset is even return (data[index - 1] + data[index]) / 2Drukowanie wyniku naszych zbiorów danych:
print(median(pythonic_machines_heights)) print(median(after_retirement))Wyjście:
198 200.5Zwróć uwagę, jak tworzymy zmienną danych , która wskazuje na posortowaną bazę danych na początku funkcji. Chociaż powyższe listy są posortowane, chcemy utworzyć funkcję wielokrotnego użytku, dlatego sortujemy zestaw danych za każdym razem, gdy funkcja jest wywoływana.

Indeks przechowuje środkową wartość — lub górną środkową wartość — zestawu danych przy użyciu operatora dzielenia liczb całkowitych . Na przykład, gdybyśmy przekazywali listę „pythonic_machine_heights”, miałaby ona wartość 4 .
Pamiętaj, że w Pythonie indeksy sekwencji zaczynają się od zera, ponieważ jesteśmy w stanie zwrócić środkowy indeks listy z dzieleniem liczb całkowitych.
Następnie sprawdzamy, czy długość zbioru danych jest nieparzysta, porównując wynik operacji modulo z dowolną wartością, która nie jest zerem. Jeśli warunek jest spełniony, zwracamy środkowy element np. z listą „pythonic_machine_heights”:
>>> pythonic_machine_heights[4] # 198Z drugiej strony, jeśli zbiór danych jest parzysty, zwracamy sumę średnich wartości podzieloną przez dwa. Zauważ, że dane[indeks -1] daje nam dolny punkt środkowy zbioru danych, podczas gdy dane[indeks] dostarcza nam górny punkt środkowy.
Korzystanie z median() z modułu statystycznego Pythona
Ten sposób jest znacznie prostszy, ponieważ korzystamy z już istniejącej funkcji z modułu statystyk.
Osobiście, jeśli jest coś już dla mnie zdefiniowane, użyłbym tego ze względu na zasadę DRY — Nie powtarzaj się — (w tym przypadku nie powtarzaj kodu innych).
Możesz obliczyć medianę poprzednich zestawów danych za pomocą następującego kodu:
from statistics import median pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215] after_retirement = [181, 187, 196, 198, 203, 207, 211, 215] print(median(pythonic_machines_heights)) print(median(after_retirement))Wyjście:
198 200.5Obliczanie trybu w Pythonie
Tryb jest najczęstszą wartością w zbiorze danych. Możemy myśleć o niej jako o „popularnej” grupie szkolnej, która może stanowić standard dla wszystkich uczniów.
Przykładem trybu może być codzienna sprzedaż sklepu technicznego. Tryb tego zbioru danych byłby najlepiej sprzedającym się produktem danego dnia.
['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']Jak możesz docenić, tryb powyższego zestawu danych to „laptop”, ponieważ była to najczęstsza wartość na liście.
Fajną rzeczą w trybie jest to, że zbiór danych nie może być liczbowy. Na przykład możemy pracować z ciągami.
Przeanalizujmy sprzedaż innego dnia:
['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']Powyższy zestaw danych ma dwa tryby: „mysz” i „słuchawki”, ponieważ oba mają częstotliwość równą dwa. Oznacza to, że jest to multimodalny zestaw danych.
Co zrobić, jeśli nie możemy znaleźć trybu w zbiorze danych, takim jak ten poniżej?
['usb', 'camera', 'smartphone', 'laptop', 'TV']Nazywa się to dystrybucją jednolitą, co oznacza, że w zbiorze danych nie ma żadnego trybu.
Teraz masz szybkie pojęcie o trybie, obliczmy go w Pythonie.
Tworzenie funkcji trybu niestandardowego
Możemy myśleć o częstotliwości wartości jako o parze klucz-wartość, innymi słowy o słowniku Pythona.
Podsumowując analogię z koszykówką, możemy użyć dwóch zestawów danych do pracy z: punktami na mecz i sponsorowaniem niektórych graczy w tenisówkach.
Aby znaleźć tryb, najpierw musimy utworzyć słownik częstotliwości z każdą z wartości obecnych w zbiorze danych, a następnie uzyskać maksymalną częstotliwość i zwrócić wszystkie elementy z tą częstotliwością.
Przetłumaczmy to na kod:
points_per_game = [3, 15, 23, 42, 30, 10, 10, 12] sponsorship = ['nike', 'adidas', 'nike', 'jordan', 'jordan', 'rebook', 'under-armour', 'adidas'] def mode(dataset): frequency = {} for value in dataset: frequency[value] = frequency.get(value, 0) + 1 most_frequent = max(frequency.values()) modes = [key for key, value in frequency.items() if value == most_frequent] return modesSprawdzanie wyniku przekazując dwie listy jako argumenty:
print(mode(points_per_game)) print(mode(sponsorship))Wyjście:
[10] ['nike', 'adidas', 'jordan']Jak widać, pierwsza instrukcja print dała nam jeden tryb, podczas gdy druga zwróciła wiele trybów.
Wyjaśniając głębiej powyższy kod:
- Deklarujemy słownik częstotliwości
- Iterujemy po zbiorze danych, aby utworzyć histogram — termin statystyczny dla zestawu liczników (lub częstotliwości) —
- Jeśli klucz zostanie znaleziony w słowniku, to dodaje jeden do wartości
- Jeśli nie zostanie znaleziony, tworzymy parę klucz-wartość o wartości jeden
- Najczęstsza zmienna przechowuje — jak na ironię — największą wartość (nie klucz) słownika częstotliwości
- Zwracamy zmienną trybów , która składa się ze wszystkich kluczy w słowniku częstotliwości o największej częstotliwości.
Zwróć uwagę, jak ważne jest nazewnictwo zmiennych, aby pisać czytelny kod.
Używanie mode() i multimode() z modułu statystycznego Pythona
Po raz kolejny moduł statystyk zapewnia nam szybki sposób wykonywania podstawowych operacji statystycznych.
Możemy użyć dwóch funkcji: mode() i multimode().
from statistics import mode, multimode points_per_game = [3, 15, 23, 42, 30, 10, 10, 12] sponsorship = ['nike', 'adidas', 'nike', 'jordan', 'jordan', 'rebook', 'under-armour', 'adidas']Powyższy kod importuje obie funkcje i definiuje zestawy danych, z którymi pracowaliśmy.
Oto mała różnica: funkcja mode() zwraca pierwszy napotkany tryb, podczas gdy multimode() zwraca listę z najczęstszymi wartościami w zbiorze danych.
print(mode(points_per_game)) print(mode(sponsorship))Wyjście:
10 nikeUwaga: W Pythonie 3.8 lub nowszym funkcja mode() zwraca pierwszy znaleziony tryb. Jeśli masz starszą wersję, otrzymasz błąd StatisticsError.
Używając funkcji multimode() :
print(multimode(points_per_game)) print(multimode(sponsorship))Wyjście:
[10] ['nike', 'adidas', 'jordan']Podsumowując
Gratulacje ! Jeśli podążałeś do tej pory, nauczyłeś się obliczać średnią, medianę i modę, czyli główne pomiary tendencji centralnej.
Chociaż możesz zdefiniować własne funkcje, aby znaleźć średnią, medianę i tryb, zaleca się korzystanie z modułu statystyk, ponieważ jest on częścią standardowej biblioteki i nie musisz niczego instalować, aby zacząć z niego korzystać.
Następnie przeczytaj przyjazne wprowadzenie do analizy danych w Pythonie.
