Michael Macaulay

Ismernie kell a Panda-funkciókat a gépi tanulási utazáshoz

Forrás csomópont: 1865356

Ez a cikk részeként jelent meg Adattudományi Blogaton

Bevezetés

Nos, jó lehetőség van rá!

A Pythont elsődleges programozási nyelvként használó adattudósok számára a Pandas csomag kötelező adatelemző eszköz. A Pandas csomag mindent tartalmaz, amire egy adattudósnak szüksége van, és először minden kurzus megtanította nekünk, hogyan kell használni. Olyan nagy, erőteljes, és szinte minden elképzelhető táblázatos manipulációt végrehajt. Ez a szélesség azonban időnként hátrányt jelenthet.

Sok szép funkcióval rendelkezik, amelyek megoldják a ritka éles eseteket, különböző forgatókönyveket.

A pandák egyik fő hátránya, hogy nagy adathalmazokkal küzd, mivel a pandák az adatstruktúráikat a RAM-ban tárolják, ami az adatméret növekedésével elégtelenné válhat. Ehhez használja a PySparkot vagy a Dask-ot.

Annak ellenére, hogy a Pandas csomagot széles körben használják, még mindig sok olyan funkció van, amelyet az emberek figyelmen kívül hagyhatnak, akár azért, mert kevesebbet használják, akár azért, mert nincsenek tisztában a létezésével. Ennek a bejegyzésnek az a célja, hogy újra megismertesse Önt ezekkel a funkciókkal, és bebizonyítsa, hogy a Pandák sokkal kompetensebbek, mint korábban tudtad.

Cső

Az adattisztítás tömör, kompakt módon történő végrehajtásához pandákban használhatjuk a Pipe funkciókat, amelyek lehetővé teszik több funkció kombinálását egy műveletben.

Például, ha olyan függvényeket szeretne alkalmazni, mint a drop_duplicates, encode_categoricals, remove_outliers, amelyek elfogadják az argumentumait.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['ár', 'karát', 'mélység']). pipe(encode_categoricals, ['cut', 'color', 'clerity']) )

Tényezőkre bont

Ez a funkció a Sklearns Label Encoder alternatívája.

# Ügyeljen a [0] végére diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Név: cut_enc, dtype: int64

A faktorizálás eredménye egy sor érték: a kódolt érték és az egyedi kategóriák listája.

értékek, egyedi = pd.factorize(diamonds["cut"], sort=True) >>> értékek[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> egyedi ['Ideális', 'Prémium', 'Nagyon jó', 'Jó', 'Tisztességes']

Felrobban

Felrobban | panda funkciók

Fotó Edewaa Foster on Unsplash

Az Explode egy érdekes nevű függvény. Kezdjük egy példával, majd egy magyarázattal:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("piszkos") >>> df
adatok | panda funkciók
Kép szerzőtől

A jellemző oszlopban két sor található listákkal. Az ilyen típusú adatok olyan felmérésekben állnak rendelkezésre, ahol néhány kérdés több választási lehetőséget is elfogad.

>>> df.explode("piszkos", ignore_index=True)
felrobbannak az adatok
Kép szerzőtől

Ez a függvény egy értéktömböt tartalmazó cellát vesz fel, és több sorban szétrobban. A numerikus indexek sorrendjének fenntartásához használja az ignore_index értéket True-ként.

Között

Egy tartományon belüli numerikus jellemzők logikai indexeléséhez itt van egy praktikus funkció:

# Szerezzen 3500 és 3700 dollár közötti gyémántokat.
adatok között | panda funkciók
Kép szerzőtől

 

T

A DataFrame-nek van egy egyszerű T attribútuma, az úgynevezett transzponálás. Lehet, hogy nem gyakran használjuk, a leírási módszer hasznos az adatkeretek megtekintésekor.

>>> boston.describe().T.head(10)
transzponálás
Kép szerzőtől

 

Panda opciók

Használhatja a pandák globális beállításait, amelyek segítenek módosítani és megváltoztatni az alapértelmezett viselkedést.

>>> dir(pd.options) ['compute', 'display', 'io', 'mode', 'plotting']

5 modulból áll. Lássuk a kijelző alatt elérhető lehetőségeket. Sok lehetőség áll rendelkezésre, de én leginkább a max_columns-t használom.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show'_dimensions , 'szélesség']

A legtöbb ember max_columns-t és precizitást használ

# Távolítsa el a korlátot a oszlopok számának megjelenítéséhez pd.options.display.max_columns = Nincs # Csak 5 számot jelenítsen meg a tizedesjegy után. pd.options.display.precision = 5 # megszabadul a tudományos jelölésektől

Convert_dtypes

Mindannyian tisztában vagyunk azzal, hogy a pandák bosszantó szokásuk van, hogy egyes oszlopokat objektumadattípusként jelöljenek meg. Ahelyett, hogy közvetlenül meghatározná a típusukat, használhatja a convert dtypes módszert, amely megpróbálja kikövetkeztetni a legjobb adattípust:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId objektum CO float64 O3 float64 AQI_Bucket objektum dtype: objektum >>> sample.convert_dtypes().dtypes StationId karakterlánc CO float64 O3 float64 AQI_Bucket string dtype: objektum

Select_dtypes

A névből szerintem egyértelmű, hogy mit csinál a funkció. A belefoglaló és kihagyás opciókkal megadhat olyan oszlopokat, amelyek adott adattípusokat tartalmaznak vagy kihagynak.

Csak np.számmal rendelkező numerikus oszlopokat válasszon, például:

# Csak numerikus oszlopokat válasszon diamonds.select_dtypes(include=np.number).head()
válasszon dtípusokat
Kép szerzőtől

 

Maszk

Ez a funkció segít lecserélni azokat az értékeket, ahol az egyéni feltétel nem teljesül.

# Példaadatok létrehozása életkorok = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") életkorok
maszk | adat
Kép szerzőtől

A fenti művelet elvégzése után.

maszkolást végeztek
Kép szerzőtől

Min és Max

Bár a min és a max jól ismert, néhány éles esetnél van néhány jobb tulajdonsága.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] libraries = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) for lib in libraries}, index=index ) >>> df
min és max
A kép szerzője 

