|
|
# WIP - Work in progress não é recomendável ler ainda
|
|
|
|
|
|
Python é provavelmente a linguagem principal do projeto. Foi escolhida por ser uma linguagem de fácil aprendizado e bastante difundida. Ainda, em conjunto com a biblioteca pandas, substituia muito bem o uso da linguagem R e facilitava a integração das análises em um sistema web. Antes da descobertas do pandas as análises seriam feitas em R e os resultados seriam "colados" com PHP para a construção do sistema WEB.
|
|
|
|
|
|
A biblioteca pandas possui funcionalidades semelhante a da linguagem R com maior velocidade. Destaque para a estrutura [DataFrame](http://pandas.pydata.org/pandas-docs/version/0.22/generated/pandas.DataFrame.html) da biblioteca pandas que é análoga ao [data.frame](https://www.rdocumentation.org/packages/base/versions/3.4.3/topics/data.frame) que é principal ferramenta da linguagem R.
|
|
|
|
|
|
|
|
|
## Funções de linguagem de alto nível
|
|
|
|
|
|
Funções de uma linguagem de alto nível em geral vêm em 3 sabores: *built-in*, módulos da biblioteca padrão e bibliotecas externas.
|
|
|
|
|
|
|
|
|
### Módulos da biblioteca padrão
|
|
|
|
|
|
A biblioteca padrão é a coleção de módulos que é distribuida com a linguagem, esses módlos contêm funções. Só por instalar a linguagem elas já estão automaticamente disponíveis para uso através do comando `import`. O código a seguir é um exemplo do uso da função `sqrt` do módulo `math`:
|
|
|
|
|
|
```Python
|
|
|
import math
|
|
|
|
|
|
print(math.sqrt(9))
|
|
|
```
|
|
|
|
|
|
A biblioteca padrão é considerada parte da linguagem e sua manutenção é feita pelos desenvolvedores do núcleo da linguagem. Atualizações desses módulos ocorrem (via de regra) como atualizações da linguagem em si (versão 3.4, 3.5, etc).
|
|
|
|
|
|
|
|
|
### Funções built-in
|
|
|
|
|
|
Funções *built-in* são funções (e estruturas de dados) que não precisam ser importadas para serem usadas. [Aqui](https://docs.python.org/3/library/functions.html) uma lista das funções *built-in* do python.
|
|
|
|
|
|
|
|
|
### Bibliotecas externas
|
|
|
|
|
|
Em geral as duas categorias acima não suprem todas as necessidades que alguém pode ter de uma linguagem. As linguagens então organizam um repositório de bibliotecas que pode ser usado por qualquer um e um gerenciador de pacotes que vai cuidar do gerenciamento desses pacotes no sistema do usuário (como o *apt-get*). O repositório oficial do python é o [pypi](https://pypi.org/) e o gerenciador de pacotes é o [pip](https://pip.pypa.io/en/stable/). Qualquer pessoa pode desenvolver uma "biblioteca" e disponibilizar para que outros usem.
|
|
|
|
|
|
A qualidade dessas bibliotecas pode variar bastante pois quem publica não necessariamente vai manter o pacote atualizado ou dar manutenção. Não existe nem a garantia de que quem fez sabia o que estava fazendo, então são usadas por sua conta e risco. Em geral, use apenas bibliotecas com algum compromisso de manutenção.
|
|
|
|
|
|
|
|
|
## Dicas
|
|
|
|
|
|
- A versão atual do python é a versão 3. A versão 2 ainda é bastante usada apesar de estar em processo avançado de abandono pela comunidade de suporte. Use a versão 3 (mais especificamente a 3.5), se estiver encontrando muitos exemplos que usam a versão 2 [leia mais profundamente](http://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html) sobre as diferenças delas para não copiar código que não funciona na versão nova. A principal diferença é que na versão 2 o `print` não usava parênteses.
|
|
|
- Em geral o comando `python` do linux vai chamar o python2. Se estiver executando código fora do virtualenv (veja sobre pipenv abaixo) use `python3`.
|
|
|
- SEMPRE use o pipenv, é só digitar `pipenv shell` antes de começar a mexer no projeto, e `exit` quando não for mexer mais (ou só fechar o terminal). Essa é uma das garantias de que você está executando o projeto com todas as versões corretas.
|
|
|
|
|
|
|
|
|
## Materiais
|
|
|
|
|
|
- [PEP20](https://www.python.org/dev/peps/pep-0020/#id3) o mantra do python
|
|
|
- [PEP8](https://www.python.org/dev/peps/pep-0008/) guia de formatação de código para códigos python
|
|
|
- [Exercícios do Google](https://www.python.org/dev/peps/pep-0008/) é um pequeno conjunto de exercícios de linguagem Python. Faça todos os exercícios do lado esquerdo. É em Python2, mas serve bastante bem para testar a lógica da linguagem. Se quiser fazer os curso que vem junto é por sua conta, só preste atenção ao detalhe do python 2. Perceba que ele usa um modelo de checagem do resultado parecido com os frameworks de teste citados mais a frente. Sob demanda, podemos migrar para os exercícios para Python3 para ajudar os calouros.
|
|
|
- conheça as [funções built-in](https://docs.python.org/3/library/functions.html) da linguagem.
|
|
|
- Não é necessário conhecer toda a [biblioteca padrão](https://docs.python.org/3/library/index.html) do Python para ter proficiência na linguagem, mas alguns módulos são importantes e deveriam ser conhecimento base para todos. Abaixo estão listados alguns desses módulos e outros que têm alguma importância no projeto.
|
|
|
- [collections](https://docs.python.org/3/library/collections.html) estruturas de dados
|
|
|
- [itertools](https://docs.python.org/3/library/itertools.html) funções que facilitam percorrer estruturas
|
|
|
- [math](https://docs.python.org/3/library/math.html) módulo básico de matemática
|
|
|
- [datetime](https://docs.python.org/3/library/datetime.html) e [time](https://docs.python.org/3/library/time.html) módulos para manipulação de tempo e datas. Nem sempre supre todas as necessidades porque não levam em conta o fuso horário do sistema.
|
|
|
- [os.path](https://docs.python.org/3/library/os.path.html) várias funções para manipular o nome e o caminho de arquivos.
|
|
|
- [json](https://docs.python.org/3/library/json.html) é um módulo para manipular o formato json que é como guardamos os resultados das análises do projeto.
|
|
|
- [unittest](https://docs.python.org/3/library/unittest.html) é a base da ferramenta de testes do django.
|
|
|
|
|
|
|
|
|
|
|
|
## Dicas de ferramentas
|
|
|
|
|
|
- [IPython]
|
|
|
- [Jupyter]
|
|
|
- [PyCharm]
|
|
|
- [Coala]
|
|
|
|
|
|
|