Michael Macaulay

Morate poznati funkcije Pandas za potovanje strojnega učenja

Izvorno vozlišče: 1865356

Ta članek je bil objavljen kot del Blogathon o znanosti o podatkih

Predstavitev

No, obstaja dobra možnost, da lahko!

Za podatkovne znanstvenike, ki uporabljajo Python kot svoj primarni programski jezik, je paket Pandas nujno orodje za analizo podatkov. Paket Pandas ima vse, kar potrebuje podatkovni znanstvenik, in vsak tečaj nas je najprej naučil, kako ga uporabljati. Je tako velik, močan in izvaja skoraj vse tabelarične manipulacije, ki si jih lahko zamislite. Vendar pa je ta širina včasih lahko slabost.

Ima veliko čudovitih funkcij, ki rešujejo redke robne primere, različne scenarije.

Ena od ključnih pomanjkljivosti pande je, da ima težave z velikimi nabori podatkov, ker panda shranjuje svoje podatkovne strukture v RAM, ki lahko postane nezadosten, ko se velikost podatkov poveča. Za to uporabite PySpark ali Dask.

Čeprav se paket Pandas pogosto uporablja, še vedno obstaja veliko funkcij, ki jih ljudje morda spregledajo, bodisi zato, ker se manj uporablja ali ker se ne zavedajo njegovega obstoja. Ta objava vas namerava ponovno seznaniti s temi funkcijami in pokazati, da je Pandas veliko bolj kompetenten, kot ste se prej zavedali.

cevi

Za izvedbo čiščenja podatkov na jedrnat in kompakten način v pandah lahko uporabite funkcije Pipe, ki vam omogočajo kombiniranje več funkcij v eni operaciji.

Na primer, če želite uporabiti funkcije, kot so drop_duplicates, encode_categoricals, remove_outliers, ki sprejemajo njegove argumente.

df_cleaned = (diamonds.pipe(drop_duplicates). pipe(remove_outliers, ['price', 'carat', 'depth']). pipe(encode_categoricals, ['cut', 'color', 'clarity']) )

Faktoriziraj

Ta funkcija je alternativa Sklearns Label Encoder.

# Upoštevajte [0] na koncu diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Ime: cut_enc, dtype: int64

Faktorizacija rezultatov nabor vrednosti: kodirana vrednost in seznam edinstvenih kategorij.

vrednosti, edinstveno = pd.factorize(diamanti["cut"], sort=True) >>> values[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> edinstveno ['Idealno', 'Premium', 'Zelo dobro', 'Dobro', 'Pošteno']

Explode

Eksplodiraj | funkcije pande

Foto: Edewaa Foster on Unsplash

Explode je funkcija z zanimivim imenom. Začnimo s primerom in nato z razlago:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("dirty") >>> df
podatki | funkcije pande
Slika avtorja

Stolpec funkcij ima dve vrstici, označeni s seznami. Ta vrsta podatkov je na voljo v anketah, kjer nekaj vprašanj omogoča več možnosti.

>>> df.explode("umazano", ignore_index=True)
podatki eksplodirajo
Slika avtorja

Ta funkcija vzame celico z nizom vrednosti in razpade v več vrsticah. Če želite ohraniti vrstni red številskega indeksa, uporabite ignore_index kot True.

Med

Za številčne funkcije logičnega indeksiranja znotraj obsega je tukaj priročna funkcija:

# Pridobite diamante, katerih cena je med 3500 in 3700 dolarji diamonds[diamonds["price"].between(3500, 3700, inclusive="nither")].sample(5)
med podatki | funkcije pande
Slika avtorja

 

T

DataFrame ima preprost atribut T, znan kot transponiranje. Morda je ne uporabljamo pogosto, metoda opisa je v pomoč pri ogledovanju podatkovnih okvirov.

>>> boston.describe().T.head(10)
prestaviti
Slika avtorja

 

Možnosti Pandas

Uporabite lahko globalne nastavitve pand, ki pomagajo prilagoditi in spremeniti privzeto vedenje.

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

Sestavljen je iz 5 modulov. Oglejmo si razpoložljive možnosti pod zaslonom. Na voljo je veliko možnosti, vendar večinoma uporabljam max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'premer']

