Analiza Datelor: Medie, Mediana și Modul în Python
Media, mediana și modul sunt concepte esențiale în statistică. În Python, aceste valori pot fi calculate cu ușurință, atât prin implementarea de funcții proprii, cât și prin utilizarea bibliotecilor specializate.
Aceste trei măsuri sunt indicatori cheie ai tendinței centrale, care ne ajută să identificăm valorile „tipice” sau „medii” într-un set de date. Dacă ești la început de drum în domeniul științei datelor, acest ghid este perfect pentru tine.
La finalul acestui material vei fi capabil să:
- Înțelegi conceptele de medie, mediană și mod.
- Creezi propriile funcții pentru calculul mediei, medianei și modului în Python.
- Folosești modulul
statisticsdin Python pentru a calcula rapid aceste măsuri.
Dacă dorești să ai la îndemână exemplele de cod din acest tutorial, le poți găsi pe GitHub.
Să explorăm diversele metode de calcul ale mediei, medianei și modului.
Calculul Mediei Aritmetice în Python
Media aritmetică, sau simplu „media”, este cea mai frecvent utilizată măsură a tendinței centrale.
Tendința centrală ne oferă o valoare reprezentativă pentru un set de date.
Un set de date, în esență o colecție de date, poate fi reprezentat în Python prin diferite structuri, precum:
- Liste, tuple și seturi: colecții de obiecte.
- Șiruri de caractere: colecții de caractere.
- Dicționare: colecții de perechi cheie-valoare.
Notă: Deși Python are și alte structuri de date, cum ar fi cozi sau stive, ne vom concentra pe cele încorporate.
Media se calculează adunând toate valorile dintr-un set de date și împărțind rezultatul la numărul total de valori. De exemplu, pentru lista:
[1, 2, 3, 4, 5, 6]
Media este 3.5, deoarece suma valorilor este 21, iar lungimea listei este 6. Deci 21 / 6 = 3.5. Acest calcul se efectuează astfel:
(1 + 2 + 3 + 4 + 5 + 6) / 6 = 21
Pentru a ilustra exemplele din acest ghid, vom folosi ca set de date vârstele și înălțimile jucătorilor unei echipe de baschet.
Crearea unei Funcții Personalizate pentru Calculul Mediei
Să începem prin a calcula vârsta medie a jucătorilor echipei „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))
Analizând codul:
pythonic_machine_ageseste o listă cu vârstele jucătorilor.- Definim o funcție
mean()care returnează suma elementelor setului de date, împărțită la numărul acestora.- Funcția
sum()returnează suma valorilor unui iterabil (în acest caz, lista). Pentru setul nostru de date, va returna 211. - Funcția
len()returnează lungimea unui iterabil. Pentru setul nostru de date, returnează 8.
- Funcția
- Apelăm funcția
mean()cu vârstele jucătorilor și afișăm rezultatul.
Rezultatul afișat va fi:
26.375 # Deoarece 211 / 8 = 26.375
Această valoare reprezintă vârsta medie a jucătorilor. Observăm că această valoare nu se regăsește în setul de date, dar oferă o imagine fidelă a vârstei medii a echipei.
Utilizarea Funcției mean() din Modulul statistics
Calculul tendinței centrale este o operație frecventă în dezvoltarea de software. De aceea, modulul statistics din Python oferă diverse funcții pentru a efectua aceste calcule, alături de alte funcții statistice de bază.
Acest modul face parte din biblioteca standard Python, deci nu este necesară instalarea unor pachete externe prin PIP.
Iată cum îl folosim:
from statistics import mean pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24] print(mean(pythonic_machine_ages))
În acest cod, importăm funcția mean() din modulul statistics și o apelăm cu setul de date ca argument. Rezultatul va fi identic cu cel obținut prin funcția personalizată:
26.375
Acum că ai înțeles conceptul de medie, să trecem la calculul medianei.
Calculul Medianei în Python
Mediana este valoarea centrală dintr-un set de date sortat. Ea este folosită pentru a identifica valoarea „tipică” a unei populații.
În programare, putem defini mediana ca fiind valoarea care împarte o secvență în două părți egale: jumătatea inferioară și cea superioară.
Pentru a calcula mediana, mai întâi sortăm setul de date. Putem face asta fie cu algoritmi de sortare proprii, fie folosind funcția încorporată sorted(). Apoi, determinăm dacă lungimea setului de date este pară sau impară. În funcție de acest lucru, aplicăm următoarele reguli:
- Set impar: mediana este valoarea din mijlocul setului.
- Set par: mediana este media aritmetică a celor două valori din mijloc.
Să continuăm cu datele echipei de baschet. Să calculăm mediana înălțimii jucătorilor (în centimetri):
[181, 187, 196, 196, 198, 203, 207, 211, 215] # Deoarece setul de date are un număr impar de elemente, selectăm valoarea din mijloc median = 198
După cum observăm, pentru un set de date cu lungime impară, mediana este valoarea centrală. Dar ce se întâmplă dacă un jucător se retrage?
Acum trebuie să calculăm mediana folosind media celor două valori centrale:
[181, 187, 196, 198, 203, 207, 211, 215] # Selectăm cele două valori centrale și le împărțim la 2 median = (198 + 203) / 2 median = 200.5
Crearea unei Funcții Personalizate pentru Calculul Medianei
Să implementăm logica de mai sus într-o funcție Python.
Reamintim cei trei pași necesari pentru a obține mediana unui set de date:
- Sortarea setului de date: putem face asta cu funcția
sorted(). - Determinarea parității lungimii setului: folosim operatorul modulo (
%) pentru asta. - Returnarea medianei în funcție de paritatea lungimii:
- Impar: returnăm valoarea centrală.
- Par: returnăm media celor două valori centrale.
Codul funcției va fi:
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
# Dacă setul de date are lungime impară
if len(dataset) % 2 != 0:
return data[index]
# Dacă setul de date are lungime pară
return (data[index - 1] + data[index]) / 2
Afișarea rezultatelor pentru seturile noastre de date:
print(median(pythonic_machines_heights)) print(median(after_retirement))
Ieșire:
198 200.5
Observăm că creăm o variabilă data care stochează setul de date sortat. Deși listele noastre sunt deja sortate, e important să avem o funcție reutilizabilă care sortează datele de fiecare dată.
Variabila index stochează indexul valorii din mijloc sau al valorii superioare din mijloc. Pentru lista pythonic_machine_heights, aceasta va avea valoarea 4.
Amintim că indicii în Python încep de la zero, ceea ce permite să accesăm elementele din mijloc folosind operația de împărțire întreagă.
Verificăm dacă lungimea setului de date este impară, folosind operatorul modulo (%). Dacă este impară, returnăm elementul de la mijloc. Pentru lista pythonic_machine_heights, elementul de la indexul 4 este:
>>> pythonic_machine_heights[4] # 198
Dacă setul de date este par, returnăm media celor două valori centrale. Elementul data[index - 1] ne dă valoarea inferioară din mijloc, iar data[index] pe cea superioară.
Utilizarea Funcției median() din Modulul statistics
Modulul statistics oferă o metodă mai simplă pentru calculul medianei, care se bazează pe o funcție predefinită.
Personal, prefer să folosesc funcțiile existente atunci când este posibil, pentru a evita duplicarea codului.
Putem calcula mediana seturilor de date 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
Calculul Modului în Python
Modul este valoarea care apare cel mai frecvent într-un set de date. Putem considera modul ca fiind valoarea „populară” a unui set de date, o referință pentru tot setul.
Un exemplu ar fi vânzările zilnice ale unui magazin de electronice. Modul acestui set de date ar fi produsul cel mai bine vândut într-o zi.
['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']
În acest exemplu, modul este 'laptop', deoarece aceasta apare de cele mai multe ori.
Important de reținut este că modul nu se aplică doar datelor numerice, ci și celor de tip text. De exemplu, putem folosi șiruri de caractere.
Să analizăm vânzările unei alte zile:
['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']
Acest set de date are două moduri: 'mouse' și 'headphones', ambele având frecvența 2. Acesta este un set de date multimodal.
Ce se întâmplă dacă nu putem identifica un mod, ca în exemplul de mai jos?
['usb', 'camera', 'smartphone', 'laptop', 'TV']
Acesta este un exemplu de distribuție uniformă, ceea ce înseamnă că nu există un mod în setul de date.
Acum că înțelegi conceptul de mod, să-l calculăm în Python.
Crearea unei Funcții Personalizate pentru Calculul Modului
Putem privi frecvența unei valori ca o pereche cheie-valoare, adică un dicționar Python.
Revenind la analogia cu baschetul, putem folosi două seturi de date: punctele per meci și sponsorizarea de încălțăminte a jucătorilor.
Pentru a găsi modul, creăm un dicționar de frecvență pentru fiecare valoare din setul de date. Apoi, obținem frecvența maximă și returnăm toate valorile cu acea frecvență.
Iată cum putem implementa 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
Verificăm rezultatul, apelând funcția cu cele două liste:
print(mode(points_per_game)) print(mode(sponsorship))
Ieșire:
[10] ['nike', 'adidas', 'jordan']
Prima comandă print a afișat un singur mod, în timp ce a doua a returnat mai multe moduri.
Să analizăm mai detaliat codul:
- Declarăm un dicționar
frequency. - Iterăm prin setul de date, construind o histogramă (adică o numărătoare de frecvențe).
- Dacă o cheie există deja în dicționar, incrementăm valoarea asociată.
- Dacă nu, creăm o nouă pereche cheie-valoare, cu valoarea inițială 1.
- Variabila
most_frequentreține frecvența maximă (cea mai mare valoare din dicționar). - Variabila
modesreturnează o listă cu toate cheile din dicționar care au frecvența maximă.
E important ca variabilele să aibă denumiri sugestive pentru ca codul să fie ușor de citit și înțeles.
Utilizarea Funcțiilor mode() și multimode() din Modulul statistics
Din nou, modulul statistics oferă o modalitate rapidă de a efectua calcule statistice de bază.
Putem folosi funcțiile 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']
Codul importă ambele funcții și definește seturile de date cu care am lucrat.
Funcția mode() returnează primul mod pe care îl întâlnește, în timp ce multimode() returnează o listă cu toate modurile dintr-un set de date.
În concluzie, funcția personalizată pe care am definit-o este echivalentă cu funcția multimode().
print(mode(points_per_game)) print(mode(sponsorship))
Ieșire:
10 nike
Notă: În Python 3.8 și versiunile ulterioare, funcția mode() returnează primul mod găsit. În versiunile mai vechi, primești o eroare de tip StatisticsError.
Folosind funcția multimode():
print(multimode(points_per_game)) print(multimode(sponsorship))
Ieșire:
[10] ['nike', 'adidas', 'jordan']
Concluzii
Felicitări! Dacă ai ajuns până aici, ai învățat cum să calculezi media, mediana și modul, principalele măsuri ale tendinței centrale.
Deși poți să îți creezi propriile funcții pentru aceste calcule, este recomandat să folosești modulul statistics, deoarece face parte din biblioteca standard și nu necesită instalarea unor pachete suplimentare.
În continuare, te invităm să explorezi un ghid introductiv în analiza datelor cu Python.