<jupyter_start><jupyter_text>Demonstração de Python para Iniciantes  Para início de conversa Bem-vindo à demonstração de Python para iniciantes!Este é um esforço para a auxiliar aquelas pessoas que, como eu há algum tempo atrás, não têm qualquer familiaridade com linguagem de programação, mas gostariam de utilizar [Python](https://www.python.org/) como ponto de partida em uma trajetória de capacitação para melhor desempenho profissional.Mas afinal, porque iniciar uma trajetória de aprendizado na linguagem Python? Aqui vão algumas considerações que podem nos ajudar a responder a esssa questão. Python:* é uma linguagem multi-propósito, o que permite fazer análise de dados, jogos, aplicativos, websites e tantos outros seviços;* é considerada uma boa linguagem de programação para iniciantes, dada sua sintaxe simples;* é uma das linguagens de programação mais utilizadas na atualidade, de acordo com o repositório de codigos [Github](https://madnight.github.io/githut//pull_requests/2020/2);* é, na atualidade, a base do ecossistema mais robusto para Ciência de Dados e Machine Learning;* apresenta uma imensa quantidade bibliotecas de terceiros, com diversas finalidades, que facilitam o desenvolvimento;* conta com uma comunidade de desenvolvimento bastante ativa, sempre disposta a compartilhar informações e conhecimento.Para tirarmos o maior proveito desta demonstração, precisamos nos familiarizar com este ambiente interativo que a demonstração será realizada. o que faremos na seção seguinte.  Conhecendo o Jupyter Notebook Este ambiente aqui, em que se encontra a parte escrita de nosso tutorial, é um **Jupyter Notebook**. Notebooks são excelentes mecanismos para se trabalhar com dados a partir de programação, pois eles agregam células de textos formatáveis e células de código, em que são executados nossos programas de maneira interativa. Por essa interatividade, podemos visualizar diversos tipos de resultados de códigos, inclusive com renderização de tabelas, gráficos, mapas, grafos, fórmulas matemáticas etc.Por essa razão, notebooks têm sido utilizados amplamente no fluxo de trabalho de Ciência de Dados, desde a obtenção e o tratamento dos dados, passando para a análise exploratória, até a modelagem e divulgação de resultados. A respeito da divulgação de análises, diversos artigos científicos de peso já têm sido submetidos a partir de notebooks como este. Isso garante que avaliadores, a comunidade científica em geral e quaisquer interessados possam não só ler os resultados e observar os produtos gráficos de apoio, mas também verificar o funcionamento do código que dá base para a publicação, o que permite avaliá-lo, validá-lo e reproduzi-lo em novos trabalhos.Os exemplos abaixo são de código que dão sustentação a algumas análises sobre a difusão territorial da Covid-19 entre municípios brasileiros, conforme artigo publicado na [Hygeia - Revista Brasileira de Geografia da Saúde](http://www.seer.ufu.br/index.php/hygeia/article/view/55064).**Figura 1: Renderização de tabela, figura cartográfica e gráfico a partir de código Python em Jupyter Notebook** ![table.png](https://raw.githubusercontent.com/augustogeog/python_demo/main/imagens/table.png) ![map.png](https://raw.githubusercontent.com/augustogeog/python_demo/main/imagens/map.png) ![graph.png](https://raw.githubusercontent.com/augustogeog/python_demo/main/imagens/graph.png) Da mesma forma, em trabalhos técnicos, notebooks podem ser utilizados como verdadeiras notas técnicas interativas. A publicação de livros também tem sido um campo de aplicação desses ambientes de programação. Existem casos de livros que foram feitos inteiramente em notebooks, com divulgação interativa associada aos volumes físicos, como é o caso do livro [Deep Learning for Coders with fastai and PyTorch](https://mybinder.org/v2/gh/fastai/fastbook/master).Ainda quanto a sua aplicação, avanços têm sido feitos na utilização de notebooks como plataformas de distribuição final - _deployment_ - de aplicativos e serviços _web_, como, por exemplo, na forma de painéis temáticos de visualização de dados - _dashboards_. No entanto, ainda existem grandes limitações para seu uso em diversas dessas finalidades. Assim, na maior parte dos casos, o notebook é utilizado como uma ferramenta dinâmica, para obtenção, tratamento e análise de dados, que deixa de ser considerada na fase de deployment, em que ferramentas mais tradicionais de programação são utilizadas, tais como editores de textos e as IDEs - Integrated Development Environment, associadas a servidores _on-line_, serviços de distribuição e a contêineres em nuvem.Se muitos dos termos acima forem novos. Não precisamos nos preocupar. O importante a se reter aqui é que notebooks são poderosas ferramentas durante o fluxo de análise de dados com Python. Porém existem limitações e, a depender de nosso projeto de aprendizado e de aplicação dos conhecimentos de programação, novas ferramentas de construção de código precisarão ser consideradas no futuro.Por sua aplicação em operações com dados, diversos serviços em nuvem oferecem a possibilidade de programação por meio de Jupyter Notebooks, entre elas Microsoft Azure, Google Cloud e Amazon AWS. Da mesma forma, mesmo IDEs têm recebido interface com notebooks para permitir que desenvolvedores utilizem suas potencialidades.A princípio, o projeto Ipython oferecia ambiente de programação interativo voltado para Python. A partir de 2014, o projeto contava com suporte para as linguagens Julia, Python e R, o que gerou o acrônimo Jupyter. Desde então, o projeto ganhou o nome de Jupyter Notebooks, passando Ipython a se referir ao servidor de _kernels_ (unidades computacionais) por traz da interface de programação. Nos anos seguintes, novas funcionalidades e suporte às mais diversas linguagens de programação foram adicionadas, fazendo com que crescesse imensamente o seu uso. Em 2018, foi lançado o Jupyter Lab, que amplia significativamente as ferramentas disponíveis para desenvolvimento por notebooks, o que leva alguns a o chamarem de "Jupyter Notebooks com esteroides)". o Jupyter apresenta, no nosso navegador de internet, uma interface (jupyter dashboard) para os diretórios do computador , a partir da qual podemos, entre outras coisas, criar, acessar, renomear e deletar notebooks, que são salvos com a extensão .ipynb. Trata-se da interface exposta adiante:**Figura 2: Jupyter Dashboard - Interface de navegação entre arquivos .ipynb**_______![dashboard.png](https://raw.githubusercontent.com/augustogeog/python_demo/main/imagens/dashboard-jupyter.png)_______ Ao abrirmos um jupyter notebook, temos acesso à interface do Jupyter Editor, por meio da qual podemo redigir texto e código nas células do documento. De cima para baixo, conforme a imagem abaixo, temos uma barra de cabeçalho -_header_-, a barra de menu -menubar-, com diversas seções (File, Edit, View etc.), e barra de ferramentas -_toolbar_-, com botões para acesso rápido às principais funcionalidades, entre elas salvar, adicionar novas células, recortar, colar, executar - _run_ -, interromper etc.**Figura 3: Jupyter Editor - Interface de edição e execução de Notebooks**_______![jupyter-editor.png](https://raw.githubusercontent.com/augustogeog/python_demo/main/imagens/interface-edicao-jupyter.png)_______ Após essa porção superior, com as barras, encontramos a área do documento interativo em si, composta por células de tipo código e Markdown. Podemos inserir novas células, seja por meio dos controles na barra de ferramentas, seja a partir de atalhos (o que é amplamente utilizado). É possível se navegar entre células e dentro de cada célula. Isso ocorre, pois o editor apresenta dois estados básicos: o **modo de navegação** e o **modo de edição de célula**.No **modo de navegação**, ao pressionarmos os botões _up_ e _down_ do nosso teclado - setas para cima e para baixo -, movemos uma caixa de selação entre as células. Sabemos que estamos em modo de navegação quando a lateral esquerda da caixa de seleção se encontra com uma margem azul (veja a Figura 2). Caso estejamos dentro de uma célula, no modo edição, podemos pressionar _Esc_ no teclado para voltar para o modo de navegação. No modo de navegação, simplesmente pressionar certas teclas no teclado já significa utilizá-las como atalho para algumas funcionalidades. Podemos inserir célula de código acima (A), abaixo (B), mudar a célula para tipo Markdown(M), ou para tipo código (Y), além de visualizar todas as teclas de atalho (H), entre tantas outras funcionalidades. Ao pressionar Shift+Enter ou Ctrl+Enter executamos a célula atualmente selecionada, o que renderiza a edição de texto, caso estejamos em uma célula Markdown, ou executa o código, caso se trate de uma célula de código. A diferença entre ambos os comandos é o primeiro avança para a próxima célula, ou cria uma nova, enquanto o segundo mantém a seleção sobre a célula recém-executada.Quando estamos em modo de navegação, ao pressionar Enter sobre uma célula, acessamos o seu conteúdo, entrando para o **modo de edição**. Nesse modo, simplesmente pressionar as letras, números e caracteres especiais do teclado não corresponde a acionar qualquer atalho, mas inserir na célula os caracteres correspondentes. O modo de edição é identificável por uma margem verde no lado esquerdo da célula selecionada.Agora podemos avançar para entendermos como utilizar as células de tipo Markdown. Markdown é uma linguagem de marcação bastante simples e de fácil utilização, por meio da qual podemos criar textos formatados. A próxima célula, não renderizada, mostra alguns exemplos de formatação texto, enquanto a célula seguinte mostra esses exemplos já renderizados.**Célula de Exemplo 1: notações de formatação em Markdown não renderizadas** __________________________________________**trecho em negrito**._trecho em itálico_~~riscado~~* marcador    * marcador subordinado1. Primeiro item de uma lista ordenada1. Segundo item de uma lista ordenada     1. Subitem de uma lista ordenada    ```pythons = "destaque de código"print s```[Exemplo de link para o _Google website_](https://www.google.com)__________________________________________ **Célula de Exemplo 2: notações de formatação em Markdown renderizadas** _______**trecho em negrito**._trecho em itálico_~~riscado~~* marcador    * marcador subordinado1. Primeiro item de uma lista ordenada1. Segundo item de uma lista ordenada    1. Subitem de uma lista ordenada    ```pythons = "destaque de código"print s```[Exemplo de link para o _Google website_](https://www.google.com)_______ Em células Markdown, um título é destacado ao colocarmos o símbolo  no início de uma frase. Títulos de nível 1 começam com um sustenido, enquanto aqueles de nível dois começam com dois, e assim sucessivamente. Não é adequado colocarmos um exemplo aqui, pois isso interferiria na estrutura de títulos deste próprio notebook. Para verificar como cada título é feito, basta adentrar em qualquer célula de título deste notebook com Enter.Por padrão, operações computacionais não são calculadas em células de tipo markdown. Assim, de maneira geral, 1+1, em uma célula de texto não retorna o resultado 2. O mesmo é verdade para qualquer outro tipo de operação com Python. Caso seja útil para algum projeto, é possível inserir trechos executáveis em células markdown, o que pode gerar textos atualizáveis automaticamente. Isso é feito por meio de extensões, Nbextensions.Existem diversas fontes _on-line_ de informações sobre notações para formatação de texto em Markdown. Na [documentação do Jupyter Notebook](https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Working%20With%20Markdown%20Cells.html) é possível ver alguns exemplos. Caso necessitemos de auxílio em Português, uma breve busca na internet trará dezenas de tutoriais, guias e exemplos úteis. Quando passamos às células de código, por sua vez, os caracteres inseridos passam a ser _inputs_ com significado particular para a linguagem de programação em uso, de tal forma que, ao serem executadas, uma unidade de processamento interativa (_kernel_) é acionada, retornando o resultado de uma operação computacional. As células de código apresentam duas partes básicas, **_In_**, em que inserimos o código, e **_Out_**, em que obtemos resultados, quando a operação descrita no código assim o requerer. Operações de armazenamento de variáveis, por exemplo, não geram representação em Out. À esquerda das células de código, chaves são dispostas e seu conteúdo nos indica o status de execução. Assim, temos células que não foram executadas - nenhuma informação entre as chaves -, que estão em execução - asterisco entre as chaves - e já executadas - número de ordem da execução. Na figura abaixo podemos observar uma célula já executada (observe a numeração em In) e acionada em modo edição (margem verde à esquerda). **Figura 4: Célula de Código - Interface de edição e execução de Notebooks**![image-2.png](https://raw.githubusercontent.com/augustogeog/python_demo/main/imagens/celula-edicao-jupyter.png)Como estamos em um documento interativo, podemos ir além de visualizar algumas figuras que dão exemplo sobre o funcionamento das células, passando a realmente interagir com elas. Assim, nas próximas três células, podemos pressionar Shift+Enter para verificar o retorno das operações Python nelas inseridas (duas operações matemáticas simples e a verificação da versão do Python que estamos utilizando).________<jupyter_code>1 + 1
3 * 3<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.04707804262270736, 'fraction_numerical': 0.0036385237989158686, 'mean_word_length': 5.343853038153556, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 12, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 7, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '552247', 'license': 'MIT', 'n_tokens_mistral': 4264, 'n_tokens_neox': 4226, 'n_words': 1838, 'path': '0_Intro.ipynb', 'repo_name': 'augustogeog/python_demo', 'size': '13467'}