Michael Macaulay

Må kjenne Pandas Functions for Machine Learning Journey

Kilde node: 1865356

Denne artikkelen ble publisert som en del av Data Science Blogathon

Introduksjon

Vel, det er en god mulighet for at du kan!

For dataforskere som bruker Python som sitt primære programmeringsspråk, er Pandas-pakken et må-ha dataanalyseverktøy. Pandas-pakken har alt en dataforsker trenger, og hvert kurs lærte oss å bruke den til å begynne med. Den er så stor, kraftig og utfører nesten alle tabellmanipulasjoner du kan forestille deg. Imidlertid kan denne bredden til tider være en ulempe.

Den har mange vakre funksjoner som løser sjeldne kantsaker, forskjellige scenarier.

En av pandaenes viktigste ulemper er at den sliter med store datasett fordi pandaene lagrer datastrukturene sine i RAM, som kan bli utilstrekkelig ettersom datastørrelsene vokser. Bruk PySpark eller Dask til dette.

Selv om Pandas-pakken er mye brukt, er det fortsatt mange funksjoner som folk kan overse, enten fordi den brukes mindre eller fordi de ikke er klar over dens eksistens. Dette innlegget har til hensikt å gjenintrodusere deg for disse funksjonene og demonstrere at Pandas er langt mer kompetent enn du var klar over tidligere.

Pipe

For å utføre datarensing på en kortfattet, kompakt måte i pandaer, kan man bruke Pipe-funksjoner, som lar deg kombinere flere funksjoner i en operasjon.

For eksempel, hvis du liker å bruke funksjoner som drop_duplicates, encode_categoricals, remove_outliers som aksepterer argumentene.

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

Faktoriser

Denne funksjonen er et alternativ til Sklearns Label Encoder.

# Pass på [0] på slutten diamanter["cut_enc"] = pd.factorize(diamanter["cut"])[0] >>> diamanter["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Navn: cut_enc, dtype: int64

Faktoriser resultatene en tuppel av verdier: den kodede verdien og en liste over unike kategorier.

verdier, unik = pd.factorize(diamanter["cut"], sort=True) >>> verdier[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unik ['Ideell', 'Premium', 'Very Good', 'Bra', 'Fair']

Eksplodere

Eksplodere | pandas funksjoner

Photo by Edewaa Foster on Unsplash

Explode er en funksjon med et interessant navn. La oss starte med et eksempel og deretter en forklaring:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("dirty") >>> df
data | pandafunksjoner
Bilde av forfatter

Funksjonskolonnen har to rader merket med lister. Denne typen data er tilgjengelig i undersøkelser der noen få spørsmål aksepterer flere valg.

>>> df.explode("dirty", ignore_index=True)
data eksploderer
Bilde av forfatter

Denne funksjonen tar en celle med en rekke verdier og eksploderer i flere rader. For å opprettholde rekkefølgen til en numerisk indeks, bruk ignore_index som True.

Mellom

For boolesk indeksering av numeriske funksjoner innenfor et område, her er en praktisk funksjon:

# Få diamanter som er priset mellom 3500 og 3700 dollar diamanter[diamanter["price"].between(3500, 3700, inclusive="neither")].sample(5)
mellom data | pandafunksjoner
Bilde av forfatter

 

T

DataFrame har en enkel T-attributt, kjent som transponere. Vi bruker det kanskje ikke ofte, beskriv metode er nyttig når du ser på datarammene.

>>> boston.describe().T.head(10)
transponere
Bilde av forfatter

 

Panda-alternativer

Man kan bruke globale innstillinger for pandaer som hjelper til med å justere og endre standard oppførsel.

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

Den består av 5 moduler. La oss se tilgjengelige alternativer under skjermen. Det er mange alternativer tilgjengelig, men jeg bruker mest max_columns.

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

De fleste bruker max_columns og presisjon

# Fjern grensen for å vise antall kolonner pd.options.display.max_columns = Ingen # Vis bare 5 tall etter desimalen pd.options.display.precision = 5 # blir kvitt vitenskapelig notasjon

Convert_dtypes

Vi er alle klar over at pandaer har en irriterende vane med å merke noen kolonner som objektdatatyper. I stedet for å definere typene direkte, kan du bruke convert dtypes-metoden, som prøver å utlede den beste datatypen:

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: objekt >>> sample.convert_dtypes().dtypes StationId-streng CO float64 O3 float64 AQI_Bucket-streng dtype: objekt

Select_dtypes

Fra navnet mener jeg det er klart hva funksjonen gjør. Du kan bruke alternativene inkludere og ekskludere for å spesifisere kolonner som inkluderer eller utelater bestemte datatyper.

Velg bare numeriske kolonner med np.number, for eksempel:

# Velg kun numeriske kolonner diamonds.select_dtypes(include=np.number).head()
velg dtypes
Bilde av forfatter

 

Ansiktsmaske

Denne funksjonen hjelper til med å erstatte verdier der den tilpassede betingelsen ikke er oppfylt.

# Opprett eksempeldata aldre = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") aldre
maske | data
Bilde av forfatter

Etter å ha utført operasjonen ovenfor.

maskering utført
Bilde av forfatter

Min og maks

Selv om min og maks er godt kjent, har den noen bedre egenskaper for noen kantsaker.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] biblioteker = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) for lib i biblioteker}, index=index ) >>> df
min og maks
Bilde av forfatter 

