sábado, 7 de setembro de 2013

Projeto FinDt


Alterei o status de desenvolvimento do projeto FinDt de 2-PreAlpha para 3-Alpha diretamente no site do PyPi (fiz alteração manualmente). Decidi fazer a alteração pois acho que o módulo alcançou uma certa estabilidade e acho que não serão necessárias mais grandes alterações para as versões futuras.

Também contribuiu para que eu fizesse a alteração, o grande número de downloads do módulo: embora eu não tenha uma certeza exata do total de downloads, pois em Maio ou Junho o PyPi alterou o modelo do contador de downloads, pela última apuração feita pelo PyPi Ranking o FinDt já havia tido 1.808 downloads para as versões 1.0.0, 1.0.1 e 2.0.0 (apurada em 18/05/2013). Com a alteração, a contagem de downloads passou a ser pelos totais apurados no último dia, última semana e último mês, respectivamente. Na data desta postagem e nesta sequência, meu módulo apontava 28, 124 e 380 downloads.

Não dá para saber ainda se eles voltarão a publicar uma contagem geral de downloads dos módulos, mas eu acho que deveria existir uma, principalmente, porque é através desta contagem que conseguimos ter alguma ideia da receptividade dos mesmos e, portanto, interpretar se ele é ou não útil.

Também acho que PyPi Ranking deveria ser atualizado com maior frequência.



sábado, 25 de maio de 2013

Projeto FinDt


Hoje fiz upload na versão 2.0.2 do módulo FinDt, com a inclusão do método 'subperiodo' o qual permite a criação de uma lista que é um subconjunto de datas do período principal de uma instância da classe DatasFinanceiras.

Este novo método vem para facilitar algumas limitações que eu já estava percebendo quando, por algum motivo, eu precisava trabalhar com um ou vários sub-períodos dentro dos limites do período principal.

quarta-feira, 17 de abril de 2013

Projeto FinDt


