Limitações do Pandas e suas alternativas em Python

11

Eu li em algum lugar que o Pandas foi desenvolvido pela primeira vez para o mundo financeiro, pelo menos não especialmente para as ciências naturais (física, biologia e assim por diante), então existe algum pacote Python de análise de dados semelhante mais "orientado para as ciências naturais"?

Comecei a usar o Pandas e já encontrei dois problemas que não consegui resolver sem usar outros pacotes ou soluções caseiras:

  • Como gerenciar incertezas?
  • Como definir facilmente as unidades dos meus dados?

Talvez haja outras questões, mas me falta experiência para ser mais preciso. No momento, penso no pacote de incertezas para resolver o primeiro ponto, mas não tenho certeza de que funcione bem com o Pandas e não diminua a velocidade da computação. Na verdade, não estou procurando uma maneira de computar com incertezas, apenas uma maneira simples de armazenar incertezas junto com meus dados importados. Para o segundo ponto, não encontrei uma solução melhor do que criar um dicionário separado do meu DataFrame para gerenciar as unidades associadas a cada dado.

Se você já teve os mesmos problemas, como o resolveu ou quais outros pacotes você usa para manipulação / armazenamento / análise de dados no Python em ciências naturais?

Clark
fonte
2
Uma alternativa aos pandas que apóiam unidades e incertezas é a Tableaula de astropia.
P3trus 17/05
11
Parece ótimo, eu não sabia que a astropia tinha esse tipo de coisa. Mesmo assim, dei uma olhada no documento, mas não consegui encontrar exemplos explícitos para definir incertezas Table(mas achei as unidades como parte). NDDataparece gerenciar isso, mas não tenho certeza sobre as diferenças entre essas classes. Se você não se importa de transformar seu comentário em uma resposta com um exemplo de duas linhas, eu aceitaria de bom grado!
Clark

Respostas:

5

Concordo com Davidmh que o cálculo das incertezas não deve ser tratado por uma biblioteca automática. Você encontrará rapidamente um caso em que a automação falha (tente fazer uma transformação de Fourier, por exemplo).

Você diz, no entanto, que deseja apenas manter as incertezas com seus dados. Por que não adicioná-los como uma coluna extra no seu quadro de dados? É assim que eu normalmente gerencio incertezas com pandas.

O Pandas não suporta unidades, no entanto, qualquer coisa pode entrar em um quadro de dados para que você possa usar o pacote de quantidades diretamente. No entanto, nem todas as funcionalidades funcionam em pandas (embora uma quantidade surpreendente ainda funcione) e haverá uma penalidade de desempenho.

Houve alguma discussão para permitir a anexação de metadados em pandas, mas até agora nada parece ter resultado disso.

Com a possível exceção do C ++ 11, não conheço nenhuma linguagem ou biblioteca que daria a você um suporte de unidade de primeira classe realmente bom. Sempre há perda de desempenho e falta de compatibilidade

.

LKlevin
fonte
2

Gerenciar incertezas é na verdade um problema estatístico bastante delicado. A expressão conhecida para propagação de erro usando derivadas parciais ao quadrado é boa quando os erros são normalmente distribuídos, independentes e pequenos. Este é geralmente o caso; e, de fato, mesmo que a normalidade ou independência não sejam totalmente satisfeitas, na maioria dos casos práticos o resultado pode ser razoavelmente próximo do real, desde que você esteja interessado apenas em uma estimativa razoável do intervalo.

pecado(2±0,1)=pecado(2)pecado(1.9)pecado(2.1)

Nos casos em que é necessária mais precisão, se você tiver um bom modelo analítico para suas incertezas, existem métodos, como probabilidade máxima, que podem ser usados ​​para derivar os estimadores corretos.

Mas se você deseja um resultado correto válido para qualquer entrada possível (imagine modelar analiticamente um detector de ruídos, onde o ruído é da mesma ordem que a precisão), levando em consideração todas as correlações e explorando todo o espaço de parâmetros relevante , você precisa dos métodos de Monte Carlo. Adicione ruído aleatório a várias instâncias de suas entradas e execute a análise completa. Obviamente, isso pode significar que você deve multiplicar seu tempo computacional por centenas ou milhares, mas é sempre paralelizável.

Portanto, no final, tudo depende do que você deseja fazer, com que grau de precisão e quantos recursos você possui.

Davidmh
fonte