Limitazioni di Panda e sue alternative in Python


11

L'ho letto da qualche parte Pandas è stato inizialmente sviluppato per il mondo finanziario, almeno non specialmente per le scienze naturali (fisica, biologia e così via), quindi esiste un pacchetto Python di analisi dei dati simile più "orientato alle scienze naturali"?

Ho appena iniziato a usare Pandas e ho già riscontrato due problemi che non avrei potuto risolvere senza usare altri pacchetti o soluzioni casalinghe:

  • Come gestire le incertezze?
  • Come definire facilmente le unità dei miei dati?

Forse ci sono altri problemi, ma mi manca l'esperienza per essere più precisi. Per il momento, penso alle incertezze pacchetto di per risolvere il primo punto, ma non sono sicuro che funzionerà bene con Panda e non ridurrà la velocità di calcolo. In realtà, non sto cercando un modo per calcolare le incertezze, ma solo un modo semplice per archiviare le incertezze insieme ai miei dati importati. Per il secondo punto, non ho trovato una soluzione migliore della creazione di un dizionario a parte il mio DataFrame per gestire le unità associate a ciascun dato.

Se hai mai riscontrato gli stessi problemi, come l'hai risolto o quali altri pacchetti utilizzi per la manipolazione / archiviazione / analisi dei dati in Python nelle scienze naturali?


2
Un'alternativa ai panda che sostengono unità e incertezze è la Tableclasse dell'astropia.
P3trus,

1
Sembra fantastico, non sapevo che l'astrropia avesse questo tipo di cose. Anche così, ho dato un'occhiata al documento, ma non sono riuscito a trovare esempi espliciti in cui impostare le incertezze Table(ma ho trovato la parte delle unità). NDDatasembra gestirlo, ma non sono sicuro delle differenze tra queste classi. Se non ti dispiace trasformare il tuo commento in una risposta con un esempio di 2 righe, lo accetterei volentieri!
Clark,

Risposte:


5

Concordo con Davidmh sul fatto che il calcolo delle incertezze non dovrebbe essere gestito da una biblioteca automatica. Ti imbatterai molto rapidamente in un caso in cui i sistemi automatici falliscono (prova ad esempio a fare una trasformazione di Fourier).

Dici comunque che vuoi solo mantenere le incertezze con i tuoi dati. Perché non aggiungerli come colonna aggiuntiva nel tuo frame di dati? Questo è il modo in cui gestisco in genere le incertezze con i panda.

Pandas non supporta le unità, tuttavia qualsiasi cosa può andare in un frame di dati in modo da poter utilizzare direttamente il pacchetto di quantità . Tuttavia, non tutte le funzionalità funzioneranno nei panda (anche se una quantità sorprendente lo sarà ancora) e ci sarà una penalità per le prestazioni.

Ci sono state alcune discussioni per consentire l'attaccamento dei metadati nei panda, ma finora non sembra esserci uscito nulla.

Con la possibile eccezione di C ++ 11, non conosco alcun linguaggio o libreria che possa fornire un supporto di unità di prima classe davvero buono. C'è sempre una perdita di prestazioni e una mancanza di compatibilità

.


2

La gestione delle incertezze è in realtà un problema statistico piuttosto delicato. L'espressione nota per la propagazione dell'errore usando derivate parziali quadrate è buona quando gli errori sono normalmente distribuiti, indipendenti e piccoli. Questo di solito è il caso; e in effetti, anche se la normalità o l'indipendenza non sono pienamente soddisfatte, nella maggior parte dei casi pratici il risultato potrebbe essere ragionevolmente vicino a quello reale, a condizione che tu sia interessato solo a una stima ragionevole dell'intervallo.

peccato(2±0.1)=peccato(2)peccato(1.9)peccato(2.1)

Per i casi in cui è necessaria una maggiore precisione, se si dispone di un modello analitico utile per le incertezze, esistono metodi, come la massima probabilità, che possono essere utilizzati per ricavare gli stimatori corretti.

Ma se vuoi un risultato corretto valido per qualsiasi possibile input (immagina di dover modellare analiticamente un rilevatore rumoroso in cui il rumore è dello stesso ordine della precisione), tenendo conto di tutte le correlazioni e di essere in grado di esplorare tutto lo spazio dei parametri rilevante , hai bisogno dei metodi Monte Carlo. Aggiungi rumore casuale a molti dei tuoi input ed esegui l'analisi completa. Naturalmente, ciò può significare che devi moltiplicare il tempo di calcolo per centinaia o migliaia, ma è sempre parallelizzabile.

Quindi, alla fine, tutto dipende da cosa vuoi fare, da quale grado di precisione e da quante risorse hai.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.