* [Learn Python in a Fun Way with Turtle Graphics and Fractals](https://github.com/shwars/pycourse) - GitHub-ਅਧਾਰਿਤ Python ਪ੍ਰੋਗਰਾਮਿੰਗ ਵਿੱਚ ਤੇਜ਼ ਇੰਤ੍ਰੋ ਕੋਰਸ
* [Take your First Steps with Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum) 'ਤੇ ਸਿੱਖਣ ਦਾ ਰਸਤਾ
Embora bancos de dados ofereçam maneiras muito eficientes de armazenar dados e consultá-los usando linguagens de consulta, a forma mais flexível de processar dados é escrever seu próprio programa para manipulá-los. Em muitos casos, realizar uma consulta em um banco de dados seria uma maneira mais eficaz. No entanto, em alguns casos, quando é necessário um processamento de dados mais complexo, isso não pode ser feito facilmente usando SQL.
O processamento de dados pode ser programado em qualquer linguagem de programação, mas existem certas linguagens que são mais adequadas para trabalhar com dados. Cientistas de dados geralmente preferem uma das seguintes linguagens:
Embora bancos de dados ofereçam maneiras muito eficientes de armazenar dados e consultá-los usando linguagens de consulta, a forma mais flexível de processar dados é escrever seu próprio programa para manipulá-los. Em muitos casos, fazer uma consulta ao banco de dados seria um modo mais eficaz. No entanto, em alguns casos, quando são necessários processamentos de dados mais complexos, isso não pode ser feito facilmente usando SQL.
O processamento de dados pode ser programado em qualquer linguagem de programação, mas existem certas linguagens que são de nível mais alto com respeito ao trabalho com dados. Cientistas de dados normalmente preferem uma das seguintes linguagens:
* **[Python](https://www.python.org/)**, uma linguagem de programação de propósito geral, frequentemente considerada uma das melhores opções para iniciantes devido à sua simplicidade. Python possui muitas bibliotecas adicionais que podem ajudar a resolver diversos problemas práticos, como extrair dados de um arquivo ZIP ou converter uma imagem para escala de cinza. Além da ciência de dados, Python também é amplamente utilizado para desenvolvimento web.
* **[R](https://www.r-project.org/)** é uma ferramenta tradicional desenvolvida com foco no processamento estatístico de dados. Ela também contém um grande repositório de bibliotecas (CRAN), tornando-se uma boa escolha para processamento de dados. No entanto, R não é uma linguagem de propósito geral e raramente é usada fora do domínio da ciência de dados.
* **[Julia](https://julialang.org/)** é outra linguagem desenvolvida especificamente para ciência de dados. Ela foi projetada para oferecer melhor desempenho do que Python, tornando-se uma ótima ferramenta para experimentação científica.
* **[Python](https://www.python.org/)**, uma linguagem de programação de propósito geral, frequentemente considerada uma das melhores opções para iniciantes devido à sua simplicidade. Python possui muitas bibliotecas adicionais que podem ajudar a resolver muitos problemas práticos, como extrair dados de arquivos ZIP, ou converter imagem para tons de cinza. Além da ciência de dados, Python também é frequentemente usado para desenvolvimento web.
* **[R](https://www.r-project.org/)** é uma caixa de ferramentas tradicional desenvolvida com foco no processamento estatístico de dados. Também contém um grande repositório de bibliotecas (CRAN), tornando-se uma boa escolha para processamento de dados. No entanto, R não é uma linguagem de programação de propósito geral, e raramente é usada fora do domínio da ciência de dados.
* **[Julia](https://julialang.org/)** é outra linguagem desenvolvida especificamente para ciência de dados. Destina-se a oferecer melhor desempenho que Python, tornando-se uma ótima ferramenta para experimentação científica.
Nesta lição, vamos nos concentrar em usar Python para processamento simples de dados. Assumiremos que você já tem uma familiaridade básica com a linguagem. Se quiser um aprendizado mais aprofundado sobre Python, pode consultar os seguintes recursos:
Nesta lição, vamos focar no uso do Python para processamento simples de dados. Assumiremos familiaridade básica com a linguagem. Se quiser um tour mais profundo pelo Python, você pode consultar um dos seguintes recursos:
* [Aprenda Python de forma divertida com Turtle Graphics e Fractais](https://github.com/shwars/pycourse) - Curso introdutório rápido baseado no GitHub sobre programação em Python
* [Dê seus primeiros passos com Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Caminho de aprendizado no [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Aprenda Python de Forma Divertida com Turtle Graphics e Fractais](https://github.com/shwars/pycourse) - Curso rápido baseado no GitHub sobre Programação em Python
* [Dê seus Primeiros Passos com Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Trilha de Aprendizagem na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Os dados podem vir em muitas formas. Nesta lição, consideraremos três formas de dados - **dados tabulares**, **texto** e **imagens**.
Dados podem vir em muitas formas. Nesta lição, consideraremos três formas de dados - **dados tabulares**, **texto** e **imagens**.
Vamos focar em alguns exemplos de processamento de dados, em vez de oferecer uma visão completa de todas as bibliotecas relacionadas. Isso permitirá que você obtenha a ideia principal do que é possível, e deixará você com a compreensão de onde encontrar soluções para seus problemas quando precisar.
> **Conselho mais útil**. Quando você precisar realizar certa operação nos dados que não sabe como fazer, tente buscar isso na internet. O [Stackoverflow](https://stackoverflow.com/) geralmente contém muitos exemplos úteis de código Python para muitas tarefas típicas.
Vamos nos concentrar em alguns exemplos de processamento de dados, em vez de oferecer uma visão geral completa de todas as bibliotecas relacionadas. Isso permitirá que você entenda o conceito principal do que é possível e tenha uma ideia de onde encontrar soluções para seus problemas quando necessário.
> **Conselho mais útil**. Quando precisar realizar uma operação específica em dados e não souber como fazê-lo, tente pesquisar na internet. [Stackoverflow](https://stackoverflow.com/) geralmente contém muitos exemplos úteis de código em Python para diversas tarefas típicas.
Você já encontrou dados tabulares quando falamos sobre bancos de dados relacionais. Quando você tem muitos dados contidos em várias tabelas interligadas, faz sentido usar SQL para trabalhar com eles. No entanto, há muitos casos em que temos uma tabela de dados e precisamos obter algum **entendimento** ou **insights** sobre esses dados, como a distribuição, correlação entre valores, etc. Na ciência de dados, há muitos casos em que precisamos realizar algumas transformações nos dados originais, seguidas de visualização. Ambas as etapas podem ser facilmente realizadas usando Python.
Você já conheceu dados tabulares quando falamos sobre bancos de dados relacionais. Quando você tem muitos dados, e eles estão contidos em várias tabelas vinculadas, definitivamente faz sentido usar SQL para trabalhar com eles. Contudo, há muitos casos em que temos uma tabela de dados, e precisamos obter alguma **compreensão** ou **insight** sobre esses dados, como a distribuição, correlação entre valores, etc. Na ciência de dados, há muitos casos em que precisamos realizar algumas transformações dos dados originais, seguidas de visualização. Ambos esses passos podem ser facilmente feitos usando Python.
Existem duas bibliotecas mais úteis em Python que podem ajudar você a lidar com dados tabulares:
* **[Pandas](https://pandas.pydata.org/)** permite manipular os chamados **Dataframes**, que são análogos às tabelas relacionais. Você pode ter colunas nomeadas e realizar diferentes operações em linhas, colunas e dataframes em geral.
* **[Numpy](https://numpy.org/)** é uma biblioteca para trabalhar com **tensores**, ou seja, **arrays** multidimensionais. Um array possui valores do mesmo tipo subjacente e é mais simples do que um dataframe, mas oferece mais operações matemáticas e cria menos sobrecarga.
Existem duas das bibliotecas mais úteis em Python que podem ajudar você a lidar com dados tabulares:
* **[Pandas](https://pandas.pydata.org/)** permite manipular os chamados **Dataframes**, que são análogos a tabelas relacionais. Você pode ter colunas nomeadas, e realizar diferentes operações em linhas, colunas e dataframes em geral.
* **[Numpy](https://numpy.org/)** é uma biblioteca para trabalhar com **tensores**, ou seja, **arrays** multidimensionais. Array tem valores do mesmo tipo subjacente, e é mais simples que um dataframe, mas oferece mais operações matemáticas, e cria menos overhead.
Existem também algumas outras bibliotecas que você deve conhecer:
* **[Matplotlib](https://matplotlib.org/)** é uma biblioteca usada para visualização de dados e criação de gráficos
* **[SciPy](https://www.scipy.org/)** é uma biblioteca com algumas funções científicas adicionais. Já nos deparamos com essa biblioteca ao falar sobre probabilidade e estatística
Há também algumas outras bibliotecas que você deve conhecer:
* **[Matplotlib](https://matplotlib.org/)** é uma biblioteca usada para visualização de dados e desenho de gráficos
* **[SciPy](https://www.scipy.org/)** é uma biblioteca com algumas funções científicas adicionais. Já nos deparamos com essa biblioteca quando falamos sobre probabilidade e estatística
Aqui está um trecho de código que você normalmente usaria para importar essas bibliotecas no início do seu programa em Python:
Aqui está um trecho de código que você normalmente usaria para importar essas bibliotecas no início do seu programa Python:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
```
from scipy import ... # você precisa especificar os subpacotes exatos que você precisa
```
Pandas é centrado em alguns conceitos básicos.
Pandas é centrada em alguns conceitos básicos.
### Series
### Series
**Series** é uma sequência de valores, semelhante a uma lista ou array do numpy. A principal diferença é que uma série também possui um **índice**, e quando operamos em séries (por exemplo, somamos), o índice é levado em consideração. O índice pode ser tão simples quanto o número inteiro da linha (é o índice usado por padrão ao criar uma série a partir de uma lista ou array), ou pode ter uma estrutura complexa, como intervalo de datas.
**Series** é uma sequência de valores, similar a uma lista ou array numpy. A principal diferença é que series também tem um **índice**, e quando operamos com series (ex., somá-las), o índice é levado em conta. O índice pode ser tão simples quanto número inteiro da linha (é o índice usado por padrão ao criar uma series a partir de uma lista ou array), ou pode ter uma estrutura complexa, como intervalo de datas.
> **Nota**: Há algum código introdutório de Pandas no notebook associado [`notebook.ipynb`](notebook.ipynb). Apenas destacamos alguns exemplos aqui, e você está definitivamente convidado a conferir o notebook completo.
> **Nota**: Há um código introdutório de Pandas no notebook acompanhante [`notebook.ipynb`](notebook.ipynb). Aqui apenas delineamos alguns exemplos, e você definitivamente está convidado a conferir o notebook completo.
Considere um exemplo: queremos analisar as vendas de nossa sorveteria. Vamos gerar uma série de números de vendas (número de itens vendidos por dia) para um determinado período de tempo:
Considere um exemplo: queremos analisar vendas do nosso quiosque de sorvete. Vamos gerar uma series de números de vendas (número de itens vendidos a cada dia) para algum período de tempo:

```

Agora suponha que, a cada semana, organizamos uma festa para amigos e levamos 10 pacotes adicionais de sorvete para a festa. Podemos criar outra série, indexada por semana, para demonstrar isso:
Agora suponha que toda semana estamos organizando uma festa para amigos, e levamos 10 pacotes adicionais de sorvete para a festa. Podemos criar outra series, indexada por semana, para demonstrar isso:

```

> **Nota** que não estamos usando a sintaxe simples `total_items+additional_items`. Se fizéssemos isso, receberíamos muitos valores `NaN` (*Not a Number*) na série resultante. Isso ocorre porque há valores ausentes para alguns pontos do índice na série `additional_items`, e somar `NaN` a qualquer coisa resulta em `NaN`. Assim, precisamos especificar o parâmetro `fill_value` durante a soma.
> **Note** que não estamos usando a sintaxe simples `total_items+additional_items`. Se fizéssemos, teríamos muitos valores `NaN` (*Not a Number* - Não é Número) na series resultante. Isso porque há valores ausentes para alguns pontos do índice na series `additional_items`, e somar `NaN` a qualquer coisa resulta em `NaN`. Portanto, precisamos especificar o parâmetro `fill_value` durante a adição.
Com séries temporais, também podemos **re-amostrar** a série com diferentes intervalos de tempo. Por exemplo, suponha que queremos calcular o volume médio de vendas mensalmente. Podemos usar o seguinte código:
Com séries temporais, também podemos **reesamostrar** a series com diferentes intervalos de tempo. Por exemplo, suponha que queremos calcular volume médio de vendas mensalmente. Podemos usar o código aseguir:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```

```

### DataFrame
Um DataFrame é essencialmente uma coleção de séries com o mesmo índice. Podemos combinar várias séries em um DataFrame:
Um DataFrame é essencialmente uma coleção de series com o mesmo índice. Podemos combinar várias series juntas em um DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
Aqui `.T` significa a operação de transposição do DataFrame, ou seja, trocar linhas e colunas, e a operação `rename` nos permite renomear colunas para corresponder ao exemplo anterior.
Aqui `.T` significa a operação de transpor o DataFrame, ou seja, trocar linhas por colunas, e a operação `rename` permite renomear colunas para corresponder ao exemplo anterior.
Aqui estão algumas das operações mais importantes que podemos realizar em DataFrames:
**Seleção de colunas**. Podemos selecionar colunas individuais escrevendo `df['A']` - essa operação retorna uma Series. Também podemos selecionar um subconjunto de colunas em outro DataFrame escrevendo `df[['B','A']]` - isso retorna outro DataFrame.
**Seleção de colunas**. Podemos selecionar colunas individuais escrevendo `df['A']` - essa operação retorna uma Series. Também podemos selecionar um subconjunto de colunas para outro DataFrame escrevendo `df[['B','A']]` - isso retorna outro DataFrame.
**Filtragem** de apenas certas linhas por critérios. Por exemplo, para deixar apenas linhas com a coluna `A` maior que 5, podemos escrever `df[df['A']>5]`.
**Filtro** de apenas certas linhas por critério. Por exemplo, para deixar apenas as linhas com coluna `A` maior que 5, podemos escrever `df[df['A']>5]`.
> **Nota**: A forma como a filtragem funciona é a seguinte. A expressão `df['A']<5` retorna uma série booleana, que indica se a expressão é `True` ou `False` para cada elemento da série original `df['A']`. Quando a série booleana é usada como índice, ela retorna um subconjunto de linhas no DataFrame. Assim, não é possível usar expressões booleanas arbitrárias do Python, por exemplo, escrever `df[df['A']>5 and df['A']<7]` estaria errado. Em vez disso, você deve usar a operação especial `&`na série booleana, escrevendo `df[(df['A']>5) & (df['A']<7)]` (*os parênteses são importantes aqui*).
> **Nota**: A forma como o filtro funciona é a seguinte. A expressão `df['A']<5` retorna uma series booleana, que indica se a expressão é `True` ou `False` para cada elemento da series original `df['A']`. Quando uma series booleana é usada como índice, ela retorna o subconjunto de linhas do DataFrame. Portanto, não é possível usar expressões booleanas arbitrárias do Python, por exemplo, escrever `df[df['A']>5 and df['A']<7]` estaria errado. Em vez disso, você deve usar a operação especial `&`em series booleanas, escrevendo `df[(df['A']>5) & (df['A']<7)]` (*os colchetes são importantes aqui*).
**Criando novas colunas computáveis**. Podemos facilmente criar novas colunas computáveis para nosso DataFrame usando expressões intuitivas como esta:
**Criar novas colunas computáveis**. Podemos facilmente criar novas colunas computáveis para nosso DataFrame usando expressões intuitivas como esta:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Este exemplo calcula a divergência de A em relação ao seu valor médio. O que realmente acontece aqui é que estamos computando uma série e, em seguida, atribuímos essa série ao lado esquerdo, criando outra coluna. Assim, não podemos usar operações que não sejam compatíveis com séries, por exemplo, o código abaixo está errado:
```
Este exemplo calcula a divergência de A em relação ao seu valor médio. O que realmente acontece aqui é que estamos computando uma series, e então atribuindo essa series ao lado esquerdo, criando outra coluna. Portanto, não podemos usar nenhuma operação que não seja compatível com series, por exemplo, o código abaixo está errado:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] <5else"Hi"
df['LenB'] = len(df['B']) # <-Wrong result
```
O último exemplo, embora seja sintaticamente correto, nos dá um resultado errado, porque atribui o comprimento da série`B` a todos os valores na coluna, e não o comprimento dos elementos individuais como pretendíamos.
# Código errado -> df['ADescr'] = "Low" se df['A'] <5senão"Hi"
df['LenB'] = len(df['B']) # <-Resultado errado
```
O exemplo acima, embora sintaticamente correto, nos dá um resultado errado, porque atribui o comprimento da series`B` a todos os valores na coluna, e não o comprimento dos elementos individuais como pretendíamos.
Se precisarmos calcular expressões complexas como esta, podemos usar a função `apply`. O último exemplo pode ser escrito da seguinte forma:
Se precisarmos computar expressões complexas como essa, podemos usar a função `apply`. O último exemplo pode ser escrito da seguinte forma:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# ou
df['LenB'] = df['B'].apply(len)
```
```
Após as operações acima, terminaremos com o seguinte DataFrame:
Após as operações acima, teremos o seguinte DataFrame:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
@ -164,21 +166,21 @@ Após as operações acima, terminaremos com o seguinte DataFrame:
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**Selecionando linhas com base em números** pode ser feito usando o construto `iloc`. Por exemplo, para selecionar as primeiras 5 linhas do DataFrame:
**Selecionar linhas com base em números** pode ser feito usando a construção `iloc`. Por exemplo, para selecionar as primeiras 5 linhas do DataFrame:
```python
df.iloc[:5]
```
```
**Agrupamento** é frequentemente usado para obter um resultado semelhante a *tabelas dinâmicas* no Excel. Suponha que queremos calcular o valor médio da coluna `A` para cada número dado de `LenB`. Então podemos agrupar nosso DataFrame por `LenB` e chamar `mean`:
**Agrupamento** é frequentemente usado para obter um resultado similar a *tabelas dinâmicas* no Excel. Suponha que queremos calcular o valor médio da coluna `A` para cada determinado número de `LenB`. Então podemos agrupar nosso DataFrame por `LenB`, e chamar `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Se precisarmos calcular a média e o número de elementos no grupo, podemos usar a função mais complexa `aggregate`:
```
Se precisarmos calcular a média e o número de elementos no grupo, podemos usar a função mais complexa `aggregate`:
@ -190,84 +192,87 @@ Isso nos dá a seguinte tabela:
| 6 | 2 | 6.000000 |
### Obtendo Dados
Já vimos como é fácil construir Series e DataFrames a partir de objetos Python. No entanto, os dados geralmente vêm na forma de um arquivo de texto ou uma tabela do Excel. Felizmente, o Pandas nos oferece uma maneira simples de carregar dados do disco. Por exemplo, ler um arquivo CSV é tão simples quanto isso:
Vimos como é fácil construir Series e DataFrames a partir de objetos Python. No entanto, os dados geralmente vêm na forma de um arquivo de texto ou uma tabela do Excel. Felizmente, o Pandas nos oferece uma maneira simples de carregar dados do disco. Por exemplo, ler um arquivo CSV é tão simples quanto isso:
```python
df = pd.read_csv('file.csv')
```
Veremos mais exemplos de carregamento de dados, incluindo como buscá-los de sites externos, na seção "Desafio".
```
Veremos mais exemplos de carregamento de dados, incluindo a obtenção deles de sites externos, na seção "Desafio"
### Impressão e Visualização
### Impressão e Plotagem
Um Cientista de Dados frequentemente precisa explorar os dados, então é importante ser capaz de visualizá-los. Quando o DataFrame é grande, muitas vezes queremos apenas garantir que estamos fazendo tudo corretamente imprimindo as primeiras linhas. Isso pode ser feito chamando `df.head()`. Se você estiver executando isso no Jupyter Notebook, ele imprimirá o DataFrame em uma forma tabular agradável.
Um Cientista de Dados frequentemente precisa explorar os dados, portanto é importante ser capaz de visualizá-los. Quando o DataFrame é grande, muitas vezes queremos apenas garantir que estamos fazendo tudo corretamente imprimindo as primeiras linhas. Isso pode ser feito chamando `df.head()`. Se você estiver executando no Jupyter Notebook, ele exibirá o DataFrame em uma forma tabular agradável.
Também vimos o uso da função `plot` para visualizar algumas colunas. Embora `plot` seja muito útil para muitas tarefas e suporte diferentes tipos de gráficos via o parâmetro `kind=`, você sempre pode usar a biblioteca `matplotlib` diretamente para criar algo mais complexo. Vamos abordar a visualização de dados em detalhes em lições separadas do curso.
Também vimos o uso da função `plot` para visualizar algumas colunas. Embora `plot` seja muito útil para muitas tarefas e suporte muitos tipos diferentes de gráfico via parâmetro `kind=`, você sempre pode usar a biblioteca pura `matplotlib` para plotar algo mais complexo. Cobriremos visualização de dados em detalhe em lições separadas do curso.
Este panorama cobre os conceitos mais importantes do Pandas, no entanto, a biblioteca é muito rica e não há limites para o que você pode fazer com ela! Agora vamos aplicar esse conhecimento para resolver um problema específico.
Esta visão geral cobre os conceitos mais importantes do Pandas, entretanto, a biblioteca é muito rica, e não há limite para o que você pode fazer com ela! Agora vamos aplicar esse conhecimento para resolver um problema específico.
## 🚀 Desafio 1: Analisando a Propagação da COVID
## 🚀 Desafio 1: Analisando a Propagação do COVID
O primeiro problema em que vamos focar é o modelamento da propagação epidêmica da COVID-19. Para isso, usaremos os dados sobre o número de indivíduos infectados em diferentes países, fornecidos pelo [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) da [Johns Hopkins University](https://jhu.edu/). O conjunto de dados está disponível neste [repositório do GitHub](https://github.com/CSSEGISandData/COVID-19).
O primeiro problema em que iremos focar é a modelagem da propagação epidêmica do COVID-19. Para isso, usaremos os dados sobre o número de indivíduos infectados em diferentes países, fornecidos pelo [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) da [Johns Hopkins University](https://jhu.edu/). O conjunto de dados está disponível no [repositório do GitHub](https://github.com/CSSEGISandData/COVID-19).
Como queremos demonstrar como lidar com dados, convidamos você a abrir [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) e lê-lo de cima a baixo. Você também pode executar as células e realizar alguns desafios que deixamos para você no final.
Como queremos demonstrar como lidar com dados, convidamos você a abrir [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) e lê-lo de cima a baixo. Você também pode executar as células e fazer alguns desafios que deixamos para você no final.

> Se você não sabe como executar código no Jupyter Notebook, confira [este artigo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Se você não sabe como executar código no Jupyter Notebook, dê uma olhada [neste artigo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Trabalhando com Dados Não Estruturados
Embora os dados frequentemente venham em forma tabular, em alguns casos precisamos lidar com dados menos estruturados, como texto ou imagens. Nesse caso, para aplicar as técnicas de processamento de dados que vimos acima, precisamos de alguma forma **extrair** dados estruturados. Aqui estão alguns exemplos:
Embora os dados frequentemente venham em forma tabular, em alguns casos precisamos lidar com dados menos estruturados, por exemplo, texto ou imagens. Neste caso, para aplicar as técnicas de processamento de dados que vimos acima, precisamos de alguma forma **extrair** dados estruturados. Aqui estão alguns exemplos:
* Extrair palavras-chave de um texto e verificar com que frequência essas palavras aparecem
* Usar redes neurais para extrair informações sobre objetos em uma imagem
* Obter informações sobre emoções de pessoas em um feed de câmera de vídeo
* Extração de palavras-chave do texto, e verificar com que frequência essas palavras aparecem
* Uso de redes neurais para extrair informações sobre objetos na imagem
* Obtenção de informações sobre emoções das pessoas em vídeo
## 🚀 Desafio 2: Analisando Artigos sobre COVID
Neste desafio, continuaremos com o tema da pandemia de COVID e focaremos no processamento de artigos científicos sobre o assunto. Existe o [CORD-19 Dataset](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) com mais de 7.000 (na época da escrita) artigos sobre COVID, disponível com metadados e resumos (e para cerca de metade deles também há texto completo disponível).
Neste desafio, continuaremos com o tema da pandemia de COVID e focaremos no processamento de artigos científicos sobre o assunto. Existe o [Conjunto de Dados CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) com mais de 7000 (no momento da escrita) artigos sobre COVID, disponíveis com metadados e resumos (e para cerca de metade deles também há o texto completo disponível).
Um exemplo completo de análise deste conjunto de dados usando o serviço cognitivo [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) é descrito [neste post do blog](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Vamos discutir uma versão simplificada dessa análise.
Um exemplo completo de análise desse conjunto de dados usando o serviço cognitivo [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) está descrito [neste post do blog](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Vamos discutir uma versão simplificada dessa análise.
> **NOTE**: Não fornecemos uma cópia do conjunto de dados como parte deste repositório. Você pode precisar primeiro baixar o arquivo [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) deste [conjunto de dados no Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Pode ser necessário se registrar no Kaggle. Você também pode baixar o conjunto de dados sem registro [aqui](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), mas ele incluirá todos os textos completos além do arquivo de metadados.
> **NOTA**: Não fornecemos uma cópia do conjunto de dados como parte deste repositório. Você pode precisar primeiro baixar o arquivo [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) deste [conjunto de dados no Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). O registro no Kaggle pode ser necessário. Você também pode baixar o conjunto de dados sem registro [aqui](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), mas ele incluirá todos os textos completos além do arquivo de metadados.
Abra [`notebook-papers.ipynb`](notebook-papers.ipynb) e leia-o de cima a baixo. Você também pode executar as células e realizar alguns desafios que deixamos para você no final.
Abra [`notebook-papers.ipynb`](notebook-papers.ipynb) e leia-o de cima a baixo. Você também pode executar as células e fazer alguns desafios que deixamos para você no final.


## Processando Dados de Imagem
## Processamento de Dados de Imagem
Recentemente, modelos de IA muito poderosos foram desenvolvidos, permitindo-nos entender imagens. Há muitas tarefas que podem ser resolvidas usando redes neurais pré-treinadas ou serviços em nuvem. Alguns exemplos incluem:
Recentemente, modelos de IA muito poderosos foram desenvolvidos, permitindo que entendamos imagens. Existem muitas tarefas que podem ser resolvidas usando redes neurais pré-treinadas ou serviços em nuvem. Alguns exemplos incluem:
* **Classificação de Imagens**, que pode ajudar a categorizar a imagem em uma das classes pré-definidas. Você pode facilmente treinar seus próprios classificadores de imagem usando serviços como [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Detecção de Objetos** para identificar diferentes objetos na imagem. Serviços como [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) podem detectar vários objetos comuns, e você pode treinar um modelo [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) para detectar objetos específicos de interesse.
* **Detecção Facial**, incluindo idade, gênero e emoções. Isso pode ser feito via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Detecção de Objetos** para detectar diferentes objetos na imagem. Serviços como [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) podem detectar diversos objetos comuns, e você pode treinar um modelo [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) para detectar objetos específicos de interesse.
* **Detecção Facial**, incluindo detecção de Idade, Gênero e Emoção. Isso pode ser feito via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Todos esses serviços em nuvem podem ser chamados usando [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), e assim podem ser facilmente incorporados ao seu fluxo de trabalho de exploração de dados.
Todos esses serviços em nuvem podem ser chamados usando [SDKs Python](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), e assim podem ser facilmente incorporados em seu fluxo de trabalho de exploração de dados.
Aqui estão alguns exemplos de exploração de dados a partir de fontes de dados de imagem:
* No post do blog [Como Aprender Ciência de Dados sem Programação](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/), exploramos fotos do Instagram, tentando entender o que faz as pessoas darem mais curtidas em uma foto. Primeiro extraímos o máximo de informações das imagens usando [Computer Vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), e depois usamos [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) para construir um modelo interpretável.
* No [Workshop de Estudos Faciais](https://github.com/CloudAdvocacy/FaceStudies), usamos [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) para extrair emoções de pessoas em fotografias de eventos, a fim de tentar entender o que faz as pessoas felizes.
* No post do blog [Como Aprender Ciência de Dados sem Programar](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) exploramos fotos do Instagram, tentando entender o que faz as pessoas darem mais likes a uma foto. Primeiro extraímos o máximo de informações possível das imagens usando [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), e depois usamos o [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) para construir um modelo interpretável.
* No [Workshop de Estudos Faciais](https://github.com/CloudAdvocacy/FaceStudies) usamos [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) para extrair emoções das pessoas em fotografias de eventos, para tentar entender o que faz as pessoas felizes.
## Conclusão
Seja com dados estruturados ou não estruturados, usando Python você pode realizar todas as etapas relacionadas ao processamento e compreensão de dados. É provavelmente a maneira mais flexível de processar dados, e é por isso que a maioria dos cientistas de dados usa Python como sua principal ferramenta. Aprender Python em profundidade é provavelmente uma boa ideia se você está sério sobre sua jornada em ciência de dados!
Seja você já tenha dados estruturados ou não estruturados, usando Python você pode realizar todas as etapas relacionadas ao processamento e entendimento dos dados. Provavelmente é a forma mais flexível de processar dados, e é por isso que a maioria dos cientistas de dados usa Python como sua ferramenta principal. Aprender Python em profundidade provavelmente é uma boa ideia se você está sério sobre sua jornada em ciência de dados!
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Livros**
* [Wes McKinney. Python para Análise de Dados: Tratamento de Dados com Pandas, NumPy, e IPython](https://www.amazon.com/gp/product/1491957662)
**Recursos Online**
* Tutorial oficial [10 minutos para Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Documentação sobre Visualização com Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Recursos Online**
* Tutorial oficial [10 minutos para Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Documentação sobre Visualização em Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Aprendendo Python**
* [Aprenda Python de forma divertida com Turtle Graphics e Fractais](https://github.com/shwars/pycourse)
* [Dê seus primeiros passos com Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) no caminho de aprendizado do [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
**Aprendendo Python**
* [Aprenda Python de forma divertida com Turtle Graphics e Fractais](https://github.com/shwars/pycourse)
* [Dê seus primeiros passos com Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Trilha de Aprendizado no [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Tarefa
## Exercício
[Realize um estudo mais detalhado dos dados para os desafios acima](assignment.md)
@ -277,5 +282,7 @@ Esta lição foi criada com ♥️ por [Dmitry Soshnikov](http://soshnikov.com)
---
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Aviso Legal**:
Este documento foi traduzido usando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos pela precisão, por favor, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.
Embora bases de dados ofereçam formas muito eficientes de armazenar e consultar dados usando linguagens de consulta, a maneira mais flexível de processar dados é escrever o seu próprio programa para manipulá-los. Em muitos casos, realizar uma consulta em uma base de dados seria mais eficaz. No entanto, em alguns casos, quando é necessário um processamento de dados mais complexo, isso não pode ser feito facilmente usando SQL.
O processamento de dados pode ser programado em qualquer linguagem de programação, mas há certas linguagens que são mais adequadas para trabalhar com dados. Cientistas de dados geralmente preferem uma das seguintes linguagens:
Enquanto as bases de dados oferecem formas muito eficientes de armazenar dados e interroga-los usando linguagens de consulta, a forma mais flexível de processar dados é escrever o seu próprio programa para manipular dados. Em muitos casos, fazer uma consulta na base de dados seria um método mais eficaz. No entanto, em alguns casos, quando é necessário um processamento de dados mais complexo, não é fácil fazê-lo usando SQL.
O processamento de dados pode ser programado em qualquer linguagem de programação, mas existem certas linguagens que são de nível mais elevado para trabalhar com dados. Os cientistas de dados normalmente preferem uma das seguintes linguagens:
* **[Python](https://www.python.org/)**, uma linguagem de programação de propósito geral, frequentemente considerada uma das melhores opções para iniciantes devido à sua simplicidade. Python possui muitas bibliotecas adicionais que podem ajudar a resolver diversos problemas práticos, como extrair dados de um arquivo ZIP ou converter uma imagem para escala de cinza. Além da ciência de dados, Python também é amplamente utilizado para desenvolvimento web.
* **[R](https://www.r-project.org/)** é uma ferramenta tradicional desenvolvida com foco no processamento estatístico de dados. Ela também contém um grande repositório de bibliotecas (CRAN), tornando-se uma boa escolha para processamento de dados. No entanto, R não é uma linguagem de propósito geral e raramente é usada fora do domínio da ciência de dados.
* **[Julia](https://julialang.org/)** é outra linguagem desenvolvida especificamente para ciência de dados. Ela foi projetada para oferecer melhor desempenho do que Python, tornando-se uma excelente ferramenta para experimentação científica.
* **[Python](https://www.python.org/)**, uma linguagem de programação de uso geral, frequentemente considerada uma das melhores opções para iniciantes devido à sua simplicidade. Python tem muitas bibliotecas adicionais que podem ajudá-lo a resolver muitos problemas práticos, como extrair seus dados de um arquivo ZIP ou converter uma imagem para escala de cinza. Para além da ciência de dados, Python é também frequentemente usado para desenvolvimento web.
* **[R](https://www.r-project.org/)** é uma caixa de ferramentas tradicional desenvolvida com o processamento de dados estatísticos em mente. Também contém um grande repositório de bibliotecas (CRAN), sendo uma boa escolha para processamento de dados. Contudo, R não é uma linguagem de programação de uso geral e é raramente usada fora do domínio da ciência de dados.
* **[Julia](https://julialang.org/)** é outra linguagem desenvolvida especificamente para ciência de dados. Destina-se a oferecer melhor desempenho que o Python, tornando-a uma ótima ferramenta para experimentação científica.
Nesta lição, vamos focar no uso de Python para processamento simples de dados. Assumimos que você já tem uma familiaridade básica com a linguagem. Se quiser um aprendizado mais aprofundado sobre Python, pode consultar um dos seguintes recursos:
Nesta lição, vamos focar no uso de Python para processamento simples de dados. Assumiremos uma familiaridade básica com a linguagem. Se quiser uma exploração mais aprofundada do Python, pode consultar um dos seguintes recursos:
* [Aprenda Python de Forma Divertida com Gráficos Turtle e Fractais](https://github.com/shwars/pycourse) - Curso introdutório rápido baseado no GitHub sobre programação em Python
* [Dê seus Primeiros Passos com Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Caminho de Aprendizado no [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
* [Aprenda Python de Forma Divertida com Turtle Graphics e Fractais](https://github.com/shwars/pycourse) - Curso rápido baseado em GitHub para introdução à Programação em Python
* [Dê os seus Primeiros Passos com Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Percurso de Aprendizagem na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Os dados podem vir em várias formas. Nesta lição, consideraremos três formas de dados - **dados tabulares**, **texto** e **imagens**.
Os dados podem surgir de várias formas. Nesta lição, consideraremos três formas de dados - **dados tabulares**, **texto** e **imagens**.
Vamos focar em alguns exemplos de processamento de dados, em vez de dar uma visão geral completa de todas as bibliotecas relacionadas. Isto permitirá que obtenha a ideia principal do que é possível, e dar-lhe-á compreensão de onde encontrar soluções para os seus problemas quando precisar delas.
> **Conselho mais útil**. Quando precisar de realizar uma operação qualquer sobre dados que não saiba como fazer, tente pesquisar na internet. O [Stackoverflow](https://stackoverflow.com/) geralmente contém muitos exemplos úteis de código em Python para muitas tarefas típicas.
Vamos focar em alguns exemplos de processamento de dados, em vez de oferecer uma visão completa de todas as bibliotecas relacionadas. Isso permitirá que você entenda o que é possível e saiba onde encontrar soluções para seus problemas quando precisar.
> **Conselho mais útil**. Quando precisar realizar uma operação específica em dados e não souber como fazê-lo, tente pesquisar na internet. [Stackoverflow](https://stackoverflow.com/) geralmente contém muitos exemplos úteis de código em Python para diversas tarefas típicas.
Você já encontrou dados tabulares quando falamos sobre bases de dados relacionais. Quando você tem muitos dados e eles estão contidos em várias tabelas interligadas, definitivamente faz sentido usar SQL para trabalhar com eles. No entanto, há muitos casos em que temos uma tabela de dados e precisamos obter algum **entendimento** ou **insights** sobre esses dados, como a distribuição, correlação entre valores, etc. Na ciência de dados, há muitos casos em que precisamos realizar algumas transformações nos dados originais, seguidas de visualização. Ambos os passos podem ser facilmente realizados usando Python.
Já encontrou dados tabulares quando falámos de bases de dados relacionais. Quando se tem muitos dados, contidos em várias tabelas ligadas, faz definitivamente sentido usar SQL para trabalhar com eles. Contudo, existem muitos casos em que temos uma tabela de dados e precisamos de obter alguma **compreensão** ou **insights** sobre esses dados, como a distribuição, correlação entre valores, etc. Na ciência de dados, existem muitos casos em que é necessário realizar algumas transformações dos dados originais, seguidas por visualização. Ambas essas etapas podem ser feitas facilmente usando Python.
Existem duas bibliotecas mais úteis em Python que podem ajudar você a lidar com dados tabulares:
* **[Pandas](https://pandas.pydata.org/)** permite manipular os chamados **Dataframes**, que são análogos às tabelas relacionais. Você pode ter colunas nomeadas e realizar diferentes operações em linhas, colunas e dataframes em geral.
* **[Numpy](https://numpy.org/)** é uma biblioteca para trabalhar com **tensores**, ou seja, **arrays** multidimensionais. Um array possui valores do mesmo tipo subjacente e é mais simples do que um dataframe, mas oferece mais operações matemáticas e cria menos sobrecarga.
Existem duas bibliotecas mais úteis em Python que podem ajudá-lo a lidar com dados tabulares:
* **[Pandas](https://pandas.pydata.org/)** permite manipular os chamados **Dataframes**, que são análogos a tabelas relacionais. Pode ter colunas com nomes, e realizar diferentes operações em linhas, colunas e dataframes em geral.
* **[Numpy](https://numpy.org/)** é uma biblioteca para trabalhar com **tensores**, i.e., **arrays** multidimensionais. O array tem valores do mesmo tipo base e é mais simples que um dataframe, mas oferece mais operações matemáticas e cria menos overhead.
Há também algumas outras bibliotecas que você deve conhecer:
* **[Matplotlib](https://matplotlib.org/)** é uma biblioteca usada para visualização de dados e criação de gráficos
* **[SciPy](https://www.scipy.org/)** é uma biblioteca com algumas funções científicas adicionais. Já nos deparamos com esta biblioteca ao falar sobre probabilidade e estatística
Existem também outras duas bibliotecas que deverá conhecer:
* **[Matplotlib](https://matplotlib.org/)** é uma biblioteca usada para visualização de dados e plotagem de gráficos
* **[SciPy](https://www.scipy.org/)** é uma biblioteca com algumas funções científicas adicionais. Já nos deparámos com esta biblioteca quando falámos de probabilidade e estatística
Aqui está um trecho de código que você normalmente usaria para importar essas bibliotecas no início do seu programa em Python:
Aqui está um exemplo de código que normalmente usaria para importar estas bibliotecas no início do seu programa Python:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import ... # you need to specify exact sub-packages that you need
```
from scipy import ... # precisa especificar os subpacotes exatos de que necessita
```
Pandas é centrado em alguns conceitos básicos.
O Pandas está centrado em alguns conceitos básicos.
### Series
### Series
**Series** é uma sequência de valores, semelhante a uma lista ou array do numpy. A principal diferença é que uma série também possui um **índice**, e quando operamos em séries (por exemplo, somamos), o índice é levado em consideração. O índice pode ser tão simples quanto o número inteiro da linha (é o índice usado por padrão ao criar uma série a partir de uma lista ou array), ou pode ter uma estrutura complexa, como intervalo de datas.
**Series** é uma sequência de valores, semelhante a uma lista ou array numpy. A principal diferença é que a série também tem um **índice**, e quando operamos sobre séries (ex., adicionando-as), o índice é tido em conta. O índice pode ser tão simples quanto um número inteiro de linha (é o índice usado por defeito quando se cria uma série a partir de uma lista ou array), ou pode ter uma estrutura complexa, como intervalo de datas.
> **Nota**: Há algum código introdutório de Pandas no notebook associado [`notebook.ipynb`](notebook.ipynb). Apenas destacamos alguns exemplos aqui, e você está definitivamente convidado a conferir o notebook completo.
> **Nota**: Existe algum código introdutório do Pandas no notebook acompanhante [`notebook.ipynb`](notebook.ipynb). Apenas destacamos aqui alguns exemplos e está definitivamente convidado a ver o notebook completo.
Considere um exemplo: queremos analisar as vendas de nossa sorveteria. Vamos gerar uma série de números de vendas (número de itens vendidos a cada dia) para um determinado período de tempo:
Considere um exemplo: queremos analisar as vendas do nosso quiosque de gelados. Vamos gerar uma série de números de vendas (número de artigos vendidos por dia) durante algum período de tempo:

Agora suponha que, a cada semana, organizamos uma festa para amigos e levamos 10 pacotes adicionais de sorvete para a festa. Podemos criar outra série, indexada por semana, para demonstrar isso:
Agora suponha que todas as semanas organizamos uma festa para amigos e levamos 10 pacotes adicionais de gelado para a festa. Podemos criar outra série, indexada por semana, para demonstrar isso:

> **Nota** que não estamos usando a sintaxe simples `total_items+additional_items`. Se o fizéssemos, receberíamos muitos valores `NaN` (*Not a Number*) na série resultante. Isso ocorre porque há valores ausentes para alguns dos pontos de índice na série `additional_items`, e somar `NaN` a qualquer coisa resulta em `NaN`. Assim, precisamos especificar o parâmetro `fill_value` durante a soma.
> **Nota** que não estamos a usar a sintaxe simples `total_items+additional_items`. Se o fizéssemos, receberíamos muitos valores `NaN` (*Not a Number*) na série resultado. Isto porque existem valores em falta para alguns pontos do índice na série `additional_items`, e somar `NaN` a qualquer coisa resulta em `NaN`. Assim, precisamos especificar o parâmetro `fill_value` durante a adição.
Com séries temporais, também podemos **reamostrar** a série com diferentes intervalos de tempo. Por exemplo, suponha que queremos calcular o volume médio de vendas mensal. Podemos usar o seguinte código:
Com séries temporais, também podemos **reamostrar** a série com diferentes intervalos de tempo. Por exemplo, suponha que queremos calcular o volume médio de vendas mensalmente. Podemos usar o seguinte código:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```

```

### DataFrame
Um DataFrame é essencialmente uma coleção de séries com o mesmo índice. Podemos combinar várias séries em um DataFrame:
Um DataFrame é essencialmente uma coleção de séries com o mesmo índice. Podemos combinar várias séries num DataFrame:
```python
a = pd.Series(range(1,10))
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
Aqui `.T` significa a operação de transposição do DataFrame, ou seja, trocar linhas e colunas, e a operação `rename` permite renomear colunas para corresponder ao exemplo anterior.
Aqui `.T` significa a operação de transpor o DataFrame, i.e. trocar linhas e colunas, e a operação `rename` permite renomear colunas para coincidir com o exemplo anterior.
Aqui estão algumas das operações mais importantes que podemos realizar em DataFrames:
**Seleção de colunas**. Podemos selecionar colunas individuais escrevendo `df['A']` - esta operação retorna uma Series. Também podemos selecionar um subconjunto de colunas em outro DataFrame escrevendo `df[['B','A']]` - isso retorna outro DataFrame.
**Seleção de colunas**. Podemos selecionar colunas individuais escrevendo `df['A']` - esta operação retorna uma Series. Também podemos selecionar um subconjunto de colunas para outro DataFrame escrevendo `df[['B','A']]` - isto retorna outro DataFrame.
**Filtragem** de apenas certas linhas por critérios. Por exemplo, para deixar apenas linhas com a coluna `A` maior que 5, podemos escrever `df[df['A']>5]`.
**Filtrar** apenas certas linhas por critério. Por exemplo, para deixar apenas linhas com a coluna `A` maior que 5, podemos escrever `df[df['A']>5]`.
> **Nota**: A forma como a filtragem funciona é a seguinte. A expressão `df['A']<5` retorna uma série booleana, que indica se a expressão é `True` ou `False` para cada elemento da série original `df['A']`. Quando a série booleana é usada como índice, ela retorna um subconjunto de linhas no DataFrame. Assim, não é possível usar expressões booleanas arbitrárias do Python, por exemplo, escrever `df[df['A']>5 and df['A']<7]` estaria errado. Em vez disso, você deve usar a operação especial `&` na série booleana, escrevendo `df[(df['A']>5) & (df['A']<7)]` (*os parênteses são importantes aqui*).
> **Nota**: O modo como o filtro funciona é o seguinte. A expressão `df['A']<5` retorna uma série booleana, que indica se a expressão é `True` ou `False` para cada elemento da série original `df['A']`. Quando a série booleana é usada como índice, retorna um subconjunto de linhas do DataFrame. Assim, não é possível usar uma expressão booleana arbitrária do Python, por exemplo, escrever `df[df['A']>5 and df['A']<7]` está errado. Em vez disso, deve usar a operação especial `&` sobre as séries booleanas, escrevendo `df[(df['A']>5) & (df['A']<7)]` (*os parênteses são importantes aqui*).
**Criar novas colunas computáveis**. Podemos facilmente criar novas colunas computáveis para nosso DataFrame usando expressões intuitivas como esta:
**Criar novas colunas calculáveis**. Podemos facilmente criar novas colunas computáveis para o nosso DataFrame usando expressões intuitivas como esta:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Este exemplo calcula a divergência de A em relação ao seu valor médio. O que realmente acontece aqui é que estamos calculando uma série e, em seguida, atribuímos essa série ao lado esquerdo, criando outra coluna. Assim, não podemos usar operações que não sejam compatíveis com séries, por exemplo, o código abaixo está errado:
```
Este exemplo calcula a divergência de A em relação ao seu valor médio. O que acontece aqui é que calculamos uma série, e depois atribuímos essa série ao lado esquerdo, criando outra coluna. Assim, não podemos usar quaisquer operações que não sejam compatíveis com séries, por exemplo, o código abaixo está errado:
```python
# Wrong code -> df['ADescr'] = "Low" if df['A'] <5else"Hi"
df['LenB'] = len(df['B']) # <-Wrong result
```
O último exemplo, embora seja sintaticamente correto, nos dá um resultado errado, porque atribui o comprimento da série `B` a todos os valores na coluna, e não o comprimento dos elementos individuais como pretendíamos.
# Código errado -> df['ADescr'] = "Low" se df['A'] <5senão"Hi"
df['LenB'] = len(df['B']) # <-Resultado errado
```
O exemplo anterior, apesar de ser sintaticamente correto, fornece um resultado incorreto porque atribui o comprimento da série `B` a todos os valores na coluna, e não o comprimento dos elementos individuais como pretendíamos.
Se precisarmos calcular expressões complexas como esta, podemos usar a função `apply`. O último exemplo pode ser escrito da seguinte forma:
Se precisarmos calcular expressões complexas como esta, podemos usar a função `apply`. O último exemplo pode ser escrito da seguinte maneira:
```python
df['LenB'] = df['B'].apply(lambda x : len(x))
# or
# ou
df['LenB'] = df['B'].apply(len)
```
```
Após as operações acima, terminaremos com o seguinte DataFrame:
Após as operações acima, obteremos o seguinte DataFrame:
| | A | B | DivA | LenB |
| --- | --- | ------ | ---- | ---- |
| 0 | 1 | I | -4.0 | 1 |
| 1 | 2 | gosto | -3.0 | 4 |
| 2 | 3 | de | -2.0 | 2 |
| 3 | 4 | usar | -1.0 | 3 |
| 1 | 2 | like | -3.0 | 4 |
| 2 | 3 | to | -2.0 | 2 |
| 3 | 4 | use | -1.0 | 3 |
| 4 | 5 | Python | 0.0 | 6 |
| 5 | 6 | e | 1.0 | 3 |
| 5 | 6 | and | 1.0 | 3 |
| 6 | 7 | Pandas | 2.0 | 6 |
| 7 | 8 | muito | 3.0 | 4 |
| 8 | 9 | mesmo | 4.0 | 4 |
| 7 | 8 | very | 3.0 | 4 |
| 8 | 9 | much | 4.0 | 4 |
**Selecionar linhas com base em números** pode ser feito usando o construto `iloc`. Por exemplo, para selecionar as primeiras 5 linhas do DataFrame:
**Selecionar linhas com base em números** pode ser feito usando a construção `iloc`. Por exemplo, para selecionar as primeiras 5 linhas do DataFrame:
```python
df.iloc[:5]
```
```
**Agrupamento** é frequentemente usado para obter um resultado semelhante às*tabelas dinâmicas* no Excel. Suponha que queremos calcular o valor médio da coluna `A` para cada número dado de `LenB`. Então podemos agrupar nosso DataFrame por `LenB` e chamar `mean`:
**Agrupamento** é muitas vezes usado para obter um resultado semelhante a*tabelas dinâmicas* no Excel. Suponha que queremos calcular o valor médio da coluna `A` para cada determinado número de `LenB`. Então podemos agrupar o nosso DataFrame por `LenB` e chamar `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Se precisarmos calcular a média e o número de elementos no grupo, então podemos usar a função mais complexa `aggregate`:
```
Se precisarmos calcular a média e o número de elementos no grupo, podemos usar uma função `aggregate`maiscomplexa:
@ -189,93 +191,98 @@ Isso nos dá a seguinte tabela:
| 4 | 3 | 6.333333 |
| 6 | 2 | 6.000000 |
### Obtendo Dados
Já vimos como é fácil construir Series e DataFrames a partir de objetos Python. No entanto, os dados geralmente vêm na forma de um ficheiro de texto ou uma tabela Excel. Felizmente, o Pandas oferece-nos uma maneira simples de carregar dados do disco. Por exemplo, ler um ficheiro CSV é tão simples como isto:
### Obter Dados
Vimos como é fácil construir Series e DataFrames a partir de objetos Python. No entanto, os dados geralmente vêm na forma de um ficheiro de texto ou uma tabela Excel. Felizmente, o Pandas oferece-nos uma forma simples de carregar dados do disco. Por exemplo, ler um ficheiro CSV é tão simples como isto:
```python
df = pd.read_csv('file.csv')
```
Veremos mais exemplos de como carregar dados, incluindo obtê-los de sites externos, na seção "Desafio".
```
Veremos mais exemplos de carregamento de dados, incluindo obtê-los de sites externos, na secção "Desafio"
### Impressão e Visualização
### Impressão e Gráficos
Um Cientista de Dados frequentemente precisa explorar os dados, por isso é importante ser capaz de visualizá-los. Quando o DataFrame é grande, muitas vezes queremos apenas garantir que estamos a fazer tudo corretamente, imprimindo as primeiras linhas. Isto pode ser feito chamando `df.head()`. Se estiver a executar no Jupyter Notebook, ele imprimirá o DataFrame numa forma tabular agradável.
Um Cientista de Dados frequentemente tem de explorar os dados, por isso é importante ser capaz de os visualizar. Quando o DataFrame é grande, muitas vezes queremos apenas garantir que estamos a fazer tudo corretamente imprimindo as primeiras linhas. Isto pode ser feito chamando `df.head()`. Se estiver a executá-lo no Jupyter Notebook, ele irá imprimir o DataFrame numa forma tabular agradável.
Também já vimos o uso da função `plot` para visualizar algumas colunas. Embora `plot` seja muito útil para muitas tarefas e suporte diferentes tipos de gráficos através do parâmetro `kind=`, pode sempre usar a biblioteca `matplotlib` diretamente para criar algo mais complexo. Vamos abordar a visualização de dados em detalhe em lições separadas do curso.
Também vimos o uso da função `plot` para visualizar algumas colunas. Embora `plot` seja muito útil para muitas tarefas, e suporte muitos tipos diferentes de gráficos via o parâmetro `kind=`, pode sempre usar diretamente a biblioteca `matplotlib` para traçar algo mais complexo. Cobriremos visualização de dados em detalhe em aulas separadas do curso.
Este resumo cobre os conceitos mais importantes do Pandas, no entanto, a biblioteca é muito rica e não há limites para o que pode fazer com ela! Vamos agora aplicar este conhecimento para resolver um problema específico.
Esta visão geral cobre os conceitos mais importantes do Pandas, no entanto, a biblioteca é muito rica, e não há limite para o que pode fazer com ela! Vamos agora aplicar este conhecimento para resolver um problema específico.
## 🚀 Desafio 1: Analisar a Propagação da COVID
## 🚀 Desafio 1: Analisando a Propagação da COVID
O primeiro problema em que nos vamos focar é o modelo de propagação epidémica da COVID-19. Para isso, usaremos os dados sobre o número de indivíduos infetados em diferentes países, fornecidos pelo [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) da [Universidade Johns Hopkins](https://jhu.edu/). O conjunto de dados está disponível neste [repositório GitHub](https://github.com/CSSEGISandData/COVID-19).
O primeiro problema em que nos iremos focar é a modelação da propagação epidémica da COVID-19. Para isso, iremos usar os dados sobre o número de indivíduos infetados em diferentes países, fornecidos pelo [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) da [Universidade Johns Hopkins](https://jhu.edu/). O conjunto de dados está disponível em [este Repositório GitHub](https://github.com/CSSEGISandData/COVID-19).
Como queremos demonstrar como lidar com dados, convidamo-lo a abrir [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) e lê-lo de cima para baixo. Pode também executar as células e realizar alguns desafios que deixámos para si no final.
Como queremos demonstrar como lidar com dados, convidamo-lo a abrir [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) e lê-lo de cima a baixo. Também pode executar as células e fazer alguns desafios que deixámos para si no final.

> Se não sabe como executar código no Jupyter Notebook, veja [este artigo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
> Se não sabe como executar código no Jupyter Notebook, dê uma vista de olhos a [este artigo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Trabalhar com Dados Não Estruturados
Embora os dados frequentemente venham em forma tabular, em alguns casos precisamos de lidar com dados menos estruturados, como texto ou imagens. Neste caso, para aplicar as técnicas de processamento de dados que vimos acima, precisamos de **extrair** dados estruturados. Aqui estão alguns exemplos:
Embora os dados frequentemente venham em forma tabular, nalguns casos precisamos de lidar com dados menos estruturados, como por exemplo texto ou imagens. Neste caso, para aplicar as técnicas de processamento de dados que vimos acima, precisamos de **extrair** de alguma forma dados estruturados. Aqui ficam alguns exemplos:
* Extrair palavras-chave de texto e verificar com que frequência essas palavras aparecem
* Usar redes neurais para extrair informações sobre objetos numa imagem
* Obter informações sobre emoções de pessoas num feed de câmara de vídeo
* Extrair palavras-chave de texto, e ver com que frequência essas palavras-chave aparecem
* Usar redes neurais para extrair informação sobre objetos numa imagem
* Obter informação sobre emoções das pessoas numa transmissão de vídeo de câmara
## 🚀 Desafio 2: Analisar Artigos sobre COVID
## 🚀 Desafio 2: Analisando Artigos sobre a COVID
Neste desafio, continuaremos com o tema da pandemia de COVID e focar-nos-emos no processamento de artigos científicos sobre o assunto. Existe o [Conjunto de Dados CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) com mais de 7000 (à data de escrita) artigos sobre COVID, disponível com metadados e resumos (e para cerca de metade deles também está disponível o texto completo).
Neste desafio, continuaremos com o tema da pandemia COVID, focando-nos no processamento de artigos científicos sobre o assunto. Existe o [Dataset CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) com mais de 7000 (à data de escrita) artigos sobre a COVID, disponível com metadados e resumos (e para cerca da metade deles também o texto completo fornecido).
Um exemplo completo de análise deste conjunto de dados usando o serviço cognitivo [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) é descrito [neste post de blog](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Vamos discutir uma versão simplificada desta análise.
Um exemplo completo de análise deste conjunto de dados usando o serviço cognitivo [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) está descrito [neste post no blog](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Discutiremos uma versão simplificada desta análise.
> **NOTE**: Não fornecemos uma cópia do conjunto de dados como parte deste repositório. Pode precisar de fazer o download do ficheiro [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) deste [conjunto de dados no Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Pode ser necessário registar-se no Kaggle. Também pode fazer o download do conjunto de dados sem registo [a partir daqui](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), mas incluirá todos os textos completos além do ficheiro de metadados.
> **NOTA**: Não fornecemos uma cópia do conjunto de dados como parte deste repositório. Poderá primeiro precisar de descarregar o ficheiro [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) de [este dataset no Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Pode ser necessária a registração no Kaggle. Pode também descarregar o dataset sem registo [aqui](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), mas incluirá todos os textos completos para além do ficheiro de metadados.
Abra [`notebook-papers.ipynb`](notebook-papers.ipynb) e leia-o de cima para baixo. Pode também executar as células e realizar alguns desafios que deixámos para si no final.
Abra [`notebook-papers.ipynb`](notebook-papers.ipynb) e leia-o do início ao fim. Também pode executar as células e fazer alguns desafios que deixámos para si no final.

## Processamento de Dados de Imagem
Recentemente, foram desenvolvidos modelos de IA muito poderosos que permitem compreender imagens. Existem muitas tarefas que podem ser resolvidas usando redes neurais pré-treinadas ou serviços na nuvem. Alguns exemplos incluem:
Recentemente, foram desenvolvidos modelos de IA muito poderosos que nos permitem compreender imagens. Há muitas tarefas que podem ser resolvidas usando redes neurais pré-treinadas, ou serviços na nuvem. Alguns exemplos incluem:
* **Classificação de Imagens**, que pode ajudá-lo a categorizar a imagem numa das classes pré-definidas. Pode facilmente treinar os seus próprios classificadores de imagem usando serviços como [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Deteção de Objetos** para identificar diferentes objetos na imagem. Serviços como [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) podem detetar vários objetos comuns, e pode treinar um modelo [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) para detetar objetos específicos de interesse.
* **Deteção de Faces**, incluindo idade, género e deteção de emoções. Isto pode ser feito através da [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
* **Classificação de Imagens**, que pode ajudá-lo a categorizar a imagem numa das classes pré-definidas. Pode treinar facilmente os seus próprios classificadores de imagem usando serviços como [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Deteção de Objetos** para detetar diferentes objetos na imagem. Serviços como [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) podem detetar vários objetos comuns, e pode treinar um modelo [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) para detetar objetos específicos do seu interesse.
* **Deteção de Rosto**, incluindo deteção de Idade, Género e Emoção. Isto pode ser feito via [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Todos esses serviços na nuvem podem ser chamados usando [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), e assim podem ser facilmente incorporados no seu fluxo de trabalho de exploração de dados.
Todos esses serviços na nuvem podem ser chamados usando [SDKs Python](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), podendo assim ser facilmente incorporados no seu fluxo de exploração de dados.
Aqui estão alguns exemplos de exploração de dados a partir de fontes de dados de imagem:
* No post de blog [Como Aprender Ciência de Dados sem Programação](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) exploramos fotos do Instagram, tentando entender o que faz as pessoas darem mais "likes" a uma foto. Primeiro extraímos o máximo de informações das imagens possível usando [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), e depois usamos [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) para construir um modelo interpretável.
* No [Workshop de Estudos Faciais](https://github.com/CloudAdvocacy/FaceStudies) usamos a [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) para extrair emoções de pessoas em fotografias de eventos, com o objetivo de tentar entender o que faz as pessoas felizes.
Aqui ficam alguns exemplos de exploração de dados provenientes de fontes de dados de imagem:
* No post do blog [How to Learn Data Science without Coding](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) exploramos fotos do Instagram, tentando perceber o que faz as pessoas darem mais likes a uma fotografia. Primeiro extraímos o máximo de informação possível das imagens usando [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), e depois usamos o [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) para construir um modelo interpretável.
* No [Facial Studies Workshop](https://github.com/CloudAdvocacy/FaceStudies) usamos o [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) para extrair emoções das pessoas em fotografias de eventos, de forma a tentar perceber o que faz as pessoas felizes.
## Conclusão
Quer já tenha dados estruturados ou não estruturados, usando Python pode realizar todos os passos relacionados com o processamento e compreensão de dados. É provavelmente a maneira mais flexível de processar dados, e é por isso que a maioria dos cientistas de dados usa Python como sua ferramenta principal. Aprender Python em profundidade é provavelmente uma boa ideia se está sério sobre a sua jornada na ciência de dados!
Quer tenha dados estruturados ou não estruturados, usando Python pode realizar todos os passos relacionados com o processamento e compreensão de dados. É provavelmente a forma mais flexível de processamento de dados, e é por isso que a maioria dos cientistas de dados usa Python como a sua ferramenta principal. Aprender Python em profundidade é provavelmente uma boa ideia se estiver a levar a sério a sua jornada na ciência de dados!
* [Wes McKinney. Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython](https://www.amazon.com/gp/product/1491957662)
**Recursos Online**
* Tutorial oficial [10 minutos para Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Documentação sobre Visualização com Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Recursos Online**
* Tutorial oficial [10 minutes to Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
* [Documentação sobre Visualização no Pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html)
**Aprender Python**
* [Aprenda Python de forma divertida com Turtle Graphics e Fractais](https://github.com/shwars/pycourse)
* [Dê os seus primeiros passos com Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Caminho de Aprendizagem no [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
**Aprender Python**
* [Aprender Python de Forma Divertida com Turtle Graphics e Fractais](https://github.com/shwars/pycourse)
* [Dê os seus Primeiros Passos com Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Roteiro de Aprendizagem na [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## Tarefa
## Trabalho de Casa
[Realize um estudo mais detalhado dos dados para os desafios acima](assignment.md)
[Realize um estudo de dados mais detalhado para os desafios acima](assignment.md)
## Créditos
Esta lição foi criada com ♥️ por [Dmitry Soshnikov](http://soshnikov.com)
Esta aula foi escrita com ♥️ por [Dmitry Soshnikov](http://soshnikov.com)
---
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, é importante ter em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos pela precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas resultantes da utilização desta tradução.