A fenti kitalált DataFrame négy különböző gradiensnövelő könyvtár eredményeit mutatja öt adatkészleten. Azt a csomagot keressük, amelyik minden adathalmaz esetében a legjobbat teljesítette. Így érheti el ezt a max-mal előkelő módon:

>>> df.max(axis=1) Gyémántok 99.52684 Titanic 99.63650 Írisz 99.10989 Szívbetegség 99.31627 Hitel alapértelmezett 97.96728 dtype: float64

A legnagyobb és a legkisebb

A nlargest és nsmallest hasznos egy változó felső N vagy ~(top N) értékének megtekintéséhez.

gyémántok.legnagyobb(5, "ár")
legnagyobb és legkisebb
Kép szerzőtől
diamonds.nsmallest(5, "ár")
nlegkisebb
Kép szerzőtől

 

Idxmax és Idxmin

A pandák a legnagyobb/legkisebb számot adják vissza, ha egy oszlopban max vagy min hívja. Vannak azonban olyan helyzetek, amikor szükség van a min/max helyzetére, amit ezek a funkciók nem biztosítanak.

Ehelyett használhatja az idxmax/idxmin paramétert:

>>> gyémántok.ár.idxmax() 27749 >>> gyémántok.karát.idxmin() 14

Value_Counts

A hiányzó értékek százalékos arányának meghatározásának általános módja az isnull és az összeg összevonása, valamint a tömb méretével való elosztása.

De a value_counts releváns argumentumokkal ugyanezt teszi:

ház = pd.read_csv("train.csv") >>> ház["FireplaceQu"].value_counts(dropna=False, normalize=Igaz) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Tűz 0.01644 Tűzhely 0.01370 Tűz 64 Ex XNUMX XNUMX XNUMX. úszóXNUMX

Csipesz

A klip funkció segít megtalálni a tartományon kívüli kiugró értékeket, és ezeket szigorú határértékekkel helyettesíteni.

>>> ages.clip(50, 60)
adatok a kliphez
Kép szerzőtől

 

At_time és Betweeen_time

Ezek a funkciók hasznosak nagy részletességű idősorokkal végzett munka során.

at_time segít értékeket kapni egy adott napon vagy időpontban.

index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
at_time példa | panda funkciók
Kép szerzőtől

>>> df.at_time(“15:00”)

.at_time | panda funkciók
Kép szerzőtől

A between_time egy egyéni tartományon belüli sorok lekérésére szolgál.

from datetime import datetime >>> df.between_time("09:45", "12:00")
között_idő
Kép szerzőtől

 

Bdátum_tartomány

Ez a funkció segít idősoros indexek létrehozásában munkanapi gyakorisággal. A pénzügyi világban ilyen frekvencia van. Tehát ez a funkció hasznos lehet az idősorok újraindexelésekor.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Egy hónapos időszak >>> len(series) 21

