Michael Macaulay

Trebuie să știți funcțiile panda pentru călătoria de învățare automată

Nodul sursă: 1865356

Acest articol a fost publicat ca parte a Blogathon Data Science

Introducere

Ei bine, există o bună posibilitate să poți!

Pentru oamenii de știință de date care folosesc Python ca limbaj de programare principal, pachetul Pandas este un instrument de analiză a datelor obligatoriu. Pachetul Pandas are tot ce are nevoie un cercetător de date și fiecare curs ne-a învățat cum să-l folosim la început. Este atât de mare, puternic și efectuează aproape orice manipulare tabulară pe care ți-o poți imagina. Cu toate acestea, această lățime poate fi uneori un dezavantaj.

Are multe caracteristici frumoase care rezolvă cazuri rare, scenarii diferite.

Unul dintre dezavantajele cheie ale panda este că se luptă cu seturi de date mari, deoarece panda își stochează structurile de date în RAM, care poate deveni insuficientă pe măsură ce dimensiunea datelor crește. Utilizați PySpark sau Dask pentru aceasta.

Chiar dacă pachetul Pandas este utilizat pe scară largă, există încă multe funcții pe care oamenii le pot trece cu vederea, fie pentru că este folosit mai puțin, fie pentru că nu sunt conștienți de existența lui. Această postare intenționează să vă reintroducă aceste caracteristici și să demonstreze că Pandas este mult mai competent decât știai anterior.

Pipe

Pentru a efectua curățarea datelor într-o manieră concisă și compactă la panda, puteți utiliza funcțiile Pipe, care vă permit să combinați mai multe funcții într-o singură operațiune.

De exemplu, dacă doriți să aplicați funcții precum drop_duplicates, encode_categoricals, remove_outliers care acceptă argumentele acestuia.

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

Factorizează

Această funcție este o alternativă la Sklearns Label Encoder.

# Mind the [0] at the end diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nume: cut_enc, dtype: int64

Factorizarea rezultă un tuplu de valori: valoarea codificată și o listă de categorii unice.

valori, unice = pd.factorize(diamonds["cut"], sort=True) >>> values[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unic ['Ideal', 'Premium', 'Foarte bine', 'Bine', 'Corect']

exploda

Exploda | funcțiile panda

Fotografie de Edewaa Foster on Unsplash

Explode este o funcție cu un nume interesant. Să începem cu un exemplu și apoi cu o explicație:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("murdar") >>> df
date | funcțiile panda
Imagine a autorului

Coloana caracteristică are două rânduri notate cu liste. Acest tip de date este disponibil în sondaje în care câteva întrebări acceptă opțiuni multiple.

>>> df.explode(„murdar”, ignore_index=True)
datele explodează
Imagine a autorului

Această funcție preia o celulă cu o matrice de valori și explodează în mai multe rânduri. Pentru a menține ordinea unui index numeric, utilizați ignore_index ca True.

Între

Pentru caracteristicile numerice de indexare booleană dintr-un interval, iată o funcție utilă:

# Obțineți diamante cu prețuri între 3500 și 3700 de dolari diamante[diamonds["price"].between(3500, 3700, inclusive="nither")].sample(5)
între date | funcțiile panda
Imagine a autorului

 

T

DataFrame are un atribut T simplu, cunoscut sub numele de transpunere. Este posibil să nu o folosim des, metoda descrie este utilă în timpul vizualizării cadrelor de date.

>>> boston.describe().T.head(10)
transpune
Imagine a autorului

 

Opțiuni panda

Se pot folosi setările globale ale panda, care ajută la modificarea și modificarea comportamentelor implicite.

>>> dir(pd.options) ['calculare', 'afişare', 'io', 'mode', 'trasare']

Este format din 5 module. Să vedem opțiunile disponibile sub afișaj. Există multe opțiuni disponibile, dar folosesc mai ales max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precizie', 'show_dimensions', 'unicode' , „lățime”]

Majoritatea oamenilor folosesc max_columns și precizie

# Eliminați limita pentru afișarea numărului de coloane pd.options.display.max_columns = None # Afișați numai 5 numere după zecimală pd.options.display.precision = 5 # scapă de notația științifică

Convert_dtypes

Cu toții știm că panda au un obicei enervant de a marca unele coloane ca tipuri de date obiect. În loc să le definiți direct tipurile, puteți utiliza metoda convert dtypes, care încearcă să deducă cel mai bun tip de date:

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

Select_dtypes

Din nume, cred că este clar ce face funcția. Puteți utiliza opțiunile de includere și excludere pentru a specifica coloane care includ sau omit anumite tipuri de date.

Alegeți numai coloane numerice cu np.number, de exemplu:

# Alegeți numai coloane numerice diamonds.select_dtypes(include=np.number).head()
selectați dtypes
Imagine a autorului

 

Masca

Această funcție ajută la înlocuirea valorilor în care condiția personalizată nu este îndeplinită.

# Creați eșantion de date de vârstă = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("vârstele") vârste
masca | date
Imagine a autorului

După efectuarea operației de mai sus.

mascarea efectuată
Imagine a autorului

Min și Max

Deși min și max sunt bine cunoscute, are unele proprietăți mai bune pentru unele cazuri de margine.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] biblioteci = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) pentru lib în biblioteci}, index=index ) >>> df
min si max
Imagine de autor 

