Michael Macaulay

Peab teadma Panda funktsioone masinõppe teekonnal

Allikasõlm: 1865356

See artikkel avaldati osana Andmeteaduse ajaveebi

Sissejuhatus

Noh, teil on hea võimalus!

Andmeteadlastele, kes kasutavad Pythonit peamise programmeerimiskeelena, on Pandase pakett kohustuslik andmeanalüüsi tööriist. Panda paketis on kõik, mida andmeteadlane vajab, ja iga kursus õpetas meile, kuidas seda alguses kasutada. See on nii suur, võimas ja teeb peaaegu kõik tabelimanipulatsioonid, mida võite ette kujutada. Kuid see laius võib mõnikord olla puuduseks.

Sellel on palju ilusaid funktsioone, mis lahendavad haruldasi äärejuhtumeid, erinevaid stsenaariume.

Pandade üks peamisi puudusi on see, et neil on probleeme suurte andmekogumitega, kuna pandad salvestavad oma andmestruktuure RAM-i, mis võib andmemahu kasvades ebapiisavaks muutuda. Kasutage selleks PySparki või Daski.

Kuigi Panda paketti kasutatakse laialdaselt, on siiski palju funktsioone, mis võivad inimestel kahe silma vahele jääda, kas seetõttu, et seda kasutatakse vähem või nad ei tea selle olemasolust. Selle postituse eesmärk on teile neid funktsioone uuesti tutvustada ja näidata, et Pandas on palju pädevam, kui te varem teadsite.

Toru

Andmete ülevaatlikuks ja kompaktseks puhastamiseks pandadel saab kasutada Pipe funktsioone, mis võimaldavad kombineerida mitu funktsiooni ühe toiminguga.

Näiteks kui soovite rakendada funktsioone, nagu drop_duplicates, encode_categoricals, remove_outliers, mis aktsepteerivad selle argumente.

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

Faktoreerida

See funktsioon on alternatiiv Sklearns Label Encoderile.

# Pidage meeles [0] lõpus teemandid["cut_enc"] = pd.factorize(teemonds["cut"])[0] >>> teemandid["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nimi: cut_enc, dtype: int64

Tulemuste faktoriseerimine väärtusi: kodeeritud väärtus ja kordumatute kategooriate loend.