At és Iat

Ez a két kiegészítő lényegesen gyorsabb, mint a loc és az iloc. Van azonban egy hátrányuk. Egyszerre csak egy érték kiválasztását vagy cseréjét teszik lehetővé:

# [index, label] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # Cserélje ki az ároszlop 16541. sorát >> > diamonds.at[16541, "price"] = 10000

Argsort

Ez a funkció segít olyan indexek kinyerésében, amelyek a jellemzők tömbjét rendezik.

tips.reset_index(inplace=True, drop=True) sort_idx = tippek["total_bill"].argsort(kind="mergesort") # Most rendezze a "tippeket" a total_bill tips.iloc[sort_idx].head() alapján.
arg_sort
Kép szerzőtől

 

Macska kiegészítő

A pandák lehetővé teszik a python beépített funkcióit a dátumokon és a karakterláncokon olyan kiegészítők használatával, mint az str vagy dt.

>>> diamonds.dtypes carat float64 vágás kategória szín kategória tisztaság kategória mélység float64 asztal float64 ár int64 x float64 y float64 z float64 cut_enc int64 dtype: tárgy

A cat accessor segítségével számos speciális funkció használható a kategorikus oszlopokon. Olyan funkciókkal rendelkezik, mint a kategóriák az egyedi kereséshez, a rename_categories a szolgáltatások átnevezéséhez.

diamonds["new_cuts"] = gyémántok["vágott"].cat.rename_categories(list("ABCDE")) >>> diamonds["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='object')

Nézze meg ezt a funkciók további listájáért macska kiegészítő.

Présel

Az összenyomás ritka, de súlyosbító élhelyzetekben használt funkció.

Ha egyetlen értéket ad vissza a DataFrame részhalmazához használt feltétel, ez az egyik ilyen eset. Fontolja meg a következő forgatókönyvet:

részhalmaz = gyémántok.loc[gyémántok.index >> részhalmaz
ár

Még akkor is, ha csak egy cella van, adja vissza a DataFrame-et. Ez kényelmetlen, mivel az ár lekéréséhez most a.loc fájlt kell használnia az oszlopnévvel és az indexszel is.

Nem kell, ha tudod, hogyan kell szorítani. Ezzel a funkcióval eltávolítható egy tengely egy egycellás DataFrame-ből vagy sorozatból. Fontolja meg a következő forgatókönyvet:

>>> részhalmaz.squeeze() 326

Megadható az eltávolítandó tengely. Most már csak skalárt adott vissza.

>>> subset.squeeze("oszlopok") # vagy "sorok" 0 326 Név: ár, dtype: int64

Ne feledje, hogy ez a funkció csak egyetlen értékkel rendelkező Series vagy DataFrame esetén működik.

Excel_író

Ez egy általános osztály Excel fájlok létrehozására és DataFrame írására. Gondoljunk csak bele, ez a két adatkészletünk van.

# Töltsön be két adatkészletet diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Írjon ugyanabba az excel fájlba a pd.ExcelWriter("data/data.xlsx") segítségével, mint író: diamonds.to_excel (író, lap_név="gyémántok") tippek.to_excel(író, lap_név="tippek")

Olyan tulajdonságokkal rendelkezik, amelyek megadják a használandó DateTime formátumot, hogy új fájlra van szükség, vagy módosítani kell egy meglévőt, mi történik, ha egy lap létezik. Nézd meg dokumentáció fül alatt találsz.

Következtetés

Ez nem egy kimerítő áttekintés a pandákról, és a dokumentáció további információkat tartalmaz a kódról és a funkciókról. Azt javaslom, hogy kísérletezzen az itt megadott kódrészletek különböző változataival, valamint különféle paraméterekkel. Ezzel az ember teljesen megértheti a pandák erejét.

Az olyan könyvtárak, mint a Dask és a datatable, fokozatosan kiszorítják a Pandákat a nagy adatkészletek kezelésére szolgáló, feltűnő új funkcióikkal, a Panda továbbra is a legszélesebb körben használt adatkezelési eszköz a Python adattudományi közösségében. Mivel jól illeszkedik a jelenlegi SciPy-verembe, a könyvtár paradigmaként szolgál más csomagok követésére és építésére.

Remélem hasznosnak találtad ezt a bejegyzést, és köszönöm, hogy elolvastad.

Az ebben a cikkben bemutatott médiák nem az Analytics Vidhya tulajdonát képezik, és a Szerző belátása szerint használják azokat.

Forrás: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Időbélyeg:

Még több Analytics Vidhya