Iniziare con la libreria di manipolazione dei dati di Polars

Iniziare con Polars, libreria di manipolazione dati

Introduzione

Come tutti sappiamo, Pandas è la libreria di manipolazione dei dati di Python. Tuttavia, ha alcune limitazioni. In questo articolo, parleremo di un’altra potente libreria di manipolazione dei dati di Python scritta nel linguaggio di programmazione Rust. Nonostante sia scritta in Rust, ci fornisce un pacchetto aggiuntivo per i programmatori Python. È il modo più semplice per iniziare con Polars utilizzando Python, simile a Pandas.

Obiettivi di apprendimento

In questo tutorial, imparerai:

  • Introduzione alla libreria di manipolazione dei dati di Polars
  • Esplorazione dei dati utilizzando Polars
  • Confronto tra velocità di Pandas e Polars
  • Funzioni di manipolazione dei dati
  • Valutazione pigra utilizzando Polars

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

Caratteristiche di Polars

  • È più veloce della libreria di Panda.
  • Ha una potente sintassi di espressione.
  • Supporta la valutazione pigra.
  • È anche efficiente in termini di memoria.
  • Può gestire anche grandi set di dati più grandi della RAM disponibile.

Polars ha due diverse API, una API immediata e una API pigra. L’esecuzione immediata è simile a pandas, dove il codice viene eseguito non appena viene incontrato e i risultati vengono restituiti immediatamente. D’altra parte, l’esecuzione pigra non viene eseguita finché non ne hai bisogno. L’esecuzione pigra può essere più efficiente perché evita di eseguire codice non necessario, il che può portare a una migliore performance.

Applicazioni/Casi d’uso

Diamo un’occhiata a qualche applicazione di questa libreria come segue:

  • Visualizzazioni dei dati: Questa libreria è integrata con le librerie di visualizzazione Rust, come Plotters, ecc., che possono essere utilizzate per creare dashboard interattive e bellissime visualizzazioni per comunicare le informazioni dai dati.
  • Elaborazione dei dati: Grazie al supporto per l’elaborazione parallela e la valutazione pigra, Polars può gestire grandi set di dati in modo efficace. È inoltre possibile eseguire varie operazioni di pre-elaborazione dei dati, come pulizia, trasformazione e manipolazione dei dati.
  • Analisi dei dati: Con Polars, è possibile analizzare facilmente grandi set di dati per ottenere informazioni significative e consegnarle. Ci fornisce varie funzioni per calcoli e calcoli statistici. È possibile eseguire anche l’analisi delle serie temporali utilizzando Polars.

Oltre a queste, ci sono molte altre applicazioni come unione e fusione dei dati, filtraggio e interrogazione dei dati utilizzando la sua potente sintassi di espressione, analisi delle statistiche e riassunto, ecc. Grazie alle sue potenti applicazioni, può essere utilizzato in vari settori come il business, il commercio elettronico, la finanza, la sanità, l’istruzione, i settori governativi, ecc. Un esempio potrebbe essere raccogliere dati in tempo reale da un ospedale, analizzare le condizioni di salute dei pazienti e generare visualizzazioni come la percentuale di pazienti affetti da una particolare malattia, ecc.

Installazione

Prima di utilizzare qualsiasi libreria, è necessario installarla. La libreria Polars può essere installata utilizzando il comando pip come segue:

pip install polars

Per verificare se è installata, eseguire i comandi seguenti:

import polars as pl
print(pl.__version__)

0.17.3

Creazione di un nuovo Data frame

Prima di utilizzare la libreria Polars, è necessario importarla. Questo è simile alla creazione di un dataframe in pandas.

import polars as pl

#Creazione di un nuovo dataframe

df = pl.DataFrame(
     {
    'name': ['Alice', 'Bob', 'Charlie','John','Tim'],
    'age': [25, 30, 35,27,39],
    'city': ['New York', 'London', 'Paris','UAE','India']
     }
)
df

Caricamento di un dataset

La libreria Polars fornisce vari metodi per caricare dati da diverse fonti. Diamo un’occhiata a un esempio di caricamento di un file CSV.

