Michael Macaulay

Deve conoscere le funzioni di Panda per il viaggio nell'apprendimento automatico

Nodo di origine: 1865356

Questo articolo è stato pubblicato come parte di Blogathon sulla scienza dei dati

Introduzione

Bene, c'è una buona possibilità che tu possa!

Per i data scientist che usano Python come linguaggio di programmazione principale, il pacchetto Pandas è uno strumento di analisi dei dati indispensabile. Il pacchetto Pandas ha tutto ciò di cui uno scienziato di dati ha bisogno e ogni corso ci ha insegnato come utilizzarlo all'inizio. È così grande, potente ed esegue quasi tutte le manipolazioni tabulari che puoi immaginare. Tuttavia, questa ampiezza a volte può essere uno svantaggio.

Ha molte belle funzionalità che risolvono casi limite rari, scenari diversi.

Uno degli svantaggi principali dei panda è che lotta con set di dati di grandi dimensioni perché i panda memorizzano le loro strutture di dati nella RAM, che può diventare insufficiente con l'aumentare delle dimensioni dei dati. Usa PySpark o Dask per questo.

Anche se il pacchetto Pandas è ampiamente utilizzato, ci sono ancora molte funzioni che le persone potrebbero trascurare, sia perché viene utilizzato meno o perché non ne sono consapevoli dell'esistenza. Questo post intende reintrodurvi a queste funzionalità e dimostrare che Pandas è molto più competente di quanto sapeste in precedenza.

Pipe

Per eseguire la pulizia dei dati in modo conciso e compatto nei panda, è possibile utilizzare le funzioni Pipe, che consentono di combinare più funzioni in un'unica operazione.

Ad esempio, se ti piace applicare funzioni come drop_duplicates,coding_categoricals, remove_outliers che accettano i suoi argomenti.

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

fattorizzare

Questa funzione è un'alternativa a Sklearns Label Encoder.

# Attenzione allo [0] alla fine diamonds["cut_enc"] = pd.factorize(diamonds["cut"])[0] >>> diamonds["cut_enc"].sample(5) 52103 2 39813 0 31843 0 10675 0 6634 0 Nome: cut_enc, dtype: int64

Fattorizzare risulta una tupla di valori: il valore codificato e un elenco di categorie univoche.

valori, unico = pd.factorize(diamanti["taglio"], sort=True) >>> valori[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> unique ['Ideale', 'Premium', 'Molto buono', 'Buono', 'Buono']

Esplodere

Esplodi | funzioni panda

Foto di Edewaa Foster on Unsplash

Explode è una funzione con un nome interessante. Iniziamo con un esempio e poi una spiegazione:

df = pd.Serie([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("sporco") >>> df
dati | funzioni panda
Immagine dell'autore

La colonna delle caratteristiche ha due righe denotate da elenchi. Questo tipo di dati è disponibile nei sondaggi in cui poche domande accettano scelte multiple.

>>> df.explode("sporco", ignore_index=True)
i dati esplodono
Immagine dell'autore

Questa funzione prende una cella con un array di valori ed esplode in più righe. Per mantenere l'ordine di un indice numerico, utilizzare ignore_index come True.

Tra

Per le caratteristiche numeriche di indicizzazione booleana all'interno di un intervallo, ecco una comoda funzione:

# Ottieni diamanti con un prezzo compreso tra 3500 e 3700 dollari diamanti[diamanti["prezzo"].between(3500, 3700, inclusive="nessuno")].sample(5)
tra i dati | funzioni panda
Immagine dell'autore

 

T

DataFrame ha un semplice attributo T, noto come transpose. Potremmo non usarlo spesso, descrivere il metodo è utile durante la visualizzazione dei dataframe.

>>> boston.describe().T.head(10)
trasporre
Immagine dell'autore

 

Opzioni Panda

È possibile utilizzare le impostazioni globali dei panda che aiutano a modificare e modificare i comportamenti predefiniti.

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

Si compone di 5 moduli. Vediamo le opzioni disponibili sotto il display. Ci sono molte opzioni disponibili, ma uso principalmente max_columns.

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

La maggior parte delle persone usa max_columns e precision

# Rimuove il limite per visualizzare il numero di colonne pd.options.display.max_columns = None # Mostra solo 5 numeri dopo la virgola pd.options.display.precision = 5 # elimina la notazione scientifica

Convert_dtypes

Sappiamo tutti che i panda hanno la fastidiosa abitudine di contrassegnare alcune colonne come tipi di dati oggetto. Invece di definire direttamente i loro tipi, puoi utilizzare il metodo convert dtypes, che tenta di dedurre il miglior tipo di dati:

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

Seleziona_dtipi

Dal nome, credo sia chiaro cosa fa la funzione. È possibile utilizzare le opzioni di inclusione ed esclusione per specificare colonne che includono o omettono tipi di dati specifici.

Scegli solo colonne numeriche con np.number, ad esempio:

# Scegli solo colonne numeriche diamonds.select_dtypes(include=np.number).head()
selezionare dtypes
Immagine dell'autore

 

Maschera

Questa funzione consente di sostituire i valori in cui la condizione personalizzata non è soddisfatta.

# Crea dati di esempio età = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("età") età
maschera | dati
Immagine dell'autore

Dopo aver eseguito l'operazione di cui sopra.

mascheramento eseguito
Immagine dell'autore

Min e Max

Sebbene min e max siano ben noti, ha alcune proprietà migliori per alcuni casi limite.

index = ["Diamonds", "Titanic", "Iris", "Heart Disease", "Loan Default"] librerie = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) per lib nelle librerie}, index=index ) >>> df
minimo e massimo
Immagine dell'autore 

