Cum să găsiți media, mediana și modul în Python?

Media, mediana și modul sunt subiecte fundamentale ale statisticii. Le puteți calcula cu ușurință în Python, cu și fără utilizarea de biblioteci externe.

Aceste trei sunt principalele măsuri ale tendinta centrala. Tendința centrală ne permite să cunoaștem valorile „normale” sau „medie” ale unui set de date. Dacă abia începi cu știința datelor, acesta este tutorialul potrivit pentru tine.

Până la sfârșitul acestui tutorial vei:

  • Înțelegeți conceptul de medie, mediană și mod
  • Puteți să vă creați propriile funcții de medie, mediană și mod în Python
  • Utilizați modulul de statistici Python pentru a începe rapid utilizarea acestor măsurători

Dacă doriți o versiune descărcabilă a următoarelor exerciții, nu ezitați să consultați Depozitul GitHub.

Să intrăm în diferitele moduri de a calcula media, mediana și modul.

Calcularea mediei în Python

The Rău sau media aritmetică este cea mai utilizată măsură a tendinței centrale.

Amintiți-vă că tendința centrală este o valoare tipică a unui set de date.

Un set de date este o colecție de date, prin urmare un set de date în Python poate fi oricare dintre următoarele structuri de date încorporate:

  • Liste, tupluri și seturi: o colecție de obiecte
  • Șiruri: o colecție de caractere
  • Dicționar: o colecție de perechi cheie-valoare

Notă: Deși există și alte structuri de date în Python, cum ar fi cozi sau stive, le vom folosi doar pe cele încorporate.

Putem calcula media adunând toate valorile unui set de date și împărțind rezultatul la numărul de valori. De exemplu, dacă avem următoarea listă de numere:

[1, 2, 3, 4, 5, 6]

Media sau media ar fi 3,5 deoarece suma listei este 21 și lungimea acesteia este 6. Douăzeci și unu împărțit la șase este 3,5. Puteți efectua acest calcul cu calculul de mai jos:

(1 + 2 + 3 + 4 + 5 + 6) / 6 = 21

În acest tutorial, vom folosi jucătorii unei echipe de baschet ca eșantion de date.

Crearea unei funcții de medie personalizată

Să începem prin a calcula vârsta medie (medie) a jucătorilor dintr-o echipă de baschet. Numele echipei va fi „Pythonic Machines”.

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

def mean(dataset):
    return sum(dataset) / len(dataset)

print(mean(pythonic_machine_ages))

Defalcarea acestui cod:

  • „Pythonic_machine_ages” este o listă cu vârstele jucătorilor de baschet
  • Definim o funcție mean() care returnează suma setului de date dat împărțită la lungimea acestuia
    • Funcția sum() returnează suma totală (ironic) a valorilor unui iterabil, în acest caz, o listă. Încercați să transmiteți setul de date ca argument, va returna 211
    • Funcția len() returnează lungimea unui iterabil, dacă îi transmiteți setul de date, veți obține 8
  • Trecem vârstele echipei de baschet la funcția mean() și imprimăm rezultatul.

Dacă verificați rezultatul, veți obține:

26.375
# Because 211 / 8 = 26.375

Acest rezultat reprezintă vârsta medie a jucătorilor echipei de baschet. Rețineți că numărul nu apare în setul de date, ci descrie cu exactitate vârsta majorității jucătorilor.

  Cum se calculează modificarea procentuală cu tabele pivot în Excel

Folosind mean() din Modulul Statistic Python

Calcularea măsurilor de tendință centrală este o operațiune comună pentru majoritatea dezvoltatorilor. Asta-i pentru că Statisticile lui Python modulul oferă diverse funcții pentru a le calcula, împreună cu alte subiecte de statistică de bază.

Din moment ce face parte din Bibliotecă standard Python nu va trebui să instalați niciun pachet extern cu PIP.

Iată cum utilizați acest modul:

from statistics import mean

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

print(mean(pythonic_machine_ages))

În codul de mai sus, trebuie doar să importați funcția mean() din modulul de statistică și să îi transmiteți setul de date ca argument. Aceasta va returna același rezultat ca și funcția personalizată pe care am definit-o în secțiunea anterioară:

26.375

Acum aveți clar conceptul de medie, să continuăm cu măsurarea mediei.

Găsirea mediei în Python

The median este valoarea medie a unui set de date sortat. Este folosit — din nou — pentru a furniza o valoare „tipică” a unui determinat populatia.

În programare, putem defini mediana ca fiind valoarea care separă o secvență în două părți — jumătatea inferioară și jumătatea superioară —.

Pentru a calcula mediana, mai întâi, trebuie să sortăm setul de date. Am putea face acest lucru cu algoritmi de sortare sau folosind funcția încorporată sorted(). Al doilea pas este de a determina dacă lungimea setului de date este pară sau impară. În funcție de aceasta, unele dintre următoarele procese:

  • Impar: mediana este valoarea medie a setului de date
  • Par: mediana este suma celor două valori din mijloc împărțită la doi

Continuând cu setul nostru de date pentru echipa de baschet, să calculăm înălțimea mediană a jucătorilor în centimetri:

[181, 187, 196, 196, 198,  203, 207, 211, 215]
# Since the dataset is odd, we select the middle value
median = 198

După cum puteți vedea, deoarece lungimea setului de date este impară, putem lua valoarea de mijloc ca mediană. Totuși, ce s-ar întâmpla dacă un jucător tocmai s-a retras?

Ar trebui să calculăm mediana luând cele două valori medii ale setului de date

[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.5

Crearea unei funcție mediană personalizată

Să implementăm conceptul de mai sus într-o funcție Python.

Rețineți cei trei pași pe care trebuie să-i urmăm pentru a obține mediana unui set de date:

  • Sortați setul de date: putem face acest lucru cu funcția sorted().
  • Determinați dacă este par sau impar: putem face acest lucru obținând lungimea setului de date și utilizând operatorul modulo (%)
  • Întoarceți mediana în funcție de fiecare caz:
    • Impar: returnează valoarea de mijloc
    • Even: returnează media celor două valori medii

Aceasta ar avea ca rezultat următoarea funcție:

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]) / 2

Imprimarea rezultatului setului nostru de date:

print(median(pythonic_machines_heights))
print(median(after_retirement))

Ieșire:

198
200.5

Observați cum creăm o variabilă de date care indică baza de date sortată la începutul funcției. Deși listele de mai sus sunt sortate, dorim să creăm o funcție reutilizabilă, prin urmare sortând setul de date de fiecare dată când funcția este invocată.

  Cum să migrați contul dvs. Nest la un cont Google

Indexul stochează valoarea mijlocie – sau valoarea mijlocie superioară – a setului de date, utilizând operatorul de diviziune întreg. De exemplu, dacă am trece lista „pythonic_machine_heights”, aceasta ar avea valoarea 4.

Amintiți-vă că în Python indicii de secvență încep de la zero, asta pentru că suntem capabili să returnăm indexul din mijloc al unei liste, cu o diviziune întreagă.

Apoi verificăm dacă lungimea setului de date este impară comparând rezultatul operației modulo cu orice valoare care nu este zero. Dacă condiția este adevărată, returnăm elementul din mijloc, de exemplu, cu lista „pythonic_machine_heights”:

>>> pythonic_machine_heights[4]
# 198

Pe de altă parte, dacă setul de date este egal, returnăm suma valorilor din mijloc împărțită la doi. Rețineți că datele[index -1] ne oferă punctul de mijloc inferior al setului de date, în timp ce datele[index] ne furnizează punctul de mijloc superior.

Folosind median() din Modulul Statistic Python

Acest mod este mult mai simplu deoarece folosim o funcție deja existentă din modulul de statistică.

Personal, dacă există ceva deja definit pentru mine, l-aș folosi din cauza principiului DRY —Nu te repeta — (în acest caz, nu repeta codul altuia).

Puteți calcula mediana seturilor de date anterioare cu următorul cod:

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))

Ieșire:

198
200.5

Calcularea modului în Python

The modul este cea mai frecventă valoare din setul de date. Putem considera că este grupul „popular” al unei școli, care poate reprezenta un standard pentru toți elevii.