df=pl.read_csv('/content/sample_data/california_housing_test.csv')
df

Confronto tra tempi di lettura di Pandas e Polars

Confrontiamo il tempo di lettura di entrambe le librerie per capire quanto è veloce la libreria Polars. Per farlo, utilizziamo il modulo ‘time’ di Python. Ad esempio, leggiamo il file csv sopra caricato con pandas e Polars.

import time
import pandas as pd
import polars as pl

# Misura il tempo di lettura con pandas
start_time = time.time()
pandas_df = pd.read_csv('/content/sample_data/california_housing_test.csv')
pandas_read_time = time.time() - start_time

# Misura il tempo di lettura con Polars
start_time = time.time()
polars_df = pl.read_csv('/content/sample_data/california_housing_test.csv')
polars_read_time = time.time() - start_time

print("Tempo di lettura di Pandas:", pandas_read_time)
print("Tempo di lettura di Polars:", polars_read_time)

Tempo di lettura di Pandas: 0.014296293258666992

Tempo di lettura di Polars: 0.002387523651123047

Come puoi osservare dall’output sopra, è evidente che il tempo di lettura della libreria Polars è inferiore rispetto a quella della libreria Panda. Come puoi vedere nel codice, otteniamo il tempo di lettura calcolando la differenza tra l’ora di inizio e l’ora dopo l’operazione di lettura.

Diamo uno sguardo a un altro esempio di una semplice operazione di filtraggio sui medesimi dati utilizzando sia le librerie pandas che Polars.

start_time = time.time()
res1=pandas_df[pandas_df['total_rooms']<20]['population'].mean()
pandas_exec_time = time.time() - start_time

# Misura il tempo di esecuzione con Polars
start_time = time.time()
res2=polars_df.filter(pl.col('total_rooms')<20).select(pl.col('population').mean())
polars_exec_time = time.time() - start_time

print("Tempo di esecuzione di Pandas:", pandas_exec_time)
print("Tempo di esecuzione di Polars:", polars_exec_time)

Output:

Tempo di esecuzione di Pandas: 0.0010499954223632812
Tempo di esecuzione di Polars: 0.0007154941558837891

Esplorazione dei dati

Puoi stampare le statistiche di riepilogo dei dati, come conteggio, media, minimo, massimo, ecc., utilizzando il metodo “describe” come segue.

df.describe()

Il metodo shape restituisce la forma del data frame, ovvero il numero totale di righe e il numero totale di colonne.

print(df.shape)

(3000, 9)

La funzione head() restituisce per default le prime cinque righe del dataset come segue:

df.head()

La funzione sample() ci dà un’idea dei dati. Puoi ottenere un numero n di righe campione dal dataset. Qui, otteniamo 3 righe casuali dal dataset come mostrato di seguito:

df.sample(3)

Allo stesso modo, le righe e le colonne restituiscono i dettagli delle righe e delle colonne corrispondentemente.

df.rows

df.columns

Selezione e filtraggio dei dati

La funzione select applica l’espressione di selezione sulle colonne.

Esempi:

df.select('latitude')

selezionare più colonne

df.select('longitude','latitude')

df.select(pl.sum('median_house_value'),
          pl.col("latitude").sort(),
    )

In modo simile, la funzione di filtro ti permette di filtrare le righe in base a una certa condizione.

Esempi:

df.filter(pl.col("total_bedrooms")==200)

df.filter(pl.col("total_bedrooms").is_between(200,500))

Groupby /Aggregazione

Puoi raggruppare i dati in base a colonne specifiche utilizzando la funzione “groupby”.

Esempio:

df.groupby(by='housing_median_age').
agg(pl.col('median_house_value').mean().
alias('avg_house_value'))

In questo caso stiamo raggruppando i dati sulla colonna ‘housing_median_age’ e calcolando la media del “median_house_value” per ogni gruppo e creando una colonna con il nome “avg_house_value”.

Combina o unisci due Data Frame

Puoi unire o concatenare due Data Frame utilizzando diverse funzioni fornite da Polars.