Il DataFrame fittizio sopra mostra i risultati di quattro diverse librerie di potenziamento del gradiente su cinque set di dati. Stiamo cercando il pacchetto che ha funzionato meglio su ogni set di dati. Ecco come realizzarlo con max in modo elegante:

>>> df.max(axis=1) Diamanti 99.52684 Titanic 99.63650 Iris 99.10989 Heart Disease 99.31627 Loan Default 97.96728 dtype: float64

Npiù grande e Npiù piccolo

I valori nlargest e nsmallest sono utili per visualizzare i primi N o ~(top N) valori di una variabile.

diamanti.nlargest(5, "prezzo")
più grande e più piccolo
Immagine dell'autore
diamanti.nsmallest(5, "prezzo")
npiccolo
Immagine dell'autore

 

Idxmax e Idxmin

I panda restituiscono il numero più grande/più piccolo quando chiami max o min su una colonna. Tuttavia, ci sono situazioni in cui è necessaria la posizione del min/max, che queste funzioni non forniscono.

Invece, puoi usare idxmax/idxmin:

>>> diamanti.prezzo.idxmax() 27749 >>> diamanti.carati.idxmin() 14

Valore_Conteggi

Un modo comune per trovare la percentuale dei valori mancanti è combinare isnull e sum e dividere per la dimensione dell'array.

Ma value_counts con argomenti pertinenti fa la stessa cosa:

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 Po 0.01370 Nome: FireplaceQu, dtype: galleggiante64

Applica la clip

La funzione clip aiuta a trovare i valori anomali al di fuori di un intervallo e a sostituirli con limiti rigidi.

>>> età.clip(50, 60)
dati per la clip
Immagine dell'autore

 

At_time e Betweeen_time

Queste funzioni sono utili quando si lavora con serie temporali di elevata granularità.

at_time aiuta a ottenere valori in una data o ora specifica.