Večina ljudi uporablja max_columns in natančnost

# Odstranite omejitev za prikaz števila stolpcev pd.options.display.max_columns = None # Prikažite le 5 števil za decimalko pd.options.display.precision = 5 # znebite se znanstvenega zapisa

Convert_dtypes

Vsi vemo, da imajo pande nadležno navado, da nekatere stolpce označujejo kot objektne podatkovne vrste. Namesto da neposredno definirate njihove tipe, lahko uporabite metodo convert dtypes, ki poskuša izpeljati najboljši podatkovni tip:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId objekt CO float64 O3 float64 AQI_Bucket objekt dtype: predmet >>> sample.convert_dtypes().dtypes StationId niz CO float64 O3 float64 AQI_Bucket niz dtype: object

Select_dtypes

Menim, da je iz imena jasno, kaj funkcija počne. Z možnostma vključitve in izključitve lahko določite stolpce, ki vključujejo ali izpuščajo določene vrste podatkov.

Izberite samo številske stolpce z np.number, na primer:

# Izberite samo številske stolpce diamonds.select_dtypes(include=np.number).head()
izberite dtypes
Slika avtorja

 

Maska

Ta funkcija pomaga zamenjati vrednosti, kjer pogoj po meri ni izpolnjen.

# Ustvarite vzorčne podatke starosti = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("age") starosti
maska ​​| podatke
Slika avtorja

Po izvedbi zgornje operacije.

izvedeno maskiranje
Slika avtorja

Min in Max

Čeprav sta min in max dobro znana, ima nekaj boljših lastnosti za nekatere robne primere.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] knjižnice = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) za lib v knjižnicah}, index=index ) >>> df
min in maks
Slika avtorja 

Izmišljeni DataFrame zgoraj prikazuje rezultate štirih različnih knjižnic za povečanje gradienta na petih nizih podatkov. Iščemo paket, ki je bil najboljši pri vsakem naboru podatkov. Evo, kako to doseči z maxom na eleganten način:

>>> df.max(axis=1) Diamanti 99.52684 Titanik 99.63650 Iris 99.10989 Srčna bolezen 99.31627 Privzeto posojilo 97.96728 dtype: float64

Nnajvečji in Nnajmanjši

nlargest in nsmallest sta koristna za ogled zgornjih N ali ~(zgornjih N) vrednosti spremenljivke.

diamonds.nlargest(5, "price")
največji in najmanjši
Slika avtorja
diamonds.nsmallest(5, "price")
nsnajmanjši
Slika avtorja

 

Idxmax in Idxmin

Pande vrnejo največje/najmanjše število, ko kličete max ali min v stolpcu. Vendar obstajajo situacije, ko potrebujete položaj min/max, ki ga te funkcije ne zagotavljajo.

Namesto tega lahko uporabite idxmax/idxmin:

>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14

Štetje_vrednosti

Običajen način za iskanje odstotka manjkajočih vrednosti je kombinacija isnull in vsote ter deljenje z velikostjo matrike.

Toda value_counts z ustreznimi argumenti naredi isto:

ohišje = pd.read_csv("train.csv") >>> ohišje["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Ime: FireplaceQu, dtype: float64

Posnetek

Funkcija izrezka pomaga najti izstopajoče vrednosti izven obsega in jih nadomestiti s trdimi mejami.

>>> ages.clip(50, 60)
podatki za posnetek
Slika avtorja

 

At_time in Betweeen_time

Te funkcije so v pomoč pri delu s časovnimi serijami visoke razdrobljenosti.

at_time pomaga pridobiti vrednosti ob določenem datumu ali uri.

index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
primer ob_času | funkcije pande
Slika avtorja

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

.at_time | funkcije pande
Slika avtorja

med_časom, ki se uporablja za pridobivanje vrstic znotraj obsega po meri.

from datetime import datetime >>> df.between_time("09:45", "12:00")
med_časom
Slika avtorja

 

Bdatum_obseg

Ta funkcija pomaga ustvariti indekse časovnih vrst s frekvenco delovnih dni. Finančni svet ima to vrsto frekvence. Torej je ta funkcija lahko v pomoč pri ponovnem indeksiranju časovnih vrst s funkcijo ponovnega indeksiranja.

serija = pd.bdate_range("2021-01-01", "2021-01-31") # Obdobje enega meseca >>> len(series) 21

Ob in Iat

Ta dva dostopnika sta bistveno hitrejša od loc in iloc. Vendar pa imajo pomanjkljivost. Omogočajo vam samo izbiro ali zamenjavo ene vrednosti naenkrat:

# [index, label] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # Zamenjaj 16541. vrstico stolpca s cenami >> > diamonds.at[16541, "price"] = 10000

Argsort

Ta funkcija pomaga izluščiti indekse, ki bi razvrstili niz funkcij.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Zdaj razvrstite `napitnine` glede na total_bill tips.iloc[sort_idx].head()
arg_sort
Slika avtorja

 

Cat Accessor

Pande omogočajo vgrajene funkcije pythona za datume in nize z uporabo dostopnikov, kot sta str ali dt.

>>> diamonds.dtypes karat float64 cut kategorija barva kategorija jasnost kategorija globina float64 tabela float64 cena int64 x float64 y float64 z float64 cut_enc int64 dtype: object

Uporabite lahko številne posebne funkcije z uporabo cat accessorja v kategoričnih stolpcih. Ima funkcije, kot so kategorije za iskanje edinstvenih, rename_categories za preimenovanje funkcij.

diamanti["new_cuts"] = diamanti["cut"].cat.rename_categories(list("ABCDE")) >>> diamanti["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='object')

Oglejte si to za več seznamov funkcij pod mačji pripomoček.

Stisnite

Stiskanje je funkcija, ki se uporablja v redkih, a oteževalnih robnih okoliščinah.

Ko se iz pogoja, uporabljenega za podnabor DataFrame, vrne ena sama vrednost, je to eden od teh primerov. Razmislite o naslednjem scenariju:

podmnožica = diamonds.loc[diamonds.index >> podmnožica
Cena

Tudi če obstaja samo ena celica, vrnite DataFrame. To je neprijetno, saj morate zdaj uporabiti.loc z imenom stolpca in indeksom, da dobite ceno.

Ni ti treba, če znaš stiskati. S to funkcijo je mogoče odstraniti os iz enoceličnega podatkovnega okvira ali serije. Razmislite o naslednjem scenariju:

>>> subset.squeeze() 326

Možno je določiti os, ki jo želite odstraniti. Zdaj je vrnil samo skalar.

>>> subset.squeeze("columns") # ali "rows" 0 326 Ime: cena, dtip: int64

Upoštevajte, da ta funkcija deluje samo za serije ali DataFrame z enojnimi vrednostmi.

Excel_writer

Je generični razred za ustvarjanje excelovih datotek in pisanje DataFrame vanje. Razmislite, imamo ta dva niza podatkov.

# Naloži dva nabora podatkov diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Pišite v isto datoteko excel s pd.ExcelWriter("data/data.xlsx") kot zapisovalcem: diamonds.to_excel (pisatelj, sheet_name="diamanti") tips.to_excel(pisatelj, sheet_name="namigi")

Ima lastnosti za določanje oblike zapisa datuma in časa, ali potrebujete novo datoteko ali spremenite obstoječo, kaj se zgodi, če list obstaja. Preveri to Dokumentacija Za več podrobnosti.

zaključek

To ni izčrpen pregled pand in Dokumentacija vsebuje več informacij o kodi in funkcijah. Priporočam, da preizkusite različne različice tukaj navedenih delčkov kode in različne parametre. S tem lahko v celoti dojamete moč pand.

Knjižnice, kot sta Dask in datatable, postopoma izpodrivajo Pande s svojimi bleščečimi novimi funkcijami za ravnanje z velikimi nabori podatkov, Pandas ostaja najpogosteje uporabljeno orodje za manipulacijo podatkov v skupnosti podatkovne znanosti Python. Zaradi tega, kako dobro se ujema s trenutnim skladom SciPy, knjižnica služi kot paradigma za druge pakete, ki jim sledijo in gradijo.

Upam, da se vam je ta objava zdela pronicljiva in hvala za branje.

Mediji, prikazani v tem članku, niso v lasti Analytics Vidhya in se uporabljajo po presoji avtorja.

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

Časovni žig:

Več od Analitika Vidhya