Limitations de Pandas et ses alternatives en Python

11

J'ai lu quelque part que Pandas a été développé pour la première fois pour le monde financier, du moins pas spécialement pour les sciences naturelles (physique, biologie, etc.).

Je viens de commencer à utiliser Pandas et j'ai déjà rencontré deux problèmes que je ne pouvais pas résoudre sans utiliser d'autres packages ou une solution maison:

  • Comment gérer les incertitudes?
  • Comment définir facilement les unités de mes données?

Il y a peut-être d'autres problèmes mais je manque d'expérience pour être plus précis. Pour le moment, je pense au paquet d' incertitudes pour résoudre le premier point mais je ne suis pas sûr qu'il fonctionnera bien avec Pandas et ne diminuera pas la vitesse de calcul. En fait, je ne cherche pas un moyen de calculer avec des incertitudes, juste un moyen simple de stocker des incertitudes avec mes données importées. Pour le deuxième point, je n'ai pas trouvé de meilleure solution que de créer un dictionnaire en dehors de mon DataFrame pour gérer les unités associées à chaque donnée.

Si vous avez déjà rencontré les mêmes problèmes, comment l'avez-vous résolu ou quel (s) autre (s) package (s) utilisez-vous pour la manipulation / stockage / analyse de données en Python en sciences naturelles?

Clark
la source
2
Une alternative aux pandas supportant les unités et les incertitudes est la Tableclasse en astropie.
P3trus
1
Cela semble génial, je ne savais pas que l'astropie avait ce genre de choses. Malgré cela, j'ai jeté un coup d'œil au document mais je n'ai pas pu trouver d'exemples explicites pour définir les incertitudes Table(mais j'ai trouvé la partie unités). NDDatasemble gérer cela, mais je ne suis pas sûr des différences entre ces classes. Si cela ne vous dérange pas de transformer votre commentaire en une réponse avec un exemple de 2 lignes, je l'accepterais volontiers!
Clark

Réponses:

5

Je suis d'accord avec Davidmh que le calcul des incertitudes ne devrait pas être géré par une bibliothèque automatique. Vous rencontrerez très rapidement un cas où les automatismes échouent (essayez de faire une transformée de Fourier par exemple).

Vous dites cependant que vous voulez simplement garder les incertitudes avec vos données. Pourquoi ne pas simplement les ajouter en tant que colonne supplémentaire dans votre trame de données? C'est ainsi que je gère généralement les incertitudes avec les pandas.

Pandas ne prend pas en charge les unités, mais tout peut entrer dans une trame de données afin que vous puissiez utiliser directement le paquet de quantités . Cependant, toutes les fonctionnalités ne fonctionneront pas dans les pandas (bien qu'une quantité surprenante le sera toujours) et il y aura une pénalité de performance.

Il y a eu des discussions pour permettre la fixation de métadonnées dans les pandas, mais jusqu'à présent, rien ne semble en être sorti.

À l'exception possible de C ++ 11, je ne connais aucun langage ou bibliothèque qui vous fournirait un très bon support d'unité de première classe. Il y a toujours une perte de performances et un manque de compatibilité

.

LKlevin
la source
2

La gestion des incertitudes est en fait un problème statistique assez délicat. L'expression connue pour la propagation d'erreurs à l'aide de dérivées partielles carrées est bonne lorsque les erreurs sont normalement distribuées, indépendantes et petites. C'est généralement le cas; et en fait, même si la normalité ou l'indépendance ne sont pas pleinement satisfaites, pour la plupart des cas pratiques, le résultat pourrait être raisonnablement proche du réel, à condition que vous ne soyez intéressé que par une estimation raisonnable de l'intervalle.

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

Pour les cas où une plus grande précision est nécessaire, si vous avez un bon modèle analytique pour vos incertitudes, il existe des méthodes, comme le maximum de vraisemblance, qui peuvent être utilisées pour dériver les estimateurs corrects.

Mais si vous voulez un résultat correct valable pour toute entrée possible (imaginez devoir modéliser analytiquement un détecteur bruyant où le bruit est du même ordre que la précision), en tenant compte de toutes les corrélations, et en pouvant explorer tout l'espace des paramètres pertinents , vous avez besoin des méthodes Monte Carlo. Ajoutez du bruit aléatoire à plusieurs instances de vos entrées et exécutez l'analyse complète. Bien sûr, cela peut signifier que vous devez multiplier votre temps de calcul par des centaines ou des milliers, mais il est toujours parallélisable.

Donc, en fin de compte, tout dépend de ce que vous voulez faire, du degré de précision et du nombre de ressources dont vous disposez.

Davidmh
la source