Hogyan lehet megtalálni az átlagot, a mediánt és a módot a Pythonban?

Az átlag, a medián és a módusz a statisztika alapvető témái. Könnyen kiszámíthatja őket Pythonban, külső könyvtárak használatával és anélkül.

Ez a három fő intézkedés központi tendencia. A központi tendencia egy adathalmaz „normál” vagy „átlagos” értékét adja meg. Ha csak most kezdi az adattudományt, ez a megfelelő oktatóanyag az Ön számára.

Az oktatóanyag végére a következőket fogod tudni:

  • Értse az átlag, medián és mód fogalmát
  • Legyen képes saját átlag-, medián- és módfüggvényeket létrehozni a Pythonban
  • Használja a Python statisztikai modulját a mérések gyors használatához

Ha szeretnéd letölteni a következő gyakorlatokat, bátran nézd meg a GitHub adattár.

Nézzük meg az átlag, medián és módus kiszámításának különböző módjait.

Az átlag kiszámítása Pythonban

Az átlagos vagy a számtani átlag a központi tendencia leggyakrabban használt mérőszáma.

Ne feledje, hogy a központi tendencia egy adathalmaz tipikus értéke.

Az adatkészlet adatok gyűjteménye, ezért a Pythonban lévő adatkészlet a következő beépített adatszerkezetek bármelyike ​​lehet:

  • Listák, sorok és halmazok: objektumok gyűjteménye
  • Strings: karakterek gyűjteménye
  • Szótár: kulcs-érték párok gyűjteménye

Megjegyzés: Bár vannak más adatstruktúrák is a Pythonban, például sorok vagy veremek, csak a beépítetteket fogjuk használni.

Az átlagot úgy számíthatjuk ki, hogy összeadjuk egy adathalmaz összes értékét, és az eredményt elosztjuk az értékek számával. Például, ha a következő számlistánk van:

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

Az átlag vagy átlag 3,5 lenne, mert a lista összege 21, hossza pedig 6. Huszonegy osztva hattal 3,5. Ezt a számítást az alábbi számítással végezheti el:

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

Ebben az oktatóanyagban egy kosárlabdacsapat játékosait használjuk mintaadatokként.

Egyéni átlagfüggvény létrehozása

Kezdjük azzal, hogy kiszámoljuk egy kosárlabdacsapat játékosainak átlagos (átlagos) életkorát. A csapat neve „Pythonic Machines” lesz.

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

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

print(mean(pythonic_machine_ages))

A kód lebontása:

  • A „pythonic_machine_ages” egy lista a kosárlabdázók életkorával
  • Definiálunk egy mean() függvényt, amely visszaadja az adott adathalmaz összegét osztva annak hosszával
    • A sum() függvény egy iterálható, ebben az esetben egy lista értékeinek teljes összegét adja vissza (ironikus módon). Próbálja meg argumentumként átadni az adatkészletet, ez 211-et ad vissza
    • A len() függvény egy iterálható hosszát adja vissza, ha átadja neki az adatkészletet, 8-at kap
  • A kosárlabda csapat korosztályát átadjuk az mean() függvénynek, és kinyomtatjuk az eredményt.
  A 40 legjobb érmebázis alternatíva

Ha ellenőrzi a kimenetet, a következőket kapja:

26.375
# Because 211 / 8 = 26.375

Ez a kimenet a kosárlabdacsapat játékosainak átlagéletkorát jelenti. Vegye figyelembe, hogy a szám nem jelenik meg az adatkészletben, hanem pontosan leírja a legtöbb játékos életkorát.

A Python statisztikai modulból származó mean() használatával

A központi tendencia mértékeinek kiszámítása a legtöbb fejlesztő számára gyakori művelet. Azért mert Python statisztikái modul változatos funkciókat kínál ezek kiszámításához, valamint más alapvető statisztikai témákat.

Mivel ez része a Python szabványos könyvtár nem kell telepítenie semmilyen külső PIP-csomagot.

Így használja ezt a modult:

from statistics import mean

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

print(mean(pythonic_machine_ages))

A fenti kódban csak importálnia kell az átlag() függvényt a statisztikai modulból, és argumentumként át kell adnia neki az adatkészletet. Ez ugyanazt az eredményt adja vissza, mint az előző részben meghatározott egyéni függvény:

26.375

Most már kristálytiszta az átlag fogalma, folytassuk a medián mérést.

A medián megkeresése Pythonban

Az középső egy rendezett adatkészlet középső értéke. Ezt ismét egy meghatározott érték „tipikus” értékének megadására használják népesség.

A programozás során a mediánt úgy definiálhatjuk, mint az az érték, amely egy sorozatot két részre – az alsó és a felső felére – választ el.

A medián kiszámításához először rendeznünk kell az adatkészletet. Ezt megtehetjük rendezési algoritmusokkal vagy a beépített sorted() függvény használatával. A második lépés annak meghatározása, hogy az adatkészlet hossza páratlan vagy páros. Ettől függően a következő folyamatok közül néhány:

  • Páratlan: A medián az adatkészlet középső értéke
  • Páros: A medián a két középső érték összege osztva kettővel

Folytatva kosárlabdacsapatunk adatkészletét, számítsuk ki a játékosok középmagasságát centiméterben:

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

Mint látható, mivel az adathalmaz hossza páratlan, így a középső értéket vehetjük mediánnak. De mi történne, ha egy játékos éppen visszavonulna?

A mediánt az adathalmaz két középső értékének figyelembevételével kell kiszámítanunk

[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

Egyéni mediánfüggvény létrehozása

Valósítsuk meg a fenti koncepciót Python-függvénybe.

Ne feledje a három lépést, amelyet követnünk kell egy adatkészlet mediánjának kiszámításához:

  • Adatkészlet rendezése: Ezt a sorted() függvénnyel tehetjük meg
  • Határozzuk meg, hogy páratlan vagy páros: Ezt úgy tehetjük meg, hogy megkapjuk az adatkészlet hosszát, és a modulo operátort használjuk (%)
  • Adja vissza a mediánt az egyes esetek alapján:
    • Páratlan: a középső értéket adja vissza
    • Páros: A két középső érték átlagát adja vissza

Ez a következő függvényt eredményezné:

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

Adatkészleteink eredményének kinyomtatása:

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

Kimenet:

198
200.5

Figyeljük meg, hogyan hozunk létre egy adatváltozót, amely a függvény elején a rendezett adatbázisra mutat. Bár a fenti listák rendezve vannak, szeretnénk létrehozni egy újrafelhasználható függvényt, ezért minden alkalommal rendezzük az adatkészletet a függvény meghívásakor.

  5 legjobb TFTP-kiszolgáló Windowshoz

Az index az adatkészlet középső értékét – vagy felső-középső értékét – tárolja az egész osztás operátorával. Például, ha átadnánk a „pythonic_machine_heights” listát, akkor az értéke 4 lenne.

Ne feledje, hogy a Pythonban az indexek nullával kezdődnek, ez azért van, mert vissza tudjuk adni a lista középső indexét egész számokkal való osztással.

Ezután ellenőrizzük, hogy az adathalmaz hossza páratlan-e, ha összehasonlítjuk a modulo művelet eredményét bármely olyan értékkel, amely nem nulla. Ha a feltétel igaz, akkor a középső elemet adjuk vissza, például a „pythonic_machine_heights” listával:

>>> pythonic_machine_heights[4]
# 198

Másrészt, ha az adatkészlet páros, akkor a középső értékek összegét osztjuk kettővel. Vegye figyelembe, hogy az adatok[index -1] megadja az adathalmaz alsó felezőpontját, míg a data[index] ellát bennünket a felső középponttal.

A median() használata a Python statisztikai modulból

Ez a módszer sokkal egyszerűbb, mert a statisztikai modulból egy már létező függvényt használunk.

Személy szerint, ha van valami már definiálva számomra, akkor a SZÁRAZ —Ne ismételd magad — elv miatt használnám (ebben az esetben ne ismételd meg mások kódját).

Az előző adathalmazok mediánját a következő kóddal számíthatja ki:

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

Kimenet:

198
200.5

A mód kiszámítása Pythonban

Az mód a leggyakoribb érték az adatkészletben. Felfoghatjuk úgy, mint egy iskola „népszerű” csoportját, amely mércét jelenthet minden tanuló számára.

A módra példa lehet egy műszaki bolt napi értékesítése. Az adatkészlet módja egy adott napon a legtöbbet eladott termék lenne.

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

Amint láthatja, a fenti adatkészlet módja a „laptop”, mert ez volt a leggyakoribb érték a listában.

A módban az a klassz, hogy az adatkészlet nem lehet numerikus. Például dolgozhatunk karakterláncokkal.

Elemezzük egy másik nap eladásait:

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

A fenti adatkészletnek két módja van: „egér” és „fejhallgató”, mert mindkettőnek kettős a frekvenciája. Ez azt jelenti, hogy a kombinált adatkészlet.

Mi van, ha nem találjuk a módot egy adathalmazban, mint például az alábbi?

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

Ezt hívják a egyenletes eloszlásalapvetően azt jelenti, hogy nincs mód az adatkészletben.

  Túl sötétek vagy túl világosak az okostelefonos fényképei? Íme, miért

Most már gyorsan megértette a mód fogalmát, számoljuk ki Pythonban.

Egyéni mód funkció létrehozása

Egy érték gyakoriságát kulcs-érték párnak tekinthetjük, más szóval Python szótárnak.

Összefoglalva a kosárlabda analógiát, két adatkészlettel dolgozhatunk: A meccsenkénti pontok és néhány játékos tornacipő-szponzorálása.

A mód megtalálásához először létre kell hoznunk egy gyakorisági szótárt az adatkészletben lévő minden egyes értékkel, majd ki kell számítanunk a maximális gyakoriságot, és vissza kell adni az összes elemet ezzel a gyakorisággal.

Fordítsuk le ezt kódra:

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

A két lista argumentumként történő átadásával kapott eredmény ellenőrzése:

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

Kimenet:

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

Mint látható, az első nyomtatási utasítás egyetlen módot adott nekünk, míg a második több módot adott vissza.

A fenti kód részletesebb magyarázata:

  • Frekvenciaszótárt deklarálunk
  • Iterálunk az adatkészleten, hogy létrehozzuk a hisztogram — a számlálók (vagy frekvenciák) halmazának statisztikai kifejezése —
    • Ha a kulcs megtalálható a szótárban, akkor hozzáad egyet az értékhez
    • Ha nem található, létrehozunk egy kulcs-érték párt egy értékkel
  • A leg_gyakori változó – ironikus módon – a gyakorisági szótár legnagyobb értékét (nem kulcsát) tárolja
  • Azt a módváltozót adjuk vissza, amely a frekvenciaszótárban a legtöbb gyakorisággal rendelkező összes kulcsból áll.

Jegyezze meg, milyen fontos a változó elnevezése az olvasható kód írásához.

A mode() és a multimode() használata a Python statisztikai modulból

A statisztikai modul ismét gyors módot kínál az alapvető statisztikai műveletek elvégzésére.

Két funkciót használhatunk: mód() és 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']

A fenti kód mindkét függvényt importálja, és meghatározza azokat az adatkészleteket, amelyekkel dolgoztunk.

Itt jön a kis különbség: A mode() függvény az első módot adja vissza, amivel találkozik, míg a multimode() egy listát ad vissza az adatkészlet leggyakoribb értékeivel.

Következésképpen azt mondhatjuk, hogy az általunk meghatározott egyéni függvény valójában egy multimode() függvény.

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

Kimenet:

10
nike

Megjegyzés: A Python 3.8-as vagy újabb verziójában a mode() függvény az első talált módot adja vissza. Ha régebbi verziója van, akkor a StatisticsError.

A multimode() függvény használata:

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

Kimenet:

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

Összefoglalva

Gratulálunk! Ha eddig követte, megtanulta, hogyan kell kiszámítani az átlagot, a mediánt és a módust, a fő központi tendencia méréseket.

Bár megadhatja egyéni függvényeit az átlag, a medián és a mód megtalálásához, ajánlott a statisztikai modul használata, mivel ez a szabványos könyvtár része, és semmit sem kell telepítenie a használat megkezdéséhez.

Ezután olvassa el a Python adatelemzésének barátságos bevezetését.