DataFrame fictiv de mai sus arată rezultatele a patru biblioteci diferite de creștere a gradientului pe cinci seturi de date. Căutăm pachetul care s-a descurcat cel mai bine pentru fiecare set de date. Iată cum să o realizați cu max într-un mod elegant:

>>> df.max(axis=1) Diamante 99.52684 Titanic 99.63650 Iris 99.10989 Boli cardiace 99.31627 Împrumut implicit 97.96728 dtype: float64

Cel mai mare și cel mai mic

Cel mai mare și cel mai mic este util pentru a vizualiza valorile N de sus sau ~(N de sus) ale unei variabile.

diamonds.nlargest(5, „preț”)
cel mai mare și cel mai mic
Imagine a autorului
diamonds.nsmallest(5, „preț”)
cel mai mic
Imagine a autorului

 

Idxmax și Idxmin

Panda returnează cel mai mare/cel mai mic număr atunci când apelați max sau min pe o coloană. Există însă situații în care aveți nevoie de poziția min/max, pe care aceste funcții nu o oferă.

În schimb, puteți utiliza idxmax/idxmin:

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

Value_Counts

O modalitate obișnuită de a găsi procentul valorilor lipsă este de a combina isnull și sum și de a împărți la dimensiunea matricei.

Dar, value_counts cu argumente relevante face același lucru:

housing = pd.read_csv("train.csv") >>> housing["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Semineu:d0.01370 Po 64 Tip: d. floatXNUMX

Tăia

Funcția de clipare ajută la găsirea valorii aberante din afara unui interval și la înlocuirea lor cu limite stricte.

>>> age.clip(50, 60)
date pentru clip
Imagine a autorului

 

At_time și Betweeen_time

Aceste funcții sunt utile în timp ce lucrați cu serii cronologice de granularitate ridicată.

at_time ajută la obținerea de valori la o anumită dată sau oră.

index = pd.date_range("2021-08-01", periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
exemplu at_time | funcțiile panda
Imagine a autorului

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

.la_ora | funcțiile panda
Imagine a autorului

between_time folosit pentru a prelua rânduri dintr-un interval personalizat.

de la datetime import datetime >>> df.between_time("09:45", "12:00")
intre_timp
Imagine a autorului

 

Bdate_range

Această funcție ajută la crearea indicilor serii temporale cu frecvența zilelor lucrătoare. Lumea financiară are acest tip de frecvență. Deci, această funcție ar putea fi utilă în momentul reindexării seriilor temporale cu funcția de reindexare.

serie = pd.bdate_range("2021-01-01", "2021-01-31") # O perioadă de o lună >>> len(serie) 21

La şi Iat

Aceste două accesorii sunt substanțial mai rapide decât loc și iloc. Cu toate acestea, au un dezavantaj. Acestea vă permit doar să alegeți sau să înlocuiți o singură valoare la un moment dat:

# [index, label] >>> diamonds.at[234, „cut”] „Ideal” # [index, index] >>> diamonds.iat[1564, 4] 61.2 # Înlocuiește rândul 16541 al coloanei preț >> > diamonds.at[16541, „preț”] = 10000

Argsort

Această funcție ajută la extragerea indicilor care ar sorta o serie de caracteristici.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Acum, sortați `tips` pe baza total_bill tips.iloc[sort_idx].head()
arg_sort
Imagine a autorului

 

Accesor pentru pisici

Panda permite funcții încorporate ale lui Python pe date și șiruri folosind accesorii precum str sau dt.

>>> diamonds.dtypes carat float64 categorie de tăiere categorie de culoare categoria de claritate adâncime float64 tabel float64 preț int64 x float64 y float64 z float64 cut_enc int64 dtype: obiect

Se pot folosi multe funcții speciale folosind accesoriul cat pe coloane categorice. Are funcții precum categorii pentru a găsi unic, rename_categories pentru a redenumi caracteristicile.

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

Verificați acest lucru pentru o listă mai mare de funcții de mai jos accesoriu de pisică.

Stoarce

Strângerea este o funcție utilizată în circumstanțe rare, dar agravante.

Când o singură valoare este returnată dintr-o condiție utilizată pentru a subseta un DataFrame, acesta este unul dintre aceste cazuri. Luați în considerare următorul scenariu:

subset = diamonds.loc[diamonds.index >> subset
preţ

Chiar dacă există o singură celulă, returnați DataFrame. Este incomod, deoarece acum trebuie să utilizați.loc atât cu numele coloanei, cât și cu indexul pentru a obține prețul.

Nu trebuie să faci asta dacă știi să strângi. O axă poate fi îndepărtată dintr-un DataFrame sau dintr-o serie cu o singură celulă folosind această funcție. Luați în considerare următorul scenariu:

>>> subset.squeeze() 326

Este posibil să specificați axa de eliminat. Revenise doar scalar acum.

>>> subset.squeeze("coloane") # sau "rânduri" 0 326 Nume: preț, dtype: int64

Rețineți că această funcție funcționează numai pentru Series sau DataFrame cu valori unice.

Excel_writer

Este o clasă generică pentru crearea fișierelor Excel și scrierea DataFrame în ea. Luați în considerare, avem aceste două seturi de date.

# Încărcați două seturi de date diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Scrieți în același fișier Excel cu pd.ExcelWriter("data/data.xlsx") ca scriitor: diamonds.to_excel (writer, sheet_name="diamonds") tips.to_excel(writer, sheet_name="sfaturi")

Are proprietăți pentru a specifica formatul DateTime de utilizat, dacă aveți nevoie de un fișier nou sau modificați unul existent, ce se întâmplă dacă există o foaie. Verifica acest lucru documentaţie pentru mai multe detalii.

Concluzie

Nu este o privire de ansamblu exhaustivă a panda și documentaţie conține mai multe informații despre cod și caracteristici. Vă recomand să experimentați cu diferite variante ale fragmentelor de cod furnizate aici, precum și diferiți parametri. Se poate înțelege pe deplin puterea panda făcând acest lucru.

Biblioteci precum Dask și datatable îi înlocuiesc treptat pe Pandas cu noile lor caracteristici strălucitoare pentru gestionarea seturilor mari de date, Pandas rămâne cel mai utilizat instrument de manipulare a datelor în comunitatea Python științifică a datelor. Datorită cât de bine se potrivește în stiva actuală SciPy, biblioteca servește drept paradigmă pentru alte pachete de urmat și construit.

Sper că ați găsit această postare perspicace și vă mulțumesc pentru lectura.

Mediile prezentate în acest articol nu sunt deținute de Analytics Vidhya și sunt utilizate la discreția autorului.

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

Timestamp-ul:

Mai mult de la Analize Vidhya