index = pd.date_range("2021-08-01", period=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > df.head()
at_time esempio | funzioni panda
Immagine dell'autore

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

.at_time | funzioni panda
Immagine dell'autore

between_time utilizzato per recuperare le righe all'interno di un intervallo personalizzato.

from datetime import datetime >>> df.between_time("09:45", "12:00")
tra_tempo
Immagine dell'autore

 

Bintervallo_date

Questa funzione aiuta a creare indici di serie temporali con frequenza giornaliera. Il mondo finanziario ha questo tipo di frequenza. Quindi, questa funzione potrebbe essere utile al momento della reindicizzazione delle serie temporali con la funzione reindicizza.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Un periodo di un mese >>> len(series) 21

At e Iat

Queste due funzioni di accesso sono sostanzialmente più veloci di loc e iloc. Tuttavia, hanno uno svantaggio. Consentono solo di scegliere o sostituire un valore alla volta:

# [indice, etichetta] >>> diamanti.at[234, "taglio"] 'Ideale' # [indice, indice] >>> diamanti.iat[1564, 4] 61.2 # Sostituisci la 16541a riga della colonna del prezzo >> > diamanti.a[16541, "prezzo"] = 10000

Argosort

Questa funzione aiuta a estrarre gli indici che ordinano un array delle caratteristiche.

tips.reset_index(inplace=True, drop=True) sort_idx = tips["total_bill"].argsort(kind="mergesort") # Ora, ordina `tips` in base a total_bill tips.iloc[sort_idx].head()
arg_sort
Immagine dell'autore

 

Accessorio per gatti

I panda consentono funzioni integrate di Python su date e stringhe utilizzando accessori come str o dt.

>>> diamanti.dtypes carat float64 cut categoria colore categoria chiarezza categoria profondità float64 tabella float64 prezzo int64 x float64 y float64 z float64 cut_enc int64 dtype: oggetto

È possibile utilizzare molte funzioni speciali utilizzando cat accessor su colonne categoriche. Ha funzioni come categorie per trovare univoco, rename_categories per rinominare le caratteristiche.

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

Dai un'occhiata a questo per un altro elenco di funzioni sotto accessorio per gatti.

Spremere

Squeeze è una funzione utilizzata in circostanze marginali rare ma aggravanti.

Quando viene restituito un singolo valore da una condizione utilizzata per creare un sottoinsieme di un DataFrame, questo è uno di questi casi. Considera il seguente scenario:

sottoinsieme = diamanti.loc[diamanti.indice >> sottoinsieme
prezzo

Anche se è presente una sola cella, restituire il DataFrame. È scomodo poiché ora devi utilizzare.loc sia con il nome della colonna che con l'indice per ottenere il prezzo.

Non devi se sai come spremere. Un asse può essere rimosso da un DataFrame o una serie a cella singola utilizzando questa funzione. Considera il seguente scenario:

>>> subset.squeeze() 326

E' possibile specificare l'asse da rimuovere. Adesso era tornato solo scalare.

>>> subset.squeeze("colonne") # o "righe" 0 326 Nome: prezzo, dtype: int64

Nota che questa funzione funziona solo per Series o DataFrame con valori singoli.

Excel_writer

È una classe generica per la creazione di file excel e la scrittura di DataFrame al suo interno. Considera, abbiamo questi due set di dati.

# Carica due dataset diamonds = sns.load_dataset("diamonds") tips = sns.load_dataset("tips") # Scrivi nello stesso file excel con pd.ExcelWriter("data/data.xlsx") come writer: diamonds.to_excel (writer, sheet_name="diamonds") tips.to_excel(writer, sheet_name="tips")

Ha proprietà per specificare il formato DateTime da utilizzare, se è necessario un nuovo file o modificarne uno esistente, cosa succede se esiste un foglio. Verificare questo documentazione per ulteriori dettagli.

Conclusione

Non è una panoramica esaustiva dei panda, e il documentazione contiene ulteriori informazioni sul codice e sulle funzionalità. Ti consiglio di sperimentare diverse varianti dei frammenti di codice forniti qui, oltre a vari parametri. In questo modo si può comprendere appieno il potere dei panda.

Librerie come Dask e datatable stanno gradualmente sostituendo Pandas con le loro nuove appariscenti funzionalità per la gestione di grandi set di dati, Pandas rimane lo strumento di manipolazione dei dati più ampiamente utilizzato nella comunità di data science di Python. A causa di quanto bene si adatta all'attuale stack SciPy, la libreria funge da paradigma per altri pacchetti da seguire e costruire.

Spero che tu abbia trovato questo post perspicace e grazie per aver letto.

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e vengono utilizzati a discrezione dell'autore.

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

Timestamp:

Di più da Analisi Vidhya