Finalmente saiu FinDt 2.0: além do módulo ter se tornado uma classe a partir desta versão, coloquei pela primeira vez uma Documentação para o mesmo à disposição no PyPI (http://pythonhosted.org/FinDt).

O módulo em si não sofreu nenhuma grande alteração além desta transformação; todas suas funcionalidades anteriores foram mantidas. A única alteração digna de nota é a possibilidade de se usar datas com os mais diversos tipos de separador e não apenas a tradicional barra ( / ): assim, o dia "12/04/2013" pode ser representado como "12-04-2013", "12:04:2013" ou "12 04 2013" (isso mesmo, com espaço em branco) - congratulações às expressões regulares (módulo re) do Python.

A Documentação possui alguns exemplos básicos de como criar uma instância da classe DatasFinanceiras e de como usar seus principais métodos. 

Assim como pretendo continuar melhorando o módulo conforme vou ampliando meus conhecimentos em Python, também espero ir melhorando a documentação conforme aprendo como incrementá-la usando Sphinx.

terça-feira, 5 de março de 2013

Projeto FinDt


Hoje fui obrigado a remover e fazer novo upload do módulo FinDt 1.0.2 no PyPI:  eu não havia percebido no último sábado que, por algum erro meu, o pacote não havia sido carregado. Somente os detalhes do pacote constantes no arquivo de setup estavam aparecendo (!?). Em todo caso, preferi gerar novo pacote de distribuição e refazer o processo.

sábado, 2 de março de 2013

Projeto FinDt


Mais algumas alterações no módulo FinDt que resultaram em sua versão 1.0.2 (fiz upload no PyPI a pouco):

  • Melhorei o tratamento de erros para a função ListaFeriados (responsável por carregar o arquivo da Ambima, o qual, por sua vez, contém a relação completa de feriados entre os anos de 2.000 e -pasmem! - 2.078); além de tratar a possibilidade de um IOError (inexistência do arquivo, diretório não encontrado, etc.) inclui um tratamento para um KeyError que pode acontecer caso a chave do dicionário que irá conter os feriados não seja adequada. Também seria legal eu incluir um tratamento de erro que apontasse quando codificação do arquivo csv não é a esperada (UTF-8, que me parece não dar problemas, a invés de, por exemplo, ANSI, que gera problemas com a acentuação gráfica para o português).
  • Função Dias - esta nova função reúne as funcionalidades das funções  DateRange, ListaDiasUteis e ListaDiasCorridos; assim, com a utilização do argumento Opt, posso selecionar a opção mais apropriada:
    1. gera lista dias corridos
    2. gera lista de dias excluindo sábados e domingos
    3. gera lista de dias excluindo sábados e domingos e feriados
  • Mantive as três funções originais para compatibilidade, mas espero no futuro excluí-las do projeto, já que fica mais fácil com tudo reunido em uma só.
Embora tenha iniciado documentação com o Sphinx, ainda não consegui deixá-la suficientemente boa para colocá-la à disposição no PyPI.

sábado, 16 de fevereiro de 2013

Projeto FinDt


Durante esta semana, consegui fazer algumas alterações no módulo FinDt para Python, fazendo algumas correções para pequenos erros e problemas que detectei na versão 1.0.0:


  • 13.02.2013
    • Retirado comentários de funções do comentário do módulo, já que o help do módulo traz todos os comentários (de módulo e funções).
    • Corrigida a função “ListaDiasCorridos” que havia perdido parte de sua implementação e, portanto, não estava retornando o resultado esperado.
  • 14.02.2013
    • Alterado o nome da função Weekday para DiaSemana e correção dos comentários.
    • Em testes que eu havia feito em outra máquina, esta função estava trazendo o dia da semana em inglês (Sunday, Monday, etc.)- o problema foi corrigido com a inclusão de "import locale" e setando a região com "locale.setlocale(locale.LC_ALL, ' ')".
  • 16.02.2013
    • Promovi a otimização de algumas funções que estavam com redundância no código.
    • Na função DiasUteisPorMes implementei o uso da função OrderedDict do módulo collections, o que agora permite retornar um dicionário classificado de meses e seus respectivos números de dias úteis.
    • Iniciei uma documentação para o projeto usando o Sphinx. Se alguém estiver interessado, tem algumas boas explicações aqui. Também conheço pouco do Sphinx, mas já vi alguns outros módulos Pyhton documentados com seu uso e me parece muito bom, inclusive para criar documentação para qualquer tipo de projeto.
Para o futuro, preciso descobrir uma forma de não ter tantos problemas na leitura do arquivo csv contendo a lista de feriados que é utilizada em algumas funções. Creio que parte do problema seja oriundo do fato de não haver tal lista para ser baixada no formato csv; o que estou fazendo atualmente é baixar o arquivo no formato xls (Excel - único formato disponível no site da Ambima), abri-lo no Excel e então salvá-lo no formato csv a partir da caixa de diálogo Salvar como e selecionando em Tipo o formato desejado.

segunda-feira, 11 de fevereiro de 2013

Projeto FinDt


Hoje publiquei no PyPi (Python Package Index) minha primeira versão do módulo FinDt (FinDt 1.0.0), totalmente escrito em Python.

Este módulo permite diversas operações com datas principalmente com o objetivo de auxiliar operações envolvendo seu uso em cálculos econômicos ou financeiros, tais como:
  1. criar listas contendo:
    • os dias corridos ou dias úteis entre duas datas específicas
    • os dias em que um determinado dia da semana se repete entre duas datas
  2. criar um dicionário:
    • dos feriados entre duas data
    • do número de dias uteis dos meses desejados
  3. identificar o primeiro e ultimo dia útil de um determinado mês.

O módulo ainda se encontra em seus estágios iniciais de desenvolvimento; há muitas arestas a serem aparadas e melhorias a se implementar.

Mas a sua publicação tem, justamente, o objetivo de atrair (quem sabe!) críticas e sugestões que ajudem na sua melhoria constante.

Ele fará parte de um projeto um pouco maior, onde pretendo criar alguns outros módulos voltados para Finanças (transformações de taxas, Valor Presente, Valor Futuro, PMT, cálculo de um CDB) e Economia (comparação entre taxas de juros, índices de inflação, projeções), dada minha observação pessoal da dificuldade de encontrar trabalhos deste tipo para uso cotidiano, que não sejam softwares proprietários ou que não se restrinjam ao Excel e, que, em último caso, forneçam uma alternativa para esta restrição.

Embora eu ainda tenha pouco conhecimento em Python, a linguagem não me pareceu tão complexa para entender e aplicar no projeto quanto o seria em C++ ou C#. Pesou também a quantidade imensa de projetos open source disponíveis em Python e a boa impressão que projetos como Numpy, Matplotlib, SageMath, entre outros tantos baseados em Python, me causaram.

Projeto FinDt


Neste blog pretendo manter um espaço para apontamentos na linguagem de programação Python, principalmente em suas aplicações nas áreas de modelagem matemática e estatística, financeira e econômica.