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
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
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)
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)
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)
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()
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à
Dopo aver eseguito l'operazione di cui sopra.
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
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")
diamanti.nsmallest(5, "prezzo")
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)
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()
>>> df.at_time(“15:00”)
between_time utilizzato per recuperare le righe all'interno di un intervallo personalizzato.
from datetime import datetime >>> df.between_time("09:45", "12:00")
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()
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
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.
Leggi Anche
- "
- 100
- 7
- Tutti
- .
- analitica
- argomenti
- articolo
- MIGLIORE
- potenziamento
- Boston
- costruire
- chiamata
- casi
- il cambiamento
- Pulizia
- codice
- Colonna
- Uncommon
- comunità
- Calcolare
- Creazione
- dati
- analisi dei dati
- scienza dei dati
- scienziato di dati
- Date
- DID
- Malattia
- dollari
- bordo
- Excel
- esperimento
- fiera
- caratteristica
- Caratteristiche
- finanziario
- Nome
- seguire
- formato
- function
- globali
- buono
- Crescere
- Manovrabilità
- a portata di mano
- qui
- Alta
- Come
- Tutorial
- HTTPS
- Index
- informazioni
- IT
- Le
- Lingua
- grandi
- apprendimento
- Biblioteca
- Lista
- elenchi
- caricare
- prestito
- machine learning
- Manipolazione
- mask
- Media
- Nuove funzionalità
- numeri
- Opzioni
- Altro
- paradigma
- Persone
- tubo
- energia
- Precisione
- Premium
- presenti
- prezzo
- Programmazione
- Python
- RAM
- gamma
- Lettura
- Risultati
- Scienze
- scienziati
- Serie
- Un'espansione
- Taglia
- So
- RISOLVERE
- inizia a
- negozi
- tempo
- suggerimenti
- top
- unicode
- us
- APPREZZIAMO
- Visualizza
- OMS
- entro
- lavori
- mondo
- scrittore
- scrittura
- X