Limitaciones de Pandas y sus alternativas en Python

11

Leí en alguna parte que Pandas se desarrolló por primera vez para el mundo financiero, al menos no especialmente para las ciencias naturales (física, biología, etc.), entonces, ¿hay algún paquete similar de Python de análisis de datos más "orientado a las ciencias naturales"?

Acabo de comenzar a usar Pandas y ya he encontrado dos problemas que no pude resolver sin usar otros paquetes o soluciones caseras:

  • ¿Cómo gestionar las incertidumbres?
  • ¿Cómo definir fácilmente las unidades de mis datos?

Tal vez hay otros problemas, pero me falta experiencia para ser más precisos. Por el momento, pienso en el paquete de incertidumbres para resolver el primer punto, pero no estoy seguro de que funcionará bien con Pandas y no disminuirá la velocidad de cálculo. En realidad, no estoy buscando una forma de computar con incertidumbres, solo una forma simple de almacenar incertidumbres junto con mis datos importados. Para el segundo punto, no encontré una solución mejor que crear un diccionario aparte de mi DataFrame para administrar las unidades asociadas a cada dato.

Si alguna vez experimentó los mismos problemas, ¿cómo lo resolvió o qué otro (s) paquete (s) utiliza para la manipulación / almacenamiento / análisis de datos en Python en ciencias naturales?

Clark
fuente
2
Una alternativa a las pandas que soportan unidades e incertidumbres es la Tableclase de astropía.
P3trus
1
Parece genial, no sabía que la astropía tuviera este tipo de cosas. Aun así, eché un vistazo al documento, pero no pude encontrar ejemplos explícitos para establecer incertidumbres Table(pero encontré que las unidades son parte). NDDataparece lograrlo, pero no estoy seguro de las diferencias entre estas clases. Si no le importa convertir su comentario en una respuesta con un ejemplo de 2 líneas, ¡lo aceptaré de buen grado!
Clark

Respuestas:

5

Estoy de acuerdo con Davidmh en que las incertidumbres de cálculo no deben ser manejadas por una biblioteca automática. Muy pronto se encontrará con un caso en el que fallan las automáticas (intente hacer una transformación de Fourier, por ejemplo).

Sin embargo, usted dice que solo desea mantener las incertidumbres con sus datos. ¿Por qué no solo agregarlos como una columna adicional en su marco de datos? Así es como típicamente manejo las incertidumbres con los pandas.

Pandas no admite unidades, sin embargo, cualquier cosa puede entrar en un marco de datos para que pueda utilizar el paquete de cantidades directamente. Sin embargo, no toda la funcionalidad funcionará en los pandas (aunque todavía lo hará una cantidad sorprendente) y habrá una penalización de rendimiento.

Ha habido alguna discusión para permitir la fijación de metadatos en los pandas, pero hasta ahora nada parece haber surgido.

Con la posible excepción de C ++ 11, no conozco ningún lenguaje o biblioteca que le brinde un soporte de unidad de primera clase realmente bueno. Siempre hay una pérdida de rendimiento y una falta de compatibilidad.

.

LKlevin
fuente
2

Gestionar las incertidumbres es en realidad un problema estadístico bastante delicado. La expresión conocida para la propagación de errores usando derivadas parciales cuadradas es buena cuando los errores son normalmente distribuidos, independientes y pequeños. Este suele ser el caso; y, de hecho, incluso si la normalidad o la independencia no se satisfacen completamente, en la mayoría de los casos prácticos el resultado podría ser razonablemente cercano al real, siempre que solo le interese una estimación razonable del intervalo.

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

Para los casos en que se necesita más precisión, si tiene un buen modelo analítico para sus incertidumbres, existen métodos, como la máxima probabilidad, que pueden usarse para obtener los estimadores correctos.

Pero si desea un resultado correcto válido para cualquier entrada posible (imagine tener que modelar analíticamente un detector ruidoso donde el ruido es del mismo orden que la precisión), teniendo en cuenta todas las correlaciones y poder explorar todo el espacio de parámetros relevante , necesitas los métodos de Monte Carlo. Agregue ruido aleatorio a varias de sus entradas y ejecute el análisis completo. Por supuesto, esto puede significar que debe multiplicar su tiempo de cálculo por cientos o miles, pero siempre es paralelizable.

Entonces, al final, todo depende de lo que quieras hacer, con qué grado de precisión y cuántos recursos tienes.

Davidmh
fuente