Michael Macaulay

Täytyy tietää Pandas -toiminnot koneoppimismatkalle

Lähdesolmu: 1865356

Tämä artikkeli julkaistiin osana Data Science Blogathon

esittely

No, sinulla on hyvä mahdollisuus!

Datatieteilijöille, jotka käyttävät Pythonia ensisijaisena ohjelmointikielenään, Pandas-paketti on pakollinen tietojen analysointityökalu. Pandas -paketti sisältää kaiken datatieteilijän tarvitseman, ja jokainen kurssi opetti meille sen hyödyntämisen aluksi. Se on niin suuri, voimakas ja suorittaa melkein kaikki taulukolliset manipulaatiot, joita voit kuvitella. Tämä leveys voi kuitenkin joskus olla haitta.

Siinä on monia kauniita ominaisuuksia, jotka ratkaisevat harvinaisia ​​reunatapauksia, erilaisia ​​skenaarioita.

Yksi pandojen keskeisistä haitoista on se, että se kamppailee suurten tietojoukkojen kanssa, koska pandat tallentavat tietorakenteensa RAM -muistiin, mikä voi muuttua riittämättömäksi datakokojen kasvaessa. Käytä tähän PySparkia tai Daskia.

Vaikka Pandas -pakettia käytetään laajalti, monet toiminnot voivat silti jättää huomiotta, koska sitä käytetään vähemmän tai koska he eivät tiedä sen olemassaolosta. Tämän viestin tarkoituksena on esitellä sinulle nämä ominaisuudet ja osoittaa, että Pandas on paljon pätevämpi kuin aiemmin tiesit.

Putki

Pandojen tietojen puhdistamiseksi ytimekkäästi ja kompaktisti voidaan käyttää Pipe -toimintoja, joiden avulla voit yhdistää useita toimintoja yhteen toimintoon.

Jos esimerkiksi haluat käyttää toimintoja, kuten drop_duplicates, encode_categoricals, remove_outliers, jotka hyväksyvät sen argumentit.

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

Faktoida

Tämä toiminto on vaihtoehto Sklearns Label Encoderille.

# Muista [0] lopussa timantit ["cut_enc"] = pd.factorize (timantit ["cut"]) [0] >>> timantit ["cut_enc"]. Näyte (5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nimi: cut_enc, dtype: int64

Faktoroi tuloksena joukko arvoja: koodattu arvo ja luettelo ainutlaatuisista luokista.

