DEV Community

Cover image for Python NumPy alapok

Python NumPy alapok

A Numpy rendkívül fontos eszköz mind az adatelemzésben, mind pedig az AI világában. Rengeteg alapvető statisztikai eszközt tartalmaz, amiért érdemes használni és, mivel egy programozási nyelven belül alkalmazzuk, ezért tetszőleges algoritmusokat írhatunk segítségével. A következő statisztikai mutatókat és megoldásokat fogjuk megnézni ebben a cikkben:

  • minimum és maximum érték
  • átlag
  • módusz
  • medián
  • kvartilisek
  • interkvartilis terjedelem
  • szórás
  • relatív szórás
  • outlierek kiszűrése
  • korreláció
  • kovariancia

Ha nem vagy tisztában ezekkel a fogalmakkal, akkor az alábbi két blogbejegyzést érdemes elolvasnod, amelyek több információt tartalmaznak, mint amire a címekből lehet következtetni.

A könyvtárak telepítése

Blogbejegyzésemben feltételezem, hogy fel van már nálad telepítve a Python megfelelő verziója és ismered a Python alapokat. Ha nem, akkor millió kiváló forrás létezik a Python programozási nyelv alapjainak elsajátítására. A könyvtár telepítéséhez Windowson nyisd meg a CMD-t, Linuxon pedig a terminált. (Ha Linuxon esetleg nem működne, a terminál hibaüzenetére rákeresve biztosan találsz megoldást, ez disztribúciónként eltérhet.)

pip install numpy
Enter fullscreen mode Exit fullscreen mode

Amire még szükségünk lesz, az a scipy könyvtár. Telepítése ugyancsak nem túl bonyolult.

pip install scipy
Enter fullscreen mode Exit fullscreen mode

A legalapvetőbb mutatók

import numpy as np
from scipy import stats


#numpy array létrehozása
x = np.array([1, 2, 3, 4, 7, 7, 7, 9, 13, 15])

#minimum és maximum (gondolom ezt kitaláltad)
minimum = np.min(x)
maximum = np.max(x)

#módusz és medián és átlag
mode = stats.mode(x).mode
median = np.median(x)
mean = np.mean(x)

#kvartilisek (alsó és felső)
"""
    Itt az első paraméter nyilván a tömb, míg a másodiknál a 25-ös érték
    az adatok 25%-ra utal. Vigyázz, nem 0.25!!!
"""
q1 = np.percentile(x, 25)
q3 = np.percentile(x, 75)
"""
    Az interkvartilis terjedelem a harmadik és az első kvartilis különbsége.
    Igen, ennyire egyszerű.
"""
iqr = q3 - q1

#populációs szórás
std = np.std(x)

#szórás minta alapján
std2 = np.std(x, ddof=1)

#ha nem tudnád a relatív szórás a szórás osztva az átlaggal
rstd = std/mean
Enter fullscreen mode Exit fullscreen mode

Az outlierek (kiugró értékek) szűrése

A statisztikában a kiugró értékek torzíthatják a mutatókat, hiszen egy-egy rendkívül kicsi, vagy rendkívül nagy érték még nem feltétlenül szignifikáns, sokkal inkább csak egy kis valószínűségű esemény bekövetkezte. Szűrésük viszont szerencsére nem bonyolult. Kiszámoljuk az alsó és felső kvartilist, az interkvartilis terjedelmet, és a többi már gyerekjáték.
q1=alsó kvartilis
q3=felső kvartilis
iqr=q3-q1
alsó küszöb = q1 - 1,5*iqr
felső küszöb = q3 + 1,5*iqr
Nézzük ezt meg kód szinten!

import numpy as np
x = np.array([1, 60, 65, 70, 75, 80, 85, 400])

q1 = np.percentile(x, 25)
q3 = np.percentile(x, 75)
iqr = q3 - q1
Enter fullscreen mode Exit fullscreen mode

Most jön a lényeg! Semmiféle if-re, vagy ciklusra nincs szükséged. A szűrést megoldhatod a következőképpen:

lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr

no_outliers = x[(x > lower) & (x < upper)]
Enter fullscreen mode Exit fullscreen mode

Semmi más nem történik pusztán annyi, hogy az x változóban csak azok az értékek maradhatnak bent, amelyek nagyobbak, mint az alsó határ (lower) és kisebbek, mint a felső határ (upper). Ez a Numpy egyik leghatékonyabb funkciója, az úgynevezett vektoralapú szűrés vagy maszkolás.

Kovariancia és korreláció

Mint ismeretes, mind a korreláció, mind pedig a kovariancia két változó együttmozgására ad mérőszámot. A különbség a kettő között, hogy a korreláció standardizált, tehát egy és mínusz egy között lehet az eredmény. Így több korrelációs együtthatót viszonyítani egymáshoz pontosabb, mint több kovariancia értéket.
A skálázhatóság kedvéért amit visszakapunk, nem pusztán a két változó közötti kovariancia és korreláció, hanem kovariancia és korrelációs mátrixok. Ez azért logikus így, mert a statisztikában gyakran fordul elő, hogy nem kettő, hanem akár sok száz paraméter között húzódó kapcsolatot szeretnénk feltárni. Ami létrejön, az a következő:

Kovariancia mátrix

x y
x cov(x, x) cov(x, y)
y cov(y, x) cov(y, y)

Korrelációs mátrix

x y
x corr(x, x) corr(x, y)
y corr(y, x) corr(y, y)

Ami itt fura, hogy így megjelenik x vagy y önmagával vett kovarianciája és korrelációja is. Egy változó önmagával vett kovarianciája nem más, mint a variancia (szórásnégyzet).

import numpy as np

x = np.array([10, 12, 13, 14, 15, 16, 18])
y = np.array([20, 24, 27, 30, 32, 35, 40])

# Kovariancia mátrix
cov_matrix = np.cov(x, y)

# Ha csak a két változó közötti kovariancia kell:
covariance = cov_matrix[0, 1]

print(f"Kovariancia mátrix:\n{cov_matrix}")
print(f"Kovariancia: {covariance}")

# Korrelációs mátrix
corr_matrix = np.corrcoef(x, y)

# Ha csak a korrelációs együttható kell:
correlation = corr_matrix[0, 1]

print(f"Korrelációs mátrix:\n{corr_matrix}")
print(f"Korrelációs együttható: {correlation}")
Enter fullscreen mode Exit fullscreen mode

Amit még érdemes lenne tisztáznom, az az alábbi sor. Mivel egy mátrixot kapunk vissza ezért, ha csak az adott két változó közötti kapcsolat erőssége szükséges, akkor elég a nulladik sor első oszlopa. Ne feledd, nullától indexelünk, tehát ez az első sor második oszlopnak felel meg matematikai szempontból! Ezt adja vissza az alábbi sor:

covariance = cov_matrix[0, 1]
Enter fullscreen mode Exit fullscreen mode

Top comments (0)