Den fiktive DataFrame ovenfor viser resultatene av fire forskjellige gradientforsterkende biblioteker på fem datasett. Vi ser etter pakken som gjorde det best på hvert datasett. Slik oppnår du det med maks på en stilig måte:

>>> df.max(akse=1) Diamanter 99.52684 Titanic 99.63650 Iris 99.10989 Hjertesykdom 99.31627 Lån Standard 97.96728 dtype: float64

Størst og minste

Den største og minste er nyttig for å vise de øverste N eller ~(top N) verdiene til en variabel.

diamonds.nlargest(5, "pris")
størst og minste
Bilde av forfatter
diamanter.nsmallest(5, "pris")
den minste
Bilde av forfatter

 

Idxmax og Idxmin

Pandaer returnerer det største/minste tallet når du ringer maks eller min på en kolonne. Det er imidlertid situasjoner når du trenger posisjonen til min/maks, som disse funksjonene ikke gir.

I stedet kan du bruke idxmax/idxmin:

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

Value_Counts

En vanlig måte å finne prosentandelen av de manglende verdiene på er å kombinere isnull og sum og dele på størrelsen på matrisen.

Men, value_counts med relevante argumenter gjør det samme:

bolig = pd.read_csv("train.csv") >>> bolig["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Eks 0.01644 Po 0.01370:Qu, 64, XNUMX,d flyteXNUMX

Klipp

Klippfunksjonen hjelper til med å finne uteliggere utenfor et område og erstatte dem med harde grenser.

>>> ages.clip(50, 60)
data for klipp
Bilde av forfatter

 

At_time og Betweeen_time

Disse funksjonene er nyttige når du arbeider med tidsserier med høy granularitet.

at_time hjelper deg med å få verdier på en bestemt dato eller klokkeslett.

index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
at_time eksempel | pandafunksjoner
Bilde av forfatter

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

.at_time | pandas funksjoner
Bilde av forfatter

between_time brukes til å hente rader innenfor et tilpasset område.

fra datetime import datetime >>> df.between_time("09:45", "12:00")
mellom_tid
Bilde av forfatter

 

Bdate_range

Denne funksjonen hjelper deg med å lage tidsserieindekser med arbeidsdagers frekvens. Finansverdenen har denne typen frekvens. Så denne funksjonen kan være nyttig ved reindeksering av tidsserier med reindekseringsfunksjon.

series = pd.bdate_range("2021-01-01", "2021-01-31") # En periode på én måned >>> len(series) 21

Kl og Iat

Disse to tilbehørene er vesentlig raskere enn loc og iloc. Imidlertid har de en ulempe. De lar deg bare velge eller erstatte én verdi om gangen:

# [indeks, etikett] >>> diamonds.at[234, "cut"] 'Ideal' # [index, index] >>> diamonds.iat[1564, 4] 61.2 # Erstatt 16541. rad i priskolonnen >> > diamanter.at[16541, "pris"] = 10000

Argsort

Denne funksjonen hjelper til med å trekke ut indekser som kan sortere en rekke funksjoner.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Sorter nå `tips` basert på total_bill tips.iloc[sort_idx].head()
arg_sort
Bilde av forfatter

 

Kattetilbehør

Pandaene tillater innebygde funksjoner for python på datoer og strenger ved å bruke tilbehør som str eller dt.

>>> diamonds.dtypes carat float64 cut kategori farge kategori klarhet kategori dybde float64 bord float64 pris int64 x float64 y float64 z float64 cut_enc int64 dtype: objekt

Man kan bruke mange spesialfunksjoner ved å bruke kattetilbehør på kategoriske kolonner. Den har funksjoner som kategorier for å finne unike, rename_categories for å gi nytt navn til funksjonene.

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

Sjekk dette for en mer liste over funksjoner under kattetilbehør.

Klemme

Klem er en funksjon som brukes i sjeldne, men likevel skjerpende omstendigheter.

Når en enkelt verdi returneres fra en betingelse som brukes til å undersette en DataFrame, er dette ett av disse tilfellene. Tenk på følgende scenario:

delsett = diamanter.loc[diamanter.indeks >> delsett
pris

Selv om det bare er én celle, returner DataFrame. Det er upraktisk siden du nå må bruke.loc med både kolonnenavn og indeks for å få prisen.

Det trenger du ikke hvis du vet hvordan du skal klemme. En akse kan fjernes fra en enkeltcellet DataFrame eller Series ved hjelp av denne funksjonen. Tenk på følgende scenario:

>>> subset.squeeze() 326

Det er mulig å spesifisere aksen som skal fjernes. Det hadde bare returnert skalær nå.

>>> subset.squeeze("kolonner") # eller "rows" 0 326 Navn: pris, dtype: int64

Merk at denne funksjonen bare fungerer for Series eller DataFrame med enkeltverdier.

Excel_writer

Det er en generisk klasse for å lage excel-filer og skrive DataFrame i den. Tenk på at vi har disse to datasettene.

# Last inn to datasett diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Skriv til den samme excel-filen med pd.ExcelWriter("data/data.xlsx") som forfatter: diamonds.to_excel (writer, sheet_name="diamonds") tips.to_excel(writer, sheet_name="tips")

Den har egenskaper for å spesifisere DateTime-formatet som skal brukes, enten du trenger en ny fil eller endre en eksisterende, hva skjer hvis det finnes et ark. Se på dette dokumentasjon for mer informasjon.

konklusjonen

Det er ikke en uttømmende oversikt over pandaer, og de dokumentasjon inneholder mer informasjon om koden og funksjonene. Jeg anbefaler at du eksperimenterer med ulike varianter av kodebitene som er gitt her, samt ulike parametere. Man kan fullt ut forstå kraften til pandaer ved å gjøre dette.

Biblioteker som Dask og datatable fortrenger gradvis Pandas med sine prangende nye funksjoner for håndtering av store datasett, Pandas er fortsatt det mest brukte datamanipuleringsverktøyet i Python-datavitenskapssamfunnet. På grunn av hvor godt det passer inn i den nåværende SciPy-stakken, fungerer biblioteket som et paradigme for andre pakker å følge og bygge.

Jeg håper du hadde funnet dette innlegget innsiktsfullt og takk for at du leste.

Media vist i denne artikkelen eies ikke av Analytics Vidhya og brukes etter forfatterens skjønn.

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

Tidstempel:

Mer fra Analytics Vidhya