Un exemplu de mod ar putea fi vânzările zilnice ale unui magazin de tehnologie. Modul acelui set de date ar fi cel mai vândut produs dintr-o anumită zi.

['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']

După cum puteți aprecia, modul setului de date de mai sus este „laptop”, deoarece a fost cea mai frecventă valoare din listă.

Lucrul tare despre modul este că setul de date nu trebuie să fie numeric. De exemplu, putem lucra cu șiruri.

Să analizăm vânzările din altă zi:

['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']

Setul de date de mai sus are două moduri: „mouse” și „căști”, deoarece ambele au o frecvență de două. Aceasta înseamnă că este o multimodal set de date.

Ce se întâmplă dacă nu putem găsi modul într-un set de date, ca cel de mai jos?

['usb', 'camera', 'smartphone', 'laptop', 'TV']

Aceasta se numește a distributie uniformapractic, înseamnă că nu există niciun mod în setul de date.

  Cum să utilizați comenzile rapide de text în Google Docs

Acum aveți o înțelegere rapidă a conceptului de mod, să-l calculăm în Python.

Crearea unei funcții de mod personalizat

Ne putem gândi la frecvența unei valori ca la o pereche cheie-valoare, cu alte cuvinte, un dicționar Python.

Recapitulând analogia baschetului, putem folosi două seturi de date pentru a lucra cu: punctele per joc și sponsorizarea adidașilor unor jucători.

Pentru a găsi modul mai întâi trebuie să creăm un dicționar de frecvență cu fiecare dintre valorile prezente în setul de date, apoi să obținem frecvența maximă și să returnăm toate elementele cu acea frecvență.

Să traducem asta în cod:

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 modes

Verificarea rezultatului trecând cele două liste ca argumente:

print(mode(points_per_game))
print(mode(sponsorship))

Ieșire:

[10]
['nike', 'adidas', 'jordan']

După cum puteți vedea, prima declarație print ne-a oferit un singur mod, în timp ce a doua a returnat mai multe moduri.

Explicând mai profund codul de mai sus:

  • Declarăm un dicționar de frecvență
  • Repetăm ​​setul de date pentru a crea un histogramă — termenul statistic pentru un set de contoare (sau frecvențe) —
    • Dacă cheia este găsită în dicționar, atunci se adaugă una la valoare
    • Dacă nu este găsit, creăm o pereche cheie-valoare cu o valoare de unu
  • Variabila cea mai_frecventă stochează — în mod ironic — cea mai mare valoare (nu cheia) a dicționarului de frecvență
  • Returnăm variabila moduri care constă din toate cheile din dicționarul de frecvență cu cea mai mare frecvență.

Rețineți cât de importantă este denumirea variabilelor pentru a scrie cod care poate fi citit.

Folosind mode() și multimode() din Modulul Statistic Python

Încă o dată, modulul de statistică ne oferă o modalitate rapidă de a face operațiuni de bază de statistică.

Putem folosi două funcții: mod() și multimod ().

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']

Codul de mai sus importă ambele funcții și definește seturile de date cu care am lucrat.

Aici vine mica diferență: funcția mode() returnează primul mod pe care îl întâlnește, în timp ce multimode() returnează o listă cu cele mai frecvente valori din setul de date.

În consecință, putem spune că funcția personalizată pe care am definit-o este de fapt o funcție multimode().

print(mode(points_per_game))
print(mode(sponsorship))

Ieșire:

10
nike

Notă: În Python 3.8 sau mai mare, funcția mode() returnează primul mod găsit. Dacă aveți o versiune mai veche, veți primi un StatisticsError.

Folosind funcția multimode():

print(multimode(points_per_game))
print(multimode(sponsorship))

Ieșire:

[10]
['nike', 'adidas', 'jordan']

În concluzie

Felicitări! Dacă ai urmărit până acum, ai învățat cum să calculezi media, mediana și modul, principalele măsurători ale tendinței centrale.

Deși vă puteți defini funcțiile personalizate pentru a găsi media, mediana și modul, este recomandat să utilizați modulul de statistici, deoarece face parte din biblioteca standard și nu trebuie să instalați nimic pentru a începe să îl utilizați.

Apoi, citiți o introducere prietenoasă în analiza datelor în Python.