Unisci: Vediamo un esempio di un join interno su due Data Frame. Nel join interno, i Data Frame risultanti consistono solo delle righe in cui esiste la chiave di join.

Esempio 1:

import polars as pl


# Crea il primo DataFrame
df1 = pl.DataFrame({
    'id': [1, 2, 3, 4],
    'nome_impiegato': ['John', 'Bob', 'Khan', 'Mary']
})


# Crea il secondo DataFrame
df2 = pl.DataFrame({
    'id': [2, 4, 5,7],
    'eta_impiegato': [35, 20, 25,32]
})

df3=df1.join(df2, on="id")
df3

Nell’esempio precedente, eseguiamo l’operazione di join su due diversi Data Frame e specifica la chiave di join come una colonna “id”. Gli altri tipi di operazioni di join sono join sinistro, join esterno, join incrociato, ecc.

Concatena: 

Per eseguire la concatenazione di due Data Frame, utilizziamo la funzione concat() in Polars come segue:

import polars as pl


# Crea il primo DataFrame
df1 = pl.DataFrame({
    'id': [1, 2, 3, 4],
    'nome': ['John', 'Bob', 'Khan', 'Mary']
})


# Crea il secondo DataFrame
df2 = pl.DataFrame({
    'id': [2, 4, 5,7],
    'nome': ['Anny', 'Lily', 'Sana','Jim']
})

df3=pl.concat([df2,df1] )
df3

La funzione ‘concat()’ unisce i Data Frame verticalmente, uno sotto l’altro. Il Data Frame risultante è composto dalle righe di ‘df2’ seguite dalle righe di ‘df1’, poiché abbiamo dato il primo Data Frame come ‘df2’. Tuttavia, i nomi delle colonne e i tipi di dati devono corrispondere durante l’esecuzione delle operazioni di concatenazione su due Data Frame.

Lazy Evaluation

Il principale vantaggio nell’utilizzare la libreria Polars è il supporto all’esecuzione lazy. Ciò ci consente di posticipare il calcolo fino a quando non è necessario. Questo è particolarmente vantaggioso per grandi set di dati, in cui possiamo evitare di eseguire operazioni non necessarie e eseguire solo quelle richieste. Vediamo un esempio:

lazy_plan = df.lazy().
filter(pl.col('housing_median_age') > 2).
select(pl.col('median_house_value') * 2)
result = lazy_plan.collect()

print(result)

Nell’esempio precedente, utilizziamo il metodo lazy() per definire un piano di calcolo lazy. Questo piano di calcolo filtra la colonna ‘housing_median_age’ se è maggiore di 2 e quindi seleziona la colonna ‘median_house_value’ moltiplicata per 2. Inoltre, per eseguire questo piano, utilizziamo il metodo ‘collect’ e lo memorizziamo nella variabile result.

Conclusioni

In conclusione, la libreria di manipolazione dei dati Polars di Python è il toolkit più efficiente e potente per grandi set di dati. La libreria Polars utilizza completamente Python come linguaggio di programmazione e funziona in modo efficiente con altre librerie diffuse come NumPy, Pandas e Matplotlib. Questa interoperabilità fornisce una combinazione e un’esaminazione dati semplicistica tra diversi campi, creando una risorsa adattabile per molteplici utilizzi. Le capacità principali della libreria, tra cui il filtraggio dei dati, l’aggregazione, il raggruppamento e la fusione, dotano gli utenti della capacità di elaborare dati su larga scala e generare informazioni preziose.

Punti Chiave

  • La libreria di manipolazione dei dati Polars è una soluzione affidabile e versatile per la gestione dei dati.
  • Installala utilizzando il comando pip come pip install polars.
  • Come creare un frame di dati.
  • Abbiamo utilizzato la funzione “select” per eseguire operazioni di selezione e la funzione “filter” per filtrare i dati in base a condizioni specifiche.
  • Abbiamo anche imparato a unire due frame di dati utilizzando “join” e “concat”.
  • Abbiamo anche compreso come eseguire un piano lazy utilizzando la funzione “lazy”.

Domande Frequenti

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