update-translations
parent
c9a9a9ec52
commit
a89e994767
File diff suppressed because one or more lines are too long
@ -0,0 +1,22 @@
|
||||
# Introdução à Ciência de Dados
|
||||
|
||||

|
||||
> Foto por <a href="https://unsplash.com/@dawson2406?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Stephen Dawson</a> no <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||
|
||||
Nestes módulos, você descobrirá como a Ciência de Dados é definida e aprenderá sobre as considerações éticas que devem ser levadas em conta por um cientista de dados. Você também aprenderá como os dados são definidos e terá uma introdução a estatística e probabilidade, os principais domínios acadêmicos da Ciência de Dados.
|
||||
|
||||
### Tópicos
|
||||
|
||||
1. [Definindo Ciência de Dados](01-defining-data-science/README.md)
|
||||
2. [Ética na Ciência de Dados](02-ethics/README.md)
|
||||
3. [Definindo Dados](03-defining-data/README.md)
|
||||
4. [Introdução à Estatística e Probabilidade](04-stats-and-probability/README.md)
|
||||
|
||||
### Créditos
|
||||
|
||||
Esses módulos foram escritos com ❤️ por [Nitya Narasimhan](https://twitter.com/nitya) e [Dmitry Soshnikov](https://twitter.com/shwars).
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,190 @@
|
||||
# Trabalhando com Dados: Bancos de Dados Relacionais
|
||||
|
||||
| ](../../sketchnotes/05-RelationalData.png)|
|
||||
|:---:|
|
||||
| Trabalhando com Dados: Bancos de Dados Relacionais - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
É provável que você já tenha usado uma planilha no passado para armazenar informações. Você tinha um conjunto de linhas e colunas, onde as linhas continham as informações (ou dados), e as colunas descreviam as informações (às vezes chamadas de metadados). Um banco de dados relacional é construído sobre esse princípio básico de colunas e linhas em tabelas, permitindo que você tenha informações distribuídas em várias tabelas. Isso permite trabalhar com dados mais complexos, evitar duplicação e ter flexibilidade na forma como você explora os dados. Vamos explorar os conceitos de um banco de dados relacional.
|
||||
|
||||
## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/8)
|
||||
|
||||
## Tudo começa com tabelas
|
||||
|
||||
Um banco de dados relacional tem em seu núcleo tabelas. Assim como na planilha, uma tabela é uma coleção de colunas e linhas. A linha contém os dados ou informações com os quais queremos trabalhar, como o nome de uma cidade ou a quantidade de chuva. As colunas descrevem os dados que armazenam.
|
||||
|
||||
Vamos começar nossa exploração iniciando uma tabela para armazenar informações sobre cidades. Podemos começar com o nome e o país delas. Você poderia armazenar isso em uma tabela da seguinte forma:
|
||||
|
||||
| Cidade | País |
|
||||
| -------- | ------------- |
|
||||
| Tóquio | Japão |
|
||||
| Atlanta | Estados Unidos|
|
||||
| Auckland | Nova Zelândia |
|
||||
|
||||
Observe que os nomes das colunas **cidade**, **país** e **população** descrevem os dados armazenados, e cada linha tem informações sobre uma cidade.
|
||||
|
||||
## As limitações de uma abordagem com uma única tabela
|
||||
|
||||
É provável que a tabela acima pareça relativamente familiar para você. Vamos começar a adicionar alguns dados adicionais ao nosso banco de dados em crescimento - a precipitação anual (em milímetros). Vamos focar nos anos 2018, 2019 e 2020. Se fôssemos adicioná-la para Tóquio, poderia ficar algo assim:
|
||||
|
||||
| Cidade | País | Ano | Quantidade |
|
||||
| ------ | ----- | ---- | ---------- |
|
||||
| Tóquio | Japão | 2020 | 1690 |
|
||||
| Tóquio | Japão | 2019 | 1874 |
|
||||
| Tóquio | Japão | 2018 | 1445 |
|
||||
|
||||
O que você percebe sobre nossa tabela? Você pode notar que estamos duplicando o nome e o país da cidade repetidamente. Isso pode ocupar bastante espaço de armazenamento e é em grande parte desnecessário ter várias cópias. Afinal, Tóquio tem apenas um nome que nos interessa.
|
||||
|
||||
OK, vamos tentar outra coisa. Vamos adicionar novas colunas para cada ano:
|
||||
|
||||
| Cidade | País | 2018 | 2019 | 2020 |
|
||||
| -------- | ------------- | ---- | ---- | ---- |
|
||||
| Tóquio | Japão | 1445 | 1874 | 1690 |
|
||||
| Atlanta | Estados Unidos| 1779 | 1111 | 1683 |
|
||||
| Auckland | Nova Zelândia | 1386 | 942 | 1176 |
|
||||
|
||||
Embora isso evite a duplicação de linhas, adiciona alguns outros desafios. Precisaríamos modificar a estrutura da nossa tabela toda vez que houver um novo ano. Além disso, à medida que nossos dados crescem, ter os anos como colunas tornará mais difícil recuperar e calcular valores.
|
||||
|
||||
É por isso que precisamos de várias tabelas e relacionamentos. Ao dividir nossos dados, podemos evitar duplicação e ter mais flexibilidade na forma como trabalhamos com eles.
|
||||
|
||||
## Os conceitos de relacionamentos
|
||||
|
||||
Vamos voltar aos nossos dados e determinar como queremos dividir as coisas. Sabemos que queremos armazenar o nome e o país das nossas cidades, então isso provavelmente funcionará melhor em uma tabela.
|
||||
|
||||
| Cidade | País |
|
||||
| -------- | ------------- |
|
||||
| Tóquio | Japão |
|
||||
| Atlanta | Estados Unidos|
|
||||
| Auckland | Nova Zelândia |
|
||||
|
||||
Mas antes de criarmos a próxima tabela, precisamos descobrir como referenciar cada cidade. Precisamos de alguma forma de identificador, ID ou (em termos técnicos de banco de dados) uma chave primária. Uma chave primária é um valor usado para identificar uma linha específica em uma tabela. Embora isso possa ser baseado em um valor em si (poderíamos usar o nome da cidade, por exemplo), quase sempre deve ser um número ou outro identificador. Não queremos que o id mude, pois isso quebraria o relacionamento. Você verá que na maioria dos casos a chave primária ou id será um número auto-gerado.
|
||||
|
||||
> ✅ Chave primária é frequentemente abreviada como PK
|
||||
|
||||
### cidades
|
||||
|
||||
| city_id | Cidade | País |
|
||||
| ------- | -------- | ------------- |
|
||||
| 1 | Tóquio | Japão |
|
||||
| 2 | Atlanta | Estados Unidos|
|
||||
| 3 | Auckland | Nova Zelândia |
|
||||
|
||||
> ✅ Você notará que usamos os termos "id" e "chave primária" de forma intercambiável durante esta lição. Os conceitos aqui se aplicam a DataFrames, que você explorará mais tarde. DataFrames não usam a terminologia de "chave primária", no entanto, você notará que eles se comportam de maneira muito semelhante.
|
||||
|
||||
Com nossa tabela de cidades criada, vamos armazenar a precipitação. Em vez de duplicar as informações completas sobre a cidade, podemos usar o id. Também devemos garantir que a tabela recém-criada tenha uma coluna *id*, pois todas as tabelas devem ter um id ou chave primária.
|
||||
|
||||
### precipitação
|
||||
|
||||
| rainfall_id | city_id | Ano | Quantidade |
|
||||
| ----------- | ------- | ---- | ---------- |
|
||||
| 1 | 1 | 2018 | 1445 |
|
||||
| 2 | 1 | 2019 | 1874 |
|
||||
| 3 | 1 | 2020 | 1690 |
|
||||
| 4 | 2 | 2018 | 1779 |
|
||||
| 5 | 2 | 2019 | 1111 |
|
||||
| 6 | 2 | 2020 | 1683 |
|
||||
| 7 | 3 | 2018 | 1386 |
|
||||
| 8 | 3 | 2019 | 942 |
|
||||
| 9 | 3 | 2020 | 1176 |
|
||||
|
||||
Observe a coluna **city_id** dentro da tabela recém-criada **precipitação**. Essa coluna contém valores que referenciam os IDs na tabela **cidades**. Em termos técnicos de dados relacionais, isso é chamado de **chave estrangeira**; é uma chave primária de outra tabela. Você pode pensar nisso apenas como uma referência ou um ponteiro. **city_id** 1 referencia Tóquio.
|
||||
|
||||
> [!NOTE]
|
||||
> Chave estrangeira é frequentemente abreviada como FK
|
||||
|
||||
## Recuperando os dados
|
||||
|
||||
Com nossos dados separados em duas tabelas, você pode estar se perguntando como os recuperamos. Se estivermos usando um banco de dados relacional como MySQL, SQL Server ou Oracle, podemos usar uma linguagem chamada Structured Query Language ou SQL. SQL (às vezes pronunciado sequel) é uma linguagem padrão usada para recuperar e modificar dados em um banco de dados relacional.
|
||||
|
||||
Para recuperar dados, você usa o comando `SELECT`. Em sua essência, você **seleciona** as colunas que deseja ver **da** tabela em que elas estão contidas. Se você quisesse exibir apenas os nomes das cidades, poderia usar o seguinte:
|
||||
|
||||
```sql
|
||||
SELECT city
|
||||
FROM cities;
|
||||
|
||||
-- Output:
|
||||
-- Tokyo
|
||||
-- Atlanta
|
||||
-- Auckland
|
||||
```
|
||||
|
||||
`SELECT` é onde você lista as colunas, e `FROM` é onde você lista as tabelas.
|
||||
|
||||
> [!NOTE]
|
||||
> A sintaxe SQL não diferencia maiúsculas de minúsculas, o que significa que `select` e `SELECT` significam a mesma coisa. No entanto, dependendo do tipo de banco de dados que você está usando, as colunas e tabelas podem ser sensíveis a maiúsculas e minúsculas. Como resultado, é uma boa prática sempre tratar tudo em programação como se fosse sensível a maiúsculas e minúsculas. Ao escrever consultas SQL, a convenção comum é colocar as palavras-chave em letras maiúsculas.
|
||||
|
||||
A consulta acima exibirá todas as cidades. Vamos imaginar que queremos exibir apenas cidades na Nova Zelândia. Precisamos de algum tipo de filtro. A palavra-chave SQL para isso é `WHERE`, ou "onde algo é verdadeiro".
|
||||
|
||||
```sql
|
||||
SELECT city
|
||||
FROM cities
|
||||
WHERE country = 'New Zealand';
|
||||
|
||||
-- Output:
|
||||
-- Auckland
|
||||
```
|
||||
|
||||
## Unindo dados
|
||||
|
||||
Até agora recuperamos dados de uma única tabela. Agora queremos juntar os dados de **cidades** e **precipitação**. Isso é feito *unindo* eles. Você efetivamente cria uma conexão entre as duas tabelas e combina os valores de uma coluna de cada tabela.
|
||||
|
||||
No nosso exemplo, vamos combinar a coluna **city_id** em **precipitação** com a coluna **city_id** em **cidades**. Isso combinará o valor da precipitação com sua respectiva cidade. O tipo de junção que faremos é chamado de junção *inner*, o que significa que se alguma linha não corresponder a nada da outra tabela, ela não será exibida. No nosso caso, toda cidade tem precipitação, então tudo será exibido.
|
||||
|
||||
Vamos recuperar a precipitação de 2019 para todas as nossas cidades.
|
||||
|
||||
Vamos fazer isso em etapas. A primeira etapa é unir os dados indicando as colunas para a conexão - **city_id** como destacado antes.
|
||||
|
||||
```sql
|
||||
SELECT cities.city
|
||||
rainfall.amount
|
||||
FROM cities
|
||||
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
|
||||
```
|
||||
|
||||
Destacamos as duas colunas que queremos, e o fato de querermos unir as tabelas pela **city_id**. Agora podemos adicionar a cláusula `WHERE` para filtrar apenas o ano de 2019.
|
||||
|
||||
```sql
|
||||
SELECT cities.city
|
||||
rainfall.amount
|
||||
FROM cities
|
||||
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
|
||||
WHERE rainfall.year = 2019
|
||||
|
||||
-- Output
|
||||
|
||||
-- city | amount
|
||||
-- -------- | ------
|
||||
-- Tokyo | 1874
|
||||
-- Atlanta | 1111
|
||||
-- Auckland | 942
|
||||
```
|
||||
|
||||
## Resumo
|
||||
|
||||
Bancos de dados relacionais são centrados em dividir informações entre várias tabelas que são então reunidas para exibição e análise. Isso proporciona um alto grau de flexibilidade para realizar cálculos e manipular dados de outras formas. Você viu os conceitos básicos de um banco de dados relacional e como realizar uma junção entre duas tabelas.
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Existem inúmeros bancos de dados relacionais disponíveis na internet. Você pode explorar os dados usando as habilidades que aprendeu acima.
|
||||
|
||||
## Quiz pós-aula
|
||||
|
||||
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/9)
|
||||
|
||||
## Revisão & Autoestudo
|
||||
|
||||
Existem vários recursos disponíveis no [Microsoft Learn](https://docs.microsoft.com/learn?WT.mc_id=academic-77958-bethanycheum) para você continuar sua exploração de SQL e conceitos de banco de dados relacional
|
||||
|
||||
- [Descrever conceitos de dados relacionais](https://docs.microsoft.com//learn/modules/describe-concepts-of-relational-data?WT.mc_id=academic-77958-bethanycheum)
|
||||
- [Comece a consultar com Transact-SQL](https://docs.microsoft.com//learn/paths/get-started-querying-with-transact-sql?WT.mc_id=academic-77958-bethanycheum) (Transact-SQL é uma versão do SQL)
|
||||
- [Conteúdo SQL no Microsoft Learn](https://docs.microsoft.com/learn/browse/?products=azure-sql-database%2Csql-server&expanded=azure&WT.mc_id=academic-77958-bethanycheum)
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Exibindo dados de aeroportos](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
||||
**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 automáticas 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.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
@ -0,0 +1,65 @@
|
||||
# Exibindo dados de aeroportos
|
||||
|
||||
Você recebeu um [banco de dados](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db) baseado em [SQLite](https://sqlite.org/index.html), que contém informações sobre aeroportos. O esquema está exibido abaixo. Você usará a [extensão SQLite](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum) no [Visual Studio Code](https://code.visualstudio.com?WT.mc_id=academic-77958-bethanycheum) para exibir informações sobre os aeroportos de diferentes cidades.
|
||||
|
||||
## Instruções
|
||||
|
||||
Para começar a tarefa, você precisará realizar algumas etapas. Será necessário instalar algumas ferramentas e baixar o banco de dados de exemplo.
|
||||
|
||||
### Configure seu sistema
|
||||
|
||||
Você pode usar o Visual Studio Code e a extensão SQLite para interagir com o banco de dados.
|
||||
|
||||
1. Acesse [code.visualstudio.com](https://code.visualstudio.com?WT.mc_id=academic-77958-bethanycheum) e siga as instruções para instalar o Visual Studio Code
|
||||
1. Instale a extensão [SQLite extension](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum) conforme instruído na página do Marketplace
|
||||
|
||||
### Baixe e abra o banco de dados
|
||||
|
||||
Em seguida, você fará o download e abrirá o banco de dados.
|
||||
|
||||
1. Baixe o [arquivo do banco de dados no GitHub](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db) e salve-o em um diretório
|
||||
1. Abra o Visual Studio Code
|
||||
1. Abra o banco de dados na extensão SQLite selecionando **Ctrl-Shift-P** (ou **Cmd-Shift-P** em um Mac) e digitando `SQLite: Open database`
|
||||
1. Selecione **Choose database from file** e abra o arquivo **airports.db** que você baixou anteriormente
|
||||
1. Após abrir o banco de dados (não haverá uma atualização visível na tela), crie uma nova janela de consulta selecionando **Ctrl-Shift-P** (ou **Cmd-Shift-P** em um Mac) e digitando `SQLite: New query`
|
||||
|
||||
Depois de abrir, a nova janela de consulta pode ser usada para executar instruções SQL no banco de dados. Você pode usar o comando **Ctrl-Shift-Q** (ou **Cmd-Shift-Q** em um Mac) para executar consultas no banco de dados.
|
||||
|
||||
> [!NOTE]
|
||||
> Para mais informações sobre a extensão SQLite, você pode consultar a [documentação](https://marketplace.visualstudio.com/items?itemName=alexcvzz.vscode-sqlite&WT.mc_id=academic-77958-bethanycheum)
|
||||
|
||||
## Esquema do banco de dados
|
||||
|
||||
O esquema de um banco de dados é o design e a estrutura de suas tabelas. O banco de dados **airports** possui duas tabelas, `cities`, que contém uma lista de cidades no Reino Unido e Irlanda, e `airports`, que contém a lista de todos os aeroportos. Como algumas cidades podem ter vários aeroportos, foram criadas duas tabelas para armazenar as informações. Neste exercício, você usará joins para exibir informações de diferentes cidades.
|
||||
|
||||
| Cities |
|
||||
| ---------------- |
|
||||
| id (PK, integer) |
|
||||
| city (text) |
|
||||
| country (text) |
|
||||
|
||||
| Airports |
|
||||
| -------------------------------- |
|
||||
| id (PK, integer) |
|
||||
| name (text) |
|
||||
| code (text) |
|
||||
| city_id (FK to id in **Cities**) |
|
||||
|
||||
## Tarefa
|
||||
|
||||
Crie consultas para retornar as seguintes informações:
|
||||
|
||||
1. todos os nomes de cidades na tabela `Cities`
|
||||
1. todas as cidades na Irlanda na tabela `Cities`
|
||||
1. todos os nomes de aeroportos com suas respectivas cidades e países
|
||||
1. todos os aeroportos em Londres, Reino Unido
|
||||
|
||||
## Rubrica
|
||||
|
||||
| Exemplar | Adequado | Necessita Melhorias |
|
||||
| ---------- | ---------- | ------------------- |
|
||||
|
||||
---
|
||||
|
||||
**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 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 autoritária. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,24 @@
|
||||
# Lucros da Soda
|
||||
|
||||
## Instruções
|
||||
|
||||
A planilha [Coca Cola Co](../../../../2-Working-With-Data/06-non-relational/CocaColaCo.xlsx) está faltando alguns cálculos. Sua tarefa é:
|
||||
|
||||
1. Calcular os lucros brutos dos anos fiscais de '15, '16, '17 e '18
|
||||
- Lucro Bruto = Receitas Operacionais Líquidas - Custo dos bens vendidos
|
||||
1. Calcular a média de todos os lucros brutos. Tente fazer isso com uma função.
|
||||
- Média = Soma dos lucros brutos dividida pelo número de anos fiscais (10)
|
||||
- Documentação sobre a [função MÉDIA](https://support.microsoft.com/en-us/office/average-function-047bac88-d466-426c-a32b-8f33eb960cf6)
|
||||
1. Este é um arquivo Excel, mas deve ser editável em qualquer plataforma de planilhas
|
||||
|
||||
[Crédito da fonte de dados para Yiyi Wang](https://www.kaggle.com/yiyiwang0826/cocacola-excel)
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | --- |
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,281 @@
|
||||
# Trabalhando com Dados: Python e a Biblioteca Pandas
|
||||
|
||||
|  ](../../sketchnotes/07-WorkWithPython.png) |
|
||||
| :-------------------------------------------------------------------------------------------------------: |
|
||||
| Trabalhando com Python - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
[](https://youtu.be/dZjWOGbsN4Y)
|
||||
|
||||
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:
|
||||
|
||||
* **[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.
|
||||
|
||||
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:
|
||||
|
||||
* [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)
|
||||
|
||||
Os dados podem vir em muitas formas. Nesta lição, consideraremos três formas de dados - **dados tabulares**, **texto** e **imagens**.
|
||||
|
||||
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.
|
||||
|
||||
## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/12)
|
||||
|
||||
## Dados Tabulares e Dataframes
|
||||
|
||||
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.
|
||||
|
||||
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 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
|
||||
|
||||
Aqui está um trecho de código que você normalmente usaria para importar essas bibliotecas no início do seu programa em 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
|
||||
```
|
||||
|
||||
Pandas é centrado em alguns conceitos básicos.
|
||||
|
||||
### 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.
|
||||
|
||||
> **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.
|
||||
|
||||
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:
|
||||
|
||||
```python
|
||||
start_date = "Jan 1, 2020"
|
||||
end_date = "Mar 31, 2020"
|
||||
idx = pd.date_range(start_date,end_date)
|
||||
print(f"Length of index is {len(idx)}")
|
||||
items_sold = pd.Series(np.random.randint(25,50,size=len(idx)),index=idx)
|
||||
items_sold.plot()
|
||||
```
|
||||

|
||||
|
||||
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:
|
||||
```python
|
||||
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
|
||||
```
|
||||
Quando somamos duas séries, obtemos o número total:
|
||||
```python
|
||||
total_items = items_sold.add(additional_items,fill_value=0)
|
||||
total_items.plot()
|
||||
```
|
||||

|
||||
|
||||
> **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.
|
||||
|
||||
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:
|
||||
```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:
|
||||
```python
|
||||
a = pd.Series(range(1,10))
|
||||
b = pd.Series(["I","like","to","play","games","and","will","not","change"],index=range(0,9))
|
||||
df = pd.DataFrame([a,b])
|
||||
```
|
||||
Isso criará uma tabela horizontal como esta:
|
||||
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
| --- | --- | ---- | --- | --- | ------ | --- | ------ | ---- | ---- |
|
||||
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
||||
| 1 | I | like | to | use | Python | and | Pandas | very | much |
|
||||
|
||||
Também podemos usar Series como colunas e especificar nomes de colunas usando um dicionário:
|
||||
```python
|
||||
df = pd.DataFrame({ 'A' : a, 'B' : b })
|
||||
```
|
||||
Isso nos dará uma tabela como esta:
|
||||
|
||||
| | A | B |
|
||||
| --- | --- | ------ |
|
||||
| 0 | 1 | I |
|
||||
| 1 | 2 | like |
|
||||
| 2 | 3 | to |
|
||||
| 3 | 4 | use |
|
||||
| 4 | 5 | Python |
|
||||
| 5 | 6 | and |
|
||||
| 6 | 7 | Pandas |
|
||||
| 7 | 8 | very |
|
||||
| 8 | 9 | much |
|
||||
|
||||
**Nota** que também podemos obter esse layout de tabela transpondo a tabela anterior, por exemplo, escrevendo
|
||||
```python
|
||||
df = pd.DataFrame([a,b]).T..rename(columns={ 0 : 'A', 1 : 'B' })
|
||||
```
|
||||
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 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.
|
||||
|
||||
**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]`.
|
||||
|
||||
> **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*).
|
||||
|
||||
**Criando 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:
|
||||
```python
|
||||
# Wrong code -> df['ADescr'] = "Low" if df['A'] < 5 else "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.
|
||||
|
||||
Se precisarmos calcular expressões complexas como esta, 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
|
||||
df['LenB'] = df['B'].apply(len)
|
||||
```
|
||||
|
||||
Após as operações acima, terminaremos com o seguinte DataFrame:
|
||||
|
||||
| | A | B | DivA | LenB |
|
||||
| --- | --- | ------ | ---- | ---- |
|
||||
| 0 | 1 | I | -4.0 | 1 |
|
||||
| 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 | and | 1.0 | 3 |
|
||||
| 6 | 7 | Pandas | 2.0 | 6 |
|
||||
| 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:
|
||||
```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`:
|
||||
```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`:
|
||||
```python
|
||||
df.groupby(by='LenB') \
|
||||
.aggregate({ 'DivA' : len, 'A' : lambda x: x.mean() }) \
|
||||
.rename(columns={ 'DivA' : 'Count', 'A' : 'Mean'})
|
||||
```
|
||||
Isso nos dá a seguinte tabela:
|
||||
|
||||
| LenB | Count | Mean |
|
||||
| ---- | ----- | -------- |
|
||||
| 1 | 1 | 1.000000 |
|
||||
| 2 | 1 | 3.000000 |
|
||||
| 3 | 2 | 5.000000 |
|
||||
| 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 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".
|
||||
|
||||
### Impressão e Visualização
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
## 🚀 Desafio 1: Analisando a Propagação da 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).
|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
> 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/).
|
||||
|
||||
## 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:
|
||||
|
||||
* 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
|
||||
|
||||
## 🚀 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).
|
||||
|
||||
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.
|
||||
|
||||
> **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.
|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
## Processando 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:
|
||||
|
||||
* **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).
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
## 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!
|
||||
|
||||
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/13)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
**Livros**
|
||||
* [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)
|
||||
|
||||
**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)
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Realize um estudo mais detalhado dos dados para os desafios acima](assignment.md)
|
||||
|
||||
## Créditos
|
||||
|
||||
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.
|
||||
@ -0,0 +1,28 @@
|
||||
# Tarefa de Processamento de Dados em Python
|
||||
|
||||
Nesta tarefa, pediremos que você desenvolva o código que começamos a criar em nossos desafios. A tarefa consiste em duas partes:
|
||||
|
||||
## Modelagem da Propagação da COVID-19
|
||||
|
||||
- [ ] Plote gráficos de *R* para 5-6 países diferentes em um único gráfico para comparação, ou usando vários gráficos lado a lado.
|
||||
- [ ] Veja como o número de mortes e recuperações se correlaciona com o número de casos infectados.
|
||||
- [ ] Descubra quanto tempo uma doença típica dura, correlacionando visualmente a taxa de infecção e a taxa de mortes e procurando por algumas anomalias. Pode ser necessário observar diferentes países para descobrir isso.
|
||||
- [ ] Calcule a taxa de fatalidade e como ela muda ao longo do tempo. *Você pode querer levar em conta a duração da doença em dias para deslocar uma série temporal antes de fazer os cálculos.*
|
||||
|
||||
## Análise de Artigos sobre COVID-19
|
||||
|
||||
- [ ] Construa uma matriz de co-ocorrência de diferentes medicamentos e veja quais medicamentos frequentemente aparecem juntos (ou seja, mencionados em um mesmo resumo). Você pode modificar o código para construir a matriz de co-ocorrência de medicamentos e diagnósticos.
|
||||
- [ ] Visualize essa matriz usando um mapa de calor.
|
||||
- [ ] Como um objetivo adicional, visualize a co-ocorrência de medicamentos usando [diagrama de cordas](https://en.wikipedia.org/wiki/Chord_diagram). [Esta biblioteca](https://pypi.org/project/chord/) pode ajudar você a desenhar um diagrama de cordas.
|
||||
- [ ] Como outro objetivo adicional, extraia as dosagens de diferentes medicamentos (como **400mg** em *tomar 400mg de cloroquina diariamente*) usando expressões regulares e construa um dataframe que mostre diferentes dosagens para diferentes medicamentos. **Nota**: considere valores numéricos que estejam em proximidade textual ao nome do medicamento.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | -- |
|
||||
Todas as tarefas estão completas, ilustradas graficamente e explicadas, incluindo pelo menos um dos dois objetivos adicionais | Mais de 5 tarefas estão completas, nenhum objetivo adicional foi tentado, ou os resultados não estão claros | Menos de 5 (mas mais de 3) tarefas estão completas, as visualizações não ajudam a demonstrar o ponto
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,336 @@
|
||||
# Trabalhando com Dados: Preparação de Dados
|
||||
|
||||
| ](../../sketchnotes/08-DataPreparation.png)|
|
||||
|:---:|
|
||||
|Preparação de Dados - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
## [Quiz Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/14)
|
||||
|
||||
Dependendo da sua origem, os dados brutos podem conter algumas inconsistências que dificultam a análise e modelagem. Em outras palavras, esses dados podem ser categorizados como "sujos" e precisarão ser limpos. Esta lição foca em técnicas para limpar e transformar os dados, lidando com desafios como dados ausentes, imprecisos ou incompletos. Os tópicos abordados nesta lição utilizam Python e a biblioteca Pandas e serão [demonstrados no notebook](../../../../2-Working-With-Data/08-data-preparation/notebook.ipynb) dentro deste diretório.
|
||||
|
||||
## A importância de limpar os dados
|
||||
|
||||
- **Facilidade de uso e reutilização**: Quando os dados estão devidamente organizados e normalizados, é mais fácil pesquisá-los, utilizá-los e compartilhá-los com outras pessoas.
|
||||
|
||||
- **Consistência**: A ciência de dados frequentemente exige trabalhar com mais de um conjunto de dados, onde conjuntos de diferentes fontes precisam ser combinados. Garantir que cada conjunto de dados individual tenha uma padronização comum assegura que os dados ainda sejam úteis quando todos forem mesclados em um único conjunto.
|
||||
|
||||
- **Precisão do modelo**: Dados que foram limpos melhoram a precisão dos modelos que dependem deles.
|
||||
|
||||
## Objetivos e estratégias comuns de limpeza
|
||||
|
||||
- **Explorar um conjunto de dados**: A exploração de dados, que será abordada em uma [lição futura](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/4-Data-Science-Lifecycle/15-analyzing), pode ajudar a identificar dados que precisam ser limpos. Observar visualmente os valores dentro de um conjunto de dados pode estabelecer expectativas sobre o restante ou fornecer uma ideia dos problemas que podem ser resolvidos. A exploração pode envolver consultas básicas, visualizações e amostragem.
|
||||
|
||||
- **Formatação**: Dependendo da origem, os dados podem ter inconsistências na forma como são apresentados. Isso pode causar problemas na busca e representação dos valores, onde eles são vistos no conjunto de dados, mas não são devidamente representados em visualizações ou resultados de consultas. Problemas comuns de formatação envolvem resolver espaços em branco, datas e tipos de dados. Resolver problemas de formatação geralmente depende das pessoas que estão utilizando os dados. Por exemplo, os padrões de como datas e números são apresentados podem variar de país para país.
|
||||
|
||||
- **Duplicações**: Dados que possuem mais de uma ocorrência podem produzir resultados imprecisos e geralmente devem ser removidos. Isso pode ocorrer frequentemente ao combinar dois ou mais conjuntos de dados. No entanto, há casos em que duplicações em conjuntos combinados contêm informações adicionais que podem precisar ser preservadas.
|
||||
|
||||
- **Dados ausentes**: Dados ausentes podem causar imprecisões, bem como resultados fracos ou tendenciosos. Às vezes, isso pode ser resolvido com um "recarregamento" dos dados, preenchendo os valores ausentes com cálculos e código, como Python, ou simplesmente removendo o valor e os dados correspondentes. Existem várias razões para os dados estarem ausentes, e as ações tomadas para resolver esses valores ausentes podem depender de como e por que eles desapareceram.
|
||||
|
||||
## Explorando informações de DataFrame
|
||||
> **Objetivo de aprendizado:** Ao final desta subseção, você deve estar confortável em encontrar informações gerais sobre os dados armazenados em DataFrames do pandas.
|
||||
|
||||
Depois de carregar seus dados no pandas, eles provavelmente estarão em um DataFrame (consulte a [lição anterior](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python#dataframe) para uma visão detalhada). No entanto, se o conjunto de dados no seu DataFrame tiver 60.000 linhas e 400 colunas, como começar a entender com o que você está lidando? Felizmente, o [pandas](https://pandas.pydata.org/) fornece ferramentas convenientes para rapidamente visualizar informações gerais sobre um DataFrame, além das primeiras e últimas linhas.
|
||||
|
||||
Para explorar essa funcionalidade, importaremos a biblioteca Python scikit-learn e usaremos um conjunto de dados icônico: o **conjunto de dados Iris**.
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
from sklearn.datasets import load_iris
|
||||
|
||||
iris = load_iris()
|
||||
iris_df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
|
||||
```
|
||||
| |sepal length (cm)|sepal width (cm)|petal length (cm)|petal width (cm)|
|
||||
|----------------------------------------|-----------------|----------------|-----------------|----------------|
|
||||
|0 |5.1 |3.5 |1.4 |0.2 |
|
||||
|1 |4.9 |3.0 |1.4 |0.2 |
|
||||
|2 |4.7 |3.2 |1.3 |0.2 |
|
||||
|3 |4.6 |3.1 |1.5 |0.2 |
|
||||
|4 |5.0 |3.6 |1.4 |0.2 |
|
||||
|
||||
- **DataFrame.info**: Para começar, o método `info()` é usado para imprimir um resumo do conteúdo presente em um `DataFrame`. Vamos dar uma olhada neste conjunto de dados para ver o que temos:
|
||||
```python
|
||||
iris_df.info()
|
||||
```
|
||||
```
|
||||
RangeIndex: 150 entries, 0 to 149
|
||||
Data columns (total 4 columns):
|
||||
# Column Non-Null Count Dtype
|
||||
--- ------ -------------- -----
|
||||
0 sepal length (cm) 150 non-null float64
|
||||
1 sepal width (cm) 150 non-null float64
|
||||
2 petal length (cm) 150 non-null float64
|
||||
3 petal width (cm) 150 non-null float64
|
||||
dtypes: float64(4)
|
||||
memory usage: 4.8 KB
|
||||
```
|
||||
A partir disso, sabemos que o conjunto de dados *Iris* tem 150 entradas em quatro colunas, sem entradas nulas. Todos os dados estão armazenados como números de ponto flutuante de 64 bits.
|
||||
|
||||
- **DataFrame.head()**: Em seguida, para verificar o conteúdo real do `DataFrame`, usamos o método `head()`. Vamos ver como são as primeiras linhas do nosso `iris_df`:
|
||||
```python
|
||||
iris_df.head()
|
||||
```
|
||||
```
|
||||
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
|
||||
0 5.1 3.5 1.4 0.2
|
||||
1 4.9 3.0 1.4 0.2
|
||||
2 4.7 3.2 1.3 0.2
|
||||
3 4.6 3.1 1.5 0.2
|
||||
4 5.0 3.6 1.4 0.2
|
||||
```
|
||||
- **DataFrame.tail()**: Por outro lado, para verificar as últimas linhas do `DataFrame`, usamos o método `tail()`:
|
||||
```python
|
||||
iris_df.tail()
|
||||
```
|
||||
```
|
||||
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
|
||||
145 6.7 3.0 5.2 2.3
|
||||
146 6.3 2.5 5.0 1.9
|
||||
147 6.5 3.0 5.2 2.0
|
||||
148 6.2 3.4 5.4 2.3
|
||||
149 5.9 3.0 5.1 1.8
|
||||
```
|
||||
> **Conclusão:** Apenas olhando os metadados sobre as informações em um DataFrame ou os primeiros e últimos valores, você pode ter uma ideia imediata sobre o tamanho, formato e conteúdo dos dados com os quais está lidando.
|
||||
|
||||
## Lidando com Dados Ausentes
|
||||
> **Objetivo de aprendizado:** Ao final desta subseção, você deve saber como substituir ou remover valores nulos de DataFrames.
|
||||
|
||||
Na maioria das vezes, os conjuntos de dados que você deseja usar (ou precisa usar) têm valores ausentes. Como os dados ausentes são tratados envolve sutis compensações que podem afetar sua análise final e os resultados no mundo real.
|
||||
|
||||
O pandas lida com valores ausentes de duas maneiras. A primeira, que você já viu em seções anteriores, é `NaN`, ou Not a Number. Este é, na verdade, um valor especial que faz parte da especificação IEEE de ponto flutuante e é usado apenas para indicar valores de ponto flutuante ausentes.
|
||||
|
||||
Para valores ausentes que não sejam de ponto flutuante, o pandas usa o objeto `None` do Python. Embora possa parecer confuso encontrar dois tipos diferentes de valores que essencialmente dizem a mesma coisa, há razões programáticas sólidas para essa escolha de design e, na prática, isso permite que o pandas ofereça um bom compromisso para a grande maioria dos casos. Apesar disso, tanto `None` quanto `NaN` possuem restrições que você precisa estar atento em relação ao uso deles.
|
||||
|
||||
Confira mais sobre `NaN` e `None` no [notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb)!
|
||||
|
||||
- **Detectando valores nulos**: No `pandas`, os métodos `isnull()` e `notnull()` são suas principais ferramentas para detectar dados nulos. Ambos retornam máscaras booleanas sobre seus dados. Usaremos `numpy` para valores `NaN`:
|
||||
```python
|
||||
import numpy as np
|
||||
|
||||
example1 = pd.Series([0, np.nan, '', None])
|
||||
example1.isnull()
|
||||
```
|
||||
```
|
||||
0 False
|
||||
1 True
|
||||
2 False
|
||||
3 True
|
||||
dtype: bool
|
||||
```
|
||||
Observe atentamente a saída. Alguma coisa te surpreende? Embora `0` seja um nulo aritmético, ele é, no entanto, um número inteiro perfeitamente válido, e o pandas o trata como tal. `''` é um pouco mais sutil. Embora o tenhamos usado na Seção 1 para representar um valor de string vazio, ele é, no entanto, um objeto de string e não uma representação de nulo para o pandas.
|
||||
|
||||
Agora, vamos inverter isso e usar esses métodos de uma maneira mais parecida com a prática. Você pode usar máscaras booleanas diretamente como um índice de ``Series`` ou ``DataFrame``, o que pode ser útil ao trabalhar com valores ausentes (ou presentes) isolados.
|
||||
|
||||
> **Conclusão**: Tanto os métodos `isnull()` quanto `notnull()` produzem resultados semelhantes quando usados em `DataFrame`s: eles mostram os resultados e o índice desses resultados, o que será extremamente útil ao lidar com seus dados.
|
||||
|
||||
- **Removendo valores nulos**: Além de identificar valores ausentes, o pandas fornece um meio conveniente de remover valores nulos de `Series` e `DataFrame`s. (Particularmente em conjuntos de dados grandes, muitas vezes é mais aconselhável simplesmente remover valores ausentes [NA] da sua análise do que lidar com eles de outras maneiras.) Para ver isso em ação, vamos voltar ao `example1`:
|
||||
```python
|
||||
example1 = example1.dropna()
|
||||
example1
|
||||
```
|
||||
```
|
||||
0 0
|
||||
2
|
||||
dtype: object
|
||||
```
|
||||
Observe que isso deve se parecer com sua saída de `example3[example3.notnull()]`. A diferença aqui é que, em vez de apenas indexar os valores mascarados, `dropna` removeu esses valores ausentes da `Series` `example1`.
|
||||
|
||||
Como os `DataFrame`s têm duas dimensões, eles oferecem mais opções para remover dados.
|
||||
|
||||
```python
|
||||
example2 = pd.DataFrame([[1, np.nan, 7],
|
||||
[2, 5, 8],
|
||||
[np.nan, 6, 9]])
|
||||
example2
|
||||
```
|
||||
| | 0 | 1 | 2 |
|
||||
|------|---|---|---|
|
||||
|0 |1.0|NaN|7 |
|
||||
|1 |2.0|5.0|8 |
|
||||
|2 |NaN|6.0|9 |
|
||||
|
||||
(Você percebeu que o pandas converteu duas das colunas para ponto flutuante para acomodar os `NaN`s?)
|
||||
|
||||
Você não pode remover um único valor de um `DataFrame`, então precisa remover linhas ou colunas inteiras. Dependendo do que você está fazendo, pode querer fazer uma coisa ou outra, e o pandas oferece opções para ambas. Como na ciência de dados as colunas geralmente representam variáveis e as linhas representam observações, é mais provável que você remova linhas de dados; a configuração padrão para `dropna()` é remover todas as linhas que contêm quaisquer valores nulos:
|
||||
|
||||
```python
|
||||
example2.dropna()
|
||||
```
|
||||
```
|
||||
0 1 2
|
||||
1 2.0 5.0 8
|
||||
```
|
||||
Se necessário, você pode remover valores NA de colunas. Use `axis=1` para fazer isso:
|
||||
```python
|
||||
example2.dropna(axis='columns')
|
||||
```
|
||||
```
|
||||
2
|
||||
0 7
|
||||
1 8
|
||||
2 9
|
||||
```
|
||||
Observe que isso pode remover muitos dados que você pode querer manter, especialmente em conjuntos de dados menores. E se você quiser remover apenas linhas ou colunas que contenham vários ou até mesmo todos os valores nulos? Você especifica essas configurações em `dropna` com os parâmetros `how` e `thresh`.
|
||||
|
||||
Por padrão, `how='any'` (se você quiser verificar por si mesmo ou ver quais outros parâmetros o método possui, execute `example4.dropna?` em uma célula de código). Você poderia, alternativamente, especificar `how='all'` para remover apenas linhas ou colunas que contenham todos os valores nulos. Vamos expandir nosso exemplo de `DataFrame` para ver isso em ação.
|
||||
|
||||
```python
|
||||
example2[3] = np.nan
|
||||
example2
|
||||
```
|
||||
| |0 |1 |2 |3 |
|
||||
|------|---|---|---|---|
|
||||
|0 |1.0|NaN|7 |NaN|
|
||||
|1 |2.0|5.0|8 |NaN|
|
||||
|2 |NaN|6.0|9 |NaN|
|
||||
|
||||
O parâmetro `thresh` oferece um controle mais refinado: você define o número de valores *não nulos* que uma linha ou coluna precisa ter para ser mantida:
|
||||
```python
|
||||
example2.dropna(axis='rows', thresh=3)
|
||||
```
|
||||
```
|
||||
0 1 2 3
|
||||
1 2.0 5.0 8 NaN
|
||||
```
|
||||
Aqui, a primeira e última linha foram removidas, porque contêm apenas dois valores não nulos.
|
||||
|
||||
- **Preenchendo valores nulos**: Dependendo do seu conjunto de dados, às vezes faz mais sentido preencher valores nulos com valores válidos do que removê-los. Você poderia usar `isnull` para fazer isso diretamente, mas isso pode ser trabalhoso, especialmente se você tiver muitos valores para preencher. Como essa é uma tarefa comum na ciência de dados, o pandas fornece `fillna`, que retorna uma cópia da `Series` ou `DataFrame` com os valores ausentes substituídos por um de sua escolha. Vamos criar outra `Series` de exemplo para ver como isso funciona na prática.
|
||||
```python
|
||||
example3 = pd.Series([1, np.nan, 2, None, 3], index=list('abcde'))
|
||||
example3
|
||||
```
|
||||
```
|
||||
a 1.0
|
||||
b NaN
|
||||
c 2.0
|
||||
d NaN
|
||||
e 3.0
|
||||
dtype: float64
|
||||
```
|
||||
Você pode preencher todas as entradas nulas com um único valor, como `0`:
|
||||
```python
|
||||
example3.fillna(0)
|
||||
```
|
||||
```
|
||||
a 1.0
|
||||
b 0.0
|
||||
c 2.0
|
||||
d 0.0
|
||||
e 3.0
|
||||
dtype: float64
|
||||
```
|
||||
Você pode **preencher para frente** valores nulos, usando o último valor válido para preencher um nulo:
|
||||
```python
|
||||
example3.fillna(method='ffill')
|
||||
```
|
||||
```
|
||||
a 1.0
|
||||
b 1.0
|
||||
c 2.0
|
||||
d 2.0
|
||||
e 3.0
|
||||
dtype: float64
|
||||
```
|
||||
Você também pode **preencher para trás** para propagar o próximo valor válido para trás e preencher um nulo:
|
||||
```python
|
||||
example3.fillna(method='bfill')
|
||||
```
|
||||
```
|
||||
a 1.0
|
||||
b 2.0
|
||||
c 2.0
|
||||
d 3.0
|
||||
e 3.0
|
||||
dtype: float64
|
||||
```
|
||||
Como você pode imaginar, isso funciona da mesma forma com `DataFrame`s, mas você também pode especificar um `axis` ao longo do qual preencher valores nulos. Usando novamente o `example2` anteriormente:
|
||||
```python
|
||||
example2.fillna(method='ffill', axis=1)
|
||||
```
|
||||
```
|
||||
0 1 2 3
|
||||
0 1.0 1.0 7.0 7.0
|
||||
1 2.0 5.0 8.0 8.0
|
||||
2 NaN 6.0 9.0 9.0
|
||||
```
|
||||
Observe que, quando um valor anterior não está disponível para preenchimento para frente, o valor nulo permanece.
|
||||
> **Conclusão:** Existem várias maneiras de lidar com valores ausentes em seus conjuntos de dados. A estratégia específica que você utiliza (removê-los, substituí-los ou até mesmo como substituí-los) deve ser determinada pelas particularidades desses dados. Você desenvolverá uma melhor percepção de como lidar com valores ausentes à medida que trabalhar e interagir mais com conjuntos de dados.
|
||||
## Removendo dados duplicados
|
||||
|
||||
> **Objetivo de aprendizado:** Ao final desta subseção, você deve estar confortável em identificar e remover valores duplicados de DataFrames.
|
||||
|
||||
Além de dados ausentes, você frequentemente encontrará dados duplicados em conjuntos de dados do mundo real. Felizmente, o `pandas` oferece uma maneira fácil de detectar e remover entradas duplicadas.
|
||||
|
||||
- **Identificando duplicados: `duplicated`**: Você pode identificar facilmente valores duplicados usando o método `duplicated` no pandas, que retorna uma máscara booleana indicando se uma entrada em um `DataFrame` é um duplicado de uma anterior. Vamos criar outro exemplo de `DataFrame` para ver isso em ação.
|
||||
```python
|
||||
example4 = pd.DataFrame({'letters': ['A','B'] * 2 + ['B'],
|
||||
'numbers': [1, 2, 1, 3, 3]})
|
||||
example4
|
||||
```
|
||||
| |letters|numbers|
|
||||
|------|-------|-------|
|
||||
|0 |A |1 |
|
||||
|1 |B |2 |
|
||||
|2 |A |1 |
|
||||
|3 |B |3 |
|
||||
|4 |B |3 |
|
||||
|
||||
```python
|
||||
example4.duplicated()
|
||||
```
|
||||
```
|
||||
0 False
|
||||
1 False
|
||||
2 True
|
||||
3 False
|
||||
4 True
|
||||
dtype: bool
|
||||
```
|
||||
- **Removendo duplicados: `drop_duplicates`:** simplesmente retorna uma cópia dos dados para os quais todos os valores `duplicated` são `False`:
|
||||
```python
|
||||
example4.drop_duplicates()
|
||||
```
|
||||
```
|
||||
letters numbers
|
||||
0 A 1
|
||||
1 B 2
|
||||
3 B 3
|
||||
```
|
||||
Tanto `duplicated` quanto `drop_duplicates` consideram todas as colunas por padrão, mas você pode especificar que eles examinem apenas um subconjunto de colunas no seu `DataFrame`:
|
||||
```python
|
||||
example4.drop_duplicates(['letters'])
|
||||
```
|
||||
```
|
||||
letters numbers
|
||||
0 A 1
|
||||
1 B 2
|
||||
```
|
||||
|
||||
> **Conclusão:** Remover dados duplicados é uma parte essencial de quase todos os projetos de ciência de dados. Dados duplicados podem alterar os resultados de suas análises e fornecer resultados imprecisos!
|
||||
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Todo o material discutido está disponível como um [Jupyter Notebook](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/2-Working-With-Data/08-data-preparation/notebook.ipynb). Além disso, há exercícios presentes após cada seção, experimente resolvê-los!
|
||||
|
||||
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/15)
|
||||
|
||||
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Existem muitas maneiras de descobrir e abordar a preparação de seus dados para análise e modelagem, e a limpeza dos dados é uma etapa importante que exige uma experiência prática. Experimente esses desafios do Kaggle para explorar técnicas que esta lição não abordou.
|
||||
|
||||
- [Desafio de Limpeza de Dados: Análise de Datas](https://www.kaggle.com/rtatman/data-cleaning-challenge-parsing-dates/)
|
||||
|
||||
- [Desafio de Limpeza de Dados: Escalar e Normalizar Dados](https://www.kaggle.com/rtatman/data-cleaning-challenge-scale-and-normalize-data)
|
||||
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Avaliando Dados de um Formulário](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,19 @@
|
||||
# Avaliando Dados de um Formulário
|
||||
|
||||
Um cliente tem testado um [formulário simples](../../../../2-Working-With-Data/08-data-preparation/index.html) para coletar alguns dados básicos sobre sua base de clientes. Eles trouxeram os resultados para você validar os dados que foram coletados. Você pode abrir a página `index.html` no navegador para dar uma olhada no formulário.
|
||||
|
||||
Foi fornecido a você um [conjunto de dados em formato csv](../../../../data/form.csv) que contém entradas do formulário, bem como algumas visualizações básicas. O cliente apontou que algumas das visualizações parecem incorretas, mas não sabem como resolvê-las. Você pode explorá-las no [notebook da tarefa](assignment.ipynb).
|
||||
|
||||
## Instruções
|
||||
|
||||
Use as técnicas desta lição para fazer recomendações sobre o formulário, garantindo que ele capture informações precisas e consistentes.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | --- |
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,22 @@
|
||||
# Trabalhando com Dados
|
||||
|
||||

|
||||
> Foto por <a href="https://unsplash.com/@swimstaralex?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexander Sinn</a> no <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||
|
||||
Nestas lições, você aprenderá algumas das maneiras de gerenciar, manipular e usar dados em aplicações. Você aprenderá sobre bancos de dados relacionais e não relacionais e como os dados podem ser armazenados neles. Aprenderá os fundamentos de trabalhar com Python para gerenciar dados e descobrirá algumas das muitas formas de usar Python para gerenciar e explorar dados.
|
||||
|
||||
### Tópicos
|
||||
|
||||
1. [Bancos de dados relacionais](05-relational-databases/README.md)
|
||||
2. [Bancos de dados não relacionais](06-non-relational/README.md)
|
||||
3. [Trabalhando com Python](07-python/README.md)
|
||||
4. [Preparando dados](08-data-preparation/README.md)
|
||||
|
||||
### Créditos
|
||||
|
||||
Estas lições foram escritas com ❤️ por [Christopher Harrison](https://twitter.com/geektrainer), [Dmitry Soshnikov](https://twitter.com/shwars) e [Jasmine Greenaway](https://twitter.com/paladique)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,209 @@
|
||||
# Visualizando Quantidades
|
||||
|
||||
| ](../../sketchnotes/09-Visualizing-Quantities.png)|
|
||||
|:---:|
|
||||
| Visualizando Quantidades - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Nesta lição, você explorará como usar uma das muitas bibliotecas disponíveis em Python para aprender a criar visualizações interessantes em torno do conceito de quantidade. Usando um conjunto de dados limpo sobre os pássaros de Minnesota, você pode aprender muitos fatos interessantes sobre a vida selvagem local.
|
||||
## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/16)
|
||||
|
||||
## Observe a envergadura com Matplotlib
|
||||
|
||||
Uma excelente biblioteca para criar gráficos e diagramas, tanto simples quanto sofisticados, é [Matplotlib](https://matplotlib.org/stable/index.html). Em termos gerais, o processo de plotar dados usando essas bibliotecas inclui identificar as partes do seu dataframe que você deseja analisar, realizar as transformações necessárias nos dados, atribuir valores aos eixos x e y, decidir o tipo de gráfico a ser exibido e, finalmente, mostrar o gráfico. O Matplotlib oferece uma grande variedade de visualizações, mas para esta lição, vamos focar nas mais apropriadas para visualizar quantidades: gráficos de linha, dispersão e barras.
|
||||
|
||||
> ✅ Use o melhor gráfico para se adequar à estrutura dos seus dados e à história que você quer contar.
|
||||
> - Para analisar tendências ao longo do tempo: linha
|
||||
> - Para comparar valores: barra, coluna, pizza, dispersão
|
||||
> - Para mostrar como as partes se relacionam com o todo: pizza
|
||||
> - Para mostrar a distribuição dos dados: dispersão, barra
|
||||
> - Para mostrar tendências: linha, coluna
|
||||
> - Para mostrar relações entre valores: linha, dispersão, bolha
|
||||
|
||||
Se você tem um conjunto de dados e precisa descobrir a quantidade de um determinado item, uma das primeiras tarefas será inspecionar seus valores.
|
||||
|
||||
✅ Existem ótimos 'cheat sheets' disponíveis para Matplotlib [aqui](https://matplotlib.org/cheatsheets/cheatsheets.pdf).
|
||||
|
||||
## Construa um gráfico de linha sobre os valores de envergadura das asas dos pássaros
|
||||
|
||||
Abra o arquivo `notebook.ipynb` na raiz da pasta desta lição e adicione uma célula.
|
||||
|
||||
> Nota: os dados estão armazenados na raiz deste repositório na pasta `/data`.
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
birds = pd.read_csv('../../data/birds.csv')
|
||||
birds.head()
|
||||
```
|
||||
Esses dados são uma mistura de texto e números:
|
||||
|
||||
| | Nome | NomeCientífico | Categoria | Ordem | Família | Gênero | StatusConservação | MinComprimento | MaxComprimento | MinPesoCorporal | MaxPesoCorporal | MinEnvergadura | MaxEnvergadura |
|
||||
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
|
||||
| 0 | Pato-de-bico-preto | Dendrocygna autumnalis | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
|
||||
| 1 | Pato-de-bico-fulvo | Dendrocygna bicolor | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
|
||||
| 2 | Ganso-da-neve | Anser caerulescens | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
|
||||
| 3 | Ganso-de-Ross | Anser rossii | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
|
||||
| 4 | Ganso-de-fronte-branca | Anser albifrons | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
|
||||
|
||||
Vamos começar plotando alguns dos dados numéricos usando um gráfico de linha básico. Suponha que você queira visualizar a envergadura máxima desses pássaros interessantes.
|
||||
|
||||
```python
|
||||
wingspan = birds['MaxWingspan']
|
||||
wingspan.plot()
|
||||
```
|
||||

|
||||
|
||||
O que você percebe imediatamente? Parece haver pelo menos um valor discrepante - que envergadura impressionante! Uma envergadura de 2300 centímetros equivale a 23 metros - há Pterodátilos vagando por Minnesota? Vamos investigar.
|
||||
|
||||
Embora você possa fazer uma classificação rápida no Excel para encontrar esses valores discrepantes, que provavelmente são erros de digitação, continue o processo de visualização trabalhando diretamente no gráfico.
|
||||
|
||||
Adicione rótulos ao eixo x para mostrar quais tipos de pássaros estão em questão:
|
||||
|
||||
```
|
||||
plt.title('Max Wingspan in Centimeters')
|
||||
plt.ylabel('Wingspan (CM)')
|
||||
plt.xlabel('Birds')
|
||||
plt.xticks(rotation=45)
|
||||
x = birds['Name']
|
||||
y = birds['MaxWingspan']
|
||||
|
||||
plt.plot(x, y)
|
||||
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
Mesmo com a rotação dos rótulos ajustada para 45 graus, há muitos para serem lidos. Vamos tentar uma estratégia diferente: rotular apenas os valores discrepantes e definir os rótulos dentro do gráfico. Você pode usar um gráfico de dispersão para criar mais espaço para os rótulos:
|
||||
|
||||
```python
|
||||
plt.title('Max Wingspan in Centimeters')
|
||||
plt.ylabel('Wingspan (CM)')
|
||||
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
|
||||
|
||||
for i in range(len(birds)):
|
||||
x = birds['Name'][i]
|
||||
y = birds['MaxWingspan'][i]
|
||||
plt.plot(x, y, 'bo')
|
||||
if birds['MaxWingspan'][i] > 500:
|
||||
plt.text(x, y * (1 - 0.05), birds['Name'][i], fontsize=12)
|
||||
|
||||
plt.show()
|
||||
```
|
||||
O que está acontecendo aqui? Você usou `tick_params` para ocultar os rótulos inferiores e, em seguida, criou um loop sobre o conjunto de dados dos pássaros. Plotando o gráfico com pequenos pontos azuis redondos usando `bo`, você verificou se algum pássaro tinha uma envergadura máxima acima de 500 e exibiu seu rótulo ao lado do ponto, caso positivo. Você deslocou os rótulos um pouco no eixo y (`y * (1 - 0.05)`) e usou o nome do pássaro como rótulo.
|
||||
|
||||
O que você descobriu?
|
||||
|
||||

|
||||
## Filtre seus dados
|
||||
|
||||
Tanto a Águia-careca quanto o Falcão-das-pradarias, embora provavelmente sejam pássaros muito grandes, parecem estar com valores incorretos, com um `0` extra adicionado à sua envergadura máxima. É improvável que você encontre uma Águia-careca com uma envergadura de 25 metros, mas, se encontrar, por favor, nos avise! Vamos criar um novo dataframe sem esses dois valores discrepantes:
|
||||
|
||||
```python
|
||||
plt.title('Max Wingspan in Centimeters')
|
||||
plt.ylabel('Wingspan (CM)')
|
||||
plt.xlabel('Birds')
|
||||
plt.tick_params(axis='both',which='both',labelbottom=False,bottom=False)
|
||||
for i in range(len(birds)):
|
||||
x = birds['Name'][i]
|
||||
y = birds['MaxWingspan'][i]
|
||||
if birds['Name'][i] not in ['Bald eagle', 'Prairie falcon']:
|
||||
plt.plot(x, y, 'bo')
|
||||
plt.show()
|
||||
```
|
||||
|
||||
Ao filtrar os valores discrepantes, seus dados agora estão mais coesos e compreensíveis.
|
||||
|
||||

|
||||
|
||||
Agora que temos um conjunto de dados mais limpo, pelo menos em termos de envergadura, vamos descobrir mais sobre esses pássaros.
|
||||
|
||||
Embora gráficos de linha e dispersão possam exibir informações sobre valores de dados e suas distribuições, queremos pensar nos valores inerentes a este conjunto de dados. Você poderia criar visualizações para responder às seguintes perguntas sobre quantidade:
|
||||
|
||||
> Quantas categorias de pássaros existem e quais são seus números?
|
||||
> Quantos pássaros estão extintos, ameaçados, raros ou comuns?
|
||||
> Quantos existem dos vários gêneros e ordens na terminologia de Linnaeus?
|
||||
## Explore gráficos de barras
|
||||
|
||||
Gráficos de barras são práticos quando você precisa mostrar agrupamentos de dados. Vamos explorar as categorias de pássaros que existem neste conjunto de dados para ver qual é a mais comum em número.
|
||||
|
||||
No arquivo do notebook, crie um gráfico de barras básico.
|
||||
|
||||
✅ Nota: você pode filtrar os dois pássaros discrepantes que identificamos na seção anterior, corrigir o erro de digitação na envergadura deles ou deixá-los para esses exercícios que não dependem dos valores de envergadura.
|
||||
|
||||
Se você quiser criar um gráfico de barras, pode selecionar os dados nos quais deseja focar. Gráficos de barras podem ser criados a partir de dados brutos:
|
||||
|
||||
```python
|
||||
birds.plot(x='Category',
|
||||
kind='bar',
|
||||
stacked=True,
|
||||
title='Birds of Minnesota')
|
||||
|
||||
```
|
||||

|
||||
|
||||
Este gráfico de barras, no entanto, é ilegível porque há muitos dados não agrupados. Você precisa selecionar apenas os dados que deseja plotar, então vamos observar o comprimento dos pássaros com base em sua categoria.
|
||||
|
||||
Filtre seus dados para incluir apenas a categoria dos pássaros.
|
||||
|
||||
✅ Observe que você usa Pandas para gerenciar os dados e, em seguida, deixa o Matplotlib fazer o gráfico.
|
||||
|
||||
Como há muitas categorias, você pode exibir este gráfico verticalmente e ajustar sua altura para acomodar todos os dados:
|
||||
|
||||
```python
|
||||
category_count = birds.value_counts(birds['Category'].values, sort=True)
|
||||
plt.rcParams['figure.figsize'] = [6, 12]
|
||||
category_count.plot.barh()
|
||||
```
|
||||

|
||||
|
||||
Este gráfico de barras mostra uma boa visão do número de pássaros em cada categoria. Num piscar de olhos, você vê que o maior número de pássaros nesta região está na categoria Patos/Gansos/AvesAquáticas. Minnesota é a 'terra dos 10.000 lagos', então isso não é surpreendente!
|
||||
|
||||
✅ Experimente outros contagens neste conjunto de dados. Algo te surpreende?
|
||||
|
||||
## Comparando dados
|
||||
|
||||
Você pode tentar diferentes comparações de dados agrupados criando novos eixos. Experimente uma comparação do MaxComprimento de um pássaro, com base em sua categoria:
|
||||
|
||||
```python
|
||||
maxlength = birds['MaxLength']
|
||||
plt.barh(y=birds['Category'], width=maxlength)
|
||||
plt.rcParams['figure.figsize'] = [6, 12]
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
Nada é surpreendente aqui: beija-flores têm o menor MaxComprimento em comparação com Pelicanos ou Gansos. É bom quando os dados fazem sentido lógico!
|
||||
|
||||
Você pode criar visualizações mais interessantes de gráficos de barras sobrepondo dados. Vamos sobrepor Comprimento Mínimo e Máximo em uma determinada categoria de pássaros:
|
||||
|
||||
```python
|
||||
minLength = birds['MinLength']
|
||||
maxLength = birds['MaxLength']
|
||||
category = birds['Category']
|
||||
|
||||
plt.barh(category, maxLength)
|
||||
plt.barh(category, minLength)
|
||||
|
||||
plt.show()
|
||||
```
|
||||
Neste gráfico, você pode ver o intervalo por categoria de pássaros do Comprimento Mínimo e Máximo. Você pode dizer com segurança que, dados esses dados, quanto maior o pássaro, maior seu intervalo de comprimento. Fascinante!
|
||||
|
||||

|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Este conjunto de dados de pássaros oferece uma riqueza de informações sobre diferentes tipos de pássaros dentro de um ecossistema específico. Pesquise na internet e veja se consegue encontrar outros conjuntos de dados relacionados a pássaros. Pratique a construção de gráficos e diagramas sobre esses pássaros para descobrir fatos que você não conhecia.
|
||||
|
||||
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/17)
|
||||
|
||||
## Revisão & Autoestudo
|
||||
|
||||
Esta primeira lição deu a você algumas informações sobre como usar Matplotlib para visualizar quantidades. Pesquise outras maneiras de trabalhar com conjuntos de dados para visualização. [Plotly](https://github.com/plotly/plotly.py) é uma que não abordaremos nessas lições, então dê uma olhada no que ela pode oferecer.
|
||||
## Tarefa
|
||||
|
||||
[Linhas, Dispersões e Barras](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Linhas, Dispersões e Barras
|
||||
|
||||
## Instruções
|
||||
|
||||
Nesta lição, você trabalhou com gráficos de linha, dispersões e gráficos de barras para mostrar fatos interessantes sobre este conjunto de dados. Nesta tarefa, aprofunde-se no conjunto de dados para descobrir um fato sobre um tipo específico de pássaro. Por exemplo, crie um notebook visualizando todos os dados interessantes que você puder encontrar sobre Gansos-da-neve. Use os três tipos de gráficos mencionados acima para contar uma história no seu notebook.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | -- |
|
||||
Um notebook é apresentado com boas anotações, narrativa sólida e gráficos atraentes | O notebook está faltando um desses elementos | O notebook está faltando dois desses elementos
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,92 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Vamos aprender sobre pássaros\n",
|
||||
"\n",
|
||||
"## Introdução\n",
|
||||
"\n",
|
||||
"Os pássaros são criaturas fascinantes que podem ser encontrados em quase todos os lugares do mundo. Eles vêm em uma variedade de formas, tamanhos e cores, e desempenham papéis importantes em nossos ecossistemas.\n",
|
||||
"\n",
|
||||
"[!NOTE] Este guia é apenas uma introdução ao mundo dos pássaros. Para informações mais detalhadas, consulte fontes especializadas.\n",
|
||||
"\n",
|
||||
"## Características dos pássaros\n",
|
||||
"\n",
|
||||
"Os pássaros possuem várias características únicas que os diferenciam de outros animais:\n",
|
||||
"\n",
|
||||
"- **Penas**: As penas ajudam os pássaros a voar, manter-se aquecidos e até se camuflar.\n",
|
||||
"- **Bico**: O formato do bico varia dependendo da dieta do pássaro.\n",
|
||||
"- **Ovos**: Todos os pássaros põem ovos, geralmente em ninhos.\n",
|
||||
"- **Voo**: A maioria dos pássaros pode voar, embora existam exceções como o avestruz e o pinguim.\n",
|
||||
"\n",
|
||||
"[!TIP] Observe os pássaros em seu ambiente natural para aprender mais sobre seus comportamentos.\n",
|
||||
"\n",
|
||||
"## Tipos de pássaros\n",
|
||||
"\n",
|
||||
"Existem milhares de espécies de pássaros, mas aqui estão alguns grupos principais:\n",
|
||||
"\n",
|
||||
"- **Passeriformes**: Incluem pardais, canários e outros pássaros pequenos.\n",
|
||||
"- **Rapinantes**: Como águias e falcões, conhecidos por sua visão aguçada e habilidades de caça.\n",
|
||||
"- **Aquáticos**: Pássaros como patos e pelicanos que vivem perto da água.\n",
|
||||
"- **Noturnos**: Corujas e outros pássaros que são ativos à noite.\n",
|
||||
"\n",
|
||||
"[!WARNING] Não tente se aproximar de pássaros selvagens sem o devido cuidado. Eles podem se sentir ameaçados.\n",
|
||||
"\n",
|
||||
"## Por que estudar pássaros?\n",
|
||||
"\n",
|
||||
"Estudar pássaros pode ser uma atividade gratificante por várias razões:\n",
|
||||
"\n",
|
||||
"- **Conservação**: Entender os pássaros ajuda a proteger espécies ameaçadas.\n",
|
||||
"- **Ciência**: Os pássaros são importantes para pesquisas sobre evolução e comportamento animal.\n",
|
||||
"- **Lazer**: A observação de pássaros é um passatempo relaxante e educativo.\n",
|
||||
"\n",
|
||||
"[!IMPORTANT] Sempre respeite os habitats naturais dos pássaros ao observá-los.\n",
|
||||
"\n",
|
||||
"## Conclusão\n",
|
||||
"\n",
|
||||
"Os pássaros são uma parte essencial do nosso mundo natural. Aprender sobre eles não apenas enriquece nosso conhecimento, mas também nos ajuda a apreciar a beleza e a complexidade da vida ao nosso redor.\n",
|
||||
"\n",
|
||||
"[!CAUTION] Certifique-se de seguir as leis locais ao interagir com pássaros ou seus habitats.\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Aviso Legal**: \nEste 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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"orig_nbformat": 4,
|
||||
"language_info": {
|
||||
"name": "python",
|
||||
"version": "3.7.0",
|
||||
"mimetype": "text/x-python",
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"pygments_lexer": "ipython3",
|
||||
"nbconvert_exporter": "python",
|
||||
"file_extension": ".py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3.7.0 64-bit"
|
||||
},
|
||||
"interpreter": {
|
||||
"hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "33e5c5d3f0630388e20f2e161bd4cdf3",
|
||||
"translation_date": "2025-09-01T22:30:24+00:00",
|
||||
"source_file": "3-Data-Visualization/09-visualization-quantities/notebook.ipynb",
|
||||
"language_code": "br"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,208 @@
|
||||
# Visualizando Distribuições
|
||||
|
||||
| ](../../sketchnotes/10-Visualizing-Distributions.png)|
|
||||
|:---:|
|
||||
| Visualizando Distribuições - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Na lição anterior, você aprendeu alguns fatos interessantes sobre um conjunto de dados sobre os pássaros de Minnesota. Você encontrou alguns dados errôneos ao visualizar outliers e analisou as diferenças entre categorias de pássaros com base no comprimento máximo.
|
||||
|
||||
## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/18)
|
||||
## Explore o conjunto de dados dos pássaros
|
||||
|
||||
Outra maneira de explorar os dados é analisando sua distribuição, ou como os dados estão organizados ao longo de um eixo. Talvez, por exemplo, você queira aprender sobre a distribuição geral, para este conjunto de dados, da envergadura máxima ou da massa corporal máxima dos pássaros de Minnesota.
|
||||
|
||||
Vamos descobrir alguns fatos sobre as distribuições de dados neste conjunto de dados. No arquivo _notebook.ipynb_ na raiz da pasta desta lição, importe Pandas, Matplotlib e seus dados:
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
birds = pd.read_csv('../../data/birds.csv')
|
||||
birds.head()
|
||||
```
|
||||
|
||||
| | Nome | NomeCientífico | Categoria | Ordem | Família | Gênero | StatusConservação | ComprimentoMin | ComprimentoMax | MassaCorporalMin | MassaCorporalMax | EnvergaduraMin | EnvergaduraMax |
|
||||
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
|
||||
| 0 | Pato-silvo-de-barriga-preta | Dendrocygna autumnalis | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
|
||||
| 1 | Pato-silvo-ferrugem | Dendrocygna bicolor | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
|
||||
| 2 | Ganso-da-neve | Anser caerulescens | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
|
||||
| 3 | Ganso-de-Ross | Anser rossii | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
|
||||
| 4 | Ganso-de-testa-branca-maior | Anser albifrons | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
|
||||
|
||||
Em geral, você pode rapidamente observar como os dados estão distribuídos usando um gráfico de dispersão, como fizemos na lição anterior:
|
||||
|
||||
```python
|
||||
birds.plot(kind='scatter',x='MaxLength',y='Order',figsize=(12,8))
|
||||
|
||||
plt.title('Max Length per Order')
|
||||
plt.ylabel('Order')
|
||||
plt.xlabel('Max Length')
|
||||
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
Isso fornece uma visão geral da distribuição do comprimento corporal por ordem de pássaros, mas não é a maneira ideal de exibir distribuições reais. Essa tarefa geralmente é realizada criando um histograma.
|
||||
|
||||
## Trabalhando com histogramas
|
||||
|
||||
O Matplotlib oferece ótimas maneiras de visualizar a distribuição de dados usando histogramas. Esse tipo de gráfico é semelhante a um gráfico de barras, onde a distribuição pode ser vista pelo aumento e diminuição das barras. Para construir um histograma, você precisa de dados numéricos. Para criar um histograma, você pode plotar um gráfico definindo o tipo como 'hist' para histograma. Este gráfico mostra a distribuição de MassaCorporalMax para o intervalo de dados numéricos de todo o conjunto de dados. Dividindo o array de dados em pequenos intervalos, ele pode exibir a distribuição dos valores dos dados:
|
||||
|
||||
```python
|
||||
birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
Como você pode ver, a maioria dos 400+ pássaros neste conjunto de dados está na faixa de menos de 2000 para sua Massa Corporal Máxima. Obtenha mais informações sobre os dados alterando o parâmetro `bins` para um número maior, como 30:
|
||||
|
||||
```python
|
||||
birds['MaxBodyMass'].plot(kind = 'hist', bins = 30, figsize = (12,12))
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
Este gráfico mostra a distribuição de forma um pouco mais detalhada. Um gráfico menos inclinado para a esquerda poderia ser criado garantindo que você selecione apenas dados dentro de um determinado intervalo:
|
||||
|
||||
Filtre seus dados para obter apenas os pássaros cuja massa corporal seja inferior a 60 e mostre 40 `bins`:
|
||||
|
||||
```python
|
||||
filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]
|
||||
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
✅ Experimente outros filtros e pontos de dados. Para ver a distribuição completa dos dados, remova o filtro `['MaxBodyMass']` para mostrar distribuições rotuladas.
|
||||
|
||||
O histograma oferece algumas melhorias de cor e rotulagem interessantes para experimentar também:
|
||||
|
||||
Crie um histograma 2D para comparar a relação entre duas distribuições. Vamos comparar `MaxBodyMass` vs. `MaxLength`. O Matplotlib oferece uma maneira integrada de mostrar convergência usando cores mais brilhantes:
|
||||
|
||||
```python
|
||||
x = filteredBirds['MaxBodyMass']
|
||||
y = filteredBirds['MaxLength']
|
||||
|
||||
fig, ax = plt.subplots(tight_layout=True)
|
||||
hist = ax.hist2d(x, y)
|
||||
```
|
||||
Parece haver uma correlação esperada entre esses dois elementos ao longo de um eixo esperado, com um ponto particularmente forte de convergência:
|
||||
|
||||

|
||||
|
||||
Os histogramas funcionam bem por padrão para dados numéricos. E se você precisar ver distribuições de acordo com dados textuais?
|
||||
## Explore o conjunto de dados para distribuições usando dados textuais
|
||||
|
||||
Este conjunto de dados também inclui boas informações sobre a categoria do pássaro, seu gênero, espécie e família, bem como seu status de conservação. Vamos explorar essas informações de conservação. Qual é a distribuição dos pássaros de acordo com seu status de conservação?
|
||||
|
||||
> ✅ No conjunto de dados, vários acrônimos são usados para descrever o status de conservação. Esses acrônimos vêm das [Categorias da Lista Vermelha da IUCN](https://www.iucnredlist.org/), uma organização que cataloga o status das espécies.
|
||||
>
|
||||
> - CR: Criticamente Ameaçado
|
||||
> - EN: Ameaçado
|
||||
> - EX: Extinto
|
||||
> - LC: Pouco Preocupante
|
||||
> - NT: Quase Ameaçado
|
||||
> - VU: Vulnerável
|
||||
|
||||
Esses valores são baseados em texto, então você precisará fazer uma transformação para criar um histograma. Usando o dataframe filteredBirds, exiba seu status de conservação ao lado de sua Envergadura Mínima. O que você observa?
|
||||
|
||||
```python
|
||||
x1 = filteredBirds.loc[filteredBirds.ConservationStatus=='EX', 'MinWingspan']
|
||||
x2 = filteredBirds.loc[filteredBirds.ConservationStatus=='CR', 'MinWingspan']
|
||||
x3 = filteredBirds.loc[filteredBirds.ConservationStatus=='EN', 'MinWingspan']
|
||||
x4 = filteredBirds.loc[filteredBirds.ConservationStatus=='NT', 'MinWingspan']
|
||||
x5 = filteredBirds.loc[filteredBirds.ConservationStatus=='VU', 'MinWingspan']
|
||||
x6 = filteredBirds.loc[filteredBirds.ConservationStatus=='LC', 'MinWingspan']
|
||||
|
||||
kwargs = dict(alpha=0.5, bins=20)
|
||||
|
||||
plt.hist(x1, **kwargs, color='red', label='Extinct')
|
||||
plt.hist(x2, **kwargs, color='orange', label='Critically Endangered')
|
||||
plt.hist(x3, **kwargs, color='yellow', label='Endangered')
|
||||
plt.hist(x4, **kwargs, color='green', label='Near Threatened')
|
||||
plt.hist(x5, **kwargs, color='blue', label='Vulnerable')
|
||||
plt.hist(x6, **kwargs, color='gray', label='Least Concern')
|
||||
|
||||
plt.gca().set(title='Conservation Status', ylabel='Min Wingspan')
|
||||
plt.legend();
|
||||
```
|
||||
|
||||

|
||||
|
||||
Não parece haver uma boa correlação entre envergadura mínima e status de conservação. Teste outros elementos do conjunto de dados usando este método. Você encontra alguma correlação?
|
||||
|
||||
## Gráficos de densidade
|
||||
|
||||
Você pode ter notado que os histogramas que analisamos até agora são 'escalonados' e não fluem suavemente em um arco. Para mostrar um gráfico de densidade mais suave, você pode tentar um gráfico de densidade.
|
||||
|
||||
Para trabalhar com gráficos de densidade, familiarize-se com uma nova biblioteca de plotagem, [Seaborn](https://seaborn.pydata.org/generated/seaborn.kdeplot.html).
|
||||
|
||||
Carregando o Seaborn, experimente um gráfico de densidade básico:
|
||||
|
||||
```python
|
||||
import seaborn as sns
|
||||
import matplotlib.pyplot as plt
|
||||
sns.kdeplot(filteredBirds['MinWingspan'])
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
Você pode ver como o gráfico reflete o anterior para os dados de Envergadura Mínima; é apenas um pouco mais suave. De acordo com a documentação do Seaborn, "Em relação a um histograma, o KDE pode produzir um gráfico menos confuso e mais interpretável, especialmente ao desenhar várias distribuições. Mas ele tem o potencial de introduzir distorções se a distribuição subjacente for limitada ou não suave. Como um histograma, a qualidade da representação também depende da seleção de bons parâmetros de suavização." [fonte](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) Em outras palavras, outliers, como sempre, farão seus gráficos se comportarem mal.
|
||||
|
||||
Se você quisesse revisitar aquela linha irregular de MassaCorporalMax no segundo gráfico que construiu, poderia suavizá-la muito bem recriando-a usando este método:
|
||||
|
||||
```python
|
||||
sns.kdeplot(filteredBirds['MaxBodyMass'])
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
Se você quisesse uma linha suave, mas não muito suave, edite o parâmetro `bw_adjust`:
|
||||
|
||||
```python
|
||||
sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
|
||||
plt.show()
|
||||
```
|
||||

|
||||
|
||||
✅ Leia sobre os parâmetros disponíveis para este tipo de gráfico e experimente!
|
||||
|
||||
Este tipo de gráfico oferece visualizações explicativas muito bonitas. Com algumas linhas de código, por exemplo, você pode mostrar a densidade de massa corporal máxima por ordem de pássaros:
|
||||
|
||||
```python
|
||||
sns.kdeplot(
|
||||
data=filteredBirds, x="MaxBodyMass", hue="Order",
|
||||
fill=True, common_norm=False, palette="crest",
|
||||
alpha=.5, linewidth=0,
|
||||
)
|
||||
```
|
||||
|
||||

|
||||
|
||||
Você também pode mapear a densidade de várias variáveis em um único gráfico. Teste o ComprimentoMáximo e ComprimentoMínimo de um pássaro em comparação com seu status de conservação:
|
||||
|
||||
```python
|
||||
sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")
|
||||
```
|
||||
|
||||

|
||||
|
||||
Talvez valha a pena pesquisar se o agrupamento de pássaros 'Vulneráveis' de acordo com seus comprimentos é significativo ou não.
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Os histogramas são um tipo de gráfico mais sofisticado do que gráficos de dispersão, gráficos de barras ou gráficos de linhas básicos. Faça uma busca na internet para encontrar bons exemplos do uso de histogramas. Como eles são usados, o que demonstram e em quais campos ou áreas de estudo tendem a ser utilizados?
|
||||
|
||||
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/19)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Nesta lição, você usou o Matplotlib e começou a trabalhar com o Seaborn para mostrar gráficos mais sofisticados. Pesquise sobre `kdeplot` no Seaborn, uma "curva de densidade de probabilidade contínua em uma ou mais dimensões". Leia a [documentação](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) para entender como funciona.
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Coloque suas habilidades em prática](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Aplique suas habilidades
|
||||
|
||||
## Instruções
|
||||
|
||||
Até agora, você trabalhou com o conjunto de dados de aves de Minnesota para descobrir informações sobre quantidades de aves e densidade populacional. Pratique a aplicação dessas técnicas experimentando um conjunto de dados diferente, talvez obtido no [Kaggle](https://www.kaggle.com/). Construa um notebook para contar uma história sobre esse conjunto de dados e certifique-se de usar histogramas ao discuti-lo.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | --- |
|
||||
Um notebook é apresentado com anotações sobre este conjunto de dados, incluindo sua fonte, e utiliza pelo menos 5 histogramas para descobrir fatos sobre os dados. | Um notebook é apresentado com anotações incompletas ou erros. | Um notebook é apresentado sem anotações e inclui erros.
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,32 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Distribuições de pássaros\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Aviso Legal**: \nEste 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.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"orig_nbformat": 4,
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "e5272cbcbffd1ddcc09e44d3d8e7e8cd",
|
||||
"translation_date": "2025-09-01T22:46:22+00:00",
|
||||
"source_file": "3-Data-Visualization/10-visualization-distributions/notebook.ipynb",
|
||||
"language_code": "br"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,196 @@
|
||||
# Visualizando Proporções
|
||||
|
||||
| ](../../sketchnotes/11-Visualizing-Proportions.png)|
|
||||
|:---:|
|
||||
|Visualizando Proporções - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Nesta lição, você usará um conjunto de dados com foco na natureza para visualizar proporções, como a quantidade de diferentes tipos de fungos presentes em um conjunto de dados sobre cogumelos. Vamos explorar esses fascinantes fungos usando um conjunto de dados obtido da Audubon, que lista detalhes sobre 23 espécies de cogumelos com lamelas das famílias Agaricus e Lepiota. Você experimentará visualizações interessantes como:
|
||||
|
||||
- Gráficos de pizza 🥧
|
||||
- Gráficos de rosca 🍩
|
||||
- Gráficos de waffle 🧇
|
||||
|
||||
> 💡 Um projeto muito interessante chamado [Charticulator](https://charticulator.com) da Microsoft Research oferece uma interface gratuita de arrastar e soltar para visualizações de dados. Em um de seus tutoriais, eles também utilizam este conjunto de dados de cogumelos! Assim, você pode explorar os dados e aprender a biblioteca ao mesmo tempo: [Tutorial do Charticulator](https://charticulator.com/tutorials/tutorial4.html).
|
||||
|
||||
## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/20)
|
||||
|
||||
## Conheça seus cogumelos 🍄
|
||||
|
||||
Cogumelos são muito interessantes. Vamos importar um conjunto de dados para estudá-los:
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
mushrooms = pd.read_csv('../../data/mushrooms.csv')
|
||||
mushrooms.head()
|
||||
```
|
||||
Uma tabela é exibida com ótimos dados para análise:
|
||||
|
||||
| classe | formato do chapéu | superfície do chapéu | cor do chapéu | machucados | odor | fixação das lamelas | espaçamento das lamelas | tamanho das lamelas | cor das lamelas | formato do caule | raiz do caule | superfície acima do anel | superfície abaixo do anel | cor acima do anel | cor abaixo do anel | tipo de véu | cor do véu | número de anéis | tipo de anel | cor do esporo | população | habitat |
|
||||
| --------- | ----------------- | -------------------- | ------------- | ---------- | ------- | ------------------- | ----------------------- | ------------------- | --------------- | --------------- | ------------ | ------------------------ | ------------------------ | ----------------- | ----------------- | ----------- | ---------- | -------------- | ------------ | ------------- | ---------- | ------- |
|
||||
| Venenoso | Convexo | Liso | Marrom | Machucados | Pungente | Livre | Fechado | Estreito | Preto | Alargado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Espalhado | Urbano |
|
||||
| Comestível| Convexo | Liso | Amarelo | Machucados | Amêndoa | Livre | Fechado | Largo | Preto | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Marrom | Numeroso | Grama |
|
||||
| Comestível| Sino | Liso | Branco | Machucados | Anis | Livre | Fechado | Largo | Marrom | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Marrom | Numeroso | Campos |
|
||||
| Venenoso | Convexo | Escamoso | Branco | Machucados | Pungente | Livre | Fechado | Estreito | Marrom | Alargado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Espalhado | Urbano |
|
||||
|
||||
De imediato, você percebe que todos os dados são textuais. Será necessário converter esses dados para utilizá-los em um gráfico. Na verdade, a maior parte dos dados está representada como um objeto:
|
||||
|
||||
```python
|
||||
print(mushrooms.select_dtypes(["object"]).columns)
|
||||
```
|
||||
|
||||
O resultado é:
|
||||
|
||||
```output
|
||||
Index(['class', 'cap-shape', 'cap-surface', 'cap-color', 'bruises', 'odor',
|
||||
'gill-attachment', 'gill-spacing', 'gill-size', 'gill-color',
|
||||
'stalk-shape', 'stalk-root', 'stalk-surface-above-ring',
|
||||
'stalk-surface-below-ring', 'stalk-color-above-ring',
|
||||
'stalk-color-below-ring', 'veil-type', 'veil-color', 'ring-number',
|
||||
'ring-type', 'spore-print-color', 'population', 'habitat'],
|
||||
dtype='object')
|
||||
```
|
||||
Pegue esses dados e converta a coluna 'classe' para uma categoria:
|
||||
|
||||
```python
|
||||
cols = mushrooms.select_dtypes(["object"]).columns
|
||||
mushrooms[cols] = mushrooms[cols].astype('category')
|
||||
```
|
||||
|
||||
```python
|
||||
edibleclass=mushrooms.groupby(['class']).count()
|
||||
edibleclass
|
||||
```
|
||||
|
||||
Agora, se você imprimir os dados dos cogumelos, verá que eles foram agrupados em categorias de acordo com a classe venenoso/comestível:
|
||||
|
||||
| | formato do chapéu | superfície do chapéu | cor do chapéu | machucados | odor | fixação das lamelas | espaçamento das lamelas | tamanho das lamelas | cor das lamelas | formato do caule | ... | superfície abaixo do anel | cor acima do anel | cor abaixo do anel | tipo de véu | cor do véu | número de anéis | tipo de anel | cor do esporo | população | habitat |
|
||||
| --------- | ----------------- | -------------------- | ------------- | ---------- | ---- | ------------------- | ----------------------- | ------------------- | --------------- | --------------- | --- | ------------------------ | ----------------- | ----------------- | ----------- | ---------- | -------------- | ------------ | ------------- | ---------- | ------- |
|
||||
| classe | | | | | | | | | | | | | | | | | | | | | |
|
||||
| Comestível| 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | ... | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 | 4208 |
|
||||
| Venenoso | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | ... | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 | 3916 |
|
||||
|
||||
Se você seguir a ordem apresentada nesta tabela para criar os rótulos da categoria classe, poderá construir um gráfico de pizza:
|
||||
|
||||
## Pizza!
|
||||
|
||||
```python
|
||||
labels=['Edible','Poisonous']
|
||||
plt.pie(edibleclass['population'],labels=labels,autopct='%.1f %%')
|
||||
plt.title('Edible?')
|
||||
plt.show()
|
||||
```
|
||||
Voilá, um gráfico de pizza mostrando as proporções desses dados de acordo com essas duas classes de cogumelos. É muito importante acertar a ordem dos rótulos, especialmente aqui, então certifique-se de verificar a ordem com a qual o array de rótulos foi construído!
|
||||
|
||||

|
||||
|
||||
## Roscas!
|
||||
|
||||
Um gráfico de rosca é uma variação visualmente mais interessante do gráfico de pizza, com um buraco no meio. Vamos observar nossos dados usando este método.
|
||||
|
||||
Veja os diversos habitats onde os cogumelos crescem:
|
||||
|
||||
```python
|
||||
habitat=mushrooms.groupby(['habitat']).count()
|
||||
habitat
|
||||
```
|
||||
Aqui, você está agrupando seus dados por habitat. Existem 7 listados, então use esses como rótulos para seu gráfico de rosca:
|
||||
|
||||
```python
|
||||
labels=['Grasses','Leaves','Meadows','Paths','Urban','Waste','Wood']
|
||||
|
||||
plt.pie(habitat['class'], labels=labels,
|
||||
autopct='%1.1f%%', pctdistance=0.85)
|
||||
|
||||
center_circle = plt.Circle((0, 0), 0.40, fc='white')
|
||||
fig = plt.gcf()
|
||||
|
||||
fig.gca().add_artist(center_circle)
|
||||
|
||||
plt.title('Mushroom Habitats')
|
||||
|
||||
plt.show()
|
||||
```
|
||||
|
||||

|
||||
|
||||
Este código desenha um gráfico e um círculo central, depois adiciona esse círculo ao gráfico. Edite a largura do círculo central alterando `0.40` para outro valor.
|
||||
|
||||
Gráficos de rosca podem ser ajustados de várias maneiras para alterar os rótulos. Os rótulos, em particular, podem ser destacados para melhorar a legibilidade. Saiba mais nos [documentos](https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html?highlight=donut).
|
||||
|
||||
Agora que você sabe como agrupar seus dados e exibi-los como pizza ou rosca, pode explorar outros tipos de gráficos. Experimente um gráfico de waffle, que é apenas uma maneira diferente de explorar quantidades.
|
||||
|
||||
## Waffles!
|
||||
|
||||
Um gráfico do tipo 'waffle' é uma maneira diferente de visualizar quantidades como uma matriz 2D de quadrados. Experimente visualizar as diferentes quantidades de cores de chapéus de cogumelos neste conjunto de dados. Para isso, você precisa instalar uma biblioteca auxiliar chamada [PyWaffle](https://pypi.org/project/pywaffle/) e usar o Matplotlib:
|
||||
|
||||
```python
|
||||
pip install pywaffle
|
||||
```
|
||||
|
||||
Selecione um segmento de seus dados para agrupar:
|
||||
|
||||
```python
|
||||
capcolor=mushrooms.groupby(['cap-color']).count()
|
||||
capcolor
|
||||
```
|
||||
|
||||
Crie um gráfico de waffle criando rótulos e agrupando seus dados:
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
from pywaffle import Waffle
|
||||
|
||||
data ={'color': ['brown', 'buff', 'cinnamon', 'green', 'pink', 'purple', 'red', 'white', 'yellow'],
|
||||
'amount': capcolor['class']
|
||||
}
|
||||
|
||||
df = pd.DataFrame(data)
|
||||
|
||||
fig = plt.figure(
|
||||
FigureClass = Waffle,
|
||||
rows = 100,
|
||||
values = df.amount,
|
||||
labels = list(df.color),
|
||||
figsize = (30,30),
|
||||
colors=["brown", "tan", "maroon", "green", "pink", "purple", "red", "whitesmoke", "yellow"],
|
||||
)
|
||||
```
|
||||
|
||||
Usando um gráfico de waffle, você pode ver claramente as proporções das cores dos chapéus neste conjunto de dados de cogumelos. Curiosamente, há muitos cogumelos com chapéus verdes!
|
||||
|
||||

|
||||
|
||||
✅ O PyWaffle suporta ícones dentro dos gráficos que utilizam qualquer ícone disponível no [Font Awesome](https://fontawesome.com/). Faça alguns experimentos para criar um gráfico de waffle ainda mais interessante usando ícones em vez de quadrados.
|
||||
|
||||
Nesta lição, você aprendeu três maneiras de visualizar proporções. Primeiro, você precisa agrupar seus dados em categorias e depois decidir qual é a melhor maneira de exibir os dados - pizza, rosca ou waffle. Todas são deliciosas e proporcionam ao usuário uma visão instantânea de um conjunto de dados.
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Tente recriar esses gráficos saborosos no [Charticulator](https://charticulator.com).
|
||||
|
||||
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/21)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Às vezes, não é óbvio quando usar um gráfico de pizza, rosca ou waffle. Aqui estão alguns artigos para ler sobre este tópico:
|
||||
|
||||
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
|
||||
|
||||
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
|
||||
|
||||
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
|
||||
|
||||
https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402
|
||||
|
||||
Pesquise mais informações sobre essa decisão difícil.
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Tente no Excel](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Experimente no Excel
|
||||
|
||||
## Instruções
|
||||
|
||||
Você sabia que é possível criar gráficos de rosca, pizza e waffle no Excel? Usando um conjunto de dados à sua escolha, crie esses três tipos de gráficos diretamente em uma planilha do Excel.
|
||||
|
||||
## Critérios de Avaliação
|
||||
|
||||
| Exemplar | Adequado | Precisa Melhorar |
|
||||
| ------------------------------------------------------- | ------------------------------------------------- | ----------------------------------------------------- |
|
||||
| Uma planilha do Excel é apresentada com todos os três gráficos | Uma planilha do Excel é apresentada com dois gráficos | Uma planilha do Excel é apresentada com apenas um gráfico |
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. 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 do uso desta tradução.
|
||||
@ -0,0 +1,30 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Aviso Legal**: \nEste 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.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"orig_nbformat": 4,
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "397e9bbc0743761dbf72e5f16b7043e6",
|
||||
"translation_date": "2025-09-01T22:25:17+00:00",
|
||||
"source_file": "3-Data-Visualization/11-visualization-proportions/notebook.ipynb",
|
||||
"language_code": "br"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,180 @@
|
||||
# Visualizando Relações: Tudo Sobre Mel 🍯
|
||||
|
||||
| ](../../sketchnotes/12-Visualizing-Relationships.png)|
|
||||
|:---:|
|
||||
|Visualizando Relações - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Continuando com o foco na natureza em nossa pesquisa, vamos descobrir visualizações interessantes para mostrar as relações entre vários tipos de mel, de acordo com um conjunto de dados derivado do [Departamento de Agricultura dos Estados Unidos](https://www.nass.usda.gov/About_NASS/index.php).
|
||||
|
||||
Este conjunto de dados, com cerca de 600 itens, exibe a produção de mel em muitos estados dos EUA. Por exemplo, você pode observar o número de colônias, rendimento por colônia, produção total, estoques, preço por libra e valor do mel produzido em um determinado estado de 1998 a 2012, com uma linha por ano para cada estado.
|
||||
|
||||
Será interessante visualizar a relação entre a produção anual de um estado e, por exemplo, o preço do mel nesse estado. Alternativamente, você poderia visualizar a relação entre o rendimento de mel por colônia nos estados. Este período cobre o devastador 'CCD' ou 'Colony Collapse Disorder' (Desordem do Colapso das Colônias), observado pela primeira vez em 2006 (http://npic.orst.edu/envir/ccd.html), tornando este um conjunto de dados significativo para estudo. 🐝
|
||||
|
||||
## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/22)
|
||||
|
||||
Nesta lição, você pode usar o Seaborn, que já utilizou antes, como uma boa biblioteca para visualizar relações entre variáveis. Particularmente interessante é o uso da função `relplot` do Seaborn, que permite criar gráficos de dispersão e gráficos de linha para visualizar rapidamente '[relações estatísticas](https://seaborn.pydata.org/tutorial/relational.html?highlight=relationships)', ajudando o cientista de dados a entender melhor como as variáveis se relacionam.
|
||||
|
||||
## Gráficos de Dispersão
|
||||
|
||||
Use um gráfico de dispersão para mostrar como o preço do mel evoluiu ano após ano, por estado. O Seaborn, usando `relplot`, agrupa convenientemente os dados dos estados e exibe pontos de dados para dados categóricos e numéricos.
|
||||
|
||||
Vamos começar importando os dados e o Seaborn:
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
import seaborn as sns
|
||||
honey = pd.read_csv('../../data/honey.csv')
|
||||
honey.head()
|
||||
```
|
||||
Você percebe que os dados de mel possuem várias colunas interessantes, incluindo ano e preço por libra. Vamos explorar esses dados, agrupados por estado dos EUA:
|
||||
|
||||
| estado | numcol | yieldpercol | totalprod | estoques | priceperlb | prodvalue | ano |
|
||||
| ------ | ------ | ----------- | --------- | -------- | ---------- | --------- | --- |
|
||||
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
|
||||
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
|
||||
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
|
||||
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
|
||||
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
|
||||
|
||||
Crie um gráfico de dispersão básico para mostrar a relação entre o preço por libra de mel e seu estado de origem nos EUA. Faça o eixo `y` alto o suficiente para exibir todos os estados:
|
||||
|
||||
```python
|
||||
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
|
||||
```
|
||||

|
||||
|
||||
Agora, mostre os mesmos dados com um esquema de cores de mel para mostrar como o preço evolui ao longo dos anos. Você pode fazer isso adicionando um parâmetro 'hue' para mostrar a mudança ano após ano:
|
||||
|
||||
> ✅ Saiba mais sobre as [paletas de cores que você pode usar no Seaborn](https://seaborn.pydata.org/tutorial/color_palettes.html) - experimente um belo esquema de cores em arco-íris!
|
||||
|
||||
```python
|
||||
sns.relplot(x="priceperlb", y="state", hue="year", palette="YlOrBr", data=honey, height=15, aspect=.5);
|
||||
```
|
||||

|
||||
|
||||
Com essa mudança de esquema de cores, você pode ver claramente uma forte progressão ao longo dos anos em termos de preço do mel por libra. De fato, se você observar um conjunto de amostra nos dados para verificar (escolha um estado, como o Arizona, por exemplo), pode ver um padrão de aumento de preço ano após ano, com poucas exceções:
|
||||
|
||||
| estado | numcol | yieldpercol | totalprod | estoques | priceperlb | prodvalue | ano |
|
||||
| ------ | ------ | ----------- | --------- | -------- | ---------- | --------- | --- |
|
||||
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
|
||||
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
|
||||
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
|
||||
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
|
||||
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
|
||||
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
|
||||
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
|
||||
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
|
||||
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
|
||||
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
|
||||
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
|
||||
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
|
||||
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
|
||||
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
|
||||
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
|
||||
|
||||
Outra maneira de visualizar essa progressão é usar tamanho, em vez de cor. Para usuários daltônicos, isso pode ser uma opção melhor. Edite sua visualização para mostrar o aumento do preço por meio do aumento na circunferência dos pontos:
|
||||
|
||||
```python
|
||||
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
|
||||
```
|
||||
Você pode ver o tamanho dos pontos aumentando gradualmente.
|
||||
|
||||

|
||||
|
||||
Isso é um caso simples de oferta e demanda? Devido a fatores como mudanças climáticas e colapso das colônias, há menos mel disponível para compra ano após ano, e, portanto, o preço aumenta?
|
||||
|
||||
Para descobrir uma correlação entre algumas das variáveis neste conjunto de dados, vamos explorar alguns gráficos de linha.
|
||||
|
||||
## Gráficos de Linha
|
||||
|
||||
Pergunta: Há um aumento claro no preço do mel por libra ano após ano? Você pode descobrir isso mais facilmente criando um único gráfico de linha:
|
||||
|
||||
```python
|
||||
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
|
||||
```
|
||||
Resposta: Sim, com algumas exceções em torno do ano de 2003:
|
||||
|
||||

|
||||
|
||||
✅ Como o Seaborn está agregando dados em torno de uma linha, ele exibe "as múltiplas medições em cada valor de x, plotando a média e o intervalo de confiança de 95% em torno da média". [Fonte](https://seaborn.pydata.org/tutorial/relational.html). Esse comportamento demorado pode ser desativado adicionando `ci=None`.
|
||||
|
||||
Pergunta: Bem, em 2003 também podemos ver um pico na oferta de mel? E se você observar a produção total ano após ano?
|
||||
|
||||
```python
|
||||
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
|
||||
```
|
||||
|
||||

|
||||
|
||||
Resposta: Não exatamente. Se você observar a produção total, parece que ela realmente aumentou naquele ano específico, embora, de forma geral, a quantidade de mel sendo produzida esteja em declínio durante esses anos.
|
||||
|
||||
Pergunta: Nesse caso, o que poderia ter causado o aumento no preço do mel em torno de 2003?
|
||||
|
||||
Para descobrir isso, você pode explorar uma grade de facetas.
|
||||
|
||||
## Grades de Facetas
|
||||
|
||||
Grades de facetas pegam um aspecto do seu conjunto de dados (neste caso, você pode escolher 'ano' para evitar produzir muitas facetas). O Seaborn pode então criar um gráfico para cada uma dessas facetas de suas coordenadas x e y escolhidas para facilitar a comparação visual. 2003 se destaca nesse tipo de comparação?
|
||||
|
||||
Crie uma grade de facetas continuando a usar `relplot`, conforme recomendado pela [documentação do Seaborn](https://seaborn.pydata.org/generated/seaborn.FacetGrid.html?highlight=facetgrid#seaborn.FacetGrid).
|
||||
|
||||
```python
|
||||
sns.relplot(
|
||||
data=honey,
|
||||
x="yieldpercol", y="numcol",
|
||||
col="year",
|
||||
col_wrap=3,
|
||||
kind="line"
|
||||
)
|
||||
```
|
||||
Nesta visualização, você pode comparar o rendimento por colônia e o número de colônias ano após ano, lado a lado, com um wrap definido em 3 para as colunas:
|
||||
|
||||

|
||||
|
||||
Para este conjunto de dados, nada particularmente se destaca em relação ao número de colônias e seu rendimento, ano após ano e estado por estado. Existe uma maneira diferente de encontrar uma correlação entre essas duas variáveis?
|
||||
|
||||
## Gráficos de Linha Dupla
|
||||
|
||||
Experimente um gráfico de linha múltipla sobrepondo dois gráficos de linha um sobre o outro, usando o 'despine' do Seaborn para remover as bordas superior e direita, e usando `ax.twinx` [derivado do Matplotlib](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.twinx.html). Twinx permite que um gráfico compartilhe o eixo x e exiba dois eixos y. Então, exiba o rendimento por colônia e o número de colônias, sobrepostos:
|
||||
|
||||
```python
|
||||
fig, ax = plt.subplots(figsize=(12,6))
|
||||
lineplot = sns.lineplot(x=honey['year'], y=honey['numcol'], data=honey,
|
||||
label = 'Number of bee colonies', legend=False)
|
||||
sns.despine()
|
||||
plt.ylabel('# colonies')
|
||||
plt.title('Honey Production Year over Year');
|
||||
|
||||
ax2 = ax.twinx()
|
||||
lineplot2 = sns.lineplot(x=honey['year'], y=honey['yieldpercol'], ax=ax2, color="r",
|
||||
label ='Yield per colony', legend=False)
|
||||
sns.despine(right=False)
|
||||
plt.ylabel('colony yield')
|
||||
ax.figure.legend();
|
||||
```
|
||||

|
||||
|
||||
Embora nada salte aos olhos em torno do ano de 2003, isso nos permite terminar esta lição com uma nota um pouco mais feliz: embora o número de colônias esteja em declínio geral, ele está se estabilizando, mesmo que o rendimento por colônia esteja diminuindo.
|
||||
|
||||
Vai, abelhas, vai!
|
||||
|
||||
🐝❤️
|
||||
## 🚀 Desafio
|
||||
|
||||
Nesta lição, você aprendeu um pouco mais sobre outros usos de gráficos de dispersão e grades de linha, incluindo grades de facetas. Desafie-se a criar uma grade de facetas usando um conjunto de dados diferente, talvez um que você tenha usado antes dessas lições. Observe quanto tempo elas levam para serem criadas e como você precisa ter cuidado com a quantidade de grades que deseja desenhar usando essas técnicas.
|
||||
|
||||
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/23)
|
||||
|
||||
## Revisão & Autoestudo
|
||||
|
||||
Gráficos de linha podem ser simples ou bastante complexos. Leia um pouco na [documentação do Seaborn](https://seaborn.pydata.org/generated/seaborn.lineplot.html) sobre as várias maneiras de construí-los. Tente aprimorar os gráficos de linha que você construiu nesta lição com outros métodos listados na documentação.
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Explore a colmeia](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. 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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Mergulhe na colmeia
|
||||
|
||||
## Instruções
|
||||
|
||||
Nesta lição, você começou a analisar um conjunto de dados sobre abelhas e sua produção de mel ao longo de um período que registrou perdas na população geral das colônias de abelhas. Explore mais profundamente este conjunto de dados e construa um notebook que conte a história da saúde da população de abelhas, estado por estado e ano por ano. Você descobre algo interessante sobre este conjunto de dados?
|
||||
|
||||
## Rubrica
|
||||
|
||||
| Exemplar | Adequado | Precisa de Melhorias |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------------------------- |
|
||||
| Um notebook é apresentado com uma história anotada com pelo menos três gráficos diferentes mostrando aspectos do conjunto de dados, estado por estado e ano por ano | O notebook carece de um desses elementos | O notebook carece de dois desses elementos |
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,32 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Visualizando a Produção de Mel 🍯 🐝\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Aviso Legal**: \nEste 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.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"orig_nbformat": 4,
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "0f988634b7192626d91cc33b4b6388c5",
|
||||
"translation_date": "2025-09-01T22:39:49+00:00",
|
||||
"source_file": "3-Data-Visualization/12-visualization-relationships/notebook.ipynb",
|
||||
"language_code": "br"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,173 @@
|
||||
# Criando Visualizações Significativas
|
||||
|
||||
| ](../../sketchnotes/13-MeaningfulViz.png)|
|
||||
|:---:|
|
||||
| Visualizações Significativas - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
> "Se você torturar os dados por tempo suficiente, eles confessarão qualquer coisa" -- [Ronald Coase](https://en.wikiquote.org/wiki/Ronald_Coase)
|
||||
|
||||
Uma das habilidades básicas de um cientista de dados é a capacidade de criar uma visualização de dados significativa que ajude a responder às perguntas que você possa ter. Antes de visualizar seus dados, é necessário garantir que eles foram limpos e preparados, como você fez em lições anteriores. Depois disso, você pode começar a decidir a melhor forma de apresentar os dados.
|
||||
|
||||
Nesta lição, você revisará:
|
||||
|
||||
1. Como escolher o tipo de gráfico certo
|
||||
2. Como evitar gráficos enganosos
|
||||
3. Como trabalhar com cores
|
||||
4. Como estilizar seus gráficos para melhor legibilidade
|
||||
5. Como criar soluções de gráficos animados ou em 3D
|
||||
6. Como construir uma visualização criativa
|
||||
|
||||
## [Quiz Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/24)
|
||||
|
||||
## Escolha o tipo de gráfico certo
|
||||
|
||||
Em lições anteriores, você experimentou criar diversos tipos interessantes de visualizações de dados usando Matplotlib e Seaborn. Em geral, você pode selecionar o [tipo certo de gráfico](https://chartio.com/learn/charts/how-to-select-a-data-vizualization/) para a pergunta que está fazendo usando esta tabela:
|
||||
|
||||
| Você precisa: | Você deve usar: |
|
||||
| -------------------------- | ------------------------------- |
|
||||
| Mostrar tendências ao longo do tempo | Linha |
|
||||
| Comparar categorias | Barra, Pizza |
|
||||
| Comparar totais | Pizza, Barra Empilhada |
|
||||
| Mostrar relações | Dispersão, Linha, Faceta, Linha Dupla |
|
||||
| Mostrar distribuições | Dispersão, Histograma, Caixa |
|
||||
| Mostrar proporções | Pizza, Donut, Waffle |
|
||||
|
||||
> ✅ Dependendo da composição dos seus dados, pode ser necessário convertê-los de texto para numérico para que um determinado gráfico os suporte.
|
||||
|
||||
## Evite enganos
|
||||
|
||||
Mesmo que um cientista de dados seja cuidadoso ao escolher o gráfico certo para os dados certos, existem muitas maneiras de exibir dados de forma a provar um ponto, muitas vezes às custas de prejudicar os próprios dados. Há muitos exemplos de gráficos e infográficos enganosos!
|
||||
|
||||
[](https://www.youtube.com/watch?v=oX74Nge8Wkw "Como os gráficos enganam")
|
||||
|
||||
> 🎥 Clique na imagem acima para assistir a uma palestra sobre gráficos enganosos
|
||||
|
||||
Este gráfico inverte o eixo X para mostrar o oposto da verdade, com base na data:
|
||||
|
||||

|
||||
|
||||
[Este gráfico](https://media.firstcoastnews.com/assets/WTLV/images/170ae16f-4643-438f-b689-50d66ca6a8d8/170ae16f-4643-438f-b689-50d66ca6a8d8_1140x641.jpg) é ainda mais enganoso, pois o olhar é atraído para a direita, levando à conclusão de que, ao longo do tempo, os casos de COVID diminuíram nos vários condados. Na verdade, se você olhar atentamente para as datas, verá que elas foram reorganizadas para criar essa falsa tendência de queda.
|
||||
|
||||

|
||||
|
||||
Este exemplo notório usa cor E um eixo Y invertido para enganar: em vez de concluir que as mortes por armas aumentaram após a aprovação de uma legislação favorável às armas, o olhar é enganado para pensar que o oposto é verdadeiro:
|
||||
|
||||

|
||||
|
||||
Este gráfico estranho mostra como a proporção pode ser manipulada, de forma hilária:
|
||||
|
||||

|
||||
|
||||
Comparar o incomparável é mais um truque duvidoso. Existe um [site maravilhoso](https://tylervigen.com/spurious-correlations) dedicado a 'correlações espúrias', exibindo 'fatos' que correlacionam coisas como a taxa de divórcio no Maine e o consumo de margarina. Um grupo no Reddit também coleta os [usos ruins](https://www.reddit.com/r/dataisugly/top/?t=all) de dados.
|
||||
|
||||
É importante entender como o olhar pode ser facilmente enganado por gráficos enganosos. Mesmo que a intenção do cientista de dados seja boa, a escolha de um tipo ruim de gráfico, como um gráfico de pizza com muitas categorias, pode ser enganosa.
|
||||
|
||||
## Cor
|
||||
|
||||
Você viu no gráfico de 'violência armada na Flórida' acima como a cor pode fornecer uma camada adicional de significado aos gráficos, especialmente aqueles não projetados usando bibliotecas como Matplotlib e Seaborn, que vêm com várias bibliotecas e paletas de cores validadas. Se você estiver criando um gráfico manualmente, estude um pouco sobre [teoria das cores](https://colormatters.com/color-and-design/basic-color-theory).
|
||||
|
||||
> ✅ Esteja ciente, ao projetar gráficos, que acessibilidade é um aspecto importante da visualização. Alguns dos seus usuários podem ser daltônicos - seu gráfico é exibido bem para usuários com deficiências visuais?
|
||||
|
||||
Tenha cuidado ao escolher cores para seu gráfico, pois elas podem transmitir significados que você não pretende. As 'senhoras de rosa' no gráfico de 'altura' acima transmitem um significado distintamente 'feminino' que aumenta a estranheza do próprio gráfico.
|
||||
|
||||
Embora o [significado das cores](https://colormatters.com/color-symbolism/the-meanings-of-colors) possa variar em diferentes partes do mundo e tende a mudar de acordo com sua tonalidade, geralmente os significados incluem:
|
||||
|
||||
| Cor | Significado |
|
||||
| ------ | ------------------- |
|
||||
| vermelho | poder |
|
||||
| azul | confiança, lealdade |
|
||||
| amarelo | felicidade, cautela |
|
||||
| verde | ecologia, sorte, inveja |
|
||||
| roxo | felicidade |
|
||||
| laranja | vivacidade |
|
||||
|
||||
Se você for encarregado de criar um gráfico com cores personalizadas, certifique-se de que seus gráficos sejam acessíveis e que a cor escolhida coincida com o significado que você está tentando transmitir.
|
||||
|
||||
## Estilizando seus gráficos para legibilidade
|
||||
|
||||
Gráficos não são significativos se não forem legíveis! Reserve um momento para considerar o estilo da largura e altura do seu gráfico para que ele se ajuste bem aos seus dados. Se uma variável (como todos os 50 estados) precisar ser exibida, mostre-os verticalmente no eixo Y, se possível, para evitar um gráfico com rolagem horizontal.
|
||||
|
||||
Rotule seus eixos, forneça uma legenda, se necessário, e ofereça tooltips para melhor compreensão dos dados.
|
||||
|
||||
Se seus dados forem textuais e extensos no eixo X, você pode inclinar o texto para melhorar a legibilidade. [Matplotlib](https://matplotlib.org/stable/tutorials/toolkits/mplot3d.html) oferece gráficos em 3D, se seus dados suportarem isso. Visualizações de dados sofisticadas podem ser produzidas usando `mpl_toolkits.mplot3d`.
|
||||
|
||||

|
||||
|
||||
## Exibição de gráficos animados e em 3D
|
||||
|
||||
Algumas das melhores visualizações de dados hoje em dia são animadas. Shirley Wu tem exemplos incríveis feitos com D3, como '[film flowers](http://bl.ocks.org/sxywu/raw/d612c6c653fb8b4d7ff3d422be164a5d/)', onde cada flor é uma visualização de um filme. Outro exemplo para o Guardian é 'bussed out', uma experiência interativa que combina visualizações com Greensock e D3, além de um formato de artigo com narrativa para mostrar como NYC lida com seu problema de moradores de rua, enviando pessoas para fora da cidade.
|
||||
|
||||

|
||||
|
||||
> "Bussed Out: Como os EUA Movem seus Moradores de Rua" do [Guardian](https://www.theguardian.com/us-news/ng-interactive/2017/dec/20/bussed-out-america-moves-homeless-people-country-study). Visualizações por Nadieh Bremer & Shirley Wu
|
||||
|
||||
Embora esta lição não seja suficiente para ensinar essas poderosas bibliotecas de visualização em profundidade, experimente usar D3 em um aplicativo Vue.js para exibir uma visualização do livro "Ligações Perigosas" como uma rede social animada.
|
||||
|
||||
> "Les Liaisons Dangereuses" é um romance epistolar, ou seja, um romance apresentado como uma série de cartas. Escrito em 1782 por Choderlos de Laclos, conta a história das manobras sociais cruéis e moralmente falidas de dois protagonistas rivais da aristocracia francesa do final do século XVIII, o Visconde de Valmont e a Marquesa de Merteuil. Ambos encontram seu fim no final, mas não sem causar muitos danos sociais. O romance se desenrola como uma série de cartas escritas para várias pessoas em seus círculos, tramando vingança ou simplesmente para causar problemas. Crie uma visualização dessas cartas para descobrir os principais personagens da narrativa, visualmente.
|
||||
|
||||
Você completará um aplicativo web que exibirá uma visão animada dessa rede social. Ele usa uma biblioteca criada para criar uma [visualização de uma rede](https://github.com/emiliorizzo/vue-d3-network) usando Vue.js e D3. Quando o aplicativo estiver em execução, você pode mover os nós na tela para reorganizar os dados.
|
||||
|
||||

|
||||
|
||||
## Projeto: Crie um gráfico para mostrar uma rede usando D3.js
|
||||
|
||||
> Esta pasta de lição inclui uma pasta `solution` onde você pode encontrar o projeto concluído, para sua referência.
|
||||
|
||||
1. Siga as instruções no arquivo README.md na raiz da pasta inicial. Certifique-se de que você tenha NPM e Node.js instalados em sua máquina antes de instalar as dependências do projeto.
|
||||
|
||||
2. Abra a pasta `starter/src`. Você encontrará uma pasta `assets` onde há um arquivo .json com todas as cartas do romance, numeradas, com uma anotação 'to' e 'from'.
|
||||
|
||||
3. Complete o código em `components/Nodes.vue` para habilitar a visualização. Procure o método chamado `createLinks()` e adicione o seguinte loop aninhado.
|
||||
|
||||
Percorra o objeto .json para capturar os dados 'to' e 'from' das cartas e construa o objeto `links` para que a biblioteca de visualização possa consumi-lo:
|
||||
|
||||
```javascript
|
||||
//loop through letters
|
||||
let f = 0;
|
||||
let t = 0;
|
||||
for (var i = 0; i < letters.length; i++) {
|
||||
for (var j = 0; j < characters.length; j++) {
|
||||
|
||||
if (characters[j] == letters[i].from) {
|
||||
f = j;
|
||||
}
|
||||
if (characters[j] == letters[i].to) {
|
||||
t = j;
|
||||
}
|
||||
}
|
||||
this.links.push({ sid: f, tid: t });
|
||||
}
|
||||
```
|
||||
|
||||
Execute seu aplicativo a partir do terminal (npm run serve) e aproveite a visualização!
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Faça um tour pela internet para descobrir visualizações enganosas. Como o autor engana o usuário, e isso é intencional? Tente corrigir as visualizações para mostrar como elas deveriam ser.
|
||||
|
||||
## [Quiz Pós-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/25)
|
||||
|
||||
## Revisão & Autoestudo
|
||||
|
||||
Aqui estão alguns artigos para ler sobre visualizações de dados enganosas:
|
||||
|
||||
https://gizmodo.com/how-to-lie-with-data-visualization-1563576606
|
||||
|
||||
http://ixd.prattsi.org/2017/12/visual-lies-usability-in-deceptive-data-visualizations/
|
||||
|
||||
Confira estas visualizações interessantes de ativos e artefatos históricos:
|
||||
|
||||
https://handbook.pubpub.org/
|
||||
|
||||
Leia este artigo sobre como animações podem melhorar suas visualizações:
|
||||
|
||||
https://medium.com/@EvanSinar/use-animation-to-supercharge-data-visualization-cd905a882ad4
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Crie sua própria visualização personalizada](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Crie sua própria visualização personalizada
|
||||
|
||||
## Instruções
|
||||
|
||||
Usando o exemplo de código neste projeto para criar uma rede social, modele dados das suas próprias interações sociais. Você pode mapear seu uso de redes sociais ou criar um diagrama dos membros da sua família. Desenvolva um aplicativo web interessante que mostre uma visualização única de uma rede social.
|
||||
|
||||
## Critérios de Avaliação
|
||||
|
||||
Exemplar | Adequado | Precisa de Melhorias
|
||||
--- | --- | --- |
|
||||
Um repositório no GitHub é apresentado com código que funciona corretamente (tente implantá-lo como um aplicativo web estático) e possui um README anotado explicando o projeto | O repositório não funciona corretamente ou não está bem documentado | O repositório não funciona corretamente e não está bem documentado
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,31 @@
|
||||
# Projeto de visualização de dados Dangerous Liaisons
|
||||
|
||||
Para começar, certifique-se de que você tem o NPM e o Node instalados e funcionando na sua máquina. Instale as dependências (npm install) e, em seguida, execute o projeto localmente (npm run serve):
|
||||
|
||||
## Configuração do projeto
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compila e recarrega automaticamente para desenvolvimento
|
||||
```
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Compila e minimiza para produção
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Verifica e corrige arquivos
|
||||
```
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Personalizar configuração
|
||||
Veja [Referência de Configuração](https://cli.vuejs.org/config/).
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,31 @@
|
||||
# Projeto de visualização de dados Dangerous Liaisons
|
||||
|
||||
Para começar, você precisa garantir que o NPM e o Node estejam funcionando na sua máquina. Instale as dependências (npm install) e, em seguida, execute o projeto localmente (npm run serve):
|
||||
|
||||
## Configuração do projeto
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compila e recarrega automaticamente para desenvolvimento
|
||||
```
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Compila e minimiza para produção
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Verifica e corrige arquivos
|
||||
```
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Personalizar configuração
|
||||
Veja [Referência de Configuração](https://cli.vuejs.org/config/).
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,222 @@
|
||||
# Visualizando Quantidades
|
||||
| ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/09-Visualizing-Quantities.png)|
|
||||
|:---:|
|
||||
| Visualizando Quantidades - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Nesta lição, você explorará como usar algumas das muitas bibliotecas de pacotes disponíveis no R para aprender a criar visualizações interessantes em torno do conceito de quantidade. Usando um conjunto de dados limpo sobre os pássaros de Minnesota, você pode aprender muitos fatos interessantes sobre a vida selvagem local.
|
||||
## [Quiz pré-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/16)
|
||||
|
||||
## Observe a envergadura com ggplot2
|
||||
Uma excelente biblioteca para criar gráficos e diagramas simples e sofisticados de vários tipos é o [ggplot2](https://cran.r-project.org/web/packages/ggplot2/index.html). Em termos gerais, o processo de plotar dados usando essas bibliotecas inclui identificar as partes do seu dataframe que você deseja analisar, realizar as transformações necessárias nesses dados, atribuir valores aos eixos x e y, decidir o tipo de gráfico a ser exibido e, por fim, exibir o gráfico.
|
||||
|
||||
O `ggplot2` é um sistema para criar gráficos de forma declarativa, baseado na Gramática dos Gráficos. A [Gramática dos Gráficos](https://en.wikipedia.org/wiki/Ggplot2) é um esquema geral para visualização de dados que divide os gráficos em componentes semânticos, como escalas e camadas. Em outras palavras, a facilidade de criar gráficos para dados univariados ou multivariados com pouco código torna o `ggplot2` o pacote mais popular para visualizações no R. O usuário informa ao `ggplot2` como mapear as variáveis para os elementos visuais, os elementos gráficos a serem usados, e o `ggplot2` cuida do restante.
|
||||
|
||||
> ✅ Gráfico = Dados + Estética + Geometria
|
||||
> - Dados referem-se ao conjunto de dados
|
||||
> - Estética indica as variáveis a serem estudadas (variáveis x e y)
|
||||
> - Geometria refere-se ao tipo de gráfico (gráfico de linha, gráfico de barras, etc.)
|
||||
|
||||
Escolha a melhor geometria (tipo de gráfico) de acordo com seus dados e a história que você deseja contar por meio do gráfico.
|
||||
|
||||
> - Para analisar tendências: linha, coluna
|
||||
> - Para comparar valores: barra, coluna, pizza, dispersão
|
||||
> - Para mostrar como as partes se relacionam com o todo: pizza
|
||||
> - Para mostrar a distribuição dos dados: dispersão, barra
|
||||
> - Para mostrar relações entre valores: linha, dispersão, bolha
|
||||
|
||||
✅ Você também pode conferir este [cheatsheet](https://nyu-cdsc.github.io/learningr/assets/data-visualization-2.1.pdf) descritivo para ggplot2.
|
||||
|
||||
## Construa um gráfico de linha sobre os valores de envergadura de pássaros
|
||||
|
||||
Abra o console do R e importe o conjunto de dados.
|
||||
> Nota: O conjunto de dados está armazenado na raiz deste repositório na pasta `/data`.
|
||||
|
||||
Vamos importar o conjunto de dados e observar as primeiras linhas (topo) dos dados.
|
||||
|
||||
```r
|
||||
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
|
||||
head(birds)
|
||||
```
|
||||
O início dos dados contém uma mistura de texto e números:
|
||||
|
||||
| | Nome | NomeCientífico | Categoria | Ordem | Família | Gênero | StatusConservação | ComprimentoMín | ComprimentoMáx | MassaCorporalMín | MassaCorporalMáx | EnvergaduraMín | EnvergaduraMáx |
|
||||
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :---------------- | --------------: | --------------: | ----------------: | ----------------: | --------------: | --------------: |
|
||||
| 0 | Pato-assobiador-de-barriga-preta | Dendrocygna autumnalis | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
|
||||
| 1 | Pato-assobiador-fulvo | Dendrocygna bicolor | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
|
||||
| 2 | Ganso-das-neves | Anser caerulescens | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
|
||||
| 3 | Ganso-de-Ross | Anser rossii | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
|
||||
| 4 | Ganso-de-testa-branca-maior | Anser albifrons | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
|
||||
|
||||
Vamos começar plotando alguns dos dados numéricos usando um gráfico de linha básico. Suponha que você queira visualizar a envergadura máxima desses pássaros interessantes.
|
||||
|
||||
```r
|
||||
install.packages("ggplot2")
|
||||
library("ggplot2")
|
||||
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
|
||||
geom_line()
|
||||
```
|
||||
Aqui, você instala o pacote `ggplot2` e o importa para o ambiente de trabalho usando o comando `library("ggplot2")`. Para plotar qualquer gráfico no ggplot, a função `ggplot()` é usada, e você especifica o conjunto de dados, as variáveis x e y como atributos. Neste caso, usamos a função `geom_line()` porque queremos plotar um gráfico de linha.
|
||||
|
||||

|
||||
|
||||
O que você percebe imediatamente? Parece haver pelo menos um outlier - que envergadura impressionante! Uma envergadura de mais de 2000 centímetros equivale a mais de 20 metros - será que há Pterodáctilos em Minnesota? Vamos investigar.
|
||||
|
||||
Embora você possa fazer uma classificação rápida no Excel para encontrar esses outliers, que provavelmente são erros de digitação, continue o processo de visualização trabalhando diretamente no gráfico.
|
||||
|
||||
Adicione rótulos ao eixo x para mostrar quais tipos de pássaros estão em questão:
|
||||
|
||||
```r
|
||||
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
|
||||
geom_line() +
|
||||
theme(axis.text.x = element_text(angle = 45, hjust=1))+
|
||||
xlab("Birds") +
|
||||
ylab("Wingspan (CM)") +
|
||||
ggtitle("Max Wingspan in Centimeters")
|
||||
```
|
||||
Especificamos o ângulo no `theme` e definimos os rótulos dos eixos x e y em `xlab()` e `ylab()`, respectivamente. O `ggtitle()` dá um nome ao gráfico.
|
||||
|
||||

|
||||
|
||||
Mesmo com a rotação dos rótulos ajustada para 45 graus, ainda há muitos para ler. Vamos tentar uma estratégia diferente: rotular apenas os outliers e definir os rótulos dentro do gráfico. Você pode usar um gráfico de dispersão para criar mais espaço para os rótulos:
|
||||
|
||||
```r
|
||||
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
|
||||
geom_point() +
|
||||
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
|
||||
theme(axis.title.x=element_blank(), axis.text.x=element_blank(), axis.ticks.x=element_blank())
|
||||
ylab("Wingspan (CM)") +
|
||||
ggtitle("Max Wingspan in Centimeters") +
|
||||
```
|
||||
O que está acontecendo aqui? Você usou a função `geom_point()` para plotar pontos de dispersão. Com isso, você adicionou rótulos para os pássaros cuja `MaxWingspan > 500` e também ocultou os rótulos no eixo x para desobstruir o gráfico.
|
||||
|
||||
O que você descobre?
|
||||
|
||||

|
||||
|
||||
## Filtre seus dados
|
||||
|
||||
Tanto a Águia-careca quanto o Falcão-das-pradarias, embora provavelmente sejam pássaros muito grandes, parecem estar rotulados incorretamente, com um zero extra adicionado à sua envergadura máxima. É improvável que você encontre uma Águia-careca com uma envergadura de 25 metros, mas, se encontrar, por favor, nos avise! Vamos criar um novo dataframe sem esses dois outliers:
|
||||
|
||||
```r
|
||||
birds_filtered <- subset(birds, MaxWingspan < 500)
|
||||
|
||||
ggplot(data=birds_filtered, aes(x=Name, y=MaxWingspan,group=1)) +
|
||||
geom_point() +
|
||||
ylab("Wingspan (CM)") +
|
||||
xlab("Birds") +
|
||||
ggtitle("Max Wingspan in Centimeters") +
|
||||
geom_text(aes(label=ifelse(MaxWingspan>500,as.character(Name),'')),hjust=0,vjust=0) +
|
||||
theme(axis.text.x=element_blank(), axis.ticks.x=element_blank())
|
||||
```
|
||||
Criamos um novo dataframe `birds_filtered` e, em seguida, plotamos um gráfico de dispersão. Ao filtrar os outliers, seus dados agora estão mais coesos e compreensíveis.
|
||||
|
||||

|
||||
|
||||
Agora que temos um conjunto de dados mais limpo, pelo menos em termos de envergadura, vamos descobrir mais sobre esses pássaros.
|
||||
|
||||
Embora gráficos de linha e dispersão possam exibir informações sobre valores de dados e suas distribuições, queremos pensar nos valores inerentes a este conjunto de dados. Você poderia criar visualizações para responder às seguintes perguntas sobre quantidade:
|
||||
|
||||
> Quantas categorias de pássaros existem e quais são seus números?
|
||||
> Quantos pássaros estão extintos, ameaçados, raros ou comuns?
|
||||
> Quantos existem dos vários gêneros e ordens na terminologia de Lineu?
|
||||
|
||||
## Explore gráficos de barras
|
||||
|
||||
Gráficos de barras são práticos quando você precisa mostrar agrupamentos de dados. Vamos explorar as categorias de pássaros que existem neste conjunto de dados para ver qual é a mais comum em número.
|
||||
Vamos criar um gráfico de barras com os dados filtrados.
|
||||
|
||||
```r
|
||||
install.packages("dplyr")
|
||||
install.packages("tidyverse")
|
||||
|
||||
library(lubridate)
|
||||
library(scales)
|
||||
library(dplyr)
|
||||
library(ggplot2)
|
||||
library(tidyverse)
|
||||
|
||||
birds_filtered %>% group_by(Category) %>%
|
||||
summarise(n=n(),
|
||||
MinLength = mean(MinLength),
|
||||
MaxLength = mean(MaxLength),
|
||||
MinBodyMass = mean(MinBodyMass),
|
||||
MaxBodyMass = mean(MaxBodyMass),
|
||||
MinWingspan=mean(MinWingspan),
|
||||
MaxWingspan=mean(MaxWingspan)) %>%
|
||||
gather("key", "value", - c(Category, n)) %>%
|
||||
ggplot(aes(x = Category, y = value, group = key, fill = key)) +
|
||||
geom_bar(stat = "identity") +
|
||||
scale_fill_manual(values = c("#D62728", "#FF7F0E", "#8C564B","#2CA02C", "#1F77B4", "#9467BD")) +
|
||||
xlab("Category")+ggtitle("Birds of Minnesota")
|
||||
|
||||
```
|
||||
No trecho a seguir, instalamos os pacotes [dplyr](https://www.rdocumentation.org/packages/dplyr/versions/0.7.8) e [lubridate](https://www.rdocumentation.org/packages/lubridate/versions/1.8.0) para ajudar a manipular e agrupar dados a fim de plotar um gráfico de barras empilhadas. Primeiro, agrupamos os dados pela `Categoria` do pássaro e, em seguida, resumimos as colunas `MinLength`, `MaxLength`, `MinBodyMass`, `MaxBodyMass`, `MinWingspan`, `MaxWingspan`. Depois, plotamos o gráfico de barras usando o pacote `ggplot2`, especificando as cores para as diferentes categorias e os rótulos.
|
||||
|
||||

|
||||
|
||||
Este gráfico de barras, no entanto, é ilegível porque há muitos dados não agrupados. Você precisa selecionar apenas os dados que deseja plotar, então vamos observar o comprimento dos pássaros com base em sua categoria.
|
||||
|
||||
Filtre seus dados para incluir apenas a categoria do pássaro.
|
||||
|
||||
Como há muitas categorias, você pode exibir este gráfico verticalmente e ajustar sua altura para acomodar todos os dados:
|
||||
|
||||
```r
|
||||
birds_count<-dplyr::count(birds_filtered, Category, sort = TRUE)
|
||||
birds_count$Category <- factor(birds_count$Category, levels = birds_count$Category)
|
||||
ggplot(birds_count,aes(Category,n))+geom_bar(stat="identity")+coord_flip()
|
||||
```
|
||||
Primeiro, contamos os valores únicos na coluna `Categoria` e, em seguida, os classificamos em um novo dataframe `birds_count`. Esses dados classificados são então organizados no mesmo nível para que sejam plotados de forma ordenada. Usando o `ggplot2`, você então plota os dados em um gráfico de barras. O `coord_flip()` plota barras horizontais.
|
||||
|
||||

|
||||
|
||||
Este gráfico de barras mostra uma boa visão do número de pássaros em cada categoria. Em um piscar de olhos, você vê que o maior número de pássaros nesta região está na categoria Patos/Gansos/AvesAquáticas. Minnesota é a "terra dos 10.000 lagos", então isso não é surpreendente!
|
||||
|
||||
✅ Experimente outras contagens neste conjunto de dados. Algo te surpreende?
|
||||
|
||||
## Comparando dados
|
||||
|
||||
Você pode tentar diferentes comparações de dados agrupados criando novos eixos. Experimente uma comparação do ComprimentoMáximo de um pássaro, com base em sua categoria:
|
||||
|
||||
```r
|
||||
birds_grouped <- birds_filtered %>%
|
||||
group_by(Category) %>%
|
||||
summarise(
|
||||
MaxLength = max(MaxLength, na.rm = T),
|
||||
MinLength = max(MinLength, na.rm = T)
|
||||
) %>%
|
||||
arrange(Category)
|
||||
|
||||
ggplot(birds_grouped,aes(Category,MaxLength))+geom_bar(stat="identity")+coord_flip()
|
||||
```
|
||||
Agrupamos os dados `birds_filtered` por `Categoria` e, em seguida, plotamos um gráfico de barras.
|
||||
|
||||

|
||||
|
||||
Nada surpreendente aqui: beija-flores têm o menor ComprimentoMáximo em comparação com Pelicanos ou Gansos. É bom quando os dados fazem sentido lógico!
|
||||
|
||||
Você pode criar visualizações mais interessantes de gráficos de barras sobrepondo dados. Vamos sobrepor os valores de ComprimentoMínimo e ComprimentoMáximo em uma determinada categoria de pássaro:
|
||||
|
||||
```r
|
||||
ggplot(data=birds_grouped, aes(x=Category)) +
|
||||
geom_bar(aes(y=MaxLength), stat="identity", position ="identity", fill='blue') +
|
||||
geom_bar(aes(y=MinLength), stat="identity", position="identity", fill='orange')+
|
||||
coord_flip()
|
||||
```
|
||||

|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Este conjunto de dados de pássaros oferece uma riqueza de informações sobre diferentes tipos de pássaros dentro de um ecossistema específico. Pesquise na internet e veja se consegue encontrar outros conjuntos de dados relacionados a pássaros. Pratique a construção de gráficos e diagramas sobre esses pássaros para descobrir fatos que você não conhecia.
|
||||
## [Quiz pós-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/17)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Esta primeira lição forneceu algumas informações sobre como usar o `ggplot2` para visualizar quantidades. Pesquise outras maneiras de trabalhar com conjuntos de dados para visualização. Pesquise e procure por conjuntos de dados que você possa visualizar usando outros pacotes como [Lattice](https://stat.ethz.ch/R-manual/R-devel/library/lattice/html/Lattice.html) e [Plotly](https://github.com/plotly/plotly.R#readme).
|
||||
|
||||
## Tarefa
|
||||
[Linhas, Dispersões e Barras](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Linhas, Dispersões e Barras
|
||||
|
||||
## Instruções
|
||||
|
||||
Nesta lição, você trabalhou com gráficos de linha, gráficos de dispersão e gráficos de barras para mostrar fatos interessantes sobre este conjunto de dados. Nesta tarefa, aprofunde-se no conjunto de dados para descobrir um fato sobre um tipo específico de pássaro. Por exemplo, crie um script visualizando todos os dados interessantes que você puder encontrar sobre Gansos-da-neve. Use os três tipos de gráficos mencionados acima para contar uma história em seu notebook.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | -- |
|
||||
Um script é apresentado com boas anotações, narrativa sólida e gráficos atraentes | O script está faltando um desses elementos | O script está faltando dois desses elementos
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,175 @@
|
||||
# Visualizando Distribuições
|
||||
|
||||
| ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/10-Visualizing-Distributions.png)|
|
||||
|:---:|
|
||||
| Visualizando Distribuições - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Na lição anterior, você aprendeu alguns fatos interessantes sobre um conjunto de dados sobre os pássaros de Minnesota. Você encontrou alguns dados errôneos ao visualizar outliers e analisou as diferenças entre categorias de pássaros com base no comprimento máximo.
|
||||
|
||||
## [Quiz pré-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
|
||||
## Explore o conjunto de dados dos pássaros
|
||||
|
||||
Outra maneira de explorar os dados é analisando sua distribuição, ou como os dados estão organizados ao longo de um eixo. Talvez, por exemplo, você queira aprender sobre a distribuição geral, neste conjunto de dados, da envergadura máxima ou da massa corporal máxima dos pássaros de Minnesota.
|
||||
|
||||
Vamos descobrir alguns fatos sobre as distribuições de dados neste conjunto de dados. No seu console R, importe `ggplot2` e o banco de dados. Remova os outliers do banco de dados, assim como no tópico anterior.
|
||||
|
||||
```r
|
||||
library(ggplot2)
|
||||
|
||||
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
|
||||
|
||||
birds_filtered <- subset(birds, MaxWingspan < 500)
|
||||
head(birds_filtered)
|
||||
```
|
||||
| | Nome | NomeCientífico | Categoria | Ordem | Família | Gênero | StatusConservação | MinComprimento | MaxComprimento | MinMassaCorporal | MaxMassaCorporal | MinEnvergadura | MaxEnvergadura |
|
||||
| ---: | :-------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------------: | --------------: | ----------------: | ----------------: | --------------: | --------------: |
|
||||
| 0 | Pato-silvo-de-barriga-preta | Dendrocygna autumnalis | Patos/Gansos/Aquáticos| Anseriformes | Anatidae | Dendrocygna | LC | 47 | 56 | 652 | 1020 | 76 | 94 |
|
||||
| 1 | Pato-silvo-fulvo | Dendrocygna bicolor | Patos/Gansos/Aquáticos| Anseriformes | Anatidae | Dendrocygna | LC | 45 | 53 | 712 | 1050 | 85 | 93 |
|
||||
| 2 | Ganso-da-neve | Anser caerulescens | Patos/Gansos/Aquáticos| Anseriformes | Anatidae | Anser | LC | 64 | 79 | 2050 | 4050 | 135 | 165 |
|
||||
| 3 | Ganso-de-Ross | Anser rossii | Patos/Gansos/Aquáticos| Anseriformes | Anatidae | Anser | LC | 57.3 | 64 | 1066 | 1567 | 113 | 116 |
|
||||
| 4 | Ganso-de-testa-branca-maior | Anser albifrons | Patos/Gansos/Aquáticos| Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
|
||||
|
||||
Em geral, você pode rapidamente observar como os dados estão distribuídos usando um gráfico de dispersão, como fizemos na lição anterior:
|
||||
|
||||
```r
|
||||
ggplot(data=birds_filtered, aes(x=Order, y=MaxLength,group=1)) +
|
||||
geom_point() +
|
||||
ggtitle("Max Length per order") + coord_flip()
|
||||
```
|
||||

|
||||
|
||||
Isso fornece uma visão geral da distribuição do comprimento corporal por ordem de pássaros, mas não é a maneira ideal de exibir distribuições reais. Essa tarefa geralmente é realizada criando um histograma.
|
||||
|
||||
## Trabalhando com histogramas
|
||||
|
||||
O `ggplot2` oferece ótimas maneiras de visualizar a distribuição de dados usando histogramas. Esse tipo de gráfico é semelhante a um gráfico de barras, onde a distribuição pode ser vista pelo aumento e diminuição das barras. Para construir um histograma, você precisa de dados numéricos. Para criar um histograma, você pode plotar um gráfico definindo o tipo como 'hist' para histograma. Este gráfico mostra a distribuição de MaxBodyMass para o intervalo de dados numéricos do conjunto de dados. Dividindo o conjunto de dados em pequenos intervalos, ele pode exibir a distribuição dos valores dos dados:
|
||||
|
||||
```r
|
||||
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
|
||||
geom_histogram(bins=10)+ylab('Frequency')
|
||||
```
|
||||

|
||||
|
||||
Como você pode ver, a maioria dos 400+ pássaros neste conjunto de dados está na faixa de menos de 2000 para sua massa corporal máxima. Obtenha mais informações sobre os dados alterando o parâmetro `bins` para um número maior, algo como 30:
|
||||
|
||||
```r
|
||||
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')
|
||||
```
|
||||
|
||||

|
||||
|
||||
Este gráfico mostra a distribuição de forma um pouco mais detalhada. Um gráfico menos inclinado para a esquerda poderia ser criado garantindo que você selecione apenas dados dentro de um determinado intervalo:
|
||||
|
||||
Filtre seus dados para obter apenas os pássaros cuja massa corporal seja inferior a 60 e mostre 30 `bins`:
|
||||
|
||||
```r
|
||||
birds_filtered_1 <- subset(birds_filtered, MaxBodyMass > 1 & MaxBodyMass < 60)
|
||||
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
|
||||
geom_histogram(bins=30)+ylab('Frequency')
|
||||
```
|
||||
|
||||

|
||||
|
||||
✅ Experimente outros filtros e pontos de dados. Para ver a distribuição completa dos dados, remova o filtro `['MaxBodyMass']` para mostrar distribuições rotuladas.
|
||||
|
||||
O histograma oferece algumas melhorias interessantes de cor e rotulagem para experimentar também:
|
||||
|
||||
Crie um histograma 2D para comparar a relação entre duas distribuições. Vamos comparar `MaxBodyMass` vs. `MaxLength`. O `ggplot2` oferece uma maneira integrada de mostrar convergência usando cores mais brilhantes:
|
||||
|
||||
```r
|
||||
ggplot(data=birds_filtered_1, aes(x=MaxBodyMass, y=MaxLength) ) +
|
||||
geom_bin2d() +scale_fill_continuous(type = "viridis")
|
||||
```
|
||||
Parece haver uma correlação esperada entre esses dois elementos ao longo de um eixo esperado, com um ponto de convergência particularmente forte:
|
||||
|
||||

|
||||
|
||||
Os histogramas funcionam bem por padrão para dados numéricos. E se você precisar ver distribuições de acordo com dados textuais?
|
||||
## Explore o conjunto de dados para distribuições usando dados textuais
|
||||
|
||||
Este conjunto de dados também inclui boas informações sobre a categoria dos pássaros, seu gênero, espécie e família, bem como seu status de conservação. Vamos explorar essas informações de conservação. Qual é a distribuição dos pássaros de acordo com seu status de conservação?
|
||||
|
||||
> ✅ No conjunto de dados, vários acrônimos são usados para descrever o status de conservação. Esses acrônimos vêm das [Categorias da Lista Vermelha da IUCN](https://www.iucnredlist.org/), uma organização que cataloga o status das espécies.
|
||||
>
|
||||
> - CR: Criticamente Ameaçado
|
||||
> - EN: Ameaçado
|
||||
> - EX: Extinto
|
||||
> - LC: Pouco Preocupante
|
||||
> - NT: Quase Ameaçado
|
||||
> - VU: Vulnerável
|
||||
|
||||
Esses são valores baseados em texto, então você precisará fazer uma transformação para criar um histograma. Usando o dataframe filteredBirds, exiba seu status de conservação junto com sua envergadura mínima. O que você observa?
|
||||
|
||||
```r
|
||||
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EX'] <- 'x1'
|
||||
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'CR'] <- 'x2'
|
||||
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'EN'] <- 'x3'
|
||||
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'NT'] <- 'x4'
|
||||
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'VU'] <- 'x5'
|
||||
birds_filtered_1$ConservationStatus[birds_filtered_1$ConservationStatus == 'LC'] <- 'x6'
|
||||
|
||||
ggplot(data=birds_filtered_1, aes(x = MinWingspan, fill = ConservationStatus)) +
|
||||
geom_histogram(position = "identity", alpha = 0.4, bins = 20) +
|
||||
scale_fill_manual(name="Conservation Status",values=c("red","green","blue","pink"),labels=c("Endangered","Near Threathened","Vulnerable","Least Concern"))
|
||||
```
|
||||
|
||||

|
||||
|
||||
Não parece haver uma boa correlação entre envergadura mínima e status de conservação. Teste outros elementos do conjunto de dados usando este método. Você encontra alguma correlação?
|
||||
|
||||
## Gráficos de densidade
|
||||
|
||||
Você pode ter notado que os histogramas que analisamos até agora são 'escalonados' e não fluem suavemente em um arco. Para mostrar um gráfico de densidade mais suave, você pode tentar um gráfico de densidade.
|
||||
|
||||
Vamos trabalhar com gráficos de densidade agora!
|
||||
|
||||
```r
|
||||
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
|
||||
geom_density()
|
||||
```
|
||||

|
||||
|
||||
Você pode ver como o gráfico reflete o anterior para os dados de envergadura mínima; é apenas um pouco mais suave. Se você quisesse revisitar aquela linha irregular de MaxBodyMass no segundo gráfico que construiu, poderia suavizá-la muito bem recriando-a usando este método:
|
||||
|
||||
```r
|
||||
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
|
||||
geom_density()
|
||||
```
|
||||

|
||||
|
||||
Se você quisesse uma linha suave, mas não muito suave, edite o parâmetro `adjust`:
|
||||
|
||||
```r
|
||||
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
|
||||
geom_density(adjust = 1/5)
|
||||
```
|
||||

|
||||
|
||||
✅ Leia sobre os parâmetros disponíveis para este tipo de gráfico e experimente!
|
||||
|
||||
Este tipo de gráfico oferece visualizações explicativas muito bonitas. Com algumas linhas de código, por exemplo, você pode mostrar a densidade de massa corporal máxima por ordem de pássaros:
|
||||
|
||||
```r
|
||||
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
|
||||
geom_density(alpha=0.5)
|
||||
```
|
||||

|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Os histogramas são um tipo de gráfico mais sofisticado do que gráficos de dispersão, gráficos de barras ou gráficos de linhas básicos. Faça uma busca na internet para encontrar bons exemplos do uso de histogramas. Como eles são usados, o que demonstram e em quais campos ou áreas de estudo tendem a ser utilizados?
|
||||
|
||||
## [Quiz pós-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Nesta lição, você usou `ggplot2` e começou a trabalhar para mostrar gráficos mais sofisticados. Pesquise sobre `geom_density_2d()`, uma "curva de densidade de probabilidade contínua em uma ou mais dimensões". Leia a [documentação](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) para entender como funciona.
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Coloque suas habilidades em prática](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. 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 do uso desta tradução.
|
||||
@ -0,0 +1,16 @@
|
||||
# Aplique suas habilidades
|
||||
|
||||
## Instruções
|
||||
|
||||
Até agora, você trabalhou com o conjunto de dados de aves de Minnesota para descobrir informações sobre quantidades de aves e densidade populacional. Pratique a aplicação dessas técnicas experimentando um conjunto de dados diferente, talvez obtido no [Kaggle](https://www.kaggle.com/). Crie um script em R para contar uma história sobre esse conjunto de dados e certifique-se de usar histogramas ao discuti-lo.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | --- |
|
||||
Um script é apresentado com anotações sobre este conjunto de dados, incluindo sua fonte, e utiliza pelo menos 5 histogramas para descobrir fatos sobre os dados. | Um script é apresentado com anotações incompletas ou erros. | Um script é apresentado sem anotações e inclui erros.
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,188 @@
|
||||
# Visualizando Proporções
|
||||
|
||||
| ](../../../sketchnotes/11-Visualizing-Proportions.png)|
|
||||
|:---:|
|
||||
|Visualizando Proporções - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Nesta lição, você usará um conjunto de dados com foco na natureza para visualizar proporções, como a quantidade de diferentes tipos de fungos presentes em um conjunto de dados sobre cogumelos. Vamos explorar esses fascinantes fungos usando um conjunto de dados da Audubon que lista detalhes sobre 23 espécies de cogumelos com lamelas das famílias Agaricus e Lepiota. Você experimentará visualizações interessantes como:
|
||||
|
||||
- Gráficos de pizza 🥧
|
||||
- Gráficos de rosca 🍩
|
||||
- Gráficos de waffle 🧇
|
||||
|
||||
> 💡 Um projeto muito interessante chamado [Charticulator](https://charticulator.com) da Microsoft Research oferece uma interface gratuita de arrastar e soltar para visualizações de dados. Em um de seus tutoriais, eles também usam este conjunto de dados de cogumelos! Assim, você pode explorar os dados e aprender a biblioteca ao mesmo tempo: [Tutorial do Charticulator](https://charticulator.com/tutorials/tutorial4.html).
|
||||
|
||||
## [Quiz pré-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/20)
|
||||
|
||||
## Conheça seus cogumelos 🍄
|
||||
|
||||
Cogumelos são muito interessantes. Vamos importar um conjunto de dados para estudá-los:
|
||||
|
||||
```r
|
||||
mushrooms = read.csv('../../data/mushrooms.csv')
|
||||
head(mushrooms)
|
||||
```
|
||||
Uma tabela é exibida com alguns dados excelentes para análise:
|
||||
|
||||
| classe | formato do chapéu | superfície do chapéu | cor do chapéu | machucados | odor | fixação das lamelas | espaçamento das lamelas | tamanho das lamelas | cor das lamelas | formato do caule | raiz do caule | superfície acima do anel | superfície abaixo do anel | cor acima do anel | cor abaixo do anel | tipo de véu | cor do véu | número de anéis | tipo de anel | cor do esporo | população | habitat |
|
||||
| --------- | ----------------- | -------------------- | ------------- | ---------- | ------- | ------------------- | ----------------------- | ------------------- | --------------- | --------------- | ------------ | ------------------------ | ------------------------ | ----------------- | ----------------- | ---------- | ---------- | -------------- | ------------ | ------------- | ---------- | ------- |
|
||||
| Venenoso | Convexo | Liso | Marrom | Machucado | Pungente | Livre | Fechado | Estreito | Preto | Alargado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Espalhado | Urbano |
|
||||
| Comestível| Convexo | Liso | Amarelo | Machucado | Amêndoa | Livre | Fechado | Largo | Preto | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Marrom | Numeroso | Gramíneas |
|
||||
| Comestível| Sino | Liso | Branco | Machucado | Anis | Livre | Fechado | Largo | Marrom | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Marrom | Numeroso | Prados |
|
||||
| Venenoso | Convexo | Escamoso | Branco | Machucado | Pungente | Livre | Fechado | Estreito | Marrom | Alargado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Espalhado | Urbano |
|
||||
| Comestível| Convexo | Liso | Verde | Sem machucados | Nenhum | Livre | Aglomerado | Largo | Preto | Afunilado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Evanescente | Marrom | Abundante | Gramíneas |
|
||||
| Comestível| Convexo | Escamoso | Amarelo | Machucado | Amêndoa | Livre | Fechado | Largo | Marrom | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Numeroso | Gramíneas |
|
||||
|
||||
Logo de cara, você percebe que todos os dados são textuais. Será necessário converter esses dados para poder usá-los em um gráfico. Na verdade, a maior parte dos dados está representada como um objeto:
|
||||
|
||||
```r
|
||||
names(mushrooms)
|
||||
```
|
||||
|
||||
A saída é:
|
||||
|
||||
```output
|
||||
[1] "class" "cap.shape"
|
||||
[3] "cap.surface" "cap.color"
|
||||
[5] "bruises" "odor"
|
||||
[7] "gill.attachment" "gill.spacing"
|
||||
[9] "gill.size" "gill.color"
|
||||
[11] "stalk.shape" "stalk.root"
|
||||
[13] "stalk.surface.above.ring" "stalk.surface.below.ring"
|
||||
[15] "stalk.color.above.ring" "stalk.color.below.ring"
|
||||
[17] "veil.type" "veil.color"
|
||||
[19] "ring.number" "ring.type"
|
||||
[21] "spore.print.color" "population"
|
||||
[23] "habitat"
|
||||
```
|
||||
Pegue esses dados e converta a coluna 'class' para uma categoria:
|
||||
|
||||
```r
|
||||
library(dplyr)
|
||||
grouped=mushrooms %>%
|
||||
group_by(class) %>%
|
||||
summarise(count=n())
|
||||
```
|
||||
|
||||
Agora, se você imprimir os dados dos cogumelos, verá que eles foram agrupados em categorias de acordo com a classe venenoso/comestível:
|
||||
```r
|
||||
View(grouped)
|
||||
```
|
||||
|
||||
| classe | contagem |
|
||||
| --------- | -------- |
|
||||
| Comestível| 4208 |
|
||||
| Venenoso | 3916 |
|
||||
|
||||
Se você seguir a ordem apresentada nesta tabela para criar os rótulos da categoria 'class', poderá construir um gráfico de pizza.
|
||||
|
||||
## Pizza!
|
||||
|
||||
```r
|
||||
pie(grouped$count,grouped$class, main="Edible?")
|
||||
```
|
||||
Voilá, um gráfico de pizza mostrando as proporções desses dados de acordo com essas duas classes de cogumelos. É muito importante obter a ordem correta dos rótulos, especialmente aqui, então certifique-se de verificar a ordem com a qual o array de rótulos foi construído!
|
||||
|
||||

|
||||
|
||||
## Roscas!
|
||||
|
||||
Um gráfico de pizza um pouco mais visualmente interessante é o gráfico de rosca, que é um gráfico de pizza com um buraco no meio. Vamos observar nossos dados usando este método.
|
||||
|
||||
Veja os diversos habitats onde os cogumelos crescem:
|
||||
|
||||
```r
|
||||
library(dplyr)
|
||||
habitat=mushrooms %>%
|
||||
group_by(habitat) %>%
|
||||
summarise(count=n())
|
||||
View(habitat)
|
||||
```
|
||||
A saída é:
|
||||
| habitat | contagem |
|
||||
| --------- | -------- |
|
||||
| Gramíneas | 2148 |
|
||||
| Folhas | 832 |
|
||||
| Prados | 292 |
|
||||
| Trilhas | 1144 |
|
||||
| Urbano | 368 |
|
||||
| Resíduos | 192 |
|
||||
| Madeira | 3148 |
|
||||
|
||||
Aqui, você está agrupando seus dados por habitat. Existem 7 listados, então use-os como rótulos para seu gráfico de rosca:
|
||||
|
||||
```r
|
||||
library(ggplot2)
|
||||
library(webr)
|
||||
PieDonut(habitat, aes(habitat, count=count))
|
||||
```
|
||||
|
||||

|
||||
|
||||
Este código usa duas bibliotecas - ggplot2 e webr. Usando a função PieDonut da biblioteca webr, podemos criar um gráfico de rosca facilmente!
|
||||
|
||||
Gráficos de rosca no R também podem ser feitos usando apenas a biblioteca ggplot2. Você pode aprender mais sobre isso [aqui](https://www.r-graph-gallery.com/128-ring-or-donut-plot.html) e experimentar por conta própria.
|
||||
|
||||
Agora que você sabe como agrupar seus dados e exibi-los como pizza ou rosca, pode explorar outros tipos de gráficos. Experimente um gráfico de waffle, que é apenas uma maneira diferente de explorar quantidades.
|
||||
|
||||
## Waffles!
|
||||
|
||||
Um gráfico do tipo 'waffle' é uma maneira diferente de visualizar quantidades como uma matriz 2D de quadrados. Experimente visualizar as diferentes quantidades de cores de chapéus de cogumelos neste conjunto de dados. Para isso, você precisa instalar uma biblioteca auxiliar chamada [waffle](https://cran.r-project.org/web/packages/waffle/waffle.pdf) e usá-la para gerar sua visualização:
|
||||
|
||||
```r
|
||||
install.packages("waffle", repos = "https://cinc.rud.is")
|
||||
```
|
||||
|
||||
Selecione um segmento de seus dados para agrupar:
|
||||
|
||||
```r
|
||||
library(dplyr)
|
||||
cap_color=mushrooms %>%
|
||||
group_by(cap.color) %>%
|
||||
summarise(count=n())
|
||||
View(cap_color)
|
||||
```
|
||||
|
||||
Crie um gráfico de waffle criando rótulos e agrupando seus dados:
|
||||
|
||||
```r
|
||||
library(waffle)
|
||||
names(cap_color$count) = paste0(cap_color$cap.color)
|
||||
waffle((cap_color$count/10), rows = 7, title = "Waffle Chart")+scale_fill_manual(values=c("brown", "#F0DC82", "#D2691E", "green",
|
||||
"pink", "purple", "red", "grey",
|
||||
"yellow","white"))
|
||||
```
|
||||
|
||||
Usando um gráfico de waffle, você pode ver claramente as proporções das cores dos chapéus neste conjunto de dados de cogumelos. Curiosamente, há muitos cogumelos com chapéus verdes!
|
||||
|
||||

|
||||
|
||||
Nesta lição, você aprendeu três maneiras de visualizar proporções. Primeiro, você precisa agrupar seus dados em categorias e, em seguida, decidir qual é a melhor maneira de exibir os dados - pizza, rosca ou waffle. Todas são deliciosas e proporcionam ao usuário uma visão instantânea de um conjunto de dados.
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Tente recriar esses gráficos saborosos no [Charticulator](https://charticulator.com).
|
||||
## [Quiz pós-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/21)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Às vezes, não é óbvio quando usar um gráfico de pizza, rosca ou waffle. Aqui estão alguns artigos para ler sobre este tópico:
|
||||
|
||||
https://www.beautiful.ai/blog/battle-of-the-charts-pie-chart-vs-donut-chart
|
||||
|
||||
https://medium.com/@hypsypops/pie-chart-vs-donut-chart-showdown-in-the-ring-5d24fd86a9ce
|
||||
|
||||
https://www.mit.edu/~mbarker/formula1/f1help/11-ch-c6.htm
|
||||
|
||||
https://medium.datadriveninvestor.com/data-visualization-done-the-right-way-with-tableau-waffle-chart-fdf2a19be402
|
||||
|
||||
Pesquise mais informações sobre essa decisão difícil.
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Tente no Excel](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,168 @@
|
||||
# Visualizando Relações: Tudo Sobre o Mel 🍯
|
||||
|
||||
| ](../../../sketchnotes/12-Visualizing-Relationships.png)|
|
||||
|:---:|
|
||||
|Visualizando Relações - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Continuando com o foco na natureza em nossa pesquisa, vamos descobrir visualizações interessantes para mostrar as relações entre vários tipos de mel, de acordo com um conjunto de dados derivado do [Departamento de Agricultura dos Estados Unidos](https://www.nass.usda.gov/About_NASS/index.php).
|
||||
|
||||
Este conjunto de dados, com cerca de 600 itens, exibe a produção de mel em muitos estados dos EUA. Por exemplo, você pode observar o número de colônias, rendimento por colônia, produção total, estoques, preço por libra e valor do mel produzido em um determinado estado de 1998 a 2012, com uma linha por ano para cada estado.
|
||||
|
||||
Será interessante visualizar a relação entre a produção anual de um estado e, por exemplo, o preço do mel nesse estado. Alternativamente, você poderia visualizar a relação entre o rendimento de mel por colônia em diferentes estados. Este período cobre o devastador 'CCD' ou 'Desordem do Colapso das Colônias', observado pela primeira vez em 2006 (http://npic.orst.edu/envir/ccd.html), tornando este um conjunto de dados significativo para estudo. 🐝
|
||||
|
||||
## [Quiz pré-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/22)
|
||||
|
||||
Nesta lição, você pode usar o ggplot2, que já utilizou antes, como uma boa biblioteca para visualizar relações entre variáveis. Particularmente interessante é o uso das funções `geom_point` e `qplot` do ggplot2, que permitem criar gráficos de dispersão e gráficos de linha para visualizar rapidamente '[relações estatísticas](https://ggplot2.tidyverse.org/)', ajudando o cientista de dados a entender melhor como as variáveis se relacionam.
|
||||
|
||||
## Gráficos de Dispersão
|
||||
|
||||
Use um gráfico de dispersão para mostrar como o preço do mel evoluiu, ano após ano, por estado. O ggplot2, usando `ggplot` e `geom_point`, agrupa convenientemente os dados por estado e exibe pontos de dados para dados categóricos e numéricos.
|
||||
|
||||
Vamos começar importando os dados e o Seaborn:
|
||||
|
||||
```r
|
||||
honey=read.csv('../../data/honey.csv')
|
||||
head(honey)
|
||||
```
|
||||
Você notará que os dados de mel possuem várias colunas interessantes, incluindo ano e preço por libra. Vamos explorar esses dados, agrupados por estado dos EUA:
|
||||
|
||||
| estado | numcol | rendimento_por_col | produção_total | estoques | preço_por_libra | valor_prod | ano |
|
||||
| ------ | ------ | ------------------ | -------------- | -------- | ---------------- | ---------- | --- |
|
||||
| AL | 16000 | 71 | 1136000 | 159000 | 0.72 | 818000 | 1998 |
|
||||
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
|
||||
| AR | 53000 | 65 | 3445000 | 1688000 | 0.59 | 2033000 | 1998 |
|
||||
| CA | 450000 | 83 | 37350000 | 12326000 | 0.62 | 23157000 | 1998 |
|
||||
| CO | 27000 | 72 | 1944000 | 1594000 | 0.7 | 1361000 | 1998 |
|
||||
| FL | 230000 | 98 | 22540000 | 4508000 | 0.64 | 14426000 | 1998 |
|
||||
|
||||
Crie um gráfico de dispersão básico para mostrar a relação entre o preço por libra do mel e seu estado de origem nos EUA. Ajuste o eixo `y` para ser alto o suficiente para exibir todos os estados:
|
||||
|
||||
```r
|
||||
library(ggplot2)
|
||||
ggplot(honey, aes(x = priceperlb, y = state)) +
|
||||
geom_point(colour = "blue")
|
||||
```
|
||||

|
||||
|
||||
Agora, mostre os mesmos dados com um esquema de cores de mel para ilustrar como o preço evolui ao longo dos anos. Você pode fazer isso adicionando um parâmetro 'scale_color_gradientn' para mostrar a mudança, ano após ano:
|
||||
|
||||
> ✅ Saiba mais sobre o [scale_color_gradientn](https://www.rdocumentation.org/packages/ggplot2/versions/0.9.1/topics/scale_colour_gradientn) - experimente um esquema de cores em arco-íris!
|
||||
|
||||
```r
|
||||
ggplot(honey, aes(x = priceperlb, y = state, color=year)) +
|
||||
geom_point()+scale_color_gradientn(colours = colorspace::heat_hcl(7))
|
||||
```
|
||||

|
||||
|
||||
Com essa mudança no esquema de cores, você pode ver claramente uma forte progressão ao longo dos anos no preço do mel por libra. De fato, se você observar um conjunto de amostra nos dados para verificar (escolha um estado, como o Arizona, por exemplo), verá um padrão de aumento de preços ano após ano, com poucas exceções:
|
||||
|
||||
| estado | numcol | rendimento_por_col | produção_total | estoques | preço_por_libra | valor_prod | ano |
|
||||
| ------ | ------ | ------------------ | -------------- | -------- | ---------------- | ---------- | --- |
|
||||
| AZ | 55000 | 60 | 3300000 | 1485000 | 0.64 | 2112000 | 1998 |
|
||||
| AZ | 52000 | 62 | 3224000 | 1548000 | 0.62 | 1999000 | 1999 |
|
||||
| AZ | 40000 | 59 | 2360000 | 1322000 | 0.73 | 1723000 | 2000 |
|
||||
| AZ | 43000 | 59 | 2537000 | 1142000 | 0.72 | 1827000 | 2001 |
|
||||
| AZ | 38000 | 63 | 2394000 | 1197000 | 1.08 | 2586000 | 2002 |
|
||||
| AZ | 35000 | 72 | 2520000 | 983000 | 1.34 | 3377000 | 2003 |
|
||||
| AZ | 32000 | 55 | 1760000 | 774000 | 1.11 | 1954000 | 2004 |
|
||||
| AZ | 36000 | 50 | 1800000 | 720000 | 1.04 | 1872000 | 2005 |
|
||||
| AZ | 30000 | 65 | 1950000 | 839000 | 0.91 | 1775000 | 2006 |
|
||||
| AZ | 30000 | 64 | 1920000 | 902000 | 1.26 | 2419000 | 2007 |
|
||||
| AZ | 25000 | 64 | 1600000 | 336000 | 1.26 | 2016000 | 2008 |
|
||||
| AZ | 20000 | 52 | 1040000 | 562000 | 1.45 | 1508000 | 2009 |
|
||||
| AZ | 24000 | 77 | 1848000 | 665000 | 1.52 | 2809000 | 2010 |
|
||||
| AZ | 23000 | 53 | 1219000 | 427000 | 1.55 | 1889000 | 2011 |
|
||||
| AZ | 22000 | 46 | 1012000 | 253000 | 1.79 | 1811000 | 2012 |
|
||||
|
||||
Outra forma de visualizar essa progressão é usar o tamanho, em vez da cor. Para usuários daltônicos, isso pode ser uma opção melhor. Edite sua visualização para mostrar o aumento do preço por meio de um aumento no tamanho dos pontos:
|
||||
|
||||
```r
|
||||
ggplot(honey, aes(x = priceperlb, y = state)) +
|
||||
geom_point(aes(size = year),colour = "blue") +
|
||||
scale_size_continuous(range = c(0.25, 3))
|
||||
```
|
||||
Você pode ver o tamanho dos pontos aumentando gradualmente.
|
||||
|
||||

|
||||
|
||||
Isso é um caso simples de oferta e demanda? Devido a fatores como mudanças climáticas e colapso das colônias, há menos mel disponível para compra ano após ano, e, portanto, o preço aumenta?
|
||||
|
||||
Para descobrir uma correlação entre algumas das variáveis neste conjunto de dados, vamos explorar alguns gráficos de linha.
|
||||
|
||||
## Gráficos de Linha
|
||||
|
||||
Pergunta: Há um aumento claro no preço do mel por libra ano após ano? Você pode descobrir isso mais facilmente criando um único gráfico de linha:
|
||||
|
||||
```r
|
||||
qplot(honey$year,honey$priceperlb, geom='smooth', span =0.5, xlab = "year",ylab = "priceperlb")
|
||||
```
|
||||
Resposta: Sim, com algumas exceções por volta do ano de 2003:
|
||||
|
||||

|
||||
|
||||
Pergunta: Bem, em 2003 também podemos ver um aumento na oferta de mel? E se você observar a produção total ano após ano?
|
||||
|
||||
```python
|
||||
qplot(honey$year,honey$totalprod, geom='smooth', span =0.5, xlab = "year",ylab = "totalprod")
|
||||
```
|
||||
|
||||

|
||||
|
||||
Resposta: Não exatamente. Se você observar a produção total, parece que ela realmente aumentou naquele ano específico, embora, de forma geral, a quantidade de mel produzida esteja em declínio durante esses anos.
|
||||
|
||||
Pergunta: Nesse caso, o que poderia ter causado o aumento no preço do mel por volta de 2003?
|
||||
|
||||
Para descobrir isso, você pode explorar uma grade de facetas.
|
||||
|
||||
## Grades de Facetas
|
||||
|
||||
Grades de facetas pegam um aspecto do seu conjunto de dados (neste caso, você pode escolher 'ano' para evitar produzir muitas facetas). O Seaborn pode então criar um gráfico para cada uma dessas facetas de suas coordenadas x e y escolhidas, facilitando a comparação visual. O ano de 2003 se destaca nesse tipo de comparação?
|
||||
|
||||
Crie uma grade de facetas usando `facet_wrap`, conforme recomendado pela [documentação do ggplot2](https://ggplot2.tidyverse.org/reference/facet_wrap.html).
|
||||
|
||||
```r
|
||||
ggplot(honey, aes(x=yieldpercol, y = numcol,group = 1)) +
|
||||
geom_line() + facet_wrap(vars(year))
|
||||
```
|
||||
Nesta visualização, você pode comparar o rendimento por colônia e o número de colônias ano após ano, lado a lado, com um wrap configurado para 3 colunas:
|
||||
|
||||

|
||||
|
||||
Para este conjunto de dados, nada particularmente se destaca em relação ao número de colônias e seu rendimento, ano após ano e estado por estado. Existe uma maneira diferente de encontrar uma correlação entre essas duas variáveis?
|
||||
|
||||
## Gráficos de Linha Dupla
|
||||
|
||||
Experimente um gráfico de múltiplas linhas sobrepondo dois gráficos de linha um sobre o outro, usando as funções `par` e `plot` do R. Vamos plotar o ano no eixo x e exibir dois eixos y. Assim, exibiremos o rendimento por colônia e o número de colônias, sobrepostos:
|
||||
|
||||
```r
|
||||
par(mar = c(5, 4, 4, 4) + 0.3)
|
||||
plot(honey$year, honey$numcol, pch = 16, col = 2,type="l")
|
||||
par(new = TRUE)
|
||||
plot(honey$year, honey$yieldpercol, pch = 17, col = 3,
|
||||
axes = FALSE, xlab = "", ylab = "",type="l")
|
||||
axis(side = 4, at = pretty(range(y2)))
|
||||
mtext("colony yield", side = 4, line = 3)
|
||||
```
|
||||

|
||||
|
||||
Embora nada salte aos olhos em torno do ano de 2003, isso nos permite terminar esta lição com uma nota um pouco mais feliz: embora o número de colônias esteja em declínio geral, ele está se estabilizando, mesmo que o rendimento por colônia esteja diminuindo.
|
||||
|
||||
Vai, abelhas, vai!
|
||||
|
||||
🐝❤️
|
||||
## 🚀 Desafio
|
||||
|
||||
Nesta lição, você aprendeu um pouco mais sobre outros usos de gráficos de dispersão e grades de linha, incluindo grades de facetas. Desafie-se a criar uma grade de facetas usando um conjunto de dados diferente, talvez um que você tenha usado antes destas lições. Observe quanto tempo leva para criá-las e como você precisa ter cuidado com a quantidade de grades que deseja desenhar usando essas técnicas.
|
||||
## [Quiz pós-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/23)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Gráficos de linha podem ser simples ou bastante complexos. Faça uma leitura na [documentação do ggplot2](https://ggplot2.tidyverse.org/reference/geom_path.html#:~:text=geom_line()%20connects%20them%20in,which%20cases%20are%20connected%20together) sobre as várias maneiras de construí-los. Tente aprimorar os gráficos de linha que você criou nesta lição com outros métodos listados na documentação.
|
||||
## Tarefa
|
||||
|
||||
[Explore a colmeia](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,173 @@
|
||||
# Criando Visualizações Significativas
|
||||
|
||||
|](../../../sketchnotes/13-MeaningfulViz.png)|
|
||||
|:---:|
|
||||
| Visualizações Significativas - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
> "Se você torturar os dados por tempo suficiente, eles confessarão qualquer coisa" -- [Ronald Coase](https://en.wikiquote.org/wiki/Ronald_Coase)
|
||||
|
||||
Uma das habilidades básicas de um cientista de dados é a capacidade de criar uma visualização de dados significativa que ajude a responder às perguntas que você possa ter. Antes de visualizar seus dados, é necessário garantir que eles foram limpos e preparados, como você fez em lições anteriores. Depois disso, você pode começar a decidir como apresentar os dados da melhor forma.
|
||||
|
||||
Nesta lição, você revisará:
|
||||
|
||||
1. Como escolher o tipo de gráfico certo
|
||||
2. Como evitar gráficos enganosos
|
||||
3. Como trabalhar com cores
|
||||
4. Como estilizar seus gráficos para melhor legibilidade
|
||||
5. Como criar soluções de gráficos animados ou em 3D
|
||||
6. Como construir uma visualização criativa
|
||||
|
||||
## [Quiz Pré-Aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/24)
|
||||
|
||||
## Escolha o tipo de gráfico certo
|
||||
|
||||
Em lições anteriores, você experimentou criar vários tipos interessantes de visualizações de dados usando Matplotlib e Seaborn. Em geral, você pode selecionar o [tipo certo de gráfico](https://chartio.com/learn/charts/how-to-select-a-data-vizualization/) para a pergunta que está fazendo usando esta tabela:
|
||||
|
||||
| Você precisa: | Você deve usar: |
|
||||
| -------------------------- | ------------------------------- |
|
||||
| Mostrar tendências ao longo do tempo | Linha |
|
||||
| Comparar categorias | Barra, Pizza |
|
||||
| Comparar totais | Pizza, Barra Empilhada |
|
||||
| Mostrar relações | Dispersão, Linha, Faceta, Linha Dupla |
|
||||
| Mostrar distribuições | Dispersão, Histograma, Caixa |
|
||||
| Mostrar proporções | Pizza, Donut, Waffle |
|
||||
|
||||
> ✅ Dependendo da composição dos seus dados, pode ser necessário convertê-los de texto para numérico para que um determinado gráfico os suporte.
|
||||
|
||||
## Evite enganos
|
||||
|
||||
Mesmo que um cientista de dados seja cuidadoso ao escolher o gráfico certo para os dados certos, há muitas maneiras de exibir dados de forma a provar um ponto, muitas vezes às custas de comprometer os próprios dados. Existem muitos exemplos de gráficos e infográficos enganosos!
|
||||
|
||||
[](https://www.youtube.com/watch?v=oX74Nge8Wkw "Como os gráficos mentem")
|
||||
|
||||
> 🎥 Clique na imagem acima para assistir a uma palestra sobre gráficos enganosos
|
||||
|
||||
Este gráfico inverte o eixo X para mostrar o oposto da verdade, com base na data:
|
||||
|
||||

|
||||
|
||||
[Este gráfico](https://media.firstcoastnews.com/assets/WTLV/images/170ae16f-4643-438f-b689-50d66ca6a8d8/170ae16f-4643-438f-b689-50d66ca6a8d8_1140x641.jpg) é ainda mais enganoso, pois o olhar é atraído para a direita, levando à conclusão de que, ao longo do tempo, os casos de COVID diminuíram nos vários condados. Na verdade, se você olhar atentamente para as datas, verá que elas foram reorganizadas para criar essa tendência enganosa de queda.
|
||||
|
||||

|
||||
|
||||
Este exemplo notório usa cor E um eixo Y invertido para enganar: em vez de concluir que as mortes por armas aumentaram após a aprovação de uma legislação favorável às armas, o olhar é enganado para pensar que o oposto é verdadeiro:
|
||||
|
||||

|
||||
|
||||
Este gráfico estranho mostra como a proporção pode ser manipulada, de forma hilária:
|
||||
|
||||

|
||||
|
||||
Comparar o incomparável é mais um truque duvidoso. Existe um [site maravilhoso](https://tylervigen.com/spurious-correlations) dedicado a 'correlações espúrias', exibindo 'fatos' que correlacionam coisas como a taxa de divórcio no Maine e o consumo de margarina. Um grupo no Reddit também coleta os [usos feios](https://www.reddit.com/r/dataisugly/top/?t=all) de dados.
|
||||
|
||||
É importante entender como o olhar pode ser facilmente enganado por gráficos enganosos. Mesmo que a intenção do cientista de dados seja boa, a escolha de um tipo ruim de gráfico, como um gráfico de pizza com muitas categorias, pode ser enganosa.
|
||||
|
||||
## Cor
|
||||
|
||||
Você viu no gráfico de 'violência armada na Flórida' acima como a cor pode fornecer uma camada adicional de significado aos gráficos, especialmente aqueles que não foram projetados usando bibliotecas como ggplot2 e RColorBrewer, que vêm com várias bibliotecas e paletas de cores validadas. Se você estiver criando um gráfico manualmente, estude um pouco sobre [teoria das cores](https://colormatters.com/color-and-design/basic-color-theory).
|
||||
|
||||
> ✅ Esteja ciente, ao projetar gráficos, que acessibilidade é um aspecto importante da visualização. Alguns dos seus usuários podem ser daltônicos - seu gráfico é exibido bem para usuários com deficiências visuais?
|
||||
|
||||
Tenha cuidado ao escolher cores para seu gráfico, pois elas podem transmitir significados que você não pretende. As 'senhoras de rosa' no gráfico de 'altura' acima transmitem um significado distintamente 'feminino' que aumenta a estranheza do próprio gráfico.
|
||||
|
||||
Embora o [significado das cores](https://colormatters.com/color-symbolism/the-meanings-of-colors) possa ser diferente em diferentes partes do mundo e tenda a mudar de acordo com sua tonalidade, de forma geral, os significados incluem:
|
||||
|
||||
| Cor | Significado |
|
||||
| ------ | ------------------- |
|
||||
| vermelho | poder |
|
||||
| azul | confiança, lealdade |
|
||||
| amarelo | felicidade, cautela |
|
||||
| verde | ecologia, sorte, inveja |
|
||||
| roxo | felicidade |
|
||||
| laranja | vivacidade |
|
||||
|
||||
Se você for encarregado de criar um gráfico com cores personalizadas, certifique-se de que seus gráficos sejam acessíveis e que a cor escolhida coincida com o significado que você está tentando transmitir.
|
||||
|
||||
## Estilizando seus gráficos para legibilidade
|
||||
|
||||
Gráficos não são significativos se não forem legíveis! Reserve um momento para considerar o estilo da largura e altura do seu gráfico para que ele se ajuste bem aos seus dados. Se uma variável (como todos os 50 estados) precisar ser exibida, mostre-os verticalmente no eixo Y, se possível, para evitar um gráfico com rolagem horizontal.
|
||||
|
||||
Rotule seus eixos, forneça uma legenda, se necessário, e ofereça tooltips para melhor compreensão dos dados.
|
||||
|
||||
Se seus dados forem textuais e extensos no eixo X, você pode inclinar o texto para melhorar a legibilidade. [plot3D](https://cran.r-project.org/web/packages/plot3D/index.html) oferece gráficos em 3D, se seus dados suportarem. Visualizações de dados sofisticadas podem ser produzidas usando essa ferramenta.
|
||||
|
||||

|
||||
|
||||
## Exibição de gráficos animados e em 3D
|
||||
|
||||
Algumas das melhores visualizações de dados hoje em dia são animadas. Shirley Wu tem exemplos incríveis feitos com D3, como '[film flowers](http://bl.ocks.org/sxywu/raw/d612c6c653fb8b4d7ff3d422be164a5d/)', onde cada flor é uma visualização de um filme. Outro exemplo para o Guardian é 'bussed out', uma experiência interativa que combina visualizações com Greensock e D3, além de um formato de artigo com narrativa para mostrar como NYC lida com seu problema de moradores de rua, enviando pessoas para fora da cidade.
|
||||
|
||||

|
||||
|
||||
> "Bussed Out: Como os EUA Movem seus Moradores de Rua" do [Guardian](https://www.theguardian.com/us-news/ng-interactive/2017/dec/20/bussed-out-america-moves-homeless-people-country-study). Visualizações por Nadieh Bremer & Shirley Wu
|
||||
|
||||
Embora esta lição não seja suficiente para ensinar essas poderosas bibliotecas de visualização em profundidade, experimente usar D3 em um aplicativo Vue.js para exibir uma visualização do livro "Ligações Perigosas" como uma rede social animada.
|
||||
|
||||
> "Les Liaisons Dangereuses" é um romance epistolar, ou seja, um romance apresentado como uma série de cartas. Escrito em 1782 por Choderlos de Laclos, conta a história das manobras sociais imorais e vingativas de dois protagonistas da aristocracia francesa do final do século XVIII, o Visconde de Valmont e a Marquesa de Merteuil. Ambos encontram seu fim trágico, mas não sem causar muitos danos sociais. O romance se desenrola como uma série de cartas escritas para várias pessoas em seus círculos, tramando vingança ou simplesmente causando problemas. Crie uma visualização dessas cartas para descobrir os principais personagens da narrativa, visualmente.
|
||||
|
||||
Você completará um aplicativo web que exibirá uma visão animada dessa rede social. Ele usa uma biblioteca criada para gerar uma [visualização de uma rede](https://github.com/emiliorizzo/vue-d3-network) usando Vue.js e D3. Quando o aplicativo estiver em execução, você poderá mover os nós na tela para reorganizar os dados.
|
||||
|
||||

|
||||
|
||||
## Projeto: Crie um gráfico para mostrar uma rede usando D3.js
|
||||
|
||||
> Esta pasta de lição inclui uma pasta `solution` onde você pode encontrar o projeto concluído, para sua referência.
|
||||
|
||||
1. Siga as instruções no arquivo README.md na pasta raiz do starter. Certifique-se de que você tenha NPM e Node.js instalados em sua máquina antes de instalar as dependências do projeto.
|
||||
|
||||
2. Abra a pasta `starter/src`. Você encontrará uma pasta `assets` onde há um arquivo .json com todas as cartas do romance, numeradas, com anotações de 'para' e 'de'.
|
||||
|
||||
3. Complete o código em `components/Nodes.vue` para habilitar a visualização. Procure pelo método chamado `createLinks()` e adicione o seguinte loop aninhado.
|
||||
|
||||
Percorra o objeto .json para capturar os dados de 'para' e 'de' das cartas e construa o objeto `links` para que a biblioteca de visualização possa consumi-lo:
|
||||
|
||||
```javascript
|
||||
//loop through letters
|
||||
let f = 0;
|
||||
let t = 0;
|
||||
for (var i = 0; i < letters.length; i++) {
|
||||
for (var j = 0; j < characters.length; j++) {
|
||||
|
||||
if (characters[j] == letters[i].from) {
|
||||
f = j;
|
||||
}
|
||||
if (characters[j] == letters[i].to) {
|
||||
t = j;
|
||||
}
|
||||
}
|
||||
this.links.push({ sid: f, tid: t });
|
||||
}
|
||||
```
|
||||
|
||||
Execute seu aplicativo a partir do terminal (npm run serve) e aproveite a visualização!
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Faça um tour pela internet para descobrir visualizações enganosas. Como o autor engana o usuário, e isso é intencional? Tente corrigir as visualizações para mostrar como elas deveriam ser.
|
||||
|
||||
## [Quiz Pós-Aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/25)
|
||||
|
||||
## Revisão & Autoestudo
|
||||
|
||||
Aqui estão alguns artigos para ler sobre visualizações de dados enganosas:
|
||||
|
||||
https://gizmodo.com/how-to-lie-with-data-visualization-1563576606
|
||||
|
||||
http://ixd.prattsi.org/2017/12/visual-lies-usability-in-deceptive-data-visualizations/
|
||||
|
||||
Confira estas visualizações interessantes de ativos e artefatos históricos:
|
||||
|
||||
https://handbook.pubpub.org/
|
||||
|
||||
Leia este artigo sobre como animações podem melhorar suas visualizações:
|
||||
|
||||
https://medium.com/@EvanSinar/use-animation-to-supercharge-data-visualization-cd905a882ad4
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Crie sua própria visualização personalizada](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,33 @@
|
||||
# Visualizações
|
||||
|
||||

|
||||
> Foto por <a href="https://unsplash.com/@jenna2980?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Jenna Lee</a> no <a href="https://unsplash.com/s/photos/bees-in-a-meadow?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||
|
||||
Visualizar dados é uma das tarefas mais importantes de um cientista de dados. Imagens valem mais que mil palavras, e uma visualização pode ajudar você a identificar diversos aspectos interessantes dos seus dados, como picos, valores atípicos, agrupamentos, tendências e muito mais, que podem ajudar a entender a história que seus dados estão tentando contar.
|
||||
|
||||
Nestas cinco lições, você explorará dados provenientes da natureza e criará visualizações interessantes e bonitas usando várias técnicas.
|
||||
|
||||
| Número do Tópico | Tópico | Aula Vinculada | Autor |
|
||||
| :--------------: | :----: | :------------: | :----: |
|
||||
| 1. | Visualizando quantidades | <ul> <li> [Python](09-visualization-quantities/README.md)</li> <li>[R](../../../3-Data-Visualization/R/09-visualization-quantities) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
|
||||
| 2. | Visualizando distribuição | <ul> <li> [Python](10-visualization-distributions/README.md)</li> <li>[R](../../../3-Data-Visualization/R/10-visualization-distributions) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
|
||||
| 3. | Visualizando proporções | <ul> <li> [Python](11-visualization-proportions/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
|
||||
| 4. | Visualizando relações | <ul> <li> [Python](12-visualization-relationships/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
|
||||
| 5. | Criando Visualizações Significativas | <ul> <li> [Python](13-meaningful-visualizations/README.md)</li> <li>[R](../../../3-Data-Visualization) </li> </ul>|<ul> <li> [Jen Looper](https://twitter.com/jenlooper)</li><li> [Vidushi Gupta](https://github.com/Vidushi-Gupta)</li> <li>[Jasleen Sondhi](https://github.com/jasleen101010)</li></ul> |
|
||||
|
||||
### Créditos
|
||||
|
||||
Essas lições de visualização foram escritas com 🌸 por [Jen Looper](https://twitter.com/jenlooper), [Jasleen Sondhi](https://github.com/jasleen101010) e [Vidushi Gupta](https://github.com/Vidushi-Gupta).
|
||||
|
||||
🍯 Os dados sobre Produção de Mel nos EUA foram obtidos do projeto de Jessica Li no [Kaggle](https://www.kaggle.com/jessicali9530/honey-production). Os [dados](https://usda.library.cornell.edu/concern/publications/rn301137d) são derivados do [Departamento de Agricultura dos Estados Unidos](https://www.nass.usda.gov/About_NASS/index.php).
|
||||
|
||||
🍄 Os dados sobre cogumelos também foram obtidos do [Kaggle](https://www.kaggle.com/hatterasdunton/mushroom-classification-updated-dataset), revisados por Hatteras Dunton. Este conjunto de dados inclui descrições de amostras hipotéticas correspondentes a 23 espécies de cogumelos com lamelas das famílias Agaricus e Lepiota. Os cogumelos foram descritos no livro The Audubon Society Field Guide to North American Mushrooms (1981). Este conjunto de dados foi doado ao UCI ML 27 em 1987.
|
||||
|
||||
🦆 Os dados sobre pássaros de Minnesota foram obtidos do [Kaggle](https://www.kaggle.com/hannahcollins/minnesota-birds), extraídos do [Wikipedia](https://en.wikipedia.org/wiki/List_of_birds_of_Minnesota) por Hannah Collins.
|
||||
|
||||
Todos esses conjuntos de dados estão licenciados como [CC0: Creative Commons](https://creativecommons.org/publicdomain/zero/1.0/).
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,114 @@
|
||||
# Introdução ao Ciclo de Vida da Ciência de Dados
|
||||
|
||||
| ](../../sketchnotes/14-DataScience-Lifecycle.png)|
|
||||
|:---:|
|
||||
| Introdução ao Ciclo de Vida da Ciência de Dados - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
## [Quiz Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/26)
|
||||
|
||||
Neste ponto, você provavelmente já percebeu que a ciência de dados é um processo. Esse processo pode ser dividido em 5 etapas:
|
||||
|
||||
- Captura
|
||||
- Processamento
|
||||
- Análise
|
||||
- Comunicação
|
||||
- Manutenção
|
||||
|
||||
Esta lição foca em 3 partes do ciclo de vida: captura, processamento e manutenção.
|
||||
|
||||

|
||||
> Foto por [Berkeley School of Information](https://ischoolonline.berkeley.edu/data-science/what-is-data-science/)
|
||||
|
||||
## Captura
|
||||
|
||||
A primeira etapa do ciclo de vida é muito importante, pois as próximas etapas dependem dela. É praticamente duas etapas combinadas em uma: adquirir os dados e definir o propósito e os problemas que precisam ser abordados.
|
||||
Definir os objetivos do projeto exigirá um entendimento mais profundo do problema ou da questão. Primeiro, precisamos identificar e envolver aqueles que precisam de uma solução para seu problema. Esses podem ser stakeholders de uma empresa ou patrocinadores do projeto, que podem ajudar a identificar quem ou o que se beneficiará deste projeto, bem como o que e por que precisam disso. Um objetivo bem definido deve ser mensurável e quantificável para determinar um resultado aceitável.
|
||||
|
||||
Perguntas que um cientista de dados pode fazer:
|
||||
- Este problema já foi abordado antes? O que foi descoberto?
|
||||
- O propósito e o objetivo são compreendidos por todos os envolvidos?
|
||||
- Existe ambiguidade e como reduzi-la?
|
||||
- Quais são as restrições?
|
||||
- Como será o resultado final?
|
||||
- Quantos recursos (tempo, pessoas, computação) estão disponíveis?
|
||||
|
||||
Em seguida, é necessário identificar, coletar e, finalmente, explorar os dados necessários para alcançar esses objetivos definidos. Nesta etapa de aquisição, os cientistas de dados também devem avaliar a quantidade e a qualidade dos dados. Isso exige alguma exploração dos dados para confirmar se o que foi adquirido ajudará a alcançar o resultado desejado.
|
||||
|
||||
Perguntas que um cientista de dados pode fazer sobre os dados:
|
||||
- Quais dados já estão disponíveis para mim?
|
||||
- Quem é o proprietário desses dados?
|
||||
- Quais são as preocupações de privacidade?
|
||||
- Tenho dados suficientes para resolver este problema?
|
||||
- Os dados têm qualidade aceitável para este problema?
|
||||
- Se eu descobrir informações adicionais por meio desses dados, devemos considerar mudar ou redefinir os objetivos?
|
||||
|
||||
## Processamento
|
||||
|
||||
A etapa de processamento do ciclo de vida foca em descobrir padrões nos dados, bem como na modelagem. Algumas técnicas usadas nesta etapa exigem métodos estatísticos para revelar os padrões. Normalmente, essa seria uma tarefa tediosa para um humano realizar com um grande conjunto de dados, e por isso dependemos de computadores para acelerar o processo. Esta etapa também é onde a ciência de dados e o aprendizado de máquina se cruzam. Como você aprendeu na primeira lição, aprendizado de máquina é o processo de construir modelos para entender os dados. Modelos são representações da relação entre variáveis nos dados que ajudam a prever resultados.
|
||||
|
||||
Técnicas comuns usadas nesta etapa são abordadas no currículo de ML para Iniciantes. Siga os links para aprender mais sobre elas:
|
||||
|
||||
- [Classificação](https://github.com/microsoft/ML-For-Beginners/tree/main/4-Classification): Organizar dados em categorias para uso mais eficiente.
|
||||
- [Agrupamento](https://github.com/microsoft/ML-For-Beginners/tree/main/5-Clustering): Agrupar dados em grupos semelhantes.
|
||||
- [Regressão](https://github.com/microsoft/ML-For-Beginners/tree/main/2-Regression): Determinar as relações entre variáveis para prever ou estimar valores.
|
||||
|
||||
## Manutenção
|
||||
|
||||
No diagrama do ciclo de vida, você pode ter notado que a manutenção está entre captura e processamento. Manutenção é um processo contínuo de gerenciar, armazenar e proteger os dados ao longo do processo de um projeto e deve ser considerada durante todo o projeto.
|
||||
|
||||
### Armazenamento de Dados
|
||||
|
||||
Considerações sobre como e onde os dados são armazenados podem influenciar o custo de armazenamento, bem como o desempenho de acesso aos dados. Decisões como essas provavelmente não serão feitas apenas por um cientista de dados, mas ele pode se deparar com escolhas sobre como trabalhar com os dados com base em como eles estão armazenados.
|
||||
|
||||
Aqui estão alguns aspectos dos sistemas modernos de armazenamento de dados que podem influenciar essas escolhas:
|
||||
|
||||
**No local vs fora do local vs nuvem pública ou privada**
|
||||
|
||||
No local refere-se a hospedar e gerenciar os dados em seu próprio equipamento, como possuir um servidor com discos rígidos que armazenam os dados, enquanto fora do local depende de equipamentos que você não possui, como um data center. A nuvem pública é uma escolha popular para armazenar dados que não exige conhecimento de como ou onde exatamente os dados estão armazenados, onde pública refere-se a uma infraestrutura unificada compartilhada por todos que usam a nuvem. Algumas organizações têm políticas de segurança rigorosas que exigem acesso completo ao equipamento onde os dados estão hospedados e dependem de uma nuvem privada que fornece seus próprios serviços de nuvem. Você aprenderá mais sobre dados na nuvem em [lições futuras](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/5-Data-Science-In-Cloud).
|
||||
|
||||
**Dados frios vs dados quentes**
|
||||
|
||||
Ao treinar seus modelos, você pode precisar de mais dados de treinamento. Se estiver satisfeito com seu modelo, mais dados chegarão para que ele cumpra seu propósito. Em qualquer caso, o custo de armazenar e acessar dados aumentará à medida que você acumular mais. Separar dados raramente usados, conhecidos como dados frios, de dados frequentemente acessados, conhecidos como dados quentes, pode ser uma opção mais barata de armazenamento por meio de serviços de hardware ou software. Se os dados frios precisarem ser acessados, pode levar um pouco mais de tempo para recuperá-los em comparação com os dados quentes.
|
||||
|
||||
### Gerenciamento de Dados
|
||||
|
||||
Ao trabalhar com dados, você pode descobrir que alguns deles precisam ser limpos usando algumas das técnicas abordadas na lição sobre [preparação de dados](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/08-data-preparation) para construir modelos precisos. Quando novos dados chegam, eles precisarão das mesmas aplicações para manter a consistência na qualidade. Alguns projetos envolverão o uso de uma ferramenta automatizada para limpeza, agregação e compressão antes que os dados sejam movidos para seu local final. O Azure Data Factory é um exemplo de uma dessas ferramentas.
|
||||
|
||||
### Proteção dos Dados
|
||||
|
||||
Um dos principais objetivos de proteger os dados é garantir que aqueles que trabalham com eles tenham controle sobre o que é coletado e em que contexto está sendo usado. Manter os dados seguros envolve limitar o acesso apenas àqueles que precisam deles, aderir às leis e regulamentos locais, bem como manter padrões éticos, conforme abordado na [lição de ética](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/1-Introduction/02-ethics).
|
||||
|
||||
Aqui estão algumas ações que uma equipe pode realizar com a segurança em mente:
|
||||
- Confirmar que todos os dados estão criptografados
|
||||
- Fornecer aos clientes informações sobre como seus dados são usados
|
||||
- Remover o acesso aos dados de pessoas que deixaram o projeto
|
||||
- Permitir que apenas certos membros do projeto alterem os dados
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Existem muitas versões do Ciclo de Vida da Ciência de Dados, onde cada etapa pode ter nomes diferentes e um número diferente de estágios, mas conterá os mesmos processos mencionados nesta lição.
|
||||
|
||||
Explore o [Ciclo de Vida do Processo de Ciência de Dados em Equipe](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/lifecycle) e o [Processo padrão da indústria para mineração de dados](https://www.datascience-pm.com/crisp-dm-2/). Nomeie 3 semelhanças e diferenças entre os dois.
|
||||
|
||||
|Processo de Ciência de Dados em Equipe (TDSP)|Processo padrão da indústria para mineração de dados (CRISP-DM)|
|
||||
|--|--|
|
||||
| |  |
|
||||
| Imagem por [Microsoft](https://docs.microsoft.comazure/architecture/data-science-process/lifecycle) | Imagem por [Data Science Process Alliance](https://www.datascience-pm.com/crisp-dm-2/) |
|
||||
|
||||
## [Quiz Pós-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/27)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Aplicar o Ciclo de Vida da Ciência de Dados envolve múltiplos papéis e tarefas, onde alguns podem se concentrar em partes específicas de cada etapa. O Processo de Ciência de Dados em Equipe fornece alguns recursos que explicam os tipos de papéis e tarefas que alguém pode ter em um projeto.
|
||||
|
||||
* [Papéis e tarefas do Processo de Ciência de Dados em Equipe](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/roles-tasks)
|
||||
* [Executar tarefas de ciência de dados: exploração, modelagem e implantação](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/execute-data-science-tasks)
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Avaliando um Conjunto de Dados](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,28 @@
|
||||
# Avaliando um Conjunto de Dados
|
||||
|
||||
Um cliente procurou sua equipe para ajudar a investigar os hábitos sazonais de gastos de clientes de táxi em Nova York.
|
||||
|
||||
Eles querem saber: **Os passageiros de táxi amarelo em Nova York dão gorjetas maiores aos motoristas no inverno ou no verão?**
|
||||
|
||||
Sua equipe está na etapa de [Captura](Readme.md#Capturing) do Ciclo de Vida de Ciência de Dados e você está encarregado de lidar com o conjunto de dados. Foi fornecido a você um notebook e [dados](../../../../data/taxi.csv) para explorar.
|
||||
|
||||
Neste diretório há um [notebook](notebook.ipynb) que utiliza Python para carregar dados de viagens de táxi amarelo da [Comissão de Táxi e Limusine de Nova York](https://docs.microsoft.com/en-us/azure/open-datasets/dataset-taxi-yellow?tabs=azureml-opendatasets).
|
||||
Você também pode abrir o arquivo de dados de táxi em um editor de texto ou software de planilhas como o Excel.
|
||||
|
||||
## Instruções
|
||||
|
||||
- Avalie se os dados deste conjunto podem ajudar a responder à pergunta.
|
||||
- Explore o [catálogo de Dados Abertos de Nova York](https://data.cityofnewyork.us/browse?sortBy=most_accessed&utf8=%E2%9C%93). Identifique um conjunto de dados adicional que poderia ser útil para responder à pergunta do cliente.
|
||||
- Escreva 3 perguntas que você faria ao cliente para obter mais esclarecimentos e melhor compreensão do problema.
|
||||
|
||||
Consulte o [dicionário do conjunto de dados](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf) e o [guia do usuário](https://www1.nyc.gov/assets/tlc/downloads/pdf/trip_record_user_guide.pdf) para mais informações sobre os dados.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | --- |
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,140 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Dados de táxi de NYC no inverno e verão\n",
|
||||
"\n",
|
||||
"Consulte o [Data dictionary](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf) para saber mais sobre as colunas que foram fornecidas.\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"#Install the pandas library\r\n",
|
||||
"!pip install pandas"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"source": [
|
||||
"import pandas as pd\r\n",
|
||||
"\r\n",
|
||||
"path = '../../data/taxi.csv'\r\n",
|
||||
"\r\n",
|
||||
"#Load the csv file into a dataframe\r\n",
|
||||
"df = pd.read_csv(path)\r\n",
|
||||
"\r\n",
|
||||
"#Print the dataframe\r\n",
|
||||
"print(df)\r\n"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
" VendorID tpep_pickup_datetime tpep_dropoff_datetime passenger_count \\\n",
|
||||
"0 2.0 2019-07-15 16:27:53 2019-07-15 16:44:21 3.0 \n",
|
||||
"1 2.0 2019-07-17 20:26:35 2019-07-17 20:40:09 6.0 \n",
|
||||
"2 2.0 2019-07-06 16:01:08 2019-07-06 16:10:25 1.0 \n",
|
||||
"3 1.0 2019-07-18 22:32:23 2019-07-18 22:35:08 1.0 \n",
|
||||
"4 2.0 2019-07-19 14:54:29 2019-07-19 15:19:08 1.0 \n",
|
||||
".. ... ... ... ... \n",
|
||||
"195 2.0 2019-01-18 08:42:15 2019-01-18 08:56:57 1.0 \n",
|
||||
"196 1.0 2019-01-19 04:34:45 2019-01-19 04:43:44 1.0 \n",
|
||||
"197 2.0 2019-01-05 10:37:39 2019-01-05 10:42:03 1.0 \n",
|
||||
"198 2.0 2019-01-23 10:36:29 2019-01-23 10:44:34 2.0 \n",
|
||||
"199 2.0 2019-01-30 06:55:58 2019-01-30 07:07:02 5.0 \n",
|
||||
"\n",
|
||||
" trip_distance RatecodeID store_and_fwd_flag PULocationID DOLocationID \\\n",
|
||||
"0 2.02 1.0 N 186 233 \n",
|
||||
"1 1.59 1.0 N 141 161 \n",
|
||||
"2 1.69 1.0 N 246 249 \n",
|
||||
"3 0.90 1.0 N 229 141 \n",
|
||||
"4 4.79 1.0 N 237 107 \n",
|
||||
".. ... ... ... ... ... \n",
|
||||
"195 1.18 1.0 N 43 237 \n",
|
||||
"196 2.30 1.0 N 148 234 \n",
|
||||
"197 0.83 1.0 N 237 263 \n",
|
||||
"198 1.12 1.0 N 144 113 \n",
|
||||
"199 2.41 1.0 N 209 107 \n",
|
||||
"\n",
|
||||
" payment_type fare_amount extra mta_tax tip_amount tolls_amount \\\n",
|
||||
"0 1.0 12.0 1.0 0.5 4.08 0.0 \n",
|
||||
"1 2.0 10.0 0.5 0.5 0.00 0.0 \n",
|
||||
"2 2.0 8.5 0.0 0.5 0.00 0.0 \n",
|
||||
"3 1.0 4.5 3.0 0.5 1.65 0.0 \n",
|
||||
"4 1.0 19.5 0.0 0.5 5.70 0.0 \n",
|
||||
".. ... ... ... ... ... ... \n",
|
||||
"195 1.0 10.0 0.0 0.5 2.16 0.0 \n",
|
||||
"196 1.0 9.5 0.5 0.5 2.15 0.0 \n",
|
||||
"197 1.0 5.0 0.0 0.5 1.16 0.0 \n",
|
||||
"198 2.0 7.0 0.0 0.5 0.00 0.0 \n",
|
||||
"199 1.0 10.5 0.0 0.5 1.00 0.0 \n",
|
||||
"\n",
|
||||
" improvement_surcharge total_amount congestion_surcharge \n",
|
||||
"0 0.3 20.38 2.5 \n",
|
||||
"1 0.3 13.80 2.5 \n",
|
||||
"2 0.3 11.80 2.5 \n",
|
||||
"3 0.3 9.95 2.5 \n",
|
||||
"4 0.3 28.50 2.5 \n",
|
||||
".. ... ... ... \n",
|
||||
"195 0.3 12.96 0.0 \n",
|
||||
"196 0.3 12.95 0.0 \n",
|
||||
"197 0.3 6.96 0.0 \n",
|
||||
"198 0.3 7.80 0.0 \n",
|
||||
"199 0.3 12.30 0.0 \n",
|
||||
"\n",
|
||||
"[200 rows x 18 columns]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Aviso Legal**: \nEste 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.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3.9.7 64-bit ('venv': venv)"
|
||||
},
|
||||
"language_info": {
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"version": "3.9.7",
|
||||
"nbconvert_exporter": "python",
|
||||
"file_extension": ".py"
|
||||
},
|
||||
"name": "04-nyc-taxi-join-weather-in-pandas",
|
||||
"notebookId": 1709144033725344,
|
||||
"interpreter": {
|
||||
"hash": "6b9b57232c4b57163d057191678da2030059e733b8becc68f245de5a75abe84e"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "3bd4c20c4e8f3158f483f0f1cc543bb1",
|
||||
"translation_date": "2025-09-01T22:23:35+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/14-Introduction/notebook.ipynb",
|
||||
"language_code": "br"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@ -0,0 +1,54 @@
|
||||
# O Ciclo de Vida da Ciência de Dados: Análise
|
||||
|
||||
| ](../../sketchnotes/15-Analyzing.png)|
|
||||
|:---:|
|
||||
| Ciclo de Vida da Ciência de Dados: Análise - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
## [Quiz Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/28)
|
||||
|
||||
A análise no ciclo de vida dos dados confirma se os dados podem responder às perguntas propostas ou resolver um problema específico. Esta etapa também pode se concentrar em confirmar se um modelo está abordando corretamente essas questões e problemas. Esta lição é focada na Análise Exploratória de Dados (EDA), que são técnicas para definir características e relações dentro dos dados e podem ser usadas para preparar os dados para modelagem.
|
||||
|
||||
Usaremos um conjunto de dados de exemplo do [Kaggle](https://www.kaggle.com/balaka18/email-spam-classification-dataset-csv/version/1) para mostrar como isso pode ser aplicado com Python e a biblioteca Pandas. Este conjunto de dados contém uma contagem de algumas palavras comuns encontradas em e-mails, sendo que as fontes desses e-mails são anônimas. Use o [notebook](notebook.ipynb) neste diretório para acompanhar.
|
||||
|
||||
## Análise Exploratória de Dados
|
||||
|
||||
A fase de captura do ciclo de vida é onde os dados são adquiridos, bem como os problemas e questões em questão, mas como sabemos se os dados podem ajudar a apoiar o resultado final?
|
||||
Lembre-se de que um cientista de dados pode fazer as seguintes perguntas ao adquirir os dados:
|
||||
- Eu tenho dados suficientes para resolver este problema?
|
||||
- Os dados têm qualidade aceitável para este problema?
|
||||
- Se eu descobrir informações adicionais por meio desses dados, devemos considerar mudar ou redefinir os objetivos?
|
||||
|
||||
A Análise Exploratória de Dados é o processo de conhecer os dados e pode ser usada para responder a essas perguntas, além de identificar os desafios de trabalhar com o conjunto de dados. Vamos nos concentrar em algumas das técnicas usadas para alcançar isso.
|
||||
|
||||
## Perfilamento de Dados, Estatísticas Descritivas e Pandas
|
||||
|
||||
Como avaliamos se temos dados suficientes para resolver este problema? O perfilamento de dados pode resumir e reunir algumas informações gerais sobre nosso conjunto de dados por meio de técnicas de estatísticas descritivas. O perfilamento de dados nos ajuda a entender o que está disponível para nós, e as estatísticas descritivas nos ajudam a entender quantas coisas estão disponíveis para nós.
|
||||
|
||||
Em algumas das lições anteriores, usamos o Pandas para fornecer algumas estatísticas descritivas com a função [`describe()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html). Ela fornece a contagem, valores máximos e mínimos, média, desvio padrão e quantis nos dados numéricos. Usar estatísticas descritivas como a função `describe()` pode ajudar você a avaliar quanto você tem e se precisa de mais.
|
||||
|
||||
## Amostragem e Consultas
|
||||
|
||||
Explorar tudo em um grande conjunto de dados pode ser muito demorado e geralmente é uma tarefa deixada para o computador. No entanto, a amostragem é uma ferramenta útil para entender os dados e nos permite ter uma melhor compreensão do que está no conjunto de dados e o que ele representa. Com uma amostra, você pode aplicar probabilidade e estatísticas para chegar a algumas conclusões gerais sobre seus dados. Embora não haja uma regra definida sobre quanto dos dados você deve amostrar, é importante notar que quanto mais dados você amostrar, mais precisa será a generalização que você pode fazer sobre os dados.
|
||||
O Pandas possui a função [`sample()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sample.html) em sua biblioteca, onde você pode passar um argumento de quantas amostras aleatórias gostaria de receber e usar.
|
||||
|
||||
Consultas gerais aos dados podem ajudar você a responder algumas perguntas e teorias gerais que possa ter. Em contraste com a amostragem, as consultas permitem que você tenha controle e se concentre em partes específicas dos dados sobre as quais tem perguntas.
|
||||
A função [`query()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.query.html) na biblioteca Pandas permite selecionar colunas e receber respostas simples sobre os dados por meio das linhas recuperadas.
|
||||
|
||||
## Explorando com Visualizações
|
||||
|
||||
Você não precisa esperar até que os dados estejam completamente limpos e analisados para começar a criar visualizações. Na verdade, ter uma representação visual enquanto explora pode ajudar a identificar padrões, relações e problemas nos dados. Além disso, as visualizações fornecem um meio de comunicação com aqueles que não estão envolvidos no gerenciamento dos dados e podem ser uma oportunidade para compartilhar e esclarecer questões adicionais que não foram abordadas na etapa de captura. Consulte a [seção sobre Visualizações](../../../../../../../../../3-Data-Visualization) para aprender mais sobre algumas formas populares de explorar visualmente.
|
||||
|
||||
## Explorando para Identificar Inconsistências
|
||||
|
||||
Todos os tópicos desta lição podem ajudar a identificar valores ausentes ou inconsistentes, mas o Pandas fornece funções para verificar alguns deles. [isna() ou isnull()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.isna.html) podem verificar valores ausentes. Uma parte importante de explorar esses valores dentro de seus dados é investigar por que eles acabaram dessa forma. Isso pode ajudar você a decidir quais [ações tomar para resolvê-los](/2-Working-With-Data/08-data-preparation/notebook.ipynb).
|
||||
|
||||
## [Quiz Pós-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/29)
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Explorando para respostas](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. 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.
|
||||
@ -0,0 +1,154 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Dados de táxi de NYC no inverno e verão\n",
|
||||
"\n",
|
||||
"Consulte o [Dicionário de dados](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf) para saber mais sobre as colunas que foram fornecidas.\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"#Install the pandas library\r\n",
|
||||
"!pip install pandas"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"source": [
|
||||
"import pandas as pd\r\n",
|
||||
"\r\n",
|
||||
"path = '../../data/taxi.csv'\r\n",
|
||||
"\r\n",
|
||||
"#Load the csv file into a dataframe\r\n",
|
||||
"df = pd.read_csv(path)\r\n",
|
||||
"\r\n",
|
||||
"#Print the dataframe\r\n",
|
||||
"print(df)\r\n"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
" VendorID tpep_pickup_datetime tpep_dropoff_datetime passenger_count \\\n",
|
||||
"0 2.0 2019-07-15 16:27:53 2019-07-15 16:44:21 3.0 \n",
|
||||
"1 2.0 2019-07-17 20:26:35 2019-07-17 20:40:09 6.0 \n",
|
||||
"2 2.0 2019-07-06 16:01:08 2019-07-06 16:10:25 1.0 \n",
|
||||
"3 1.0 2019-07-18 22:32:23 2019-07-18 22:35:08 1.0 \n",
|
||||
"4 2.0 2019-07-19 14:54:29 2019-07-19 15:19:08 1.0 \n",
|
||||
".. ... ... ... ... \n",
|
||||
"195 2.0 2019-01-18 08:42:15 2019-01-18 08:56:57 1.0 \n",
|
||||
"196 1.0 2019-01-19 04:34:45 2019-01-19 04:43:44 1.0 \n",
|
||||
"197 2.0 2019-01-05 10:37:39 2019-01-05 10:42:03 1.0 \n",
|
||||
"198 2.0 2019-01-23 10:36:29 2019-01-23 10:44:34 2.0 \n",
|
||||
"199 2.0 2019-01-30 06:55:58 2019-01-30 07:07:02 5.0 \n",
|
||||
"\n",
|
||||
" trip_distance RatecodeID store_and_fwd_flag PULocationID DOLocationID \\\n",
|
||||
"0 2.02 1.0 N 186 233 \n",
|
||||
"1 1.59 1.0 N 141 161 \n",
|
||||
"2 1.69 1.0 N 246 249 \n",
|
||||
"3 0.90 1.0 N 229 141 \n",
|
||||
"4 4.79 1.0 N 237 107 \n",
|
||||
".. ... ... ... ... ... \n",
|
||||
"195 1.18 1.0 N 43 237 \n",
|
||||
"196 2.30 1.0 N 148 234 \n",
|
||||
"197 0.83 1.0 N 237 263 \n",
|
||||
"198 1.12 1.0 N 144 113 \n",
|
||||
"199 2.41 1.0 N 209 107 \n",
|
||||
"\n",
|
||||
" payment_type fare_amount extra mta_tax tip_amount tolls_amount \\\n",
|
||||
"0 1.0 12.0 1.0 0.5 4.08 0.0 \n",
|
||||
"1 2.0 10.0 0.5 0.5 0.00 0.0 \n",
|
||||
"2 2.0 8.5 0.0 0.5 0.00 0.0 \n",
|
||||
"3 1.0 4.5 3.0 0.5 1.65 0.0 \n",
|
||||
"4 1.0 19.5 0.0 0.5 5.70 0.0 \n",
|
||||
".. ... ... ... ... ... ... \n",
|
||||
"195 1.0 10.0 0.0 0.5 2.16 0.0 \n",
|
||||
"196 1.0 9.5 0.5 0.5 2.15 0.0 \n",
|
||||
"197 1.0 5.0 0.0 0.5 1.16 0.0 \n",
|
||||
"198 2.0 7.0 0.0 0.5 0.00 0.0 \n",
|
||||
"199 1.0 10.5 0.0 0.5 1.00 0.0 \n",
|
||||
"\n",
|
||||
" improvement_surcharge total_amount congestion_surcharge \n",
|
||||
"0 0.3 20.38 2.5 \n",
|
||||
"1 0.3 13.80 2.5 \n",
|
||||
"2 0.3 11.80 2.5 \n",
|
||||
"3 0.3 9.95 2.5 \n",
|
||||
"4 0.3 28.50 2.5 \n",
|
||||
".. ... ... ... \n",
|
||||
"195 0.3 12.96 0.0 \n",
|
||||
"196 0.3 12.95 0.0 \n",
|
||||
"197 0.3 6.96 0.0 \n",
|
||||
"198 0.3 7.80 0.0 \n",
|
||||
"199 0.3 12.30 0.0 \n",
|
||||
"\n",
|
||||
"[200 rows x 18 columns]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Use as células abaixo para fazer sua própria Análise Exploratória de Dados\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Aviso Legal**: \nEste 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.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3.9.7 64-bit ('venv': venv)"
|
||||
},
|
||||
"language_info": {
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"version": "3.9.7",
|
||||
"nbconvert_exporter": "python",
|
||||
"file_extension": ".py"
|
||||
},
|
||||
"name": "04-nyc-taxi-join-weather-in-pandas",
|
||||
"notebookId": 1709144033725344,
|
||||
"interpreter": {
|
||||
"hash": "6b9b57232c4b57163d057191678da2030059e733b8becc68f245de5a75abe84e"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "7bca1c1abc1e55842817b62e44e1a963",
|
||||
"translation_date": "2025-09-01T22:21:18+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/15-analyzing/assignment.ipynb",
|
||||
"language_code": "br"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
# Explorando respostas
|
||||
|
||||
Esta é uma continuação da [atividade](../14-Introduction/assignment.md) da lição anterior, onde examinamos brevemente o conjunto de dados. Agora, vamos analisar o conjunto de dados de forma mais aprofundada.
|
||||
|
||||
Novamente, a pergunta que o cliente quer responder é: **Os passageiros de táxi amarelo na cidade de Nova York dão gorjetas maiores aos motoristas no inverno ou no verão?**
|
||||
|
||||
Sua equipe está na etapa de [Análise](README.md) do Ciclo de Vida de Ciência de Dados, onde vocês são responsáveis por realizar a análise exploratória de dados no conjunto de dados. Foi fornecido a vocês um notebook e um conjunto de dados contendo 200 transações de táxi de janeiro e julho de 2019.
|
||||
|
||||
## Instruções
|
||||
|
||||
Neste diretório há um [notebook](assignment.ipynb) e dados da [Taxi & Limousine Commission](https://docs.microsoft.com/en-us/azure/open-datasets/dataset-taxi-yellow?tabs=azureml-opendatasets). Consulte o [dicionário do conjunto de dados](https://www1.nyc.gov/assets/tlc/downloads/pdf/data_dictionary_trip_records_yellow.pdf) e o [guia do usuário](https://www1.nyc.gov/assets/tlc/downloads/pdf/trip_record_user_guide.pdf) para mais informações sobre os dados.
|
||||
|
||||
Utilize algumas das técnicas desta lição para realizar sua própria análise exploratória de dados no notebook (adicione células, se necessário) e responda às seguintes perguntas:
|
||||
|
||||
- Quais outros fatores nos dados podem influenciar o valor da gorjeta?
|
||||
- Quais colunas provavelmente não serão necessárias para responder às perguntas do cliente?
|
||||
- Com base no que foi fornecido até agora, os dados parecem fornecer alguma evidência de comportamento sazonal nas gorjetas?
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | --- |
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,193 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Analisando Dados\n",
|
||||
"Exemplos das funções do Pandas mencionadas na [lição](README.md).\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"source": [
|
||||
"import pandas as pd\r\n",
|
||||
"import glob\r\n",
|
||||
"\r\n",
|
||||
"#Loading the dataset\r\n",
|
||||
"path = '../../data/emails.csv'\r\n",
|
||||
"email_df = pd.read_csv(path)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"source": [
|
||||
"# Using Describe on the email dataset\r\n",
|
||||
"print(email_df.describe())"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
" the to ect and for of \\\n",
|
||||
"count 406.000000 406.000000 406.000000 406.000000 406.000000 406.000000 \n",
|
||||
"mean 7.022167 6.519704 4.948276 3.059113 3.502463 2.662562 \n",
|
||||
"std 10.945522 9.801907 9.293820 6.267806 4.901372 5.443939 \n",
|
||||
"min 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 \n",
|
||||
"25% 1.000000 1.000000 1.000000 0.000000 1.000000 0.000000 \n",
|
||||
"50% 3.000000 3.000000 2.000000 1.000000 2.000000 1.000000 \n",
|
||||
"75% 9.000000 7.750000 4.000000 3.000000 4.750000 3.000000 \n",
|
||||
"max 99.000000 88.000000 79.000000 69.000000 39.000000 57.000000 \n",
|
||||
"\n",
|
||||
" a you in on is this \\\n",
|
||||
"count 406.000000 406.000000 406.000000 406.000000 406.000000 406.000000 \n",
|
||||
"mean 57.017241 2.394089 10.817734 11.591133 5.901478 1.485222 \n",
|
||||
"std 78.868243 4.067015 19.050972 16.407175 8.793103 2.912473 \n",
|
||||
"min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
|
||||
"25% 15.000000 0.000000 1.250000 3.000000 1.000000 0.000000 \n",
|
||||
"50% 29.000000 1.000000 5.000000 6.000000 3.000000 0.000000 \n",
|
||||
"75% 61.000000 3.000000 12.000000 13.000000 7.000000 2.000000 \n",
|
||||
"max 843.000000 31.000000 223.000000 125.000000 61.000000 24.000000 \n",
|
||||
"\n",
|
||||
" i be that will \n",
|
||||
"count 406.000000 406.000000 406.000000 406.000000 \n",
|
||||
"mean 47.155172 2.950739 1.034483 0.955665 \n",
|
||||
"std 71.043009 4.297865 1.904846 2.042271 \n",
|
||||
"min 0.000000 0.000000 0.000000 0.000000 \n",
|
||||
"25% 11.000000 1.000000 0.000000 0.000000 \n",
|
||||
"50% 24.000000 1.000000 0.000000 0.000000 \n",
|
||||
"75% 50.750000 3.000000 1.000000 1.000000 \n",
|
||||
"max 754.000000 40.000000 14.000000 24.000000 \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"source": [
|
||||
"# Sampling 10 emails\r\n",
|
||||
"print(email_df.sample(10))"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
" Email No. the to ect and for of a you in on is this i \\\n",
|
||||
"150 Email 151 0 1 2 0 3 0 15 0 0 5 0 0 7 \n",
|
||||
"380 Email 5147 0 3 2 0 0 0 7 0 1 1 0 0 3 \n",
|
||||
"19 Email 20 3 4 11 0 4 2 32 1 1 3 9 5 25 \n",
|
||||
"300 Email 301 2 1 1 0 1 1 15 2 2 3 2 0 8 \n",
|
||||
"307 Email 308 0 0 1 0 0 0 1 0 1 0 0 0 2 \n",
|
||||
"167 Email 168 2 2 2 1 5 1 24 2 5 6 4 0 30 \n",
|
||||
"320 Email 321 10 12 4 6 8 6 187 5 26 28 23 2 171 \n",
|
||||
"61 Email 62 0 1 1 0 4 1 15 4 4 3 3 0 19 \n",
|
||||
"26 Email 27 5 4 1 1 4 4 51 0 8 6 6 2 44 \n",
|
||||
"73 Email 74 0 0 1 0 0 0 7 0 4 3 0 0 6 \n",
|
||||
"\n",
|
||||
" be that will \n",
|
||||
"150 1 0 0 \n",
|
||||
"380 0 0 0 \n",
|
||||
"19 3 0 1 \n",
|
||||
"300 0 0 0 \n",
|
||||
"307 0 0 0 \n",
|
||||
"167 2 0 0 \n",
|
||||
"320 5 1 1 \n",
|
||||
"61 2 0 0 \n",
|
||||
"26 6 0 0 \n",
|
||||
"73 0 0 0 \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"source": [
|
||||
"# Returns rows where there are more occurrences of \"to\" than \"the\"\r\n",
|
||||
"print(email_df.query('the < to'))"
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
" Email No. the to ect and for of a you in on is this i \\\n",
|
||||
"1 Email 2 8 13 24 6 6 2 102 1 18 21 13 0 61 \n",
|
||||
"3 Email 4 0 5 22 0 5 1 51 2 1 5 9 2 16 \n",
|
||||
"5 Email 6 4 5 1 4 2 3 45 1 16 12 8 1 52 \n",
|
||||
"7 Email 8 0 2 2 3 1 2 21 6 2 6 2 0 28 \n",
|
||||
"13 Email 14 4 5 7 1 5 1 37 1 8 8 6 1 43 \n",
|
||||
".. ... ... .. ... ... ... .. ... ... .. .. .. ... .. \n",
|
||||
"390 Email 5157 4 13 1 0 3 1 48 2 8 26 9 1 45 \n",
|
||||
"393 Email 5160 2 13 1 0 2 1 38 2 7 24 6 1 34 \n",
|
||||
"396 Email 5163 2 3 1 2 1 2 32 0 7 3 2 0 26 \n",
|
||||
"404 Email 5171 2 7 1 0 2 1 28 2 8 11 7 1 39 \n",
|
||||
"405 Email 5172 22 24 5 1 6 5 148 8 23 13 5 4 99 \n",
|
||||
"\n",
|
||||
" be that will \n",
|
||||
"1 4 2 0 \n",
|
||||
"3 2 0 0 \n",
|
||||
"5 2 0 0 \n",
|
||||
"7 1 0 1 \n",
|
||||
"13 1 0 1 \n",
|
||||
".. .. ... ... \n",
|
||||
"390 1 0 0 \n",
|
||||
"393 1 0 0 \n",
|
||||
"396 3 0 0 \n",
|
||||
"404 1 0 0 \n",
|
||||
"405 6 4 1 \n",
|
||||
"\n",
|
||||
"[169 rows x 17 columns]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Aviso Legal**: \nEste 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.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"orig_nbformat": 4,
|
||||
"language_info": {
|
||||
"name": "python",
|
||||
"version": "3.9.7",
|
||||
"mimetype": "text/x-python",
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"pygments_lexer": "ipython3",
|
||||
"nbconvert_exporter": "python",
|
||||
"file_extension": ".py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"name": "python3",
|
||||
"display_name": "Python 3.9.7 64-bit ('venv': venv)"
|
||||
},
|
||||
"interpreter": {
|
||||
"hash": "6b9b57232c4b57163d057191678da2030059e733b8becc68f245de5a75abe84e"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "9d102c8c3cdbc8ea4e92fc32593462c6",
|
||||
"translation_date": "2025-09-01T22:19:27+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb",
|
||||
"language_code": "br"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
# Conte uma história
|
||||
|
||||
## Instruções
|
||||
|
||||
Ciência de Dados é, acima de tudo, sobre contar histórias. Escolha qualquer conjunto de dados e escreva um pequeno artigo sobre uma história que você poderia contar com ele. O que você espera que seu conjunto de dados revele? O que você fará se as revelações forem problemáticas? E se seus dados não revelarem seus segredos facilmente? Pense nos cenários que seu conjunto de dados pode apresentar e escreva sobre eles.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa de Melhorias
|
||||
--- | --- | -- |
|
||||
|
||||
Um ensaio de uma página é apresentado em formato .doc com o conjunto de dados explicado, documentado, creditado, e uma história coerente é apresentada sobre ele com exemplos detalhados dos dados. | Um ensaio mais curto é apresentado em um formato menos detalhado | O ensaio apresenta falhas em um dos detalhes acima.
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,21 @@
|
||||
# O Ciclo de Vida da Ciência de Dados
|
||||
|
||||

|
||||
> Foto por <a href="https://unsplash.com/@headwayio?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Headway</a> no <a href="https://unsplash.com/s/photos/communication?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||
|
||||
Nestes módulos, você explorará alguns aspectos do ciclo de vida da Ciência de Dados, incluindo análise e comunicação de dados.
|
||||
|
||||
### Tópicos
|
||||
|
||||
1. [Introdução](14-Introduction/README.md)
|
||||
2. [Análise](15-analyzing/README.md)
|
||||
3. [Comunicação](16-communication/README.md)
|
||||
|
||||
### Créditos
|
||||
|
||||
Esses módulos foram escritos com ❤️ por [Jalen McGee](https://twitter.com/JalenMCG) e [Jasmine Greenaway](https://twitter.com/paladique)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,107 @@
|
||||
# Introdução à Ciência de Dados na Nuvem
|
||||
|
||||
| ](../../sketchnotes/17-DataScience-Cloud.png)|
|
||||
|:---:|
|
||||
| Ciência de Dados na Nuvem: Introdução - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Nesta lição, você aprenderá os princípios fundamentais da Nuvem, verá por que pode ser interessante usar serviços de Nuvem para executar seus projetos de ciência de dados e analisará alguns exemplos de projetos de ciência de dados realizados na Nuvem.
|
||||
|
||||
## [Quiz Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/32)
|
||||
|
||||
## O que é a Nuvem?
|
||||
|
||||
A Nuvem, ou Computação em Nuvem, é a entrega de uma ampla gama de serviços de computação sob demanda, hospedados em uma infraestrutura pela internet. Esses serviços incluem soluções como armazenamento, bancos de dados, redes, software, análises e serviços inteligentes.
|
||||
|
||||
Normalmente, diferenciamos as Nuvens Pública, Privada e Híbrida da seguinte forma:
|
||||
|
||||
* Nuvem pública: uma nuvem pública é propriedade e operada por um provedor de serviços de nuvem terceirizado que entrega seus recursos de computação pela Internet ao público.
|
||||
* Nuvem privada: refere-se aos recursos de computação em nuvem usados exclusivamente por uma única empresa ou organização, com serviços e infraestrutura mantidos em uma rede privada.
|
||||
* Nuvem híbrida: a nuvem híbrida é um sistema que combina nuvens públicas e privadas. Os usuários optam por um datacenter local, enquanto permitem que dados e aplicativos sejam executados em uma ou mais nuvens públicas.
|
||||
|
||||
A maioria dos serviços de computação em nuvem se enquadra em três categorias: Infraestrutura como Serviço (IaaS), Plataforma como Serviço (PaaS) e Software como Serviço (SaaS).
|
||||
|
||||
* Infraestrutura como Serviço (IaaS): os usuários alugam uma infraestrutura de TI, como servidores e máquinas virtuais (VMs), armazenamento, redes e sistemas operacionais.
|
||||
* Plataforma como Serviço (PaaS): os usuários alugam um ambiente para desenvolver, testar, entregar e gerenciar aplicativos de software. Os usuários não precisam se preocupar em configurar ou gerenciar a infraestrutura subjacente de servidores, armazenamento, rede e bancos de dados necessários para o desenvolvimento.
|
||||
* Software como Serviço (SaaS): os usuários têm acesso a aplicativos de software pela Internet, sob demanda e, geralmente, com base em assinatura. Os usuários não precisam se preocupar em hospedar e gerenciar o aplicativo de software, a infraestrutura subjacente ou a manutenção, como atualizações de software e correções de segurança.
|
||||
|
||||
Alguns dos maiores provedores de Nuvem são Amazon Web Services, Google Cloud Platform e Microsoft Azure.
|
||||
|
||||
## Por que escolher a Nuvem para Ciência de Dados?
|
||||
|
||||
Desenvolvedores e profissionais de TI escolhem trabalhar com a Nuvem por vários motivos, incluindo os seguintes:
|
||||
|
||||
* Inovação: você pode potencializar seus aplicativos integrando serviços inovadores criados por provedores de Nuvem diretamente em seus aplicativos.
|
||||
* Flexibilidade: você paga apenas pelos serviços que precisa e pode escolher entre uma ampla gama de serviços. Normalmente, você paga conforme usa e adapta seus serviços de acordo com suas necessidades em evolução.
|
||||
* Orçamento: você não precisa fazer investimentos iniciais para comprar hardware e software, configurar e operar datacenters locais, e pode simplesmente pagar pelo que usar.
|
||||
* Escalabilidade: seus recursos podem ser escalados de acordo com as necessidades do seu projeto, o que significa que seus aplicativos podem usar mais ou menos poder de computação, armazenamento e largura de banda, adaptando-se a fatores externos a qualquer momento.
|
||||
* Produtividade: você pode se concentrar no seu negócio em vez de gastar tempo em tarefas que podem ser gerenciadas por outra pessoa, como administrar datacenters.
|
||||
* Confiabilidade: a Computação em Nuvem oferece várias maneiras de fazer backup contínuo de seus dados e permite configurar planos de recuperação de desastres para manter seu negócio e serviços funcionando, mesmo em tempos de crise.
|
||||
* Segurança: você pode se beneficiar de políticas, tecnologias e controles que fortalecem a segurança do seu projeto.
|
||||
|
||||
Esses são alguns dos motivos mais comuns pelos quais as pessoas escolhem usar serviços de Nuvem. Agora que temos uma melhor compreensão do que é a Nuvem e quais são seus principais benefícios, vamos olhar mais especificamente para o trabalho de cientistas de dados e desenvolvedores que trabalham com dados, e como a Nuvem pode ajudá-los com vários desafios que podem enfrentar:
|
||||
|
||||
* Armazenar grandes volumes de dados: em vez de comprar, gerenciar e proteger grandes servidores, você pode armazenar seus dados diretamente na nuvem, com soluções como Azure Cosmos DB, Azure SQL Database e Azure Data Lake Storage.
|
||||
* Realizar integração de dados: a integração de dados é uma parte essencial da Ciência de Dados, que permite fazer a transição da coleta de dados para a tomada de ações. Com serviços de integração de dados oferecidos na nuvem, você pode coletar, transformar e integrar dados de várias fontes em um único data warehouse, com o Data Factory.
|
||||
* Processar dados: processar grandes volumes de dados requer muito poder de computação, e nem todos têm acesso a máquinas poderosas o suficiente para isso, razão pela qual muitas pessoas escolhem aproveitar diretamente o enorme poder de computação da nuvem para executar e implantar suas soluções.
|
||||
* Usar serviços de análise de dados: serviços de nuvem como Azure Synapse Analytics, Azure Stream Analytics e Azure Databricks ajudam você a transformar seus dados em insights acionáveis.
|
||||
* Usar serviços de aprendizado de máquina e inteligência de dados: em vez de começar do zero, você pode usar algoritmos de aprendizado de máquina oferecidos pelo provedor de nuvem, com serviços como AzureML. Você também pode usar serviços cognitivos, como conversão de fala para texto, texto para fala, visão computacional e mais.
|
||||
|
||||
## Exemplos de Ciência de Dados na Nuvem
|
||||
|
||||
Vamos tornar isso mais tangível analisando alguns cenários.
|
||||
|
||||
### Análise de sentimento em redes sociais em tempo real
|
||||
|
||||
Começaremos com um cenário comumente estudado por pessoas que iniciam no aprendizado de máquina: análise de sentimento em redes sociais em tempo real.
|
||||
|
||||
Imagine que você administra um site de notícias e deseja aproveitar dados ao vivo para entender quais conteúdos podem interessar aos seus leitores. Para saber mais sobre isso, você pode criar um programa que realiza análise de sentimento em tempo real de dados de publicações no Twitter, sobre tópicos relevantes para seus leitores.
|
||||
|
||||
Os indicadores-chave que você analisará são o volume de tweets sobre tópicos específicos (hashtags) e o sentimento, que é estabelecido usando ferramentas de análise que realizam análise de sentimento em torno dos tópicos especificados.
|
||||
|
||||
Os passos necessários para criar este projeto são os seguintes:
|
||||
|
||||
* Criar um hub de eventos para entrada de streaming, que coletará dados do Twitter.
|
||||
* Configurar e iniciar um aplicativo cliente do Twitter, que chamará as APIs de Streaming do Twitter.
|
||||
* Criar um trabalho de Stream Analytics.
|
||||
* Especificar a entrada e a consulta do trabalho.
|
||||
* Criar um destino de saída e especificar a saída do trabalho.
|
||||
* Iniciar o trabalho.
|
||||
|
||||
Para ver o processo completo, confira a [documentação](https://docs.microsoft.com/azure/stream-analytics/stream-analytics-twitter-sentiment-analysis-trends?WT.mc_id=academic-77958-bethanycheum&ocid=AID30411099).
|
||||
|
||||
### Análise de artigos científicos
|
||||
|
||||
Vamos analisar outro exemplo de um projeto criado por [Dmitry Soshnikov](http://soshnikov.com), um dos autores deste currículo.
|
||||
|
||||
Dmitry criou uma ferramenta que analisa artigos sobre COVID. Ao revisar este projeto, você verá como criar uma ferramenta que extrai conhecimento de artigos científicos, obtém insights e ajuda pesquisadores a navegar por grandes coleções de artigos de forma eficiente.
|
||||
|
||||
Vamos ver os diferentes passos usados para isso:
|
||||
|
||||
* Extrair e pré-processar informações com [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&ocid=AID3041109).
|
||||
* Usar [Azure ML](https://azure.microsoft.com/services/machine-learning?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) para paralelizar o processamento.
|
||||
* Armazenar e consultar informações com [Cosmos DB](https://azure.microsoft.com/services/cosmos-db?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
|
||||
* Criar um painel interativo para exploração e visualização de dados usando Power BI.
|
||||
|
||||
Para ver o processo completo, visite o [blog de Dmitry](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/).
|
||||
|
||||
Como você pode ver, podemos aproveitar os serviços de Nuvem de várias maneiras para realizar Ciência de Dados.
|
||||
|
||||
## Nota de Rodapé
|
||||
|
||||
Fontes:
|
||||
* https://azure.microsoft.com/overview/what-is-cloud-computing?ocid=AID3041109
|
||||
* https://docs.microsoft.com/azure/stream-analytics/stream-analytics-twitter-sentiment-analysis-trends?ocid=AID3041109
|
||||
* https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/
|
||||
|
||||
## Quiz Pós-Aula
|
||||
|
||||
## [Quiz Pós-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/33)
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Pesquisa de Mercado](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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 incorretas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,16 @@
|
||||
# Pesquisa de Mercado
|
||||
|
||||
## Instruções
|
||||
|
||||
Nesta lição, você aprendeu que existem vários provedores de nuvem importantes. Faça uma pesquisa de mercado para descobrir o que cada um pode oferecer ao Cientista de Dados. As ofertas são comparáveis? Escreva um artigo descrevendo as ofertas de três ou mais desses provedores de nuvem.
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | -- |
|
||||
Um artigo de uma página descreve as ofertas de ciência de dados de três provedores de nuvem e diferencia entre elas. | Um artigo mais curto é apresentado. | Um artigo é apresentado sem concluir a análise.
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Projeto de Ciência de Dados com Baixo Código/Sem Código no Azure ML
|
||||
|
||||
## Instruções
|
||||
|
||||
Vimos como usar a plataforma Azure ML para treinar, implantar e consumir um modelo de forma com baixo código/sem código. Agora procure por alguns dados que você possa usar para treinar outro modelo, implantá-lo e consumi-lo. Você pode buscar conjuntos de dados no [Kaggle](https://kaggle.com) e [Azure Open Datasets](https://azure.microsoft.com/services/open-datasets/catalog?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
|
||||
|
||||
## Critérios de Avaliação
|
||||
|
||||
| Exemplar | Adequado | Precisa Melhorar |
|
||||
|----------|----------|------------------|
|
||||
|Ao carregar os dados, você se certificou de alterar o tipo das características, se necessário. Você também limpou os dados, caso fosse necessário. Você realizou um treinamento em um conjunto de dados usando AutoML e verificou as explicações do modelo. Você implantou o melhor modelo e conseguiu consumi-lo. | Ao carregar os dados, você se certificou de alterar o tipo das características, se necessário. Você realizou um treinamento em um conjunto de dados usando AutoML, implantou o melhor modelo e conseguiu consumi-lo. | Você implantou o melhor modelo treinado pelo AutoML e conseguiu consumi-lo. |
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,303 @@
|
||||
# Ciência de Dados na Nuvem: O caminho do "Azure ML SDK"
|
||||
|
||||
| ](../../sketchnotes/19-DataScience-Cloud.png)|
|
||||
|:---:|
|
||||
| Ciência de Dados na Nuvem: Azure ML SDK - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Índice:
|
||||
|
||||
- [Ciência de Dados na Nuvem: O caminho do "Azure ML SDK"](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [Quiz Pré-Aula](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [1. Introdução](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [1.1 O que é o Azure ML SDK?](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [1.2 Introdução ao projeto de previsão de insuficiência cardíaca e ao conjunto de dados](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [2. Treinando um modelo com o Azure ML SDK](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [2.1 Criar um workspace do Azure ML](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [2.2 Criar uma instância de computação](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [2.3 Carregando o conjunto de dados](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [2.4 Criando Notebooks](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [2.5 Treinando um modelo](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [2.5.1 Configurar Workspace, experimento, cluster de computação e conjunto de dados](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [2.5.2 Configuração e treinamento com AutoML](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [3. Implantação do modelo e consumo do endpoint com o Azure ML SDK](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [3.1 Salvando o melhor modelo](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [3.2 Implantação do modelo](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [3.3 Consumo do endpoint](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [🚀 Desafio](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [Quiz Pós-Aula](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [Revisão e Autoestudo](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
- [Tarefa](../../../../5-Data-Science-In-Cloud/19-Azure)
|
||||
|
||||
## [Quiz Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/36)
|
||||
|
||||
## 1. Introdução
|
||||
|
||||
### 1.1 O que é o Azure ML SDK?
|
||||
|
||||
Cientistas de dados e desenvolvedores de IA utilizam o Azure Machine Learning SDK para construir e executar fluxos de trabalho de aprendizado de máquina com o serviço Azure Machine Learning. Você pode interagir com o serviço em qualquer ambiente Python, incluindo Jupyter Notebooks, Visual Studio Code ou seu IDE Python favorito.
|
||||
|
||||
Áreas principais do SDK incluem:
|
||||
|
||||
- Explorar, preparar e gerenciar o ciclo de vida dos conjuntos de dados usados em experimentos de aprendizado de máquina.
|
||||
- Gerenciar recursos na nuvem para monitoramento, registro e organização de seus experimentos de aprendizado de máquina.
|
||||
- Treinar modelos localmente ou utilizando recursos na nuvem, incluindo treinamento acelerado por GPU.
|
||||
- Usar aprendizado de máquina automatizado, que aceita parâmetros de configuração e dados de treinamento. Ele itera automaticamente entre algoritmos e configurações de hiperparâmetros para encontrar o melhor modelo para realizar previsões.
|
||||
- Implantar serviços web para converter seus modelos treinados em serviços RESTful que podem ser consumidos em qualquer aplicação.
|
||||
|
||||
[Saiba mais sobre o Azure Machine Learning SDK](https://docs.microsoft.com/python/api/overview/azure/ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
|
||||
|
||||
Na [lição anterior](../18-Low-Code/README.md), vimos como treinar, implantar e consumir um modelo de forma Low code/No code. Utilizamos o conjunto de dados de insuficiência cardíaca para gerar um modelo de previsão de insuficiência cardíaca. Nesta lição, faremos exatamente a mesma coisa, mas utilizando o Azure Machine Learning SDK.
|
||||
|
||||

|
||||
|
||||
### 1.2 Introdução ao projeto de previsão de insuficiência cardíaca e ao conjunto de dados
|
||||
|
||||
Confira [aqui](../18-Low-Code/README.md) a introdução ao projeto de previsão de insuficiência cardíaca e ao conjunto de dados.
|
||||
|
||||
## 2. Treinando um modelo com o Azure ML SDK
|
||||
### 2.1 Criar um workspace do Azure ML
|
||||
|
||||
Para simplificar, vamos trabalhar em um notebook Jupyter. Isso implica que você já possui um Workspace e uma instância de computação. Se você já tem um Workspace, pode pular diretamente para a seção 2.3 Criação de Notebooks.
|
||||
|
||||
Caso contrário, siga as instruções na seção **2.1 Criar um workspace do Azure ML** na [lição anterior](../18-Low-Code/README.md) para criar um workspace.
|
||||
|
||||
### 2.2 Criar uma instância de computação
|
||||
|
||||
No [workspace do Azure ML](https://ml.azure.com/) que criamos anteriormente, vá ao menu de computação e você verá os diferentes recursos de computação disponíveis.
|
||||
|
||||

|
||||
|
||||
Vamos criar uma instância de computação para provisionar um notebook Jupyter.
|
||||
1. Clique no botão + Novo.
|
||||
2. Dê um nome à sua instância de computação.
|
||||
3. Escolha suas opções: CPU ou GPU, tamanho da VM e número de núcleos.
|
||||
4. Clique no botão Criar.
|
||||
|
||||
Parabéns, você acabou de criar uma instância de computação! Usaremos essa instância de computação para criar um Notebook na seção [Criação de Notebooks](../../../../5-Data-Science-In-Cloud/19-Azure).
|
||||
|
||||
### 2.3 Carregando o conjunto de dados
|
||||
Consulte a [lição anterior](../18-Low-Code/README.md) na seção **2.3 Carregando o conjunto de dados** caso ainda não tenha carregado o conjunto de dados.
|
||||
|
||||
### 2.4 Criando Notebooks
|
||||
|
||||
> **_NOTA:_** Para o próximo passo, você pode criar um novo notebook do zero ou carregar o [notebook que criamos](../../../../5-Data-Science-In-Cloud/19-Azure/notebook.ipynb) no seu Azure ML Studio. Para carregá-lo, basta clicar no menu "Notebook" e carregar o notebook.
|
||||
|
||||
Notebooks são uma parte muito importante do processo de ciência de dados. Eles podem ser usados para realizar Análise Exploratória de Dados (EDA), chamar um cluster de computação para treinar um modelo ou chamar um cluster de inferência para implantar um endpoint.
|
||||
|
||||
Para criar um Notebook, precisamos de um nó de computação que esteja servindo a instância do notebook Jupyter. Volte ao [workspace do Azure ML](https://ml.azure.com/) e clique em Instâncias de computação. Na lista de instâncias de computação, você deve ver a [instância de computação que criamos anteriormente](../../../../5-Data-Science-In-Cloud/19-Azure).
|
||||
|
||||
1. Na seção Aplicativos, clique na opção Jupyter.
|
||||
2. Marque a caixa "Sim, eu entendo" e clique no botão Continuar.
|
||||

|
||||
3. Isso deve abrir uma nova aba no navegador com sua instância de notebook Jupyter. Clique no botão "Novo" para criar um notebook.
|
||||
|
||||

|
||||
|
||||
Agora que temos um Notebook, podemos começar a treinar o modelo com o Azure ML SDK.
|
||||
|
||||
### 2.5 Treinando um modelo
|
||||
|
||||
Primeiramente, se você tiver alguma dúvida, consulte a [documentação do Azure ML SDK](https://docs.microsoft.com/python/api/overview/azure/ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109). Ela contém todas as informações necessárias para entender os módulos que veremos nesta lição.
|
||||
|
||||
#### 2.5.1 Configurar Workspace, experimento, cluster de computação e conjunto de dados
|
||||
|
||||
Você precisa carregar o `workspace` a partir do arquivo de configuração usando o seguinte código:
|
||||
|
||||
```python
|
||||
from azureml.core import Workspace
|
||||
ws = Workspace.from_config()
|
||||
```
|
||||
|
||||
Isso retorna um objeto do tipo `Workspace` que representa o workspace. Em seguida, você precisa criar um `experimento` usando o seguinte código:
|
||||
|
||||
```python
|
||||
from azureml.core import Experiment
|
||||
experiment_name = 'aml-experiment'
|
||||
experiment = Experiment(ws, experiment_name)
|
||||
```
|
||||
Para obter ou criar um experimento a partir de um workspace, você solicita o experimento usando o nome do experimento. O nome do experimento deve ter entre 3 e 36 caracteres, começar com uma letra ou número e conter apenas letras, números, sublinhados e traços. Se o experimento não for encontrado no workspace, um novo experimento será criado.
|
||||
|
||||
Agora você precisa criar um cluster de computação para o treinamento usando o seguinte código. Note que esta etapa pode levar alguns minutos.
|
||||
|
||||
```python
|
||||
from azureml.core.compute import AmlCompute
|
||||
|
||||
aml_name = "heart-f-cluster"
|
||||
try:
|
||||
aml_compute = AmlCompute(ws, aml_name)
|
||||
print('Found existing AML compute context.')
|
||||
except:
|
||||
print('Creating new AML compute context.')
|
||||
aml_config = AmlCompute.provisioning_configuration(vm_size = "Standard_D2_v2", min_nodes=1, max_nodes=3)
|
||||
aml_compute = AmlCompute.create(ws, name = aml_name, provisioning_configuration = aml_config)
|
||||
aml_compute.wait_for_completion(show_output = True)
|
||||
|
||||
cts = ws.compute_targets
|
||||
compute_target = cts[aml_name]
|
||||
```
|
||||
|
||||
Você pode obter o conjunto de dados do workspace usando o nome do conjunto de dados da seguinte forma:
|
||||
|
||||
```python
|
||||
dataset = ws.datasets['heart-failure-records']
|
||||
df = dataset.to_pandas_dataframe()
|
||||
df.describe()
|
||||
```
|
||||
#### 2.5.2 Configuração e treinamento com AutoML
|
||||
|
||||
Para configurar o AutoML, use a classe [AutoMLConfig](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.automlconfig(class)?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
|
||||
|
||||
Conforme descrito na documentação, há muitos parâmetros com os quais você pode trabalhar. Para este projeto, usaremos os seguintes parâmetros:
|
||||
|
||||
- `experiment_timeout_minutes`: O tempo máximo (em minutos) que o experimento pode ser executado antes de ser automaticamente interrompido e os resultados serem disponibilizados automaticamente.
|
||||
- `max_concurrent_iterations`: O número máximo de iterações de treinamento simultâneas permitidas para o experimento.
|
||||
- `primary_metric`: A métrica principal usada para determinar o status do experimento.
|
||||
- `compute_target`: O alvo de computação do Azure Machine Learning para executar o experimento de aprendizado de máquina automatizado.
|
||||
- `task`: O tipo de tarefa a ser executada. Os valores podem ser 'classification', 'regression' ou 'forecasting', dependendo do tipo de problema de aprendizado de máquina automatizado a ser resolvido.
|
||||
- `training_data`: Os dados de treinamento a serem usados no experimento. Deve conter tanto as características de treinamento quanto uma coluna de rótulo (opcionalmente uma coluna de pesos de amostra).
|
||||
- `label_column_name`: O nome da coluna de rótulo.
|
||||
- `path`: O caminho completo para a pasta do projeto do Azure Machine Learning.
|
||||
- `enable_early_stopping`: Indica se a interrupção antecipada deve ser habilitada caso a pontuação não esteja melhorando no curto prazo.
|
||||
- `featurization`: Indicador para determinar se a etapa de featurização deve ser feita automaticamente ou não, ou se uma featurização personalizada deve ser usada.
|
||||
- `debug_log`: O arquivo de log para gravar informações de depuração.
|
||||
|
||||
```python
|
||||
from azureml.train.automl import AutoMLConfig
|
||||
|
||||
project_folder = './aml-project'
|
||||
|
||||
automl_settings = {
|
||||
"experiment_timeout_minutes": 20,
|
||||
"max_concurrent_iterations": 3,
|
||||
"primary_metric" : 'AUC_weighted'
|
||||
}
|
||||
|
||||
automl_config = AutoMLConfig(compute_target=compute_target,
|
||||
task = "classification",
|
||||
training_data=dataset,
|
||||
label_column_name="DEATH_EVENT",
|
||||
path = project_folder,
|
||||
enable_early_stopping= True,
|
||||
featurization= 'auto',
|
||||
debug_log = "automl_errors.log",
|
||||
**automl_settings
|
||||
)
|
||||
```
|
||||
Agora que você configurou, pode treinar o modelo usando o seguinte código. Esta etapa pode levar até uma hora, dependendo do tamanho do cluster.
|
||||
|
||||
```python
|
||||
remote_run = experiment.submit(automl_config)
|
||||
```
|
||||
Você pode executar o widget RunDetails para mostrar os diferentes experimentos.
|
||||
```python
|
||||
from azureml.widgets import RunDetails
|
||||
RunDetails(remote_run).show()
|
||||
```
|
||||
## 3. Implantação do modelo e consumo do endpoint com o Azure ML SDK
|
||||
|
||||
### 3.1 Salvando o melhor modelo
|
||||
|
||||
O `remote_run` é um objeto do tipo [AutoMLRun](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.run.automlrun?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109). Este objeto contém o método `get_output()` que retorna a melhor execução e o modelo ajustado correspondente.
|
||||
|
||||
```python
|
||||
best_run, fitted_model = remote_run.get_output()
|
||||
```
|
||||
Você pode ver os parâmetros usados para o melhor modelo apenas imprimindo o fitted_model e ver as propriedades do melhor modelo usando o método [get_properties()](https://docs.microsoft.com/python/api/azureml-core/azureml.core.run(class)?view=azure-ml-py#azureml_core_Run_get_properties?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
|
||||
|
||||
```python
|
||||
best_run.get_properties()
|
||||
```
|
||||
|
||||
Agora registre o modelo com o método [register_model](https://docs.microsoft.com/python/api/azureml-train-automl-client/azureml.train.automl.run.automlrun?view=azure-ml-py#register-model-model-name-none--description-none--tags-none--iteration-none--metric-none-?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
|
||||
```python
|
||||
model_name = best_run.properties['model_name']
|
||||
script_file_name = 'inference/score.py'
|
||||
best_run.download_file('outputs/scoring_file_v_1_0_0.py', 'inference/score.py')
|
||||
description = "aml heart failure project sdk"
|
||||
model = best_run.register_model(model_name = model_name,
|
||||
model_path = './outputs/',
|
||||
description = description,
|
||||
tags = None)
|
||||
```
|
||||
### 3.2 Implantação do modelo
|
||||
|
||||
Depois de salvar o melhor modelo, podemos implantá-lo com a classe [InferenceConfig](https://docs.microsoft.com/python/api/azureml-core/azureml.core.model.inferenceconfig?view=azure-ml-py?ocid=AID3041109). InferenceConfig representa as configurações de configuração para um ambiente personalizado usado para implantação. A classe [AciWebservice](https://docs.microsoft.com/python/api/azureml-core/azureml.core.webservice.aciwebservice?view=azure-ml-py) representa um modelo de aprendizado de máquina implantado como um endpoint de serviço web em Azure Container Instances. Um serviço implantado é criado a partir de um modelo, script e arquivos associados. O serviço web resultante é um endpoint HTTP balanceado com uma API REST. Você pode enviar dados para esta API e receber a previsão retornada pelo modelo.
|
||||
|
||||
O modelo é implantado usando o método [deploy](https://docs.microsoft.com/python/api/azureml-core/azureml.core.model(class)?view=azure-ml-py#deploy-workspace--name--models--inference-config-none--deployment-config-none--deployment-target-none--overwrite-false--show-output-false-?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
|
||||
|
||||
```python
|
||||
from azureml.core.model import InferenceConfig, Model
|
||||
from azureml.core.webservice import AciWebservice
|
||||
|
||||
inference_config = InferenceConfig(entry_script=script_file_name, environment=best_run.get_environment())
|
||||
|
||||
aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1,
|
||||
memory_gb = 1,
|
||||
tags = {'type': "automl-heart-failure-prediction"},
|
||||
description = 'Sample service for AutoML Heart Failure Prediction')
|
||||
|
||||
aci_service_name = 'automl-hf-sdk'
|
||||
aci_service = Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig)
|
||||
aci_service.wait_for_deployment(True)
|
||||
print(aci_service.state)
|
||||
```
|
||||
Esta etapa deve levar alguns minutos.
|
||||
|
||||
### 3.3 Consumo do endpoint
|
||||
|
||||
Você consome seu endpoint criando uma entrada de exemplo:
|
||||
|
||||
```python
|
||||
data = {
|
||||
"data":
|
||||
[
|
||||
{
|
||||
'age': "60",
|
||||
'anaemia': "false",
|
||||
'creatinine_phosphokinase': "500",
|
||||
'diabetes': "false",
|
||||
'ejection_fraction': "38",
|
||||
'high_blood_pressure': "false",
|
||||
'platelets': "260000",
|
||||
'serum_creatinine': "1.40",
|
||||
'serum_sodium': "137",
|
||||
'sex': "false",
|
||||
'smoking': "false",
|
||||
'time': "130",
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
test_sample = str.encode(json.dumps(data))
|
||||
```
|
||||
E então pode enviar esta entrada para seu modelo para obter a previsão:
|
||||
```python
|
||||
response = aci_service.run(input_data=test_sample)
|
||||
response
|
||||
```
|
||||
Isso deve gerar `'{"result": [false]}'`. Isso significa que o input do paciente que enviamos para o endpoint gerou a previsão `false`, o que indica que essa pessoa provavelmente não terá um ataque cardíaco.
|
||||
|
||||
Parabéns! Você acabou de consumir o modelo implantado e treinado no Azure ML com o Azure ML SDK!
|
||||
|
||||
> **_NOTE:_** Quando terminar o projeto, não se esqueça de excluir todos os recursos.
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Há muitas outras coisas que você pode fazer com o SDK, infelizmente, não podemos abordar todas nesta lição. Mas uma boa notícia: aprender a navegar pela documentação do SDK pode te levar muito longe por conta própria. Dê uma olhada na documentação do Azure ML SDK e encontre a classe `Pipeline`, que permite criar pipelines. Um Pipeline é uma coleção de etapas que podem ser executadas como um fluxo de trabalho.
|
||||
|
||||
**DICA:** Acesse a [documentação do SDK](https://docs.microsoft.com/python/api/overview/azure/ml/?view=azure-ml-py?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) e digite palavras-chave na barra de pesquisa, como "Pipeline". Você deve encontrar a classe `azureml.pipeline.core.Pipeline` nos resultados da pesquisa.
|
||||
|
||||
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/37)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Nesta lição, você aprendeu como treinar, implantar e consumir um modelo para prever o risco de insuficiência cardíaca com o Azure ML SDK na nuvem. Confira esta [documentação](https://docs.microsoft.com/python/api/overview/azure/ml/?view=azure-ml-py?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) para mais informações sobre o Azure ML SDK. Tente criar seu próprio modelo com o Azure ML SDK.
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Projeto de Ciência de Dados usando Azure ML SDK](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Projeto de Ciência de Dados usando Azure ML SDK
|
||||
|
||||
## Instruções
|
||||
|
||||
Vimos como usar a plataforma Azure ML para treinar, implantar e consumir um modelo com o Azure ML SDK. Agora procure por alguns dados que você possa usar para treinar outro modelo, implantá-lo e consumi-lo. Você pode procurar conjuntos de dados no [Kaggle](https://kaggle.com) e no [Azure Open Datasets](https://azure.microsoft.com/services/open-datasets/catalog?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
|
||||
|
||||
## Critérios de Avaliação
|
||||
|
||||
| Exemplar | Adequado | Precisa de Melhorias |
|
||||
|----------|----------|----------------------|
|
||||
|Ao configurar o AutoML, você consultou a documentação do SDK para ver quais parâmetros poderia usar. Você realizou um treinamento em um conjunto de dados usando AutoML com o Azure ML SDK e verificou as explicações do modelo. Você implantou o melhor modelo e conseguiu consumi-lo através do Azure ML SDK. | Você realizou um treinamento em um conjunto de dados usando AutoML com o Azure ML SDK e verificou as explicações do modelo. Você implantou o melhor modelo e conseguiu consumi-lo através do Azure ML SDK. | Você realizou um treinamento em um conjunto de dados usando AutoML com o Azure ML SDK. Você implantou o melhor modelo e conseguiu consumi-lo através do Azure ML SDK. |
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,323 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"# Ciência de Dados na Nuvem: O jeito \"Azure ML SDK\"\n",
|
||||
"\n",
|
||||
"## Introdução\n",
|
||||
"\n",
|
||||
"Neste notebook, vamos aprender como usar o Azure ML SDK para treinar, implantar e consumir um modelo através do Azure ML.\n",
|
||||
"\n",
|
||||
"Pré-requisitos: \n",
|
||||
"1. Você criou um workspace do Azure ML. \n",
|
||||
"2. Você carregou o [conjunto de dados de Insuficiência Cardíaca](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data) no Azure ML. \n",
|
||||
"3. Você fez o upload deste notebook no Azure ML Studio. \n",
|
||||
"\n",
|
||||
"Os próximos passos são:\n",
|
||||
"\n",
|
||||
"1. Criar um Experimento em um Workspace existente. \n",
|
||||
"2. Criar um cluster de Computação. \n",
|
||||
"3. Carregar o conjunto de dados. \n",
|
||||
"4. Configurar o AutoML usando AutoMLConfig. \n",
|
||||
"5. Executar o experimento AutoML. \n",
|
||||
"6. Explorar os resultados e obter o melhor modelo. \n",
|
||||
"7. Registrar o melhor modelo. \n",
|
||||
"8. Implantar o melhor modelo. \n",
|
||||
"9. Consumir o endpoint. \n",
|
||||
"\n",
|
||||
"## Importações específicas do Azure Machine Learning SDK\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"from azureml.core import Workspace, Experiment\n",
|
||||
"from azureml.core.compute import AmlCompute\n",
|
||||
"from azureml.train.automl import AutoMLConfig\n",
|
||||
"from azureml.widgets import RunDetails\n",
|
||||
"from azureml.core.model import InferenceConfig, Model\n",
|
||||
"from azureml.core.webservice import AciWebservice"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Inicializar Espaço de Trabalho\n",
|
||||
"Inicialize um objeto de espaço de trabalho a partir de uma configuração persistida. Certifique-se de que o arquivo de configuração esteja presente em .\\config.json\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"ws = Workspace.from_config()\n",
|
||||
"print(ws.name, ws.resource_group, ws.location, ws.subscription_id, sep = '\\n')"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Criar um experimento no Azure ML\n",
|
||||
"\n",
|
||||
"Vamos criar um experimento chamado 'aml-experiment' no espaço de trabalho que acabamos de inicializar.\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"experiment_name = 'aml-experiment'\n",
|
||||
"experiment = Experiment(ws, experiment_name)\n",
|
||||
"experiment"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Criar um Cluster de Computação \n",
|
||||
"Você precisará criar um [destino de computação](https://docs.microsoft.com/azure/machine-learning/concept-azure-machine-learning-architecture#compute-target) para sua execução do AutoML. \n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"aml_name = \"heart-f-cluster\"\n",
|
||||
"try:\n",
|
||||
" aml_compute = AmlCompute(ws, aml_name)\n",
|
||||
" print('Found existing AML compute context.')\n",
|
||||
"except:\n",
|
||||
" print('Creating new AML compute context.')\n",
|
||||
" aml_config = AmlCompute.provisioning_configuration(vm_size = \"Standard_D2_v2\", min_nodes=1, max_nodes=3)\n",
|
||||
" aml_compute = AmlCompute.create(ws, name = aml_name, provisioning_configuration = aml_config)\n",
|
||||
" aml_compute.wait_for_completion(show_output = True)\n",
|
||||
"\n",
|
||||
"cts = ws.compute_targets\n",
|
||||
"compute_target = cts[aml_name]"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Dados\n",
|
||||
"Certifique-se de que você carregou o conjunto de dados no Azure ML e que a chave tem o mesmo nome do conjunto de dados.\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"key = 'heart-failure-records'\n",
|
||||
"dataset = ws.datasets[key]\n",
|
||||
"df = dataset.to_pandas_dataframe()\n",
|
||||
"df.describe()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Configuração AutoML\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"automl_settings = {\n",
|
||||
" \"experiment_timeout_minutes\": 20,\n",
|
||||
" \"max_concurrent_iterations\": 3,\n",
|
||||
" \"primary_metric\" : 'AUC_weighted'\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"automl_config = AutoMLConfig(compute_target=compute_target,\n",
|
||||
" task = \"classification\",\n",
|
||||
" training_data=dataset,\n",
|
||||
" label_column_name=\"DEATH_EVENT\",\n",
|
||||
" enable_early_stopping= True,\n",
|
||||
" featurization= 'auto',\n",
|
||||
" debug_log = \"automl_errors.log\",\n",
|
||||
" **automl_settings\n",
|
||||
" )"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Execução AutoML\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"remote_run = experiment.submit(automl_config)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"RunDetails(remote_run).show()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"best_run, fitted_model = remote_run.get_output()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"best_run.get_properties()"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"model_name = best_run.properties['model_name']\n",
|
||||
"script_file_name = 'inference/score.py'\n",
|
||||
"best_run.download_file('outputs/scoring_file_v_1_0_0.py', 'inference/score.py')\n",
|
||||
"description = \"aml heart failure project sdk\"\n",
|
||||
"model = best_run.register_model(model_name = model_name,\n",
|
||||
" description = description,\n",
|
||||
" tags = None)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Implantar o Melhor Modelo\n",
|
||||
"\n",
|
||||
"Execute o código a seguir para implantar o melhor modelo. Você pode verificar o estado da implantação no portal do Azure ML. Este processo pode levar alguns minutos.\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"inference_config = InferenceConfig(entry_script=script_file_name, environment=best_run.get_environment())\n",
|
||||
"\n",
|
||||
"aciconfig = AciWebservice.deploy_configuration(cpu_cores = 1,\n",
|
||||
" memory_gb = 1,\n",
|
||||
" tags = {'type': \"automl-heart-failure-prediction\"},\n",
|
||||
" description = 'Sample service for AutoML Heart Failure Prediction')\n",
|
||||
"\n",
|
||||
"aci_service_name = 'automl-hf-sdk'\n",
|
||||
"aci_service = Model.deploy(ws, aci_service_name, [model], inference_config, aciconfig)\n",
|
||||
"aci_service.wait_for_deployment(True)\n",
|
||||
"print(aci_service.state)"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"## Consumir o Endpoint\n",
|
||||
"Você pode adicionar entradas ao exemplo de entrada abaixo.\n"
|
||||
],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"data = {\n",
|
||||
" \"data\":\n",
|
||||
" [\n",
|
||||
" {\n",
|
||||
" 'age': \"60\",\n",
|
||||
" 'anaemia': \"false\",\n",
|
||||
" 'creatinine_phosphokinase': \"500\",\n",
|
||||
" 'diabetes': \"false\",\n",
|
||||
" 'ejection_fraction': \"38\",\n",
|
||||
" 'high_blood_pressure': \"false\",\n",
|
||||
" 'platelets': \"260000\",\n",
|
||||
" 'serum_creatinine': \"1.40\",\n",
|
||||
" 'serum_sodium': \"137\",\n",
|
||||
" 'sex': \"false\",\n",
|
||||
" 'smoking': \"false\",\n",
|
||||
" 'time': \"130\",\n",
|
||||
" },\n",
|
||||
" ],\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"test_sample = str.encode(json.dumps(data))"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"source": [
|
||||
"response = aci_service.run(input_data=test_sample)\n",
|
||||
"response"
|
||||
],
|
||||
"outputs": [],
|
||||
"metadata": {}
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**Aviso Legal**: \nEste 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.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"orig_nbformat": 4,
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "af42669556d5dc19fc4cc3866f7d2597",
|
||||
"translation_date": "2025-09-01T20:03:49+00:00",
|
||||
"source_file": "5-Data-Science-In-Cloud/19-Azure/notebook.ipynb",
|
||||
"language_code": "br"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
# Ciência de Dados na Nuvem
|
||||
|
||||

|
||||
|
||||
> Foto de [Jelleke Vanooteghem](https://unsplash.com/@ilumire) no [Unsplash](https://unsplash.com/s/photos/cloud?orientation=landscape)
|
||||
|
||||
Quando se trata de fazer ciência de dados com big data, a nuvem pode ser um divisor de águas. Nas próximas três lições, vamos entender o que é a nuvem e por que ela pode ser tão útil. Também vamos explorar um conjunto de dados sobre insuficiência cardíaca e construir um modelo para ajudar a avaliar a probabilidade de alguém sofrer uma insuficiência cardíaca. Usaremos o poder da nuvem para treinar, implantar e consumir um modelo de duas maneiras diferentes. Uma delas utilizando apenas a interface do usuário em um formato de Baixo Código/Sem Código, e a outra utilizando o Azure Machine Learning Software Developer Kit (Azure ML SDK).
|
||||
|
||||

|
||||
|
||||
### Tópicos
|
||||
|
||||
1. [Por que usar a Nuvem para Ciência de Dados?](17-Introduction/README.md)
|
||||
2. [Ciência de Dados na Nuvem: O jeito "Baixo Código/Sem Código"](18-Low-Code/README.md)
|
||||
3. [Ciência de Dados na Nuvem: O jeito "Azure ML SDK"](19-Azure/README.md)
|
||||
|
||||
### Créditos
|
||||
Estas lições foram escritas com ☁️ e 💕 por [Maud Levy](https://twitter.com/maudstweets) e [Tiffany Souterre](https://twitter.com/TiffanySouterre)
|
||||
|
||||
Os dados para o projeto de Previsão de Insuficiência Cardíaca foram obtidos de [
|
||||
Larxel](https://www.kaggle.com/andrewmvd) no [Kaggle](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data). Eles estão licenciados sob a [Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/).
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,147 @@
|
||||
# Ciência de Dados no Mundo Real
|
||||
|
||||
|  ](../../sketchnotes/20-DataScience-RealWorld.png) |
|
||||
| :--------------------------------------------------------------------------------------------------------------: |
|
||||
| Ciência de Dados no Mundo Real - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Estamos quase no fim desta jornada de aprendizado!
|
||||
|
||||
Começamos com definições de ciência de dados e ética, exploramos várias ferramentas e técnicas para análise e visualização de dados, revisamos o ciclo de vida da ciência de dados e analisamos como escalar e automatizar fluxos de trabalho de ciência de dados com serviços de computação em nuvem. Então, você provavelmente está se perguntando: _"Como exatamente posso aplicar tudo isso em contextos do mundo real?"_
|
||||
|
||||
Nesta lição, vamos explorar aplicações reais da ciência de dados em diferentes indústrias e mergulhar em exemplos específicos nos contextos de pesquisa, humanidades digitais e sustentabilidade. Também veremos oportunidades de projetos para estudantes e concluiremos com recursos úteis para ajudar você a continuar sua jornada de aprendizado!
|
||||
|
||||
## Quiz Pré-Aula
|
||||
|
||||
## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/38)
|
||||
|
||||
## Ciência de Dados + Indústria
|
||||
|
||||
Graças à democratização da IA, os desenvolvedores estão encontrando mais facilidade para projetar e integrar tomadas de decisão baseadas em IA e insights orientados por dados em experiências de usuário e fluxos de trabalho de desenvolvimento. Aqui estão alguns exemplos de como a ciência de dados é "aplicada" em contextos reais na indústria:
|
||||
|
||||
* [Google Flu Trends](https://www.wired.com/2015/10/can-learn-epic-failure-google-flu-trends/) usou ciência de dados para correlacionar termos de busca com tendências de gripe. Embora a abordagem tenha falhas, ela trouxe à tona as possibilidades (e desafios) de previsões de saúde baseadas em dados.
|
||||
|
||||
* [Previsões de Rotas da UPS](https://www.technologyreview.com/2018/11/21/139000/how-ups-uses-ai-to-outsmart-bad-weather/) - explica como a UPS utiliza ciência de dados e aprendizado de máquina para prever rotas ideais de entrega, considerando condições climáticas, padrões de tráfego, prazos de entrega e mais.
|
||||
|
||||
* [Visualização de Rotas de Táxi em NYC](http://chriswhong.github.io/nyctaxi/) - dados obtidos por meio das [Leis de Liberdade de Informação](https://chriswhong.com/open-data/foil_nyc_taxi/) ajudaram a visualizar um dia na vida dos táxis de NYC, permitindo entender como eles navegam pela cidade movimentada, o dinheiro que ganham e a duração das viagens ao longo de um período de 24 horas.
|
||||
|
||||
* [Uber Data Science Workbench](https://eng.uber.com/dsw/) - utiliza dados (sobre locais de embarque e desembarque, duração das viagens, rotas preferidas etc.) coletados de milhões de viagens diárias para construir uma ferramenta de análise de dados que ajuda em decisões de preços, segurança, detecção de fraudes e navegação.
|
||||
|
||||
* [Análise Esportiva](https://towardsdatascience.com/scope-of-analytics-in-sports-world-37ed09c39860) - foca em _análise preditiva_ (análise de equipes e jogadores - pense em [Moneyball](https://datasciencedegree.wisconsin.edu/blog/moneyball-proves-importance-big-data-big-ideas/) - e gestão de fãs) e _visualização de dados_ (painéis de equipes e fãs, jogos etc.) com aplicações como recrutamento de talentos, apostas esportivas e gestão de inventário/locais.
|
||||
|
||||
* [Ciência de Dados no Setor Bancário](https://data-flair.training/blogs/data-science-in-banking/) - destaca o valor da ciência de dados na indústria financeira com aplicações que vão desde modelagem de risco e detecção de fraudes até segmentação de clientes, previsão em tempo real e sistemas de recomendação. A análise preditiva também impulsiona medidas críticas como [pontuação de crédito](https://dzone.com/articles/using-big-data-and-predictive-analytics-for-credit).
|
||||
|
||||
* [Ciência de Dados na Saúde](https://data-flair.training/blogs/data-science-in-healthcare/) - destaca aplicações como imagem médica (e.g., ressonância magnética, raio-X, tomografia), genômica (sequenciamento de DNA), desenvolvimento de medicamentos (avaliação de risco, previsão de sucesso), análise preditiva (cuidados com pacientes e logística de suprimentos), rastreamento e prevenção de doenças etc.
|
||||
|
||||
 Crédito da Imagem: [Data Flair: 6 Amazing Data Science Applications ](https://data-flair.training/blogs/data-science-applications/)
|
||||
|
||||
A figura mostra outros domínios e exemplos de aplicação de técnicas de ciência de dados. Quer explorar outras aplicações? Confira a seção [Revisão e Autoestudo](../../../../6-Data-Science-In-Wild/20-Real-World-Examples) abaixo.
|
||||
|
||||
## Ciência de Dados + Pesquisa
|
||||
|
||||
|  ](../../sketchnotes/20-DataScience-Research.png) |
|
||||
| :---------------------------------------------------------------------------------------------------------------: |
|
||||
| Ciência de Dados & Pesquisa - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Embora as aplicações do mundo real frequentemente se concentrem em casos de uso na indústria em larga escala, as aplicações e projetos de _pesquisa_ podem ser úteis sob duas perspectivas:
|
||||
|
||||
* _oportunidades de inovação_ - explorar prototipagem rápida de conceitos avançados e testar experiências de usuário para aplicações de próxima geração.
|
||||
* _desafios de implementação_ - investigar possíveis danos ou consequências não intencionais das tecnologias de ciência de dados em contextos reais.
|
||||
|
||||
Para estudantes, esses projetos de pesquisa podem oferecer oportunidades de aprendizado e colaboração que melhoram sua compreensão do tema e ampliam sua conscientização e engajamento com pessoas ou equipes relevantes que trabalham em áreas de interesse. Então, como são os projetos de pesquisa e como eles podem causar impacto?
|
||||
|
||||
Vamos analisar um exemplo - o [MIT Gender Shades Study](http://gendershades.org/overview.html) de Joy Buolamwini (MIT Media Labs) com um [artigo de pesquisa de destaque](http://proceedings.mlr.press/v81/buolamwini18a/buolamwini18a.pdf) coautorado com Timnit Gebru (então na Microsoft Research) que focou em:
|
||||
|
||||
* **O quê:** O objetivo do projeto de pesquisa era _avaliar o viés presente em algoritmos e conjuntos de dados de análise facial automatizada_ com base em gênero e tipo de pele.
|
||||
* **Por quê:** A análise facial é usada em áreas como aplicação da lei, segurança em aeroportos, sistemas de contratação e mais - contextos onde classificações imprecisas (e.g., devido ao viés) podem causar danos econômicos e sociais potenciais a indivíduos ou grupos afetados. Entender (e eliminar ou mitigar) esses vieses é essencial para a equidade no uso.
|
||||
* **Como:** Os pesquisadores perceberam que os benchmarks existentes usavam predominantemente sujeitos de pele mais clara e criaram um novo conjunto de dados (mais de 1000 imagens) que era _mais equilibrado_ por gênero e tipo de pele. O conjunto de dados foi usado para avaliar a precisão de três produtos de classificação de gênero (da Microsoft, IBM e Face++).
|
||||
|
||||
Os resultados mostraram que, embora a precisão geral da classificação fosse boa, havia uma diferença perceptível nas taxas de erro entre vários subgrupos - com **erros de classificação de gênero** sendo mais altos para mulheres ou pessoas com pele mais escura, indicativo de viés.
|
||||
|
||||
**Principais Resultados:** Aumentou a conscientização de que a ciência de dados precisa de mais _conjuntos de dados representativos_ (subgrupos equilibrados) e mais _equipes inclusivas_ (diversidade de origens) para reconhecer e eliminar ou mitigar esses vieses mais cedo em soluções de IA. Esforços de pesquisa como este também são fundamentais para muitas organizações definirem princípios e práticas para _IA responsável_ visando melhorar a equidade em seus produtos e processos de IA.
|
||||
|
||||
**Quer saber mais sobre esforços de pesquisa relevantes na Microsoft?**
|
||||
|
||||
* Confira [Projetos de Pesquisa da Microsoft](https://www.microsoft.com/research/research-area/artificial-intelligence/?facet%5Btax%5D%5Bmsr-research-area%5D%5B%5D=13556&facet%5Btax%5D%5Bmsr-content-type%5D%5B%5D=msr-project) em Inteligência Artificial.
|
||||
* Explore projetos de estudantes da [Microsoft Research Data Science Summer School](https://www.microsoft.com/en-us/research/academic-program/data-science-summer-school/).
|
||||
* Confira o projeto [Fairlearn](https://fairlearn.org/) e as iniciativas de [IA Responsável](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6).
|
||||
|
||||
## Ciência de Dados + Humanidades
|
||||
|
||||
|  ](../../sketchnotes/20-DataScience-Humanities.png) |
|
||||
| :---------------------------------------------------------------------------------------------------------------: |
|
||||
| Ciência de Dados & Humanidades Digitais - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
Humanidades Digitais [são definidas](https://digitalhumanities.stanford.edu/about-dh-stanford) como "uma coleção de práticas e abordagens que combinam métodos computacionais com investigação humanística". Projetos [Stanford](https://digitalhumanities.stanford.edu/projects) como _"rebooting history"_ e _"poetic thinking"_ ilustram a ligação entre [Humanidades Digitais e Ciência de Dados](https://digitalhumanities.stanford.edu/digital-humanities-and-data-science) - enfatizando técnicas como análise de redes, visualização de informações, análise espacial e textual que podem nos ajudar a revisitar conjuntos de dados históricos e literários para obter novos insights e perspectivas.
|
||||
|
||||
*Quer explorar e expandir um projeto nesta área?*
|
||||
|
||||
Confira ["Emily Dickinson and the Meter of Mood"](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671) - um ótimo exemplo de [Jen Looper](https://twitter.com/jenlooper) que pergunta como podemos usar ciência de dados para revisitar poesias familiares e reavaliar seu significado e as contribuições de seu autor em novos contextos. Por exemplo, _podemos prever a estação do ano em que um poema foi escrito analisando seu tom ou sentimento_ - e o que isso nos diz sobre o estado de espírito do autor durante o período relevante?
|
||||
|
||||
Para responder a essa pergunta, seguimos os passos do ciclo de vida da ciência de dados:
|
||||
* [`Aquisição de Dados`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#acquiring-the-dataset) - para coletar um conjunto de dados relevante para análise. As opções incluem usar uma API (e.g., [Poetry DB API](https://poetrydb.org/index.html)) ou fazer scraping de páginas web (e.g., [Project Gutenberg](https://www.gutenberg.org/files/12242/12242-h/12242-h.htm)) usando ferramentas como [Scrapy](https://scrapy.org/).
|
||||
* [`Limpeza de Dados`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#clean-the-data) - explica como o texto pode ser formatado, sanitizado e simplificado usando ferramentas básicas como Visual Studio Code e Microsoft Excel.
|
||||
* [`Análise de Dados`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#working-with-the-data-in-a-notebook) - explica como podemos importar o conjunto de dados para "Notebooks" para análise usando pacotes Python (como pandas, numpy e matplotlib) para organizar e visualizar os dados.
|
||||
* [`Análise de Sentimento`](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671#sentiment-analysis-using-cognitive-services) - explica como podemos integrar serviços em nuvem como Text Analytics, usando ferramentas de baixo código como [Power Automate](https://flow.microsoft.com/en-us/) para fluxos de trabalho automatizados de processamento de dados.
|
||||
|
||||
Usando esse fluxo de trabalho, podemos explorar os impactos sazonais no sentimento dos poemas e nos ajudar a formar nossas próprias perspectivas sobre o autor. Experimente você mesmo - depois expanda o notebook para fazer outras perguntas ou visualizar os dados de novas maneiras!
|
||||
|
||||
> Você pode usar algumas das ferramentas no [Digital Humanities toolkit](https://github.com/Digital-Humanities-Toolkit) para seguir essas linhas de investigação.
|
||||
|
||||
## Ciência de Dados + Sustentabilidade
|
||||
|
||||
|  ](../../sketchnotes/20-DataScience-Sustainability.png) |
|
||||
| :---------------------------------------------------------------------------------------------------------------: |
|
||||
| Ciência de Dados & Sustentabilidade - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
A [Agenda 2030 para o Desenvolvimento Sustentável](https://sdgs.un.org/2030agenda) - adotada por todos os membros das Nações Unidas em 2015 - identifica 17 objetivos, incluindo aqueles que focam em **Proteger o Planeta** contra a degradação e os impactos das mudanças climáticas. A iniciativa [Microsoft Sustainability](https://www.microsoft.com/en-us/sustainability) apoia esses objetivos explorando maneiras pelas quais soluções tecnológicas podem promover e construir futuros mais sustentáveis com um [foco em 4 metas](https://dev.to/azure/a-visual-guide-to-sustainable-software-engineering-53hh) - ser carbono negativo, positivo em água, zero desperdício e biodiverso até 2030.
|
||||
|
||||
Enfrentar esses desafios de forma escalável e oportuna exige pensamento em escala de nuvem - e grandes volumes de dados. A iniciativa [Planetary Computer](https://planetarycomputer.microsoft.com/) fornece 4 componentes para ajudar cientistas de dados e desenvolvedores nesse esforço:
|
||||
|
||||
* [Catálogo de Dados](https://planetarycomputer.microsoft.com/catalog) - com petabytes de dados de sistemas terrestres (gratuitos e hospedados no Azure).
|
||||
* [API Planetária](https://planetarycomputer.microsoft.com/docs/reference/stac/) - para ajudar os usuários a buscar dados relevantes no espaço e no tempo.
|
||||
* [Hub](https://planetarycomputer.microsoft.com/docs/overview/environment/) - ambiente gerenciado para cientistas processarem grandes conjuntos de dados geoespaciais.
|
||||
* [Aplicações](https://planetarycomputer.microsoft.com/applications) - mostram casos de uso e ferramentas para insights sobre sustentabilidade.
|
||||
**O Projeto Planetary Computer está atualmente em fase de pré-visualização (a partir de setembro de 2021)** - veja como você pode começar a contribuir para soluções de sustentabilidade usando ciência de dados.
|
||||
|
||||
* [Solicite acesso](https://planetarycomputer.microsoft.com/account/request) para iniciar a exploração e se conectar com outros profissionais.
|
||||
* [Explore a documentação](https://planetarycomputer.microsoft.com/docs/overview/about) para entender os conjuntos de dados e APIs suportados.
|
||||
* Explore aplicações como [Monitoramento de Ecossistemas](https://analytics-lab.org/ecosystemmonitoring/) para se inspirar em ideias de aplicações.
|
||||
|
||||
Pense em como você pode usar visualização de dados para expor ou amplificar insights relevantes em áreas como mudanças climáticas e desmatamento. Ou reflita sobre como esses insights podem ser usados para criar novas experiências de usuário que motivem mudanças comportamentais para uma vida mais sustentável.
|
||||
|
||||
## Ciência de Dados + Estudantes
|
||||
|
||||
Falamos sobre aplicações do mundo real na indústria e na pesquisa, e exploramos exemplos de aplicações de ciência de dados nas humanidades digitais e na sustentabilidade. Então, como você pode desenvolver suas habilidades e compartilhar sua expertise como iniciante em ciência de dados?
|
||||
|
||||
Aqui estão alguns exemplos de projetos de estudantes em ciência de dados para inspirar você.
|
||||
|
||||
* [Escola de Verão de Ciência de Dados da MSR](https://www.microsoft.com/en-us/research/academic-program/data-science-summer-school/#!projects) com [projetos](https://github.com/msr-ds3) no GitHub explorando tópicos como:
|
||||
- [Viés Racial no Uso da Força pela Polícia](https://www.microsoft.com/en-us/research/video/data-science-summer-school-2019-replicating-an-empirical-analysis-of-racial-differences-in-police-use-of-force/) | [Github](https://github.com/msr-ds3/stop-question-frisk)
|
||||
- [Confiabilidade do Sistema de Metrô de Nova York](https://www.microsoft.com/en-us/research/video/data-science-summer-school-2018-exploring-the-reliability-of-the-nyc-subway-system/) | [Github](https://github.com/msr-ds3/nyctransit)
|
||||
* [Digitalizando a Cultura Material: Explorando distribuições socioeconômicas em Sirkap](https://claremont.maps.arcgis.com/apps/Cascade/index.html?appid=bdf2aef0f45a4674ba41cd373fa23afc) - de [Ornella Altunyan](https://twitter.com/ornelladotcom) e equipe em Claremont, usando [ArcGIS StoryMaps](https://storymaps.arcgis.com/).
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Pesquise artigos que recomendem projetos de ciência de dados para iniciantes - como [essas 50 áreas temáticas](https://www.upgrad.com/blog/data-science-project-ideas-topics-beginners/) ou [essas 21 ideias de projetos](https://www.intellspot.com/data-science-project-ideas) ou [esses 16 projetos com código-fonte](https://data-flair.training/blogs/data-science-project-ideas/) que você pode desconstruir e remixar. E não se esqueça de blogar sobre suas jornadas de aprendizado e compartilhar seus insights com todos nós.
|
||||
|
||||
## Questionário Pós-Aula
|
||||
|
||||
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/39)
|
||||
|
||||
## Revisão e Autoestudo
|
||||
|
||||
Quer explorar mais casos de uso? Aqui estão alguns artigos relevantes:
|
||||
* [17 Aplicações e Exemplos de Ciência de Dados](https://builtin.com/data-science/data-science-applications-examples) - Jul 2021
|
||||
* [11 Aplicações Impressionantes de Ciência de Dados no Mundo Real](https://myblindbird.com/data-science-applications-real-world/) - Mai 2021
|
||||
* [Ciência de Dados no Mundo Real](https://towardsdatascience.com/data-science-in-the-real-world/home) - Coleção de Artigos
|
||||
* [12 Aplicações Reais de Ciência de Dados com Exemplos](https://www.scaler.com/blog/data-science-applications/) - Mai 2024
|
||||
* Ciência de Dados em: [Educação](https://data-flair.training/blogs/data-science-in-education/), [Agricultura](https://data-flair.training/blogs/data-science-in-agriculture/), [Finanças](https://data-flair.training/blogs/data-science-in-finance/), [Filmes](https://data-flair.training/blogs/data-science-at-movies/), [Saúde](https://onlinedegrees.sandiego.edu/data-science-health-care/) e mais.
|
||||
|
||||
## Tarefa
|
||||
|
||||
[Explore um Conjunto de Dados do Planetary Computer](assignment.md)
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,41 @@
|
||||
# Explore um Conjunto de Dados do Planetary Computer
|
||||
|
||||
## Instruções
|
||||
|
||||
Nesta lição, discutimos vários domínios de aplicação da ciência de dados - com análises aprofundadas de exemplos relacionados à pesquisa, sustentabilidade e humanidades digitais. Nesta tarefa, você explorará um desses exemplos em mais detalhes e aplicará alguns dos seus aprendizados sobre visualizações e análises de dados para obter insights sobre dados de sustentabilidade.
|
||||
|
||||
O projeto [Planetary Computer](https://planetarycomputer.microsoft.com/) possui conjuntos de dados e APIs que podem ser acessados com uma conta - solicite uma para acessar se quiser tentar a etapa bônus da tarefa. O site também oferece um recurso chamado [Explorer](https://planetarycomputer.microsoft.com/explore), que pode ser usado sem criar uma conta.
|
||||
|
||||
`Passos:`
|
||||
A interface do Explorer (mostrada na captura de tela abaixo) permite que você selecione um conjunto de dados (das opções fornecidas), uma consulta predefinida (para filtrar os dados) e uma opção de renderização (para criar uma visualização relevante). Nesta tarefa, sua missão é:
|
||||
|
||||
1. Ler a [documentação do Explorer](https://planetarycomputer.microsoft.com/docs/overview/explorer/) - entender as opções disponíveis.
|
||||
2. Explorar o [Catálogo de conjuntos de dados](https://planetarycomputer.microsoft.com/catalog) - aprender o propósito de cada conjunto de dados.
|
||||
3. Usar o Explorer - escolher um conjunto de dados de interesse, selecionar uma consulta relevante e uma opção de renderização.
|
||||
|
||||

|
||||
|
||||
`Sua Tarefa:`
|
||||
Agora, estude a visualização que foi gerada no navegador e responda às seguintes perguntas:
|
||||
* Quais _características_ o conjunto de dados possui?
|
||||
* Quais _insights_ ou resultados a visualização fornece?
|
||||
* Quais são as _implicações_ desses insights para os objetivos de sustentabilidade do projeto?
|
||||
* Quais são as _limitações_ da visualização (ou seja, quais insights você não conseguiu obter)?
|
||||
* Se você pudesse acessar os dados brutos, quais _visualizações alternativas_ você criaria e por quê?
|
||||
|
||||
`Pontos Bônus:`
|
||||
Solicite uma conta - e faça login quando for aceito.
|
||||
* Use a opção _Launch Hub_ para abrir os dados brutos em um Notebook.
|
||||
* Explore os dados de forma interativa e implemente as visualizações alternativas que você pensou.
|
||||
* Agora analise suas visualizações personalizadas - você conseguiu obter os insights que faltaram anteriormente?
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa Melhorar
|
||||
--- | --- | --- |
|
||||
Todas as cinco perguntas principais foram respondidas. O aluno identificou claramente como as visualizações atuais e alternativas poderiam fornecer insights sobre os objetivos ou resultados de sustentabilidade. | O aluno respondeu pelo menos às 3 primeiras perguntas com grande detalhe, mostrando que teve experiência prática com o Explorer. | O aluno não respondeu a várias perguntas ou forneceu detalhes insuficientes - indicando que não houve uma tentativa significativa de realizar o projeto. |
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,16 @@
|
||||
# Ciência de Dados na Prática
|
||||
|
||||
Aplicações reais de ciência de dados em diferentes indústrias.
|
||||
|
||||
### Tópicos
|
||||
|
||||
1. [Ciência de Dados no Mundo Real](20-Real-World-Examples/README.md)
|
||||
|
||||
### Créditos
|
||||
|
||||
Escrito com ❤️ por [Nitya Narasimhan](https://twitter.com/nitya)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,366 @@
|
||||
# AGENTS.md
|
||||
|
||||
## Visão Geral do Projeto
|
||||
|
||||
Data Science for Beginners é um currículo abrangente de 10 semanas e 20 lições criado pelos Advocates de Nuvem da Microsoft Azure. O repositório é um recurso de aprendizado que ensina conceitos fundamentais de ciência de dados por meio de lições baseadas em projetos, incluindo notebooks Jupyter, quizzes interativos e tarefas práticas.
|
||||
|
||||
**Principais Tecnologias:**
|
||||
- **Jupyter Notebooks**: Meio principal de aprendizado usando Python 3
|
||||
- **Bibliotecas Python**: pandas, numpy, matplotlib para análise e visualização de dados
|
||||
- **Vue.js 2**: Aplicativo de quiz (pasta quiz-app)
|
||||
- **Docsify**: Gerador de site de documentação para acesso offline
|
||||
- **Node.js/npm**: Gerenciamento de pacotes para componentes JavaScript
|
||||
- **Markdown**: Todo o conteúdo das lições e documentação
|
||||
|
||||
**Arquitetura:**
|
||||
- Repositório educacional multilíngue com extensas traduções
|
||||
- Estruturado em módulos de lições (1-Introdução até 6-Ciência-de-Dados-na-Prática)
|
||||
- Cada lição inclui README, notebooks, tarefas e quizzes
|
||||
- Aplicativo de quiz Vue.js independente para avaliações pré/pós-lição
|
||||
- Suporte para GitHub Codespaces e contêineres de desenvolvimento do VS Code
|
||||
|
||||
## Comandos de Configuração
|
||||
|
||||
### Configuração do Repositório
|
||||
```bash
|
||||
# Clone the repository (if not already cloned)
|
||||
git clone https://github.com/microsoft/Data-Science-For-Beginners.git
|
||||
cd Data-Science-For-Beginners
|
||||
```
|
||||
|
||||
### Configuração do Ambiente Python
|
||||
```bash
|
||||
# Create a virtual environment (recommended)
|
||||
python -m venv venv
|
||||
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||
|
||||
# Install common data science libraries (no requirements.txt exists)
|
||||
pip install jupyter pandas numpy matplotlib seaborn scikit-learn
|
||||
```
|
||||
|
||||
### Configuração do Aplicativo de Quiz
|
||||
```bash
|
||||
# Navigate to quiz app
|
||||
cd quiz-app
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Start development server
|
||||
npm run serve
|
||||
|
||||
# Build for production
|
||||
npm run build
|
||||
|
||||
# Lint and fix files
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Servidor de Documentação Docsify
|
||||
```bash
|
||||
# Install Docsify globally
|
||||
npm install -g docsify-cli
|
||||
|
||||
# Serve documentation locally
|
||||
docsify serve
|
||||
|
||||
# Documentation will be available at localhost:3000
|
||||
```
|
||||
|
||||
### Configuração de Projetos de Visualização
|
||||
Para projetos de visualização como meaningful-visualizations (lição 13):
|
||||
```bash
|
||||
# Navigate to starter or solution folder
|
||||
cd 3-Data-Visualization/13-meaningful-visualizations/starter
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Start development server
|
||||
npm run serve
|
||||
|
||||
# Build for production
|
||||
npm run build
|
||||
|
||||
# Lint files
|
||||
npm run lint
|
||||
```
|
||||
|
||||
|
||||
## Fluxo de Trabalho de Desenvolvimento
|
||||
|
||||
### Trabalhando com Jupyter Notebooks
|
||||
1. Inicie o Jupyter na raiz do repositório: `jupyter notebook`
|
||||
2. Navegue até a pasta da lição desejada
|
||||
3. Abra os arquivos `.ipynb` para realizar os exercícios
|
||||
4. Os notebooks são autossuficientes, com explicações e células de código
|
||||
5. A maioria dos notebooks utiliza pandas, numpy e matplotlib - certifique-se de que estão instalados
|
||||
|
||||
### Estrutura das Lições
|
||||
Cada lição geralmente contém:
|
||||
- `README.md` - Conteúdo principal da lição com teoria e exemplos
|
||||
- `notebook.ipynb` - Exercícios práticos no Jupyter Notebook
|
||||
- `assignment.ipynb` ou `assignment.md` - Tarefas práticas
|
||||
- Pasta `solution/` - Notebooks e códigos de solução
|
||||
- Pasta `images/` - Materiais visuais de suporte
|
||||
|
||||
### Desenvolvimento do Aplicativo de Quiz
|
||||
- Aplicativo Vue.js 2 com recarregamento automático durante o desenvolvimento
|
||||
- Quizzes armazenados em `quiz-app/src/assets/translations/`
|
||||
- Cada idioma tem sua própria pasta de tradução (en, fr, es, etc.)
|
||||
- A numeração dos quizzes começa em 0 e vai até 39 (40 quizzes no total)
|
||||
|
||||
### Adicionando Traduções
|
||||
- Traduções vão na pasta `translations/` na raiz do repositório
|
||||
- Cada idioma tem a estrutura completa das lições espelhada do inglês
|
||||
- Tradução automatizada via GitHub Actions (co-op-translator.yml)
|
||||
|
||||
## Instruções de Teste
|
||||
|
||||
### Teste do Aplicativo de Quiz
|
||||
```bash
|
||||
cd quiz-app
|
||||
|
||||
# Run lint checks
|
||||
npm run lint
|
||||
|
||||
# Test build process
|
||||
npm run build
|
||||
|
||||
# Manual testing: Start dev server and verify quiz functionality
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Teste de Notebooks
|
||||
- Não existe um framework de teste automatizado para notebooks
|
||||
- Validação manual: Execute todas as células em sequência para garantir que não há erros
|
||||
- Verifique se os arquivos de dados estão acessíveis e os resultados são gerados corretamente
|
||||
- Certifique-se de que as visualizações são renderizadas corretamente
|
||||
|
||||
### Teste de Documentação
|
||||
```bash
|
||||
# Verify Docsify renders correctly
|
||||
docsify serve
|
||||
|
||||
# Check for broken links manually by navigating through content
|
||||
# Verify all lesson links work in the rendered documentation
|
||||
```
|
||||
|
||||
### Verificações de Qualidade de Código
|
||||
```bash
|
||||
# Vue.js projects (quiz-app and visualization projects)
|
||||
cd quiz-app # or visualization project folder
|
||||
npm run lint
|
||||
|
||||
# Python notebooks - manual verification recommended
|
||||
# Ensure imports work and cells execute without errors
|
||||
```
|
||||
|
||||
|
||||
## Diretrizes de Estilo de Código
|
||||
|
||||
### Python (Jupyter Notebooks)
|
||||
- Siga as diretrizes de estilo PEP 8 para código Python
|
||||
- Use nomes de variáveis claros que expliquem os dados sendo analisados
|
||||
- Inclua células markdown com explicações antes das células de código
|
||||
- Mantenha as células de código focadas em conceitos ou operações únicas
|
||||
- Use pandas para manipulação de dados, matplotlib para visualização
|
||||
- Padrão comum de importação:
|
||||
```python
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
```
|
||||
|
||||
|
||||
### JavaScript/Vue.js
|
||||
- Siga o guia de estilo e as melhores práticas do Vue.js 2
|
||||
- Configuração do ESLint em `quiz-app/package.json`
|
||||
- Use componentes Vue de arquivo único (.vue files)
|
||||
- Mantenha uma arquitetura baseada em componentes
|
||||
- Execute `npm run lint` antes de enviar alterações
|
||||
|
||||
### Documentação Markdown
|
||||
- Use uma hierarquia clara de cabeçalhos (# ## ### etc.)
|
||||
- Inclua blocos de código com especificadores de linguagem
|
||||
- Adicione texto alternativo para imagens
|
||||
- Link para lições e recursos relacionados
|
||||
- Mantenha os comprimentos das linhas razoáveis para facilitar a leitura
|
||||
|
||||
### Organização de Arquivos
|
||||
- Conteúdo das lições em pastas numeradas (01-defining-data-science, etc.)
|
||||
- Soluções em subpastas dedicadas `solution/`
|
||||
- Traduções espelham a estrutura em inglês na pasta `translations/`
|
||||
- Mantenha os arquivos de dados na pasta `data/` ou em pastas específicas de lições
|
||||
|
||||
## Construção e Implantação
|
||||
|
||||
### Implantação do Aplicativo de Quiz
|
||||
```bash
|
||||
cd quiz-app
|
||||
|
||||
# Build production version
|
||||
npm run build
|
||||
|
||||
# Output is in dist/ folder
|
||||
# Deploy dist/ folder to static hosting (Azure Static Web Apps, Netlify, etc.)
|
||||
```
|
||||
|
||||
### Implantação em Azure Static Web Apps
|
||||
O quiz-app pode ser implantado no Azure Static Web Apps:
|
||||
1. Crie um recurso Azure Static Web App
|
||||
2. Conecte ao repositório GitHub
|
||||
3. Configure as configurações de build:
|
||||
- Localização do aplicativo: `quiz-app`
|
||||
- Localização de saída: `dist`
|
||||
4. O workflow do GitHub Actions fará a implantação automática ao enviar alterações
|
||||
|
||||
### Site de Documentação
|
||||
```bash
|
||||
# Build PDF from Docsify (optional)
|
||||
npm run convert
|
||||
|
||||
# Docsify documentation is served directly from markdown files
|
||||
# No build step required for deployment
|
||||
# Deploy repository to static hosting with Docsify
|
||||
```
|
||||
|
||||
### GitHub Codespaces
|
||||
- O repositório inclui configuração de contêiner de desenvolvimento
|
||||
- Codespaces configura automaticamente o ambiente Python e Node.js
|
||||
- Abra o repositório no Codespace via interface do GitHub
|
||||
- Todas as dependências são instaladas automaticamente
|
||||
|
||||
## Diretrizes para Pull Requests
|
||||
|
||||
### Antes de Enviar
|
||||
```bash
|
||||
# For Vue.js changes in quiz-app
|
||||
cd quiz-app
|
||||
npm run lint
|
||||
npm run build
|
||||
|
||||
# Test changes locally
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Formato do Título do PR
|
||||
- Use títulos claros e descritivos
|
||||
- Formato: `[Componente] Breve descrição`
|
||||
- Exemplos:
|
||||
- `[Lição 7] Corrigir erro de importação no notebook Python`
|
||||
- `[Aplicativo de Quiz] Adicionar tradução em alemão`
|
||||
- `[Docs] Atualizar README com novos pré-requisitos`
|
||||
|
||||
### Verificações Necessárias
|
||||
- Certifique-se de que todo o código funciona sem erros
|
||||
- Verifique se os notebooks executam completamente
|
||||
- Confirme que os aplicativos Vue.js são construídos com sucesso
|
||||
- Verifique se os links da documentação funcionam
|
||||
- Teste o aplicativo de quiz se modificado
|
||||
- Confirme que as traduções mantêm uma estrutura consistente
|
||||
|
||||
### Diretrizes de Contribuição
|
||||
- Siga o estilo e os padrões de código existentes
|
||||
- Adicione comentários explicativos para lógica complexa
|
||||
- Atualize a documentação relevante
|
||||
- Teste alterações em diferentes módulos de lições, se aplicável
|
||||
- Revise o arquivo CONTRIBUTING.md
|
||||
|
||||
## Notas Adicionais
|
||||
|
||||
### Bibliotecas Comuns Utilizadas
|
||||
- **pandas**: Manipulação e análise de dados
|
||||
- **numpy**: Computação numérica
|
||||
- **matplotlib**: Visualização e plotagem de dados
|
||||
- **seaborn**: Visualização estatística de dados (algumas lições)
|
||||
- **scikit-learn**: Aprendizado de máquina (lições avançadas)
|
||||
|
||||
### Trabalhando com Arquivos de Dados
|
||||
- Arquivos de dados localizados na pasta `data/` ou em diretórios específicos de lições
|
||||
- A maioria dos notebooks espera arquivos de dados em caminhos relativos
|
||||
- Arquivos CSV são o formato de dados principal
|
||||
- Algumas lições utilizam JSON para exemplos de dados não relacionais
|
||||
|
||||
### Suporte Multilíngue
|
||||
- Mais de 40 traduções de idiomas via GitHub Actions automatizado
|
||||
- Workflow de tradução em `.github/workflows/co-op-translator.yml`
|
||||
- Traduções na pasta `translations/` com códigos de idioma
|
||||
- Traduções de quizzes em `quiz-app/src/assets/translations/`
|
||||
|
||||
### Opções de Ambiente de Desenvolvimento
|
||||
1. **Desenvolvimento Local**: Instale Python, Jupyter, Node.js localmente
|
||||
2. **GitHub Codespaces**: Ambiente de desenvolvimento instantâneo baseado em nuvem
|
||||
3. **Contêineres de Desenvolvimento do VS Code**: Desenvolvimento local baseado em contêiner
|
||||
4. **Binder**: Inicie notebooks na nuvem (se configurado)
|
||||
|
||||
### Diretrizes de Conteúdo das Lições
|
||||
- Cada lição é independente, mas constrói conceitos anteriores
|
||||
- Quizzes pré-lição testam conhecimento prévio
|
||||
- Quizzes pós-lição reforçam o aprendizado
|
||||
- Tarefas fornecem prática prática
|
||||
- Sketchnotes fornecem resumos visuais
|
||||
|
||||
### Solução de Problemas Comuns
|
||||
|
||||
**Problemas com Kernel do Jupyter:**
|
||||
```bash
|
||||
# Ensure correct kernel is installed
|
||||
python -m ipykernel install --user --name=datascience
|
||||
```
|
||||
|
||||
**Falhas na Instalação do npm:**
|
||||
```bash
|
||||
# Clear npm cache and retry
|
||||
npm cache clean --force
|
||||
rm -rf node_modules package-lock.json
|
||||
npm install
|
||||
```
|
||||
|
||||
**Erros de Importação em Notebooks:**
|
||||
- Verifique se todas as bibliotecas necessárias estão instaladas
|
||||
- Confira a compatibilidade da versão do Python (recomendado Python 3.7+)
|
||||
- Certifique-se de que o ambiente virtual está ativado
|
||||
|
||||
**Docsify Não Carregando:**
|
||||
- Verifique se você está servindo a partir da raiz do repositório
|
||||
- Confira se o arquivo `index.html` existe
|
||||
- Certifique-se de que há acesso adequado à rede (porta 3000)
|
||||
|
||||
### Considerações de Desempenho
|
||||
- Conjuntos de dados grandes podem levar tempo para carregar nos notebooks
|
||||
- A renderização de visualizações pode ser lenta para gráficos complexos
|
||||
- O servidor de desenvolvimento Vue.js permite recarregamento rápido para iteração rápida
|
||||
- Builds de produção são otimizados e minificados
|
||||
|
||||
### Notas de Segurança
|
||||
- Nenhum dado sensível ou credenciais deve ser enviado
|
||||
- Use variáveis de ambiente para quaisquer chaves de API em lições na nuvem
|
||||
- Lições relacionadas ao Azure podem exigir credenciais de conta Azure
|
||||
- Mantenha as dependências atualizadas para patches de segurança
|
||||
|
||||
## Contribuindo com Traduções
|
||||
- Traduções automatizadas gerenciadas via GitHub Actions
|
||||
- Correções manuais são bem-vindas para precisão das traduções
|
||||
- Siga a estrutura de pastas de tradução existente
|
||||
- Atualize os links dos quizzes para incluir o parâmetro de idioma: `?loc=fr`
|
||||
- Teste as lições traduzidas para garantir a renderização adequada
|
||||
|
||||
## Recursos Relacionados
|
||||
- Currículo principal: https://aka.ms/datascience-beginners
|
||||
- Microsoft Learn: https://docs.microsoft.com/learn/
|
||||
- Student Hub: https://docs.microsoft.com/learn/student-hub
|
||||
- Fórum de Discussão: https://github.com/microsoft/Data-Science-For-Beginners/discussions
|
||||
- Outros currículos da Microsoft: ML for Beginners, AI for Beginners, Web Dev for Beginners
|
||||
|
||||
## Manutenção do Projeto
|
||||
- Atualizações regulares para manter o conteúdo atual
|
||||
- Contribuições da comunidade são bem-vindas
|
||||
- Problemas rastreados no GitHub
|
||||
- PRs revisados pelos mantenedores do currículo
|
||||
- Revisões e atualizações de conteúdo mensais
|
||||
|
||||
---
|
||||
|
||||
**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 oficial. 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.
|
||||
@ -0,0 +1,14 @@
|
||||
# Código de Conduta de Código Aberto da Microsoft
|
||||
|
||||
Este projeto adotou o [Código de Conduta de Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/).
|
||||
|
||||
Recursos:
|
||||
|
||||
- [Código de Conduta de Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/)
|
||||
- [Perguntas Frequentes sobre o Código de Conduta](https://opensource.microsoft.com/codeofconduct/faq/)
|
||||
- Entre em contato com [opencode@microsoft.com](mailto:opencode@microsoft.com) para dúvidas ou preocupações
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,360 @@
|
||||
# Contribuindo para Ciência de Dados para Iniciantes
|
||||
|
||||
Obrigado pelo seu interesse em contribuir para o currículo de Ciência de Dados para Iniciantes! Agradecemos contribuições da comunidade.
|
||||
|
||||
## Índice
|
||||
|
||||
- [Código de Conduta](../..)
|
||||
- [Como Posso Contribuir?](../..)
|
||||
- [Primeiros Passos](../..)
|
||||
- [Diretrizes de Contribuição](../..)
|
||||
- [Processo de Pull Request](../..)
|
||||
- [Diretrizes de Estilo](../..)
|
||||
- [Acordo de Licença de Contribuidor](../..)
|
||||
|
||||
## Código de Conduta
|
||||
|
||||
Este projeto adotou o [Código de Conduta de Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/).
|
||||
Para mais informações, veja as [Perguntas Frequentes sobre o Código de Conduta](https://opensource.microsoft.com/codeofconduct/faq/)
|
||||
ou entre em contato pelo e-mail [opencode@microsoft.com](mailto:opencode@microsoft.com) para quaisquer dúvidas ou comentários adicionais.
|
||||
|
||||
## Como Posso Contribuir?
|
||||
|
||||
### Relatar Bugs
|
||||
|
||||
Antes de criar relatórios de bugs, verifique os problemas existentes para evitar duplicatas. Ao criar um relatório de bug, inclua o máximo de detalhes possível:
|
||||
|
||||
- **Use um título claro e descritivo**
|
||||
- **Descreva os passos exatos para reproduzir o problema**
|
||||
- **Forneça exemplos específicos** (trechos de código, capturas de tela)
|
||||
- **Descreva o comportamento observado e o esperado**
|
||||
- **Inclua detalhes do seu ambiente** (SO, versão do Python, navegador)
|
||||
|
||||
### Sugerir Melhorias
|
||||
|
||||
Sugestões de melhorias são bem-vindas! Ao sugerir melhorias:
|
||||
|
||||
- **Use um título claro e descritivo**
|
||||
- **Forneça uma descrição detalhada da melhoria sugerida**
|
||||
- **Explique por que essa melhoria seria útil**
|
||||
- **Liste quaisquer recursos semelhantes em outros projetos, se aplicável**
|
||||
|
||||
### Contribuir para a Documentação
|
||||
|
||||
Melhorias na documentação são sempre apreciadas:
|
||||
|
||||
- **Corrigir erros de digitação e gramática**
|
||||
- **Melhorar a clareza das explicações**
|
||||
- **Adicionar documentação ausente**
|
||||
- **Atualizar informações desatualizadas**
|
||||
- **Adicionar exemplos ou casos de uso**
|
||||
|
||||
### Contribuir com Código
|
||||
|
||||
Aceitamos contribuições de código, incluindo:
|
||||
|
||||
- **Novas lições ou exercícios**
|
||||
- **Correções de bugs**
|
||||
- **Melhorias em notebooks existentes**
|
||||
- **Novos conjuntos de dados ou exemplos**
|
||||
- **Aprimoramentos no aplicativo de quiz**
|
||||
|
||||
## Primeiros Passos
|
||||
|
||||
### Pré-requisitos
|
||||
|
||||
Antes de contribuir, certifique-se de ter:
|
||||
|
||||
1. Uma conta no GitHub
|
||||
2. Git instalado no seu sistema
|
||||
3. Python 3.7+ e Jupyter instalados
|
||||
4. Node.js e npm (para contribuições no aplicativo de quiz)
|
||||
5. Familiaridade com a estrutura do currículo
|
||||
|
||||
Veja [INSTALLATION.md](INSTALLATION.md) para instruções detalhadas de configuração.
|
||||
|
||||
### Fork e Clone
|
||||
|
||||
1. **Faça um fork do repositório** no GitHub
|
||||
2. **Clone seu fork** localmente:
|
||||
```bash
|
||||
git clone https://github.com/YOUR-USERNAME/Data-Science-For-Beginners.git
|
||||
cd Data-Science-For-Beginners
|
||||
```
|
||||
|
||||
3. **Adicione o remoto upstream**:
|
||||
```bash
|
||||
git remote add upstream https://github.com/microsoft/Data-Science-For-Beginners.git
|
||||
```
|
||||
|
||||
|
||||
### Criar um Branch
|
||||
|
||||
Crie um novo branch para seu trabalho:
|
||||
|
||||
```bash
|
||||
git checkout -b feature/your-feature-name
|
||||
# or
|
||||
git checkout -b fix/your-bug-fix
|
||||
```
|
||||
|
||||
Convenções de nomenclatura de branch:
|
||||
- `feature/` - Novos recursos ou lições
|
||||
- `fix/` - Correções de bugs
|
||||
- `docs/` - Alterações na documentação
|
||||
- `refactor/` - Refatoração de código
|
||||
|
||||
## Diretrizes de Contribuição
|
||||
|
||||
### Para Conteúdo de Lições
|
||||
|
||||
Ao contribuir com lições ou modificar as existentes:
|
||||
|
||||
1. **Siga a estrutura existente**:
|
||||
- README.md com o conteúdo da lição
|
||||
- Notebook Jupyter com exercícios
|
||||
- Tarefa (se aplicável)
|
||||
- Link para quizzes pré e pós-lição
|
||||
|
||||
2. **Inclua os seguintes elementos**:
|
||||
- Objetivos de aprendizado claros
|
||||
- Explicações passo a passo
|
||||
- Exemplos de código com comentários
|
||||
- Exercícios para prática
|
||||
- Links para recursos adicionais
|
||||
|
||||
3. **Garanta acessibilidade**:
|
||||
- Use linguagem clara e simples
|
||||
- Forneça texto alternativo para imagens
|
||||
- Inclua comentários no código
|
||||
- Considere diferentes estilos de aprendizado
|
||||
|
||||
### Para Notebooks Jupyter
|
||||
|
||||
1. **Limpe todas as saídas** antes de fazer o commit:
|
||||
```bash
|
||||
jupyter nbconvert --clear-output --inplace notebook.ipynb
|
||||
```
|
||||
|
||||
2. **Inclua células de markdown** com explicações
|
||||
|
||||
3. **Use formatação consistente**:
|
||||
```python
|
||||
# Import libraries at the top
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
# Use meaningful variable names
|
||||
# Add comments for complex operations
|
||||
# Follow PEP 8 style guidelines
|
||||
```
|
||||
|
||||
4. **Teste completamente seu notebook** antes de enviar
|
||||
|
||||
### Para Código Python
|
||||
|
||||
Siga as diretrizes de estilo [PEP 8](https://www.python.org/dev/peps/pep-0008/):
|
||||
```python
|
||||
# Good practices
|
||||
import pandas as pd
|
||||
|
||||
def calculate_mean(data):
|
||||
"""Calculate the mean of a dataset.
|
||||
|
||||
Args:
|
||||
data (list): List of numerical values
|
||||
|
||||
Returns:
|
||||
float: Mean of the dataset
|
||||
"""
|
||||
return sum(data) / len(data)
|
||||
```
|
||||
|
||||
|
||||
### Para Contribuições no Aplicativo de Quiz
|
||||
|
||||
Ao modificar o aplicativo de quiz:
|
||||
|
||||
1. **Teste localmente**:
|
||||
```bash
|
||||
cd quiz-app
|
||||
npm install
|
||||
npm run serve
|
||||
```
|
||||
|
||||
2. **Execute o linter**:
|
||||
```bash
|
||||
npm run lint
|
||||
```
|
||||
|
||||
3. **Construa com sucesso**:
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
4. **Siga o guia de estilo do Vue.js** e os padrões existentes
|
||||
|
||||
### Para Traduções
|
||||
|
||||
Ao adicionar ou atualizar traduções:
|
||||
|
||||
1. Siga a estrutura na pasta `translations/`
|
||||
2. Use o código do idioma como nome da pasta (ex.: `pt` para Português)
|
||||
3. Mantenha a mesma estrutura de arquivos da versão em inglês
|
||||
4. Atualize os links dos quizzes para incluir o parâmetro de idioma: `?loc=pt`
|
||||
5. Teste todos os links e a formatação
|
||||
|
||||
## Processo de Pull Request
|
||||
|
||||
### Antes de Enviar
|
||||
|
||||
1. **Atualize seu branch** com as alterações mais recentes:
|
||||
```bash
|
||||
git fetch upstream
|
||||
git rebase upstream/main
|
||||
```
|
||||
|
||||
2. **Teste suas alterações**:
|
||||
- Execute todos os notebooks modificados
|
||||
- Teste o aplicativo de quiz, se modificado
|
||||
- Verifique se todos os links funcionam
|
||||
- Confira erros de ortografia e gramática
|
||||
|
||||
3. **Faça commit das suas alterações**:
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "Brief description of changes"
|
||||
```
|
||||
|
||||
Escreva mensagens de commit claras:
|
||||
- Use tempo presente ("Adiciona recurso" em vez de "Adicionou recurso")
|
||||
- Use modo imperativo ("Mover cursor para..." em vez de "Move cursor para...")
|
||||
- Limite a primeira linha a 72 caracteres
|
||||
- Referencie problemas e pull requests quando relevante
|
||||
|
||||
4. **Envie para seu fork**:
|
||||
```bash
|
||||
git push origin feature/your-feature-name
|
||||
```
|
||||
|
||||
|
||||
### Criando o Pull Request
|
||||
|
||||
1. Acesse o [repositório](https://github.com/microsoft/Data-Science-For-Beginners)
|
||||
2. Clique em "Pull requests" → "New pull request"
|
||||
3. Clique em "compare across forks"
|
||||
4. Selecione seu fork e branch
|
||||
5. Clique em "Create pull request"
|
||||
|
||||
### Formato do Título do PR
|
||||
|
||||
Use títulos claros e descritivos seguindo este formato:
|
||||
```
|
||||
[Component] Brief description
|
||||
```
|
||||
|
||||
Exemplos:
|
||||
- `[Lesson 7] Corrigir erro de importação no notebook Python`
|
||||
- `[Quiz App] Adicionar tradução para alemão`
|
||||
- `[Docs] Atualizar README com novos pré-requisitos`
|
||||
- `[Fix] Corrigir caminho de dados na lição de visualização`
|
||||
|
||||
### Descrição do PR
|
||||
|
||||
Inclua na descrição do seu PR:
|
||||
|
||||
- **O que**: Quais alterações você fez?
|
||||
- **Por que**: Por que essas alterações são necessárias?
|
||||
- **Como**: Como você implementou as alterações?
|
||||
- **Testes**: Como você testou as alterações?
|
||||
- **Capturas de tela**: Inclua capturas de tela para alterações visuais
|
||||
- **Problemas relacionados**: Link para problemas relacionados (ex.: "Fixes #123")
|
||||
|
||||
### Processo de Revisão
|
||||
|
||||
1. **Verificações automáticas** serão executadas no seu PR
|
||||
2. **Os mantenedores revisarão** sua contribuição
|
||||
3. **Aborde o feedback** fazendo commits adicionais
|
||||
4. Uma vez aprovado, um **mantenedor fará o merge** do seu PR
|
||||
|
||||
### Após o Merge do Seu PR
|
||||
|
||||
1. Exclua seu branch:
|
||||
```bash
|
||||
git branch -d feature/your-feature-name
|
||||
git push origin --delete feature/your-feature-name
|
||||
```
|
||||
|
||||
2. Atualize seu fork:
|
||||
```bash
|
||||
git checkout main
|
||||
git pull upstream main
|
||||
git push origin main
|
||||
```
|
||||
|
||||
|
||||
## Diretrizes de Estilo
|
||||
|
||||
### Markdown
|
||||
|
||||
- Use níveis de cabeçalho consistentes
|
||||
- Inclua linhas em branco entre seções
|
||||
- Use blocos de código com especificadores de linguagem:
|
||||
````markdown
|
||||
```python
|
||||
import pandas as pd
|
||||
```
|
||||
````
|
||||
|
||||
- Adicione texto alternativo às imagens: ``
|
||||
- Mantenha os comprimentos das linhas razoáveis (cerca de 80-100 caracteres)
|
||||
|
||||
### Python
|
||||
|
||||
- Siga o guia de estilo PEP 8
|
||||
- Use nomes de variáveis significativos
|
||||
- Adicione docstrings às funções
|
||||
- Inclua dicas de tipo quando apropriado:
|
||||
```python
|
||||
def process_data(df: pd.DataFrame) -> pd.DataFrame:
|
||||
"""Process the input dataframe."""
|
||||
return df
|
||||
```
|
||||
|
||||
|
||||
### JavaScript/Vue.js
|
||||
|
||||
- Siga o guia de estilo do Vue.js 2
|
||||
- Use a configuração do ESLint fornecida
|
||||
- Escreva componentes modulares e reutilizáveis
|
||||
- Adicione comentários para lógica complexa
|
||||
|
||||
### Organização de Arquivos
|
||||
|
||||
- Mantenha arquivos relacionados juntos
|
||||
- Use nomes de arquivos descritivos
|
||||
- Siga a estrutura de diretórios existente
|
||||
- Não faça commit de arquivos desnecessários (.DS_Store, .pyc, node_modules, etc.)
|
||||
|
||||
## Acordo de Licença de Contribuidor
|
||||
|
||||
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um Acordo de Licença de Contribuidor (CLA), declarando que você tem o direito de, e realmente concede a nós os direitos de usar sua contribuição. Para detalhes, visite
|
||||
https://cla.microsoft.com.
|
||||
|
||||
Quando você enviar um pull request, um CLA-bot determinará automaticamente se você precisa fornecer um CLA e decorará o PR adequadamente (ex.: etiqueta, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
|
||||
|
||||
## Dúvidas?
|
||||
|
||||
- Confira nosso [Canal Discord #data-science-for-beginners](https://aka.ms/ds4beginners/discord)
|
||||
- Junte-se à nossa [comunidade no Discord](https://aka.ms/ds4beginners/discord)
|
||||
- Revise os [problemas existentes](https://github.com/microsoft/Data-Science-For-Beginners/issues) e [pull requests](https://github.com/microsoft/Data-Science-For-Beginners/pulls)
|
||||
|
||||
## Obrigado!
|
||||
|
||||
Suas contribuições tornam este currículo melhor para todos. Obrigado por dedicar seu tempo para contribuir!
|
||||
|
||||
---
|
||||
|
||||
**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 oficial. 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.
|
||||
@ -0,0 +1,252 @@
|
||||
# Guia de Instalação
|
||||
|
||||
Este guia ajudará você a configurar seu ambiente para trabalhar com o currículo de Ciência de Dados para Iniciantes.
|
||||
|
||||
## Índice
|
||||
|
||||
- [Pré-requisitos](../..)
|
||||
- [Opções de Início Rápido](../..)
|
||||
- [Instalação Local](../..)
|
||||
- [Verificar sua Instalação](../..)
|
||||
|
||||
## Pré-requisitos
|
||||
|
||||
Antes de começar, você deve ter:
|
||||
|
||||
- Familiaridade básica com linha de comando/terminal
|
||||
- Uma conta no GitHub (gratuita)
|
||||
- Conexão estável com a internet para a configuração inicial
|
||||
|
||||
## Opções de Início Rápido
|
||||
|
||||
### Opção 1: GitHub Codespaces (Recomendado para Iniciantes)
|
||||
|
||||
A maneira mais fácil de começar é com o GitHub Codespaces, que fornece um ambiente de desenvolvimento completo no seu navegador.
|
||||
|
||||
1. Acesse o [repositório](https://github.com/microsoft/Data-Science-For-Beginners)
|
||||
2. Clique no menu suspenso **Code**
|
||||
3. Selecione a aba **Codespaces**
|
||||
4. Clique em **Create codespace on main**
|
||||
5. Aguarde a inicialização do ambiente (2-3 minutos)
|
||||
|
||||
Seu ambiente agora está pronto com todas as dependências pré-instaladas!
|
||||
|
||||
### Opção 2: Desenvolvimento Local
|
||||
|
||||
Para trabalhar no seu próprio computador, siga as instruções detalhadas abaixo.
|
||||
|
||||
## Instalação Local
|
||||
|
||||
### Passo 1: Instalar Git
|
||||
|
||||
O Git é necessário para clonar o repositório e rastrear suas alterações.
|
||||
|
||||
**Windows:**
|
||||
- Baixe em [git-scm.com](https://git-scm.com/download/win)
|
||||
- Execute o instalador com as configurações padrão
|
||||
|
||||
**macOS:**
|
||||
- Instale via Homebrew: `brew install git`
|
||||
- Ou baixe em [git-scm.com](https://git-scm.com/download/mac)
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
# Debian/Ubuntu
|
||||
sudo apt-get update
|
||||
sudo apt-get install git
|
||||
|
||||
# Fedora
|
||||
sudo dnf install git
|
||||
|
||||
# Arch
|
||||
sudo pacman -S git
|
||||
```
|
||||
|
||||
### Passo 2: Clonar o Repositório
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone https://github.com/microsoft/Data-Science-For-Beginners.git
|
||||
|
||||
# Navigate to the directory
|
||||
cd Data-Science-For-Beginners
|
||||
```
|
||||
|
||||
### Passo 3: Instalar Python e Jupyter
|
||||
|
||||
Python 3.7 ou superior é necessário para as lições de ciência de dados.
|
||||
|
||||
**Windows:**
|
||||
1. Baixe o Python em [python.org](https://www.python.org/downloads/)
|
||||
2. Durante a instalação, marque "Add Python to PATH"
|
||||
3. Verifique a instalação:
|
||||
```bash
|
||||
python --version
|
||||
```
|
||||
|
||||
**macOS:**
|
||||
```bash
|
||||
# Using Homebrew
|
||||
brew install python3
|
||||
|
||||
# Verify installation
|
||||
python3 --version
|
||||
```
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
# Most Linux distributions come with Python pre-installed
|
||||
python3 --version
|
||||
|
||||
# If not installed:
|
||||
# Debian/Ubuntu
|
||||
sudo apt-get install python3 python3-pip
|
||||
|
||||
# Fedora
|
||||
sudo dnf install python3 python3-pip
|
||||
```
|
||||
|
||||
### Passo 4: Configurar o Ambiente Python
|
||||
|
||||
Recomenda-se usar um ambiente virtual para manter as dependências isoladas.
|
||||
|
||||
```bash
|
||||
# Create a virtual environment
|
||||
python -m venv venv
|
||||
|
||||
# Activate the virtual environment
|
||||
# On Windows:
|
||||
venv\Scripts\activate
|
||||
|
||||
# On macOS/Linux:
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
### Passo 5: Instalar Pacotes Python
|
||||
|
||||
Instale as bibliotecas necessárias para ciência de dados:
|
||||
|
||||
```bash
|
||||
pip install jupyter pandas numpy matplotlib seaborn scikit-learn
|
||||
```
|
||||
|
||||
### Passo 6: Instalar Node.js e npm (Para o Aplicativo de Quiz)
|
||||
|
||||
O aplicativo de quiz requer Node.js e npm.
|
||||
|
||||
**Windows/macOS:**
|
||||
- Baixe em [nodejs.org](https://nodejs.org/) (versão LTS recomendada)
|
||||
- Execute o instalador
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
# Debian/Ubuntu
|
||||
# WARNING: Piping scripts from the internet directly into bash can be a security risk.
|
||||
# It is recommended to review the script before running it:
|
||||
# curl -fsSL https://deb.nodesource.com/setup_lts.x -o setup_lts.x
|
||||
# less setup_lts.x
|
||||
# Then run:
|
||||
# sudo -E bash setup_lts.x
|
||||
#
|
||||
# Alternatively, you can use the one-liner below at your own risk:
|
||||
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
|
||||
sudo apt-get install -y nodejs
|
||||
|
||||
# Fedora
|
||||
sudo dnf install nodejs
|
||||
|
||||
# Verify installation
|
||||
node --version
|
||||
npm --version
|
||||
```
|
||||
|
||||
### Passo 7: Instalar Dependências do Aplicativo de Quiz
|
||||
|
||||
```bash
|
||||
# Navigate to quiz app directory
|
||||
cd quiz-app
|
||||
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Return to root directory
|
||||
cd ..
|
||||
```
|
||||
|
||||
### Passo 8: Instalar Docsify (Opcional)
|
||||
|
||||
Para acesso offline à documentação:
|
||||
|
||||
```bash
|
||||
npm install -g docsify-cli
|
||||
```
|
||||
|
||||
## Verificar sua Instalação
|
||||
|
||||
### Testar Python e Jupyter
|
||||
|
||||
```bash
|
||||
# Activate your virtual environment if not already activated
|
||||
# On Windows:
|
||||
venv\Scripts\activate
|
||||
# On macOS/Linux:
|
||||
source venv/bin/activate
|
||||
|
||||
# Start Jupyter Notebook
|
||||
jupyter notebook
|
||||
```
|
||||
|
||||
Seu navegador deve abrir com a interface do Jupyter. Agora você pode navegar até o arquivo `.ipynb` de qualquer lição.
|
||||
|
||||
### Testar o Aplicativo de Quiz
|
||||
|
||||
```bash
|
||||
# Navigate to quiz app
|
||||
cd quiz-app
|
||||
|
||||
# Start development server
|
||||
npm run serve
|
||||
```
|
||||
|
||||
O aplicativo de quiz deve estar disponível em `http://localhost:8080` (ou outra porta, se 8080 estiver ocupada).
|
||||
|
||||
### Testar o Servidor de Documentação
|
||||
|
||||
```bash
|
||||
# From the root directory of the repository
|
||||
docsify serve
|
||||
```
|
||||
|
||||
A documentação deve estar disponível em `http://localhost:3000`.
|
||||
|
||||
## Usando Contêineres Dev do VS Code
|
||||
|
||||
Se você tiver o Docker instalado, pode usar os Contêineres Dev do VS Code:
|
||||
|
||||
1. Instale o [Docker Desktop](https://www.docker.com/products/docker-desktop)
|
||||
2. Instale o [Visual Studio Code](https://code.visualstudio.com/)
|
||||
3. Instale a extensão [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
|
||||
4. Abra o repositório no VS Code
|
||||
5. Pressione `F1` e selecione "Remote-Containers: Reopen in Container"
|
||||
6. Aguarde a construção do contêiner (somente na primeira vez)
|
||||
|
||||
## Próximos Passos
|
||||
|
||||
- Explore o [README.md](README.md) para uma visão geral do currículo
|
||||
- Leia o [USAGE.md](USAGE.md) para fluxos de trabalho e exemplos comuns
|
||||
- Consulte o [TROUBLESHOOTING.md](TROUBLESHOOTING.md) se encontrar problemas
|
||||
- Revise o [CONTRIBUTING.md](CONTRIBUTING.md) se quiser contribuir
|
||||
|
||||
## Obtendo Ajuda
|
||||
|
||||
Se você encontrar problemas:
|
||||
|
||||
1. Consulte o guia [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
|
||||
2. Pesquise problemas existentes no [GitHub Issues](https://github.com/microsoft/Data-Science-For-Beginners/issues)
|
||||
3. Junte-se à nossa [comunidade no Discord](https://aka.ms/ds4beginners/discord)
|
||||
4. Crie um novo problema com informações detalhadas sobre seu problema
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,253 @@
|
||||
# Ciência de Dados para Iniciantes - Um Currículo
|
||||
|
||||
[](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=344191198)
|
||||
|
||||
[](https://github.com/microsoft/Data-Science-For-Beginners/blob/master/LICENSE)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/graphs/contributors/)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/issues/)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/pulls/)
|
||||
[](http://makeapullrequest.com)
|
||||
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/watchers/)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/network/)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/stargazers/)
|
||||
|
||||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
[](https://aka.ms/foundry/forum)
|
||||
|
||||
Os Azure Cloud Advocates da Microsoft têm o prazer de oferecer um currículo de 10 semanas, com 20 aulas, inteiramente sobre Ciência de Dados. Cada aula inclui questionários antes e depois da aula, instruções escritas para completar a aula, uma solução e uma tarefa. Nossa pedagogia baseada em projetos permite que você aprenda enquanto constrói, uma forma comprovada para novas habilidades "ficarem".
|
||||
|
||||
**Agradecimentos especiais aos nossos autores:** [Jasmine Greenaway](https://www.twitter.com/paladique), [Dmitry Soshnikov](http://soshnikov.com), [Nitya Narasimhan](https://twitter.com/nitya), [Jalen McGee](https://twitter.com/JalenMcG), [Jen Looper](https://twitter.com/jenlooper), [Maud Levy](https://twitter.com/maudstweets), [Tiffany Souterre](https://twitter.com/TiffanySouterre), [Christopher Harrison](https://www.twitter.com/geektrainer).
|
||||
|
||||
**🙏 Agradecimentos especiais 🙏 aos nossos autores, revisores e colaboradores de conteúdo do [Microsoft Student Ambassador](https://studentambassadors.microsoft.com/),** notavelmente Aaryan Arora, [Aditya Garg](https://github.com/AdityaGarg00), [Alondra Sanchez](https://www.linkedin.com/in/alondra-sanchez-molina/), [Ankita Singh](https://www.linkedin.com/in/ankitasingh007), [Anupam Mishra](https://www.linkedin.com/in/anupam--mishra/), [Arpita Das](https://www.linkedin.com/in/arpitadas01/), ChhailBihari Dubey, [Dibri Nsofor](https://www.linkedin.com/in/dibrinsofor), [Dishita Bhasin](https://www.linkedin.com/in/dishita-bhasin-7065281bb), [Majd Safi](https://www.linkedin.com/in/majd-s/), [Max Blum](https://www.linkedin.com/in/max-blum-6036a1186/), [Miguel Correa](https://www.linkedin.com/in/miguelmque/), [Mohamma Iftekher (Iftu) Ebne Jalal](https://twitter.com/iftu119), [Nawrin Tabassum](https://www.linkedin.com/in/nawrin-tabassum), [Raymond Wangsa Putra](https://www.linkedin.com/in/raymond-wp/), [Rohit Yadav](https://www.linkedin.com/in/rty2423), Samridhi Sharma, [Sanya Sinha](https://www.linkedin.com/mwlite/in/sanya-sinha-13aab1200),
|
||||
[Sheena Narula](https://www.linkedin.com/in/sheena-narua-n/), [Tauqeer Ahmad](https://www.linkedin.com/in/tauqeerahmad5201/), Yogendrasingh Pawar , [Vidushi Gupta](https://www.linkedin.com/in/vidushi-gupta07/), [Jasleen Sondhi](https://www.linkedin.com/in/jasleen-sondhi/)
|
||||
|
||||
||
|
||||
|:---:|
|
||||
| Ciência de Dados para Iniciantes - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
### 🌐 Suporte Multilíngue
|
||||
|
||||
#### Suportado via GitHub Action (Automatizado e Sempre Atualizado)
|
||||
|
||||
<!-- CO-OP TRANSLATOR LANGUAGES TABLE START -->
|
||||
[Árabe](../ar/README.md) | [Bengali](../bn/README.md) | [Búlgaro](../bg/README.md) | [Birmanês (Myanmar)](../my/README.md) | [Chinês (Simplificado)](../zh-CN/README.md) | [Chinês (Tradicional, Hong Kong)](../zh-HK/README.md) | [Chinês (Tradicional, Macau)](../zh-MO/README.md) | [Chinês (Tradicional, Taiwan)](../zh-TW/README.md) | [Croata](../hr/README.md) | [Tcheco](../cs/README.md) | [Dinamarquês](../da/README.md) | [Holandês](../nl/README.md) | [Estoniano](../et/README.md) | [Finlandês](../fi/README.md) | [Francês](../fr/README.md) | [Alemão](../de/README.md) | [Grego](../el/README.md) | [Hebraico](../he/README.md) | [Hindi](../hi/README.md) | [Húngaro](../hu/README.md) | [Indonésio](../id/README.md) | [Italiano](../it/README.md) | [Japonês](../ja/README.md) | [Kannada](../kn/README.md) | [Coreano](../ko/README.md) | [Lituano](../lt/README.md) | [Malaio](../ms/README.md) | [Malaiala](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Pidgin Nigeriano](../pcm/README.md) | [Norueguês](../no/README.md) | [Persa (Farsi)](../fa/README.md) | [Polonês](../pl/README.md) | [Português (Brasil)](./README.md) | [Português (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romeno](../ro/README.md) | [Russo](../ru/README.md) | [Sérvio (Cirílico)](../sr/README.md) | [Eslovaco](../sk/README.md) | [Esloveno](../sl/README.md) | [Espanhol](../es/README.md) | [Suaíli](../sw/README.md) | [Sueco](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tâmil](../ta/README.md) | [Telugu](../te/README.md) | [Tailandês](../th/README.md) | [Turco](../tr/README.md) | [Ucraniano](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamita](../vi/README.md)
|
||||
|
||||
> **Prefere Clonar Localmente?**
|
||||
|
||||
> Este repositório inclui mais de 50 traduções de idiomas, o que aumenta significativamente o tamanho do download. Para clonar sem traduções, use checkout esparso:
|
||||
> ```bash
|
||||
> git clone --filter=blob:none --sparse https://github.com/microsoft/Data-Science-For-Beginners.git
|
||||
> cd Data-Science-For-Beginners
|
||||
> git sparse-checkout set --no-cone '/*' '!translations' '!translated_images'
|
||||
> ```
|
||||
> Isso fornece tudo o que você precisa para concluir o curso com um download muito mais rápido.
|
||||
<!-- CO-OP TRANSLATOR LANGUAGES TABLE END -->
|
||||
|
||||
**Se desejar suportar idiomas adicionais, as línguas suportadas estão listadas [aqui](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)**
|
||||
|
||||
#### Junte-se à Nossa Comunidade
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
Estamos com uma série no Discord de aprender com IA, saiba mais e junte-se a nós em [Learn with AI Series](https://aka.ms/learnwithai/discord) de 18 a 30 de setembro de 2025. Você receberá dicas e truques de como usar o GitHub Copilot para Ciência de Dados.
|
||||
|
||||

|
||||
|
||||
# Você é um estudante?
|
||||
|
||||
Comece com os seguintes recursos:
|
||||
|
||||
- [Página do Hub do Estudante](https://docs.microsoft.com/en-gb/learn/student-hub?WT.mc_id=academic-77958-bethanycheum) Nesta página, você encontrará recursos para iniciantes, pacotes estudantis e até maneiras de conseguir um voucher de certificação gratuito. Esta é uma página que você vai querer adicionar aos favoritos e verificar de vez em quando, pois trocamos o conteúdo pelo menos mensalmente.
|
||||
- [Microsoft Learn Student Ambassadors](https://studentambassadors.microsoft.com?WT.mc_id=academic-77958-bethanycheum) Junte-se a uma comunidade global de embaixadores estudantis, essa pode ser sua porta de entrada para a Microsoft.
|
||||
|
||||
# Começando
|
||||
|
||||
## 📚 Documentação
|
||||
|
||||
- **[Guia de Instalação](INSTALLATION.md)** - Instruções passo a passo para iniciantes
|
||||
- **[Guia de Uso](USAGE.md)** - Exemplos e fluxos de trabalho comuns
|
||||
- **[Solução de Problemas](TROUBLESHOOTING.md)** - Soluções para problemas comuns
|
||||
- **[Guia de Contribuição](CONTRIBUTING.md)** - Como contribuir para este projeto
|
||||
- **[Para Professores](for-teachers.md)** - Orientações de ensino e recursos para salas de aula
|
||||
|
||||
## 👨🎓 Para Estudantes
|
||||
> **Iniciantes completos**: Novo em ciência de dados? Comece com nossos [exemplos amigáveis para iniciantes](examples/README.md)! Estes exemplos simples e bem comentados ajudarão você a entender o básico antes de mergulhar no currículo completo.
|
||||
> **[Estudantes](https://aka.ms/student-page)**: para usar esse currículo por conta própria, faça um fork de todo o repositório e complete os exercícios sozinho, começando com um questionário antes da aula. Depois, leia a aula e complete o restante das atividades. Tente criar os projetos compreendendo as lições em vez de copiar o código da solução; no entanto, esse código está disponível nas pastas /solutions em cada aula orientada a projetos. Outra ideia seria formar um grupo de estudos com amigos e passar pelo conteúdo juntos. Para estudo adicional, recomendamos o [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-77958-bethanycheum).
|
||||
|
||||
**Início rápido:**
|
||||
1. Verifique o [Guia de Instalação](INSTALLATION.md) para configurar seu ambiente
|
||||
2. Revise o [Guia de Uso](USAGE.md) para aprender como trabalhar com o currículo
|
||||
3. Comece pela Aula 1 e siga sequencialmente
|
||||
4. Junte-se à nossa [comunidade no Discord](https://aka.ms/ds4beginners/discord) para suporte
|
||||
|
||||
## 👩🏫 Para Professores
|
||||
|
||||
> **Professores**: incluímos [algumas sugestões](for-teachers.md) sobre como usar este currículo. Adoraríamos seu feedback [em nosso fórum de discussão](https://github.com/microsoft/Data-Science-For-Beginners/discussions)!
|
||||
## Conheça a Equipe
|
||||
|
||||
[](https://youtu.be/8mzavjQSMM4 "Vídeo promocional")
|
||||
|
||||
**Gif por** [Mohit Jaisal](https://www.linkedin.com/in/mohitjaisal)
|
||||
|
||||
> 🎥 Clique na imagem acima para um vídeo sobre o projeto e as pessoas que o criaram!
|
||||
|
||||
## Pedagogia
|
||||
|
||||
Escolhemos dois princípios pedagógicos ao construir este currículo: garantir que seja baseado em projetos e que inclua quizzes frequentes. Ao final desta série, os alunos terão aprendido princípios básicos de ciência de dados, incluindo conceitos éticos, preparação de dados, diferentes formas de trabalhar com dados, visualização de dados, análise de dados, casos de uso reais de ciência de dados e mais.
|
||||
|
||||
Além disso, um quiz de baixo risco antes da aula define a intenção do aluno em aprender um tópico, enquanto um segundo quiz após a aula garante uma maior retenção. Este currículo foi projetado para ser flexível e divertido e pode ser feito integralmente ou em partes. Os projetos começam pequenos e se tornam progressivamente mais complexos ao final do ciclo de 10 semanas.
|
||||
|
||||
> Encontre nosso [Código de Conduta](CODE_OF_CONDUCT.md), [Contribuição](CONTRIBUTING.md), diretrizes de [Tradução](TRANSLATIONS.md). Agradecemos seu feedback construtivo!
|
||||
|
||||
## Cada lição inclui:
|
||||
|
||||
- Esboço opcional (sketchnote)
|
||||
- Vídeo suplementar opcional
|
||||
- Quiz de aquecimento pré-aula
|
||||
- Lição escrita
|
||||
- Para lições baseadas em projetos, guias passo a passo sobre como construir o projeto
|
||||
- Verificações de conhecimento
|
||||
- Um desafio
|
||||
- Leitura suplementar
|
||||
- Tarefa
|
||||
- [Quiz pós-aula](https://ff-quizzes.netlify.app/en/)
|
||||
|
||||
> **Uma nota sobre os quizzes**: Todos os quizzes estão contidos na pasta Quiz-App, totalizando 40 quizzes de três perguntas cada. Eles estão vinculados dentro das lições, mas o aplicativo de quizzes pode ser executado localmente ou implantado no Azure; siga as instruções na pasta `quiz-app`. Eles estão sendo gradualmente localizados.
|
||||
|
||||
## 🎓 Exemplos para Iniciantes
|
||||
|
||||
**Novo em Ciência de Dados?** Criamos um diretório especial de [exemplos](examples/README.md) com código simples e bem comentado para ajudar você a começar:
|
||||
|
||||
- 🌟 **Hello World** - Seu primeiro programa de ciência de dados
|
||||
- 📂 **Carregando Dados** - Aprenda a ler e explorar conjuntos de dados
|
||||
- 📊 **Análise Simples** - Calcule estatísticas e encontre padrões
|
||||
- 📈 **Visualização Básica** - Crie gráficos e diagramas
|
||||
- 🔬 **Projeto do Mundo Real** - Fluxo de trabalho completo do início ao fim
|
||||
|
||||
Cada exemplo inclui comentários detalhados explicando cada passo, tornando-o perfeito para iniciantes absolutos!
|
||||
|
||||
👉 **[Comece pelos exemplos](examples/README.md)** 👈
|
||||
|
||||
## Lições
|
||||
|
||||
|
||||
||
|
||||
|:---:|
|
||||
| Ciência de Dados para Iniciantes: Roteiro - _Esboço por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
|
||||
| Número da Lição | Tópico | Grupo da Lição | Objetivos de Aprendizagem | Lição Vinculada | Autor |
|
||||
| :-----------: | :----------------------------------------: | :--------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------: | :----: |
|
||||
| 01 | Definindo Ciência de Dados | [Introdução](1-Introduction/README.md) | Aprenda os conceitos básicos por trás da ciência de dados e como ela está relacionada à inteligência artificial, aprendizado de máquina e big data. | [lesson](1-Introduction/01-defining-data-science/README.md) [vídeo](https://youtu.be/beZ7Mb_oz9I) | [Dmitry](http://soshnikov.com) |
|
||||
| 02 | Ética em Ciência de Dados | [Introdução](1-Introduction/README.md) | Conceitos, desafios e estruturas da ética em dados. | [lesson](1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) |
|
||||
| 03 | Definindo Dados | [Introdução](1-Introduction/README.md) | Como os dados são classificados e suas fontes comuns. | [lesson](1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) |
|
||||
| 04 | Introdução a Estatística & Probabilidade | [Introdução](1-Introduction/README.md) | Técnicas matemáticas de probabilidade e estatística para entender dados. | [lesson](1-Introduction/04-stats-and-probability/README.md) [vídeo](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) |
|
||||
| 05 | Trabalhando com Dados Relacionais | [Trabalhando com Dados](2-Working-With-Data/README.md) | Introdução aos dados relacionais e o básico sobre explorar e analisar dados relacionais com a Linguagem de Consulta Estruturada, também conhecida como SQL (pronuncia-se "see-quell"). | [lesson](2-Working-With-Data/05-relational-databases/README.md) | [Christopher](https://www.twitter.com/geektrainer) | | |
|
||||
| 06 | Trabalhando com Dados NoSQL | [Trabalhando com Dados](2-Working-With-Data/README.md) | Introdução aos dados não relacionais, seus diversos tipos e o básico sobre explorar e analisar bancos de dados de documentos. | [lesson](2-Working-With-Data/06-non-relational/README.md) | [Jasmine](https://twitter.com/paladique) |
|
||||
| 07 | Trabalhando com Python | [Trabalhando com Dados](2-Working-With-Data/README.md) | Noções básicas do uso de Python para exploração de dados com bibliotecas como Pandas. É recomendada uma compreensão fundamental da programação em Python. | [lesson](2-Working-With-Data/07-python/README.md) [vídeo](https://youtu.be/dZjWOGbsN4Y) | [Dmitry](http://soshnikov.com) |
|
||||
| 08 | Preparação de Dados | [Trabalhando com Dados](2-Working-With-Data/README.md) | Tópicos sobre técnicas de dados para limpar e transformar dados para lidar com desafios de dados ausentes, imprecisos ou incompletos. | [lesson](2-Working-With-Data/08-data-preparation/README.md) | [Jasmine](https://www.twitter.com/paladique) |
|
||||
| 09 | Visualizando Quantidades | [Visualização de Dados](3-Data-Visualization/README.md) | Aprenda a usar Matplotlib para visualizar dados de pássaros 🦆 | [lesson](3-Data-Visualization/09-visualization-quantities/README.md) | [Jen](https://twitter.com/jenlooper) |
|
||||
| 10 | Visualizando Distribuições de Dados | [Visualização de Dados](3-Data-Visualization/README.md) | Visualizando observações e tendências dentro de um intervalo. | [lesson](3-Data-Visualization/10-visualization-distributions/README.md) | [Jen](https://twitter.com/jenlooper) |
|
||||
| 11 | Visualizando Proporções | [Visualização de Dados](3-Data-Visualization/README.md) | Visualizando porcentagens discretas e agrupadas. | [lesson](3-Data-Visualization/11-visualization-proportions/README.md) | [Jen](https://twitter.com/jenlooper) |
|
||||
| 12 | Visualizando Relações | [Visualização de Dados](3-Data-Visualization/README.md) | Visualizando conexões e correlações entre conjuntos de dados e suas variáveis. | [lesson](3-Data-Visualization/12-visualization-relationships/README.md) | [Jen](https://twitter.com/jenlooper) |
|
||||
| 13 | Visualizações Significativas | [Visualização de Dados](3-Data-Visualization/README.md) | Técnicas e orientações para tornar suas visualizações valiosas para solução eficaz de problemas e insights. | [lesson](3-Data-Visualization/13-meaningful-visualizations/README.md) | [Jen](https://twitter.com/jenlooper) |
|
||||
| 14 | Introdução ao ciclo de vida da Ciência de Dados | [Ciclo de Vida](4-Data-Science-Lifecycle/README.md) | Introdução ao ciclo de vida da ciência de dados e sua primeira etapa: adquirir e extrair dados. | [lesson](4-Data-Science-Lifecycle/14-Introduction/README.md) | [Jasmine](https://twitter.com/paladique) |
|
||||
| 15 | Análise | [Ciclo de Vida](4-Data-Science-Lifecycle/README.md) | Esta fase do ciclo de vida da ciência de dados foca em técnicas para analisar dados. | [lesson](4-Data-Science-Lifecycle/15-analyzing/README.md) | [Jasmine](https://twitter.com/paladique) | | |
|
||||
| 16 | Comunicação | [Ciclo de Vida](4-Data-Science-Lifecycle/README.md) | Esta fase do ciclo de vida da ciência de dados foca em apresentar os insights dos dados de forma que seja mais fácil para os tomadores de decisão entenderem. | [lesson](4-Data-Science-Lifecycle/16-communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | |
|
||||
| 17 | Ciência de Dados na Nuvem | [Dados na Nuvem](5-Data-Science-In-Cloud/README.md) | Esta série de lições introduz ciência de dados na nuvem e seus benefícios. | [lesson](5-Data-Science-In-Cloud/17-Introduction/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) e [Maud](https://twitter.com/maudstweets) |
|
||||
| 18 | Ciência de Dados na Nuvem | [Dados na Nuvem](5-Data-Science-In-Cloud/README.md) | Treinamento de modelos usando ferramentas Low Code. |[lesson](5-Data-Science-In-Cloud/18-Low-Code/README.md) | [Tiffany](https://twitter.com/TiffanySouterre) e [Maud](https://twitter.com/maudstweets) |
|
||||
| 19 | Ciência de Dados na Nuvem | [Dados na Nuvem](5-Data-Science-In-Cloud/README.md) | Implantação de modelos com Azure Machine Learning Studio. | [lesson](5-Data-Science-In-Cloud/19-Azure/README.md)| [Tiffany](https://twitter.com/TiffanySouterre) e [Maud](https://twitter.com/maudstweets) |
|
||||
| 20 | Ciência de Dados na Prática | [Na Prática](6-Data-Science-In-Wild/README.md) | Projetos impulsionados por ciência de dados no mundo real. | [lesson](6-Data-Science-In-Wild/20-Real-World-Examples/README.md) | [Nitya](https://twitter.com/nitya) |
|
||||
|
||||
## GitHub Codespaces
|
||||
|
||||
Siga estes passos para abrir este exemplo em um Codespace:
|
||||
1. Clique no menu suspenso Code e selecione a opção Abrir com Codespaces.
|
||||
2. Selecione + Novo codespace na parte inferior do painel.
|
||||
Para mais informações, confira a [documentação do GitHub](https://docs.github.com/en/codespaces/developing-in-codespaces/creating-a-codespace-for-a-repository#creating-a-codespace).
|
||||
|
||||
## VSCode Remote - Containers
|
||||
Siga estes passos para abrir este repositório em um contêiner usando sua máquina local e VSCode usando a extensão VS Code Remote - Containers:
|
||||
|
||||
1. Se esta for sua primeira vez usando um contêiner de desenvolvimento, certifique-se de que seu sistema atende aos pré-requisitos (ou seja, ter o Docker instalado) na [documentação de introdução](https://code.visualstudio.com/docs/devcontainers/containers#_getting-started).
|
||||
|
||||
Para usar este repositório, você pode abrir o repositório em um volume Docker isolado:
|
||||
|
||||
**Nota**: Nos bastidores, isso usará o comando Remote-Containers: **Clone Repository in Container Volume...** para clonar o código-fonte em um volume Docker em vez do sistema de arquivos local. [Volumes](https://docs.docker.com/storage/volumes/) são o mecanismo preferido para persistência de dados em contêineres.
|
||||
|
||||
Ou abra uma versão clonada ou baixada localmente do repositório:
|
||||
|
||||
- Clone este repositório para seu sistema de arquivos local.
|
||||
- Pressione F1 e selecione o comando **Remote-Containers: Open Folder in Container...**.
|
||||
- Selecione a cópia clonada desta pasta, aguarde o contêiner iniciar e experimente.
|
||||
|
||||
## Acesso Offline
|
||||
|
||||
Você pode executar esta documentação offline usando [Docsify](https://docsify.js.org/#/). Faça um fork deste repositório, [instale o Docsify](https://docsify.js.org/#/quickstart) em sua máquina local, então no diretório raiz deste repositório, digite `docsify serve`. O site será servido na porta 3000 em seu localhost: `localhost:3000`.
|
||||
|
||||
> Nota, notebooks não serão renderizados via Docsify, então quando precisar rodar um notebook, faça isso separadamente no VS Code executando um kernel Python.
|
||||
|
||||
## Outros Currículos
|
||||
|
||||
Nossa equipe produz outros currículos! Confira:
|
||||
|
||||
<!-- CO-OP TRANSLATOR OTHER COURSES START -->
|
||||
### LangChain
|
||||
[](https://aka.ms/langchain4j-for-beginners)
|
||||
[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
|
||||
|
||||
---
|
||||
|
||||
### Azure / Edge / MCP / Agentes
|
||||
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Série de IA Generativa
|
||||
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
|
||||
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
|
||||
[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Aprendizado Básico
|
||||
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
|
||||
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Série Copilot
|
||||
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
|
||||
<!-- CO-OP TRANSLATOR OTHER COURSES END -->
|
||||
|
||||
## Obtendo Ajuda
|
||||
|
||||
**Encontrando problemas?** Consulte nosso [Guia de Solução de Problemas](TROUBLESHOOTING.md) para soluções de problemas comuns.
|
||||
|
||||
Se você ficar travado ou tiver alguma dúvida sobre como criar aplicativos de IA. Junte-se a outros aprendizes e desenvolvedores experientes em discussões sobre MCP. É uma comunidade de apoio onde perguntas são bem-vindas e o conhecimento é compartilhado livremente.
|
||||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
Se você tiver feedback sobre o produto ou erros durante a construção, visite:
|
||||
|
||||
[](https://aka.ms/foundry/forum)
|
||||
|
||||
---
|
||||
|
||||
<!-- 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 automáticas 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.
|
||||
<!-- CO-OP TRANSLATOR DISCLAIMER END -->
|
||||
@ -0,0 +1,42 @@
|
||||
## Segurança
|
||||
|
||||
A Microsoft leva a segurança de seus produtos e serviços de software muito a sério, o que inclui todos os repositórios de código-fonte gerenciados por meio de nossas organizações no GitHub, que incluem [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin) e [nossas organizações no GitHub](https://opensource.microsoft.com/).
|
||||
|
||||
Se você acredita ter encontrado uma vulnerabilidade de segurança em qualquer repositório de propriedade da Microsoft que atenda à [definição de vulnerabilidade de segurança da Microsoft](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), por favor, relate-a conforme descrito abaixo.
|
||||
|
||||
## Relatando Problemas de Segurança
|
||||
|
||||
**Por favor, não relate vulnerabilidades de segurança por meio de issues públicas no GitHub.**
|
||||
|
||||
Em vez disso, relate-as ao Microsoft Security Response Center (MSRC) em [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
|
||||
|
||||
Se preferir enviar sem fazer login, envie um e-mail para [secure@microsoft.com](mailto:secure@microsoft.com). Se possível, criptografe sua mensagem com nossa chave PGP; faça o download na [página da Chave PGP do Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
|
||||
|
||||
Você deve receber uma resposta dentro de 24 horas. Se, por algum motivo, não receber, envie um e-mail de acompanhamento para garantir que recebemos sua mensagem original. Informações adicionais podem ser encontradas em [microsoft.com/msrc](https://www.microsoft.com/msrc).
|
||||
|
||||
Inclua as informações solicitadas abaixo (tanto quanto possível) para nos ajudar a entender melhor a natureza e o escopo do possível problema:
|
||||
|
||||
* Tipo de problema (por exemplo, buffer overflow, SQL injection, cross-site scripting, etc.)
|
||||
* Caminhos completos dos arquivos de código-fonte relacionados à manifestação do problema
|
||||
* A localização do código-fonte afetado (tag/branch/commit ou URL direto)
|
||||
* Qualquer configuração especial necessária para reproduzir o problema
|
||||
* Instruções passo a passo para reproduzir o problema
|
||||
* Código de prova de conceito ou de exploração (se possível)
|
||||
* Impacto do problema, incluindo como um invasor poderia explorar o problema
|
||||
|
||||
Essas informações nos ajudarão a priorizar seu relatório mais rapidamente.
|
||||
|
||||
Se você estiver relatando para um programa de recompensa por bugs, relatórios mais completos podem contribuir para uma recompensa maior. Visite a página do [Programa de Recompensas por Bugs da Microsoft](https://microsoft.com/msrc/bounty) para mais detalhes sobre nossos programas ativos.
|
||||
|
||||
## Idiomas Preferidos
|
||||
|
||||
Preferimos que todas as comunicações sejam feitas em inglês.
|
||||
|
||||
## Política
|
||||
|
||||
A Microsoft segue o princípio de [Divulgação Coordenada de Vulnerabilidades](https://www.microsoft.com/en-us/msrc/cvd).
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,15 @@
|
||||
# Suporte
|
||||
## Como registrar problemas e obter ajuda
|
||||
|
||||
Este projeto utiliza o GitHub Issues para rastrear bugs e solicitações de recursos. Por favor, pesquise os problemas existentes antes de registrar novos para evitar duplicações. Para novos problemas, registre seu bug ou solicitação de recurso como um novo Issue.
|
||||
|
||||
Para obter ajuda e esclarecer dúvidas sobre o uso deste projeto, registre um Issue.
|
||||
|
||||
## Política de Suporte da Microsoft
|
||||
|
||||
O suporte para este repositório é limitado aos recursos listados acima.
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,618 @@
|
||||
# Guia de Solução de Problemas
|
||||
|
||||
Este guia fornece soluções para problemas comuns que você pode encontrar ao trabalhar com o currículo de Ciência de Dados para Iniciantes.
|
||||
|
||||
## Índice
|
||||
|
||||
- [Problemas com Python e Jupyter](../..)
|
||||
- [Problemas com Pacotes e Dependências](../..)
|
||||
- [Problemas com Jupyter Notebook](../..)
|
||||
- [Problemas com o Aplicativo de Quiz](../..)
|
||||
- [Problemas com Git e GitHub](../..)
|
||||
- [Problemas com a Documentação Docsify](../..)
|
||||
- [Problemas com Dados e Arquivos](../..)
|
||||
- [Problemas de Desempenho](../..)
|
||||
- [Obtendo Ajuda Adicional](../..)
|
||||
|
||||
## Problemas com Python e Jupyter
|
||||
|
||||
### Python Não Encontrado ou Versão Errada
|
||||
|
||||
**Problema:** `python: command not found` ou versão errada do Python
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Check Python version
|
||||
python --version
|
||||
python3 --version
|
||||
|
||||
# If Python 3 is installed as 'python3', create an alias
|
||||
# On macOS/Linux, add to ~/.bashrc or ~/.zshrc:
|
||||
alias python=python3
|
||||
alias pip=pip3
|
||||
|
||||
# Or use python3 explicitly
|
||||
python3 -m pip install jupyter
|
||||
```
|
||||
|
||||
**Solução para Windows:**
|
||||
1. Reinstale o Python em [python.org](https://www.python.org/)
|
||||
2. Durante a instalação, marque "Add Python to PATH"
|
||||
3. Reinicie seu terminal/prompt de comando
|
||||
|
||||
### Problemas de Ativação do Ambiente Virtual
|
||||
|
||||
**Problema:** O ambiente virtual não ativa
|
||||
|
||||
**Solução:**
|
||||
|
||||
**Windows:**
|
||||
```bash
|
||||
# If you get execution policy error
|
||||
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
||||
|
||||
# Then activate
|
||||
venv\Scripts\activate
|
||||
```
|
||||
|
||||
**macOS/Linux:**
|
||||
```bash
|
||||
# Ensure the activate script is executable
|
||||
chmod +x venv/bin/activate
|
||||
|
||||
# Then activate
|
||||
source venv/bin/activate
|
||||
```
|
||||
|
||||
**Verifique a ativação:**
|
||||
```bash
|
||||
# Your prompt should show (venv)
|
||||
# Check Python location
|
||||
which python # Should point to venv
|
||||
```
|
||||
|
||||
### Problemas com o Kernel do Jupyter
|
||||
|
||||
**Problema:** "Kernel não encontrado" ou "Kernel continua morrendo"
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Reinstall kernel
|
||||
python -m ipykernel install --user --name=datascience --display-name="Python (Data Science)"
|
||||
|
||||
# Or use the default kernel
|
||||
python -m ipykernel install --user
|
||||
|
||||
# Restart Jupyter
|
||||
jupyter notebook
|
||||
```
|
||||
|
||||
**Problema:** Versão errada do Python no Jupyter
|
||||
|
||||
**Solução:**
|
||||
```bash
|
||||
# Install Jupyter in your virtual environment
|
||||
source venv/bin/activate # Activate first
|
||||
pip install jupyter ipykernel
|
||||
|
||||
# Register the kernel
|
||||
python -m ipykernel install --user --name=venv --display-name="Python (venv)"
|
||||
|
||||
# In Jupyter, select Kernel -> Change kernel -> Python (venv)
|
||||
```
|
||||
|
||||
## Problemas com Pacotes e Dependências
|
||||
|
||||
### Erros de Importação
|
||||
|
||||
**Problema:** `ModuleNotFoundError: No module named 'pandas'` (ou outros pacotes)
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Ensure virtual environment is activated
|
||||
source venv/bin/activate # macOS/Linux
|
||||
venv\Scripts\activate # Windows
|
||||
|
||||
# Install missing package
|
||||
pip install pandas
|
||||
|
||||
# Install all common packages
|
||||
pip install jupyter pandas numpy matplotlib seaborn scikit-learn
|
||||
|
||||
# Verify installation
|
||||
python -c "import pandas; print(pandas.__version__)"
|
||||
```
|
||||
|
||||
### Falhas na Instalação com Pip
|
||||
|
||||
**Problema:** `pip install` falha com erros de permissão
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Use --user flag
|
||||
pip install --user package-name
|
||||
|
||||
# Or use virtual environment (recommended)
|
||||
python -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install package-name
|
||||
```
|
||||
|
||||
**Problema:** `pip install` falha com erros de certificado SSL
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Update pip first
|
||||
python -m pip install --upgrade pip
|
||||
|
||||
# Try installing with trusted host (temporary workaround)
|
||||
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org package-name
|
||||
```
|
||||
|
||||
### Conflitos de Versão de Pacotes
|
||||
|
||||
**Problema:** Versões incompatíveis de pacotes
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Create fresh virtual environment
|
||||
python -m venv venv-new
|
||||
source venv-new/bin/activate # or venv-new\Scripts\activate on Windows
|
||||
|
||||
# Install packages with specific versions if needed
|
||||
pip install pandas==1.3.0
|
||||
pip install numpy==1.21.0
|
||||
|
||||
# Or let pip resolve dependencies
|
||||
pip install jupyter pandas numpy matplotlib seaborn scikit-learn
|
||||
```
|
||||
|
||||
## Problemas com Jupyter Notebook
|
||||
|
||||
### Jupyter Não Inicia
|
||||
|
||||
**Problema:** Comando `jupyter notebook` não encontrado
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Install Jupyter
|
||||
pip install jupyter
|
||||
|
||||
# Or use python -m
|
||||
python -m jupyter notebook
|
||||
|
||||
# Add to PATH if needed (macOS/Linux)
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
```
|
||||
|
||||
### Notebook Não Carrega ou Não Salva
|
||||
|
||||
**Problema:** "Notebook falhou ao carregar" ou erros ao salvar
|
||||
|
||||
**Solução:**
|
||||
|
||||
1. Verifique as permissões do arquivo
|
||||
```bash
|
||||
# Make sure you have write permissions
|
||||
ls -l notebook.ipynb
|
||||
chmod 644 notebook.ipynb # If needed
|
||||
```
|
||||
|
||||
2. Verifique se há corrupção no arquivo
|
||||
```bash
|
||||
# Try opening in text editor to check JSON structure
|
||||
# Copy content to new notebook if corrupted
|
||||
```
|
||||
|
||||
3. Limpe o cache do Jupyter
|
||||
```bash
|
||||
jupyter notebook --clear-cache
|
||||
```
|
||||
|
||||
### Célula Não Executa
|
||||
|
||||
**Problema:** Célula travada em "In [*]" ou demora muito
|
||||
|
||||
**Solução:**
|
||||
|
||||
1. **Interrompa o kernel**: Clique no botão "Interrupt" ou pressione `I, I`
|
||||
2. **Reinicie o kernel**: Menu Kernel → Restart
|
||||
3. **Verifique loops infinitos** no seu código
|
||||
4. **Limpe a saída**: Cell → All Output → Clear
|
||||
|
||||
### Gráficos Não Aparecem
|
||||
|
||||
**Problema:** Gráficos do `matplotlib` não aparecem no notebook
|
||||
|
||||
**Solução:**
|
||||
|
||||
```python
|
||||
# Add magic command at the top of notebook
|
||||
%matplotlib inline
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
# Create plot
|
||||
plt.plot([1, 2, 3, 4])
|
||||
plt.show() # Make sure to call show()
|
||||
```
|
||||
|
||||
**Alternativa para gráficos interativos:**
|
||||
```python
|
||||
%matplotlib notebook
|
||||
# Or
|
||||
%matplotlib widget
|
||||
```
|
||||
|
||||
## Problemas com o Aplicativo de Quiz
|
||||
|
||||
### npm install Falha
|
||||
|
||||
**Problema:** Erros durante `npm install`
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Clear npm cache
|
||||
npm cache clean --force
|
||||
|
||||
# Remove node_modules and package-lock.json
|
||||
rm -rf node_modules package-lock.json
|
||||
|
||||
# Reinstall
|
||||
npm install
|
||||
|
||||
# If still failing, try with legacy peer deps
|
||||
npm install --legacy-peer-deps
|
||||
```
|
||||
|
||||
### Aplicativo de Quiz Não Inicia
|
||||
|
||||
**Problema:** `npm run serve` falha
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Check Node.js version
|
||||
node --version # Should be 12.x or higher
|
||||
|
||||
# Reinstall dependencies
|
||||
cd quiz-app
|
||||
rm -rf node_modules package-lock.json
|
||||
npm install
|
||||
|
||||
# Try different port
|
||||
npm run serve -- --port 8081
|
||||
```
|
||||
|
||||
### Porta Já em Uso
|
||||
|
||||
**Problema:** "Porta 8080 já está em uso"
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Find and kill process on port 8080
|
||||
# macOS/Linux:
|
||||
lsof -ti:8080 | xargs kill -9
|
||||
|
||||
# Windows:
|
||||
netstat -ano | findstr :8080
|
||||
taskkill /PID <PID> /F
|
||||
|
||||
# Or use a different port
|
||||
npm run serve -- --port 8081
|
||||
```
|
||||
|
||||
### Quiz Não Carrega ou Página em Branco
|
||||
|
||||
**Problema:** O aplicativo de quiz carrega, mas mostra uma página em branco
|
||||
|
||||
**Solução:**
|
||||
|
||||
1. Verifique erros no console do navegador (F12)
|
||||
2. Limpe o cache e os cookies do navegador
|
||||
3. Tente outro navegador
|
||||
4. Certifique-se de que o JavaScript está habilitado
|
||||
5. Verifique se bloqueadores de anúncios estão interferindo
|
||||
|
||||
```bash
|
||||
# Rebuild the app
|
||||
npm run build
|
||||
npm run serve
|
||||
```
|
||||
|
||||
## Problemas com Git e GitHub
|
||||
|
||||
### Git Não Reconhecido
|
||||
|
||||
**Problema:** `git: command not found`
|
||||
|
||||
**Solução:**
|
||||
|
||||
**Windows:**
|
||||
- Instale o Git em [git-scm.com](https://git-scm.com/)
|
||||
- Reinicie o terminal após a instalação
|
||||
|
||||
**macOS:**
|
||||
|
||||
> **Nota:** Se você não tiver o Homebrew instalado, siga as instruções em [https://brew.sh/](https://brew.sh/) para instalá-lo primeiro.
|
||||
```bash
|
||||
# Install via Homebrew
|
||||
brew install git
|
||||
|
||||
# Or install Xcode Command Line Tools
|
||||
xcode-select --install
|
||||
```
|
||||
|
||||
**Linux:**
|
||||
```bash
|
||||
sudo apt-get install git # Debian/Ubuntu
|
||||
sudo dnf install git # Fedora
|
||||
```
|
||||
|
||||
### Falha ao Clonar
|
||||
|
||||
**Problema:** `git clone` falha com erros de autenticação
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Use HTTPS URL
|
||||
git clone https://github.com/microsoft/Data-Science-For-Beginners.git
|
||||
|
||||
# If you have 2FA enabled on GitHub, use Personal Access Token
|
||||
# Create token at: https://github.com/settings/tokens
|
||||
# Use token as password when prompted
|
||||
```
|
||||
|
||||
### Permissão Negada (publickey)
|
||||
|
||||
**Problema:** Autenticação com chave SSH falha
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Generate SSH key
|
||||
ssh-keygen -t ed25519 -C "your_email@example.com"
|
||||
|
||||
# Add key to ssh-agent
|
||||
eval "$(ssh-agent -s)"
|
||||
ssh-add ~/.ssh/id_ed25519
|
||||
|
||||
# Add public key to GitHub
|
||||
# Copy key: cat ~/.ssh/id_ed25519.pub
|
||||
# Add at: https://github.com/settings/keys
|
||||
```
|
||||
|
||||
## Problemas com a Documentação Docsify
|
||||
|
||||
### Comando Docsify Não Encontrado
|
||||
|
||||
**Problema:** `docsify: command not found`
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Install globally
|
||||
npm install -g docsify-cli
|
||||
|
||||
# If permission error on macOS/Linux
|
||||
sudo npm install -g docsify-cli
|
||||
|
||||
# Verify installation
|
||||
docsify --version
|
||||
|
||||
# If still not found, add npm global path
|
||||
# Find npm global path
|
||||
npm config get prefix
|
||||
|
||||
# Add to PATH (add to ~/.bashrc or ~/.zshrc)
|
||||
export PATH="$PATH:/usr/local/bin"
|
||||
```
|
||||
|
||||
### Documentação Não Carrega
|
||||
|
||||
**Problema:** Docsify serve, mas o conteúdo não carrega
|
||||
|
||||
**Solução:**
|
||||
|
||||
```bash
|
||||
# Ensure you're in the repository root
|
||||
cd Data-Science-For-Beginners
|
||||
|
||||
# Check for index.html
|
||||
ls index.html
|
||||
|
||||
# Serve with specific port
|
||||
docsify serve --port 3000
|
||||
|
||||
# Check browser console for errors (F12)
|
||||
```
|
||||
|
||||
### Imagens Não Aparecem
|
||||
|
||||
**Problema:** Imagens mostram ícone de link quebrado
|
||||
|
||||
**Solução:**
|
||||
|
||||
1. Verifique se os caminhos das imagens são relativos
|
||||
2. Certifique-se de que os arquivos de imagem existem no repositório
|
||||
3. Limpe o cache do navegador
|
||||
4. Verifique se as extensões dos arquivos correspondem (sensível a maiúsculas/minúsculas em alguns sistemas)
|
||||
|
||||
## Problemas com Dados e Arquivos
|
||||
|
||||
### Erros de Arquivo Não Encontrado
|
||||
|
||||
**Problema:** `FileNotFoundError` ao carregar dados
|
||||
|
||||
**Solução:**
|
||||
|
||||
```python
|
||||
import os
|
||||
|
||||
# Check current working directory
|
||||
print(os.getcwd())
|
||||
|
||||
# Use absolute path
|
||||
data_path = os.path.join(os.getcwd(), 'data', 'filename.csv')
|
||||
df = pd.read_csv(data_path)
|
||||
|
||||
# Or use relative path from notebook location
|
||||
df = pd.read_csv('../data/filename.csv')
|
||||
|
||||
# Verify file exists
|
||||
print(os.path.exists('data/filename.csv'))
|
||||
```
|
||||
|
||||
### Erros ao Ler CSV
|
||||
|
||||
**Problema:** Erros ao ler arquivos CSV
|
||||
|
||||
**Solução:**
|
||||
|
||||
```python
|
||||
import pandas as pd
|
||||
|
||||
# Try different encodings
|
||||
df = pd.read_csv('file.csv', encoding='utf-8')
|
||||
# or
|
||||
df = pd.read_csv('file.csv', encoding='latin-1')
|
||||
# or
|
||||
df = pd.read_csv('file.csv', encoding='ISO-8859-1')
|
||||
|
||||
# Handle missing values
|
||||
df = pd.read_csv('file.csv', na_values=['NA', 'N/A', ''])
|
||||
|
||||
# Specify delimiter if not comma
|
||||
df = pd.read_csv('file.csv', delimiter=';')
|
||||
```
|
||||
|
||||
### Erros de Memória com Grandes Conjuntos de Dados
|
||||
|
||||
**Problema:** `MemoryError` ao carregar arquivos grandes
|
||||
|
||||
**Solução:**
|
||||
|
||||
```python
|
||||
# Read in chunks
|
||||
chunk_size = 10000
|
||||
chunks = []
|
||||
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
|
||||
# Process chunk
|
||||
chunks.append(chunk)
|
||||
df = pd.concat(chunks)
|
||||
|
||||
# Or read specific columns only
|
||||
df = pd.read_csv('file.csv', usecols=['col1', 'col2'])
|
||||
|
||||
# Use more efficient data types
|
||||
df = pd.read_csv('file.csv', dtype={'column_name': 'int32'})
|
||||
```
|
||||
|
||||
## Problemas de Desempenho
|
||||
|
||||
### Desempenho Lento do Notebook
|
||||
|
||||
**Problema:** Notebooks executam muito lentamente
|
||||
|
||||
**Solução:**
|
||||
|
||||
1. **Reinicie o kernel e limpe a saída**
|
||||
- Kernel → Restart & Clear Output
|
||||
|
||||
2. **Feche notebooks não utilizados**
|
||||
|
||||
3. **Otimize o código:**
|
||||
```python
|
||||
# Use vectorized operations instead of loops
|
||||
# Bad:
|
||||
result = []
|
||||
for x in data:
|
||||
result.append(x * 2)
|
||||
|
||||
# Good:
|
||||
result = data * 2 # NumPy/Pandas vectorization
|
||||
```
|
||||
|
||||
4. **Amostre grandes conjuntos de dados:**
|
||||
```python
|
||||
# Work with sample during development
|
||||
df_sample = df.sample(n=1000) # or df.head(1000)
|
||||
```
|
||||
|
||||
### Navegador Travando
|
||||
|
||||
**Problema:** Navegador trava ou fica sem resposta
|
||||
|
||||
**Solução:**
|
||||
|
||||
1. Feche abas não utilizadas
|
||||
2. Limpe o cache do navegador
|
||||
3. Aumente a memória do navegador (Chrome: `chrome://settings/system`)
|
||||
4. Use o JupyterLab em vez disso:
|
||||
```bash
|
||||
pip install jupyterlab
|
||||
jupyter lab
|
||||
```
|
||||
|
||||
## Obtendo Ajuda Adicional
|
||||
|
||||
### Antes de Pedir Ajuda
|
||||
|
||||
1. Consulte este guia de solução de problemas
|
||||
2. Pesquise [GitHub Issues](https://github.com/microsoft/Data-Science-For-Beginners/issues)
|
||||
3. Revise [INSTALLATION.md](INSTALLATION.md) e [USAGE.md](USAGE.md)
|
||||
4. Tente buscar a mensagem de erro online
|
||||
|
||||
### Como Pedir Ajuda
|
||||
|
||||
Ao criar um problema ou pedir ajuda, inclua:
|
||||
|
||||
1. **Sistema Operacional**: Windows, macOS ou Linux (qual distribuição)
|
||||
2. **Versão do Python**: Execute `python --version`
|
||||
3. **Mensagem de Erro**: Copie a mensagem de erro completa
|
||||
4. **Passos para Reproduzir**: O que você fez antes de o erro ocorrer
|
||||
5. **O que Você Já Tentou**: Soluções que você já tentou
|
||||
|
||||
**Exemplo:**
|
||||
```
|
||||
**Operating System:** macOS 12.0
|
||||
**Python Version:** 3.9.7
|
||||
**Error Message:** ModuleNotFoundError: No module named 'pandas'
|
||||
**Steps to Reproduce:**
|
||||
1. Activated virtual environment
|
||||
2. Started Jupyter notebook
|
||||
3. Tried to import pandas
|
||||
|
||||
**What I've Tried:**
|
||||
- Ran pip install pandas
|
||||
- Restarted Jupyter
|
||||
```
|
||||
|
||||
### Recursos da Comunidade
|
||||
|
||||
- **GitHub Issues**: [Crie um problema](https://github.com/microsoft/Data-Science-For-Beginners/issues/new)
|
||||
- **Discord**: [Participe da nossa comunidade](https://aka.ms/ds4beginners/discord)
|
||||
- **Discussões**: [Discussões no GitHub](https://github.com/microsoft/Data-Science-For-Beginners/discussions)
|
||||
- **Microsoft Learn**: [Fóruns de Q&A](https://docs.microsoft.com/answers/)
|
||||
|
||||
### Documentação Relacionada
|
||||
|
||||
- [INSTALLATION.md](INSTALLATION.md) - Instruções de configuração
|
||||
- [USAGE.md](USAGE.md) - Como usar o currículo
|
||||
- [CONTRIBUTING.md](CONTRIBUTING.md) - Como contribuir
|
||||
- [README.md](README.md) - Visão geral do projeto
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,365 @@
|
||||
# Guia de Uso
|
||||
|
||||
Este guia fornece exemplos e fluxos de trabalho comuns para usar o currículo de Ciência de Dados para Iniciantes.
|
||||
|
||||
## Índice
|
||||
|
||||
- [Como Usar Este Currículo](../..)
|
||||
- [Trabalhando com as Lições](../..)
|
||||
- [Trabalhando com Jupyter Notebooks](../..)
|
||||
- [Usando o Aplicativo de Quiz](../..)
|
||||
- [Fluxos de Trabalho Comuns](../..)
|
||||
- [Dicas para Autodidatas](../..)
|
||||
- [Dicas para Professores](../..)
|
||||
|
||||
## Como Usar Este Currículo
|
||||
|
||||
Este currículo foi projetado para ser flexível e pode ser usado de várias maneiras:
|
||||
|
||||
- **Aprendizado autônomo**: Trabalhe nas lições de forma independente, no seu próprio ritmo
|
||||
- **Instrução em sala de aula**: Use como um curso estruturado com orientação
|
||||
- **Grupos de estudo**: Aprenda colaborativamente com colegas
|
||||
- **Formato de workshop**: Sessões intensivas de aprendizado de curto prazo
|
||||
|
||||
## Trabalhando com as Lições
|
||||
|
||||
Cada lição segue uma estrutura consistente para maximizar o aprendizado:
|
||||
|
||||
### Estrutura da Lição
|
||||
|
||||
1. **Quiz pré-lição**: Teste seus conhecimentos existentes
|
||||
2. **Sketchnote** (Opcional): Resumo visual dos conceitos principais
|
||||
3. **Vídeo** (Opcional): Conteúdo de vídeo complementar
|
||||
4. **Lição escrita**: Conceitos principais e explicações
|
||||
5. **Jupyter Notebook**: Exercícios práticos de codificação
|
||||
6. **Tarefa**: Pratique o que aprendeu
|
||||
7. **Quiz pós-lição**: Reforce sua compreensão
|
||||
|
||||
### Exemplo de Fluxo de Trabalho para uma Lição
|
||||
|
||||
```bash
|
||||
# 1. Navigate to the lesson directory
|
||||
cd 1-Introduction/01-defining-data-science
|
||||
|
||||
# 2. Read the README.md
|
||||
# Open README.md in your browser or editor
|
||||
|
||||
# 3. Take the pre-lesson quiz
|
||||
# Click the quiz link in the README
|
||||
|
||||
# 4. Open the Jupyter notebook (if available)
|
||||
jupyter notebook
|
||||
|
||||
# 5. Complete the exercises in the notebook
|
||||
|
||||
# 6. Work on the assignment
|
||||
|
||||
# 7. Take the post-lesson quiz
|
||||
```
|
||||
|
||||
## Trabalhando com Jupyter Notebooks
|
||||
|
||||
### Iniciando o Jupyter
|
||||
|
||||
```bash
|
||||
# Activate your virtual environment
|
||||
source venv/bin/activate # On macOS/Linux
|
||||
# OR
|
||||
venv\Scripts\activate # On Windows
|
||||
|
||||
# Start Jupyter from the repository root
|
||||
jupyter notebook
|
||||
```
|
||||
|
||||
### Executando Células do Notebook
|
||||
|
||||
1. **Executar uma célula**: Pressione `Shift + Enter` ou clique no botão "Run"
|
||||
2. **Executar todas as células**: Selecione "Cell" → "Run All" no menu
|
||||
3. **Reiniciar kernel**: Selecione "Kernel" → "Restart" se encontrar problemas
|
||||
|
||||
### Exemplo: Trabalhando com Dados em um Notebook
|
||||
|
||||
```python
|
||||
# Import required libraries
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
# Load a dataset
|
||||
df = pd.read_csv('data/sample.csv')
|
||||
|
||||
# Explore the data
|
||||
df.head()
|
||||
df.info()
|
||||
df.describe()
|
||||
|
||||
# Create a visualization
|
||||
plt.figure(figsize=(10, 6))
|
||||
plt.plot(df['column_name'])
|
||||
plt.title('Sample Visualization')
|
||||
plt.xlabel('X-axis Label')
|
||||
plt.ylabel('Y-axis Label')
|
||||
plt.show()
|
||||
```
|
||||
|
||||
### Salvando Seu Trabalho
|
||||
|
||||
- O Jupyter salva automaticamente periodicamente
|
||||
- Salve manualmente: Pressione `Ctrl + S` (ou `Cmd + S` no macOS)
|
||||
- Seu progresso é salvo no arquivo `.ipynb`
|
||||
|
||||
## Usando o Aplicativo de Quiz
|
||||
|
||||
### Executando o Aplicativo de Quiz Localmente
|
||||
|
||||
```bash
|
||||
# Navigate to quiz app directory
|
||||
cd quiz-app
|
||||
|
||||
# Start the development server
|
||||
npm run serve
|
||||
|
||||
# Access at http://localhost:8080
|
||||
```
|
||||
|
||||
### Realizando os Quizzes
|
||||
|
||||
1. Os quizzes pré-lição estão vinculados no início de cada lição
|
||||
2. Os quizzes pós-lição estão vinculados no final de cada lição
|
||||
3. Cada quiz tem 3 perguntas
|
||||
4. Os quizzes são projetados para reforçar o aprendizado, não para testar exaustivamente
|
||||
|
||||
### Numeração dos Quizzes
|
||||
|
||||
- Os quizzes são numerados de 0 a 39 (40 quizzes no total)
|
||||
- Cada lição geralmente tem um quiz pré e pós
|
||||
- Os URLs dos quizzes incluem o número do quiz: `https://ff-quizzes.netlify.app/en/ds/quiz/0`
|
||||
|
||||
## Fluxos de Trabalho Comuns
|
||||
|
||||
### Fluxo de Trabalho 1: Caminho para Iniciantes
|
||||
|
||||
```bash
|
||||
# 1. Set up your environment (see INSTALLATION.md)
|
||||
|
||||
# 2. Start with Lesson 1
|
||||
cd 1-Introduction/01-defining-data-science
|
||||
|
||||
# 3. For each lesson:
|
||||
# - Take pre-lesson quiz
|
||||
# - Read the lesson content
|
||||
# - Work through the notebook
|
||||
# - Complete the assignment
|
||||
# - Take post-lesson quiz
|
||||
|
||||
# 4. Progress through all 20 lessons sequentially
|
||||
```
|
||||
|
||||
### Fluxo de Trabalho 2: Aprendizado Específico por Tópico
|
||||
|
||||
Se você estiver interessado em um tópico específico:
|
||||
|
||||
```bash
|
||||
# Example: Focus on Data Visualization
|
||||
cd 3-Data-Visualization
|
||||
|
||||
# Explore lessons 9-13:
|
||||
# - Lesson 9: Visualizing Quantities
|
||||
# - Lesson 10: Visualizing Distributions
|
||||
# - Lesson 11: Visualizing Proportions
|
||||
# - Lesson 12: Visualizing Relationships
|
||||
# - Lesson 13: Meaningful Visualizations
|
||||
```
|
||||
|
||||
### Fluxo de Trabalho 3: Aprendizado Baseado em Projetos
|
||||
|
||||
```bash
|
||||
# 1. Review the Data Science Lifecycle lessons (14-16)
|
||||
cd 4-Data-Science-Lifecycle
|
||||
|
||||
# 2. Work through a real-world example (Lesson 20)
|
||||
cd ../6-Data-Science-In-Wild/20-Real-World-Examples
|
||||
|
||||
# 3. Apply concepts to your own project
|
||||
```
|
||||
|
||||
### Fluxo de Trabalho 4: Ciência de Dados na Nuvem
|
||||
|
||||
```bash
|
||||
# Learn about cloud data science (Lessons 17-19)
|
||||
cd 5-Data-Science-In-Cloud
|
||||
|
||||
# 17: Introduction to Cloud Data Science
|
||||
# 18: Low-Code ML Tools
|
||||
# 19: Azure Machine Learning Studio
|
||||
```
|
||||
|
||||
## Dicas para Autodidatas
|
||||
|
||||
### Mantenha-se Organizado
|
||||
|
||||
```bash
|
||||
# Create a learning journal
|
||||
mkdir my-learning-journal
|
||||
|
||||
# For each lesson, create notes
|
||||
echo "# Lesson 1 Notes" > my-learning-journal/lesson-01-notes.md
|
||||
```
|
||||
|
||||
### Pratique Regularmente
|
||||
|
||||
- Reserve tempo dedicado diariamente ou semanalmente
|
||||
- Complete pelo menos uma lição por semana
|
||||
- Revise lições anteriores periodicamente
|
||||
|
||||
### Engaje-se com a Comunidade
|
||||
|
||||
- Junte-se à [comunidade no Discord](https://aka.ms/ds4beginners/discord)
|
||||
- Participe do canal #Data-Science-for-Beginners no Discord [Discussões no Discord](https://aka.ms/ds4beginners/discord)
|
||||
- Compartilhe seu progresso e faça perguntas
|
||||
|
||||
### Construa Seus Próprios Projetos
|
||||
|
||||
Após concluir as lições, aplique os conceitos em projetos pessoais:
|
||||
|
||||
```python
|
||||
# Example: Analyze your own dataset
|
||||
import pandas as pd
|
||||
|
||||
# Load your own data
|
||||
my_data = pd.read_csv('my-project/data.csv')
|
||||
|
||||
# Apply techniques learned
|
||||
# - Data cleaning (Lesson 8)
|
||||
# - Exploratory data analysis (Lesson 7)
|
||||
# - Visualization (Lessons 9-13)
|
||||
# - Analysis (Lesson 15)
|
||||
```
|
||||
|
||||
## Dicas para Professores
|
||||
|
||||
### Configuração da Sala de Aula
|
||||
|
||||
1. Revise [for-teachers.md](for-teachers.md) para orientações detalhadas
|
||||
2. Configure um ambiente compartilhado (GitHub Classroom ou Codespaces)
|
||||
3. Estabeleça um canal de comunicação (Discord, Slack ou Teams)
|
||||
|
||||
### Planejamento de Lições
|
||||
|
||||
**Cronograma sugerido de 10 semanas:**
|
||||
|
||||
- **Semana 1-2**: Introdução (Lições 1-4)
|
||||
- **Semana 3-4**: Trabalhando com Dados (Lições 5-8)
|
||||
- **Semana 5-6**: Visualização de Dados (Lições 9-13)
|
||||
- **Semana 7-8**: Ciclo de Vida da Ciência de Dados (Lições 14-16)
|
||||
- **Semana 9**: Ciência de Dados na Nuvem (Lições 17-19)
|
||||
- **Semana 10**: Aplicações Reais & Projetos Finais (Lição 20)
|
||||
|
||||
### Executando Docsify para Acesso Offline
|
||||
|
||||
```bash
|
||||
# Serve documentation locally for classroom use
|
||||
docsify serve
|
||||
|
||||
# Students can access at localhost:3000
|
||||
# No internet required after initial setup
|
||||
```
|
||||
|
||||
### Avaliação de Tarefas
|
||||
|
||||
- Revise os notebooks dos alunos para exercícios concluídos
|
||||
- Verifique a compreensão por meio das pontuações dos quizzes
|
||||
- Avalie os projetos finais usando os princípios do ciclo de vida da ciência de dados
|
||||
|
||||
### Criando Tarefas
|
||||
|
||||
```python
|
||||
# Example custom assignment template
|
||||
"""
|
||||
Assignment: [Topic]
|
||||
|
||||
Objective: [Learning goal]
|
||||
|
||||
Dataset: [Provide or have students find one]
|
||||
|
||||
Tasks:
|
||||
1. Load and explore the dataset
|
||||
2. Clean and prepare the data
|
||||
3. Create at least 3 visualizations
|
||||
4. Perform analysis
|
||||
5. Communicate findings
|
||||
|
||||
Deliverables:
|
||||
- Jupyter notebook with code and explanations
|
||||
- Written summary of findings
|
||||
"""
|
||||
```
|
||||
|
||||
## Trabalhando Offline
|
||||
|
||||
### Baixar Recursos
|
||||
|
||||
```bash
|
||||
# Clone the entire repository
|
||||
git clone https://github.com/microsoft/Data-Science-For-Beginners.git
|
||||
|
||||
# Download datasets in advance
|
||||
# Most datasets are included in the repository
|
||||
```
|
||||
|
||||
### Executar Documentação Localmente
|
||||
|
||||
```bash
|
||||
# Serve with Docsify
|
||||
docsify serve
|
||||
|
||||
# Access at localhost:3000
|
||||
```
|
||||
|
||||
### Executar Aplicativo de Quiz Localmente
|
||||
|
||||
```bash
|
||||
cd quiz-app
|
||||
npm run serve
|
||||
```
|
||||
|
||||
## Acessando Conteúdo Traduzido
|
||||
|
||||
As traduções estão disponíveis em mais de 40 idiomas:
|
||||
|
||||
```bash
|
||||
# Access translated lessons
|
||||
cd translations/fr # French
|
||||
cd translations/es # Spanish
|
||||
cd translations/de # German
|
||||
# ... and many more
|
||||
```
|
||||
|
||||
Cada tradução mantém a mesma estrutura da versão em inglês.
|
||||
|
||||
## Recursos Adicionais
|
||||
|
||||
### Continue Aprendendo
|
||||
|
||||
- [Microsoft Learn](https://docs.microsoft.com/learn/) - Caminhos de aprendizado adicionais
|
||||
- [Student Hub](https://docs.microsoft.com/learn/student-hub) - Recursos para estudantes
|
||||
- [Azure AI Foundry](https://aka.ms/foundry/forum) - Fórum da comunidade
|
||||
|
||||
### Currículos Relacionados
|
||||
|
||||
- [AI para Iniciantes](https://aka.ms/ai-beginners)
|
||||
- [ML para Iniciantes](https://aka.ms/ml-beginners)
|
||||
- [Desenvolvimento Web para Iniciantes](https://aka.ms/webdev-beginners)
|
||||
- [IA Generativa para Iniciantes](https://aka.ms/genai-beginners)
|
||||
|
||||
## Obtendo Ajuda
|
||||
|
||||
- Consulte [TROUBLESHOOTING.md](TROUBLESHOOTING.md) para problemas comuns
|
||||
- Pesquise [GitHub Issues](https://github.com/microsoft/Data-Science-For-Beginners/issues)
|
||||
- Junte-se ao nosso [Discord](https://aka.ms/ds4beginners/discord)
|
||||
- Revise [CONTRIBUTING.md](CONTRIBUTING.md) para relatar problemas ou contribuir
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,31 @@
|
||||
- Introdução
|
||||
- [Definindo Ciência de Dados](../1-Introduction/01-defining-data-science/README.md)
|
||||
- [Ética na Ciência de Dados](../1-Introduction/02-ethics/README.md)
|
||||
- [Definindo Dados](../1-Introduction/03-defining-data/README.md)
|
||||
- [Probabilidade e Estatística](../1-Introduction/04-stats-and-probability/README.md)
|
||||
- Trabalhando com Dados
|
||||
- [Bancos de Dados Relacionais](../2-Working-With-Data/05-relational-databases/README.md)
|
||||
- [Bancos de Dados Não Relacionais](../2-Working-With-Data/06-non-relational/README.md)
|
||||
- [Python](../2-Working-With-Data/07-python/README.md)
|
||||
- [Preparação de Dados](../2-Working-With-Data/08-data-preparation/README.md)
|
||||
- Visualização de Dados
|
||||
- [Visualizando Quantidades](../3-Data-Visualization/09-visualization-quantities/README.md)
|
||||
- [Visualizando Distribuições](../3-Data-Visualization/10-visualization-distributions/README.md)
|
||||
- [Visualizando Proporções](../3-Data-Visualization/11-visualization-proportions/README.md)
|
||||
- [Visualizando Relações](../3-Data-Visualization/12-visualization-relationships/README.md)
|
||||
- [Visualizações Significativas](../3-Data-Visualization/13-meaningful-visualizations/README.md)
|
||||
- Ciclo de Vida da Ciência de Dados
|
||||
- [Introdução](../4-Data-Science-Lifecycle/14-Introduction/README.md)
|
||||
- [Análise](../4-Data-Science-Lifecycle/15-analyzing/README.md)
|
||||
- [Comunicação](../4-Data-Science-Lifecycle/16-communication/README.md)
|
||||
- Ciência de Dados na Nuvem
|
||||
- [Introdução](../5-Data-Science-In-Cloud/17-Introduction/README.md)
|
||||
- [Low Code](../5-Data-Science-In-Cloud/18-Low-Code/README.md)
|
||||
- [Azure](../5-Data-Science-In-Cloud/19-Azure/README.md)
|
||||
- Ciência de Dados na Prática
|
||||
- [Ciência de Dados na Prática](../6-Data-Science-In-Wild/README.md)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,140 @@
|
||||
# Exemplos de Ciência de Dados para Iniciantes
|
||||
|
||||
Bem-vindo ao diretório de exemplos! Esta coleção de exemplos simples e bem comentados foi criada para ajudar você a começar com ciência de dados, mesmo que seja um completo iniciante.
|
||||
|
||||
## 📚 O Que Você Vai Encontrar Aqui
|
||||
|
||||
Cada exemplo é independente e inclui:
|
||||
- **Comentários claros** explicando cada etapa
|
||||
- **Código simples e legível** que demonstra um conceito de cada vez
|
||||
- **Contexto do mundo real** para ajudar você a entender quando e por que usar essas técnicas
|
||||
- **Saída esperada** para que você saiba o que procurar
|
||||
|
||||
## 🚀 Começando
|
||||
|
||||
### Pré-requisitos
|
||||
Antes de executar esses exemplos, certifique-se de ter:
|
||||
- Python 3.7 ou superior instalado
|
||||
- Entendimento básico de como executar scripts Python
|
||||
|
||||
### Instalando Bibliotecas Necessárias
|
||||
```bash
|
||||
pip install pandas numpy matplotlib
|
||||
```
|
||||
|
||||
## 📖 Visão Geral dos Exemplos
|
||||
|
||||
### 1. Hello World - Estilo Ciência de Dados
|
||||
**Arquivo:** `01_hello_world_data_science.py`
|
||||
|
||||
Seu primeiro programa de ciência de dados! Aprenda a:
|
||||
- Carregar um conjunto de dados simples
|
||||
- Exibir informações básicas sobre seus dados
|
||||
- Imprimir sua primeira saída de ciência de dados
|
||||
|
||||
Perfeito para iniciantes absolutos que querem ver seu primeiro programa de ciência de dados em ação.
|
||||
|
||||
---
|
||||
|
||||
### 2. Carregando e Explorando Dados
|
||||
**Arquivo:** `02_loading_data.py`
|
||||
|
||||
Aprenda os fundamentos de trabalhar com dados:
|
||||
- Ler dados de arquivos CSV
|
||||
- Visualizar as primeiras linhas do seu conjunto de dados
|
||||
- Obter estatísticas básicas sobre seus dados
|
||||
- Entender os tipos de dados
|
||||
|
||||
Este é frequentemente o primeiro passo em qualquer projeto de ciência de dados!
|
||||
|
||||
---
|
||||
|
||||
### 3. Análise Simples de Dados
|
||||
**Arquivo:** `03_simple_analysis.py`
|
||||
|
||||
Realize sua primeira análise de dados:
|
||||
- Calcular estatísticas básicas (média, mediana, moda)
|
||||
- Encontrar valores máximos e mínimos
|
||||
- Contar ocorrências de valores
|
||||
- Filtrar dados com base em condições
|
||||
|
||||
Veja como responder a perguntas simples sobre seus dados.
|
||||
|
||||
---
|
||||
|
||||
### 4. Noções Básicas de Visualização de Dados
|
||||
**Arquivo:** `04_basic_visualization.py`
|
||||
|
||||
Crie suas primeiras visualizações:
|
||||
- Fazer um gráfico de barras simples
|
||||
- Criar um gráfico de linha
|
||||
- Gerar um gráfico de pizza
|
||||
- Salvar suas visualizações como imagens
|
||||
|
||||
Aprenda a comunicar suas descobertas visualmente!
|
||||
|
||||
---
|
||||
|
||||
### 5. Trabalhando com Dados Reais
|
||||
**Arquivo:** `05_real_world_example.py`
|
||||
|
||||
Coloque tudo em prática com um exemplo completo:
|
||||
- Carregar dados reais do repositório
|
||||
- Limpar e preparar os dados
|
||||
- Realizar análise
|
||||
- Criar visualizações significativas
|
||||
- Tirar conclusões
|
||||
|
||||
Este exemplo mostra um fluxo de trabalho completo do início ao fim.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Como Usar Esses Exemplos
|
||||
|
||||
1. **Comece do início**: Os exemplos estão numerados em ordem de dificuldade. Comece com `01_hello_world_data_science.py` e avance.
|
||||
|
||||
2. **Leia os comentários**: Cada arquivo tem comentários detalhados explicando o que o código faz e por quê. Leia-os com atenção!
|
||||
|
||||
3. **Experimente**: Tente modificar o código. O que acontece se você mudar um valor? Quebre as coisas e conserte - é assim que você aprende!
|
||||
|
||||
4. **Execute o código**: Execute cada exemplo e observe a saída. Compare com o que você esperava.
|
||||
|
||||
5. **Construa sobre isso**: Depois de entender um exemplo, tente expandi-lo com suas próprias ideias.
|
||||
|
||||
## 💡 Dicas para Iniciantes
|
||||
|
||||
- **Não tenha pressa**: Dedique tempo para entender cada exemplo antes de passar para o próximo
|
||||
- **Digite o código você mesmo**: Não apenas copie e cole. Digitar ajuda você a aprender e memorizar
|
||||
- **Pesquise conceitos desconhecidos**: Se você vir algo que não entende, procure online ou nas lições principais
|
||||
- **Faça perguntas**: Participe do [fórum de discussão](https://github.com/microsoft/Data-Science-For-Beginners/discussions) se precisar de ajuda
|
||||
- **Pratique regularmente**: Tente codificar um pouco todos os dias, em vez de sessões longas uma vez por semana
|
||||
|
||||
## 🔗 Próximos Passos
|
||||
|
||||
Depois de completar esses exemplos, você estará pronto para:
|
||||
- Trabalhar nas lições principais do currículo
|
||||
- Tentar os exercícios em cada pasta de lição
|
||||
- Explorar os notebooks Jupyter para um aprendizado mais aprofundado
|
||||
- Criar seus próprios projetos de ciência de dados
|
||||
|
||||
## 📚 Recursos Adicionais
|
||||
|
||||
- [Currículo Principal](../README.md) - O curso completo de 20 lições
|
||||
- [Para Professores](../for-teachers.md) - Usando este currículo em sala de aula
|
||||
- [Microsoft Learn](https://docs.microsoft.com/learn/) - Recursos de aprendizado online gratuitos
|
||||
- [Documentação do Python](https://docs.python.org/3/) - Referência oficial do Python
|
||||
|
||||
## 🤝 Contribuindo
|
||||
|
||||
Encontrou um erro ou tem uma ideia para um novo exemplo? Aceitamos contribuições! Consulte nosso [Guia de Contribuição](../CONTRIBUTING.md).
|
||||
|
||||
---
|
||||
|
||||
**Boa aprendizagem! 🎉**
|
||||
|
||||
Lembre-se: Todo especialista já foi iniciante. Dê um passo de cada vez e não tenha medo de cometer erros - eles fazem parte do processo de aprendizado!
|
||||
|
||||
---
|
||||
|
||||
**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 oficial. 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.
|
||||
@ -0,0 +1,67 @@
|
||||
## Para Educadores
|
||||
|
||||
Gostaria de usar este currículo em sua sala de aula? Fique à vontade!
|
||||
|
||||
Na verdade, você pode utilizá-lo diretamente no GitHub, usando o GitHub Classroom.
|
||||
|
||||
Para isso, faça um fork deste repositório. Você precisará criar um repositório para cada aula, então será necessário extrair cada pasta para um repositório separado. Dessa forma, o [GitHub Classroom](https://classroom.github.com/classrooms) poderá identificar cada aula individualmente.
|
||||
|
||||
Estas [instruções completas](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) darão uma ideia de como configurar sua sala de aula.
|
||||
|
||||
## Usando o repositório como está
|
||||
|
||||
Se você preferir usar este repositório no formato atual, sem utilizar o GitHub Classroom, isso também é possível. Você precisará comunicar aos seus alunos qual aula trabalhar juntos.
|
||||
|
||||
Em um formato online (Zoom, Teams ou outro), você pode criar salas de grupo para os questionários e orientar os alunos para ajudá-los a se prepararem para aprender. Depois, convide os alunos para os questionários e peça que enviem suas respostas como 'issues' em um horário determinado. Você pode fazer o mesmo com as tarefas, caso queira que os alunos trabalhem colaborativamente de forma aberta.
|
||||
|
||||
Se preferir um formato mais privado, peça aos seus alunos que façam o fork do currículo, aula por aula, para seus próprios repositórios privados no GitHub, e concedam acesso a você. Assim, eles podem completar os questionários e tarefas de forma privada e enviá-los para você por meio de issues no repositório da sua sala de aula.
|
||||
|
||||
Existem muitas maneiras de fazer isso funcionar em um formato de sala de aula online. Por favor, nos informe o que funciona melhor para você!
|
||||
|
||||
## Incluído neste currículo:
|
||||
|
||||
20 aulas, 40 questionários e 20 tarefas. Sketchnotes acompanham as aulas para alunos que aprendem melhor visualmente. Muitas aulas estão disponíveis tanto em Python quanto em R e podem ser realizadas usando Jupyter notebooks no VS Code. Saiba mais sobre como configurar sua sala de aula para usar essa tecnologia: https://code.visualstudio.com/docs/datascience/jupyter-notebooks.
|
||||
|
||||
Todos os sketchnotes, incluindo um pôster em formato grande, estão nesta [pasta](../../sketchnotes).
|
||||
|
||||
Você também pode executar este currículo como um site independente e amigável para uso offline usando o [Docsify](https://docsify.js.org/#/). [Instale o Docsify](https://docsify.js.org/#/quickstart) em sua máquina local, depois, na pasta raiz da cópia local deste repositório, digite `docsify serve`. O site será servido na porta 3000 do seu localhost: `localhost:3000`.
|
||||
|
||||
Uma versão amigável para uso offline do currículo será aberta como uma página da web independente: https://localhost:3000
|
||||
|
||||
As aulas estão agrupadas em 6 partes:
|
||||
|
||||
- 1: Introdução
|
||||
- 1: Definindo Ciência de Dados
|
||||
- 2: Ética
|
||||
- 3: Definindo Dados
|
||||
- 4: Visão Geral de Probabilidade e Estatística
|
||||
- 2: Trabalhando com Dados
|
||||
- 5: Bancos de Dados Relacionais
|
||||
- 6: Bancos de Dados Não Relacionais
|
||||
- 7: Python
|
||||
- 8: Preparação de Dados
|
||||
- 3: Visualização de Dados
|
||||
- 9: Visualização de Quantidades
|
||||
- 10: Visualização de Distribuições
|
||||
- 11: Visualização de Proporções
|
||||
- 12: Visualização de Relações
|
||||
- 13: Visualizações Significativas
|
||||
- 4: Ciclo de Vida da Ciência de Dados
|
||||
- 14: Introdução
|
||||
- 15: Análise
|
||||
- 16: Comunicação
|
||||
- 5: Ciência de Dados na Nuvem
|
||||
- 17: Introdução
|
||||
- 18: Opções de Baixo Código
|
||||
- 19: Azure
|
||||
- 6: Ciência de Dados no Mundo Real
|
||||
- 20: Visão Geral
|
||||
|
||||
## Por favor, compartilhe suas opiniões!
|
||||
|
||||
Queremos que este currículo funcione para você e seus alunos. Por favor, envie-nos seu feedback nos fóruns de discussão! Sinta-se à vontade para criar uma área de sala de aula nos fóruns de discussão para seus alunos.
|
||||
|
||||
---
|
||||
|
||||
**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 automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,130 @@
|
||||
# Questionários
|
||||
|
||||
Esses questionários são os questionários pré e pós-aula para o currículo de ciência de dados em https://aka.ms/datascience-beginners
|
||||
|
||||
## Adicionando um conjunto de questionários traduzidos
|
||||
|
||||
Adicione uma tradução de questionário criando estruturas de questionários correspondentes nas pastas `assets/translations`. Os questionários originais estão em `assets/translations/en`. Os questionários estão divididos em vários agrupamentos. Certifique-se de alinhar a numeração com a seção correta do questionário. Há um total de 40 questionários neste currículo, começando a contagem em 0.
|
||||
|
||||
Após editar as traduções, edite o arquivo index.js na pasta de tradução para importar todos os arquivos seguindo as convenções em `en`.
|
||||
|
||||
Edite o arquivo `index.js` em `assets/translations` para importar os novos arquivos traduzidos.
|
||||
|
||||
Depois, edite o menu suspenso em `App.vue` neste aplicativo para adicionar seu idioma. Combine a abreviação localizada com o nome da pasta do seu idioma.
|
||||
|
||||
Por fim, edite todos os links dos questionários nas lições traduzidas, se existirem, para incluir essa localização como um parâmetro de consulta: `?loc=fr`, por exemplo.
|
||||
|
||||
## Configuração do projeto
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compila e recarrega automaticamente para desenvolvimento
|
||||
|
||||
```
|
||||
npm run serve
|
||||
```
|
||||
|
||||
### Compila e minimiza para produção
|
||||
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Verifica e corrige arquivos
|
||||
|
||||
```
|
||||
npm run lint
|
||||
```
|
||||
|
||||
### Personalizar configuração
|
||||
|
||||
Veja [Referência de Configuração](https://cli.vuejs.org/config/).
|
||||
|
||||
Créditos: Agradecimentos à versão original deste aplicativo de questionário: https://github.com/arpan45/simple-quiz-vue
|
||||
|
||||
## Implantando no Azure
|
||||
|
||||
Aqui está um guia passo a passo para ajudá-lo a começar:
|
||||
|
||||
1. Faça um fork do repositório GitHub
|
||||
Certifique-se de que o código do seu aplicativo web estático esteja no seu repositório GitHub. Faça um fork deste repositório.
|
||||
|
||||
2. Crie um aplicativo web estático no Azure
|
||||
- Crie uma [conta no Azure](http://azure.microsoft.com)
|
||||
- Acesse o [portal do Azure](https://portal.azure.com)
|
||||
- Clique em “Criar um recurso” e procure por “Aplicativo Web Estático”.
|
||||
- Clique em “Criar”.
|
||||
|
||||
3. Configure o aplicativo web estático
|
||||
- Básico:
|
||||
- Assinatura: Selecione sua assinatura do Azure.
|
||||
- Grupo de Recursos: Crie um novo grupo de recursos ou use um existente.
|
||||
- Nome: Forneça um nome para seu aplicativo web estático.
|
||||
- Região: Escolha a região mais próxima dos seus usuários.
|
||||
|
||||
- #### Detalhes de Implantação:
|
||||
- Fonte: Selecione “GitHub”.
|
||||
- Conta do GitHub: Autorize o Azure a acessar sua conta do GitHub.
|
||||
- Organização: Selecione sua organização no GitHub.
|
||||
- Repositório: Escolha o repositório que contém seu aplicativo web estático.
|
||||
- Branch: Selecione o branch do qual deseja implantar.
|
||||
|
||||
- #### Detalhes de Build:
|
||||
- Presets de Build: Escolha o framework com o qual seu aplicativo foi construído (por exemplo, React, Angular, Vue, etc.).
|
||||
- Localização do Aplicativo: Especifique a pasta que contém o código do seu aplicativo (por exemplo, / se estiver na raiz).
|
||||
- Localização da API: Se você tiver uma API, especifique sua localização (opcional).
|
||||
- Localização de Saída: Especifique a pasta onde a saída do build é gerada (por exemplo, build ou dist).
|
||||
|
||||
4. Revisar e Criar
|
||||
Revise suas configurações e clique em “Criar”. O Azure configurará os recursos necessários e criará um arquivo de workflow do GitHub Actions no seu repositório.
|
||||
|
||||
5. Workflow do GitHub Actions
|
||||
O Azure criará automaticamente um arquivo de workflow do GitHub Actions no seu repositório (.github/workflows/azure-static-web-apps-<nome>.yml). Este workflow lidará com o processo de build e implantação.
|
||||
|
||||
6. Monitorar a Implantação
|
||||
Acesse a aba “Actions” no seu repositório GitHub.
|
||||
Você deverá ver um workflow em execução. Este workflow irá construir e implantar seu aplicativo web estático no Azure.
|
||||
Assim que o workflow for concluído, seu aplicativo estará ativo no URL fornecido pelo Azure.
|
||||
|
||||
### Exemplo de Arquivo de Workflow
|
||||
|
||||
Aqui está um exemplo de como o arquivo de workflow do GitHub Actions pode ser:
|
||||
name: Azure Static Web Apps CI/CD
|
||||
```
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened, closed]
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build_and_deploy_job:
|
||||
runs-on: ubuntu-latest
|
||||
name: Build and Deploy Job
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build And Deploy
|
||||
id: builddeploy
|
||||
uses: Azure/static-web-apps-deploy@v1
|
||||
with:
|
||||
azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }}
|
||||
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
action: "upload"
|
||||
app_location: "quiz-app" # App source code path
|
||||
api_location: ""API source code path optional
|
||||
output_location: "dist" #Built app content directory - optional
|
||||
```
|
||||
|
||||
### Recursos Adicionais
|
||||
- [Documentação de Aplicativos Web Estáticos no Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started)
|
||||
- [Documentação do GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app)
|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,12 @@
|
||||
Encontre todos os sketchnotes aqui!
|
||||
|
||||
## Créditos
|
||||
|
||||
Nitya Narasimhan, artista
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
**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.
|
||||
@ -0,0 +1,422 @@
|
||||
{
|
||||
"1-Introduction/01-defining-data-science/README.md": {
|
||||
"original_hash": "43212cc1ac137b7bb1dcfb37ca06b0f4",
|
||||
"translation_date": "2025-10-25T18:48:59+00:00",
|
||||
"source_file": "1-Introduction/01-defining-data-science/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/01-defining-data-science/assignment.md": {
|
||||
"original_hash": "4e0f1773b9bee1be3b28f9fe2c71b3de",
|
||||
"translation_date": "2025-08-24T21:30:44+00:00",
|
||||
"source_file": "1-Introduction/01-defining-data-science/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/01-defining-data-science/solution/assignment.md": {
|
||||
"original_hash": "a8f79b9c0484c35b4f26e8aec7fc4d56",
|
||||
"translation_date": "2025-08-24T21:31:37+00:00",
|
||||
"source_file": "1-Introduction/01-defining-data-science/solution/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/02-ethics/README.md": {
|
||||
"original_hash": "58860ce9a4b8a564003d2752f7c72851",
|
||||
"translation_date": "2025-10-03T16:24:25+00:00",
|
||||
"source_file": "1-Introduction/02-ethics/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/02-ethics/assignment.md": {
|
||||
"original_hash": "b588c0fc73014f52520c666efc3e0cc3",
|
||||
"translation_date": "2025-08-24T21:24:48+00:00",
|
||||
"source_file": "1-Introduction/02-ethics/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/03-defining-data/README.md": {
|
||||
"original_hash": "12339119c0165da569a93ddba05f9339",
|
||||
"translation_date": "2025-09-05T13:28:26+00:00",
|
||||
"source_file": "1-Introduction/03-defining-data/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/03-defining-data/assignment.md": {
|
||||
"original_hash": "2e5cacb967c1e9dfd07809bfc441a0b4",
|
||||
"translation_date": "2025-08-24T21:35:18+00:00",
|
||||
"source_file": "1-Introduction/03-defining-data/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/04-stats-and-probability/README.md": {
|
||||
"original_hash": "ce95884566a74db72572cd51f0cb25ad",
|
||||
"translation_date": "2025-09-06T13:24:01+00:00",
|
||||
"source_file": "1-Introduction/04-stats-and-probability/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/04-stats-and-probability/assignment.md": {
|
||||
"original_hash": "01d1b493e8b51a6ebb42524f6b1bcfff",
|
||||
"translation_date": "2025-08-24T21:43:58+00:00",
|
||||
"source_file": "1-Introduction/04-stats-and-probability/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"1-Introduction/README.md": {
|
||||
"original_hash": "696a8474a01054281704cbfb09148949",
|
||||
"translation_date": "2025-08-24T21:14:50+00:00",
|
||||
"source_file": "1-Introduction/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/05-relational-databases/README.md": {
|
||||
"original_hash": "11739c7b40e7c6b16ad29e3df4e65862",
|
||||
"translation_date": "2025-12-19T11:12:33+00:00",
|
||||
"source_file": "2-Working-With-Data/05-relational-databases/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/05-relational-databases/assignment.md": {
|
||||
"original_hash": "25b37acdfb2452917c1aa2e2ca44317a",
|
||||
"translation_date": "2025-10-24T09:54:50+00:00",
|
||||
"source_file": "2-Working-With-Data/05-relational-databases/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/06-non-relational/README.md": {
|
||||
"original_hash": "c182e87f9f80be7e7cdffc7b40bbfccf",
|
||||
"translation_date": "2025-09-05T13:15:48+00:00",
|
||||
"source_file": "2-Working-With-Data/06-non-relational/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/06-non-relational/assignment.md": {
|
||||
"original_hash": "f824bfdb8b12d33293913f76f5c787c5",
|
||||
"translation_date": "2025-08-24T21:13:13+00:00",
|
||||
"source_file": "2-Working-With-Data/06-non-relational/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/07-python/README.md": {
|
||||
"original_hash": "7bfec050f4717dcc2dfd028aca9d21f3",
|
||||
"translation_date": "2025-09-06T15:38:59+00:00",
|
||||
"source_file": "2-Working-With-Data/07-python/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/07-python/assignment.md": {
|
||||
"original_hash": "dc8f035ce92e4eaa078ab19caa68267a",
|
||||
"translation_date": "2025-08-24T21:08:50+00:00",
|
||||
"source_file": "2-Working-With-Data/07-python/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/08-data-preparation/README.md": {
|
||||
"original_hash": "1b560955ff39a2bcf2a049fce474a951",
|
||||
"translation_date": "2025-09-05T13:18:39+00:00",
|
||||
"source_file": "2-Working-With-Data/08-data-preparation/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/08-data-preparation/assignment.md": {
|
||||
"original_hash": "f9d5a7275e046223fa6474477674b810",
|
||||
"translation_date": "2025-08-24T21:01:53+00:00",
|
||||
"source_file": "2-Working-With-Data/08-data-preparation/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"2-Working-With-Data/README.md": {
|
||||
"original_hash": "abc3309ab41bc5a7846f70ee1a055838",
|
||||
"translation_date": "2025-08-24T20:52:00+00:00",
|
||||
"source_file": "2-Working-With-Data/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/09-visualization-quantities/README.md": {
|
||||
"original_hash": "a49d78e32e280c410f04e5f2a2068e77",
|
||||
"translation_date": "2025-09-05T13:22:08+00:00",
|
||||
"source_file": "3-Data-Visualization/09-visualization-quantities/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/09-visualization-quantities/assignment.md": {
|
||||
"original_hash": "ad163c4fda72c8278280b61cad317ff4",
|
||||
"translation_date": "2025-08-24T23:03:32+00:00",
|
||||
"source_file": "3-Data-Visualization/09-visualization-quantities/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/10-visualization-distributions/README.md": {
|
||||
"original_hash": "80a20467e046d312809d008395051fc7",
|
||||
"translation_date": "2025-09-05T13:23:37+00:00",
|
||||
"source_file": "3-Data-Visualization/10-visualization-distributions/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/10-visualization-distributions/assignment.md": {
|
||||
"original_hash": "40eeb9b9f94009c537c7811f9f27f037",
|
||||
"translation_date": "2025-08-24T22:37:51+00:00",
|
||||
"source_file": "3-Data-Visualization/10-visualization-distributions/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/11-visualization-proportions/README.md": {
|
||||
"original_hash": "42119bcc97bee88254e381156d770f3c",
|
||||
"translation_date": "2025-09-05T13:21:41+00:00",
|
||||
"source_file": "3-Data-Visualization/11-visualization-proportions/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/11-visualization-proportions/assignment.md": {
|
||||
"original_hash": "1e00fe6a244c2f8f9a794c862661dd4f",
|
||||
"translation_date": "2025-08-24T23:07:06+00:00",
|
||||
"source_file": "3-Data-Visualization/11-visualization-proportions/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/12-visualization-relationships/README.md": {
|
||||
"original_hash": "0764fd4077f3f04a1d968ec371227744",
|
||||
"translation_date": "2025-09-06T11:35:11+00:00",
|
||||
"source_file": "3-Data-Visualization/12-visualization-relationships/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/12-visualization-relationships/assignment.md": {
|
||||
"original_hash": "680419753c086eef51be86607c623945",
|
||||
"translation_date": "2025-08-24T22:41:51+00:00",
|
||||
"source_file": "3-Data-Visualization/12-visualization-relationships/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/13-meaningful-visualizations/README.md": {
|
||||
"original_hash": "cfb068050337a36e348debaa502a24fa",
|
||||
"translation_date": "2025-09-05T13:22:36+00:00",
|
||||
"source_file": "3-Data-Visualization/13-meaningful-visualizations/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/13-meaningful-visualizations/assignment.md": {
|
||||
"original_hash": "e56df4c0f49357e30ac8fc77aa439dd4",
|
||||
"translation_date": "2025-08-24T22:33:17+00:00",
|
||||
"source_file": "3-Data-Visualization/13-meaningful-visualizations/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/13-meaningful-visualizations/solution/README.md": {
|
||||
"original_hash": "5c51a54dd89075a7a362890117b7ed9e",
|
||||
"translation_date": "2025-08-24T22:34:24+00:00",
|
||||
"source_file": "3-Data-Visualization/13-meaningful-visualizations/solution/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/13-meaningful-visualizations/starter/README.md": {
|
||||
"original_hash": "5c51a54dd89075a7a362890117b7ed9e",
|
||||
"translation_date": "2025-08-24T22:33:52+00:00",
|
||||
"source_file": "3-Data-Visualization/13-meaningful-visualizations/starter/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/R/09-visualization-quantities/README.md": {
|
||||
"original_hash": "22acf28f518a4769ea14fa42f4734b9f",
|
||||
"translation_date": "2025-08-24T22:48:55+00:00",
|
||||
"source_file": "3-Data-Visualization/R/09-visualization-quantities/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/R/09-visualization-quantities/assignment.md": {
|
||||
"original_hash": "0ea21b6513df5ade7419c6b7d65f10b1",
|
||||
"translation_date": "2025-08-24T22:53:31+00:00",
|
||||
"source_file": "3-Data-Visualization/R/09-visualization-quantities/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/R/10-visualization-distributions/README.md": {
|
||||
"original_hash": "ea67c0c40808fd723594de6896c37ccf",
|
||||
"translation_date": "2025-08-24T22:42:28+00:00",
|
||||
"source_file": "3-Data-Visualization/R/10-visualization-distributions/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/R/10-visualization-distributions/assignment.md": {
|
||||
"original_hash": "a233d542512136c4dd29aad38ca0175f",
|
||||
"translation_date": "2025-08-24T22:45:09+00:00",
|
||||
"source_file": "3-Data-Visualization/R/10-visualization-distributions/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/R/11-visualization-proportions/README.md": {
|
||||
"original_hash": "47028abaaafa2bcb1079702d20569066",
|
||||
"translation_date": "2025-08-24T22:57:22+00:00",
|
||||
"source_file": "3-Data-Visualization/R/11-visualization-proportions/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/R/12-visualization-relationships/README.md": {
|
||||
"original_hash": "a33c5d4b4156a2b41788d8720b6f724c",
|
||||
"translation_date": "2025-08-24T22:45:47+00:00",
|
||||
"source_file": "3-Data-Visualization/R/12-visualization-relationships/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/R/13-meaningful-vizualizations/README.md": {
|
||||
"original_hash": "b4039f1c76548d144a0aee0bf28304ec",
|
||||
"translation_date": "2025-08-24T22:54:08+00:00",
|
||||
"source_file": "3-Data-Visualization/R/13-meaningful-vizualizations/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"3-Data-Visualization/README.md": {
|
||||
"original_hash": "1441550a0d789796b2821e04f7f4cc94",
|
||||
"translation_date": "2025-08-24T22:28:29+00:00",
|
||||
"source_file": "3-Data-Visualization/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"4-Data-Science-Lifecycle/14-Introduction/README.md": {
|
||||
"original_hash": "07e12a25d20b8f191e3cb651c27fdb2b",
|
||||
"translation_date": "2025-09-06T20:49:16+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/14-Introduction/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"4-Data-Science-Lifecycle/14-Introduction/assignment.md": {
|
||||
"original_hash": "564445c39ad29a491abcb9356fc4d47d",
|
||||
"translation_date": "2025-08-24T22:17:01+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/14-Introduction/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"4-Data-Science-Lifecycle/15-analyzing/README.md": {
|
||||
"original_hash": "661dad02c3ac239644d34c1eb51e76f8",
|
||||
"translation_date": "2025-09-06T20:48:39+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/15-analyzing/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"4-Data-Science-Lifecycle/15-analyzing/assignment.md": {
|
||||
"original_hash": "fcc7547171f4530f159676dd73ed772e",
|
||||
"translation_date": "2025-08-24T22:19:44+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/15-analyzing/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"4-Data-Science-Lifecycle/16-communication/README.md": {
|
||||
"original_hash": "215a3254ba5a222a57c5bb0192cea8e3",
|
||||
"translation_date": "2025-09-06T20:49:37+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/16-communication/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"4-Data-Science-Lifecycle/16-communication/assignment.md": {
|
||||
"original_hash": "8980d7efd101c82d6d6ffc3458214120",
|
||||
"translation_date": "2025-08-24T22:27:53+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/16-communication/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"4-Data-Science-Lifecycle/README.md": {
|
||||
"original_hash": "dd173fd30fc039a7a299898920680723",
|
||||
"translation_date": "2025-08-24T22:13:38+00:00",
|
||||
"source_file": "4-Data-Science-Lifecycle/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"5-Data-Science-In-Cloud/17-Introduction/README.md": {
|
||||
"original_hash": "5f8e7cdefa096664ae86f795be571580",
|
||||
"translation_date": "2025-09-05T13:13:56+00:00",
|
||||
"source_file": "5-Data-Science-In-Cloud/17-Introduction/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"5-Data-Science-In-Cloud/17-Introduction/assignment.md": {
|
||||
"original_hash": "96f3696153d9ed54b19a1bb65438c104",
|
||||
"translation_date": "2025-08-24T22:04:45+00:00",
|
||||
"source_file": "5-Data-Science-In-Cloud/17-Introduction/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"5-Data-Science-In-Cloud/18-Low-Code/README.md": {
|
||||
"original_hash": "bd4da10766c64fce4294a98f6479dfb0",
|
||||
"translation_date": "2025-09-05T13:12:51+00:00",
|
||||
"source_file": "5-Data-Science-In-Cloud/18-Low-Code/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"5-Data-Science-In-Cloud/18-Low-Code/assignment.md": {
|
||||
"original_hash": "8fdc4a5fd9bc27a8d2ebef995dfbf73f",
|
||||
"translation_date": "2025-08-24T22:01:20+00:00",
|
||||
"source_file": "5-Data-Science-In-Cloud/18-Low-Code/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"5-Data-Science-In-Cloud/19-Azure/README.md": {
|
||||
"original_hash": "472d3fab1c5be50f387336e7a686dbe1",
|
||||
"translation_date": "2025-09-05T13:15:05+00:00",
|
||||
"source_file": "5-Data-Science-In-Cloud/19-Azure/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"5-Data-Science-In-Cloud/19-Azure/assignment.md": {
|
||||
"original_hash": "386efdbc19786951341f6956247ee990",
|
||||
"translation_date": "2025-08-24T22:11:16+00:00",
|
||||
"source_file": "5-Data-Science-In-Cloud/19-Azure/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"5-Data-Science-In-Cloud/README.md": {
|
||||
"original_hash": "8dfe141a0f46f7d253e07f74913c7f44",
|
||||
"translation_date": "2025-08-24T21:52:21+00:00",
|
||||
"source_file": "5-Data-Science-In-Cloud/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"6-Data-Science-In-Wild/20-Real-World-Examples/README.md": {
|
||||
"original_hash": "0f67a4139454816631526779a456b734",
|
||||
"translation_date": "2025-09-06T18:26:19+00:00",
|
||||
"source_file": "6-Data-Science-In-Wild/20-Real-World-Examples/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"6-Data-Science-In-Wild/20-Real-World-Examples/assignment.md": {
|
||||
"original_hash": "d1e05715f9d97de6c4f1fb0c5a4702c0",
|
||||
"translation_date": "2025-08-24T21:51:21+00:00",
|
||||
"source_file": "6-Data-Science-In-Wild/20-Real-World-Examples/assignment.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"6-Data-Science-In-Wild/README.md": {
|
||||
"original_hash": "07faf02ff163e609edf0b0308dc5d4e6",
|
||||
"translation_date": "2025-08-24T21:45:23+00:00",
|
||||
"source_file": "6-Data-Science-In-Wild/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"AGENTS.md": {
|
||||
"original_hash": "cc2e18ab65df63e75d3619c4752e9b22",
|
||||
"translation_date": "2025-10-03T11:15:58+00:00",
|
||||
"source_file": "AGENTS.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"CODE_OF_CONDUCT.md": {
|
||||
"original_hash": "c06b12caf3c901eb3156e3dd5b0aea56",
|
||||
"translation_date": "2025-08-24T20:49:27+00:00",
|
||||
"source_file": "CODE_OF_CONDUCT.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"CONTRIBUTING.md": {
|
||||
"original_hash": "10f86fb29b5407088445ac803b3d0ed1",
|
||||
"translation_date": "2025-10-03T13:52:25+00:00",
|
||||
"source_file": "CONTRIBUTING.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"INSTALLATION.md": {
|
||||
"original_hash": "a64d8afa22ffcc2016bb239188d6acb1",
|
||||
"translation_date": "2025-10-03T15:19:15+00:00",
|
||||
"source_file": "INSTALLATION.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"README.md": {
|
||||
"original_hash": "8ec92ecfeb14923af733851239552146",
|
||||
"translation_date": "2026-01-30T01:38:26+00:00",
|
||||
"source_file": "README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"SECURITY.md": {
|
||||
"original_hash": "0d575483100c332b2dbaefef915bb3c4",
|
||||
"translation_date": "2025-08-24T20:50:01+00:00",
|
||||
"source_file": "SECURITY.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"SUPPORT.md": {
|
||||
"original_hash": "872be8bc1b93ef1dd9ac3d6e8f99f6ab",
|
||||
"translation_date": "2025-08-24T20:47:20+00:00",
|
||||
"source_file": "SUPPORT.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"TROUBLESHOOTING.md": {
|
||||
"original_hash": "93a6a8a8a209128cbfedcbc076ee21b0",
|
||||
"translation_date": "2025-10-03T15:37:19+00:00",
|
||||
"source_file": "TROUBLESHOOTING.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"USAGE.md": {
|
||||
"original_hash": "f546349678757508d69ce9e1d2688446",
|
||||
"translation_date": "2025-10-03T15:00:52+00:00",
|
||||
"source_file": "USAGE.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"docs/_sidebar.md": {
|
||||
"original_hash": "3767555b3cc28a2865c79202f4374204",
|
||||
"translation_date": "2025-08-24T21:13:53+00:00",
|
||||
"source_file": "docs/_sidebar.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"examples/README.md": {
|
||||
"original_hash": "9bef7fd96c8f262339933117d9b3e342",
|
||||
"translation_date": "2025-10-03T13:00:51+00:00",
|
||||
"source_file": "examples/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"for-teachers.md": {
|
||||
"original_hash": "f7440be10c17a8a9262713af3d2818a9",
|
||||
"translation_date": "2025-09-06T19:55:49+00:00",
|
||||
"source_file": "for-teachers.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"quiz-app/README.md": {
|
||||
"original_hash": "e92c33ea498915a13c9aec162616db18",
|
||||
"translation_date": "2025-08-24T22:12:01+00:00",
|
||||
"source_file": "quiz-app/README.md",
|
||||
"language_code": "pt-PT"
|
||||
},
|
||||
"sketchnotes/README.md": {
|
||||
"original_hash": "3a848466cb63aff1a93411affb152c2a",
|
||||
"translation_date": "2025-08-24T21:44:55+00:00",
|
||||
"source_file": "sketchnotes/README.md",
|
||||
"language_code": "pt-PT"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,167 @@
|
||||
# Definindo Ciência de Dados
|
||||
|
||||
| ](../../sketchnotes/01-Definitions.png) |
|
||||
| :----------------------------------------------------------------------------------------------------: |
|
||||
| Definindo Ciência de Dados - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
---
|
||||
|
||||
[](https://youtu.be/beZ7Mb_oz9I)
|
||||
|
||||
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/0)
|
||||
|
||||
## O que é Dados?
|
||||
No nosso dia a dia, estamos constantemente rodeados por dados. O texto que está a ler agora é um dado. A lista de números de telefone dos seus amigos no seu smartphone é um dado, assim como a hora atual exibida no seu relógio. Como seres humanos, operamos naturalmente com dados ao contar o dinheiro que temos ou ao escrever cartas para os nossos amigos.
|
||||
|
||||
No entanto, os dados tornaram-se muito mais críticos com a criação dos computadores. A principal função dos computadores é realizar cálculos, mas eles precisam de dados para operar. Assim, precisamos entender como os computadores armazenam e processam dados.
|
||||
|
||||
Com o surgimento da Internet, o papel dos computadores como dispositivos de manipulação de dados aumentou. Se pensar bem, agora usamos os computadores cada vez mais para processamento e comunicação de dados, em vez de cálculos propriamente ditos. Quando escrevemos um e-mail para um amigo ou pesquisamos alguma informação na Internet - estamos essencialmente a criar, armazenar, transmitir e manipular dados.
|
||||
> Consegue lembrar-se da última vez que usou um computador para realmente calcular algo?
|
||||
|
||||
## O que é Ciência de Dados?
|
||||
|
||||
Na [Wikipedia](https://en.wikipedia.org/wiki/Data_science), **Ciência de Dados** é definida como *um campo científico que utiliza métodos científicos para extrair conhecimento e insights de dados estruturados e não estruturados, e aplicar conhecimento e insights acionáveis a partir de dados em uma ampla gama de domínios de aplicação*.
|
||||
|
||||
Esta definição destaca os seguintes aspetos importantes da ciência de dados:
|
||||
|
||||
* O principal objetivo da ciência de dados é **extrair conhecimento** dos dados, ou seja, **compreender** os dados, encontrar algumas relações ocultas e construir um **modelo**.
|
||||
* A ciência de dados utiliza **métodos científicos**, como probabilidade e estatística. Na verdade, quando o termo *ciência de dados* foi introduzido pela primeira vez, algumas pessoas argumentaram que ciência de dados era apenas um novo nome sofisticado para estatística. Hoje em dia, tornou-se evidente que o campo é muito mais amplo.
|
||||
* O conhecimento obtido deve ser aplicado para produzir **insights acionáveis**, ou seja, insights práticos que podem ser aplicados a situações reais de negócios.
|
||||
* Devemos ser capazes de operar tanto com dados **estruturados** quanto **não estruturados**. Voltaremos a discutir os diferentes tipos de dados mais tarde no curso.
|
||||
* **Domínio de aplicação** é um conceito importante, e os cientistas de dados frequentemente precisam de algum grau de especialização no domínio do problema, por exemplo: finanças, medicina, marketing, etc.
|
||||
|
||||
> Outro aspeto importante da Ciência de Dados é que ela estuda como os dados podem ser recolhidos, armazenados e manipulados usando computadores. Enquanto a estatística nos fornece fundamentos matemáticos, a ciência de dados aplica conceitos matemáticos para realmente extrair insights dos dados.
|
||||
|
||||
Uma das formas (atribuída a [Jim Gray](https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist))) de olhar para a ciência de dados é considerá-la como um paradigma separado da ciência:
|
||||
* **Empírico**, no qual confiamos principalmente em observações e resultados de experiências
|
||||
* **Teórico**, onde novos conceitos emergem do conhecimento científico existente
|
||||
* **Computacional**, onde descobrimos novos princípios com base em algumas experiências computacionais
|
||||
* **Baseado em Dados**, baseado na descoberta de relações e padrões nos dados
|
||||
|
||||
## Outros Campos Relacionados
|
||||
|
||||
Como os dados são omnipresentes, a ciência de dados também é um campo amplo, tocando muitas outras disciplinas.
|
||||
|
||||
<dl>
|
||||
<dt>Bases de Dados</dt>
|
||||
<dd>
|
||||
Uma consideração crítica é <b>como armazenar</b> os dados, ou seja, como estruturá-los de forma a permitir um processamento mais rápido. Existem diferentes tipos de bases de dados que armazenam dados estruturados e não estruturados, que <a href="../../2-Working-With-Data/README.md">consideraremos no nosso curso</a>.
|
||||
</dd>
|
||||
<dt>Big Data</dt>
|
||||
<dd>
|
||||
Frequentemente precisamos armazenar e processar grandes quantidades de dados com uma estrutura relativamente simples. Existem abordagens e ferramentas especiais para armazenar esses dados de forma distribuída em um cluster de computadores e processá-los de forma eficiente.
|
||||
</dd>
|
||||
<dt>Aprendizagem Automática</dt>
|
||||
<dd>
|
||||
Uma maneira de entender os dados é <b>construir um modelo</b> que seja capaz de prever um resultado desejado. Desenvolver modelos a partir de dados é chamado de <b>aprendizagem automática</b>. Pode querer dar uma olhada no nosso <a href="https://aka.ms/ml-beginners">Currículo de Aprendizagem Automática para Iniciantes</a> para aprender mais sobre isso.
|
||||
</dd>
|
||||
<dt>Inteligência Artificial</dt>
|
||||
<dd>
|
||||
Uma área da aprendizagem automática conhecida como inteligência artificial (IA) também depende de dados, e envolve a construção de modelos de alta complexidade que imitam processos de pensamento humano. Métodos de IA frequentemente permitem transformar dados não estruturados (por exemplo, linguagem natural) em insights estruturados.
|
||||
</dd>
|
||||
<dt>Visualização</dt>
|
||||
<dd>
|
||||
Grandes quantidades de dados são incompreensíveis para um ser humano, mas, uma vez que criamos visualizações úteis usando esses dados, podemos entender melhor os dados e tirar algumas conclusões. Assim, é importante conhecer muitas maneiras de visualizar informações - algo que abordaremos na <a href="../../3-Data-Visualization/README.md">Seção 3</a> do nosso curso. Campos relacionados também incluem <b>Infográficos</b> e <b>Interação Humano-Computador</b> em geral.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
## Tipos de Dados
|
||||
|
||||
Como já mencionámos, os dados estão em todo lugar. Só precisamos capturá-los da maneira certa! É útil distinguir entre dados **estruturados** e **não estruturados**. Os primeiros são geralmente representados de forma bem estruturada, muitas vezes como uma tabela ou várias tabelas, enquanto os últimos são apenas uma coleção de arquivos. Às vezes também podemos falar de dados **semi-estruturados**, que têm algum tipo de estrutura que pode variar bastante.
|
||||
|
||||
| Estruturados | Semi-estruturados | Não estruturados |
|
||||
| ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------- |
|
||||
| Lista de pessoas com os seus números de telefone | Páginas da Wikipedia com links | Texto da Enciclopédia Britânica |
|
||||
| Temperatura em todas as salas de um edifício a cada minuto nos últimos 20 anos | Coleção de artigos científicos em formato JSON com autores, data de publicação e resumo | Arquivo de vídeos de câmaras de segurança |
|
||||
| Dados sobre idade e género de todas as pessoas que entram no edifício | Páginas da Internet | Vídeo bruto de câmaras de vigilância |
|
||||
|
||||
## Onde obter Dados
|
||||
|
||||
Existem muitas fontes possíveis de dados, e seria impossível listar todas elas! No entanto, vamos mencionar alguns dos lugares típicos onde pode obter dados:
|
||||
|
||||
* **Estruturados**
|
||||
- **Internet das Coisas** (IoT), incluindo dados de diferentes sensores, como sensores de temperatura ou pressão, fornece muitos dados úteis. Por exemplo, se um edifício de escritórios estiver equipado com sensores IoT, podemos controlar automaticamente o aquecimento e a iluminação para minimizar os custos.
|
||||
- **Inquéritos** que pedimos aos utilizadores para preencherem após uma compra ou após visitar um site.
|
||||
- **Análise de comportamento** pode, por exemplo, ajudar-nos a entender até que ponto um utilizador navega num site e qual é o motivo típico para sair do site.
|
||||
* **Não estruturados**
|
||||
- **Textos** podem ser uma rica fonte de insights, como um **índice de sentimento geral**, ou extração de palavras-chave e significado semântico.
|
||||
- **Imagens** ou **Vídeos**. Um vídeo de uma câmara de vigilância pode ser usado para estimar o tráfego na estrada e informar as pessoas sobre possíveis engarrafamentos.
|
||||
- **Registos de servidores web** podem ser usados para entender quais páginas do nosso site são mais frequentemente visitadas e por quanto tempo.
|
||||
* Semi-estruturados
|
||||
- **Grafos de Redes Sociais** podem ser ótimas fontes de dados sobre personalidades dos utilizadores e eficácia potencial na disseminação de informações.
|
||||
- Quando temos um monte de fotografias de uma festa, podemos tentar extrair dados de **Dinâmica de Grupo** construindo um grafo de pessoas que tiraram fotos umas com as outras.
|
||||
|
||||
Ao conhecer diferentes fontes possíveis de dados, pode tentar pensar em diferentes cenários onde as técnicas de ciência de dados podem ser aplicadas para entender melhor a situação e melhorar os processos de negócios.
|
||||
|
||||
## O que pode fazer com Dados
|
||||
|
||||
Na Ciência de Dados, focamo-nos nos seguintes passos da jornada dos dados:
|
||||
|
||||
<dl>
|
||||
<dt>1) Aquisição de Dados</dt>
|
||||
<dd>
|
||||
O primeiro passo é recolher os dados. Embora em muitos casos isso possa ser um processo direto, como dados que chegam a uma base de dados a partir de uma aplicação web, às vezes precisamos usar técnicas especiais. Por exemplo, dados de sensores IoT podem ser avassaladores, e é uma boa prática usar pontos de buffer como o IoT Hub para recolher todos os dados antes de os processar.
|
||||
</dd>
|
||||
<dt>2) Armazenamento de Dados</dt>
|
||||
<dd>
|
||||
Armazenar dados pode ser desafiador, especialmente se estivermos a falar de big data. Ao decidir como armazenar dados, faz sentido antecipar a forma como gostaria de consultar os dados no futuro. Existem várias maneiras de armazenar dados:
|
||||
<ul>
|
||||
<li>Uma base de dados relacional armazena uma coleção de tabelas e usa uma linguagem especial chamada SQL para consultá-las. Normalmente, as tabelas são organizadas em diferentes grupos chamados esquemas. Em muitos casos, precisamos converter os dados da forma original para se ajustarem ao esquema.</li>
|
||||
<li><a href="https://en.wikipedia.org/wiki/NoSQL">Uma base de dados NoSQL</a>, como <a href="https://azure.microsoft.com/services/cosmos-db/?WT.mc_id=academic-77958-bethanycheum">CosmosDB</a>, não impõe esquemas aos dados e permite armazenar dados mais complexos, por exemplo, documentos JSON hierárquicos ou grafos. No entanto, bases de dados NoSQL não têm as capacidades de consulta ricas do SQL e não podem impor integridade referencial, ou seja, regras sobre como os dados são estruturados em tabelas e governam as relações entre tabelas.</li>
|
||||
<li><a href="https://en.wikipedia.org/wiki/Data_lake">Armazenamento em Data Lake</a> é usado para grandes coleções de dados em forma bruta e não estruturada. Os data lakes são frequentemente usados com big data, onde todos os dados não podem caber em uma única máquina e precisam ser armazenados e processados por um cluster de servidores. <a href="https://en.wikipedia.org/wiki/Apache_Parquet">Parquet</a> é o formato de dados frequentemente usado em conjunto com big data.</li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt>3) Processamento de Dados</dt>
|
||||
<dd>
|
||||
Esta é a parte mais emocionante da jornada dos dados, que envolve converter os dados da sua forma original para uma forma que possa ser usada para visualização/treino de modelos. Ao lidar com dados não estruturados, como texto ou imagens, podemos precisar usar algumas técnicas de IA para extrair <b>características</b> dos dados, convertendo-os assim para uma forma estruturada.
|
||||
</dd>
|
||||
<dt>4) Visualização / Insights Humanos</dt>
|
||||
<dd>
|
||||
Muitas vezes, para entender os dados, precisamos visualizá-los. Tendo muitas técnicas diferentes de visualização na nossa caixa de ferramentas, podemos encontrar a visão certa para obter um insight. Frequentemente, um cientista de dados precisa "brincar com os dados", visualizando-os várias vezes e procurando algumas relações. Além disso, podemos usar técnicas estatísticas para testar hipóteses ou provar uma correlação entre diferentes partes dos dados.
|
||||
</dd>
|
||||
<dt>5) Treino de um modelo preditivo</dt>
|
||||
<dd>
|
||||
Como o objetivo final da ciência de dados é ser capaz de tomar decisões com base nos dados, podemos querer usar as técnicas de <a href="http://github.com/microsoft/ml-for-beginners">Aprendizagem Automática</a> para construir um modelo preditivo. Podemos então usá-lo para fazer previsões usando novos conjuntos de dados com estruturas semelhantes.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
Claro, dependendo dos dados reais, alguns passos podem estar ausentes (por exemplo, quando já temos os dados na base de dados ou quando não precisamos de treino de modelo), ou alguns passos podem ser repetidos várias vezes (como o processamento de dados).
|
||||
|
||||
## Digitalização e Transformação Digital
|
||||
|
||||
Na última década, muitas empresas começaram a entender a importância dos dados na tomada de decisões empresariais. Para aplicar os princípios da ciência de dados na gestão de um negócio, primeiro é necessário recolher alguns dados, ou seja, traduzir os processos empresariais para uma forma digital. Isso é conhecido como **digitalização**. Aplicar técnicas de ciência de dados a esses dados para orientar decisões pode levar a aumentos significativos na produtividade (ou até mesmo a uma mudança de rumo nos negócios), chamado de **transformação digital**.
|
||||
|
||||
Vamos considerar um exemplo. Suponha que temos um curso de ciência de dados (como este) que oferecemos online aos alunos e queremos usar a ciência de dados para melhorá-lo. Como podemos fazer isso?
|
||||
|
||||
Podemos começar por perguntar "O que pode ser digitalizado?" A maneira mais simples seria medir o tempo que cada aluno leva para concluir cada módulo e medir o conhecimento adquirido dando um teste de múltipla escolha no final de cada módulo. Ao calcular a média do tempo de conclusão entre todos os alunos, podemos descobrir quais módulos causam mais dificuldades e trabalhar para simplificá-los.
|
||||
> Pode argumentar que esta abordagem não é ideal, porque os módulos podem ter comprimentos diferentes. Provavelmente é mais justo dividir o tempo pelo comprimento do módulo (em número de caracteres) e comparar esses valores em vez disso.
|
||||
|
||||
Quando começamos a analisar os resultados de testes de escolha múltipla, podemos tentar determinar quais conceitos os alunos têm dificuldade em compreender e usar essa informação para melhorar o conteúdo. Para isso, precisamos projetar os testes de forma que cada pergunta esteja associada a um determinado conceito ou bloco de conhecimento.
|
||||
|
||||
Se quisermos ser ainda mais detalhados, podemos traçar o tempo gasto em cada módulo em relação à faixa etária dos alunos. Podemos descobrir que, para algumas faixas etárias, leva um tempo excessivamente longo para concluir o módulo ou que os alunos desistem antes de o terminar. Isso pode ajudar-nos a fornecer recomendações de idade para o módulo e minimizar a insatisfação das pessoas devido a expectativas erradas.
|
||||
|
||||
## 🚀 Desafio
|
||||
|
||||
Neste desafio, vamos tentar encontrar conceitos relevantes para o campo da Ciência de Dados analisando textos. Vamos pegar um artigo da Wikipédia sobre Ciência de Dados, descarregar e processar o texto e, em seguida, criar uma nuvem de palavras como esta:
|
||||
|
||||

|
||||
|
||||
Visite [`notebook.ipynb`](../../../../1-Introduction/01-defining-data-science/notebook.ipynb ':ignore') para ler o código. Também pode executar o código e ver como ele realiza todas as transformações de dados em tempo real.
|
||||
|
||||
> Se não souber como executar código num Jupyter Notebook, veja [este artigo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
|
||||
|
||||
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/1)
|
||||
|
||||
## Tarefas
|
||||
|
||||
* **Tarefa 1**: Modifique o código acima para descobrir conceitos relacionados aos campos de **Big Data** e **Machine Learning**
|
||||
* **Tarefa 2**: [Pense em Cenários de Ciência de Dados](assignment.md)
|
||||
|
||||
## Créditos
|
||||
|
||||
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 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 autoritária. Para informações críticas, recomenda-se uma tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução.
|
||||
@ -0,0 +1,35 @@
|
||||
# Tarefa: Cenários de Ciência de Dados
|
||||
|
||||
Nesta primeira tarefa, pedimos que pense em algum processo ou problema da vida real em diferentes domínios de problemas, e como pode melhorá-lo utilizando o processo de Ciência de Dados. Pense no seguinte:
|
||||
|
||||
1. Que dados pode recolher?
|
||||
1. Como os recolheria?
|
||||
1. Como armazenaria os dados? Qual seria o provável volume dos dados?
|
||||
1. Que insights poderia obter a partir desses dados? Que decisões poderíamos tomar com base nos dados?
|
||||
|
||||
Tente pensar em 3 problemas/processos diferentes e descreva cada um dos pontos acima para cada domínio de problema.
|
||||
|
||||
Aqui estão alguns domínios de problemas e questões que podem ajudá-lo a começar a pensar:
|
||||
|
||||
1. Como pode usar dados para melhorar o processo educativo das crianças nas escolas?
|
||||
1. Como pode usar dados para controlar a vacinação durante a pandemia?
|
||||
1. Como pode usar dados para garantir que está a ser produtivo no trabalho?
|
||||
|
||||
## Instruções
|
||||
|
||||
Preencha a tabela seguinte (substitua os domínios de problemas sugeridos pelos seus próprios, se necessário):
|
||||
|
||||
| Domínio do Problema | Problema | Que dados recolher | Como armazenar os dados | Que insights/decisões podemos tomar |
|
||||
|----------------------|----------|--------------------|--------------------------|-------------------------------------|
|
||||
| Educação | | | | |
|
||||
| Vacinação | | | | |
|
||||
| Produtividade | | | | |
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa de Melhorias
|
||||
--- | --- | --- |
|
||||
Foi capaz de identificar fontes de dados razoáveis, formas de armazenar os dados e possíveis decisões/insights para todos os domínios de problemas | Alguns aspetos da solução não estão detalhados, o armazenamento de dados não é discutido, pelo menos 2 domínios de problemas são descritos | Apenas partes da solução de dados são descritas, apenas um domínio de problema é considerado.
|
||||
|
||||
**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 notar 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.
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,37 @@
|
||||
# Tarefa: Cenários de Ciência de Dados
|
||||
|
||||
Nesta primeira tarefa, pedimos que pense em algum processo ou problema da vida real em diferentes domínios de problemas, e como pode melhorá-lo utilizando o processo de Ciência de Dados. Pense no seguinte:
|
||||
|
||||
1. Que dados pode recolher?
|
||||
1. Como os recolheria?
|
||||
1. Como armazenaria os dados? Qual seria o provável volume dos dados?
|
||||
1. Que insights poderia obter a partir desses dados? Que decisões poderíamos tomar com base nos dados?
|
||||
|
||||
Tente pensar em 3 problemas/processos diferentes e descreva cada um dos pontos acima para cada domínio de problema.
|
||||
|
||||
Aqui estão alguns domínios de problemas e questões que podem ajudá-lo a começar a pensar:
|
||||
|
||||
1. Como pode usar dados para melhorar o processo educativo das crianças nas escolas?
|
||||
1. Como pode usar dados para controlar a vacinação durante a pandemia?
|
||||
1. Como pode usar dados para garantir que está a ser produtivo no trabalho?
|
||||
|
||||
## Instruções
|
||||
|
||||
Preencha a tabela seguinte (substitua os domínios de problemas sugeridos pelos seus próprios, se necessário):
|
||||
|
||||
| Domínio do Problema | Problema | Que dados recolher | Como armazenar os dados | Que insights/decisões podemos tomar |
|
||||
|----------------------|----------|--------------------|--------------------------|-------------------------------------|
|
||||
| Educação | Na universidade, temos tipicamente baixa frequência às aulas, e temos a hipótese de que os estudantes que assistem às aulas, em média, têm melhor desempenho nos exames. Queremos estimular a frequência e testar a hipótese. | Podemos monitorizar a frequência através de fotografias tiradas pela câmara de segurança na sala de aula, ou rastreando os endereços bluetooth/wifi dos telemóveis dos estudantes na sala. Os dados dos exames já estão disponíveis na base de dados da universidade. | Caso monitorizemos imagens da câmara de segurança - precisamos armazenar algumas (5-10) fotografias durante a aula (dados não estruturados), e depois usar IA para identificar os rostos dos estudantes (converter os dados para formato estruturado). | Podemos calcular a frequência média de cada estudante e verificar se há alguma correlação com as notas dos exames. Falaremos mais sobre correlação na secção de [probabilidade e estatística](../../04-stats-and-probability/README.md). Para estimular a frequência dos estudantes, podemos publicar a classificação semanal de frequência no portal da escola e sortear prémios entre os que tiverem maior frequência. |
|
||||
| Vacinação | | | | |
|
||||
| Produtividade | | | | |
|
||||
|
||||
> *Fornecemos apenas uma resposta como exemplo, para que possa ter uma ideia do que é esperado nesta tarefa.*
|
||||
|
||||
## Rubrica
|
||||
|
||||
Exemplar | Adequado | Precisa de Melhorias
|
||||
--- | --- | --- |
|
||||
Foi capaz de identificar fontes de dados razoáveis, formas de armazenar os dados e possíveis decisões/insights para todos os domínios de problemas | Alguns aspetos da solução não estão detalhados, o armazenamento de dados não é discutido, pelo menos 2 domínios de problemas são descritos | Apenas partes da solução de dados são descritas, apenas um domínio de problema é considerado.
|
||||
|
||||
**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 notar 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 do uso desta tradução.
|
||||
Loading…
Reference in new issue