Master Data Transformation Pandaissa näiden kolmen hyödyllisen tekniikan avulla

Sukella suodattamiseen, manipulointiin ja toimintaan

Kuva Milad Fakurian on Unsplash

Ajattele viimeistä kertaa, kun työskentelit kauniisti muotoillun tietojoukon kanssa. Hyvin nimetyt sarakkeet, minimaaliset puuttuvat arvot ja oikea järjestys. On mukava tunne – melkein vapauttava – olla siunattu datalla, jota sinun ei tarvitse puhdistaa ja muuttaa.

No, se on mukavaa, kunnes pääset eroon päiväunelmastasi ja jatkat puuhailua edessäsi olevien rikkinäisten rivien ja järjettömien etikettien toivottomassa hämärässä.

Sellaista asiaa kuin puhdas data (alkuperäisessä muodossaan) ei ole olemassa. Jos olet datatieteilijä, tiedät tämän. Jos olet vasta aloittamassa, sinun tulee hyväksyä tämä. Sinun on muutettava tietosi, jotta voit työskennellä niiden kanssa tehokkaasti.

Puhutaanpa kolmesta tavasta tehdä se.

Suodatus - mutta selitetty oikein

Puhutaanpa suodatuksesta – mutta hieman syvällisemmin kuin olet tottunut tekemään. Tehokas suodatus on yksi yleisimmistä ja hyödyllisimmistä tiedonmuunnosoperaatioista jokaisen datatieteilijän pakollinen taito. Jos tunnet Pandat, se on todennäköisesti yksi ensimmäisistä operaatioista, joita opit tekemään.

Käydään läpi suosikkini, oudon monipuolinen esimerkkini: oppilaiden arvosanojen DataFrame, osuvasti ns. grades:

Kuva tekijältä

Suodatamme pois kaikki alle 90 pisteet, koska olemme tänä päivänä päättäneet olla huonosti koulutettuja opettajia, jotka palvelevat vain huippuoppilaita (älä koskaan tee tätä). Standardikoodirivi tämän suorittamiseksi on seuraava:

arvosanat[arvosanat['pisteet'] >= 90]
Kuva tekijältä

Jäljelle jää Jack ja Hermione. Viileä. Mutta mitä tässä oikein tapahtui? Miksi toimiiko yllä oleva koodirivi? Sukellaan hieman syvemmälle katsomalla lausekkeen tulosta yllä olevien ulompien sulujen sisällä:

arvosanat['Pistemäärä'] >= 90
Kuva tekijältä

Ah, okei. Tuossa on järkeä. Näyttää siltä, ​​että tämä koodirivi palauttaa Pandas-sarjan objektin, jossa on Boolen ( True / False ) arvot, jotka määritetään mitä >= 90 palautetaan jokaiselta riviltä. Tämä on tärkein välivaihe. Myöhemmin tämä Boolean-sarja siirtyy ulompiin hakasulkeisiin ja suodattaa kaikki rivit vastaavasti.

Täydennyksen vuoksi mainitsen myös, että sama käyttäytyminen voidaan saavuttaa käyttämällä loc avainsana:

grades.loc[grades['Pistemäärä'] >= 90]
Kuva tekijältä

Saatamme valita käytön useista syistä loc (joista yksi on se, että sen avulla voimme itse asiassa suodattaa rivejä ja sarakkeita yhdellä toiminnolla), mutta se avaa Pandoran lippaan, joka on parasta jättää toiseen artikkeliin.

Tärkeä oppimistavoite on toistaiseksi tämä: kun suodatamme Pandassa, hämmentävä syntaksi ei ole mitään outoa taikuutta. Meidän on yksinkertaisesti jaettava se kahteen osavaiheeseen: 1) hankittava ehtomme täyttävistä riveistä Boolen sarja ja 2) suodatettava koko DataFrame pois sarjan avulla.

Miksi tämä on hyödyllistä, saatat kysyä? Yleisesti ottaen se johtaa todennäköisesti hämmentävään bugeihin, jos käytät toimintoja ymmärtämättä niiden todellista toimintaa. Suodatus on hyödyllinen ja uskomattoman yleinen toiminto, ja tiedät nyt, kuinka se toimii.