väärtused, unikaalne = pd.factorize(diamonds["cut"], sort=True) >>> väärtused[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unikaalne ["Ideaalne", "Premium", "Väga hea", "Hea", "Õiglane"]

plahvatama

Plahvata | panda funktsioonid

Foto: Edewaa Foster on Unsplash

Explode on huvitava nimega funktsioon. Alustame näitega ja seejärel selgitusega:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("määrdunud") >>> df
andmed | panda funktsioonid
Autori pilt

Funktsiooniveerul on kaks rida, mis on tähistatud loenditega. Seda tüüpi andmed on saadaval uuringutes, kus mõne küsimuse puhul on mitu valikut.

>>> df.explode("määrdunud", ignore_index=True)
andmed plahvatavad
Autori pilt

See funktsioon võtab väärtuste massiiviga lahtri ja plahvatab mitu rida. Numbriindeksi järjestuse säilitamiseks kasutage ignore_indexi väärtusena True.

Vahel

Vahemikus olevate numbriliste funktsioonide tõeväärtusliku indekseerimise jaoks on siin mugav funktsioon:

# Hankige teemante, mille hind jääb vahemikku 3500–3700 dollarit teemante[teemandid["hind"].between(3500, 3700, inclusive="ei kumbki")].sample(5)
andmete vahel | panda funktsioonid
Autori pilt

 

T

DataFrame'il on lihtne T-atribuut, mida nimetatakse transponeerimiseks. Me ei pruugi seda sageli kasutada, kirjeldamise meetod on andmeraamide vaatamisel abiks.

>>> boston.describe().T.head(10)
üle
Autori pilt

 

Panda valikud

Võite kasutada pandade globaalseid seadeid, mis aitavad kohandada ja muuta vaikekäitumist.

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

See koosneb 5 moodulist. Vaatame ekraani all saadaolevaid valikuid. Saadaval on palju võimalusi, kuid ma kasutan enamasti max_columns.

>>> dir(pd.options.display) ['chop_threshold', "max_columns", "max_colwidth", "max_info_columns", "max_info_rows", "max_rows", ... "täpsus", "show"_dimensions , 'laius']

Enamik inimesi kasutab max_columns ja täpsust

# Eemaldage veergude arvu kuvamise piirang pd.options.display.max_columns = Puudub # Kuva ainult 5 numbrit pärast koma pd.options.display.precision = 5 # vabaneb teaduslikust tähistusest

Convert_dtypes

Me kõik teame, et pandadel on tüütu komme märkida mõned veerud objektide andmetüüpidena. Selle asemel, et määrata nende tüüpe otse, võite kasutada meetodit convert dtypes, mis püüab tuletada parima andmetüübi:

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

Select_dtypes

Nime järgi on minu arvates selge, mida see funktsioon teeb. Saate kasutada kaasamise ja välistamise suvandeid, et määrata veerge, mis sisaldavad või jätavad välja teatud andmetüübid.

Valige ainult numbrilised veerud, millel on np.number, näiteks:

# Valige ainult numbrilised veerud diamonds.select_dtypes(include=np.number).head()
valige dtüübid
Autori pilt

 

Mask

See funktsioon aitab asendada väärtusi, kus kohandatud tingimus ei ole täidetud.

# Loo näidisandmete vanused = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("vanused") vanused
mask | andmeid
Autori pilt

Pärast ülaltoodud toimingu sooritamist.

maskeerimine teostatud
Autori pilt

Min ja Max

Kuigi min ja max on hästi teada, on sellel mõnede servajuhtumite jaoks paremad omadused.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Laenu vaikimisi"] libraries = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) lib jaoks raamatukogudes}, index=index ) >>> df
min ja max
Pilt autorilt 

Ülaltoodud väljamõeldud DataFrame näitab nelja erineva gradiendi võimendamise teegi tulemusi viies andmekogumis. Otsime paketti, millel on iga andmestiku puhul parim tulemus. Siit saate teada, kuidas seda tipptasemel saavutada.

>>> df.max(axis=1) Teemandid 99.52684 Titanic 99.63650 Iris 99.10989 Südamehaigused 99.31627 Laenu vaikimisi 97.96728 dtype: float64

Suurim ja N-väikseim

Suurim ja nväikseim on abiks muutuja N või ~(top N) väärtuste vaatamiseks.

teemandid.suurim(5, "hind")
suurim ja väikseim
Autori pilt
teemandid.nsmallest(5, "hind")
nväikseim
Autori pilt

 

Idxmax ja Idxmin

Pandad tagastavad suurima/väikseima numbri, kui helistate veerus max või min. Siiski on olukordi, kus vajate min/max asendit, mida need funktsioonid ei paku.

Selle asemel võite kasutada idxmax/idxmin:

>>> teemandid.hind.idxmax() 27749 >>> teemandid.karaat.idxmin() 14

Value_Counts

Levinud viis puuduvate väärtuste protsendi leidmiseks on liita isnull ja summa ning jagada massiivi suurusega.

Kuid väärtuste_loendid asjakohaste argumentidega teevad sama:

korpus = pd.read_csv("rong.csv") >>> korpus["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Fire 0.01644 Tulekahju 0.01370 Tulekahju 64 ExXNUMX XNUMX tüüp XNUMX. ujukXNUMX

Pügama

Klipi funktsioon aitab leida vahemikku väljaspool olevaid kõrvalekaldeid ja asendada need rangete piirangutega.

>>> ages.clip(50, 60)
andmed klipi jaoks
Autori pilt

 

Kell_aeg ja kellaaja vahel

Need funktsioonid on abiks suure detailsusega aegridadega töötamisel.

at_time aitab saada väärtusi kindlal kuupäeval või kellaajal.

index = pd.date_range("2021-08-01", perioodid=100, sagedus="H") df = pd.DataFrame({"col": list(range(100))}, index=indeks) >> > df.head()
at_time näide | panda funktsioonid
Autori pilt

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

.at_time | panda funktsioonid
Autori pilt

vahe_aeg, mida kasutatakse kohandatud vahemiku ridade toomiseks.

from datetime import datetime >>> df.between_time("09:45", "12:00")
vahel_aeg
Autori pilt

 

Bdate_range

See funktsioon aitab luua aegridade indekseid tööpäevade sagedusega. Finantsmaailmas on seda tüüpi sagedus. Seega võib see funktsioon olla abiks aegridade uuesti indekseerimisel uuesti indekseerimisfunktsiooniga.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Ühe kuu pikkune periood >>> len(seeria) 21

Kell ja Iat

Need kaks lisaseadet on oluliselt kiiremad kui loc ja iloc. Siiski on neil puudus. Need võimaldavad teil valida või asendada ainult ühe väärtuse korraga:

# [indeks, silt] >>> diamonds.at[234, "cut"] 'Ideal' # [indeks, indeks] >>> diamonds.iat[1564, 4] 61.2 # Asenda hinnaveeru 16541. rida >> > diamonds.at[16541, "price"] = 10000

Argsort

See funktsioon aitab eraldada indekseid, mis sorteerivad funktsioonide massiivi.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Nüüd sorteerige vihjeid total_bill tips.iloc[sort_idx].head() põhjal.
arg_sort
Autori pilt

 

Kassi lisaseade

Pandad võimaldavad pythoni sisseehitatud funktsioone kuupäevadel ja stringidel, kasutades aksessuaare, nagu str või dt.

>>> diamonds.dtypes carat float64 lõikekategooria värvikategooria selgus kategooria sügavus float64 tabel float64 hind int64 x float64 y float64 z float64 cut_enc int64 dtype: objekt

Kategoorilistel veergudel saab kasutada paljusid erifunktsioone, kasutades kassi lisaseadet. Sellel on sellised funktsioonid nagu kategooriad unikaalsete leidmiseks, rename_categories funktsioonide ümbernimetamiseks.

teemandid["uued_lõiked"] = teemandid["lõigatud"].cat.rename_categories(list("ABCDE")) >>> teemandid["uued_lõiked"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='object')

Vaadake seda, et näha allolevat funktsioonide loendit kassi aksessuaar.

Pigistama

Squeeze on funktsioon, mida kasutatakse harvadel, kuid raskendavatel servaolukordadel.

Kui DataFrame'i alamhulgaks kasutatud tingimusest tagastatakse üks väärtus, on see üks neist juhtudest. Kaaluge järgmist stsenaariumi:

alamhulk = teemandid.loc[diamonds.index >> alamhulk
hind

Isegi kui on ainult üks lahter, tagastage DataFrame. See on ebamugav, kuna nüüd peate hinna saamiseks kasutama faili.loc nii veeru nime kui ka indeksiga.

Sa ei pea seda tegema, kui tead, kuidas pigistada. Selle funktsiooni abil saab telje eemaldada ühelahtrilisest DataFrame'ist või seeriast. Kaaluge järgmist stsenaariumi:

>>> alamhulk.squeeze() 326

Võimalik on määrata eemaldatav telg. See oli nüüd ainult skalaari tagasi andnud.

>>> subset.squeeze("columns") # või "rows" 0 326 Nimi: hind, dtype: int64

Pange tähele, et see funktsioon töötab ainult üksikute väärtustega Series või DataFrame'i puhul.

Exceli_kirjutaja

See on üldine klass Exceli failide loomiseks ja sellesse DataFrame'i kirjutamiseks. Mõelge, meil on need kaks andmekogumit.

# Laadige kaks andmekogumit diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Kirjutage samasse Exceli faili pd.ExcelWriter("data/data.xlsx") nagu kirjutaja: diamonds.to_excel (writer, sheet_name="teemantid") tips.to_excel(writer, sheet_name="tips")

Sellel on atribuudid kasutatava kuupäeva-aja vormingu määramiseks, kas vajate uut faili või muudate olemasolevat, mis juhtub, kui leht on olemas. Kontrolli seda dokumentatsioon rohkem üksikasju.

Järeldus

See ei ole ammendav ülevaade pandadest ja dokumentatsioon sisaldab rohkem teavet koodi ja funktsioonide kohta. Soovitan katsetada siin pakutavate koodijuppide erinevate variatsioonidega, aga ka erinevate parameetritega. Seda tehes on võimalik täielikult mõista pandade jõudu.

Teegid, nagu Dask ja datatable, tõrjuvad Pandasid järk-järgult välja oma toretsevate uute funktsioonidega suurte andmehulkade haldamiseks. Pandad on Pythoni andmeteaduse kogukonnas endiselt kõige laialdasemalt kasutatav andmetöötlustööriist. Kuna see sobib praegusesse SciPy virnasse, toimib raamatukogu paradigmana teistele paketidele, mida jälgida ja ehitada.

Loodan, et see postitus oli teile arusaadav ja tänan teid lugemise eest.

Selles artiklis näidatud meediumid ei kuulu Analytics Vidhyale ja neid kasutatakse autori äranägemisel.

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

Ajatempel:

Veel alates Analüütika Vidhya