arvot, yksilöllinen = pd.factorize (timantit ["leikkaus"], lajittelu = tosi) >>> arvot [: 10] array ([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype = int64) >>> ainutlaatuinen ['Ideal', 'Premium', 'Very Good', 'Good', 'Fair']

Räjähtää

Räjähdys | pandat toimivat

Kuva Edewaa Foster on Unsplash

Räjähdys on toiminto, jolla on mielenkiintoinen nimi. Aloitetaan esimerkillä ja sitten selityksellä:

df = pd.Series ([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]). to_frame ("likainen") >>> df
tiedot | pandat toimivat
Kuva tekijältä

Ominaisuussarakkeessa on kaksi riviä, jotka on merkitty luetteloilla. Tämäntyyppisiä tietoja on saatavilla kyselyissä, joissa muutama kysymys hyväksyy useita vaihtoehtoja.

>>> df.explode ("likainen", ignore_index = True)
data räjähtää
Kuva tekijältä

Tämä funktio ottaa solun, jossa on joukko arvoja, ja räjähtää useille riveille. Jos haluat säilyttää numeerisen indeksin järjestyksen, käytä ignore_index -arvoa True.

Välillä

Tässä on kätevä toiminto loogisen indeksoinnin numeerisille ominaisuuksille alueella:

# Hanki timantteja, joiden hinta on 3500–3700 dollaria [timantit ["price"]. Välillä (3500, 3700, inclusive = "ei")]. Näyte (5)
tietojen välillä | pandat toimivat
Kuva tekijältä

 

T

DataFrame sisältää yksinkertaisen T -määritteen, joka tunnetaan nimellä transponointi. Emme ehkä käytä sitä usein, kuvausmenetelmä on hyödyllinen datakehysten katselun aikana.

>>> boston.describe (). T.head (10)
osaksi kansallista lainsäädäntöä
Kuva tekijältä

 

Pandavaihtoehdot

Voidaan käyttää pandojen yleisiä asetuksia, jotka auttavat säätämään ja muuttamaan oletuskäyttäytymistä.

>>> dir (pd.options) ['laskea', 'näyttö', 'io', 'tila', 'piirtäminen']

Se koostuu 5 moduulista. Katsotaan käytettävissä olevat vaihtoehdot näytön alla. Vaihtoehtoja on monia, mutta käytän enimmäkseen max_columns.

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

Useimmat ihmiset käyttävät maksimi_sarakkeita ja tarkkuutta

# Poista rajoitus näyttääksesi sarakkeiden lukumäärän pd.options.display.max_columns = Ei mitään # Näytä vain viisi numeroa desimaalin jälkeen pd.options.display.precision = 5 # eroaa tieteellisistä merkeistä

Muunna_tyypit

Olemme kaikki tietoisia siitä, että pandoilla on ärsyttävä tapa merkitä joitain sarakkeita objektin tietotyypeiksi. Sen sijaan, että määrittäisit niiden tyypit suoraan, voit käyttää muuntaa dtypes -menetelmää, joka yrittää päätellä parhaan tietotyypin:

näyte = pd.read_csv ("data/station_day.csv", usecols = ["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes StationId -objekti CO float64 O3 float64 AQI_Bucket -objektityyppi: objekti >>> sample.convert_dtypes (). dtypes StationId merkkijono CO float64 O3 float64 AQI_Bucket string dtype: object

Valitse_tyypit

Mielestäni nimen perusteella on selvää, mitä toiminto tekee. Voit käyttää sisällyttämis- ja poissulkemisasetuksia määrittääksesi sarakkeita, jotka sisältävät tai jättävät pois tietyt tietotyypit.

Valitse vain numeeriset sarakkeet, joissa on np.number, esimerkiksi:

# Valitse vain numeeriset sarakkeet diamonds.select_dtypes (include = np.number) .head ()
valitse dtypes
Kuva tekijältä

 

Naamio

Tämä toiminto auttaa korvaamaan arvot, jos mukautettu ehto ei täyty.

# Luo näytetietojen ikä = pd.Series ([55, 52, 50, 66, 57, 59, 49, 60]). To_frame ("age") -ikä
naamio | tiedot
Kuva tekijältä

Yllä olevan toimenpiteen suorittamisen jälkeen.

peite suoritettu
Kuva tekijältä

Min ja Max

Vaikka min ja max ovat hyvin tunnettuja, sillä on joitain parempia ominaisuuksia joillekin reunatapauksille.

index = ["Timantit", "Titanic", "Iris", "Sydänsairaus", "Lainan oletus"] kirjastot = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ({lib: np.random.uniform (90, 100, 5) lib kirjastoissa}, index = index) >>> df
min ja max
Kuva tekijältä 

Yllä oleva kuvitteellinen DataFrame näyttää neljän eri gradientin tehostavan kirjaston tulokset viidellä tietojoukolla. Etsimme pakettia, joka toimi parhaiten kussakin tietojoukossa. Voit tehdä sen maksimin avulla tyylikkäästi seuraavasti:

>>> df.max (akseli = 1) Timantit 99.52684 Titanic 99.63650 Iris 99.10989 Sydänsairaus 99.31627 Lainan oletusarvo 97.96728 dtype: float64

Suurin ja pienin

Suurin ja pienin on hyödyllinen muuttujan N- tai ~ (alin N) -arvon tarkasteluun.

timantit.suuri (5, "hinta")
suurin ja pienin
Kuva tekijältä
timantit.nsm pienin (5, "hinta")
n pienin
Kuva tekijältä

 

Idxmax ja Idxmin

Pandat palauttavat suurimman/pienimmän numeron, kun soitat sarakkeessa max tai min. On kuitenkin tilanteita, joissa tarvitset min/max -asennon, jota nämä toiminnot eivät tarjoa.

Sen sijaan voit käyttää idxmax/idxmin:

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

Arvo_määrät

Yleinen tapa löytää puuttuvien arvojen prosenttiosuus on yhdistää nolla ja summa ja jakaa matriisin koolla.

Mutta arvo_laskut asiaankuuluvilla argumenteilla tekee saman:

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

Leikata

Leiketoiminto auttaa löytämään poikkeamia alueen ulkopuolella ja korvaamaan ne kovilla rajoilla.

>>> age.clip (50, 60)
leikkeen tiedot
Kuva tekijältä

 

At_time ja Betweeen_time

Nämä toiminnot ovat hyödyllisiä työskenneltäessä erittäin rakeisten aikasarjojen kanssa.

at_time auttaa saamaan arvot tiettynä päivänä tai kellonaikana.

index = pd.date_range ("2021-08-01", pisteet = 100, freq = "H") df = pd.DataFrame ({"col": list (range (100))}, index = index) >> > df.head ()
at_time esimerkki | pandat toimivat
Kuva tekijältä

>>> df.at_time ("15:00")

.at_time | pandat toimivat
Kuva tekijältä

välillä_aika käytetään rivien noutamiseen mukautetulla alueella.

datetime tuonti datetime >>> df.between_time ("09:45", "12:00")
välillä_aika
Kuva tekijältä

 

Bdate_range

Tämä toiminto auttaa luomaan aikasarjaindeksit työpäivän taajuudella. Finanssimaailmassa on tällainen taajuus. Tästä toiminnosta voi siis olla apua silloin, kun aikasarjoja indeksoidaan uudelleen indeksin avulla.

series = pd.bdate_range ("2021-01-01", "2021-01-31") # Yhden kuukauden jakso >>> len (sarja) 21

Klo ja Iat

Nämä kaksi lisälaitetta ovat huomattavasti nopeampia kuin loc ja iloc. Niillä on kuitenkin haittapuoli. Niiden avulla voit valita tai korvata vain yhden arvon kerrallaan:

# [hakemisto, etiketti] >>> diamonds.at [234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat [1564, 4] 61.2 # Korvaa hinta -sarakkeen 16541. rivi >> > timantit.at [16541, "price"] = 10000

Argsort

Tämä toiminto auttaa poimimaan indeksejä, jotka lajittelisivat joukon ominaisuuksia.

tips.reset_index (inplace = True, drop = True) sort_idx = tips ["total_bill"]. argsort (kind = "mergesort") # Lajittele nyt "vinkit" total_bill tips.iloc [sort_idx] .head ()
arg_sort
Kuva tekijältä

 

Kissan lisävaruste

Pandat mahdollistavat sisäänrakennetut python-toiminnot päivämäärinä ja merkkijonoina käyttämällä lisäosia, kuten str tai dt.

>>> diamonds.dtypes karaatti float64 leikkausluokka väriluokka kirkkaus luokka syvyys float64 pöytä float64 hinta int64 x float64 y float64 z float64 cut_enc int64 dtype: object

Voidaan käyttää monia erityistoimintoja käyttämällä kissan lisävarustetta kategorisissa sarakkeissa. Siinä on toimintoja, kuten luokkia yksilöllisten etsimiseksi, rename_categories, joiden avulla toiminnot voidaan nimetä uudelleen.

timantit ["new_cuts"] = timantit ["leikattu"]. kissa.nimi_luokat (luettelo ("ABCDE")) >>> timantit ["uudet_leikkaukset"]. kissa.luokat Hakemisto (['A', 'B', ' C ',' D ',' E '], dtype =' objekti ')

Katso tästä lisää luetteloa alla olevista toiminnoista kissan lisävaruste.

Puristaa

Puristus on toiminto, jota käytetään harvinaisissa mutta raskauttavissa reunatilanteissa.

Kun yksi arvo palautetaan datakehyksen alijoukkoon käytetystä ehdosta, tämä on yksi näistä tapauksista. Harkitse seuraavaa skenaariota:

osajoukko = diamonds.loc [diamonds.index >> osajoukko
hinta

Vaikka soluja olisi vain yksi, palauta DataFrame. Se on hankalaa, koska sinun täytyy nyt käyttää.loc sekä sarakkeen nimellä että indeksillä hinnan saamiseksi.

Sinun ei tarvitse, jos tiedät puristaa. Akseli voidaan poistaa yksisoluisesta DataFrame- tai -sarjasta tällä toiminnolla. Harkitse seuraavaa skenaariota:

>>> osajoukko.purista () 326

Poistettava akseli on mahdollista määrittää. Se oli vasta palannut skalaariksi.

>>> subset.squeeze ("sarakkeet") # tai "rivit" 0 326 Nimi: hinta, dtype: int64

Huomaa, että tämä toiminto toimii vain sarja- tai DataFrame -kehyksissä, joissa on yksittäiset arvot.

Excel_writer

Se on yleinen luokka Excel -tiedostojen luomiseen ja DataFramen kirjoittamiseen siihen. Harkitse, meillä on nämä kaksi tietojoukkoa.

# Lataa kaksi tietojoukkoa timantit = sns.load_dataset ("timantit") vinkit = sns.load_dataset ("vinkit") # Kirjoita samaan excel -tiedostoon pd.ExcelWriter ("data/data.xlsx") avulla kirjoittajana: diamonds.to_excel (kirjoittaja, arkin_nimi = "timantit") tips.to_excel (kirjoittaja, arkin_nimi = "vinkit")

Siinä on ominaisuuksia, jotka määrittävät käytettävän DateTime -muodon riippumatta siitä, tarvitsetko uuden tiedoston vai muokkaatko olemassa olevaa, mitä tapahtuu, jos taulukko on olemassa. Tarkista tämä dokumentointi lisätietoja.

Yhteenveto

Se ei ole tyhjentävä katsaus pandoihin ja dokumentointi sisältää lisätietoja koodista ja ominaisuuksista. Suosittelen kokeilemaan tässä annettujen koodinpätkien eri muunnelmia sekä erilaisia ​​parametreja. Pandojen voiman voi täysin ymmärtää tekemällä tämän.

Kirjastot, kuten Dask ja datatable, ovat vähitellen syrjäyttäneet Pandat uusilla ominaisuuksillaan suurten tietojoukkojen käsittelyyn. Pandas on edelleen laajimmin käytetty tietojenkäsittelyväline Python -datatieyhteisössä. Koska se sopii hyvin nykyiseen SciPy -pinoon, kirjasto toimii paradigmana muiden pakettien seurattavaksi ja rakennettavaksi.

Toivottavasti pidit tätä viestiä oivaltavana ja kiitos kun luit.

Tässä artikkelissa esitetyt tiedotusvälineet eivät ole Analytics Vidhyan omistuksessa ja niitä käytetään tekijän harkinnan mukaan.

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

Aikaleima:

Lisää aiheesta Analyysi Vidhya