Siirrytään eteenpäin.

Lambdatoimintojen kauneus

Joskus tietosi vaativat muunnoksia, jotka eivät yksinkertaisesti ole Pandan toimintojen sisäänrakennettuja. Yrittäkää kuinka tahansa, mikään määrä Stack Overflow -ohjelmaa tai ahkera Pandas-dokumenttien tutkiminen ei paljasta ratkaisua ongelmaasi.

Anna lambda-toiminnot – hyödyllinen kieliominaisuus, joka integroituu kauniisti Pandaan.

Pikakatsauksena tässä on, kuinka lambdat toimivat:

>>> add_function = lambda x, y: x + y
>>> add_function(2, 3)
5

Lambda-funktiot eivät eroa tavallisista funktioista lukuun ottamatta sitä tosiasiaa, että niillä on tiiviimpi syntaksi:

  • Toiminnon nimi yhtäläisyysmerkin vasemmalla puolella
  • - lambda avainsana yhtäläisyysmerkin oikealla puolella (samalla tavalla kuin def avainsana perinteisessä Python-funktion määritelmässä, tämä antaa Pythonille tietää, että määrittelemme funktion).
  • Parametri(t) jälkeen lambda avainsana kaksoispisteen vasemmalla puolella.
  • Palautusarvo kaksoispisteen oikealla puolella.

Sovelletaan nyt sitten lambda-funktioita realistiseen tilanteeseen.

Tietojoukoilla on usein omat muotoilun erityispiirteensä, jotka liittyvät tiedon syöttämisen ja keräämisen vaihteluihin. Tämän seurauksena käsittelemissäsi tiedoissa voi olla oudon erityisiä ongelmia, jotka sinun on ratkaistava. Harkitse esimerkiksi alla olevaa yksinkertaista tietojoukkoa, joka tallentaa ihmisten nimet ja heidän tulonsa. Kutsutaan sitä monies.

Kuva tekijältä

Nyt tämän yrityksen Master Data Highnesseina meille on annettu huippusalaisia ​​tietoja: kaikki tämän yrityksen työntekijät saavat 10 % korotuksen ja 1000 dollarin lisäkorotuksen. Tämä on luultavasti liian spesifinen laskelma tietyn menetelmän löytämiseksi, mutta riittävän yksinkertainen lambda-funktion kanssa:

update_income = lambda-numero: numero + (nm * .10) + 1000

Sitten meidän tarvitsee vain käyttää tätä toimintoa Pandan kanssa apply funktio, jonka avulla voimme käyttää funktiota jokaiseen valitun sarjan elementtiin:

rahat['New Income'] = rahat['Tuot'].apply(update_income)
rahat
Kuva tekijältä

Ja olemme valmiit! Loistava uusi DataFrame, joka koostuu täsmälleen tarvitsemastamme tiedosta, kaikki kahdella koodirivillä. Jotta se olisi vielä ytimekkäämpi, olisimme voineet jopa määritellä lambda-funktion sisällä apply suoraan – hyvä vinkki, joka kannattaa pitää mielessä.

Pidän asian yksinkertaisena.

Lambdat ovat erittäin hyödyllisiä, joten niitä kannattaa käyttää. Nauttia!

Sarjan merkkijonokäsittelytoiminnot

Edellisessä osiossa puhuimme lambda-toimintojen monipuolisuudesta ja kaikista hienoista asioista, joita ne voivat auttaa sinua saavuttamaan tietosi. Tämä on erinomaista, mutta sinun tulee olla varovainen, ettet hurahdu. On uskomattoman yleistä, että jäät niin kiinni yhteen tuttuun tapaan tehdä asioita, jotka jäävät paitsi yksinkertaisemmista pikanäppäimistä, joilla Python on siunannut ohjelmoijia. Tämä koskee tietysti muutakin kuin lambdaa, mutta pysymme siinä toistaiseksi.

Oletetaan esimerkiksi, että meillä on seuraava DataFrame nimeltään names joka tallentaa ihmisten etu- ja sukunimet:

Kuva tekijältä

Nyt tietokannassamme olevien tilanrajoitusten vuoksi päätämme, että sen sijaan, että tallentaisimme henkilön koko sukunimen, on tehokkaampaa tallentaa hänen viimeinen alkukirjaimensa. Siksi meidän on muutettava 'Last Name' sarakkeessa vastaavasti. Lambdojen kanssa yrityksemme tehdä niin saattaa näyttää tältä:

nimet['Sukunimi'] = nimet['Sukunimi'].apply(lambda s: s[:1])
nimet
Kuva tekijältä

Tämä selkeästi toimii, mutta se on hieman kömpelö, eikä siksi niin pythonic kuin se voisi olla. Onneksi Pandasin merkkijonojen manipulointitoimintojen kauneuden ansiosta on olemassa toinen, tyylikkäämpi tapa (seuraavaa koodiriviä varten, mene eteenpäin ja oleta, ettemme ole jo muuttaneet 'Last Name' sarake yllä olevalla koodilla):

names['Last Name'] = nimet['Last Name'].str[:1]
nimet
Kuva tekijältä

Ta-da! The .str Pandas-sarjan ominaisuus mahdollistaa sarjan jokaisen merkkijonon yhdistämisen tietyllä merkkijonooperaatiolla, aivan kuin työskennellemme jokaisen merkkijonon kanssa erikseen.

Mutta odota, se paranee. Siitä asti kun .str Sen avulla voimme tehokkaasti käyttää merkkijonon normaalia toimintaa sarjan kautta, voimme myös käyttää useita merkkijonotoimintoja, jotka auttavat käsittelemään tietojamme nopeasti! Oletetaan esimerkiksi, että päätämme muuntaa molemmat sarakkeet pieniksi kirjaimiksi. Seuraava koodi tekee työn:

names['Etunimi'] = nimet['Etunimi'].str.lower()
nimet['Sukunimi'] = nimet['Sukunimi'].str.lower()
nimet
Kuva tekijältä

Paljon yksinkertaisempaa kuin omien lambda-funktioiden määritteleminen ja sen sisällä olevien merkkijonofunktioiden kutsuminen. Ei sillä, että en rakastaisi lambdaja - mutta kaikella on paikkansa, ja yksinkertaisuuden tulisi aina olla etusijalla Pythonissa.

Olen käsitellyt tässä vain muutamia esimerkkejä, mutta laaja kokoelma merkkijonofunktioita on käytettävissäsi [1].

Käytä niitä rohkeasti. Ne ovat erinomaisia.

Viimeiset ajatukset ja yhteenveto

Tässä on sinulle pieni datamuunnoslehti:

  1. Suodata kuten tarkoitat. Opi mitä todella tapahtuu, jotta tiedät mitä olet tekemässä.
  2. Rakasta lambdaasi. Ne voivat auttaa sinua käsittelemään tietoja uskomattomilla tavoilla.
  3. Pandat rakastavat jousia yhtä paljon kuin sinäkin. Sisäänrakennettuja toimintoja on paljon – voit yhtä hyvin käyttää niitä.

Tässä on viimeinen neuvo: ei ole "oikeaa" tapaa suodattaa tietojoukkoa. Se riippuu käytettävissä olevista tiedoista sekä ainutlaatuisesta ongelmasta, jota etsit ratkaistavaksi. Vaikka ei ole asetettua menetelmää, jota voit seurata joka kerta, käytettävissäsi on kuitenkin hyödyllinen kokoelma työkaluja. Tässä artikkelissa keskustelen niistä kolmesta.

Kannustan sinua menemään ulos ja etsimään lisää.

Viitteet

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Master Data Transformation in Panda näiden kolmen hyödyllisen tekniikan avulla Julkaistu uudelleen lähteestä https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-three-useful-techniques-20699f03e51d?source=rss—-7f60cf5620—9c4 XNUMX osoitteessa https://towardsdatascience.com/feed

<!-

->

Aikaleima:

Lisää aiheesta Blockchain-konsultit