Python calcular exponencial mover média
Eu tenho um intervalo de datas e uma medição em cada uma dessas datas. Eu gostaria de calcular uma média móvel exponencial para cada uma das datas. Alguém sabe como fazer isso Im novo para python. Não parece que as médias são construídas na biblioteca padrão do python, o que me parece um pouco estranho. Talvez eu não esteja procurando no lugar certo. Então, dado o seguinte código, como eu poderia calcular a média móvel ponderada dos pontos de QI para datas de calendário (provavelmente há uma maneira melhor de estruturar os dados, qualquer conselho seria apreciado) perguntou 28 de janeiro às 18:01 Meu python é um Um pouco enferrujado (qualquer um pode se sentir livre para editar este código para fazer correções, se eu magoado a sintaxe de alguma forma), mas aqui vai. Esta função move-se para trás, do fim da lista para o início, calculando a média móvel exponencial para cada valor trabalhando para trás até que o coeficiente de peso para um elemento seja menor do que a dada epsilon. No final da função, inverte os valores antes de retornar a lista (para que eles estão na ordem correta para o chamador). (NOTA LATERAL: se eu estivesse usando uma linguagem diferente de python, eu criaria uma matriz vazia de tamanho completo primeiro e, em seguida, preenchê-la para trás-ordem, de modo que eu não teria que inverter no final. Mas eu não acho que você pode declarar Uma grande matriz vazia em python. E em listas de python, acrescentando é muito menos caro do que prepending, é por isso que eu construí a lista na ordem inversa. Por favor, corrija-me se estou errado.) O argumento alfa é o fator de decaimento em cada iteração. Por exemplo, se você usou um alfa de 0,5, então o valor da média móvel de hoje seria composto dos seguintes valores ponderados: Claro, se você tem uma grande variedade de valores, os valores de dez ou quinze dias não vão contribuir muito para Média ponderada de hoje. O argumento epsilon permite definir um ponto de corte, abaixo do qual você deixará de se preocupar com valores antigos (já que sua contribuição para o valor de hoje será insignificante). Youd invocar a função algo como isto: Eu não sei Python, mas para a parte de média, você quer dizer um filtro de passagem decrescente decrescente exponencialmente da forma onde alfa dttau, dt o timestep do filtro , Tau a constante de tempo do filtro (a variável-timestep forma deste é o seguinte, basta clipe dttau para não ser mais do que 1,0) Se você quiser filtrar algo como uma data, certifique-se de converter em uma quantidade de ponto flutuante Como de segundos desde 01 de janeiro de 1970. Respondeu Jan 28 09 at 18:10 Eu encontrei o trecho de código acima pelo earino muito útil - mas eu precisava de algo que poderia continuamente suave um fluxo de valores - então eu refatorado-lo para isso: e eu uso Ele gosta disto: (onde pin. read () produz o próximo valor Id como consumir). Respondeu Feb 12 14 at 20:35 Im sempre calculando EMAs com Pandas: Aqui está um exemplo de como fazê-lo: Mais informações sobre Pandas EWMA: respondido Oct 4 15 at 12:42 Don39t versões mais recentes de Pandas têm novas e melhores funções. Ndash Cristian Ciupitu May 11 16 at 14:10 Note que ao contrário em sua planilha, eu não calcular o SMA, e eu não espero para gerar o EMA após 10 amostras. Isso significa que meus valores diferem ligeiramente, mas se você o traçar, ele segue exatamente após 10 amostras. Durante as primeiras 10 amostras, o EMA que eu calculo é adequadamente suavizado. Hmmm, parece que este citar para implementar a função é realmente muito fácil de errar e tem promovido uma boa discussão sobre a eficiência da memória. I39m feliz por ter bloat se isso significa saber que something39s sido feito direito. Ndash Richard Sep 20 14 at 19:23 NumPys falta de uma determinada função específica do domínio é talvez devido à disciplina de Equipes Core e fidelidade à diretiva Prime NumPys: fornecer um tipo de matriz N-dimensional. Bem como funções para criar e indexar essas matrizes. Como muitos objetivos fundacionais, este não é pequeno, e NumPy faz isso brilhantemente. O SciPy (muito maior) contém uma coleção muito maior de bibliotecas específicas de domínio (chamadas subpacotes por SciPy devs) - por exemplo, otimização numérica, processamento de sinal (sinal) e cálculo integral (integrar). Minha suposição é que a função que você está depois está em pelo menos um dos subpáginas SciPy (scipy. signal talvez) no entanto, eu iria olhar primeiro na coleção de scikits SciPy. Identificar o (s) scikit (s) relevante (s) e procurar a função de interesse lá. Scikits são desenvolvidos independentemente pacotes baseados em NumPySciPy e dirigidos a uma determinada disciplina técnica (por exemplo, scikits-image. Scikits-learn, etc.) Vários destes foram (em particular, o incrível OpenOpt para otimização numérica) foram altamente considerados, projetos maduros longo Antes de escolher para residir sob a rubrica relativamente nova scikits. A página inicial do Scikits gostava de listar cerca de 30 scikits como esse. Embora pelo menos alguns deles não estejam mais em desenvolvimento ativo. Seguindo este conselho levaria você a scikits-timeseries no entanto, que o pacote não está mais em desenvolvimento ativo Em efeito, Pandas tornou-se, AFAIK, a biblioteca de série de facto NumPy-baseado. Pandas tem várias funções que podem ser usadas para calcular uma média móvel, o mais simples destes é provavelmente rollingmean. Que você usa assim: Agora, basta chamar a função rollingmean passando no objeto Series e um tamanho de janela. Que no meu exemplo abaixo é de 10 dias. Verificar que funcionou - por exemplo. Os valores comparados 10 - 15 na série original versus a nova série alisada com média de rolamento A função rollingmean, juntamente com cerca de uma dúzia de outras funções são agrupadas informalmente na documentação Pandas sob a rubrica move janela funciona um segundo grupo relacionado de funções Em Pandas é referido como funções exponencialmente ponderadas (eg ewma., Que calcula a média ponderada exponencialmente em movimento). O fato de que este segundo grupo não está incluído no primeiro (movendo funções de janela) é talvez porque as transformações ponderadas exponencialmente não confiar em um fixed-length windowIm no processo de criação de um algoritmo de negociação forex e queria tentar o meu tiro no cálculo EMA (médias móveis exponenciais). Meus resultados parecem estar corretos (em comparação com os cálculos que fiz à mão), então eu acredito que o método a seguir funciona, mas só queria ter um conjunto extra de olhos para se certificar de que eu não estou perdendo nada. Note que isso apenas retorna o EMA para o preço mais recente, ele não retorna uma matriz de EMAs como que não é o que eu preciso para o meu aplicativo. Recursão é uma boa ferramenta para o trabalho certo, mas aqui ele é usado para realizar loop simples. Como tal o código. É mais difícil de ler e raciocinar. É mais lento porque grande parte do código em ema só precisa ser executado uma vez. Irá falhar com o valor suficientemente grande da janela devido à pilha de chamadas Pythons transbordando. Por favor, documente pelo menos os parâmetros de cada função, por exemplo. Essa janela é o comprimento da janela, e essa posição conta para trás a partir do final dos dados. (Na verdade, as coisas seriam mais claras se a posição fosse um índice normal de forward em dados) Aumentar uma exceção quando você encontrar um parâmetro tem um valor inválido. Retornando Nenhum, em vez disso, só causará uma exceção mais confusa mais tarde. Na verdade, se eu tentar Indicators (). Ema (closeprices, 600) Recebo recursão infinita porque sma retorna None. Que faz ema chamar sma repetidamente. O ponto anterior também revela que se len (dados) lt janela 2 não é a verificação de validade direita. O 1 em data-window2 1: - window 1 não parece correto para mim. Suponho que você deseja data-window2: - window A declaração return previousema está em um lugar estranho porque naquele momento você calculou uma nova currentema. Este é o caso base da recursão, e é costume tratar o caso de base primeiro. Revisão pouco profunda: Você não precisa escrever uma aula para o que você está fazendo (e eu sugiro que você dê uma olhada neste vídeo). Sua classe não encapsula quaisquer dados e você apenas usá-lo para ter suas funções em uma mesma entidade. Eu acho que as coisas mais fáceis de entender se você fosse definir classmethod para tornar óbvio que você não vai realmente confiar em qualquer instância qualquer. No entanto, uma opção ainda melhor seria apenas definir funções em um módulo indicador. Resposta Obrigado pelas sugestões que eu realmente tê-los como classmethods e debatido indo e voltando entre mesmo usando uma classe ou apenas definir funções em um módulo indicador (que eu vou fazer agora). Ndash ChrisC Nov 25 14 em 19:12 Apenas assisti o vídeo também, grande coisa. A média móvel toma uma série de tempo ruidosa e substitui cada valor com o valor médio de uma vizinhança sobre o valor fornecido. Esta vizinhança pode consistir em dados puramente históricos, ou pode ser centrada sobre o valor dado. Além disso, os valores na vizinhança podem ser ponderados usando diferentes conjuntos de pesos. Aqui está um exemplo de uma média móvel ponderada de três pontos, usando dados históricos, Aqui, representa o sinal suavizado e representa a série de tempo ruidosa. Em contraste com as médias móveis simples, uma média móvel exponencialmente ponderada (EWMA) ajusta um valor de acordo com uma soma exponencialmente ponderada de todos os valores anteriores. Esta é a idéia básica, Isso é bom porque você não precisa se preocupar com ter uma janela de três pontos, versus uma janela de cinco pontos, ou se preocupar com a adequação de seu esquema de ponderação. Com o EWMA, as perturbações anteriores 8220 lembradas, 8221 e 8220 são esquecidas, 8221 pelo termo na última equação, enquanto que com uma janela ou bairro com limites discretos, uma perturbação é esquecida assim que ela passa para fora da janela. Avaliando o EWMA para acomodar as tendências Depois de ler sobre EWMAs em um livro de análise de dados, eu tinha ido longitudinalmente feliz usando esta ferramenta em cada aplicação única suavização que me deparei. Não foi até mais tarde que eu aprendi que a função EWMA é realmente apenas adequado para dados estacionários, ou seja, dados sem tendências ou sazonalidade. Em particular, a função EWMA resiste tendências longe da média atual que 8282s já 8220seen8221. Assim, se você tem uma função de som ruidosa que vai de 0, para 1 e, em seguida, de volta para 0, então a função EWMA retornará valores baixos no lado de subida e altos valores no lado de down-hill. Uma maneira de contornar isso é suavizar o sinal em ambas as direções, marchar para frente e, em seguida marchar para trás, e, em seguida, média dos dois. Aqui, usaremos a função EWMA fornecida pelo módulo pandas. Holt-Winters Second Order EWMA E aqui está algum código Python implementando o método de segunda ordem Holt-Winters em outra função de som ruidoso, como antes. Post navigation Mensagens recentes
Comments
Post a Comment