chore(i18n): sync translations with latest source changes (chunk 6/6, 91 changes)

pull/730/head
localizeflow[bot] 3 months ago
parent a89e994767
commit f90a519794

File diff suppressed because one or more lines are too long

@ -0,0 +1,259 @@
# Introdução à Ética de Dados
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/02-Ethics.png)|
|:---:|
| Ética em Ciência de Dados - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
---
Somos todos cidadãos de dados a viver num mundo dataficado.
As tendências de mercado indicam que, até 2022, 1 em cada 3 grandes organizações comprará e venderá os seus dados através de [Mercados e Bolsas](https://www.gartner.com/smarterwithgartner/gartner-top-10-trends-in-data-and-analytics-for-2020/) online. Como **Desenvolvedores de Aplicações**, será mais fácil e barato integrar insights baseados em dados e automação orientada por algoritmos nas experiências diárias dos utilizadores. Mas, à medida que a IA se torna omnipresente, também será necessário compreender os potenciais danos causados pela [armamentização](https://www.youtube.com/watch?v=TQHs8SA1qpk) desses algoritmos em larga escala.
As tendências sugerem que, até 2025, iremos gerar e consumir mais de [180 zettabytes](https://www.statista.com/statistics/871513/worldwide-data-created/) de dados. Para **Cientistas de Dados**, esta explosão de informação oferece acesso sem precedentes a dados pessoais e comportamentais. Com isso, surge o poder de construir perfis detalhados de utilizadores e influenciar subtilmente a tomada de decisões—frequentemente de formas que promovem uma [ilusão de escolha livre](https://www.datasciencecentral.com/the-pareto-set-and-the-paradox-of-choice/). Embora isso possa ser usado para orientar os utilizadores em direção a resultados preferidos, também levanta questões críticas sobre privacidade de dados, autonomia e os limites éticos da influência algorítmica.
A ética de dados é agora _uma barreira necessária_ para a ciência e engenharia de dados, ajudando-nos a minimizar potenciais danos e consequências não intencionais das nossas ações orientadas por dados. O [Ciclo de Hype da Gartner para IA](https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/) identifica tendências relevantes em ética digital, IA responsável e governança de IA como motores-chave para megatendências maiores em torno da _democratização_ e _industrialização_ da IA.
![Ciclo de Hype da Gartner para IA - 2020](https://images-cdn.newscred.com/Zz1mOWJhNzlkNDA2ZTMxMWViYjRiOGFiM2IyMjQ1YmMwZQ==)
Nesta lição, exploraremos a área fascinante da ética de dados - desde conceitos e desafios fundamentais até estudos de caso e conceitos aplicados de IA, como governança - que ajudam a estabelecer uma cultura de ética em equipas e organizações que trabalham com dados e IA.
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/2) 🎯
## Definições Básicas
Vamos começar por compreender a terminologia básica.
A palavra "ética" vem da [palavra grega "ethikos"](https://en.wikipedia.org/wiki/Ethics) (e sua raiz "ethos"), que significa _caráter ou natureza moral_.
**Ética** refere-se aos valores partilhados e princípios morais que governam o nosso comportamento na sociedade. A ética não se baseia em leis, mas em normas amplamente aceites sobre o que é "certo vs. errado". No entanto, considerações éticas podem influenciar iniciativas de governança corporativa e regulamentações governamentais que criam mais incentivos para conformidade.
**Ética de Dados** é um [novo ramo da ética](https://royalsocietypublishing.org/doi/full/10.1098/rsta.2016.0360#sec-1) que "estuda e avalia problemas morais relacionados a _dados, algoritmos e práticas correspondentes_". Aqui, **"dados"** foca-se em ações relacionadas à geração, gravação, curadoria, processamento, disseminação, partilha e uso; **"algoritmos"** foca-se em IA, agentes, aprendizagem automática e robôs; e **"práticas"** foca-se em tópicos como inovação responsável, programação, hacking e códigos de ética.
**Ética Aplicada** é a [aplicação prática de considerações morais](https://en.wikipedia.org/wiki/Applied_ethics). Trata-se do processo de investigar ativamente questões éticas no contexto de _ações, produtos e processos do mundo real_, e tomar medidas corretivas para garantir que permaneçam alinhados com os nossos valores éticos definidos.
**Cultura de Ética** refere-se a [_operacionalizar_ a ética aplicada](https://hbr.org/2019/05/how-to-design-an-ethical-organization) para garantir que os nossos princípios e práticas éticos sejam adotados de forma consistente e escalável em toda a organização. Culturas de ética bem-sucedidas definem princípios éticos em toda a organização, oferecem incentivos significativos para conformidade e reforçam normas éticas ao encorajar e amplificar comportamentos desejados em todos os níveis da organização.
## Conceitos de Ética
Nesta secção, discutiremos conceitos como **valores partilhados** (princípios) e **desafios éticos** (problemas) para ética de dados - e exploraremos **estudos de caso** que ajudam a compreender esses conceitos em contextos do mundo real.
### 1. Princípios Éticos
Toda estratégia de ética de dados começa por definir _princípios éticos_ - os "valores partilhados" que descrevem comportamentos aceitáveis e orientam ações conformes nos nossos projetos de dados e IA. Pode-se defini-los a nível individual ou de equipa. No entanto, a maioria das grandes organizações delineia-os numa declaração de missão ou estrutura de _IA ética_ definida a nível corporativo e aplicada de forma consistente em todas as equipas.
**Exemplo:** A declaração de missão de [IA Responsável](https://www.microsoft.com/en-us/ai/responsible-ai) da Microsoft afirma: _"Estamos comprometidos com o avanço da IA orientada por princípios éticos que colocam as pessoas em primeiro lugar"_ - identificando 6 princípios éticos na estrutura abaixo:
![IA Responsável na Microsoft](https://docs.microsoft.com/en-gb/azure/cognitive-services/personalizer/media/ethics-and-responsible-use/ai-values-future-computed.png)
Vamos explorar brevemente esses princípios. _Transparência_ e _responsabilidade_ são valores fundamentais sobre os quais outros princípios se constroem - então vamos começar por aí:
* [**Responsabilidade**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) torna os profissionais _responsáveis_ pelas suas operações de dados e IA, e pela conformidade com esses princípios éticos.
* [**Transparência**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) garante que as ações de dados e IA sejam _compreensíveis_ (interpretáveis) para os utilizadores, explicando o quê e o porquê por trás das decisões.
* [**Justiça**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1%3aprimaryr6) - foca-se em garantir que a IA trate _todas as pessoas_ de forma justa, abordando quaisquer preconceitos socio-técnicos sistémicos ou implícitos nos dados e sistemas.
* [**Fiabilidade e Segurança**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - garante que a IA se comporte de forma _consistente_ com os valores definidos, minimizando potenciais danos ou consequências não intencionais.
* [**Privacidade e Segurança**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - trata de compreender a linhagem dos dados e fornecer _privacidade de dados e proteções relacionadas_ aos utilizadores.
* [**Inclusividade**](https://www.microsoft.com/en-us/ai/responsible-ai?activetab=pivot1:primaryr6) - trata de projetar soluções de IA com intenção, adaptando-as para atender a uma _ampla gama de necessidades e capacidades humanas_.
> 🚨 Pense no que poderia ser a sua declaração de missão de ética de dados. Explore estruturas de IA ética de outras organizações - aqui estão exemplos da [IBM](https://www.ibm.com/cloud/learn/ai-ethics), [Google](https://ai.google/principles) e [Facebook](https://ai.facebook.com/blog/facebooks-five-pillars-of-responsible-ai/). Que valores partilhados têm em comum? Como esses princípios se relacionam com o produto ou indústria de IA em que operam?
### 2. Desafios Éticos
Depois de definir os princípios éticos, o próximo passo é avaliar as nossas ações de dados e IA para ver se estão alinhadas com esses valores partilhados. Pense nas suas ações em duas categorias: _coleta de dados_ e _design de algoritmos_.
Na coleta de dados, as ações provavelmente envolverão **dados pessoais** ou informações pessoalmente identificáveis (PII) de indivíduos identificáveis. Isso inclui [diversos itens de dados não pessoais](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en) que, _coletivamente_, identificam um indivíduo. Os desafios éticos podem estar relacionados à _privacidade de dados_, _propriedade de dados_ e tópicos relacionados, como _consentimento informado_ e _direitos de propriedade intelectual_ dos utilizadores.
No design de algoritmos, as ações envolverão a coleta e curadoria de **conjuntos de dados**, e o uso desses dados para treinar e implementar **modelos de dados** que preveem resultados ou automatizam decisões em contextos do mundo real. Os desafios éticos podem surgir de _viés nos conjuntos de dados_, problemas de _qualidade dos dados_, _injustiça_ e _má representação_ nos algoritmos - incluindo alguns problemas que são sistémicos por natureza.
Em ambos os casos, os desafios éticos destacam áreas onde as nossas ações podem entrar em conflito com os nossos valores partilhados. Para detetar, mitigar, minimizar ou eliminar essas preocupações, precisamos fazer perguntas morais de "sim/não" relacionadas às nossas ações e tomar medidas corretivas conforme necessário. Vamos analisar alguns desafios éticos e as questões morais que eles levantam:
#### 2.1 Propriedade de Dados
A coleta de dados frequentemente envolve dados pessoais que podem identificar os sujeitos dos dados. [Propriedade de dados](https://permission.io/blog/data-ownership) trata do _controlo_ e [_direitos dos utilizadores_](https://permission.io/blog/data-ownership) relacionados à criação, processamento e disseminação de dados.
As questões morais que precisamos perguntar são:
* Quem é o proprietário dos dados? (utilizador ou organização)
* Que direitos têm os sujeitos dos dados? (ex: acesso, eliminação, portabilidade)
* Que direitos têm as organizações? (ex: retificar avaliações maliciosas de utilizadores)
#### 2.2 Consentimento Informado
[Consentimento informado](https://legaldictionary.net/informed-consent/) define o ato de os utilizadores concordarem com uma ação (como coleta de dados) com um _entendimento completo_ dos factos relevantes, incluindo o propósito, os riscos potenciais e as alternativas.
Questões a explorar aqui são:
* O utilizador (sujeito dos dados) deu permissão para a captura e uso dos dados?
* O utilizador compreendeu o propósito para o qual os dados foram capturados?
* O utilizador compreendeu os riscos potenciais da sua participação?
#### 2.3 Propriedade Intelectual
[Propriedade intelectual](https://en.wikipedia.org/wiki/Intellectual_property) refere-se a criações intangíveis resultantes da iniciativa humana, que podem _ter valor económico_ para indivíduos ou empresas.
Questões a explorar aqui são:
* Os dados coletados têm valor económico para um utilizador ou empresa?
* O **utilizador** tem propriedade intelectual aqui?
* A **organização** tem propriedade intelectual aqui?
* Se esses direitos existem, como estamos a protegê-los?
#### 2.4 Privacidade de Dados
[Privacidade de dados](https://www.northeastern.edu/graduate/blog/what-is-data-privacy/) ou privacidade de informações refere-se à preservação da privacidade do utilizador e proteção da identidade do utilizador em relação a informações pessoalmente identificáveis.
Questões a explorar aqui são:
* Os dados (pessoais) dos utilizadores estão protegidos contra ataques e vazamentos?
* Os dados dos utilizadores estão acessíveis apenas a utilizadores e contextos autorizados?
* A anonimidade dos utilizadores é preservada quando os dados são partilhados ou disseminados?
* Um utilizador pode ser desidentificado de conjuntos de dados anonimizados?
#### 2.5 Direito ao Esquecimento
O [Direito ao Esquecimento](https://en.wikipedia.org/wiki/Right_to_be_forgotten) ou [Direito à Eliminação](https://www.gdpreu.org/right-to-be-forgotten/) oferece proteção adicional de dados pessoais aos utilizadores. Especificamente, dá aos utilizadores o direito de solicitar a eliminação ou remoção de dados pessoais de pesquisas na Internet e outros locais, _sob circunstâncias específicas_ - permitindo-lhes um novo começo online sem que ações passadas sejam usadas contra eles.
Questões a explorar aqui são:
* O sistema permite que os sujeitos dos dados solicitem a eliminação?
* A retirada do consentimento do utilizador deve acionar a eliminação automática?
* Os dados foram coletados sem consentimento ou por meios ilegais?
* Estamos em conformidade com as regulamentações governamentais de privacidade de dados?
#### 2.6 Viés nos Conjuntos de Dados
Viés nos conjuntos de dados ou [Viés de Coleta](http://researcharticles.com/index.php/bias-in-data-collection-in-research/) refere-se à seleção de um subconjunto _não representativo_ de dados para o desenvolvimento de algoritmos, criando potencial injustiça nos resultados para grupos diversos. Tipos de viés incluem viés de seleção ou amostragem, viés de voluntariado e viés de instrumento.
Questões a explorar aqui são:
* Recrutámos um conjunto representativo de sujeitos dos dados?
* Testámos o nosso conjunto de dados coletado ou curado para vários tipos de viés?
* Podemos mitigar ou remover quaisquer vieses descobertos?
#### 2.7 Qualidade dos Dados
[Qualidade dos Dados](https://lakefs.io/data-quality-testing/) analisa a validade do conjunto de dados curado usado para desenvolver os nossos algoritmos, verificando se as características e os registos atendem aos requisitos para o nível de precisão e consistência necessário para o nosso propósito de IA.
Questões a explorar aqui são:
* Capturámos características válidas para o nosso caso de uso?
* Os dados foram capturados de forma _consistente_ em diversas fontes de dados?
* O conjunto de dados está _completo_ para condições ou cenários diversos?
* A informação foi capturada _com precisão_ ao refletir a realidade?
#### 2.8 Justiça dos Algoritmos
[A Justiça dos Algoritmos](https://towardsdatascience.com/what-is-algorithm-fairness-3182e161cf9f) verifica se o design do algoritmo discrimina sistematicamente subgrupos específicos de sujeitos de dados, levando a [potenciais danos](https://docs.microsoft.com/en-us/azure/machine-learning/concept-fairness-ml) na _distribuição_ (onde recursos são negados ou retidos desse grupo) e na _qualidade do serviço_ (onde a IA não é tão precisa para alguns subgrupos como é para outros).
Perguntas a explorar aqui incluem:
* Avaliámos a precisão do modelo para diversos subgrupos e condições?
* Examinámos o sistema para identificar potenciais danos (por exemplo, estereótipos)?
* Podemos rever os dados ou re-treinar os modelos para mitigar os danos identificados?
Explore recursos como [checklists de Justiça na IA](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4t6dA) para saber mais.
#### 2.9 Deturpação
[A Deturpação de Dados](https://www.sciencedirect.com/topics/computer-science/misrepresentation) trata de questionar se estamos a comunicar insights de dados relatados honestamente de forma enganosa para apoiar uma narrativa desejada.
Perguntas a explorar aqui incluem:
* Estamos a relatar dados incompletos ou imprecisos?
* Estamos a visualizar dados de forma a induzir conclusões enganosas?
* Estamos a usar técnicas estatísticas seletivas para manipular resultados?
* Existem explicações alternativas que possam oferecer uma conclusão diferente?
#### 2.10 Livre Escolha
A [Ilusão de Livre Escolha](https://www.datasciencecentral.com/profiles/blogs/the-illusion-of-choice) ocorre quando "arquiteturas de escolha" do sistema utilizam algoritmos de tomada de decisão para influenciar as pessoas a tomarem um resultado preferido, enquanto aparentam dar-lhes opções e controlo. Estes [padrões obscuros](https://www.darkpatterns.org/) podem causar danos sociais e económicos aos utilizadores. Como as decisões dos utilizadores impactam os perfis de comportamento, estas ações podem potencialmente impulsionar escolhas futuras que amplificam ou prolongam o impacto desses danos.
Perguntas a explorar aqui incluem:
* O utilizador compreendeu as implicações de fazer essa escolha?
* O utilizador estava ciente de (alternativas) escolhas e dos prós e contras de cada uma?
* O utilizador pode reverter uma escolha automatizada ou influenciada posteriormente?
### 3. Estudos de Caso
Para colocar estes desafios éticos em contextos do mundo real, é útil analisar estudos de caso que destacam os potenciais danos e consequências para indivíduos e para a sociedade, quando estas violações éticas são ignoradas.
Aqui estão alguns exemplos:
| Desafio Ético | Estudo de Caso |
|--- |--- |
| **Consentimento Informado** | 1972 - [Estudo de Sífilis de Tuskegee](https://en.wikipedia.org/wiki/Tuskegee_Syphilis_Study) - Homens afro-americanos que participaram no estudo foram prometidos cuidados médicos gratuitos _mas enganados_ por investigadores que não informaram os sujeitos sobre o seu diagnóstico ou sobre a disponibilidade de tratamento. Muitos sujeitos morreram e parceiros ou filhos foram afetados; o estudo durou 40 anos. |
| **Privacidade de Dados** | 2007 - O [prémio de dados da Netflix](https://www.wired.com/2007/12/why-anonymous-data-sometimes-isnt/) forneceu aos investigadores _10M classificações de filmes anonimizadas de 50K clientes_ para ajudar a melhorar os algoritmos de recomendação. No entanto, os investigadores conseguiram correlacionar dados anonimizados com dados pessoalmente identificáveis em _conjuntos de dados externos_ (por exemplo, comentários no IMDb) - efetivamente "desanonimizando" alguns assinantes da Netflix. |
| **Viés na Coleta de Dados** | 2013 - A cidade de Boston [desenvolveu Street Bump](https://www.boston.gov/transportation/street-bump), uma aplicação que permitia aos cidadãos reportar buracos na estrada, dando à cidade melhores dados sobre vias para encontrar e resolver problemas. No entanto, [pessoas em grupos de rendimentos mais baixos tinham menos acesso a carros e telemóveis](https://hbr.org/2013/04/the-hidden-biases-in-big-data), tornando os seus problemas de vias invisíveis nesta aplicação. Os desenvolvedores trabalharam com académicos para abordar questões de _acesso equitativo e divisões digitais_ para garantir justiça. |
| **Justiça Algorítmica** | 2018 - O MIT [Estudo Gender Shades](http://gendershades.org/overview.html) avaliou a precisão de produtos de IA de classificação de género, expondo lacunas na precisão para mulheres e pessoas de cor. Um [Cartão Apple de 2019](https://www.wired.com/story/the-apple-card-didnt-see-genderand-thats-the-problem/) parecia oferecer menos crédito às mulheres do que aos homens. Ambos ilustraram problemas de viés algorítmico que levam a danos socioeconómicos. |
| **Deturpação de Dados** | 2020 - O [Departamento de Saúde Pública da Geórgia divulgou gráficos de COVID-19](https://www.vox.com/covid-19-coronavirus-us-response-trump/2020/5/18/21262265/georgia-covid-19-cases-declining-reopening) que pareciam enganar os cidadãos sobre tendências de casos confirmados com ordenação não cronológica no eixo x. Isto ilustra deturpação através de truques de visualização. |
| **Ilusão de Livre Escolha** | 2020 - A aplicação de aprendizagem [ABCmouse pagou $10M para resolver uma queixa da FTC](https://www.washingtonpost.com/business/2020/09/04/abcmouse-10-million-ftc-settlement/) onde os pais ficaram presos a pagar por subscrições que não podiam cancelar. Isto ilustra padrões obscuros em arquiteturas de escolha, onde os utilizadores foram influenciados a tomar escolhas potencialmente prejudiciais. |
| **Privacidade de Dados e Direitos dos Utilizadores** | 2021 - A [Violação de Dados do Facebook](https://www.npr.org/2021/04/09/986005820/after-data-breach-exposes-530-million-facebook-says-it-will-not-notify-users) expôs dados de 530M utilizadores, resultando num acordo de $5B com a FTC. No entanto, recusou-se a notificar os utilizadores sobre a violação, violando os direitos dos utilizadores em relação à transparência e ao acesso aos dados. |
Quer explorar mais estudos de caso? Veja estes recursos:
* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - dilemas éticos em diversas indústrias.
* [Curso de Ética em Ciência de Dados](https://www.coursera.org/learn/data-science-ethics#syllabus) - estudos de caso marcantes explorados.
* [Onde as coisas correram mal](https://deon.drivendata.org/examples/) - checklist de Deon com exemplos.
> 🚨 Pense nos estudos de caso que viu - já experienciou ou foi afetado por um desafio ético semelhante na sua vida? Consegue pensar em pelo menos um outro estudo de caso que ilustre um dos desafios éticos discutidos nesta secção?
## Ética Aplicada
Falámos sobre conceitos éticos, desafios e estudos de caso em contextos do mundo real. Mas como começamos a _aplicar_ princípios e práticas éticas nos nossos projetos? E como _operacionalizamos_ estas práticas para uma melhor governança? Vamos explorar algumas soluções do mundo real:
### 1. Códigos Profissionais
Os Códigos Profissionais oferecem uma opção para as organizações "incentivarem" os membros a apoiar os seus princípios éticos e declaração de missão. Os códigos são _diretrizes morais_ para o comportamento profissional, ajudando os funcionários ou membros a tomar decisões que estejam alinhadas com os princípios da organização. Eles são tão eficazes quanto a conformidade voluntária dos membros; no entanto, muitas organizações oferecem recompensas e penalidades adicionais para motivar a conformidade dos membros.
Exemplos incluem:
* [Oxford Munich](http://www.code-of-ethics.org/code-of-conduct/) Código de Ética
* [Data Science Association](http://datascienceassn.org/code-of-conduct.html) Código de Conduta (criado em 2013)
* [ACM Código de Ética e Conduta Profissional](https://www.acm.org/code-of-ethics) (desde 1993)
> 🚨 Pertence a uma organização profissional de engenharia ou ciência de dados? Explore o site para ver se definem um código profissional de ética. O que isso diz sobre os seus princípios éticos? Como estão a "incentivar" os membros a seguir o código?
### 2. Checklists de Ética
Enquanto os códigos profissionais definem o comportamento ético _necessário_ dos profissionais, eles [têm limitações conhecidas](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md) na aplicação, particularmente em projetos de grande escala. Em vez disso, muitos especialistas em ciência de dados [defendem checklists](https://resources.oreilly.com/examples/0636920203964/blob/master/of_oaths_and_checklists.md), que podem **conectar princípios a práticas** de forma mais determinística e acionável.
Os checklists convertem perguntas em tarefas "sim/não" que podem ser operacionalizadas, permitindo que sejam rastreadas como parte dos fluxos de trabalho padrão de lançamento de produtos.
Exemplos incluem:
* [Deon](https://deon.drivendata.org/) - um checklist de ética em dados de uso geral criado a partir de [recomendações da indústria](https://deon.drivendata.org/#checklist-citations) com uma ferramenta de linha de comando para fácil integração.
* [Checklist de Auditoria de Privacidade](https://cyber.harvard.edu/ecommerce/privacyaudit.html) - fornece orientações gerais para práticas de manuseio de informações sob perspetivas legais e sociais.
* [Checklist de Justiça na IA](https://www.microsoft.com/en-us/research/project/ai-fairness-checklist/) - criado por profissionais de IA para apoiar a adoção e integração de verificações de justiça nos ciclos de desenvolvimento de IA.
* [22 perguntas para ética em dados e IA](https://medium.com/the-organization/22-questions-for-ethics-in-data-and-ai-efb68fd19429) - estrutura mais aberta, organizada para exploração inicial de questões éticas no design, implementação e contextos organizacionais.
### 3. Regulamentações Éticas
A ética trata de definir valores compartilhados e fazer o que é certo _voluntariamente_. **Conformidade** trata de _seguir a lei_ onde e quando definida. **Governança** cobre amplamente todas as formas como as organizações operam para aplicar princípios éticos e cumprir leis estabelecidas.
Hoje, a governança assume duas formas dentro das organizações. Primeiro, trata-se de definir princípios de **IA ética** e estabelecer práticas para operacionalizar a adoção em todos os projetos relacionados à IA na organização. Segundo, trata-se de cumprir todas as regulamentações de **proteção de dados** mandatadas pelo governo nas regiões onde opera.
Exemplos de regulamentações de proteção de dados e privacidade:
* `1974`, [Lei de Privacidade dos EUA](https://www.justice.gov/opcl/privacy-act-1974) - regula a coleta, uso e divulgação de informações pessoais pelo _governo federal_.
* `1996`, [Lei de Portabilidade e Responsabilidade de Seguro de Saúde dos EUA (HIPAA)](https://www.cdc.gov/phlp/publications/topic/hipaa.html) - protege dados de saúde pessoais.
* `1998`, [Lei de Proteção à Privacidade Online das Crianças dos EUA (COPPA)](https://www.ftc.gov/enforcement/rules/rulemaking-regulatory-reform-proceedings/childrens-online-privacy-protection-rule) - protege a privacidade de dados de crianças menores de 13 anos.
* `2018`, [Regulamento Geral de Proteção de Dados (GDPR)](https://gdpr-info.eu/) - fornece direitos dos utilizadores, proteção de dados e privacidade.
* `2018`, [Lei de Privacidade do Consumidor da Califórnia (CCPA)](https://www.oag.ca.gov/privacy/ccpa) - dá aos consumidores mais _direitos_ sobre os seus dados pessoais.
* `2021`, [Lei de Proteção de Informações Pessoais da China](https://www.reuters.com/world/china/china-passes-new-personal-data-privacy-law-take-effect-nov-1-2021-08-20/) - recentemente aprovada, criando uma das regulamentações de privacidade de dados online mais fortes do mundo.
> 🚨 A União Europeia definiu o GDPR (Regulamento Geral de Proteção de Dados), que continua a ser uma das regulamentações de privacidade de dados mais influentes atualmente. Sabia que também define [8 direitos dos utilizadores](https://www.freeprivacypolicy.com/blog/8-user-rights-gdpr) para proteger a privacidade digital e os dados pessoais dos cidadãos? Descubra quais são e por que são importantes.
### 4. Cultura Ética
Note que permanece uma lacuna intangível entre _conformidade_ (fazer o suficiente para cumprir "a letra da lei") e abordar [questões sistémicas](https://www.coursera.org/learn/data-science-ethics/home/week/4) (como ossificação, assimetria de informação e injustiça distributiva) que podem acelerar a armação da IA.
A última exige [abordagens colaborativas para definir culturas éticas](https://towardsdatascience.com/why-ai-ethics-requires-a-culture-driven-approach-26f451afa29f) que construam conexões emocionais e valores compartilhados consistentes _entre organizações_ na indústria. Isto requer mais [culturas éticas formalizadas de dados](https://www.codeforamerica.org/news/formalizing-an-ethical-data-culture/) nas organizações - permitindo que _qualquer pessoa_ [puxe o cordão Andon](https://en.wikipedia.org/wiki/Andon_(manufacturing)) (para levantar preocupações éticas cedo no processo) e tornando as _avaliações éticas_ (por exemplo, na contratação) um critério central na formação de equipas em projetos de IA.
---
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/3) 🎯
## Revisão e Autoestudo
Cursos e livros ajudam a compreender os conceitos e desafios éticos fundamentais, enquanto estudos de caso e ferramentas ajudam com práticas éticas aplicadas em contextos do mundo real. Aqui estão alguns recursos para começar.
* [Machine Learning Para Principiantes](https://github.com/microsoft/ML-For-Beginners/blob/main/1-Introduction/3-fairness/README.md) - aula sobre Justiça, da Microsoft.
* [Princípios de IA Responsável](https://docs.microsoft.com/en-us/learn/modules/responsible-ai-principles/) - percurso de aprendizagem gratuito no Microsoft Learn.
* [Ética e Ciência de Dados](https://resources.oreilly.com/examples/0636920203964) - EBook da O'Reilly (M. Loukides, H. Mason et. al)
* [Ética na Ciência de Dados](https://www.coursera.org/learn/data-science-ethics#syllabus) - curso online da Universidade de Michigan.
* [Ethics Unwrapped](https://ethicsunwrapped.utexas.edu/case-studies) - estudos de caso da Universidade do Texas.
# Tarefa
[Escrever Um Estudo de Caso Sobre Ética de Dados](assignment.md)
---
**Aviso**:
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, é 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 uma 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.

@ -0,0 +1,24 @@
## Escreva um Estudo de Caso sobre Ética de Dados
## Instruções
Aprendeu sobre vários [Desafios de Ética de Dados](README.md#2-ethics-challenges) e viu alguns exemplos de [Estudos de Caso](README.md#3-case-studies) que refletem desafios de ética de dados em contextos do mundo real.
Nesta tarefa, irá escrever o seu próprio estudo de caso refletindo um desafio de ética de dados baseado na sua experiência ou num contexto relevante do mundo real com o qual esteja familiarizado. Basta seguir estes passos:
1. `Escolha um Desafio de Ética de Dados`. Consulte [os exemplos da lição](README.md#2-ethics-challenges) ou explore exemplos online como [a Checklist Deon](https://deon.drivendata.org/examples/) para se inspirar.
2. `Descreva um Exemplo do Mundo Real`. Pense numa situação de que tenha ouvido falar (notícias, estudo de investigação, etc.) ou que tenha experienciado (comunidade local), onde este desafio específico ocorreu. Reflita sobre as questões de ética de dados relacionadas com o desafio e discuta os potenciais danos ou consequências não intencionais que surgem devido a este problema. Pontos extra: pense em soluções ou processos que possam ser aplicados para ajudar a eliminar ou mitigar o impacto adverso deste desafio.
3. `Forneça uma lista de Recursos Relacionados`. Partilhe um ou mais recursos (links para um artigo, um post de blog pessoal ou imagem, artigo de investigação online, etc.) para provar que isto foi uma ocorrência do mundo real. Pontos extra: partilhe recursos que também demonstrem os potenciais danos e consequências do incidente ou que destaquem passos positivos tomados para evitar a sua recorrência.
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | -- |
Um ou mais desafios de ética de dados são identificados. <br/> <br/> O estudo de caso descreve claramente um incidente do mundo real que reflete esse desafio e destaca as consequências ou danos indesejáveis que causou. <br/><br/> Existe pelo menos um recurso ligado para provar que isto ocorreu. | Um desafio de ética de dados é identificado. <br/><br/> Pelo menos um dano ou consequência relevante é discutido brevemente. <br/><br/> No entanto, a discussão é limitada ou carece de prova de ocorrência no mundo real. | Um desafio de dados é identificado. <br/><br/> No entanto, a descrição ou os recursos não refletem adequadamente o desafio ou não provam a sua ocorrência no mundo real. |
**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 no seu idioma nativo 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 resultantes do uso desta tradução.

@ -0,0 +1,76 @@
# Definindo Dados
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/03-DefiningData.png)|
|:---:|
|Definindo Dados - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Dados são fatos, informações, observações e medições que são usados para fazer descobertas e apoiar decisões informadas. Um ponto de dado é uma unidade única de dados dentro de um conjunto de dados, que é uma coleção de pontos de dados. Conjuntos de dados podem vir em diferentes formatos e estruturas, geralmente baseados em sua origem ou de onde os dados vieram. Por exemplo, os lucros mensais de uma empresa podem estar em uma folha de cálculo, enquanto os dados de frequência cardíaca por hora de um smartwatch podem estar no formato [JSON](https://stackoverflow.com/a/383699). É comum que cientistas de dados trabalhem com diferentes tipos de dados dentro de um conjunto de dados.
Esta lição foca em identificar e classificar dados com base em suas características e suas fontes.
## [Questionário Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/4)
## Como os Dados São Descritos
### Dados Brutos
Dados brutos são dados que vêm de sua fonte em seu estado inicial e não foram analisados ou organizados. Para entender o que está acontecendo com um conjunto de dados, ele precisa ser organizado em um formato que possa ser compreendido por humanos, bem como pela tecnologia que pode ser usada para analisá-lo mais a fundo. A estrutura de um conjunto de dados descreve como ele está organizado e pode ser classificada como estruturada, não estruturada e semiestruturada. Esses tipos de estrutura variam dependendo da origem, mas, em última análise, se encaixam nessas três categorias.
### Dados Quantitativos
Dados quantitativos são observações numéricas dentro de um conjunto de dados e podem, tipicamente, ser analisados, medidos e usados matematicamente. Alguns exemplos de dados quantitativos são: a população de um país, a altura de uma pessoa ou os lucros trimestrais de uma empresa. Com alguma análise adicional, dados quantitativos podem ser usados para descobrir tendências sazonais do Índice de Qualidade do Ar (AQI) ou estimar a probabilidade de tráfego na hora do rush em um dia típico de trabalho.
### Dados Qualitativos
Dados qualitativos, também conhecidos como dados categóricos, são dados que não podem ser medidos objetivamente como as observações de dados quantitativos. Geralmente, são formatos variados de dados subjetivos que capturam a qualidade de algo, como um produto ou processo. Às vezes, dados qualitativos são numéricos, mas não seriam usados matematicamente, como números de telefone ou marcas de tempo. Alguns exemplos de dados qualitativos são: comentários em vídeos, a marca e o modelo de um carro ou a cor favorita dos seus amigos mais próximos. Dados qualitativos podem ser usados para entender quais produtos os consumidores mais gostam ou identificar palavras-chave populares em currículos de emprego.
### Dados Estruturados
Dados estruturados são organizados em linhas e colunas, onde cada linha terá o mesmo conjunto de colunas. As colunas representam um valor de um tipo específico e serão identificadas com um nome que descreve o que o valor representa, enquanto as linhas contêm os valores reais. As colunas frequentemente têm um conjunto específico de regras ou restrições sobre os valores, para garantir que os valores representem com precisão a coluna. Por exemplo, imagine uma folha de cálculo de clientes onde cada linha deve ter um número de telefone e os números de telefone nunca contêm caracteres alfabéticos. Podem ser aplicadas regras na coluna de números de telefone para garantir que ela nunca esteja vazia e contenha apenas números.
Uma vantagem dos dados estruturados é que eles podem ser organizados de forma a se relacionar com outros dados estruturados. No entanto, como os dados são projetados para serem organizados de uma maneira específica, fazer alterações em sua estrutura geral pode exigir muito esforço. Por exemplo, adicionar uma coluna de e-mail à folha de cálculo de clientes que não pode estar vazia significa que será necessário descobrir como adicionar esses valores às linhas existentes de clientes no conjunto de dados.
Exemplos de dados estruturados: folhas de cálculo, bancos de dados relacionais, números de telefone, extratos bancários.
### Dados Não Estruturados
Dados não estruturados geralmente não podem ser categorizados em linhas ou colunas e não contêm um formato ou conjunto de regras a seguir. Como os dados não estruturados têm menos restrições em sua estrutura, é mais fácil adicionar novas informações em comparação com um conjunto de dados estruturado. Se um sensor que captura dados de pressão barométrica a cada 2 minutos recebeu uma atualização que agora permite medir e registrar a temperatura, não é necessário alterar os dados existentes se forem não estruturados. No entanto, isso pode tornar a análise ou investigação desse tipo de dado mais demorada. Por exemplo, um cientista que deseja encontrar a temperatura média do mês anterior a partir dos dados do sensor, mas descobre que o sensor registrou um "e" em alguns de seus dados para indicar que estava quebrado, em vez de um número típico, o que significa que os dados estão incompletos.
Exemplos de dados não estruturados: arquivos de texto, mensagens de texto, arquivos de vídeo.
### Dados Semiestruturados
Dados semiestruturados têm características que os tornam uma combinação de dados estruturados e não estruturados. Eles geralmente não seguem um formato de linhas e colunas, mas são organizados de uma maneira considerada estruturada e podem seguir um formato fixo ou conjunto de regras. A estrutura varia entre as fontes, como uma hierarquia bem definida ou algo mais flexível que permite a fácil integração de novas informações. Metadados são indicadores que ajudam a decidir como os dados são organizados e armazenados e terão vários nomes, dependendo do tipo de dado. Alguns nomes comuns para metadados são tags, elementos, entidades e atributos. Por exemplo, uma mensagem de e-mail típica terá um assunto, corpo e um conjunto de destinatários e pode ser organizada por quem ou quando foi enviada.
Exemplos de dados semiestruturados: HTML, arquivos CSV, JavaScript Object Notation (JSON).
## Fontes de Dados
Uma fonte de dados é o local inicial onde os dados foram gerados ou onde "vivem" e varia com base em como e quando foram coletados. Dados gerados por seus próprios usuários são conhecidos como dados primários, enquanto dados secundários vêm de uma fonte que coletou dados para uso geral. Por exemplo, um grupo de cientistas coletando observações em uma floresta tropical seria considerado primário, e se decidirem compartilhá-lo com outros cientistas, seria considerado secundário para aqueles que o utilizam.
Bancos de dados são uma fonte comum e dependem de um sistema de gerenciamento de banco de dados para hospedar e manter os dados, onde os usuários utilizam comandos chamados consultas para explorar os dados. Arquivos como fontes de dados podem ser arquivos de áudio, imagem e vídeo, bem como folhas de cálculo como Excel. Fontes da internet são um local comum para hospedar dados, onde bancos de dados e arquivos podem ser encontrados. Interfaces de programação de aplicativos, também conhecidas como APIs, permitem que programadores criem maneiras de compartilhar dados com usuários externos pela internet, enquanto o processo de web scraping extrai dados de uma página da web. As [lições em Trabalhando com Dados](../../../../../../../../../2-Working-With-Data) focam em como usar várias fontes de dados.
## Conclusão
Nesta lição aprendemos:
- O que são dados
- Como os dados são descritos
- Como os dados são classificados e categorizados
- Onde os dados podem ser encontrados
## 🚀 Desafio
O Kaggle é uma excelente fonte de conjuntos de dados abertos. Use a [ferramenta de busca de conjuntos de dados](https://www.kaggle.com/datasets) para encontrar alguns conjuntos de dados interessantes e classifique de 3 a 5 conjuntos de dados com os seguintes critérios:
- Os dados são quantitativos ou qualitativos?
- Os dados são estruturados, não estruturados ou semiestruturados?
## [Questionário Pós-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/5)
## Revisão e Autoestudo
- Esta unidade do Microsoft Learn, intitulada [Classifique seus Dados](https://docs.microsoft.com/en-us/learn/modules/choose-storage-approach-in-azure/2-classify-data), tem uma explicação detalhada sobre dados estruturados, semiestruturados e não estruturados.
## Tarefa
[Classificando Conjuntos 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.

@ -0,0 +1,68 @@
# Classificação de Conjuntos de Dados
## Instruções
Siga as instruções nesta tarefa para identificar e classificar os dados com um de cada um dos seguintes tipos de dados:
**Tipos de Estrutura**: Estruturado, Semi-Estruturado ou Não Estruturado
**Tipos de Valor**: Qualitativo ou Quantitativo
**Tipos de Fonte**: Primária ou Secundária
1. Uma empresa foi adquirida e agora tem uma empresa-mãe. Os cientistas de dados receberam uma folha de cálculo com números de telefone de clientes da empresa-mãe.
Tipo de Estrutura:
Tipo de Valor:
Tipo de Fonte:
---
2. Um relógio inteligente tem estado a recolher dados de frequência cardíaca do utilizador, e os dados brutos estão em formato JSON.
Tipo de Estrutura:
Tipo de Valor:
Tipo de Fonte:
---
3. Um inquérito no local de trabalho sobre o moral dos funcionários que está armazenado num ficheiro CSV.
Tipo de Estrutura:
Tipo de Valor:
Tipo de Fonte:
---
4. Astrofísicos estão a aceder a uma base de dados de galáxias que foi recolhida por uma sonda espacial. Os dados contêm o número de planetas em cada galáxia.
Tipo de Estrutura:
Tipo de Valor:
Tipo de Fonte:
---
5. Uma aplicação de finanças pessoais utiliza APIs para ligar-se às contas financeiras de um utilizador, a fim de calcular o seu património líquido. O utilizador pode ver todas as suas transações num formato de linhas e colunas que se assemelha a uma folha de cálculo.
Tipo de Estrutura:
Tipo de Valor:
Tipo de Fonte:
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | -- |
Identifica corretamente todos os tipos de estrutura, valor e fonte |Identifica corretamente 3 tipos de estrutura, valor e fonte|Identifica corretamente 2 ou menos tipos de estrutura, valor e fonte|
**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 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.

@ -0,0 +1,271 @@
# Uma Breve Introdução à Estatística e Probabilidade
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/04-Statistics-Probability.png)|
|:---:|
| Estatística e Probabilidade - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
A Teoria da Estatística e Probabilidade são duas áreas altamente relacionadas da Matemática que têm grande relevância para a Ciência de Dados. É possível trabalhar com dados sem um conhecimento profundo de matemática, mas é sempre melhor conhecer pelo menos alguns conceitos básicos. Aqui apresentaremos uma breve introdução que o ajudará a começar.
[![Vídeo de Introdução](../../../../translated_images/pt-PT/video-prob-and-stats.e4282e5efa2f2543400843ed98b1057065c9600cebfc8a728e8931b5702b2ae4.png)](https://youtu.be/Z5Zy85g4Yjw)
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/6)
## Probabilidade e Variáveis Aleatórias
**Probabilidade** é um número entre 0 e 1 que expressa o quão provável é que um **evento** ocorra. É definida como o número de resultados positivos (que levam ao evento), dividido pelo número total de resultados, assumindo que todos os resultados são igualmente prováveis. Por exemplo, ao lançar um dado, a probabilidade de obter um número par é 3/6 = 0.5.
Quando falamos de eventos, usamos **variáveis aleatórias**. Por exemplo, a variável aleatória que representa o número obtido ao lançar um dado pode assumir valores de 1 a 6. O conjunto de números de 1 a 6 é chamado de **espaço amostral**. Podemos falar sobre a probabilidade de uma variável aleatória assumir um determinado valor, por exemplo, P(X=3)=1/6.
A variável aleatória no exemplo anterior é chamada de **discreta**, porque possui um espaço amostral contável, ou seja, há valores separados que podem ser enumerados. Existem casos em que o espaço amostral é um intervalo de números reais ou o conjunto completo de números reais. Essas variáveis são chamadas de **contínuas**. Um bom exemplo é o horário de chegada de um autocarro.
## Distribuição de Probabilidade
No caso de variáveis aleatórias discretas, é fácil descrever a probabilidade de cada evento por uma função P(X). Para cada valor *s* do espaço amostral *S*, ela fornecerá um número entre 0 e 1, de forma que a soma de todos os valores de P(X=s) para todos os eventos seja igual a 1.
A distribuição discreta mais conhecida é a **distribuição uniforme**, na qual há um espaço amostral de N elementos, com probabilidade igual de 1/N para cada um deles.
É mais difícil descrever a distribuição de probabilidade de uma variável contínua, com valores retirados de algum intervalo [a,b], ou do conjunto completo de números reais . Considere o caso do horário de chegada de um autocarro. Na verdade, para cada horário exato de chegada *t*, a probabilidade de o autocarro chegar exatamente nesse horário é 0!
> Agora sabe que eventos com probabilidade 0 acontecem, e com muita frequência! Pelo menos cada vez que o autocarro chega!
Só podemos falar sobre a probabilidade de uma variável cair em um determinado intervalo de valores, por exemplo, P(t<sub>1</sub>≤X<t<sub>2</sub>). Nesse caso, a distribuição de probabilidade é descrita por uma **função densidade de probabilidade** p(x), tal que
![P(t_1\le X<t_2)=\int_{t_1}^{t_2}p(x)dx](../../../../translated_images/pt-PT/probability-density.a8aad29f17a14afb519b407c7b6edeb9f3f9aa5f69c9e6d9445f604e5f8a2bf7.png)
Um análogo contínuo da distribuição uniforme é chamado de **uniforme contínua**, que é definida em um intervalo finito. A probabilidade de que o valor X caia em um intervalo de comprimento l é proporcional a l, e aumenta até 1.
Outra distribuição importante é a **distribuição normal**, sobre a qual falaremos mais detalhadamente abaixo.
## Média, Variância e Desvio Padrão
Suponha que retiramos uma sequência de n amostras de uma variável aleatória X: x<sub>1</sub>, x<sub>2</sub>, ..., x<sub>n</sub>. Podemos definir o valor **médio** (ou **média aritmética**) da sequência da maneira tradicional como (x<sub>1</sub>+x<sub>2</sub>+x<sub>n</sub>)/n. À medida que aumentamos o tamanho da amostra (ou seja, tomamos o limite com n→∞), obteremos a média (também chamada de **expectativa**) da distribuição. Denotaremos a expectativa por **E**(x).
> Pode-se demonstrar que, para qualquer distribuição discreta com valores {x<sub>1</sub>, x<sub>2</sub>, ..., x<sub>N</sub>} e probabilidades correspondentes p<sub>1</sub>, p<sub>2</sub>, ..., p<sub>N</sub>, a expectativa será igual a E(X)=x<sub>1</sub>p<sub>1</sub>+x<sub>2</sub>p<sub>2</sub>+...+x<sub>N</sub>p<sub>N</sub>.
Para identificar o quão dispersos os valores estão, podemos calcular a variância σ<sup>2</sup> = ∑(x<sub>i</sub> - μ)<sup>2</sup>/n, onde μ é a média da sequência. O valor σ é chamado de **desvio padrão**, e σ<sup>2</sup> é chamado de **variância**.
## Moda, Mediana e Quartis
Às vezes, a média não representa adequadamente o valor "típico" dos dados. Por exemplo, quando há alguns valores extremos completamente fora do intervalo, eles podem afetar a média. Outra boa indicação é a **mediana**, um valor tal que metade dos pontos de dados são menores que ele, e a outra metade - maiores.
Para nos ajudar a entender a distribuição dos dados, é útil falar sobre **quartis**:
* Primeiro quartil, ou Q1, é um valor tal que 25% dos dados estão abaixo dele
* Terceiro quartil, ou Q3, é um valor tal que 75% dos dados estão abaixo dele
Graficamente, podemos representar a relação entre mediana e quartis em um diagrama chamado **box plot**:
<img src="../../../../translated_images/pt-PT/boxplot_explanation.4039b7de08780fd4.webp" alt="Explicação do Box Plot" width="50%">
Aqui também calculamos o **intervalo interquartil** IQR=Q3-Q1, e os chamados **outliers** - valores que estão fora dos limites [Q1-1.5*IQR,Q3+1.5*IQR].
Para uma distribuição finita que contém um pequeno número de valores possíveis, um bom valor "típico" é aquele que aparece com mais frequência, chamado de **moda**. É frequentemente aplicado a dados categóricos, como cores. Considere uma situação em que temos dois grupos de pessoas - algumas que preferem fortemente vermelho, e outras que preferem azul. Se codificarmos as cores por números, o valor médio para uma cor favorita estaria em algum lugar no espectro laranja-verde, o que não indica a preferência real de nenhum dos grupos. No entanto, a moda seria uma das cores ou ambas, se o número de pessoas que votaram por elas for igual (nesse caso, chamamos a amostra de **multimodal**).
## Dados do Mundo Real
Quando analisamos dados da vida real, eles frequentemente não são variáveis aleatórias propriamente ditas, no sentido de que não realizamos experimentos com resultados desconhecidos. Por exemplo, considere uma equipa de jogadores de basebol e seus dados corporais, como altura, peso e idade. Esses números não são exatamente aleatórios, mas ainda podemos aplicar os mesmos conceitos matemáticos. Por exemplo, uma sequência de pesos de pessoas pode ser considerada uma sequência de valores retirados de alguma variável aleatória. Abaixo está a sequência de pesos de jogadores de basebol reais da [Major League Baseball](http://mlb.mlb.com/index.jsp), retirada deste [conjunto de dados](http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights) (para sua conveniência, apenas os primeiros 20 valores são mostrados):
```
[180.0, 215.0, 210.0, 210.0, 188.0, 176.0, 209.0, 200.0, 231.0, 180.0, 188.0, 180.0, 185.0, 160.0, 180.0, 185.0, 197.0, 189.0, 185.0, 219.0]
```
> **Nota**: Para ver o exemplo de trabalho com este conjunto de dados, consulte o [notebook associado](notebook.ipynb). Há também vários desafios ao longo desta lição, e pode completá-los adicionando algum código a esse notebook. Se não souber como operar com dados, não se preocupe - voltaremos a trabalhar com dados usando Python mais tarde. Se não souber como executar código no Jupyter Notebook, consulte [este artigo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
Aqui está o box plot mostrando média, mediana e quartis para os nossos dados:
![Box Plot de Peso](../../../../translated_images/pt-PT/weight-boxplot.1dbab1c03af26f8a008fff4e17680082c8ab147d6df646cbac440bbf8f5b9c42.png)
Como os nossos dados contêm informações sobre diferentes **funções** dos jogadores, também podemos fazer o box plot por função - isso permitirá que tenhamos uma ideia de como os valores dos parâmetros diferem entre as funções. Desta vez, consideraremos a altura:
![Box plot por função](../../../../translated_images/pt-PT/boxplot_byrole.036b27a1c3f52d42f66fba2324ec5cde0a1bca6a01a619eeb0ce7cd054b2527b.png)
Este diagrama sugere que, em média, a altura dos jogadores de primeira base é maior que a altura dos jogadores de segunda base. Mais tarde nesta lição, aprenderemos como podemos testar esta hipótese de forma mais formal e como demonstrar que os nossos dados são estatisticamente significativos para mostrar isso.
> Ao trabalhar com dados do mundo real, assumimos que todos os pontos de dados são amostras retiradas de alguma distribuição de probabilidade. Essa suposição permite-nos aplicar técnicas de aprendizagem automática e construir modelos preditivos funcionais.
Para ver qual é a distribuição dos nossos dados, podemos traçar um gráfico chamado **histograma**. O eixo X conterá um número de diferentes intervalos de peso (os chamados **bins**), e o eixo vertical mostrará o número de vezes que a amostra da variável aleatória esteve dentro de um determinado intervalo.
![Histograma de dados do mundo real](../../../../translated_images/pt-PT/weight-histogram.bfd00caf7fc30b145b21e862dba7def41c75635d5280de25d840dd7f0b00545e.png)
A partir deste histograma, pode-se ver que todos os valores estão centrados em torno de um certo peso médio, e quanto mais nos afastamos desse peso - menos pesos desse valor são encontrados. Ou seja, é muito improvável que o peso de um jogador de basebol seja muito diferente do peso médio. A variância dos pesos mostra a extensão em que os pesos provavelmente diferem da média.
> Se considerarmos os pesos de outras pessoas, não da liga de basebol, a distribuição provavelmente será diferente. No entanto, o formato da distribuição será o mesmo, mas a média e a variância mudariam. Assim, se treinarmos o nosso modelo com jogadores de basebol, é provável que ele produza resultados errados quando aplicado a estudantes de uma universidade, porque a distribuição subjacente é diferente.
## Distribuição Normal
A distribuição de pesos que vimos acima é muito típica, e muitas medições do mundo real seguem o mesmo tipo de distribuição, mas com diferentes médias e variâncias. Esta distribuição é chamada de **distribuição normal**, e desempenha um papel muito importante na estatística.
Usar a distribuição normal é uma forma correta de gerar pesos aleatórios de potenciais jogadores de basebol. Uma vez que sabemos o peso médio `mean` e o desvio padrão `std`, podemos gerar 1000 amostras de peso da seguinte forma:
```python
samples = np.random.normal(mean,std,1000)
```
Se traçarmos o histograma das amostras geradas, veremos uma imagem muito semelhante à mostrada acima. E se aumentarmos o número de amostras e o número de bins, podemos gerar uma imagem de uma distribuição normal mais próxima do ideal:
![Distribuição Normal com média=0 e desvio padrão=1](../../../../translated_images/pt-PT/normal-histogram.dfae0d67c202137d552d0015fb87581eca263925e512404f3c12d8885315432e.png)
*Distribuição Normal com média=0 e desvio padrão=1*
## Intervalos de Confiança
Quando falamos sobre os pesos dos jogadores de basebol, assumimos que existe uma **variável aleatória W** que corresponde à distribuição de probabilidade ideal dos pesos de todos os jogadores de basebol (o chamado **população**). A nossa sequência de pesos corresponde a um subconjunto de todos os jogadores de basebol que chamamos de **amostra**. Uma questão interessante é: podemos conhecer os parâmetros da distribuição de W, ou seja, a média e a variância da população?
A resposta mais simples seria calcular a média e a variância da nossa amostra. No entanto, pode acontecer que a nossa amostra aleatória não represente com precisão a população completa. Assim, faz sentido falar sobre **intervalo de confiança**.
> **Intervalo de confiança** é a estimativa da verdadeira média da população dada a nossa amostra, que é precisa com uma certa probabilidade (ou **nível de confiança**).
Suponha que temos uma amostra X
1</sub>, ..., X<sub>n</sub> da nossa distribuição. Cada vez que retiramos uma amostra da nossa distribuição, acabamos com um valor médio diferente μ. Assim, μ pode ser considerado uma variável aleatória. Um **intervalo de confiança** com confiança p é um par de valores (L<sub>p</sub>,R<sub>p</sub>), tal que **P**(L<sub>p</sub>≤μ≤R<sub>p</sub>) = p, ou seja, a probabilidade de o valor médio medido estar dentro do intervalo é igual a p.
Vai além da nossa breve introdução discutir em detalhe como esses intervalos de confiança são calculados. Mais detalhes podem ser encontrados [na Wikipedia](https://en.wikipedia.org/wiki/Confidence_interval). Em resumo, definimos a distribuição da média amostral calculada em relação à verdadeira média da população, que é chamada de **distribuição de Student**.
> **Fato interessante**: A distribuição de Student foi nomeada em homenagem ao matemático William Sealy Gosset, que publicou seu artigo sob o pseudônimo "Student". Ele trabalhava na cervejaria Guinness e, segundo uma das versões, seu empregador não queria que o público soubesse que estavam a usar testes estatísticos para determinar a qualidade das matérias-primas.
Se quisermos estimar a média μ da nossa população com confiança p, precisamos tomar o *(1-p)/2-th percentil* de uma distribuição de Student A, que pode ser obtido em tabelas ou calculado usando algumas funções integradas de software estatístico (ex. Python, R, etc.). Então, o intervalo para μ seria dado por X±A*D/√n, onde X é a média obtida da amostra e D é o desvio padrão.
> **Nota**: Também omitimos a discussão de um conceito importante de [graus de liberdade](https://en.wikipedia.org/wiki/Degrees_of_freedom_(statistics)), que é relevante em relação à distribuição de Student. Pode consultar livros mais completos sobre estatística para entender este conceito mais profundamente.
Um exemplo de cálculo de intervalo de confiança para pesos e alturas é dado nos [notebooks associados](notebook.ipynb).
| p | Média do peso |
|-----|-----------|
| 0.85 | 201.73±0.94 |
| 0.90 | 201.73±1.08 |
| 0.95 | 201.73±1.28 |
Note que quanto maior a probabilidade de confiança, mais amplo é o intervalo de confiança.
## Teste de Hipóteses
No nosso conjunto de dados de jogadores de baseball, existem diferentes funções de jogadores, que podem ser resumidas abaixo (veja o [notebook associado](notebook.ipynb) para ver como esta tabela pode ser calculada):
| Função | Altura | Peso | Contagem |
|------|--------|--------|-------|
| Catcher | 72.723684 | 204.328947 | 76 |
| Designated_Hitter | 74.222222 | 220.888889 | 18 |
| First_Baseman | 74.000000 | 213.109091 | 55 |
| Outfielder | 73.010309 | 199.113402 | 194 |
| Relief_Pitcher | 74.374603 | 203.517460 | 315 |
| Second_Baseman | 71.362069 | 184.344828 | 58 |
| Shortstop | 71.903846 | 182.923077 | 52 |
| Starting_Pitcher | 74.719457 | 205.163636 | 221 |
| Third_Baseman | 73.044444 | 200.955556 | 45 |
Podemos notar que as alturas médias dos jogadores de primeira base são maiores do que as dos jogadores de segunda base. Assim, podemos ser tentados a concluir que **jogadores de primeira base são mais altos do que jogadores de segunda base**.
> Esta afirmação é chamada de **hipótese**, porque não sabemos se o fato é realmente verdadeiro ou não.
No entanto, nem sempre é óbvio se podemos fazer esta conclusão. Pela discussão acima, sabemos que cada média tem um intervalo de confiança associado e, portanto, esta diferença pode ser apenas um erro estatístico. Precisamos de uma forma mais formal de testar a nossa hipótese.
Vamos calcular intervalos de confiança separadamente para as alturas dos jogadores de primeira e segunda base:
| Confiança | Primeira Base | Segunda Base |
|------------|---------------|----------------|
| 0.85 | 73.62..74.38 | 71.04..71.69 |
| 0.90 | 73.56..74.44 | 70.99..71.73 |
| 0.95 | 73.47..74.53 | 70.92..71.81 |
Podemos ver que, sob nenhuma confiança, os intervalos se sobrepõem. Isso prova a nossa hipótese de que jogadores de primeira base são mais altos do que jogadores de segunda base.
Mais formalmente, o problema que estamos a resolver é verificar se **duas distribuições de probabilidade são iguais**, ou pelo menos têm os mesmos parâmetros. Dependendo da distribuição, precisamos usar diferentes testes para isso. Se sabemos que as nossas distribuições são normais, podemos aplicar o **[teste t de Student](https://en.wikipedia.org/wiki/Student%27s_t-test)**.
No teste t de Student, calculamos o chamado **valor t**, que indica a diferença entre as médias, levando em conta a variância. É demonstrado que o valor t segue a **distribuição de Student**, o que nos permite obter o valor limite para um nível de confiança **p** (isto pode ser calculado ou consultado em tabelas numéricas). Depois comparamos o valor t com este limite para aprovar ou rejeitar a hipótese.
Em Python, podemos usar o pacote **SciPy**, que inclui a função `ttest_ind` (além de muitas outras funções estatísticas úteis!). Ela calcula o valor t para nós e também faz a consulta inversa do valor de confiança p, para que possamos apenas olhar para a confiança e tirar a conclusão.
Por exemplo, a nossa comparação entre as alturas dos jogadores de primeira e segunda base dá-nos os seguintes resultados:
```python
from scipy.stats import ttest_ind
tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Designated_Hitter',['Height']],equal_var=False)
print(f"T-value = {tval[0]:.2f}\nP-value: {pval[0]}")
```
```
T-value = 7.65
P-value: 9.137321189738925e-12
```
No nosso caso, o valor p é muito baixo, o que significa que há fortes evidências que suportam que jogadores de primeira base são mais altos.
Existem também outros tipos de hipóteses que podemos querer testar, por exemplo:
* Provar que uma amostra segue alguma distribuição. No nosso caso, assumimos que as alturas são distribuídas normalmente, mas isso precisa de verificação estatística formal.
* Provar que o valor médio de uma amostra corresponde a algum valor pré-definido.
* Comparar médias de várias amostras (ex. qual é a diferença nos níveis de felicidade entre diferentes faixas etárias).
## Lei dos Grandes Números e Teorema do Limite Central
Uma das razões pela qual a distribuição normal é tão importante é o chamado **teorema do limite central**. Suponha que temos uma grande amostra de N valores independentes X<sub>1</sub>, ..., X<sub>N</sub>, amostrados de qualquer distribuição com média μ e variância σ<sup>2</sup>. Então, para N suficientemente grande (em outras palavras, quando N→∞), a média Σ<sub>i</sub>X<sub>i</sub> seria normalmente distribuída, com média μ e variância σ<sup>2</sup>/N.
> Outra forma de interpretar o teorema do limite central é dizer que, independentemente da distribuição, quando calculamos a média de uma soma de valores de qualquer variável aleatória, acabamos com uma distribuição normal.
Do teorema do limite central também segue que, quando N→∞, a probabilidade de a média da amostra ser igual a μ torna-se 1. Isto é conhecido como **a lei dos grandes números**.
## Covariância e Correlação
Uma das coisas que a Ciência de Dados faz é encontrar relações entre dados. Dizemos que duas sequências **correlacionam** quando exibem comportamentos semelhantes ao mesmo tempo, ou seja, elas sobem/descem simultaneamente, ou uma sequência sobe quando outra desce e vice-versa. Em outras palavras, parece haver alguma relação entre duas sequências.
> Correlação não indica necessariamente uma relação causal entre duas sequências; às vezes ambas as variáveis podem depender de alguma causa externa, ou pode ser puramente por acaso que as duas sequências correlacionam. No entanto, uma correlação matemática forte é uma boa indicação de que duas variáveis estão de alguma forma conectadas.
Matematicamente, o principal conceito que mostra a relação entre duas variáveis aleatórias é a **covariância**, que é calculada assim: Cov(X,Y) = **E**\[(X-**E**(X))(Y-**E**(Y))\]. Calculamos o desvio de ambas as variáveis em relação aos seus valores médios e, em seguida, o produto desses desvios. Se ambas as variáveis se desviam juntas, o produto será sempre um valor positivo, que somará para uma covariância positiva. Se ambas as variáveis se desviam fora de sincronia (ou seja, uma cai abaixo da média quando outra sobe acima da média), sempre obteremos números negativos, que somarão para uma covariância negativa. Se os desvios não são dependentes, eles somarão aproximadamente zero.
O valor absoluto da covariância não nos diz muito sobre o quão grande é a correlação, porque depende da magnitude dos valores reais. Para normalizá-lo, podemos dividir a covariância pelo desvio padrão de ambas as variáveis, para obter a **correlação**. A vantagem é que a correlação está sempre no intervalo de [-1,1], onde 1 indica uma correlação positiva forte entre os valores, -1 - uma correlação negativa forte, e 0 - nenhuma correlação (variáveis independentes).
**Exemplo**: Podemos calcular a correlação entre pesos e alturas dos jogadores de baseball do conjunto de dados mencionado acima:
```python
print(np.corrcoef(weights,heights))
```
Como resultado, obtemos uma **matriz de correlação** como esta:
```
array([[1. , 0.52959196],
[0.52959196, 1. ]])
```
> A matriz de correlação C pode ser calculada para qualquer número de sequências de entrada S<sub>1</sub>, ..., S<sub>n</sub>. O valor de C<sub>ij</sub> é a correlação entre S<sub>i</sub> e S<sub>j</sub>, e os elementos diagonais são sempre 1 (que é também a autocorrelação de S<sub>i</sub>).
No nosso caso, o valor 0.53 indica que há alguma correlação entre o peso e a altura de uma pessoa. Podemos também fazer o gráfico de dispersão de um valor contra o outro para ver a relação visualmente:
![Relação entre peso e altura](../../../../translated_images/pt-PT/weight-height-relationship.3f06bde4ca2aba9974182c4ef037ed602acd0fbbbbe2ca91cefd838a9e66bcf9.png)
> Mais exemplos de correlação e covariância podem ser encontrados no [notebook associado](notebook.ipynb).
## Conclusão
Nesta seção, aprendemos:
* propriedades estatísticas básicas dos dados, como média, variância, moda e quartis
* diferentes distribuições de variáveis aleatórias, incluindo a distribuição normal
* como encontrar correlação entre diferentes propriedades
* como usar um aparato sólido de matemática e estatística para provar algumas hipóteses
* como calcular intervalos de confiança para variáveis aleatórias dado um conjunto de dados
Embora esta não seja uma lista exaustiva de tópicos que existem dentro de probabilidade e estatística, deve ser suficiente para lhe dar um bom início neste curso.
## 🚀 Desafio
Use o código de exemplo no notebook para testar outras hipóteses:
1. Jogadores de primeira base são mais velhos do que jogadores de segunda base
2. Jogadores de primeira base são mais altos do que jogadores de terceira base
3. Shortstops são mais altos do que jogadores de segunda base
## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/7)
## Revisão e Autoestudo
Probabilidade e estatística é um tópico tão amplo que merece seu próprio curso. Se estiver interessado em aprofundar-se na teoria, pode continuar a ler alguns dos seguintes livros:
1. [Carlos Fernandez-Granda](https://cims.nyu.edu/~cfgranda/) da Universidade de Nova York tem ótimos apontamentos [Probability and Statistics for Data Science](https://cims.nyu.edu/~cfgranda/pages/stuff/probability_stats_for_DS.pdf) (disponível online)
1. [Peter e Andrew Bruce. Practical Statistics for Data Scientists.](https://www.oreilly.com/library/view/practical-statistics-for/9781491952955/) [[código de exemplo em R](https://github.com/andrewgbruce/statistics-for-data-scientists)].
1. [James D. Miller. Statistics for Data Science](https://www.packtpub.com/product/statistics-for-data-science/9781788290678) [[código de exemplo em R](https://github.com/PacktPublishing/Statistics-for-Data-Science)]
## Tarefa
[Pequeno Estudo sobre Diabetes](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, é 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 uma 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.

@ -0,0 +1,260 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"## Introdução à Probabilidade e Estatística\n",
"## Tarefa\n",
"\n",
"Nesta tarefa, iremos utilizar o conjunto de dados de pacientes com diabetes retirado [deste link](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html).\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": 13,
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"df = pd.read_csv(\"../../data/diabetes.tsv\",sep='\\t')\n",
"df.head()"
],
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
" AGE SEX BMI BP S1 S2 S3 S4 S5 S6 Y\n",
"0 59 2 32.1 101.0 157 93.2 38.0 4.0 4.8598 87 151\n",
"1 48 1 21.6 87.0 183 103.2 70.0 3.0 3.8918 69 75\n",
"2 72 2 30.5 93.0 156 93.6 41.0 4.0 4.6728 85 141\n",
"3 24 1 25.3 84.0 198 131.4 40.0 5.0 4.8903 89 206\n",
"4 50 1 23.0 101.0 192 125.4 52.0 4.0 4.2905 80 135"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>AGE</th>\n",
" <th>SEX</th>\n",
" <th>BMI</th>\n",
" <th>BP</th>\n",
" <th>S1</th>\n",
" <th>S2</th>\n",
" <th>S3</th>\n",
" <th>S4</th>\n",
" <th>S5</th>\n",
" <th>S6</th>\n",
" <th>Y</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>59</td>\n",
" <td>2</td>\n",
" <td>32.1</td>\n",
" <td>101.0</td>\n",
" <td>157</td>\n",
" <td>93.2</td>\n",
" <td>38.0</td>\n",
" <td>4.0</td>\n",
" <td>4.8598</td>\n",
" <td>87</td>\n",
" <td>151</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>48</td>\n",
" <td>1</td>\n",
" <td>21.6</td>\n",
" <td>87.0</td>\n",
" <td>183</td>\n",
" <td>103.2</td>\n",
" <td>70.0</td>\n",
" <td>3.0</td>\n",
" <td>3.8918</td>\n",
" <td>69</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>72</td>\n",
" <td>2</td>\n",
" <td>30.5</td>\n",
" <td>93.0</td>\n",
" <td>156</td>\n",
" <td>93.6</td>\n",
" <td>41.0</td>\n",
" <td>4.0</td>\n",
" <td>4.6728</td>\n",
" <td>85</td>\n",
" <td>141</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>24</td>\n",
" <td>1</td>\n",
" <td>25.3</td>\n",
" <td>84.0</td>\n",
" <td>198</td>\n",
" <td>131.4</td>\n",
" <td>40.0</td>\n",
" <td>5.0</td>\n",
" <td>4.8903</td>\n",
" <td>89</td>\n",
" <td>206</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>50</td>\n",
" <td>1</td>\n",
" <td>23.0</td>\n",
" <td>101.0</td>\n",
" <td>192</td>\n",
" <td>125.4</td>\n",
" <td>52.0</td>\n",
" <td>4.0</td>\n",
" <td>4.2905</td>\n",
" <td>80</td>\n",
" <td>135</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"metadata": {},
"execution_count": 13
}
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"Neste conjunto de dados, as colunas são as seguintes: \n",
"* Idade e sexo são autoexplicativos \n",
"* IMC é o índice de massa corporal \n",
"* PA é a pressão arterial média \n",
"* S1 até S6 são diferentes medições sanguíneas \n",
"* Y é a medida qualitativa da progressão da doença ao longo de um ano \n",
"\n",
"Vamos estudar este conjunto de dados utilizando métodos de probabilidade e estatística.\n",
"\n",
"### Tarefa 1: Calcular os valores médios e a variância para todos os valores \n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"### Tarefa 2: Traçar boxplots para IMC, PA e Y dependendo do género\n"
],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {}
},
{
"cell_type": "code",
"execution_count": null,
"source": [],
"outputs": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [
"### Tarefa 4: Testar a correlação entre diferentes variáveis e a progressão da doença (Y)\n",
"\n",
"> **Dica** A matriz de correlação fornecerá as informações mais úteis sobre quais valores são dependentes.\n"
],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {}
},
{
"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, é 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.\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python",
"version": "3.8.8",
"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.8.8 64-bit (conda)"
},
"interpreter": {
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
},
"coopTranslator": {
"original_hash": "6d945fd15163f60cb473dbfe04b2d100",
"translation_date": "2025-09-06T17:25:21+00:00",
"source_file": "1-Introduction/04-stats-and-probability/assignment.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,29 @@
# Pequeno Estudo sobre Diabetes
Nesta tarefa, iremos trabalhar com um pequeno conjunto de dados de pacientes com diabetes retirado de [aqui](https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html).
| | IDADE | SEXO | IMC | PA | S1 | S2 | S3 | S4 | S5 | S6 | Y |
|---|-------|------|-----|----|----|----|----|----|----|----|----|
| 0 | 59 | 2 | 32.1 | 101. | 157 | 93.2 | 38.0 | 4. | 4.8598 | 87 | 151 |
| 1 | 48 | 1 | 21.6 | 87.0 | 183 | 103.2 | 70. | 3. | 3.8918 | 69 | 75 |
| 2 | 72 | 2 | 30.5 | 93.0 | 156 | 93.6 | 41.0 | 4.0 | 4. | 85 | 141 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
## Instruções
* Abra o [notebook da tarefa](../../../../1-Introduction/04-stats-and-probability/assignment.ipynb) num ambiente de jupyter notebook
* Complete todas as tarefas listadas no notebook, nomeadamente:
* [ ] Calcular os valores médios e a variância para todos os valores
* [ ] Criar boxplots para IMC, PA e Y dependendo do género
* [ ] Qual é a distribuição das variáveis Idade, Sexo, IMC e Y?
* [ ] Testar a correlação entre diferentes variáveis e a progressão da doença (Y)
* [ ] Testar a hipótese de que o grau de progressão da diabetes é diferente entre homens e mulheres
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | --- |
Todas as tarefas requeridas estão completas, ilustradas graficamente e explicadas | A maioria das tarefas está completa, mas faltam explicações ou conclusões dos gráficos e/ou valores obtidos | Apenas tarefas básicas como cálculo de média/variância e gráficos simples estão completas, sem conclusões retiradas dos dados
**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 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,581 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introdução à Probabilidade e Estatística\n",
"Neste caderno, vamos experimentar alguns dos conceitos que discutimos anteriormente. Muitos conceitos de probabilidade e estatística estão bem representados em bibliotecas importantes para processamento de dados em Python, como `numpy` e `pandas`.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import random\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Variáveis Aleatórias e Distribuições\n",
"Vamos começar por tirar uma amostra de 30 valores de uma distribuição uniforme entre 0 e 9. Também iremos calcular a média e a variância.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"sample = [ random.randint(0,10) for _ in range(30) ]\n",
"print(f\"Sample: {sample}\")\n",
"print(f\"Mean = {np.mean(sample)}\")\n",
"print(f\"Variance = {np.var(sample)}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para estimar visualmente quantos valores diferentes existem na amostra, podemos traçar o **histograma**:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.hist(sample)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Analisando Dados Reais\n",
"\n",
"A média e a variância são muito importantes ao analisar dados do mundo real. Vamos carregar os dados sobre jogadores de basebol de [SOCR MLB Height/Weight Data](http://wiki.stat.ucla.edu/socr/index.php/SOCR_Data_MLB_HeightsWeights)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv(\"../../data/SOCR_MLB.tsv\",sep='\\t', header=None, names=['Name','Team','Role','Weight','Height','Age'])\n",
"df\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> Estamos a usar um pacote chamado [**Pandas**](https://pandas.pydata.org/) aqui para análise de dados. Falaremos mais sobre o Pandas e trabalhar com dados em Python mais à frente neste curso.\n",
"\n",
"Vamos calcular os valores médios para idade, altura e peso:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df[['Age','Height','Weight']].mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Agora vamos focar na altura, e calcular o desvio padrão e a variância:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(list(df['Height'])[:20])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mean = df['Height'].mean()\n",
"var = df['Height'].var()\n",
"std = df['Height'].std()\n",
"print(f\"Mean = {mean}\\nVariance = {var}\\nStandard Deviation = {std}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Além da média, faz sentido olhar para o valor mediano e os quartis. Eles podem ser visualizados usando um **diagrama de caixas**:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,2))\n",
"plt.boxplot(df['Height'].ffill(), vert=False, showmeans=True)\n",
"plt.grid(color='gray', linestyle='dotted')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Também podemos fazer diagramas de caixa de subconjuntos do nosso conjunto de dados, por exemplo, agrupados por função do jogador.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.boxplot(column='Height', by='Role', figsize=(10,8))\n",
"plt.xticks(rotation='vertical')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> **Nota**: Este diagrama sugere que, em média, as alturas dos jogadores da primeira base são superiores às alturas dos jogadores da segunda base. Mais adiante, iremos aprender como testar esta hipótese de forma mais formal, e como demonstrar que os nossos dados são estatisticamente significativos para o mostrar. \n",
"\n",
"A idade, a altura e o peso são todas variáveis aleatórias contínuas. O que acha que é a distribuição delas? Uma boa forma de descobrir é traçar o histograma dos valores: \n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df['Weight'].hist(bins=15, figsize=(10,6))\n",
"plt.suptitle('Weight distribution of MLB Players')\n",
"plt.xlabel('Weight')\n",
"plt.ylabel('Count')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Distribuição Normal\n",
"\n",
"Vamos criar uma amostra artificial de pesos que segue uma distribuição normal com a mesma média e variância dos nossos dados reais:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"generated = np.random.normal(mean, std, 1000)\n",
"generated[:20]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.hist(generated, bins=15)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.hist(np.random.normal(0,1,50000), bins=300)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Como a maioria dos valores na vida real segue uma distribuição normal, não devemos usar um gerador de números aleatórios uniforme para gerar dados de amostra. Aqui está o que acontece se tentarmos gerar pesos com uma distribuição uniforme (gerada por `np.random.rand`):\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"wrong_sample = np.random.rand(1000)*2*std+mean-std\n",
"plt.figure(figsize=(10,6))\n",
"plt.hist(wrong_sample)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Intervalos de Confiança\n",
"\n",
"Vamos agora calcular intervalos de confiança para os pesos e alturas dos jogadores de basebol. Vamos usar o código [deste debate no stackoverflow](https://stackoverflow.com/questions/15033511/compute-a-confidence-interval-from-sample-data):\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import scipy.stats\n",
"\n",
"def mean_confidence_interval(data, confidence=0.95):\n",
" a = 1.0 * np.array(data)\n",
" n = len(a)\n",
" m, se = np.mean(a), scipy.stats.sem(a)\n",
" h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)\n",
" return m, h\n",
"\n",
"for p in [0.85, 0.9, 0.95]:\n",
" m, h = mean_confidence_interval(df['Weight'].fillna(method='pad'),p)\n",
" print(f\"p={p:.2f}, mean = {m:.2f} ± {h:.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Teste de Hipóteses\n",
"\n",
"Vamos explorar diferentes funções no nosso conjunto de dados de jogadores de basebol:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.groupby('Role').agg({ 'Weight' : 'mean', 'Height' : 'mean', 'Age' : 'count'}).rename(columns={ 'Age' : 'Count'})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vamos testar a hipótese de que os Primeiros Basemen são mais altos do que os Segundos Basemen. A maneira mais simples de fazer isso é testar os intervalos de confiança:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for p in [0.85,0.9,0.95]:\n",
" m1, h1 = mean_confidence_interval(df.loc[df['Role']=='First_Baseman',['Height']],p)\n",
" m2, h2 = mean_confidence_interval(df.loc[df['Role']=='Second_Baseman',['Height']],p)\n",
" print(f'Conf={p:.2f}, 1st basemen height: {m1-h1[0]:.2f}..{m1+h1[0]:.2f}, 2nd basemen height: {m2-h2[0]:.2f}..{m2+h2[0]:.2f}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Podemos ver que os intervalos não se sobrepõem.\n",
"\n",
"Uma forma estatisticamente mais correta de provar a hipótese é usar um **teste t de Student**:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from scipy.stats import ttest_ind\n",
"\n",
"tval, pval = ttest_ind(df.loc[df['Role']=='First_Baseman',['Height']], df.loc[df['Role']=='Second_Baseman',['Height']],equal_var=False)\n",
"print(f\"T-value = {tval[0]:.2f}\\nP-value: {pval[0]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Os dois valores devolvidos pela função `ttest_ind` são:\n",
"* o p-valor pode ser considerado como a probabilidade de duas distribuições terem a mesma média. No nosso caso, é muito baixo, o que significa que existe uma forte evidência a apoiar que os jogadores de primeira base são mais altos.\n",
"* o valor t é o valor intermédio da diferença média normalizada que é usado no teste t, e é comparado com um valor limite para um dado valor de confiança.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simulação de uma Distribuição Normal com o Teorema do Limite Central\n",
"\n",
"O gerador pseudo-aleatório em Python é concebido para nos fornecer uma distribuição uniforme. Se quisermos criar um gerador para distribuição normal, podemos usar o teorema do limite central. Para obter um valor distribuído normalmente, vamos simplesmente calcular a média de uma amostra gerada de forma uniforme.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def normal_random(sample_size=100):\n",
" sample = [random.uniform(0,1) for _ in range(sample_size) ]\n",
" return sum(sample)/sample_size\n",
"\n",
"sample = [normal_random() for _ in range(100)]\n",
"plt.figure(figsize=(10,6))\n",
"plt.hist(sample)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Correlação e Evil Baseball Corp\n",
"\n",
"A correlação permite-nos encontrar relações entre sequências de dados. No nosso exemplo fictício, vamos fingir que existe uma corporação de basebol malvada que paga os seus jogadores de acordo com a sua altura quanto mais alto for o jogador, mais dinheiro ele/ela recebe. Suponha que há um salário base de $1000, e um bónus adicional de $0 a $100, dependendo da altura. Vamos pegar nos jogadores reais da MLB, e calcular os seus salários imaginários:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"heights = df['Height'].fillna(method='pad')\n",
"salaries = 1000+(heights-heights.min())/(heights.max()-heights.mean())*100\n",
"print(list(zip(heights, salaries))[:10])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vamos agora calcular a covariância e a correlação dessas sequências. `np.cov` fornecerá uma chamada **matriz de covariância**, que é uma extensão da covariância para múltiplas variáveis. O elemento $M_{ij}$ da matriz de covariância $M$ é uma correlação entre as variáveis de entrada $X_i$ e $X_j$, e os valores diagonais $M_{ii}$ são a variância de $X_{i}$. De forma semelhante, `np.corrcoef` fornecerá a **matriz de correlação**.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(f\"Covariance matrix:\\n{np.cov(heights, salaries)}\")\n",
"print(f\"Covariance = {np.cov(heights, salaries)[0,1]}\")\n",
"print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Uma correlação igual a 1 significa que existe uma **relação linear** forte entre duas variáveis. Podemos visualizar a relação linear ao traçar um valor em função do outro:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.scatter(heights,salaries)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vamos ver o que acontece se a relação não for linear. Suponha que a nossa empresa decidiu esconder a óbvia dependência linear entre alturas e salários, e introduziu alguma não linearidade na fórmula, como `sin`:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"salaries = 1000+np.sin((heights-heights.min())/(heights.max()-heights.mean()))*100\n",
"print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Neste caso, a correlação é ligeiramente menor, mas continua bastante elevada. Agora, para tornar a relação ainda menos óbvia, podemos querer adicionar alguma aleatoriedade extra adicionando uma variável aleatória ao salário. Vamos ver o que acontece:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"salaries = 1000+np.sin((heights-heights.min())/(heights.max()-heights.mean()))*100+np.random.random(size=len(heights))*20-10\n",
"print(f\"Correlation = {np.corrcoef(heights, salaries)[0,1]}\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.scatter(heights, salaries)\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> Consegue adivinhar por que é que os pontos se alinham em linhas verticais assim?\n",
"\n",
"Observámos a correlação entre um conceito artificialmente construído como o salário e a variável observada *altura*. Vamos também ver se as duas variáveis observadas, como a altura e o peso, também correlacionam:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.corrcoef(df['Height'].ffill(),df['Weight'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Infelizmente, não obtivemos quaisquer resultados - apenas alguns valores estranhos `nan`. Isto deve-se ao facto de alguns dos valores da nossa série estarem indefinidos, representados como `nan`, o que causa que o resultado da operação também seja indefinido. Ao observar a matriz, podemos ver que `Weight` é a coluna problemática, porque a autocorrelação entre valores de `Height` foi calculada.\n",
"\n",
"> Este exemplo mostra a importância da **preparação** e **limpeza** dos dados. Sem dados adequados, não podemos calcular nada.\n",
"\n",
"Vamos usar o método `fillna` para preencher os valores em falta e calcular a correlação:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.corrcoef(df['Height'].fillna(method='pad'), df['Weight'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"De facto, existe uma correlação, mas não tão forte como no nosso exemplo artificial. De facto, se olharmos para o gráfico de dispersão de um valor em função do outro, a relação seria muito menos óbvia:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(10,6))\n",
"plt.scatter(df['Weight'],df['Height'])\n",
"plt.xlabel('Weight')\n",
"plt.ylabel('Height')\n",
"plt.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusão\n",
"\n",
"Neste caderno aprendemos como realizar operações básicas em dados para calcular funções estatísticas. Agora sabemos como usar um conjunto sólido de matemática e estatística para provar algumas hipóteses, e como calcular intervalos de confiança para variáveis arbitrárias dado um conjunto de dados.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\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 empenhemos em garantir a precisão, por favor 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 autoritativa. Para informações críticas, recomenda-se a tradução profissional efetuada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas que decorram da utilização desta tradução.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
]
}
],
"metadata": {
"interpreter": {
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
},
"coopTranslator": {
"original_hash": "0f899e3c5019f948e7c787b22f3b2304",
"translation_date": "2026-01-16T12:48:41+00:00",
"source_file": "1-Introduction/04-stats-and-probability/notebook.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 4
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,20 @@
# Introdução à Ciência de Dados
![dados em ação](../../../translated_images/pt-PT/data.48e22bb7617d8d92188afbc4c48effb920ba79f5cebdc0652cd9f34bbbd90c18.jpg)
> Foto de <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, irá descobrir como a Ciência de Dados é definida e aprender sobre as considerações éticas que devem ser tidas em conta por um cientista de dados. Também irá aprender como os dados são definidos e explorar um pouco de estatística e probabilidade, os domínios académicos centrais da Ciência de Dados.
### Tópicos
1. [Definir Ciência de Dados](01-defining-data-science/README.md)
2. [Ética na Ciência de Dados](02-ethics/README.md)
3. [Definir Dados](03-defining-data/README.md)
4. [Introdução à Estatística e Probabilidade](04-stats-and-probability/README.md)
### Créditos
Estas lições foram escritas 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autoritativa. 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 resultantes do uso desta tradução.

@ -0,0 +1,190 @@
# Trabalhar com Dados: Bases de Dados Relacionais
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/05-RelationalData.png)|
|:---:|
| Trabalhar com Dados: Bases de Dados Relacionais - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
É provável que já tenha usado uma folha de cálculo no passado para armazenar informação. Tinha um conjunto de linhas e colunas, onde as linhas continham a informação (ou dados), e as colunas descreviam a informação (por vezes chamadas metadados). Uma base de dados relacional é construída sobre este princípio fundamental de colunas e linhas em tabelas, permitindo que tenha informação distribuída por várias tabelas. Isto permite trabalhar com dados mais complexos, evitar duplicação e ter flexibilidade na forma como explora os dados. Vamos explorar os conceitos de uma base de dados relacional.
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/8)
## Tudo começa com tabelas
Uma base de dados relacional tem no seu núcleo tabelas. Tal como numa folha de cálculo, uma tabela é uma coleção de colunas e linhas. A linha contém os dados ou informação com que queremos trabalhar, como o nome de uma cidade ou a quantidade de precipitação. As colunas descrevem os dados que armazenam.
Vamos começar a nossa exploração criando uma tabela para armazenar informação sobre cidades. Podemos começar com o seu nome e país. Poderia armazenar isto numa tabela da seguinte forma:
| Cidade | País |
| -------- | ------------- |
| Tóquio | Japão |
| Atlanta | Estados Unidos|
| Auckland | Nova Zelândia |
Repare que os nomes das colunas **cidade**, **país** e **população** descrevem os dados armazenados, e cada linha tem informação sobre uma cidade.
## As limitações de uma abordagem com uma única tabela
É provável que a tabela acima lhe pareça relativamente familiar. Vamos começar a adicionar alguns dados adicionais à nossa base de dados em crescimento - precipitação anual (em milímetros). Vamos focar-nos nos anos 2018, 2019 e 2020. Se adicionássemos 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 nota sobre a nossa tabela? Pode notar que estamos a duplicar o nome e o país da cidade repetidamente. Isso pode ocupar bastante espaço de armazenamento, e é largamente desnecessário ter múltiplas 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 isto evite a duplicação das linhas, adiciona alguns outros desafios. Teríamos de modificar a estrutura da nossa tabela cada vez que há um novo ano. Além disso, à medida que os nossos dados crescem, ter os anos como colunas torna mais difícil recuperar e calcular valores.
É por isso que precisamos de múltiplas tabelas e relações. Ao dividir os nossos dados podemos evitar duplicação e ter mais flexibilidade na forma como trabalhamos com os dados.
## Os conceitos de relações
Vamos voltar aos nossos dados e determinar como queremos dividir as coisas. Sabemos que queremos armazenar o nome e país das nossas cidades, por isso isto provavelmente funcionará melhor numa tabela.
| Cidade | País |
| -------- | ------------- |
| Tóquio | Japão |
| Atlanta | Estados Unidos|
| Auckland | Nova Zelândia |
Mas antes de criarmos a próxima tabela, precisamos de descobrir como referenciar cada cidade. Precisamos de alguma forma de identificador, ID ou (em termos técnicos de base de dados) uma chave primária. Uma chave primária é um valor usado para identificar uma linha específica numa tabela. Embora isto possa basear-se num valor em si (poderíamos usar o nome da cidade, por exemplo), deve quase sempre ser um número ou outro identificador. Não queremos que o id mude alguma vez pois isso quebraria a relação. 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 |
> ✅ Vai notar que usamos os termos "id" e "chave primária" de forma intercambiável durante esta lição. Os conceitos aqui aplicam-se a DataFrames, que irá explorar mais tarde. DataFrames não usam a terminologia de "chave primária", no entanto vai notar que se comportam de forma muito semelhante.
Com a nossa tabela de cidades criada, vamos armazenar a precipitação. Em vez de duplicar a informação completa sobre a cidade, podemos usar o id. Também devemos garantir que a tabela recém-criada tem 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 |
Repare na coluna **city_id** dentro da tabela recém-criada **precipitação**. Esta coluna contém valores que referenciam os IDs na tabela **cidades**. Em termos técnicos de dados relacionais, isto chama-se uma **chave estrangeira**; é uma chave primária de outra tabela. Pode simplesmente pensar nela como uma referência ou um apontador. **city_id** 1 referencia Tóquio.
> [!NOTE]
> Chave estrangeira é frequentemente abreviada como FK
## Recuperar os dados
Com os nossos dados separados em duas tabelas, pode estar a perguntar-se como os recuperamos. Se estivermos a usar uma base de dados relacional como MySQL, SQL Server ou Oracle, podemos usar uma linguagem chamada Structured Query Language ou SQL. SQL (por vezes pronunciado sequel) é uma linguagem padrão usada para recuperar e modificar dados numa base de dados relacional.
Para recuperar dados usa o comando `SELECT`. Na sua essência, você **seleciona** as colunas que quer ver **da** tabela onde estão contidas. Se quisesse mostrar apenas os nomes das cidades, poderia usar o seguinte:
```sql
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
```
`SELECT` é onde lista as colunas, e `FROM` é onde lista as tabelas.
> [!NOTE]
> A sintaxe SQL não diferencia maiúsculas de minúsculas, o que significa que `select` e `SELECT` significam o mesmo. No entanto, dependendo do tipo de base de dados que está a usar, as colunas e tabelas podem ser sensíveis a maiúsculas e minúsculas. Como resultado, é uma boa prática 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 vai mostrar todas as cidades. Imagine que só queremos mostrar cidades na Nova Zelândia. Precisamos de algum tipo de filtro. A palavra-chave SQL para isto é `WHERE`, ou "onde algo é verdadeiro".
```sql
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
```
## Juntar dados
Até agora recuperámos dados de uma única tabela. Agora queremos juntar os dados das tabelas **cidades** e **precipitação**. Isto é feito *juntando* as tabelas. Vai efetivamente criar uma ligação entre as duas tabelas, e associar os valores de uma coluna de cada tabela.
No nosso exemplo, vamos associar a coluna **city_id** em **precipitação** com a coluna **city_id** em **cidades**. Isto vai associar o valor da precipitação com a sua respetiva cidade. O tipo de junção que vamos fazer chama-se *inner* join, o que significa que se alguma linha não corresponder a nada da outra tabela, não será mostrada. No nosso caso, todas as cidades têm precipitação, por isso tudo será mostrado.
Vamos recuperar a precipitação de 2019 para todas as nossas cidades.
Vamos fazer isto em passos. O primeiro passo é juntar os dados indicando as colunas para a ligação - **city_id** como destacado antes.
```sql
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
```
Destacámos as duas colunas que queremos, e o facto de querermos juntar as tabelas pela **city_id**. Agora podemos adicionar a instrução `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
Bases de dados relacionais centram-se em dividir a informação entre múltiplas tabelas que depois são reunidas para exibição e análise. Isto proporciona um elevado grau de flexibilidade para realizar cálculos e manipular dados de outras formas. Viu os conceitos fundamentais de uma base de dados relacional, e como realizar uma junção entre duas tabelas.
## 🚀 Desafio
Existem inúmeras bases de dados relacionais disponíveis na internet. Pode explorar os dados usando as competências que aprendeu acima.
## Questionário pós-aula
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/9)
## Revisão & Autoestudo
Existem vários recursos disponíveis em [Microsoft Learn](https://docs.microsoft.com/learn?WT.mc_id=academic-77958-bethanycheum) para continuar a sua exploração de SQL e conceitos de bases de dados relacionais
- [Descrever conceitos de dados relacionais](https://docs.microsoft.com//learn/modules/describe-concepts-of-relational-data?WT.mc_id=academic-77958-bethanycheum)
- [Começar 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 de 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
[Exibir dados de aeroportos](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, por favor tenha em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações erradas decorrentes do uso desta tradução.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -0,0 +1,65 @@
# Exibindo dados de aeroportos
Foi fornecida uma [base de dados](https://raw.githubusercontent.com/Microsoft/Data-Science-For-Beginners/main/2-Working-With-Data/05-relational-databases/airports.db) construída 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, será necessário realizar alguns passos. Você precisará instalar algumas ferramentas e fazer o download da base de dados de exemplo.
### Configure o seu sistema
Você pode usar o Visual Studio Code e a extensão SQLite para interagir com a base 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
### Faça o download e abra a base de dados
Em seguida, faça o download e abra a base de dados.
1. Faça o download do [arquivo da base 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 a base de dados na extensão SQLite selecionando **Ctl-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 a base de dados (não haverá uma atualização visível na tela), crie uma nova janela de consulta selecionando **Ctl-Shift-P** (ou **Cmd-Shift-P** em um Mac) e digitando `SQLite: New query`
Uma vez aberta, a nova janela de consulta pode ser usada para executar instruções SQL contra a base de dados. Você pode usar o comando **Ctl-Shift-Q** (ou **Cmd-Shift-Q** em um Mac) para executar consultas na base 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 da base de dados
O esquema de uma base de dados é o design e a estrutura das suas tabelas. A base de dados **airports** possui duas tabelas, `cities`, que contém uma lista de cidades no Reino Unido e na Irlanda, e `airports`, que contém a lista de todos os aeroportos. Como algumas cidades podem ter múltiplos 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 | Precisa Melhorar |
| ---------- | ---------- | ---------------- |
---
**Aviso**:
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,149 @@
# Trabalhar com Dados: Dados Não-Relacionais
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/06-NoSQL.png)|
|:---:|
|Trabalhar com Dados NoSQL - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
## [Questionário Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/10)
Os dados não estão limitados a bases de dados relacionais. Esta lição foca em dados não-relacionais e abordará os fundamentos de folhas de cálculo e NoSQL.
## Folhas de Cálculo
As folhas de cálculo são uma forma popular de armazenar e explorar dados porque exigem menos trabalho para configurar e começar. Nesta lição, vais aprender os componentes básicos de uma folha de cálculo, bem como fórmulas e funções. Os exemplos serão ilustrados com o Microsoft Excel, mas a maioria das partes e tópicos terá nomes e passos semelhantes em comparação com outros softwares de folhas de cálculo.
![Um livro de trabalho vazio do Microsoft Excel com duas folhas](../../../../2-Working-With-Data/06-non-relational/images/parts-of-spreadsheet.png)
Uma folha de cálculo é um ficheiro e estará acessível no sistema de ficheiros de um computador, dispositivo ou sistema de ficheiros baseado na nuvem. O software em si pode ser baseado no navegador ou uma aplicação que deve ser instalada num computador ou descarregada como uma app. No Excel, estes ficheiros também são definidos como **livros de trabalho** e esta terminologia será usada no restante desta lição.
Um livro de trabalho contém uma ou mais **folhas**, onde cada folha é identificada por abas. Dentro de uma folha estão retângulos chamados **células**, que contêm os dados reais. Uma célula é a interseção de uma linha e uma coluna, onde as colunas são identificadas por caracteres alfabéticos e as linhas por números. Algumas folhas de cálculo contêm cabeçalhos nas primeiras linhas para descrever os dados numa célula.
Com estes elementos básicos de um livro de trabalho do Excel, usaremos um exemplo dos [Modelos da Microsoft](https://templates.office.com/) focado num inventário para explorar algumas partes adicionais de uma folha de cálculo.
### Gerir um Inventário
O ficheiro de folha de cálculo chamado "InventoryExample" é uma folha formatada de itens dentro de um inventário que contém três folhas, onde as abas são identificadas como "Inventory List", "Inventory Pick List" e "Bin Lookup". A linha 4 da folha Inventory List é o cabeçalho, que descreve o valor de cada célula na coluna do cabeçalho.
![Uma fórmula destacada de um exemplo de lista de inventário no Microsoft Excel](../../../../2-Working-With-Data/06-non-relational/images/formula-excel.png)
Existem casos em que uma célula depende dos valores de outras células para gerar o seu valor. A folha Inventory List mantém o registo do custo de cada item no inventário, mas e se precisarmos de saber o valor total de tudo no inventário? [**Fórmulas**](https://support.microsoft.com/en-us/office/overview-of-formulas-34519a4e-1e8d-4f4b-84d4-d642c4f63263) realizam ações nos dados das células e são usadas para calcular o custo do inventário neste exemplo. Esta folha usou uma fórmula na coluna Inventory Value para calcular o valor de cada item multiplicando a quantidade sob o cabeçalho QTY e os custos pelas células sob o cabeçalho COST. Ao clicar duas vezes ou destacar uma célula, a fórmula será exibida. Vais notar que as fórmulas começam com um sinal de igual, seguido pelo cálculo ou operação.
![Uma função destacada de um exemplo de lista de inventário no Microsoft Excel](../../../../2-Working-With-Data/06-non-relational/images/function-excel.png)
Podemos usar outra fórmula para somar todos os valores de Inventory Value e obter o valor total. Isto poderia ser calculado somando cada célula para gerar a soma, mas isso pode ser uma tarefa tediosa. O Excel tem [**funções**](https://support.microsoft.com/en-us/office/sum-function-043e1c7d-7726-4e80-8f32-07b23e057f89), ou fórmulas predefinidas para realizar cálculos nos valores das células. As funções requerem argumentos, que são os valores necessários para realizar esses cálculos. Quando as funções requerem mais de um argumento, eles devem ser listados numa ordem específica ou a função pode não calcular o valor correto. Este exemplo usa a função SUM e utiliza os valores de Inventory Value como argumento para gerar o total listado na linha 3, coluna B (também referida como B3).
## NoSQL
NoSQL é um termo abrangente para as diferentes formas de armazenar dados não-relacionais e pode ser interpretado como "não-SQL", "não-relacional" ou "não apenas SQL". Estes tipos de sistemas de bases de dados podem ser categorizados em 4 tipos.
![Representação gráfica de um armazenamento de dados chave-valor mostrando 4 chaves numéricas únicas associadas a 4 valores diferentes](../../../../2-Working-With-Data/06-non-relational/images/kv-db.png)
> Fonte: [Blog de Michał Białecki](https://www.michalbialecki.com/2018/03/18/azure-cosmos-db-key-value-database-cloud/)
Bases de dados [chave-valor](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#keyvalue-data-stores) associam chaves únicas, que são identificadores únicos associados a um valor. Estes pares são armazenados usando uma [tabela de hash](https://www.hackerearth.com/practice/data-structures/hash-tables/basics-of-hash-tables/tutorial/) com uma função de hash apropriada.
![Representação gráfica de um armazenamento de dados em grafo mostrando as relações entre pessoas, seus interesses e localizações](../../../../2-Working-With-Data/06-non-relational/images/graph-db.png)
> Fonte: [Microsoft](https://docs.microsoft.com/en-us/azure/cosmos-db/graph/graph-introduction#graph-database-by-example)
Bases de dados [grafo](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#graph-data-stores) descrevem relações nos dados e são representadas como uma coleção de nós e arestas. Um nó representa uma entidade, algo que existe no mundo real, como um estudante ou extrato bancário. As arestas representam a relação entre duas entidades. Cada nó e aresta têm propriedades que fornecem informações adicionais sobre cada nó e aresta.
![Representação gráfica de um armazenamento de dados colunar mostrando uma base de dados de clientes com duas famílias de colunas chamadas Identidade e Informações de Contato](../../../../2-Working-With-Data/06-non-relational/images/columnar-db.png)
Armazenamentos de dados [colunar](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#columnar-data-stores) organizam dados em colunas e linhas como uma estrutura de dados relacional, mas cada coluna é dividida em grupos chamados família de colunas, onde todos os dados sob uma coluna estão relacionados e podem ser recuperados e alterados numa unidade.
### Armazenamentos de Dados Documentais com o Azure Cosmos DB
Armazenamentos de dados [documentais](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data#document-data-stores) baseiam-se no conceito de armazenamento de dados chave-valor e são compostos por uma série de campos e objetos. Esta secção explorará bases de dados documentais com o emulador Cosmos DB.
Uma base de dados Cosmos DB encaixa na definição de "Não Apenas SQL", onde a base de dados documental do Cosmos DB depende de SQL para consultar os dados. A [lição anterior](../05-relational-databases/README.md) sobre SQL cobre os fundamentos da linguagem, e poderemos aplicar algumas das mesmas consultas a uma base de dados documental aqui. Usaremos o Emulador Cosmos DB, que nos permite criar e explorar uma base de dados documental localmente num computador. Lê mais sobre o Emulador [aqui](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21).
Um documento é uma coleção de campos e valores de objetos, onde os campos descrevem o que o valor do objeto representa. Abaixo está um exemplo de um documento.
```json
{
"firstname": "Eva",
"age": 44,
"id": "8c74a315-aebf-4a16-bb38-2430a9896ce5",
"_rid": "bHwDAPQz8s0BAAAAAAAAAA==",
"_self": "dbs/bHwDAA==/colls/bHwDAPQz8s0=/docs/bHwDAPQz8s0BAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-9f95-010a691e01d7\"",
"_attachments": "attachments/",
"_ts": 1630544034
}
```
Os campos de interesse neste documento são: `firstname`, `id` e `age`. Os restantes campos com os sublinhados foram gerados pelo Cosmos DB.
#### Explorar Dados com o Emulador Cosmos DB
Podes descarregar e instalar o emulador [para Windows aqui](https://aka.ms/cosmosdb-emulator). Consulta esta [documentação](https://docs.microsoft.com/en-us/azure/cosmos-db/local-emulator?tabs=ssl-netstd21#run-on-linux-macos) para opções sobre como executar o Emulador em macOS e Linux.
O Emulador abre uma janela no navegador, onde a vista Explorer permite explorar documentos.
![A vista Explorer do Emulador Cosmos DB](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-explorer.png)
Se estiveres a seguir os passos, clica em "Start with Sample" para gerar uma base de dados de exemplo chamada SampleDB. Se expandires SampleDB clicando na seta, encontrarás um contentor chamado `Persons`. Um contentor contém uma coleção de itens, que são os documentos dentro do contentor. Podes explorar os quatro documentos individuais sob `Items`.
![Explorar dados de exemplo no Emulador Cosmos DB](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons.png)
#### Consultar Dados Documentais com o Emulador Cosmos DB
Também podemos consultar os dados de exemplo clicando no botão de nova consulta SQL (segundo botão da esquerda).
`SELECT * FROM c` retorna todos os documentos no contentor. Vamos adicionar uma cláusula where e encontrar todos com menos de 40 anos.
`SELECT * FROM c where c.age < 40`
![Executar uma consulta SELECT nos dados de exemplo no Emulador Cosmos DB para encontrar documentos com um valor de campo age menor que 40](../../../../2-Working-With-Data/06-non-relational/images/cosmosdb-emulator-persons-query.png)
A consulta retorna dois documentos, nota que o valor de age para cada documento é menor que 40.
#### JSON e Documentos
Se estás familiarizado com JavaScript Object Notation (JSON), vais notar que os documentos são semelhantes ao JSON. Existe um ficheiro `PersonsData.json` neste diretório com mais dados que podes carregar no contentor Persons no Emulador através do botão `Upload Item`.
Na maioria dos casos, APIs que retornam dados JSON podem ser diretamente transferidos e armazenados em bases de dados documentais. Abaixo está outro documento, que representa tweets da conta Twitter da Microsoft que foram recuperados usando a API do Twitter e inseridos no Cosmos DB.
```json
{
"created_at": "2021-08-31T19:03:01.000Z",
"id": "1432780985872142341",
"text": "Blank slate. Like this tweet if youve ever painted in Microsoft Paint before. https://t.co/cFeEs8eOPK",
"_rid": "dhAmAIUsA4oHAAAAAAAAAA==",
"_self": "dbs/dhAmAA==/colls/dhAmAIUsA4o=/docs/dhAmAIUsA4oHAAAAAAAAAA==/",
"_etag": "\"00000000-0000-0000-9f84-a0958ad901d7\"",
"_attachments": "attachments/",
"_ts": 1630537000
```
Os campos de interesse neste documento são: `created_at`, `id` e `text`.
## 🚀 Desafio
Existe um ficheiro `TwitterData.json` que podes carregar na base de dados SampleDB. Recomenda-se que o adiciones a um contentor separado. Isto pode ser feito por:
1. Clicar no botão de novo contentor no canto superior direito
1. Selecionar a base de dados existente (SampleDB) e criar um id de contentor para o contentor
1. Definir a chave de partição como `/id`
1. Clicar em OK (podes ignorar o resto das informações nesta vista, pois este é um conjunto de dados pequeno a correr localmente na tua máquina)
1. Abrir o novo contentor e carregar o ficheiro Twitter Data com o botão `Upload Item`
Tenta executar algumas consultas SELECT para encontrar os documentos que têm Microsoft no campo text. Dica: tenta usar a [palavra-chave LIKE](https://docs.microsoft.com/en-us/azure/cosmos-db/sql/sql-query-keywords#using-like-with-the--wildcard-character).
## [Questionário Pós-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/11)
## Revisão e Estudo Individual
- Existem algumas formatações e funcionalidades adicionais adicionadas a esta folha de cálculo que esta lição não aborda. A Microsoft tem uma [grande biblioteca de documentação e vídeos](https://support.microsoft.com/excel) sobre Excel, caso estejas interessado em aprender mais.
- Esta documentação arquitetural detalha as características nos diferentes tipos de dados não-relacionais: [Dados Não-Relacionais e NoSQL](https://docs.microsoft.com/en-us/azure/architecture/data-guide/big-data/non-relational-data)
- O Cosmos DB é uma base de dados não-relacional baseada na nuvem que também pode armazenar os diferentes tipos de NoSQL mencionados nesta lição. Aprende mais sobre estes tipos neste [Módulo de Aprendizagem do Cosmos DB da Microsoft](https://docs.microsoft.com/en-us/learn/paths/work-with-nosql-data-in-azure-cosmos-db/)
## Tarefa
[Soda Profits](assignment.md)
---
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a 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 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 resultantes do uso desta tradução.

@ -0,0 +1,22 @@
# Lucros da Soda
## Instruções
A folha de cálculo [Coca Cola Co](../../../../2-Working-With-Data/06-non-relational/CocaColaCo.xlsx) está a faltar alguns cálculos. A sua tarefa é:
1. Calcular os lucros brutos dos anos fiscais '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 ficheiro Excel, mas deve ser editável em qualquer plataforma de folha de cálculo
[Crédito da fonte de dados para Yiyi Wang](https://www.kaggle.com/yiyiwang0826/cocacola-excel)
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | --- |
**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 no seu idioma nativo deve ser considerado a fonte autoritativa. 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 resultantes do uso desta tradução.

File diff suppressed because one or more lines are too long

@ -0,0 +1,281 @@
# Trabalhar com Dados: Python e a Biblioteca Pandas
| ![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/07-WorkWithPython.png) |
| :-------------------------------------------------------------------------------------------------------: |
| Trabalhar com Python - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
[![Vídeo de Introdução](../../../../translated_images/pt-PT/video-ds-python.245247dc811db8e4d5ac420246de8a118c63fd28f6a56578d08b630ae549f260.png)](https://youtu.be/dZjWOGbsN4Y)
Embora bases de dados ofereçam formas muito eficientes de armazenar e consultar dados usando linguagens de consulta, a maneira mais flexível de processar dados é escrever o seu próprio programa para manipulá-los. Em muitos casos, realizar uma consulta em uma base de dados seria mais eficaz. No entanto, em alguns casos, quando é necessário um processamento de dados mais complexo, isso não pode ser feito facilmente usando SQL.
O processamento de dados pode ser programado em qualquer linguagem de programação, mas há certas linguagens que são mais adequadas para trabalhar com dados. Cientistas de dados geralmente preferem uma das seguintes linguagens:
* **[Python](https://www.python.org/)**, uma linguagem de programação de propósito geral, frequentemente considerada uma das melhores opções para iniciantes devido à sua simplicidade. Python possui muitas bibliotecas adicionais que podem ajudar a resolver diversos problemas práticos, como extrair dados de um arquivo ZIP ou converter uma imagem para escala de cinza. Além da ciência de dados, Python também é amplamente utilizado para desenvolvimento web.
* **[R](https://www.r-project.org/)** é uma ferramenta tradicional desenvolvida com foco no processamento estatístico de dados. Ela também contém um grande repositório de bibliotecas (CRAN), tornando-se uma boa escolha para processamento de dados. No entanto, R não é uma linguagem de propósito geral e raramente é usada fora do domínio da ciência de dados.
* **[Julia](https://julialang.org/)** é outra linguagem desenvolvida especificamente para ciência de dados. Ela foi projetada para oferecer melhor desempenho do que Python, tornando-se uma excelente ferramenta para experimentação científica.
Nesta lição, vamos focar no uso de Python para processamento simples de dados. Assumimos que você já tem uma familiaridade básica com a linguagem. Se quiser um aprendizado mais aprofundado sobre Python, pode consultar um dos seguintes recursos:
* [Aprenda Python de Forma Divertida com Gráficos Turtle e Fractais](https://github.com/shwars/pycourse) - Curso introdutório rápido baseado no GitHub sobre programação em Python
* [Dê seus Primeiros Passos com Python](https://docs.microsoft.com/en-us/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Caminho de Aprendizado no [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
Os dados podem vir em várias formas. Nesta lição, consideraremos três formas de dados - **dados tabulares**, **texto** e **imagens**.
Vamos focar em alguns exemplos de processamento de dados, em vez de oferecer uma visão completa de todas as bibliotecas relacionadas. Isso permitirá que você entenda o que é possível e saiba onde encontrar soluções para seus problemas quando precisar.
> **Conselho mais útil**. Quando precisar realizar uma operação específica em dados e não souber como fazê-lo, tente pesquisar na internet. [Stackoverflow](https://stackoverflow.com/) geralmente contém muitos exemplos úteis de código em Python para diversas tarefas típicas.
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/12)
## Dados Tabulares e Dataframes
Você já encontrou dados tabulares quando falamos sobre bases de dados relacionais. Quando você tem muitos dados e eles estão contidos em várias tabelas interligadas, definitivamente faz sentido usar SQL para trabalhar com eles. No entanto, há muitos casos em que temos uma tabela de dados e precisamos obter algum **entendimento** ou **insights** sobre esses dados, como a distribuição, correlação entre valores, etc. Na ciência de dados, há muitos casos em que precisamos realizar algumas transformações nos dados originais, seguidas de visualização. Ambos os passos podem ser facilmente realizados usando Python.
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.
Há também algumas outras bibliotecas que você deve conhecer:
* **[Matplotlib](https://matplotlib.org/)** é uma biblioteca usada para visualização de dados e criação de gráficos
* **[SciPy](https://www.scipy.org/)** é uma biblioteca com algumas funções científicas adicionais. Já nos deparamos com esta biblioteca ao falar sobre probabilidade e estatística
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 a cada 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()
```
![Gráfico de Série Temporal](../../../../translated_images/pt-PT/timeseries-1.80de678ab1cf727e50e00bcf24009fa2b0a8b90ebc43e34b99a345227d28e467.png)
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()
```
![Gráfico de Série Temporal](../../../../translated_images/pt-PT/timeseries-2.aae51d575c55181ceda81ade8c546a2fc2024f9136934386d57b8a189d7570ff.png)
> **Nota** que não estamos usando a sintaxe simples `total_items+additional_items`. Se o fizéssemos, receberíamos muitos valores `NaN` (*Not a Number*) na série resultante. Isso ocorre porque há valores ausentes para alguns dos pontos de índice na série `additional_items`, e somar `NaN` a qualquer coisa resulta em `NaN`. Assim, precisamos especificar o parâmetro `fill_value` durante a soma.
Com séries temporais, também podemos **reamostrar** a série com diferentes intervalos de tempo. Por exemplo, suponha que queremos calcular o volume médio de vendas mensal. Podemos usar o seguinte código:
```python
monthly = total_items.resample("1M").mean()
ax = monthly.plot(kind='bar')
```
![Médias Mensais de Série Temporal](../../../../translated_images/pt-PT/timeseries-3.f3147cbc8c624881008564bc0b5d9fcc15e7374d339da91766bd0e1c6bd9e3af.png)
### 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 | gosto | de | usar | Python | e | Pandas | muito | mesmo |
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 | gosto |
| 2 | 3 | de |
| 3 | 4 | usar |
| 4 | 5 | Python |
| 5 | 6 | e |
| 6 | 7 | Pandas |
| 7 | 8 | muito |
| 8 | 9 | mesmo |
**Nota** que também podemos obter este 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` 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']` - esta operação retorna uma Series. Também podemos selecionar um subconjunto de colunas em outro DataFrame escrevendo `df[['B','A']]` - isso retorna outro DataFrame.
**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*).
**Criar novas colunas computáveis**. Podemos facilmente criar novas colunas computáveis para nosso DataFrame usando expressões intuitivas como esta:
```python
df['DivA'] = df['A']-df['A'].mean()
```
Este exemplo calcula a divergência de A em relação ao seu valor médio. O que realmente acontece aqui é que estamos calculando uma série e, em seguida, atribuímos essa série ao lado esquerdo, criando outra coluna. Assim, não podemos usar operações que não sejam compatíveis com séries, por exemplo, o código abaixo está errado:
```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 | gosto | -3.0 | 4 |
| 2 | 3 | de | -2.0 | 2 |
| 3 | 4 | usar | -1.0 | 3 |
| 4 | 5 | Python | 0.0 | 6 |
| 5 | 6 | e | 1.0 | 3 |
| 6 | 7 | Pandas | 2.0 | 6 |
| 7 | 8 | muito | 3.0 | 4 |
| 8 | 9 | mesmo | 4.0 | 4 |
**Selecionar linhas com base em números** pode ser feito usando o construto `iloc`. Por exemplo, para selecionar as primeiras 5 linhas do DataFrame:
```python
df.iloc[:5]
```
**Agrupamento** é frequentemente usado para obter um resultado semelhante às *tabelas dinâmicas* no Excel. Suponha que queremos calcular o valor médio da coluna `A` para cada número dado de `LenB`. Então podemos agrupar nosso DataFrame por `LenB` e chamar `mean`:
```python
df.groupby(by='LenB')[['A','DivA']].mean()
```
Se precisarmos calcular a média e o número de elementos no grupo, então podemos usar a função mais complexa `aggregate`:
```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 ficheiro de texto ou uma tabela Excel. Felizmente, o Pandas oferece-nos uma maneira simples de carregar dados do disco. Por exemplo, ler um ficheiro CSV é tão simples como isto:
```python
df = pd.read_csv('file.csv')
```
Veremos mais exemplos de como carregar dados, incluindo obtê-los de sites externos, na seção "Desafio".
### Impressão e Visualização
Um Cientista de Dados frequentemente precisa explorar os dados, por isso é importante ser capaz de visualizá-los. Quando o DataFrame é grande, muitas vezes queremos apenas garantir que estamos a fazer tudo corretamente, imprimindo as primeiras linhas. Isto pode ser feito chamando `df.head()`. Se estiver a executar no Jupyter Notebook, ele imprimirá o DataFrame numa forma tabular agradável.
Também já vimos o uso da função `plot` para visualizar algumas colunas. Embora `plot` seja muito útil para muitas tarefas e suporte diferentes tipos de gráficos através do parâmetro `kind=`, pode sempre usar a biblioteca `matplotlib` diretamente para criar algo mais complexo. Vamos abordar a visualização de dados em detalhe em lições separadas do curso.
Este resumo cobre os conceitos mais importantes do Pandas, no entanto, a biblioteca é muito rica e não há limites para o que pode fazer com ela! Vamos agora aplicar este conhecimento para resolver um problema específico.
## 🚀 Desafio 1: Analisar a Propagação da COVID
O primeiro problema em que nos vamos focar é o modelo de propagação epidémica da COVID-19. Para isso, usaremos os dados sobre o número de indivíduos infetados em diferentes países, fornecidos pelo [Center for Systems Science and Engineering](https://systems.jhu.edu/) (CSSE) da [Universidade Johns Hopkins](https://jhu.edu/). O conjunto de dados está disponível neste [repositório GitHub](https://github.com/CSSEGISandData/COVID-19).
Como queremos demonstrar como lidar com dados, convidamo-lo a abrir [`notebook-covidspread.ipynb`](notebook-covidspread.ipynb) e lê-lo de cima para baixo. Pode também executar as células e realizar alguns desafios que deixámos para si no final.
![Propagação da COVID](../../../../translated_images/pt-PT/covidspread.f3d131c4f1d260ab0344d79bac0abe7924598dd754859b165955772e1bd5e8a2.png)
> Se não sabe como executar código no Jupyter Notebook, veja [este artigo](https://soshnikov.com/education/how-to-execute-notebooks-from-github/).
## Trabalhar com Dados Não Estruturados
Embora os dados frequentemente venham em forma tabular, em alguns casos precisamos de lidar com dados menos estruturados, como texto ou imagens. Neste caso, para aplicar as técnicas de processamento de dados que vimos acima, precisamos de **extrair** dados estruturados. Aqui estão alguns exemplos:
* Extrair palavras-chave de texto e verificar com que frequência essas palavras aparecem
* Usar redes neurais para extrair informações sobre objetos numa imagem
* Obter informações sobre emoções de pessoas num feed de câmara de vídeo
## 🚀 Desafio 2: Analisar Artigos sobre COVID
Neste desafio, continuaremos com o tema da pandemia de COVID e focar-nos-emos no processamento de artigos científicos sobre o assunto. Existe o [Conjunto de Dados CORD-19](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge) com mais de 7000 (à data de escrita) artigos sobre COVID, disponível com metadados e resumos (e para cerca de metade deles também está disponível o texto completo).
Um exemplo completo de análise deste conjunto de dados usando o serviço cognitivo [Text Analytics for Health](https://docs.microsoft.com/azure/cognitive-services/text-analytics/how-tos/text-analytics-for-health/?WT.mc_id=academic-77958-bethanycheum) é descrito [neste post de blog](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/). Vamos discutir uma versão simplificada desta análise.
> **NOTE**: Não fornecemos uma cópia do conjunto de dados como parte deste repositório. Pode precisar de fazer o download do ficheiro [`metadata.csv`](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge?select=metadata.csv) deste [conjunto de dados no Kaggle](https://www.kaggle.com/allen-institute-for-ai/CORD-19-research-challenge). Pode ser necessário registar-se no Kaggle. Também pode fazer o download do conjunto de dados sem registo [a partir daqui](https://ai2-semanticscholar-cord-19.s3-us-west-2.amazonaws.com/historical_releases.html), mas incluirá todos os textos completos além do ficheiro de metadados.
Abra [`notebook-papers.ipynb`](notebook-papers.ipynb) e leia-o de cima para baixo. Pode também executar as células e realizar alguns desafios que deixámos para si no final.
![Tratamento Médico COVID](../../../../translated_images/pt-PT/covidtreat.b2ba59f57ca45fbcda36e0ddca3f8cfdddeeed6ca879ea7f866d93fa6ec65791.png)
## Processamento de Dados de Imagem
Recentemente, foram desenvolvidos modelos de IA muito poderosos que permitem compreender imagens. Existem muitas tarefas que podem ser resolvidas usando redes neurais pré-treinadas ou serviços na nuvem. Alguns exemplos incluem:
* **Classificação de Imagens**, que pode ajudá-lo a categorizar a imagem numa das classes pré-definidas. Pode facilmente treinar os seus próprios classificadores de imagem usando serviços como [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum)
* **Deteção de Objetos** para identificar diferentes objetos na imagem. Serviços como [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum) podem detetar vários objetos comuns, e pode treinar um modelo [Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77958-bethanycheum) para detetar objetos específicos de interesse.
* **Deteção de Faces**, incluindo idade, género e deteção de emoções. Isto pode ser feito através da [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum).
Todos esses serviços na nuvem podem ser chamados usando [Python SDKs](https://docs.microsoft.com/samples/azure-samples/cognitive-services-python-sdk-samples/cognitive-services-python-sdk-samples/?WT.mc_id=academic-77958-bethanycheum), e assim podem ser facilmente incorporados no seu fluxo de trabalho de exploração de dados.
Aqui estão alguns exemplos de exploração de dados a partir de fontes de dados de imagem:
* No post de blog [Como Aprender Ciência de Dados sem Programação](https://soshnikov.com/azure/how-to-learn-data-science-without-coding/) exploramos fotos do Instagram, tentando entender o que faz as pessoas darem mais "likes" a uma foto. Primeiro extraímos o máximo de informações das imagens possível usando [computer vision](https://azure.microsoft.com/services/cognitive-services/computer-vision/?WT.mc_id=academic-77958-bethanycheum), e depois usamos [Azure Machine Learning AutoML](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml/?WT.mc_id=academic-77958-bethanycheum) para construir um modelo interpretável.
* No [Workshop de Estudos Faciais](https://github.com/CloudAdvocacy/FaceStudies) usamos a [Face API](https://azure.microsoft.com/services/cognitive-services/face/?WT.mc_id=academic-77958-bethanycheum) para extrair emoções de pessoas em fotografias de eventos, com o objetivo de tentar entender o que faz as pessoas felizes.
## Conclusão
Quer já tenha dados estruturados ou não estruturados, usando Python pode realizar todos os passos relacionados com o processamento e compreensão de dados. É provavelmente a maneira mais flexível de processar dados, e é por isso que a maioria dos cientistas de dados usa Python como sua ferramenta principal. Aprender Python em profundidade é provavelmente uma boa ideia se está sério sobre a sua jornada na ciência de dados!
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/13)
## Revisão & Estudo Individual
**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)
**Aprender Python**
* [Aprenda Python de forma divertida com Turtle Graphics e Fractais](https://github.com/shwars/pycourse)
* [Dê os seus primeiros passos com Python](https://docs.microsoft.com/learn/paths/python-first-steps/?WT.mc_id=academic-77958-bethanycheum) Caminho de Aprendizagem no [Microsoft Learn](http://learn.microsoft.com/?WT.mc_id=academic-77958-bethanycheum)
## 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, é importante ter em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.

@ -0,0 +1,26 @@
# Tarefa de Processamento de Dados em Python
Nesta tarefa, pedimos que desenvolvas o código que começámos a criar nos nossos desafios. A tarefa consiste em duas partes:
## Modelação da Propagação da COVID-19
- [ ] Traçar gráficos de *R* para 5-6 países diferentes num único gráfico para comparação, ou utilizando vários gráficos lado a lado.
- [ ] Ver como o número de mortes e recuperações se correlaciona com o número de casos infetados.
- [ ] Descobrir quanto tempo dura, em média, a doença, correlacionando visualmente a taxa de infeção e a taxa de mortes, procurando por algumas anomalias. Poderás precisar de analisar diferentes países para descobrir isso.
- [ ] Calcular a taxa de letalidade e como esta muda ao longo do tempo. *Poderás querer considerar 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 a COVID-19
- [ ] Construir uma matriz de coocorrência de diferentes medicamentos e verificar quais medicamentos aparecem frequentemente juntos (ou seja, mencionados num mesmo resumo). Podes modificar o código para construir a matriz de coocorrência de medicamentos e diagnósticos.
- [ ] Visualizar esta matriz utilizando um mapa de calor.
- [ ] Como objetivo adicional, visualizar a coocorrência de medicamentos utilizando [diagrama de cordas](https://en.wikipedia.org/wiki/Chord_diagram). [Esta biblioteca](https://pypi.org/project/chord/) pode ajudar-te a desenhar um diagrama de cordas.
- [ ] Como outro objetivo adicional, extrair as dosagens de diferentes medicamentos (como **400mg** em *tomar 400mg de cloroquina diariamente*) utilizando expressões regulares, e construir um dataframe que mostre diferentes dosagens para diferentes medicamentos. **Nota**: considera valores numéricos que estejam em proximidade textual com o nome do medicamento.
## Rubrica
Exemplar | Adequado | Precisa de Melhorias
--- | --- | -- |
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 sã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, tenha em atenção 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

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 @@
# Trabalhar com Dados: Preparação de Dados
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/08-DataPreparation.png)|
|:---:|
|Preparação de Dados - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
## [Questionário 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 continuem ú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 definir 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 são vistos no conjunto de dados, mas não são representados corretamente em visualizações ou resultados de consultas. Problemas comuns de formatação envolvem resolver espaços em branco, datas e tipos de dados. Resolver questões de formatação geralmente depende das pessoas que estão utilizando os dados. Por exemplo, os padrões de apresentação de datas e números 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 aprendizagem:** 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 está lidando? Felizmente, o [pandas](https://pandas.pydata.org/) fornece ferramentas convenientes para rapidamente obter informações gerais sobre um DataFrame, além das primeiras e últimas linhas.
Para explorar essa funcionalidade, vamos importar a biblioteca Python scikit-learn e usar 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 valores nulos. 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 as primeiras linhas do nosso `iris_df` se parecem:
```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 ao observar 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 aprendizagem:** 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. A forma como os dados ausentes são tratados traz consigo compensações sutis 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 ter em mente em relação ao modo como podem ser usados.
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 o resultado. 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 tentar 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 formas.) 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 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ê pode, 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 valor 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, ou seja, usar 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 utilizado:
```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 formas de lidar com valores em falta nos seus conjuntos de dados. A estratégia específica que escolher (removê-los, substituí-los ou até mesmo como os substitui) deve ser orientada pelas particularidades desses dados. Quanto mais trabalhar e interagir com conjuntos de dados, melhor será a sua capacidade de lidar com valores em falta.
## Remover dados duplicados
> **Objetivo de aprendizagem:** No final desta subseção, deverá sentir-se confortável em identificar e remover valores duplicados de DataFrames.
Além de dados em falta, é comum encontrar dados duplicados em conjuntos de dados do mundo real. Felizmente, o `pandas` oferece uma forma simples de detetar e remover entradas duplicadas.
- **Identificar duplicados: `duplicated`**: Pode identificar facilmente valores duplicados utilizando o método `duplicated` do pandas, que devolve uma máscara Booleana indicando se uma entrada num `DataFrame` é duplicada de uma anterior. Vamos criar outro exemplo de `DataFrame` para ver isto 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
```
- **Remover duplicados: `drop_duplicates`:** devolve simplesmente uma cópia dos dados em que todos os valores `duplicated` são `False`:
```python
example4.drop_duplicates()
```
```
letters numbers
0 A 1
1 B 2
3 B 3
```
Tanto `duplicated` como `drop_duplicates` consideram por padrão todas as colunas, mas pode especificar que 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 das 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 realizá-los!
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/15)
## Revisão e Autoestudo
Existem várias formas de descobrir e abordar a preparação dos seus dados para análise e modelação, e a limpeza dos dados é um passo importante que exige prática. Experimente estes desafios do Kaggle para explorar técnicas que esta lição não abordou.
- [Desafio de Limpeza de Dados: Analisar 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
[Avaliar 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.

File diff suppressed because one or more lines are too long

@ -0,0 +1,17 @@
# Avaliar Dados de um Formulário
Um cliente tem estado a testar um [pequeno formulário](../../../../2-Working-With-Data/08-data-preparation/index.html) para recolher alguns dados básicos sobre a sua base de clientes. Eles trouxeram os resultados para que valides os dados que recolheram. Podes abrir a página `index.html` no navegador para dar uma olhada no formulário.
Foi-te fornecido um [conjunto de dados em formato csv](../../../../data/form.csv) que contém registos 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. Podes explorá-las no [notebook da tarefa](../../../../2-Working-With-Data/08-data-preparation/assignment.ipynb).
## Instruções
Usa as técnicas desta lição para fazer recomendações sobre o formulário, de forma a garantir que ele recolhe informações precisas e consistentes.
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | ---
**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 no seu idioma nativo 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 resultantes do uso desta tradução.

@ -0,0 +1,20 @@
# Trabalhar com Dados
![amor pelos dados](../../../translated_images/pt-PT/data-love.a22ef29e6742c852505ada062920956d3d7604870b281a8ca7c7ac6f37381d5a.jpg)
> 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>
Nestes módulos, vais aprender algumas formas de gerir, manipular e utilizar dados em aplicações. Vais aprender sobre bases de dados relacionais e não relacionais e como os dados podem ser armazenados nelas. Vais aprender os fundamentos de trabalhar com Python para gerir dados e descobrir algumas das muitas maneiras de usar Python para gerir e explorar dados.
### Tópicos
1. [Bases de dados relacionais](05-relational-databases/README.md)
2. [Bases de dados não relacionais](06-non-relational/README.md)
3. [Trabalhar com Python](07-python/README.md)
4. [Preparar 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autoritativa. 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 resultantes do uso desta tradução.

@ -0,0 +1,209 @@
# Visualizar Quantidades
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| Visualizar Quantidades - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Nesta lição, vais 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 do Minnesota, podes aprender muitos factos interessantes sobre a vida selvagem local.
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/16)
## Observar a envergadura com Matplotlib
Uma excelente biblioteca para criar gráficos e diagramas, simples ou sofisticados, de vários tipos é [Matplotlib](https://matplotlib.org/stable/index.html). Em termos gerais, o processo de criar gráficos usando estas bibliotecas inclui identificar as partes do teu dataframe que queres analisar, realizar as transformações necessárias nos dados, atribuir valores aos eixos x e y, decidir o tipo de gráfico a mostrar e, finalmente, exibir o gráfico. Matplotlib oferece uma grande variedade de visualizações, mas para esta lição, vamos focar-nos nas mais adequadas para visualizar quantidades: gráficos de linha, dispersão e barras.
> ✅ Usa o gráfico mais adequado à estrutura dos teus dados e à história que queres 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 tens um conjunto de dados e precisas de descobrir a quantidade de um determinado item, uma das primeiras tarefas será inspecionar os seus valores.
✅ Existem excelentes 'cheat sheets' disponíveis para Matplotlib [aqui](https://matplotlib.org/cheatsheets/cheatsheets.pdf).
## Criar um gráfico de linha sobre os valores de envergadura dos pássaros
Abre o ficheiro `notebook.ipynb` na raiz da pasta desta lição e adiciona 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()
```
Estes dados são uma mistura de texto e números:
| | Nome | NomeCientífico | Categoria | Ordem | Família | Género | EstadoConservação | MinComprimento | MaxComprimento | MinPesoCorporal | MaxPesoCorporal | MinEnvergadura | MaxEnvergadura |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------------: | --------------: | ---------------: | ---------------: | --------------: | --------------: |
| 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-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-testa-branca-maior | Anser albifrons | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Vamos começar por representar graficamente alguns dos dados numéricos usando um gráfico de linha básico. Suponhamos que queres visualizar a envergadura máxima destes pássaros interessantes.
```python
wingspan = birds['MaxWingspan']
wingspan.plot()
```
![Envergadura Máxima](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-02.png)
O que notas imediatamente? Parece haver pelo menos um valor atípico - que envergadura impressionante! Uma envergadura de 2300 centímetros equivale a 23 metros - será que há Pterodáctilos a voar pelo Minnesota? Vamos investigar.
Embora possas fazer uma ordenação rápida no Excel para encontrar esses valores atípicos, que provavelmente são erros de digitação, continua o processo de visualização trabalhando diretamente no gráfico.
Adiciona etiquetas ao eixo x para mostrar que tipo 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()
```
![envergadura com etiquetas](../../../../3-Data-Visualization/09-visualization-quantities/images/max-wingspan-labels-02.png)
Mesmo com a rotação das etiquetas ajustada para 45 graus, há demasiadas para serem legíveis. Vamos tentar uma estratégia diferente: etiquetar apenas os valores atípicos e posicionar as etiquetas dentro do gráfico. Podes usar um gráfico de dispersão para criar mais espaço para as etiquetas:
```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á a acontecer aqui? Usaste `tick_params` para esconder as etiquetas inferiores e depois criaste um loop sobre o conjunto de dados dos pássaros. Representando o gráfico com pequenos pontos azuis redondos usando `bo`, verificaste se algum pássaro tinha uma envergadura máxima superior a 500 e exibiste a sua etiqueta ao lado do ponto, caso afirmativo. Ajustaste ligeiramente as etiquetas no eixo y (`y * (1 - 0.05)`) e usaste o nome do pássaro como etiqueta.
O que descobriste?
![valores atípicos](../../../../3-Data-Visualization/09-visualization-quantities/images/labeled-wingspan-02.png)
## Filtrar os teus dados
Tanto a Águia-careca como o Falcão-das-pradarias, embora provavelmente sejam pássaros muito grandes, parecem estar mal etiquetados, com um `0` extra adicionado à sua envergadura máxima. É pouco provável que encontres uma Águia-careca com uma envergadura de 25 metros, mas, se isso acontecer, avisa-nos! Vamos criar um novo dataframe sem esses dois valores atípicos:
```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 atípicos, os teus dados tornam-se mais coesos e compreensíveis.
![gráfico de dispersão das envergaduras](../../../../3-Data-Visualization/09-visualization-quantities/images/scatterplot-wingspan-02.png)
Agora que temos um conjunto de dados mais limpo, pelo menos em termos de envergadura, vamos descobrir mais sobre estes 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. Podes criar visualizações para responder às seguintes perguntas sobre quantidade:
> Quantas categorias de pássaros existem e quais são os seus números?
> Quantos pássaros estão extintos, em perigo, raros ou comuns?
> Quantos existem dos vários géneros e ordens na terminologia de Linnaeus?
## Explorar gráficos de barras
Os gráficos de barras são práticos quando precisas de 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 ficheiro notebook, cria um gráfico de barras básico.
✅ Nota, podes filtrar os dois pássaros atípicos que identificámos na secção anterior, editar o erro na sua envergadura ou deixá-los para estes exercícios que não dependem dos valores de envergadura.
Se quiseres criar um gráfico de barras, podes selecionar os dados que queres focar. Os 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')
```
![dados completos como gráfico de barras](../../../../3-Data-Visualization/09-visualization-quantities/images/full-data-bar-02.png)
Este gráfico de barras, no entanto, é ilegível porque há demasiados dados não agrupados. Precisamos de selecionar apenas os dados que queremos representar, então vamos olhar para o comprimento dos pássaros com base na sua categoria.
Filtra os teus dados para incluir apenas a categoria dos pássaros.
✅ Nota que usas Pandas para gerir os dados e depois deixas o Matplotlib fazer o gráfico.
Como há muitas categorias, podes exibir este gráfico verticalmente e ajustar a 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()
```
![categoria e comprimento](../../../../3-Data-Visualization/09-visualization-quantities/images/category-counts-02.png)
Este gráfico de barras mostra uma boa visão do número de pássaros em cada categoria. Num piscar de olhos, vês que o maior número de pássaros nesta região está na categoria de Patos/Gansos/AvesAquáticas. Minnesota é a 'terra dos 10.000 lagos', por isso não é surpreendente!
✅ Experimenta algumas outras contagens neste conjunto de dados. Algo te surpreende?
## Comparar dados
Podes tentar diferentes comparações de dados agrupados criando novos eixos. Experimenta uma comparação do MaxComprimento de um pássaro, com base na sua categoria:
```python
maxlength = birds['MaxLength']
plt.barh(y=birds['Category'], width=maxlength)
plt.rcParams['figure.figsize'] = [6, 12]
plt.show()
```
![comparar dados](../../../../3-Data-Visualization/09-visualization-quantities/images/category-length-02.png)
Nada é surpreendente aqui: os beija-flores têm o menor MaxComprimento em comparação com Pelicanos ou Gansos. É bom quando os dados fazem sentido lógico!
Podes criar visualizações mais interessantes de gráficos de barras ao sobrepor dados. Vamos sobrepor Comprimento Mínimo e Máximo numa 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, podes ver o intervalo por categoria de pássaros do Comprimento Mínimo e Máximo. Podes dizer com segurança que, com base nestes dados, quanto maior o pássaro, maior o intervalo de comprimento. Fascinante!
![valores sobrepostos](../../../../3-Data-Visualization/09-visualization-quantities/images/superimposed-02.png)
## 🚀 Desafio
Este conjunto de dados sobre pássaros oferece uma riqueza de informações sobre diferentes tipos de pássaros dentro de um ecossistema específico. Procura na internet e vê se consegues encontrar outros conjuntos de dados relacionados com pássaros. Pratica a criação de gráficos e diagramas sobre esses pássaros para descobrir factos que não conhecias.
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/17)
## Revisão & Autoestudo
Esta primeira lição deu-te algumas informações sobre como usar Matplotlib para visualizar quantidades. Faz alguma pesquisa sobre outras formas de trabalhar com conjuntos de dados para visualização. [Plotly](https://github.com/plotly/plotly.py) é uma que não vamos abordar nestas lições, por isso 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.

@ -0,0 +1,14 @@
# Linhas, Dispersões e Barras
## Instruções
Nesta lição, trabalhaste com gráficos de linhas, dispersões e gráficos de barras para mostrar factos interessantes sobre este conjunto de dados. Nesta tarefa, aprofunda o conjunto de dados para descobrir um facto sobre um tipo específico de ave. Por exemplo, cria um notebook que visualize todos os dados interessantes que conseguires encontrar sobre os Gansos-da-neve. Usa os três tipos de gráficos mencionados acima para contar uma história no teu notebook.
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | -- |
Um notebook é apresentado com boas anotações, narrativa sólida e gráficos atrativos | O notebook está a faltar um destes elementos | O notebook está a faltar dois destes 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, é 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.

@ -0,0 +1,92 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Vamos aprender sobre aves\n",
"\n",
"## Introdução\n",
"\n",
"As aves são criaturas fascinantes que podem ser encontradas em quase todos os cantos do mundo. Elas vêm em todas as formas, tamanhos e cores, e desempenham um papel importante nos ecossistemas.\n",
"\n",
"[!NOTE] Este guia é uma introdução básica ao mundo das aves.\n",
"\n",
"## Características das aves\n",
"\n",
"As aves possuem várias características únicas que as distinguem de outros animais:\n",
"\n",
"- **Penas**: As penas ajudam as aves a voar, manterem-se aquecidas e, em alguns casos, a camuflarem-se.\n",
"- **Bicos**: Os bicos das aves variam em forma e tamanho, dependendo da sua dieta.\n",
"- **Ovos**: Todas as aves põem ovos, que são geralmente protegidos em ninhos.\n",
"\n",
"[!TIP] Observe os diferentes tipos de bicos para entender o que uma ave pode comer.\n",
"\n",
"## Tipos de aves\n",
"\n",
"Existem milhares de espécies de aves, mas aqui estão algumas categorias principais:\n",
"\n",
"1. **Aves de rapina**: Como águias e falcões, conhecidas pela sua visão aguçada e garras poderosas.\n",
"2. **Aves aquáticas**: Como patos e flamingos, que vivem perto ou na água.\n",
"3. **Passeriformes**: Pequenas aves canoras, como pardais e rouxinóis.\n",
"\n",
"[!IMPORTANT] Algumas aves estão ameaçadas de extinção devido à perda de habitat e outras atividades humanas.\n",
"\n",
"## Como observar aves\n",
"\n",
"Observar aves pode ser uma atividade relaxante e educativa. Aqui estão algumas dicas para começar:\n",
"\n",
"1. **Escolha um local adequado**: Parques, reservas naturais e jardins são ótimos lugares para observar aves.\n",
"2. **Use binóculos**: Eles ajudam a ver detalhes que não seriam visíveis a olho nu.\n",
"3. **Seja paciente**: As aves podem ser tímidas, então é importante esperar calmamente.\n",
"\n",
"[!CAUTION] Não alimente aves selvagens com alimentos inadequados, como pão, pois pode ser prejudicial para elas.\n",
"\n",
"## Conclusão\n",
"\n",
"As aves são uma parte essencial do nosso mundo natural. Aprender sobre elas pode aumentar a nossa apreciação pela biodiversidade e inspirar-nos a proteger o meio ambiente.\n",
"\n",
"[!WARNING] Certifique-se de respeitar as aves e o seu habitat enquanto as observa.\n",
"\n",
"Esperamos que este guia tenha despertado o seu interesse pelo mundo das aves. Boa observação!\n"
],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes 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-02T08:44:52+00:00",
"source_file": "3-Data-Visualization/09-visualization-quantities/notebook.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,209 @@
# Visualizar Distribuições
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| Visualizar Distribuições - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Na lição anterior, aprendeste alguns factos interessantes sobre um conjunto de dados sobre as aves do Minnesota. Identificaste dados errados ao visualizar outliers e analisaste as diferenças entre categorias de aves com base no seu comprimento máximo.
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/18)
## Explorar o conjunto de dados das aves
Outra forma de explorar os dados é analisando a sua distribuição, ou como os dados estão organizados ao longo de um eixo. Talvez, por exemplo, queiras saber mais sobre a distribuição geral, neste conjunto de dados, da envergadura máxima ou da massa corporal máxima das aves do Minnesota.
Vamos descobrir alguns factos sobre as distribuições dos dados neste conjunto. No ficheiro _notebook.ipynb_ na raiz da pasta desta lição, importa Pandas, Matplotlib e os teus 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 | EstadoConservaçã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-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-testa-branca-maior | Anser albifrons | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
De forma geral, podes rapidamente observar como os dados estão distribuídos utilizando 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()
```
![comprimento máximo por ordem](../../../../3-Data-Visualization/10-visualization-distributions/images/scatter-wb.png)
Isto dá uma visão geral da distribuição do comprimento corporal por Ordem de aves, mas não é a forma ideal de mostrar distribuições reais. Essa tarefa é geralmente realizada através da criação de um Histograma.
## Trabalhar com histogramas
O Matplotlib oferece ótimas formas de visualizar a distribuição de dados utilizando Histogramas. Este tipo de gráfico é semelhante a um gráfico de barras, onde a distribuição pode ser vista através da subida e descida das barras. Para construir um histograma, precisas de dados numéricos. Para criar um Histograma, podes desenhar 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, é possível exibir a distribuição dos valores dos dados:
```python
birds['MaxBodyMass'].plot(kind = 'hist', bins = 10, figsize = (12,12))
plt.show()
```
![distribuição em todo o conjunto de dados](../../../../3-Data-Visualization/10-visualization-distributions/images/dist1-wb.png)
Como podes ver, a maioria das mais de 400 aves neste conjunto de dados tem uma Massa Corporal Máxima abaixo de 2000. Obtém 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()
```
![distribuição em todo o conjunto de dados com maior parâmetro bins](../../../../3-Data-Visualization/10-visualization-distributions/images/dist2-wb.png)
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 apenas selecionas dados dentro de um determinado intervalo:
Filtra os teus dados para obter apenas as aves cuja massa corporal seja inferior a 60 e mostra 40 `bins`:
```python
filteredBirds = birds[(birds['MaxBodyMass'] > 1) & (birds['MaxBodyMass'] < 60)]
filteredBirds['MaxBodyMass'].plot(kind = 'hist',bins = 40,figsize = (12,12))
plt.show()
```
![histograma filtrado](../../../../3-Data-Visualization/10-visualization-distributions/images/dist3-wb.png)
✅ Experimenta outros filtros e pontos de dados. Para ver a distribuição completa dos dados, remove o filtro `['MaxBodyMass']` para mostrar distribuições etiquetadas.
O histograma oferece algumas melhorias de cor e etiquetagem interessantes para experimentar também:
Cria um histograma 2D para comparar a relação entre duas distribuições. Vamos comparar `MaxBodyMass` vs. `MaxLength`. O Matplotlib oferece uma forma integrada de mostrar convergência utilizando 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 estes dois elementos ao longo de um eixo esperado, com um ponto de convergência particularmente forte:
![gráfico 2D](../../../../3-Data-Visualization/10-visualization-distributions/images/2D-wb.png)
Os histogramas funcionam bem por padrão para dados numéricos. E se precisarmos de ver distribuições de acordo com dados textuais?
## Explorar o conjunto de dados para distribuições utilizando dados textuais
Este conjunto de dados também inclui boas informações sobre a categoria das aves, o seu género, espécie e família, bem como o seu estado de conservação. Vamos explorar esta informação de conservação. Qual é a distribuição das aves de acordo com o seu estado de conservação?
> ✅ No conjunto de dados, vários acrónimos são usados para descrever o estado de conservação. Estes acrónimos vêm das [Categorias da Lista Vermelha da IUCN](https://www.iucnredlist.org/), uma organização que cataloga o estado das espécies.
>
> - CR: Criticamente em Perigo
> - EN: Em Perigo
> - EX: Extinto
> - LC: Pouca Preocupação
> - NT: Quase Ameaçado
> - VU: Vulnerável
Estes são valores baseados em texto, por isso será necessário fazer uma transformação para criar um histograma. Utilizando o dataframe filteredBirds, exibe o estado de conservação juntamente com a sua Envergadura Mínima. O que observas?
```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();
```
![colagem de envergadura e conservação](../../../../3-Data-Visualization/10-visualization-distributions/images/histogram-conservation-wb.png)
Não parece haver uma boa correlação entre a envergadura mínima e o estado de conservação. Testa outros elementos do conjunto de dados utilizando este método. Podes experimentar diferentes filtros também. Encontras alguma correlação?
## Gráficos de densidade
Podes ter notado que os histogramas que analisámos até agora são 'escalonados' e não fluem suavemente em arco. Para mostrar um gráfico de densidade mais suave, podes experimentar um gráfico de densidade.
Para trabalhar com gráficos de densidade, familiariza-te com uma nova biblioteca de gráficos, [Seaborn](https://seaborn.pydata.org/generated/seaborn.kdeplot.html).
Carregando o Seaborn, experimenta um gráfico de densidade básico:
```python
import seaborn as sns
import matplotlib.pyplot as plt
sns.kdeplot(filteredBirds['MinWingspan'])
plt.show()
```
![Gráfico de densidade](../../../../3-Data-Visualization/10-visualization-distributions/images/density1.png)
Podes 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 múltiplas distribuições. Mas tem o potencial de introduzir distorções se a distribuição subjacente for limitada ou não suave. Tal 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 com que os teus gráficos se comportem mal.
Se quisesses revisitar aquela linha irregular de MassaCorporalMax no segundo gráfico que construíste, poderias suavizá-la muito bem recriando-a utilizando este método:
```python
sns.kdeplot(filteredBirds['MaxBodyMass'])
plt.show()
```
![linha de massa corporal suave](../../../../3-Data-Visualization/10-visualization-distributions/images/density2.png)
Se quisesses uma linha suave, mas não demasiado suave, edita o parâmetro `bw_adjust`:
```python
sns.kdeplot(filteredBirds['MaxBodyMass'], bw_adjust=.2)
plt.show()
```
![linha de massa corporal menos suave](../../../../3-Data-Visualization/10-visualization-distributions/images/density3.png)
✅ Lê sobre os parâmetros disponíveis para este tipo de gráfico e experimenta!
Este tipo de gráfico oferece visualizações explicativas muito bonitas. Com algumas linhas de código, por exemplo, podes mostrar a densidade de massa corporal máxima por Ordem de aves:
```python
sns.kdeplot(
data=filteredBirds, x="MaxBodyMass", hue="Order",
fill=True, common_norm=False, palette="crest",
alpha=.5, linewidth=0,
)
```
![massa corporal por ordem](../../../../3-Data-Visualization/10-visualization-distributions/images/density4.png)
Também podes mapear a densidade de várias variáveis num único gráfico. Testa o ComprimentoMáximo e ComprimentoMínimo de uma ave em comparação com o seu estado de conservação:
```python
sns.kdeplot(data=filteredBirds, x="MinLength", y="MaxLength", hue="ConservationStatus")
```
![múltiplas densidades, sobrepostas](../../../../3-Data-Visualization/10-visualization-distributions/images/multi.png)
Talvez valha a pena investigar se o agrupamento de aves 'Vulneráveis' de acordo com os 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. Faz uma pesquisa na internet para encontrar bons exemplos do uso de histogramas. Como são utilizados, o que demonstram e em que áreas ou campos de investigação tendem a ser usados?
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/19)
## Revisão & Autoestudo
Nesta lição, utilizaste o Matplotlib e começaste a trabalhar com o Seaborn para mostrar gráficos mais sofisticados. Faz alguma pesquisa sobre `kdeplot` no Seaborn, uma "curva de densidade de probabilidade contínua em uma ou mais dimensões". Lê a [documentação](https://seaborn.pydata.org/generated/seaborn.kdeplot.html) para entender como funciona.
## Tarefa
[Aplica as tuas competências](assignment.md)
---
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a 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 oficial. 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 resultantes do uso desta tradução.

@ -0,0 +1,14 @@
# Aplique as suas competências
## Instruções
Até agora, 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 destas técnicas experimentando um conjunto de dados diferente, talvez obtido em [Kaggle](https://www.kaggle.com/). Crie um notebook para contar uma história sobre este conjunto de dados e certifique-se de usar histogramas ao analisá-lo.
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | --- |
Um notebook é apresentado com anotações sobre este conjunto de dados, incluindo a sua origem, e utiliza pelo menos 5 histogramas para descobrir factos 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, é 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 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,32 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Distribuições de aves\n"
],
"metadata": {}
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**Aviso Legal**: \nEste documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a 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 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 resultantes do uso desta tradução.\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python"
},
"coopTranslator": {
"original_hash": "e5272cbcbffd1ddcc09e44d3d8e7e8cd",
"translation_date": "2025-09-02T09:05:20+00:00",
"source_file": "3-Data-Visualization/10-visualization-distributions/notebook.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,195 @@
# Visualizar Proporções
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/11-Visualizing-Proportions.png)|
|:---:|
|Visualizar Proporções - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Nesta lição, vais usar um conjunto de dados focado na natureza para visualizar proporções, como o número de diferentes tipos de fungos que compõem um conjunto de dados sobre cogumelos. Vamos explorar estes fascinantes fungos utilizando um conjunto de dados obtido da Audubon, que lista detalhes sobre 23 espécies de cogumelos com lamelas das famílias Agaricus e Lepiota. Vais experimentar visualizações interessantes como:
- Gráficos de pizza 🥧
- Gráficos de donut 🍩
- 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. Num dos seus tutoriais, eles também utilizam este conjunto de dados sobre cogumelos! Assim, podes explorar os dados e aprender a biblioteca ao mesmo tempo: [Tutorial do Charticulator](https://charticulator.com/tutorials/tutorial4.html).
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/20)
## Conhece os teus cogumelos 🍄
Os 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 alguns dados excelentes para análise:
| 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 |
| --------- | --------- | ----------- | --------- | ------- | ------- | --------------- | ------------ | --------- | ---------- | ----------- | ---------- | ------------------------ | ------------------------ | ---------------------- | ---------------------- | --------- | ---------- | ----------- | --------- | ----------------- | ---------- | ------- |
| Venenoso | Convexo | Liso | Castanho | Sim | Pungente | Livre | Fechado | Estreito | Preto | Alargado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Espalhado | Urbano |
| Comestível| Convexo | Liso | Amarelo | Sim | Amêndoa | Livre | Fechado | Largo | Preto | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Castanho | Numeroso | Relva |
| Comestível| Sino | Liso | Branco | Sim | Anis | Livre | Fechado | Largo | Castanho | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Castanho | Numeroso | Prados |
| Venenoso | Convexo | Escamoso | Branco | Sim | Pungente | Livre | Fechado | Estreito | Castanho | Alargado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Espalhado | Urbano |
De imediato, percebes que todos os dados são textuais. Vais precisar converter estes dados para poder utilizá-los num 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')
```
Converte a coluna 'class' 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 imprimires os dados dos cogumelos, podes ver que foram agrupados em categorias de acordo com a classe venenoso/comestível:
| | cap-shape | cap-surface | cap-color | bruises | odor | gill-attachment | gill-spacing | gill-size | gill-color | stalk-shape | ... | 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 |
| --------- | --------- | ----------- | --------- | ------- | ---- | --------------- | ------------ | --------- | ---------- | ----------- | --- | ------------------------ | ---------------------- | ---------------------- | --------- | ---------- | ----------- | --------- | ----------------- | ---------- | ------- |
| class | | | | | | | | | | | | | | | | | | | | | |
| 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 seguires a ordem apresentada nesta tabela para criar os rótulos das categorias da classe, podes 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 destes dados de acordo com estas duas classes de cogumelos. É bastante importante obter a ordem dos rótulos correta, especialmente aqui, por isso verifica a ordem com que o array de rótulos é construído!
![gráfico de pizza](../../../../3-Data-Visualization/11-visualization-proportions/images/pie1-wb.png)
## Donuts!
Um gráfico de pizza um pouco mais visualmente interessante é o gráfico de donut, que é um gráfico de pizza com um buraco no meio. Vamos olhar para os nossos dados usando este método.
Observa os vários habitats onde os cogumelos crescem:
```python
habitat=mushrooms.groupby(['habitat']).count()
habitat
```
Aqui, estás a agrupar os teus dados por habitat. Existem 7 listados, por isso usa-os como rótulos para o teu gráfico de donut:
```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()
```
![gráfico de donut](../../../../3-Data-Visualization/11-visualization-proportions/images/donut-wb.png)
Este código desenha um gráfico e um círculo central, depois adiciona esse círculo central ao gráfico. Edita a largura do círculo central alterando `0.40` para outro valor.
Os gráficos de donut podem ser ajustados de várias formas para alterar os rótulos. Os rótulos, em particular, podem ser destacados para melhorar a legibilidade. Aprende mais nos [docs](https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_and_donut_labels.html?highlight=donut).
Agora que sabes como agrupar os teus dados e depois exibi-los como pizza ou donut, podes explorar outros tipos de gráficos. Experimenta um gráfico de waffle, que é apenas uma forma diferente de explorar quantidades.
## Waffles!
Um gráfico do tipo 'waffle' é uma forma diferente de visualizar quantidades como uma matriz 2D de quadrados. Experimenta visualizar as diferentes quantidades de cores de chapéus de cogumelos neste conjunto de dados. Para isso, precisas de instalar uma biblioteca auxiliar chamada [PyWaffle](https://pypi.org/project/pywaffle/) e usar Matplotlib:
```python
pip install pywaffle
```
Seleciona um segmento dos teus dados para agrupar:
```python
capcolor=mushrooms.groupby(['cap-color']).count()
capcolor
```
Cria um gráfico de waffle criando rótulos e depois agrupando os teus 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, podes ver claramente as proporções das cores dos chapéus neste conjunto de dados de cogumelos. Curiosamente, há muitos cogumelos com chapéus verdes!
![gráfico de waffle](../../../../3-Data-Visualization/11-visualization-proportions/images/waffle.png)
✅ O PyWaffle suporta ícones dentro dos gráficos que utilizam qualquer ícone disponível no [Font Awesome](https://fontawesome.com/). Faz algumas experiências para criar um gráfico de waffle ainda mais interessante usando ícones em vez de quadrados.
Nesta lição, aprendeste três formas de visualizar proporções. Primeiro, precisas de agrupar os teus dados em categorias e depois decidir qual é a melhor forma de exibir os dados - pizza, donut ou waffle. Todos são deliciosos e proporcionam ao utilizador uma visão instantânea de um conjunto de dados.
## 🚀 Desafio
Tenta recriar estes gráficos saborosos no [Charticulator](https://charticulator.com).
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/21)
## Revisão & Autoestudo
Por vezes, não é óbvio quando usar um gráfico de pizza, donut ou waffle. Aqui estão alguns artigos para ler sobre este tema:
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
Faz algumas pesquisas para encontrar mais informações sobre esta decisão difícil.
## Tarefa
[Experimenta 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 na sua língua nativa deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas resultantes do uso desta tradução.

@ -0,0 +1,14 @@
# Experimente no Excel
## Instruções
Sabia que pode criar gráficos de rosca, gráficos de pizza e gráficos de waffle no Excel? Usando um conjunto de dados à sua escolha, crie estes três tipos de gráficos diretamente numa folha de cálculo do Excel.
## Critérios de Avaliação
| Exemplar | Adequado | Necessita de Melhorias |
| ------------------------------------------------------- | ------------------------------------------------- | ---------------------------------------------------- |
| É apresentada uma folha de cálculo do Excel com os três gráficos | É apresentada uma folha de cálculo do Excel com dois gráficos | É apresentada uma folha de cálculo do Excel 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 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 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 automática [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 no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python"
},
"coopTranslator": {
"original_hash": "397e9bbc0743761dbf72e5f16b7043e6",
"translation_date": "2025-09-02T08:37:17+00:00",
"source_file": "3-Data-Visualization/11-visualization-proportions/notebook.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,179 @@
# Visualizar Relações: Tudo Sobre Mel 🍯
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/12-Visualizing-Relationships.png)|
|:---:|
|Visualizar Relações - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Dando continuidade ao foco na natureza da nossa pesquisa, vamos descobrir visualizações interessantes para mostrar as relações entre vários tipos de mel, com base num 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, apresenta a produção de mel em vários estados dos EUA. Por exemplo, é possível analisar o número de colmeias, a produção por colmeia, a produção total, os estoques, o preço por libra e o valor do mel produzido em determinado estado entre 1998 e 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, pode-se visualizar a relação entre a produção por colmeia em diferentes estados. Este período inclui 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 relevante para estudo. 🐝
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/22)
Nesta lição, pode-se usar o Seaborn, que já foi utilizado anteriormente, 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 linhas para visualizar rapidamente '[relações estatísticas](https://seaborn.pydata.org/tutorial/relational.html?highlight=relationships)', ajudando o cientista de dados a compreender 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, utilizando `relplot`, agrupa convenientemente os dados por estado e exibe pontos de dados para dados categóricos e numéricos.
Vamos começar por importar 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()
```
Nota-se que os dados sobre o mel possuem várias colunas interessantes, incluindo o ano e o preço por libra. Vamos explorar esses dados, agrupados por estado dos EUA:
| estado | numcol | prodporcol | prodtotal | estoques | precoporlb | valorprod | 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 do mel e o estado de origem nos EUA. Ajuste o eixo `y` para ser alto o suficiente para exibir todos os estados:
```python
sns.relplot(x="priceperlb", y="state", data=honey, height=15, aspect=.5);
```
![gráfico de dispersão 1](../../../../translated_images/pt-PT/scatter1.5e1aa5fd6706c5d12b5e503ccb77f8a930f8620f539f524ddf56a16c039a5d2f.png)
Agora, mostre os mesmos dados com um esquema de cores de mel para ilustrar como o preço evolui ao longo dos anos. Pode-se fazer isso adicionando um parâmetro 'hue' para mostrar a mudança, ano após ano:
> ✅ Saiba mais sobre as [paletas de cores disponíveis 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);
```
![gráfico de dispersão 2](../../../../translated_images/pt-PT/scatter2.c0041a58621ca702990b001aa0b20cd68c1e1814417139af8a7211a2bed51c5f.png)
Com esta mudança no esquema de cores, é possível perceber claramente uma forte progressão ao longo dos anos no preço do mel por libra. De fato, ao verificar um conjunto de amostras nos dados (escolha um estado, como o Arizona, por exemplo), é possível observar um padrão de aumento de preços ano após ano, com poucas exceções:
| estado | numcol | prodporcol | prodtotal | estoques | precoporlb | valorprod | 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 esta progressão é usar o tamanho, em vez da cor. Para utilizadores daltónicos, esta pode ser uma opção melhor. Edite a visualização para mostrar o aumento do preço através do aumento da circunferência dos pontos:
```python
sns.relplot(x="priceperlb", y="state", size="year", data=honey, height=15, aspect=.5);
```
Pode-se observar que o tamanho dos pontos aumenta gradualmente.
![gráfico de dispersão 3](../../../../translated_images/pt-PT/scatter3.3c160a3d1dcb36b37900ebb4cf97f34036f28ae2b7b8e6062766c7c1dfc00853.png)
Será este um caso simples de oferta e procura? Devido a fatores como mudanças climáticas e o colapso das colónias, haverá menos mel disponível para compra ano após ano, e, assim, o preço aumenta?
Para descobrir uma correlação entre algumas das variáveis deste conjunto de dados, vamos explorar alguns gráficos de linhas.
## Gráficos de Linhas
Pergunta: Existe um aumento claro no preço do mel por libra ao longo dos anos? Pode-se descobrir isso facilmente criando um único gráfico de linhas:
```python
sns.relplot(x="year", y="priceperlb", kind="line", data=honey);
```
Resposta: Sim, com algumas exceções por volta do ano 2003:
![gráfico de linhas 1](../../../../translated_images/pt-PT/line1.f36eb465229a3b1fe385cdc93861aab3939de987d504b05de0b6cd567ef79f43.png)
✅ Como o Seaborn está a agregar dados numa única linha, ele exibe "as múltiplas medições em cada valor de x, traçando a média e o intervalo de confiança de 95% em torno da média". [Fonte](https://seaborn.pydata.org/tutorial/relational.html). Este comportamento, que consome tempo, pode ser desativado adicionando `ci=None`.
Pergunta: Bem, em 2003 também podemos observar um pico na oferta de mel? E se analisarmos a produção total ano após ano?
```python
sns.relplot(x="year", y="totalprod", kind="line", data=honey);
```
![gráfico de linhas 2](../../../../translated_images/pt-PT/line2.a5b3493dc01058af6402e657aaa9ae1125fafb5e7d6630c777aa60f900a544e4.png)
Resposta: Não exatamente. Ao observar a produção total, parece que ela realmente aumentou naquele ano específico, embora, de forma geral, a quantidade de mel produzido 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, pode-se explorar uma grelha de facetas.
## Grelhas de Facetas
As grelhas de facetas utilizam uma faceta do conjunto de dados (neste caso, pode-se escolher 'ano' para evitar produzir muitas facetas). O Seaborn pode então criar um gráfico para cada uma dessas facetas com as coordenadas x e y escolhidas, facilitando a comparação visual. O ano de 2003 destaca-se neste tipo de comparação?
Crie uma grelha 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, pode-se comparar a produção por colmeia e o número de colmeias ano após ano, lado a lado, com um limite de 3 colunas:
![grelha de facetas](../../../../translated_images/pt-PT/facet.6a34851dcd540050dcc0ead741be35075d776741668dd0e42f482c89b114c217.png)
Para este conjunto de dados, nada particularmente se destaca em relação ao número de colmeias e sua produção, ano após ano e estado por estado. Existe uma forma diferente de encontrar uma correlação entre estas duas variáveis?
## Gráficos de Linhas Duplas
Experimente um gráfico de linhas múltiplas sobrepondo dois gráficos de linhas um sobre o outro, utilizando o 'despine' do Seaborn para remover as margens superior e direita, e usando `ax.twinx` [derivado do Matplotlib](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.twinx.html). O Twinx permite que um gráfico compartilhe o eixo x e exiba dois eixos y. Assim, exiba a produção por colmeia e o número de colmeias, 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();
```
![gráficos sobrepostos](../../../../translated_images/pt-PT/dual-line.a4c28ce659603fab2c003f4df816733df2bf41d1facb7de27989ec9afbf01b33.png)
Embora nada salte aos olhos em relação ao ano de 2003, isso permite encerrar esta lição com uma nota um pouco mais feliz: embora o número de colmeias esteja em declínio geral, ele está a estabilizar, mesmo que a produção por colmeia esteja a diminuir.
Força, abelhas! 🐝❤️
## 🚀 Desafio
Nesta lição, aprendeu-se um pouco mais sobre outros usos de gráficos de dispersão e grelhas de linhas, incluindo grelhas de facetas. Desafie-se a criar uma grelha de facetas utilizando um conjunto de dados diferente, talvez um que tenha usado antes destas lições. Note quanto tempo demora a criar e como é necessário ter cuidado com o número de grelhas a desenhar utilizando estas técnicas.
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/23)
## Revisão e Autoestudo
Os gráficos de linhas podem ser simples ou bastante complexos. Leia um pouco mais na [documentação do Seaborn](https://seaborn.pydata.org/generated/seaborn.lineplot.html) sobre as várias formas de construí-los. Tente melhorar os gráficos de linhas que 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. 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,14 @@
# Mergulhe na colmeia
## Instruções
Nesta lição, começaste a explorar um conjunto de dados sobre abelhas e a sua produção de mel ao longo de um período de tempo que registou perdas na população geral das colónias de abelhas. Aprofunda-te neste conjunto de dados e cria um notebook que consiga contar a história da saúde da população de abelhas, estado por estado e ano após ano. Descobres algo interessante neste 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 aspetos do conjunto de dados, estado por estado e ano após ano | O notebook carece de um destes elementos | O notebook carece de dois destes 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, tenha em atenção 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.

@ -0,0 +1,32 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Visualizar 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python"
},
"coopTranslator": {
"original_hash": "0f988634b7192626d91cc33b4b6388c5",
"translation_date": "2025-09-02T08:56:48+00:00",
"source_file": "3-Data-Visualization/12-visualization-relationships/notebook.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,173 @@
# Criando Visualizações Significativas
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../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 os seus dados, é necessário garantir que eles foram limpos e preparados, como feito em lições anteriores. Depois disso, você pode começar a decidir a melhor forma de apresentar os dados.
Nesta lição, você irá revisar:
1. Como escolher o tipo de gráfico certo
2. Como evitar gráficos enganosos
3. Como trabalhar com cores
4. Como estilizar os gráficos para melhorar a 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 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 seja suportado.
## 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 comprometer os próprios dados. Há muitos exemplos de gráficos e infográficos enganosos!
[![How Charts Lie por Alberto Cairo](../../../../3-Data-Visualization/13-meaningful-visualizations/images/tornado.png)](https://www.youtube.com/watch?v=oX74Nge8Wkw "How charts lie")
> 🎥 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:
![gráfico ruim 1](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-1.png)
[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 descendente enganosa.
![gráfico ruim 2](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-2.jpg)
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:
![gráfico ruim 3](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-3.jpg)
Este gráfico estranho mostra como a proporção pode ser manipulada, com efeito hilário:
![gráfico ruim 4](../../../../3-Data-Visualization/13-meaningful-visualizations/images/bad-chart-4.jpg)
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 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 utilizadores podem ter daltonismo - o seu gráfico é exibido bem para utilizadores com deficiências visuais?
Tenha cuidado ao escolher cores para o 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 a 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 os seus gráficos sejam acessíveis e que a cor escolhida coincida com o significado que você está tentando transmitir.
## Estilizando os 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 os seus eixos, forneça uma legenda, se necessário, e ofereça tooltips para melhor compreensão dos dados.
Se os 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 os seus dados suportarem. Visualizações de dados sofisticadas podem ser produzidas usando `mpl_toolkits.mplot3d`.
![gráficos 3D](../../../../3-Data-Visualization/13-meaningful-visualizations/images/3d.png)
## 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 o problema dos sem-teto, enviando pessoas para fora da cidade.
![busing](../../../../3-Data-Visualization/13-meaningful-visualizations/images/busing.png)
> "Bussed Out: How America Moves its Homeless" 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 em profundidade essas poderosas bibliotecas de visualização, experimente usar D3 em uma aplicação Vue.js com uma biblioteca para exibir uma visualização do livro "Dangerous Liaisons" 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 no 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 um grande dano social. 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á uma aplicação web que exibirá uma visão animada dessa rede social. Ela 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 a aplicação estiver em execução, você poderá mover os nós na tela para reorganizar os dados.
![liaisons](../../../../3-Data-Visualization/13-meaningful-visualizations/images/liaisons.png)
## Projeto: Crie um gráfico para mostrar uma rede usando D3.js
> Esta pasta da lição inclui uma pasta `solution` onde você pode encontrar o projeto completo, para 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 na 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 de 'para' e 'de'.
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 '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 a sua aplicação a partir do terminal (npm run serve) e aproveite a visualização!
## 🚀 Desafio
Faça uma pesquisa na internet para descobrir visualizações enganosas. Como o autor engana o utilizador, 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, é importante ter em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.

@ -0,0 +1,14 @@
# Crie a sua própria visualização personalizada
## Instruções
Utilizando o exemplo de código deste projeto para criar uma rede social, simule dados das suas próprias interações sociais. Pode mapear o seu uso de redes sociais ou criar um diagrama dos membros da sua família. Desenvolva uma aplicação web interessante que apresente uma visualização única de uma rede social.
## Critérios de Avaliação
Exemplar | Adequado | Necessita de Melhorias
--- | --- | --- |
Um repositório GitHub é apresentado com código que funciona corretamente (experimente implementá-lo como uma aplicação web estática) e inclui um README anotado que explica 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, tenha em atenção 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 da utilização desta tradução.

@ -0,0 +1,29 @@
# Projeto de visualização de dados Dangerous Liaisons
Para começar, certifique-se de que tem o NPM e o Node instalados e a funcionar 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 ficheiros
```
npm run lint
```
### Personalizar configuração
Consulte [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 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.

@ -0,0 +1,29 @@
# Projeto de visualização de dados Dangerous Liaisons
Para começar, certifique-se de que tem o NPM e o Node instalados e a funcionar na sua máquina. Instale as dependências (npm install) e depois 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 ficheiros
```
npm run lint
```
### Personalizar configuração
Consulte [Configuration Reference](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, tenha em atenção 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.

@ -0,0 +1,220 @@
# Visualizar Quantidades
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/09-Visualizing-Quantities.png)|
|:---:|
| Visualizar Quantidades - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Nesta lição, vais explorar como utilizar 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 do Minnesota, podes aprender muitos factos interessantes sobre a vida selvagem local.
## [Questionário pré-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/16)
## Observar a envergadura com ggplot2
Uma biblioteca excelente para criar gráficos e diagramas simples e sofisticados de vários tipos é [ggplot2](https://cran.r-project.org/web/packages/ggplot2/index.html). Em termos gerais, o processo de criação de gráficos usando estas bibliotecas inclui identificar as partes do teu dataframe que queres analisar, realizar as transformações necessárias nos dados, atribuir os valores dos eixos x e y, decidir o tipo de gráfico a mostrar e, finalmente, exibir o gráfico.
`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 usado para visualizações em R. O utilizador informa ao `ggplot2` como mapear as variáveis para os elementos visuais, os primitivos gráficos a usar, e o `ggplot2` cuida do resto.
> ✅ 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 linhas, barras, etc.)
Escolhe a melhor geometria (tipo de gráfico) de acordo com os teus dados e a história que queres contar através do gráfico.
> - Para analisar tendências: linha, coluna
> - Para comparar valores: barra, coluna, circular, dispersão
> - Para mostrar como as partes se relacionam com o todo: circular
> - Para mostrar a distribuição dos dados: dispersão, barra
> - Para mostrar relações entre valores: linha, dispersão, bolha
✅ Também podes consultar este [cheatsheet descritivo](https://nyu-cdsc.github.io/learningr/assets/data-visualization-2.1.pdf) para ggplot2.
## Criar um gráfico de linhas sobre os valores de envergadura das aves
Abre o console do R e importa 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 5) dos dados.
```r
birds <- read.csv("../../data/birds.csv",fileEncoding="UTF-8-BOM")
head(birds)
```
O início dos dados tem uma mistura de texto e números:
| | Nome | NomeCientífico | Categoria | Ordem | Família | Género | EstadoConservação | MinComprimento | MaxComprimento | MinMassaCorporal | MaxMassaCorporal | MinEnvergadura | MaxEnvergadura |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 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-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-testa-branca-maior | Anser albifrons | Patos/Gansos/AvesAquáticas | Anseriformes | Anatidae | Anser | LC | 64 | 81 | 1930 | 3310 | 130 | 165 |
Vamos começar por representar graficamente alguns dos dados numéricos usando um gráfico de linhas básico. Suponhamos que queres visualizar a envergadura máxima destas aves interessantes.
```r
install.packages("ggplot2")
library("ggplot2")
ggplot(data=birds, aes(x=Name, y=MaxWingspan,group=1)) +
geom_line()
```
Aqui, instalas o pacote `ggplot2` e depois importas para o ambiente de trabalho usando o comando `library("ggplot2")`. Para criar qualquer gráfico no ggplot, usa-se a função `ggplot()` e especifica-se o conjunto de dados, as variáveis x e y como atributos. Neste caso, usamos a função `geom_line()` porque queremos criar um gráfico de linhas.
![MaxWingspan-lineplot](../../../../../translated_images/pt-PT/MaxWingspan-lineplot.b12169f99d26fdd263f291008dfd73c18a4ba8f3d32b1fda3d74af51a0a28616.png)
O que notas imediatamente? Parece haver pelo menos um valor atípico - que envergadura impressionante! Uma envergadura de mais de 2000 centímetros equivale a mais de 20 metros - será que há Pterodáctilos a voar em Minnesota? Vamos investigar.
Embora pudesses fazer uma ordenação rápida no Excel para encontrar esses valores atípicos, que provavelmente são erros de digitação, continua o processo de visualização trabalhando diretamente no gráfico.
Adiciona rótulos ao eixo x para mostrar que tipo de aves 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()` respetivamente. O `ggtitle()` dá um nome ao gráfico.
![MaxWingspan-lineplot-improved](../../../../../translated_images/pt-PT/MaxWingspan-lineplot-improved.04b73b4d5a59552a6bc7590678899718e1f065abe9eada9ebb4148939b622fd4.png)
Mesmo com a rotação dos rótulos definida para 45 graus, há demasiados para ler. Vamos tentar uma estratégia diferente: rotular apenas os valores atípicos e definir os rótulos dentro do gráfico. Podes 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á a acontecer aqui? Usaste a função `geom_point()` para criar pontos de dispersão. Com isso, adicionaste rótulos para aves cuja `MaxWingspan > 500` e também ocultaste os rótulos no eixo x para desobstruir o gráfico.
O que descobres?
![MaxWingspan-scatterplot](../../../../../translated_images/pt-PT/MaxWingspan-scatterplot.60dc9e0e19d32700283558f253841fdab5104abb62bc96f7d97f9c0ee857fa8b.png)
## Filtrar os teus dados
Tanto a Águia-careca como o Falcão-das-pradarias, embora provavelmente sejam aves muito grandes, parecem estar mal rotulados, com um zero extra adicionado à sua envergadura máxima. É improvável que encontres uma Águia-careca com uma envergadura de 25 metros, mas, se isso acontecer, avisa-nos! Vamos criar um novo dataframe sem esses dois valores atípicos:
```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())
```
Criámos um novo dataframe `birds_filtered` e depois representámos um gráfico de dispersão. Ao filtrar os valores atípicos, os teus dados tornam-se mais coesos e compreensíveis.
![MaxWingspan-scatterplot-improved](../../../../../translated_images/pt-PT/MaxWingspan-scatterplot-improved.7d0af81658c65f3e75b8fedeb2335399e31108257e48db15d875ece608272051.png)
Agora que temos um conjunto de dados mais limpo, pelo menos em termos de envergadura, vamos descobrir mais sobre estas aves.
Embora gráficos de linhas 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. Podes criar visualizações para responder às seguintes perguntas sobre quantidade:
> Quantas categorias de aves existem e quais são os seus números?
> Quantas aves estão extintas, em perigo, raras ou comuns?
> Quantas existem dos vários géneros e ordens na terminologia de Linnaeus?
## Explorar gráficos de barras
Os gráficos de barras são práticos quando precisas de mostrar agrupamentos de dados. Vamos explorar as categorias de aves 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 seguinte trecho, 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 para criar um gráfico de barras empilhado. Primeiro, agrupas os dados pela `Categoria` das aves e depois resumes as colunas `MinLength`, `MaxLength`, `MinBodyMass`, `MaxBodyMass`, `MinWingspan`, `MaxWingspan`. Em seguida, crias o gráfico de barras usando o pacote `ggplot2` e especificas as cores para as diferentes categorias e os rótulos.
![Stacked bar chart](../../../../../translated_images/pt-PT/stacked-bar-chart.0c92264e89da7b391a7490224d1e7059a020e8b74dcd354414aeac78871c02f1.png)
Este gráfico de barras, no entanto, é ilegível porque há demasiados dados não agrupados. Precisamos de selecionar apenas os dados que queremos representar, então vamos observar o comprimento das aves com base na sua categoria.
Filtra os teus dados para incluir apenas a categoria das aves.
Como há muitas categorias, podes exibir este gráfico verticalmente e ajustar a 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, contas os valores únicos na coluna `Categoria` e depois ordenas num novo dataframe `birds_count`. Estes dados ordenados são então considerados no mesmo nível para que sejam representados de forma ordenada. Usando o `ggplot2`, crias o gráfico de barras. O `coord_flip()` cria barras horizontais.
![category-length](../../../../../translated_images/pt-PT/category-length.7e34c296690e85d64f7e4d25a56077442683eca96c4f5b4eae120a64c0755636.png)
Este gráfico de barras mostra uma boa visão do número de aves em cada categoria. Num piscar de olhos, vês que o maior número de aves nesta região pertence à categoria de Patos/Gansos/AvesAquáticas. Minnesota é a 'terra dos 10.000 lagos', então isto não é surpreendente!
✅ Experimenta algumas outras contagens neste conjunto de dados. Algo te surpreende?
## Comparar dados
Podes tentar diferentes comparações de dados agrupados criando novos eixos. Experimenta uma comparação do MaxLength de uma ave, com base na 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` pela `Categoria` e depois criamos um gráfico de barras.
![comparing data](../../../../../translated_images/pt-PT/comparingdata.f486a450d61c7ca5416f27f3f55a6a4465d00df3be5e6d33936e9b07b95e2fdd.png)
Nada é surpreendente aqui: os beija-flores têm o menor MaxLength em comparação com os Pelicanos ou Gansos. É bom quando os dados fazem sentido lógico!
Podes criar visualizações mais interessantes de gráficos de barras sobrepondo dados. Vamos sobrepor o Comprimento Mínimo e Máximo numa determinada categoria de aves:
```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()
```
![super-imposed values](../../../../../translated_images/pt-PT/superimposed-values.5363f0705a1da4167625a373a1064331ea3cb7a06a297297d0734fcc9b3819a0.png)
## 🚀 Desafio
Este conjunto de dados sobre aves oferece uma riqueza de informações sobre diferentes tipos de aves dentro de um ecossistema particular. Procura na internet e vê se consegues encontrar outros conjuntos de dados relacionados com aves. Pratica a criação de gráficos e diagramas sobre estas aves para descobrir factos que não conhecias.
## [Questionário pós-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/17)
## Revisão & Autoestudo
Esta primeira lição deu-te algumas informações sobre como usar o `ggplot2` para visualizar quantidades. Faz alguma pesquisa sobre outras formas de trabalhar com conjuntos de dados para visualização. Pesquisa e procura conjuntos de dados que possas 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo 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 resultantes do uso desta tradução.

@ -0,0 +1,14 @@
# Linhas, Dispersões e Barras
## Instruções
Nesta lição, trabalhaste com gráficos de linhas, dispersões e gráficos de barras para mostrar factos interessantes sobre este conjunto de dados. Nesta tarefa, explora mais profundamente o conjunto de dados para descobrir um facto sobre um determinado tipo de ave. Por exemplo, cria um script que visualize todos os dados interessantes que conseguires encontrar sobre Gansos-das-neves. Usa os três gráficos mencionados acima para contar uma história no teu caderno.
## Rubrica
Exemplar | Adequado | Precisa de Melhorias
--- | --- | --- |
Um script é apresentado com boas anotações, narrativa sólida e gráficos atrativos | O script está a faltar um destes elementos | O script está a faltar dois destes 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 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 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,174 @@
# Visualizar Distribuições
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](https://github.com/microsoft/Data-Science-For-Beginners/blob/main/sketchnotes/10-Visualizing-Distributions.png)|
|:---:|
| Visualizar Distribuições - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Na lição anterior, aprendeste alguns factos interessantes sobre um conjunto de dados sobre as aves do Minnesota. Identificaste dados erróneos ao visualizar outliers e analisaste as diferenças entre categorias de aves com base no seu comprimento máximo.
## [Questionário pré-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/18)
## Explorar o conjunto de dados das aves
Outra forma de analisar os dados é observar a sua distribuição, ou seja, como os dados estão organizados ao longo de um eixo. Talvez, por exemplo, queiras saber sobre a distribuição geral, neste conjunto de dados, da envergadura máxima ou da massa corporal máxima das aves do Minnesota.
Vamos descobrir alguns factos sobre as distribuições de dados neste conjunto de dados. No teu console R, importa o `ggplot2` e a base de dados. Remove os outliers da base de dados, tal como fizeste 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 | EstadoConservação | ComprMin | ComprMax | MassaMin | MassaMax | EnvergMin | EnvergMax |
| ---: | :--------------------------- | :--------------------- | :-------------------- | :----------- | :------- | :---------- | :----------------- | --------: | --------: | ----------: | ----------: | ----------: | ----------: |
| 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 |
De forma geral, podes rapidamente observar como os dados estão distribuídos utilizando 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()
```
![comprimento máximo por ordem](../../../../../translated_images/pt-PT/max-length-per-order.e5b283d952c78c12b091307c5d3cf67132dad6fefe80a073353b9dc5c2bd3eb8.png)
Isto dá uma visão geral da distribuição do comprimento corporal por Ordem de aves, mas não é a forma ideal de exibir distribuições reais. Essa tarefa é geralmente realizada criando um Histograma.
## Trabalhar com histogramas
O `ggplot2` oferece ótimas formas de visualizar a distribuição de dados usando Histogramas. Este tipo de gráfico é semelhante a um gráfico de barras, onde a distribuição pode ser observada através do aumento e diminuição das barras. Para construir um histograma, precisas de dados numéricos. Para criar um Histograma, podes traçar um gráfico definindo o tipo como 'hist' para Histograma. Este gráfico mostra a distribuição de MaxBodyMass para todo o intervalo de dados numéricos do conjunto de dados. Dividindo o conjunto de dados em intervalos menores, é possível exibir a distribuição dos valores dos dados:
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) +
geom_histogram(bins=10)+ylab('Frequency')
```
![distribuição em todo o conjunto de dados](../../../../../translated_images/pt-PT/distribution-over-the-entire-dataset.d22afd3fa96be854e4c82213fedec9e3703cba753d07fad4606aadf58cf7e78e.png)
Como podes ver, a maioria das mais de 400 aves neste conjunto de dados tem uma Massa Corporal Máxima inferior a 2000. Obtém mais informações sobre os dados alterando o parâmetro `bins` para um número maior, como 30:
```r
ggplot(data = birds_filtered, aes(x = MaxBodyMass)) + geom_histogram(bins=30)+ylab('Frequency')
```
![distribuição-30bins](../../../../../translated_images/pt-PT/distribution-30bins.6a3921ea7a421bf71f06bf5231009e43d1146f1b8da8dc254e99b5779a4983e5.png)
Este gráfico mostra a distribuição de forma um pouco mais detalhada. Um gráfico menos enviesado para a esquerda pode ser criado garantindo que apenas selecionas dados dentro de um determinado intervalo:
Filtra os teus dados para obter apenas as aves cuja massa corporal seja inferior a 60 e mostra 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')
```
![histograma filtrado](../../../../../translated_images/pt-PT/filtered-histogram.6bf5d2bfd82533220e1bd4bc4f7d14308f43746ed66721d9ec8f460732be6674.png)
✅ Experimenta outros filtros e pontos de dados. Para ver a distribuição completa dos dados, remove o filtro `['MaxBodyMass']` para mostrar distribuições rotuladas.
O histograma oferece também algumas melhorias de cor e rotulagem interessantes para experimentar:
Cria um histograma 2D para comparar a relação entre duas distribuições. Vamos comparar `MaxBodyMass` vs. `MaxLength`. O `ggplot2` oferece uma forma 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 estes dois elementos ao longo de um eixo esperado, com um ponto de convergência particularmente forte:
![gráfico 2d](../../../../../translated_images/pt-PT/2d-plot.c504786f439bd7ebceebf2465c70ca3b124103e06c7ff7214bf24e26f7aec21e.png)
Os histogramas funcionam bem por padrão para dados numéricos. E se precisares de ver distribuições de acordo com dados textuais?
## Explorar o conjunto de dados para distribuições usando dados textuais
Este conjunto de dados também inclui boas informações sobre a categoria da ave, o seu género, espécie e família, bem como o seu estado de conservação. Vamos explorar esta informação de conservação. Qual é a distribuição das aves de acordo com o seu estado de conservação?
> ✅ No conjunto de dados, são usados vários acrónimos para descrever o estado de conservação. Estes acrónimos vêm das [Categorias da Lista Vermelha da IUCN](https://www.iucnredlist.org/), uma organização que cataloga o estado das espécies.
>
> - CR: Criticamente em Perigo
> - EN: Em Perigo
> - EX: Extinto
> - LC: Pouco Preocupante
> - NT: Quase Ameaçado
> - VU: Vulnerável
Estes são valores baseados em texto, por isso precisarás de fazer uma transformação para criar um histograma. Usando o dataframe filteredBirds, exibe o estado de conservação juntamente com a sua Envergadura Mínima. O que observas?
```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"))
```
![envergadura e conservação](../../../../../translated_images/pt-PT/wingspan-conservation-collation.4024e9aa6910866aa82f0c6cb6a6b4b925bd10079e6b0ef8f92eefa5a6792f76.png)
Não parece haver uma boa correlação entre a envergadura mínima e o estado de conservação. Testa outros elementos do conjunto de dados usando este método. Podes experimentar diferentes filtros também. Encontras alguma correlação?
## Gráficos de densidade
Podes ter notado que os histogramas que vimos até agora são 'escalonados' e não fluem suavemente em forma de arco. Para mostrar um gráfico de densidade mais suave, podes experimentar um gráfico de densidade.
Vamos trabalhar agora com gráficos de densidade!
```r
ggplot(data = birds_filtered_1, aes(x = MinWingspan)) +
geom_density()
```
![gráfico de densidade](../../../../../translated_images/pt-PT/density-plot.675ccf865b76c690487fb7f69420a8444a3515f03bad5482886232d4330f5c85.png)
Podes ver como o gráfico reflete o anterior para os dados de Envergadura Mínima; é apenas um pouco mais suave. Se quisesses revisitar aquela linha irregular de MaxBodyMass no segundo gráfico que construíste, poderias suavizá-la muito bem recriando-a usando este método:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density()
```
![densidade de massa corporal](../../../../../translated_images/pt-PT/bodymass-smooth.d31ce526d82b0a1f19a073815dea28ecfbe58145ec5337e4ef7e8cdac81120b3.png)
Se quiseres uma linha suave, mas não demasiado suave, edita o parâmetro `adjust`:
```r
ggplot(data = birds_filtered_1, aes(x = MaxBodyMass)) +
geom_density(adjust = 1/5)
```
![massa corporal menos suave](../../../../../translated_images/pt-PT/less-smooth-bodymass.10f4db8b683cc17d17b2d33f22405413142004467a1493d416608dafecfdee23.png)
✅ Lê sobre os parâmetros disponíveis para este tipo de gráfico e experimenta!
Este tipo de gráfico oferece visualizações explicativas muito bonitas. Com algumas linhas de código, por exemplo, podes mostrar a densidade da massa corporal máxima por Ordem de aves:
```r
ggplot(data=birds_filtered_1,aes(x = MaxBodyMass, fill = Order)) +
geom_density(alpha=0.5)
```
![massa corporal por ordem](../../../../../translated_images/pt-PT/bodymass-per-order.9d2b065dd931b928c839d8cdbee63067ab1ae52218a1b90717f4bc744354f485.png)
## 🚀 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. Faz uma pesquisa na internet para encontrar bons exemplos do uso de histogramas. Como são usados, o que demonstram e em que áreas ou campos de estudo tendem a ser utilizados?
## [Questionário pós-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/19)
## Revisão e Autoestudo
Nesta lição, usaste o `ggplot2` e começaste a trabalhar para mostrar gráficos mais sofisticados. Faz uma pesquisa sobre `geom_density_2d()`, uma "curva de densidade de probabilidade contínua em uma ou mais dimensões". Lê a [documentação](https://ggplot2.tidyverse.org/reference/geom_density_2d.html) para entender como funciona.
## Tarefa
[Aplica as tuas competências](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, tenha em atenção 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.

@ -0,0 +1,14 @@
# Aplique as suas competências
## Instruções
Até agora, 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 destas técnicas experimentando um conjunto de dados diferente, talvez obtido de [Kaggle](https://www.kaggle.com/). Crie um script em R para contar uma história sobre este conjunto de dados e certifique-se de utilizar histogramas ao analisá-lo.
## Critérios de Avaliação
Exemplar | Adequado | Necessita de Melhorias
--- | --- | --- |
Um script é apresentado com anotações sobre este conjunto de dados, incluindo a sua origem, e utiliza pelo menos 5 histogramas para descobrir factos sobre os dados. | Um script é apresentado com anotações incompletas ou erros. | Um script é apresentado sem anotações e contém 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, tenha em atenção 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.

@ -0,0 +1,186 @@
# Visualizar Proporções
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/11-Visualizing-Proportions.png)|
|:---:|
|Visualizar Proporções - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Nesta lição, vais utilizar um conjunto de dados focado na natureza para visualizar proporções, como, por exemplo, quantos tipos diferentes de fungos estão presentes num determinado conjunto de dados sobre cogumelos. Vamos explorar estes fascinantes fungos utilizando um conjunto de dados obtido da Audubon, que lista detalhes sobre 23 espécies de cogumelos com lâminas das famílias Agaricus e Lepiota. Vais 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. Num dos seus tutoriais, eles também utilizam este conjunto de dados sobre cogumelos! Assim, podes explorar os dados e aprender a biblioteca ao mesmo tempo: [Tutorial do Charticulator](https://charticulator.com/tutorials/tutorial4.html).
## [Questionário pré-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/20)
## Conhece os teus cogumelos 🍄
Os cogumelos são muito interessantes. Vamos importar um conjunto de dados para os estudar:
```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 | hematomas | odor | fixação-das-lâminas | espaçamento-das-lâminas | tamanho-das-lâminas | cor-das-lâminas | formato-do-pé | raiz-do-pé | 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-aneis | tipo-de-anel | cor-dos-esporos | população | habitat |
| --------- | ----------------- | -------------------- | ------------- | --------- | ------- | ------------------- | ----------------------- | ------------------- | --------------- | ------------- | ---------- | ------------------------ | ------------------------ | ----------------- | ----------------- | ----------- | ----------- | --------------- | ------------- | --------------- | --------- | ------- |
| Venenoso | Convexo | Liso | Castanho | Hematomas | Pungente | Livre | Fechado | Estreito | Preto | Alargado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Disperso | Urbano |
| Comestível| Convexo | Liso | Amarelo | Hematomas | Amêndoa | Livre | Fechado | Largo | Preto | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Castanho | Numeroso | Relvados |
| Comestível| Sino | Liso | Branco | Hematomas | Anis | Livre | Fechado | Largo | Castanho | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Castanho | Numeroso | Prados |
| Venenoso | Convexo | Escamoso | Branco | Hematomas | Pungente | Livre | Fechado | Estreito | Castanho | Alargado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Disperso | Urbano |
| Comestível| Convexo | Liso | Verde | Sem Hematomas | Nenhum | Livre | Aglomerado | Largo | Preto | Afunilado | Igual | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Evanescente | Castanho | Abundante | Relvados |
| Comestível| Convexo | Escamoso | Amarelo | Hematomas | Amêndoa | Livre | Fechado | Largo | Castanho | Alargado | Club | Liso | Liso | Branco | Branco | Parcial | Branco | Um | Pendente | Preto | Numeroso | Relvados |
De imediato, percebes que todos os dados são textuais. Terás de converter estes dados para os poderes utilizar num gráfico. Na verdade, a maior parte dos dados está representada como um objeto:
```r
names(mushrooms)
```
O resultado é:
```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"
```
Converte os dados da coluna 'class' para uma categoria:
```r
library(dplyr)
grouped=mushrooms %>%
group_by(class) %>%
summarise(count=n())
```
Agora, se imprimires os dados dos cogumelos, podes ver que foram agrupados em categorias de acordo com a classe venenoso/comestível:
```r
View(grouped)
```
| classe | contagem |
| --------- | --------- |
| Comestível | 4208 |
| Venenoso | 3916 |
Se seguires a ordem apresentada nesta tabela para criar as etiquetas das categorias, podes construir um gráfico de pizza.
## Pizza!
```r
pie(grouped$count,grouped$class, main="Edible?")
```
Voilà, um gráfico de pizza que mostra as proporções destes dados de acordo com estas duas classes de cogumelos. É muito importante garantir que a ordem das etiquetas esteja correta, especialmente aqui, por isso verifica sempre a ordem com que o array de etiquetas é construído!
![gráfico de pizza](../../../../../translated_images/pt-PT/pie1-wb.685df063673751f4b0b82127f7a52c7f9a920192f22ae61ad28412ba9ace97bf.png)
## Roscas!
Um gráfico de pizza um pouco mais interessante visualmente é o gráfico de rosca, que é um gráfico de pizza com um buraco no meio. Vamos observar os nossos dados utilizando este método.
Observa os vários habitats onde os cogumelos crescem:
```r
library(dplyr)
habitat=mushrooms %>%
group_by(habitat) %>%
summarise(count=n())
View(habitat)
```
O resultado é:
| habitat | contagem |
| --------- | --------- |
| Relvados | 2148 |
| Folhas | 832 |
| Prados | 292 |
| Trilhos | 1144 |
| Urbano | 368 |
| Resíduos | 192 |
| Madeira | 3148 |
Aqui, estás a agrupar os teus dados por habitat. Existem 7 listados, por isso utiliza-os como etiquetas para o teu gráfico de rosca:
```r
library(ggplot2)
library(webr)
PieDonut(habitat, aes(habitat, count=count))
```
![gráfico de rosca](../../../../../translated_images/pt-PT/donut-wb.34e6fb275da9d834c2205145e39a3de9b6878191dcdba6f7a9e85f4b520449bc.png)
Este código utiliza duas bibliotecas - ggplot2 e webr. Usando a função PieDonut da biblioteca webr, podemos criar um gráfico de rosca facilmente!
Os gráficos de rosca em R também podem ser feitos utilizando apenas a biblioteca ggplot2. Podes aprender mais sobre isso [aqui](https://www.r-graph-gallery.com/128-ring-or-donut-plot.html) e experimentar por ti mesmo.
Agora que sabes como agrupar os teus dados e depois exibi-los como um gráfico de pizza ou rosca, podes explorar outros tipos de gráficos. Experimenta um gráfico de waffle, que é apenas uma forma diferente de explorar quantidades.
## Waffles!
Um gráfico do tipo 'waffle' é uma forma diferente de visualizar quantidades como uma matriz 2D de quadrados. Experimenta visualizar as diferentes quantidades de cores do chapéu dos cogumelos neste conjunto de dados. Para isso, precisas de instalar uma biblioteca auxiliar chamada [waffle](https://cran.r-project.org/web/packages/waffle/waffle.pdf) e utilizá-la para gerar a tua visualização:
```r
install.packages("waffle", repos = "https://cinc.rud.is")
```
Seleciona um segmento dos teus dados para agrupar:
```r
library(dplyr)
cap_color=mushrooms %>%
group_by(cap.color) %>%
summarise(count=n())
View(cap_color)
```
Cria um gráfico de waffle criando etiquetas e depois agrupando os teus 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, podes ver claramente as proporções das cores dos chapéus neste conjunto de dados de cogumelos. Curiosamente, existem muitos cogumelos com chapéus verdes!
![gráfico de waffle](../../../../../translated_images/pt-PT/waffle.aaa75c5337735a6ef32ace0ffb6506ef49e5aefe870ffd72b1bb080f4843c217.png)
Nesta lição, aprendeste três formas de visualizar proporções. Primeiro, precisas de agrupar os teus dados em categorias e depois decidir qual é a melhor forma de exibir os dados - pizza, rosca ou waffle. Todas são deliciosas e oferecem ao utilizador uma visão instantânea de um conjunto de dados.
## 🚀 Desafio
Tenta recriar estes gráficos deliciosos no [Charticulator](https://charticulator.com).
## [Questionário pós-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/21)
## Revisão e Autoestudo
Por vezes, não é óbvio quando usar um gráfico de pizza, rosca ou waffle. Aqui estão alguns artigos para leres sobre este tema:
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
Faz alguma pesquisa para encontrares mais informações sobre esta decisão difícil.
## Tarefa
[Experimenta 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 no seu idioma nativo deve ser considerado a fonte autoritativa. 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 resultantes do uso desta tradução.

@ -0,0 +1,166 @@
# Visualizar Relações: Tudo Sobre Mel 🍯
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../sketchnotes/12-Visualizing-Relationships.png)|
|:---:|
|Visualizar Relações - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Continuando com o foco na natureza da 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, é possível observar o número de colónias, rendimento por colónia, produção total, stocks, 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, pode-se 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', observado pela primeira vez em 2006 (http://npic.orst.edu/envir/ccd.html), tornando este conjunto de dados particularmente relevante para estudo. 🐝
## [Questionário pré-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/22)
Nesta lição, pode usar o ggplot2, que já utilizou anteriormente, 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 compreender 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, utilizando `ggplot` e `geom_point`, 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:
```r
honey=read.csv('../../data/honey.csv')
head(honey)
```
Repare que os dados sobre mel têm 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 | stocks | 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 de mel e o 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")
```
![scatterplot 1](../../../../../translated_images/pt-PT/scatter1.86b8900674d88b26dd3353a83fe604e9ab3722c4680cc40ee9beb452ff02cdea.png)
Agora, mostre os mesmos dados com um esquema de cores de mel para ilustrar como o preço evolui ao longo dos anos. Pode fazer isso adicionando o 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 arco-íris bonito!
```r
ggplot(honey, aes(x = priceperlb, y = state, color=year)) +
geom_point()+scale_color_gradientn(colours = colorspace::heat_hcl(7))
```
![scatterplot 2](../../../../../translated_images/pt-PT/scatter2.4d1cbc693bad20e2b563888747eb6bdf65b73ce449d903f7cd4068a78502dcff.png)
Com esta mudança de esquema de cores, é possível ver claramente uma forte progressão ao longo dos anos no preço do mel por libra. De facto, ao verificar um conjunto de amostra nos dados (escolha um estado, como o Arizona), pode-se observar um padrão de aumento de preço ano após ano, com poucas exceções:
| estado | numcol | rendimento_por_col | produção_total | stocks | 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 esta progressão é usar o tamanho, em vez da cor. Para utilizadores daltónicos, esta pode ser uma opção melhor. Edite a sua visualização para mostrar o aumento do preço através do aumento da circunferência 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))
```
Pode ver o tamanho dos pontos aumentando gradualmente.
![scatterplot 3](../../../../../translated_images/pt-PT/scatter3.722d21e6f20b3ea2e18339bb9b10d75906126715eb7d5fdc88fe74dcb6d7066a.png)
Será este um caso simples de oferta e procura? Devido a fatores como mudanças climáticas e colapso de colónias, há menos mel disponível para compra ano após ano, e assim o preço aumenta?
Para descobrir uma correlação entre algumas das variáveis deste conjunto de dados, vamos explorar alguns gráficos de linha.
## Gráficos de linha
Pergunta: Existe um aumento claro no preço do mel por libra ano após ano? 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:
![line chart 1](../../../../../translated_images/pt-PT/line1.299b576fbb2a59e60a59e7130030f59836891f90302be084e4e8d14da0562e2a.png)
Pergunta: Bem, em 2003 também podemos ver um pico na oferta de mel? E se observarmos a produção total ano após ano?
```python
qplot(honey$year,honey$totalprod, geom='smooth', span =0.5, xlab = "year",ylab = "totalprod")
```
![line chart 2](../../../../../translated_images/pt-PT/line2.3b18fcda7176ceba5b6689eaaabb817d49c965e986f11cac1ae3f424030c34d8.png)
Resposta: Não exatamente. Se observar a produção total, parece que ela realmente aumentou nesse 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 pico no preço do mel por volta de 2003?
Para descobrir isso, pode explorar uma grade de facetas.
## Grades de facetas
Grades de facetas utilizam uma faceta do seu conjunto de dados (neste caso, pode escolher 'ano' para evitar produzir muitas facetas). O Seaborn pode então criar um gráfico para cada uma dessas facetas das coordenadas x e y escolhidas, facilitando a comparação visual. O ano de 2003 destaca-se neste tipo de comparação?
Crie uma grade de facetas utilizando `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, pode comparar o rendimento por colónia e o número de colónias ano após ano, lado a lado, com uma disposição de 3 colunas:
![facet grid](../../../../../translated_images/pt-PT/facet.491ad90d61c2a7cc69b50c929f80786c749e38217ccedbf1e22ed8909b65987c.png)
Para este conjunto de dados, nada particularmente se destaca em relação ao número de colónias e ao seu rendimento, ano após ano e estado por estado. Existe uma forma diferente de encontrar uma correlação entre estas 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, utilizando 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)
```
![superimposed plots](../../../../../translated_images/pt-PT/dual-line.fc4665f360a54018d7df9bc6abcc26460112e17dcbda18d3b9ae6109b32b36c3.png)
Embora nada salte aos olhos em torno do ano de 2003, isso 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á a estabilizar, mesmo que o rendimento por colónia esteja a diminuir.
Força, abelhas!
🐝❤️
## 🚀 Desafio
Nesta lição, 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 utilizando um conjunto de dados diferente, talvez um que tenha usado antes destas lições. Note quanto tempo leva para criar e como precisa ter cuidado com o número de grades que deseja desenhar utilizando estas técnicas.
## [Questionário pós-aula](https://purple-hill-04aebfb03.1.azurestaticapps.net/quiz/23)
## Revisão & 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 formas de construí-los. Tente melhorar os gráficos de linha que 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, tenha em atenção 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.

@ -0,0 +1,171 @@
# Criando Visualizações Significativas
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../../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 os seus dados, é necessário garantir que eles foram limpos e preparados, como feito em lições anteriores. Depois disso, você pode começar a decidir como apresentar os dados da melhor forma.
Nesta lição, você irá revisar:
1. Como escolher o tipo de gráfico certo
2. Como evitar gráficos enganosos
3. Como trabalhar com cores
4. Como estilizar os gráficos para melhorar a 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 diversos tipos de visualizações de dados interessantes 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 utilizando 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 seja suportado.
## 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 comprometer os próprios dados. Há muitos exemplos de gráficos e infográficos enganosos!
[![Como os Gráficos Enganam por Alberto Cairo](../../../../../translated_images/pt-PT/tornado.2880ffc7f135f82b5e5328624799010abefd1080ae4b7ecacbdc7d792f1d8849.png)](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:
![gráfico ruim 1](../../../../../translated_images/pt-PT/bad-chart-1.596bc93425a8ac301a28b8361f59a970276e7b961658ce849886aa1fed427341.png)
[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, ao observar atentamente as datas, percebe-se que elas foram reorganizadas para criar essa tendência descendente enganosa.
![gráfico ruim 2](../../../../../translated_images/pt-PT/bad-chart-2.62edf4d2f30f4e519f5ef50c07ce686e27b0196a364febf9a4d98eecd21f9f60.jpg)
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:
![gráfico ruim 3](../../../../../translated_images/pt-PT/bad-chart-3.e201e2e915a230bc2cde289110604ec9abeb89be510bd82665bebc1228258972.jpg)
Este gráfico estranho mostra como a proporção pode ser manipulada, com efeito hilário:
![gráfico ruim 4](../../../../../translated_images/pt-PT/bad-chart-4.8872b2b881ffa96c3e0db10eb6aed7793efae2cac382c53932794260f7bfff07.jpg)
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 de gráfico ruim, 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 - o seu gráfico é exibido bem para usuários com deficiências visuais?
Tenha cuidado ao escolher cores para o 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 adiciona à 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 a 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 os seus gráficos sejam acessíveis e que a cor escolhida coincida com o significado que você está tentando transmitir.
## Estilizando os 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 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 os seus eixos, forneça uma legenda, se necessário, e ofereça tooltips para melhor compreensão dos dados.
Se os 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 os seus dados suportarem. Visualizações de dados sofisticadas podem ser produzidas usando esta biblioteca.
![gráficos 3D](../../../../../translated_images/pt-PT/3d.db1734c151eee87d924989306a00e23f8cddac6a0aab122852ece220e9448def.png)
## 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 o problema dos sem-teto, enviando pessoas para fora da cidade.
![busing](../../../../../translated_images/pt-PT/busing.8157cf1bc89a3f65052d362a78c72f964982ceb9dcacbe44480e35909c3dce62.png)
> "Bussed Out: Como a América Move os Sem-Teto" 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 em profundidade essas poderosas bibliotecas de visualização, experimente usar D3 em um aplicativo Vue.js utilizando uma biblioteca 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 utiliza 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ê pode mover os nós na tela para reorganizar os dados.
![liaisons](../../../../../translated_images/pt-PT/liaisons.90ce7360bcf8476558f700bbbaf198ad697d5b5cb2829ba141a89c0add7c6ecd.png)
## Projeto: Crie um gráfico para mostrar uma rede usando D3.js
> Esta pasta da lição inclui uma pasta `solution` onde você pode encontrar o projeto completo, 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 na 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 o 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 o 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 e Estudo Individual
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, é 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.

@ -0,0 +1,31 @@
# Visualizações
![uma abelha numa flor de lavanda](../../../translated_images/pt-PT/bee.0aa1d91132b12e3a8994b9ca12816d05ce1642010d9b8be37f8d37365ba845cf.jpg)
> Foto de <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 do que mil palavras, e uma visualização pode ajudá-lo a identificar vários aspetos interessantes dos seus dados, como picos, valores atípicos, agrupamentos, tendências e muito mais, que podem ajudá-lo a compreender a história que os seus dados estão a tentar contar.
Nestes cinco tópicos, irá explorar dados provenientes da natureza e criar visualizações interessantes e bonitas utilizando várias técnicas.
| Número do Tópico | Tópico | Aula Ligada | Autor |
| :--------------: | :----: | :---------: | :---: |
| 1. | Visualizar 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. | Visualizar distribuições | <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. | Visualizar 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. | Visualizar 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. | Criar 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
Estas lições sobre visualizações 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 a produção de mel nos EUA foram obtidos a partir 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), revistos 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 retirados do guia "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 aves do Minnesota foram retirados do [Kaggle](https://www.kaggle.com/hannahcollins/minnesota-birds) e extraídos da [Wikipedia](https://en.wikipedia.org/wiki/List_of_birds_of_Minnesota) por Hannah Collins.
Todos estes 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 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.

@ -0,0 +1,114 @@
# Introdução ao Ciclo de Vida da Ciência de Dados
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/14-DataScience-Lifecycle.png)|
|:---:|
| Introdução ao Ciclo de Vida da Ciência de Dados - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
## [Questionário Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/26)
Neste ponto, provavelmente já percebeu que a ciência de dados é um processo. Este processo pode ser dividido em 5 etapas:
- Captura
- Processamento
- Análise
- Comunicação
- Manutenção
Esta lição foca-se em 3 partes do ciclo de vida: captura, processamento e manutenção.
![Diagrama do ciclo de vida da ciência de dados](../../../../translated_images/pt-PT/data-science-lifecycle.a1e362637503c4fb0cd5e859d7552edcdb4aa629a279727008baa121f2d33f32.jpg)
> 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 etapas seguintes dependem dela. É praticamente duas etapas combinadas numa só: adquirir os dados e definir o propósito e os problemas que precisam ser abordados.
Definir os objetivos do projeto exigirá um contexto mais profundo sobre o problema ou questão. Primeiro, precisamos identificar e envolver aqueles que precisam de uma solução para o seu problema. Estes podem ser partes interessadas de uma empresa ou patrocinadores do projeto, que podem ajudar a identificar quem ou o que irá beneficiar deste projeto, bem como o que e por que precisam dele. 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?
A seguir, é 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:
- Que dados já estão disponíveis para mim?
- Quem é o proprietário desses dados?
- Quais são as preocupações com privacidade?
- Tenho dados suficientes para resolver este problema?
- Os dados têm qualidade aceitável para este problema?
- Se eu descobrir informações adicionais através destes dados, devemos considerar alterar ou redefinir os objetivos?
## Processamento
A etapa de processamento do ciclo de vida foca-se na descoberta de padrões nos dados, bem como na modelagem. Algumas técnicas utilizadas nesta etapa requerem métodos estatísticos para identificar os padrões. Normalmente, esta seria uma tarefa tediosa para um humano com um grande conjunto de dados e, por isso, recorre-se a computadores para acelerar o processo. Esta etapa também é onde a ciência de dados e o aprendizado de máquina se cruzam. Como aprendeu na primeira lição, o aprendizado de máquina é o processo de construir modelos para compreender os dados. Os modelos são representações da relação entre variáveis nos dados que ajudam a prever resultados.
Técnicas comuns utilizadas nesta etapa são abordadas no currículo de ML para Iniciantes. Siga os links para saber 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, pode ter notado que a manutenção está entre captura e processamento. A manutenção é um processo contínuo de gestão, armazenamento e segurança dos dados ao longo do projeto e deve ser considerada durante toda a sua duração.
### Armazenamento de Dados
As decisões sobre como e onde os dados são armazenados podem influenciar o custo do armazenamento, bem como o desempenho de acesso aos dados. Decisões como estas provavelmente não serão feitas apenas pelo cientista de dados, mas ele pode ter que tomar decisões sobre como trabalhar com os dados com base em como estão armazenados.
Aqui estão alguns aspetos 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 gerir os dados nos seus próprios equipamentos, como possuir um servidor com discos rígidos que armazenam os dados, enquanto "fora do local" depende de equipamentos que não são seus, como um centro de dados. A nuvem pública é uma escolha popular para armazenar dados que não requer conhecimento sobre como ou onde exatamente os dados estão armazenados, sendo que "pública" refere-se a uma infraestrutura unificada subjacente compartilhada por todos os que utilizam 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, por isso, optam por uma nuvem privada que oferece serviços próprios de nuvem. 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 os seus modelos, pode precisar de mais dados de treino. Se estiver satisfeito com o seu modelo, mais dados chegarão para que o modelo cumpra o seu propósito. Em qualquer caso, o custo de armazenar e acessar dados aumentará à medida que acumular mais. Separar dados raramente usados, conhecidos como dados frios, de dados frequentemente acessados, conhecidos como dados quentes, pode ser uma opção mais económica de armazenamento através de serviços de hardware ou software. Se for necessário acessar dados frios, pode demorar um pouco mais em comparação com os dados quentes.
### Gestão de Dados
Ao trabalhar com dados, pode descobrir que alguns deles precisam ser limpos utilizando 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, será necessário aplicar as mesmas técnicas para manter a consistência na qualidade. Alguns projetos envolvem o uso de ferramentas automatizadas para limpeza, agregação e compressão antes de os dados serem movidos para o local final. O Azure Data Factory é um exemplo de uma dessas ferramentas.
### Segurança dos Dados
Um dos principais objetivos de garantir a segurança dos dados é assegurar que aqueles que trabalham com eles têm controlo sobre o que é coletado e em que contexto está a ser utilizado. Manter os dados seguros envolve limitar o acesso apenas àqueles que precisam dele, 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 equipa pode tomar com a segurança em mente:
- Confirmar que todos os dados estão encriptados
- Fornecer aos clientes informações sobre como os seus dados são utilizados
- Remover o acesso aos dados de pessoas que saíram do 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 distinto de fases, mas conterá os mesmos processos mencionados nesta lição.
Explore o [Ciclo de Vida do Processo de Ciência de Dados em Equipa](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 Equipa (TDSP)|Processo padrão da indústria para mineração de dados (CRISP-DM)|
|--|--|
|![Ciclo de Vida do Processo de Ciência de Dados em Equipa](../../../../translated_images/pt-PT/tdsp-lifecycle2.e19029d598e2e73d5ef8a4b98837d688ec6044fe332c905d4dbb69eb6d5c1d96.png) | ![Imagem do Processo de Ciência de Dados](../../../../translated_images/pt-PT/CRISP-DM.8bad2b4c66e62aa75278009e38e3e99902c73b0a6f63fd605a67c687a536698c.png) |
| 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/) |
## [Questionário Pós-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/27)
## Revisão e Estudo Individual
Aplicar o Ciclo de Vida da Ciência de Dados envolve múltiplos papéis e tarefas, onde alguns podem focar-se em partes específicas de cada etapa. O Processo de Ciência de Dados em Equipa fornece alguns recursos que explicam os tipos de papéis e tarefas que alguém pode ter num projeto.
* [Papéis e tarefas no Processo de Ciência de Dados em Equipa](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/roles-tasks)
* [Executar tarefas de ciência de dados: exploração, modelagem e implementação](https://docs.microsoft.com/en-us/azure/architecture/data-science-process/execute-data-science-tasks)
## Tarefa
[Avaliar 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 automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.

@ -0,0 +1,26 @@
# Avaliando um Conjunto de Dados
Um cliente procurou a sua equipa para obter ajuda na investigação dos hábitos sazonais de gastos dos clientes de táxi em Nova Iorque.
Eles querem saber: **Os passageiros de táxi amarelo em Nova Iorque dão gorjetas maiores aos motoristas no inverno ou no verão?**
A sua equipa está na fase 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-lhe fornecido um notebook e [dados](../../../../data/taxi.csv) para explorar.
Neste diretório há um [notebook](../../../../4-Data-Science-Lifecycle/14-Introduction/notebook.ipynb) que utiliza Python para carregar dados de viagens de táxi amarelo da [Comissão de Táxis e Limousines de NYC](https://docs.microsoft.com/en-us/azure/open-datasets/dataset-taxi-yellow?tabs=azureml-opendatasets).
Você também pode abrir o ficheiro de dados de táxi num editor de texto ou software de folha de cálculo como o Excel.
## Instruções
- Avalie se os dados deste conjunto podem ajudar a responder à pergunta.
- Explore o [catálogo de Dados Abertos de NYC](https://data.cityofnewyork.us/browse?sortBy=most_accessed&utf8=%E2%9C%93). Identifique um conjunto de dados adicional que possa ser útil para responder à pergunta do cliente.
- Escreva 3 perguntas que faria ao cliente para obter mais esclarecimentos e uma 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 utilizador](https://www1.nyc.gov/assets/tlc/downloads/pdf/trip_record_user_guide.pdf) para mais informações sobre os dados.
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | ---
**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, tenha em atenção 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.

@ -0,0 +1,140 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Dados de táxis de Nova Iorque no Inverno e no 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 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**: \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 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 da utilização 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-02T08:35:14+00:00",
"source_file": "4-Data-Science-Lifecycle/14-Introduction/notebook.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,54 @@
# O Ciclo de Vida da Ciência de Dados: Análise
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/15-Analyzing.png)|
|:---:|
| Ciclo de Vida da Ciência de Dados: Análise - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
## [Questionário 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 questões propostas ou resolver um problema específico. Esta etapa também pode focar em confirmar se um modelo está a abordar corretamente essas questões e problemas. Esta lição concentra-se na Análise Exploratória de Dados (ou EDA, na sigla em inglês), que consiste em técnicas para definir características e relações dentro dos dados e que 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 emails, sendo que as fontes desses emails são anónimas. Utilize 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 suportar o resultado final?
Lembre-se de que um cientista de dados pode fazer as seguintes perguntas ao adquirir os dados:
- Tenho dados suficientes para resolver este problema?
- Os dados têm qualidade aceitável para este problema?
- Se descobrir informações adicionais através destes dados, devemos considerar alterar ou redefinir os objetivos?
A Análise Exploratória de Dados é o processo de conhecer os dados e pode ser usada para responder a estas perguntas, bem como identificar os desafios de trabalhar com o conjunto de dados. Vamos focar em algumas das técnicas utilizadas para alcançar isso.
## Perfilagem de Dados, Estatísticas Descritivas e Pandas
Como avaliamos se temos dados suficientes para resolver este problema? A perfilagem de dados pode resumir e reunir algumas informações gerais sobre o nosso conjunto de dados através de técnicas de estatísticas descritivas. A perfilagem de dados ajuda-nos a entender o que está disponível para nós, e as estatísticas descritivas ajudam-nos a entender quantas coisas estão disponíveis para nós.
Em algumas das lições anteriores, utilizámos 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). Esta função 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 ajudá-lo a avaliar quanto tem e se precisa de mais.
## Amostragem e Consultas
Explorar tudo num grande conjunto de dados pode ser muito demorado e é uma tarefa que geralmente é deixada para o computador. No entanto, a amostragem é uma ferramenta útil para entender os dados e permite-nos ter uma melhor compreensão do que está no conjunto de dados e do que ele representa. Com uma amostra, pode aplicar probabilidade e estatísticas para chegar a algumas conclusões gerais sobre os seus dados. Embora não haja uma regra definida sobre a quantidade de dados que deve amostrar, é importante notar que quanto mais dados amostrar, mais precisa será a generalização que pode fazer sobre os dados.
O Pandas possui a função [`sample()` na sua biblioteca](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sample.html), onde pode passar um argumento indicando quantas amostras aleatórias gostaria de receber e usar.
Consultas gerais aos dados podem ajudá-lo a responder a algumas perguntas e teorias gerais que possa ter. Em contraste com a amostragem, as consultas permitem-lhe ter controlo e focar-se 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 obter respostas simples sobre os dados através das linhas recuperadas.
## Exploração com Visualizações
Não precisa de 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 na gestão dos dados e podem ser uma oportunidade para partilhar e esclarecer questões adicionais que não foram abordadas na fase de captura. Consulte a [secção sobre Visualizações](../../../../../../../../../3-Data-Visualization) para aprender mais sobre algumas formas populares de explorar visualmente.
## Exploração 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 destes. [isna() ou isnull()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.isna.html) podem verificar valores ausentes. Uma parte importante da exploração destes valores nos seus dados é explorar por que razão eles acabaram dessa forma. Isso pode ajudá-lo a decidir quais [ações tomar para resolvê-los](/2-Working-With-Data/08-data-preparation/notebook.ipynb).
## [Questionário Pós-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/29)
## Tarefa
[Explorar para obter respostas](assignment.md)
---
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a 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 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 resultantes do uso desta tradução.

@ -0,0 +1,154 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Dados de táxis de Nova Iorque no inverno e no 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 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": [
"# Utilize as células abaixo para realizar a 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 automática [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 na sua língua nativa 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 resultantes 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-02T08:32:19+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/assignment.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,25 @@
# Explorando respostas
Esta é uma continuação do [exercício](../14-Introduction/assignment.md) da lição anterior, onde analisámos brevemente o conjunto de dados. Agora vamos aprofundar a análise dos dados.
Mais uma vez, a pergunta que o cliente quer responder é: **Os passageiros de táxis amarelos na cidade de Nova Iorque dão mais gorjetas aos motoristas no inverno ou no verão?**
A sua equipa está na fase de [Análise](README.md) do Ciclo de Vida da Ciência de Dados, onde é responsável por realizar a análise exploratória de dados no conjunto de dados. Foi-lhe fornecido um notebook e um conjunto de dados que contém 200 transações de táxi de janeiro e julho de 2019.
## Instruções
Neste diretório encontra-se um [notebook](../../../../4-Data-Science-Lifecycle/15-analyzing/assignment.ipynb) e dados da [Comissão de Táxis e Limusinas](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 utilizador](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 a sua própria análise exploratória de dados no notebook (adicione células, se necessário) e responda às seguintes perguntas:
- Que 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 de Melhorias
--- | --- | ---
**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, tenha em atenção 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.

@ -0,0 +1,193 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Analisar 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes 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-02T08:29:35+00:00",
"source_file": "4-Data-Science-Lifecycle/15-analyzing/notebook.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,213 @@
# O Ciclo de Vida da Ciência de Dados: Comunicação
|![Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev)](../../sketchnotes/16-Communicating.png)|
|:---:|
| Ciclo de Vida da Ciência de Dados: Comunicação - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
## [Questionário Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/30)
Teste os seus conhecimentos sobre o que está por vir com o questionário pré-aula acima!
# Introdução
### O que é Comunicação?
Vamos começar esta lição definindo o que significa comunicar. **Comunicar é transmitir ou trocar informações.** As informações podem ser ideias, pensamentos, sentimentos, mensagens, sinais ocultos, dados qualquer coisa que um **_emissor_** (alguém que envia informações) queira que um **_receptor_** (alguém que recebe informações) compreenda. Nesta lição, referir-nos-emos aos emissores como comunicadores e aos receptores como o público.
### Comunicação de Dados e Contar Histórias
Sabemos que, ao comunicar, o objetivo é transmitir ou trocar informações. Mas, ao comunicar dados, o seu objetivo não deve ser simplesmente passar números para o público. O objetivo deve ser comunicar uma história informada pelos seus dados comunicação eficaz de dados e contar histórias andam de mãos dadas. O seu público tem mais probabilidade de se lembrar de uma história que você conta do que de um número que você apresenta. Mais adiante nesta lição, abordaremos algumas formas de usar a narrativa para comunicar os seus dados de forma mais eficaz.
### Tipos de Comunicação
Ao longo desta lição, serão discutidos dois tipos diferentes de comunicação: Comunicação Unidirecional e Comunicação Bidirecional.
**Comunicação unidirecional** ocorre quando um emissor envia informações para um receptor, sem qualquer feedback ou resposta. Vemos exemplos de comunicação unidirecional todos os dias em emails em massa, quando as notícias transmitem as histórias mais recentes ou até mesmo quando um anúncio de televisão aparece e informa por que o produto deles é excelente. Em cada um desses casos, o emissor não está a procurar uma troca de informações, mas apenas transmitir ou entregar informações.
**Comunicação bidirecional** ocorre quando todas as partes envolvidas atuam como emissores e receptores. Um emissor começa por comunicar com um receptor, e o receptor fornece feedback ou uma resposta. Comunicação bidirecional é o que tradicionalmente pensamos quando falamos em comunicação. Normalmente, imaginamos pessoas envolvidas numa conversa seja pessoalmente, por telefone, redes sociais ou mensagens de texto.
Ao comunicar dados, haverá casos em que usará comunicação unidirecional (pense em apresentar numa conferência ou para um grande grupo onde não serão feitas perguntas diretamente depois) e haverá casos em que usará comunicação bidirecional (pense em usar dados para persuadir alguns stakeholders a apoiar uma ideia ou convencer um colega de equipa de que vale a pena investir tempo e esforço em algo novo).
# Comunicação Eficaz
### As Suas Responsabilidades como Comunicador
Ao comunicar, é sua responsabilidade garantir que o(s) receptor(es) compreendam as informações que você deseja transmitir. Quando comunica dados, não quer apenas que o público retenha números, mas sim uma história informada pelos seus dados. Um bom comunicador de dados é também um bom contador de histórias.
Como contar uma história com dados? Existem infinitas maneiras mas abaixo estão 6 estratégias que abordaremos nesta lição:
1. Compreenda o Seu Público, o Seu Canal e o Seu Método de Comunicação
2. Comece com o Fim em Mente
3. Aborde como se fosse uma História Real
4. Use Palavras e Frases Significativas
5. Use Emoção
Cada uma dessas estratégias é explicada em maior detalhe abaixo.
### 1. Compreenda o Seu Público, o Seu Canal e o Seu Método de Comunicação
A forma como comunica com membros da família provavelmente é diferente da forma como comunica com amigos. Provavelmente usa palavras e frases diferentes que as pessoas com quem está a falar têm mais probabilidade de compreender. Deve adotar a mesma abordagem ao comunicar dados. Pense em quem está a comunicar. Pense nos objetivos e no contexto que essas pessoas têm em relação à situação que está a explicar.
Provavelmente, pode agrupar a maioria do seu público numa categoria. Num artigo da _Harvard Business Review_, “[How to Tell a Story with Data](http://blogs.hbr.org/2013/04/how-to-tell-a-story-with-data/)” (Como Contar uma História com Dados), o estrategista executivo da Dell, Jim Stikeleather, identifica cinco categorias de público:
- **Principiante**: primeiro contacto com o tema, mas não quer simplificações excessivas
- **Generalista**: tem conhecimento do tema, mas procura uma visão geral e os principais pontos
- **Gestor**: compreensão detalhada e acionável das complexidades e inter-relações, com acesso a detalhes
- **Especialista**: mais exploração e descoberta, menos narrativa, com grande atenção aos detalhes
- **Executivo**: tem apenas tempo para captar a relevância e as conclusões das probabilidades ponderadas
Essas categorias podem orientar a forma como apresenta os dados ao seu público.
Além de considerar a categoria do seu público, também deve pensar no canal que está a usar para comunicar. A sua abordagem deve ser ligeiramente diferente se estiver a escrever um memorando ou email, em comparação com uma reunião ou apresentação numa conferência.
Compreender o seu público e saber como irá comunicar com ele (usando comunicação unidirecional ou bidirecional) também é fundamental.
Se estiver a comunicar com um público maioritariamente principiante e a usar comunicação unidirecional, deve primeiro educar o público e fornecer o contexto adequado. Depois, deve apresentar os seus dados, explicar o que significam e por que são importantes. Neste caso, pode querer focar-se em garantir clareza, pois o público não poderá fazer perguntas diretas.
Se estiver a comunicar com um público maioritariamente gestor e a usar comunicação bidirecional, provavelmente não precisará de educar o público ou fornecer muito contexto. Pode começar diretamente a discutir os dados que recolheu e por que são importantes. Neste cenário, no entanto, deve focar-se no tempo e no controlo da sua apresentação. Ao usar comunicação bidirecional (especialmente com um público gestor que procura uma “compreensão acionável das complexidades e inter-relações com acesso a detalhes”), podem surgir perguntas que desviem a discussão do rumo da história que está a tentar contar. Quando isso acontecer, pode tomar medidas para redirecionar a discussão para a sua narrativa.
### 2. Comece com o Fim em Mente
Começar com o fim em mente significa compreender os resultados pretendidos para o seu público antes de começar a comunicar. Refletir sobre o que quer que o público retenha antecipadamente pode ajudá-lo a criar uma história que o público consiga acompanhar. Começar com o fim em mente é apropriado tanto para comunicação unidirecional quanto bidirecional.
Como começar com o fim em mente? Antes de comunicar os seus dados, escreva os principais pontos que deseja transmitir. Depois, a cada passo enquanto prepara a história que quer contar com os seus dados, pergunte-se: "Como isto se integra na história que estou a contar?"
Atenção Embora começar com o fim em mente seja ideal, não deve comunicar apenas os dados que apoiam os seus resultados pretendidos. Fazer isso é chamado de "Cherry-Picking", que ocorre quando um comunicador apresenta apenas os dados que sustentam o ponto que está a tentar provar, ignorando todos os outros.
Se todos os dados que recolheu apoiam claramente os seus resultados pretendidos, ótimo. Mas se houver dados que não os apoiam ou até sustentam um argumento contrário, também deve comunicá-los. Se isso acontecer, seja honesto com o público e explique por que está a optar por manter a sua narrativa, mesmo que nem todos os dados a suportem.
### 3. Aborde como se fosse uma História Real
Uma história tradicional ocorre em 5 fases. Pode já ter ouvido essas fases descritas como Exposição, Ação Crescente, Clímax, Ação Decrescente e Desfecho. Ou, de forma mais simples, Contexto, Conflito, Clímax, Encerramento e Conclusão. Ao comunicar os seus dados e a sua história, pode adotar uma abordagem semelhante.
Pode começar com o contexto, estabelecendo o cenário e garantindo que o público está na mesma página. Depois, introduza o conflito. Por que precisou de recolher esses dados? Que problemas estava a tentar resolver? A seguir, o clímax. Quais são os dados? O que significam? Que soluções os dados indicam? Depois, chega ao encerramento, onde pode reiterar o problema e as soluções propostas. Por fim, a conclusão, onde pode resumir os principais pontos e os próximos passos recomendados.
### 4. Use Palavras e Frases Significativas
Se estivéssemos a trabalhar juntos num produto e eu dissesse: "Os nossos utilizadores demoram muito tempo a fazer o registo na nossa plataforma", quanto tempo estimaria que "muito tempo" significa? Uma hora? Uma semana? É difícil saber. E se eu dissesse isso a um público inteiro? Cada pessoa poderia ter uma ideia diferente de quanto tempo os utilizadores demoram a fazer o registo.
Agora, e se eu dissesse: "Os nossos utilizadores demoram, em média, 3 minutos para se registarem e começarem a usar a nossa plataforma."
Essa mensagem é mais clara. Ao comunicar dados, pode ser fácil pensar que todos no público estão a pensar como você. Mas isso nem sempre é o caso. Garantir clareza em relação aos seus dados e ao que significam é uma das suas responsabilidades como comunicador. Se os dados ou a sua história não forem claros, o público terá dificuldade em acompanhar e será menos provável que compreendam os seus principais pontos.
Pode comunicar dados de forma mais clara ao usar palavras e frases significativas, em vez de vagas. Abaixo estão alguns exemplos:
- Tivemos um ano *impressionante*!
- Uma pessoa pode pensar que um ano impressionante significa um aumento de 2% - 3% na receita, enquanto outra pode pensar que significa um aumento de 50% - 60%.
- As taxas de sucesso dos nossos utilizadores aumentaram *dramaticamente*.
- Qual é o tamanho de um aumento dramático?
- Este projeto exigirá um esforço *significativo*.
- Quanto esforço é significativo?
Usar palavras vagas pode ser útil como introdução a mais dados que estão por vir ou como resumo da história que acabou de contar. Mas considere garantir que cada parte da sua apresentação seja clara para o público.
### 5. Use Emoção
A emoção é essencial na narrativa. É ainda mais importante quando está a contar uma história com dados. Ao comunicar dados, tudo gira em torno dos resultados que deseja que o público retenha. Evocar uma emoção no público ajuda-o a empatizar e torna-o mais propenso a agir. A emoção também aumenta a probabilidade de o público se lembrar da sua mensagem.
Provavelmente já encontrou isso em anúncios de TV. Alguns anúncios são muito sombrios e usam uma emoção triste para se conectar com o público e destacar os dados que estão a apresentar. Outros anúncios são muito animados e felizes, fazendo com que associe os dados apresentados a uma sensação positiva.
Como usar emoção ao comunicar dados? Abaixo estão algumas formas:
- Use Testemunhos e Histórias Pessoais
- Ao recolher dados, tente obter tanto dados quantitativos quanto qualitativos e integre ambos os tipos ao comunicar. Se os seus dados forem principalmente quantitativos, procure histórias individuais para aprender mais sobre as experiências relacionadas com os seus dados.
- Use Imagens
- As imagens ajudam o público a visualizar-se numa situação. Quando usa imagens, pode direcionar o público para a emoção que acha que ele deve sentir em relação aos seus dados.
- Use Cores
- Cores diferentes evocam emoções diferentes. Algumas cores populares e as emoções que evocam são:
- Azul geralmente evoca emoções de paz e confiança
- Verde está geralmente relacionado com a natureza e o meio ambiente
- Vermelho geralmente representa paixão e entusiasmo
- Amarelo geralmente transmite otimismo e felicidade
# Estudo de Caso de Comunicação
Emerson é gestor de produto de uma aplicação móvel. Emerson percebeu que os clientes submetem 42% mais reclamações e relatórios de erros aos fins de semana. Emerson também notou que os clientes que submetem uma reclamação que não é respondida em 48 horas têm 32% mais probabilidade de dar à aplicação uma classificação de 1 ou 2 na loja de aplicações.
Após realizar uma pesquisa, Emerson encontrou algumas soluções para resolver o problema. Emerson marca uma reunião de 30 minutos com os 3 líderes da empresa para comunicar os dados e as soluções propostas.
Durante esta reunião, o objetivo de Emerson é fazer com que os líderes da empresa compreendam que as 2 soluções abaixo podem melhorar a classificação da aplicação, o que provavelmente se traduzirá em maior receita.
**Solução 1.** Contratar representantes de atendimento ao cliente para trabalhar aos fins de semana
**Solução 2.** Adquirir um novo sistema de gestão de tickets de atendimento ao cliente, onde os representantes possam identificar facilmente quais reclamações estão na fila há mais tempo para que saibam quais devem ser tratadas com maior prioridade.
Na reunião, Emerson passa 5 minutos a explicar por que ter uma classificação baixa na loja de aplicações é prejudicial, 10 minutos a explicar o processo de pesquisa e como as tendências foram identificadas, 10 minutos a analisar algumas das reclamações recentes dos clientes e os últimos 5 minutos a passar rapidamente pelas 2 soluções potenciais.
Foi esta uma forma eficaz de Emerson comunicar durante esta reunião?
Durante a reunião, um dos líderes da empresa fixou-se nos 10 minutos de reclamações de clientes que Emerson apresentou. Após a reunião, estas reclamações foram a única coisa que este líder de equipa se lembrou. Outro líder da empresa concentrou-se principalmente na descrição do processo de pesquisa feita por Emerson. O terceiro líder da empresa lembrou-se das soluções propostas por Emerson, mas não tinha certeza de como essas soluções poderiam ser implementadas.
Na situação acima, pode-se perceber que houve uma lacuna significativa entre o que Emerson queria que os líderes de equipa retivessem e o que eles realmente retiveram da reunião. Abaixo está outra abordagem que Emerson poderia considerar.
Como Emerson poderia melhorar esta abordagem?
Contexto, Conflito, Clímax, Fecho, Conclusão
**Contexto** - Emerson poderia dedicar os primeiros 5 minutos a introduzir toda a situação e garantir que os líderes de equipa compreendessem como os problemas afetam métricas críticas para a empresa, como a receita.
Poderia ser apresentado desta forma: "Atualmente, a classificação do nosso aplicativo na loja de aplicativos é de 2.5. As classificações na loja de aplicativos são fundamentais para a Otimização da Loja de Aplicativos, que impacta quantos utilizadores veem o nosso aplicativo nas pesquisas e como o nosso aplicativo é percebido por potenciais utilizadores. E, claro, o número de utilizadores que temos está diretamente ligado à receita."
**Conflito** Emerson poderia então dedicar os próximos 5 minutos a falar sobre o conflito.
Poderia ser algo assim: “Os utilizadores submetem 42% mais reclamações e relatórios de erros aos fins de semana. Clientes que submetem uma reclamação que não é respondida em até 48 horas têm 32% menos probabilidade de dar ao nosso aplicativo uma classificação superior a 2 na loja de aplicativos. Melhorar a classificação do nosso aplicativo na loja de aplicativos para 4 aumentaria a nossa visibilidade em 20-30%, o que, segundo as minhas projeções, aumentaria a receita em 10%." Claro, Emerson deve estar preparado para justificar esses números.
**Clímax** Depois de estabelecer o contexto, Emerson poderia então passar para o Clímax durante cerca de 5 minutos.
Emerson poderia apresentar as soluções propostas, explicar como essas soluções abordariam os problemas identificados, como essas soluções poderiam ser integradas aos fluxos de trabalho existentes, qual seria o custo das soluções, qual seria o ROI das soluções e, talvez, até mostrar alguns screenshots ou wireframes de como as soluções seriam se implementadas. Emerson também poderia compartilhar depoimentos de utilizadores que tiveram suas reclamações resolvidas após mais de 48 horas, e até mesmo um depoimento de um representante atual do serviço ao cliente da empresa que comentasse sobre o sistema de tickets atual.
**Fecho** Agora Emerson pode dedicar 5 minutos a reiterar os problemas enfrentados pela empresa, revisitar as soluções propostas e rever por que essas soluções são as mais adequadas.
**Conclusão** Como esta é uma reunião com alguns stakeholders onde será utilizada comunicação bidirecional, Emerson poderia então planejar deixar 10 minutos para perguntas, para garantir que qualquer dúvida dos líderes de equipa seja esclarecida antes do fim da reunião.
Se Emerson adotasse a abordagem #2, seria muito mais provável que os líderes de equipa retivessem exatamente o que Emerson pretendia que eles retivessem da reunião que a forma como as reclamações e os erros são tratados poderia ser melhorada, e que existem 2 soluções que poderiam ser implementadas para que essa melhoria aconteça. Esta abordagem seria muito mais eficaz para comunicar os dados e a história que Emerson deseja transmitir.
# Conclusão
### Resumo dos pontos principais
- Comunicar é transmitir ou trocar informações.
- Ao comunicar dados, o objetivo não deve ser apenas passar números para o público. O objetivo deve ser contar uma história informada pelos dados.
- Existem 2 tipos de comunicação: Comunicação Unidirecional (informação é transmitida sem intenção de resposta) e Comunicação Bidirecional (informação é transmitida de forma interativa).
- Existem várias estratégias que podem ser usadas para contar uma história com os dados. As 5 estratégias que abordámos são:
- Compreender o Público, o Meio e o Método de Comunicação
- Começar com o Fim em Mente
- Abordar como uma História Real
- Usar Palavras e Frases Significativas
- Usar Emoção
### Recursos recomendados para estudo autónomo
[The Five C's of Storytelling - Articulate Persuasion](http://articulatepersuasion.com/the-five-cs-of-storytelling/)
[1.4 Your Responsibilities as a Communicator Business Communication for Success (umn.edu)](https://open.lib.umn.edu/businesscommunication/chapter/1-4-your-responsibilities-as-a-communicator/)
[How to Tell a Story with Data (hbr.org)](https://hbr.org/2013/04/how-to-tell-a-story-with-data)
[Two-Way Communication: 4 Tips for a More Engaged Workplace (yourthoughtpartner.com)](https://www.yourthoughtpartner.com/blog/bid/59576/4-steps-to-increase-employee-engagement-through-two-way-communication)
[6 succinct steps to great data storytelling - BarnRaisers, LLC (barnraisersllc.com)](https://barnraisersllc.com/2021/05/02/6-succinct-steps-to-great-data-storytelling/)
[How to Tell a Story With Data | Lucidchart Blog](https://www.lucidchart.com/blog/how-to-tell-a-story-with-data)
[6 Cs of Effective Storytelling on Social Media | Cooler Insights](https://coolerinsights.com/2018/06/effective-storytelling-social-media/)
[The Importance of Emotions In Presentations | Ethos3 - A Presentation Training and Design Agency](https://ethos3.com/2015/02/the-importance-of-emotions-in-presentations/)
[Data storytelling: linking emotions and rational decisions (toucantoco.com)](https://www.toucantoco.com/en/blog/data-storytelling-dataviz)
[Emotional Advertising: How Brands Use Feelings to Get People to Buy (hubspot.com)](https://blog.hubspot.com/marketing/emotions-in-advertising-examples)
[Choosing Colors for Your Presentation Slides | Think Outside The Slide](https://www.thinkoutsidetheslide.com/choosing-colors-for-your-presentation-slides/)
[How To Present Data [10 Expert Tips] | ObservePoint](https://resources.observepoint.com/blog/10-tips-for-presenting-data)
[Microsoft Word - Persuasive Instructions.doc (tpsnva.org)](https://www.tpsnva.org/teach/lq/016/persinstr.pdf)
[The Power of Story for Your Data (thinkhdi.com)](https://www.thinkhdi.com/library/supportworld/2019/power-story-your-data.aspx)
[Common Mistakes in Data Presentation (perceptualedge.com)](https://www.perceptualedge.com/articles/ie/data_presentation.pdf)
[Infographic: Here are 15 Common Data Fallacies to Avoid (visualcapitalist.com)](https://www.visualcapitalist.com/here-are-15-common-data-fallacies-to-avoid/)
[Cherry Picking: When People Ignore Evidence that They Dislike Effectiviology](https://effectiviology.com/cherry-picking/#How_to_avoid_cherry_picking)
[Tell Stories with Data: Communication in Data Science | by Sonali Verghese | Towards Data Science](https://towardsdatascience.com/tell-stories-with-data-communication-in-data-science-5266f7671d7)
[1. Communicating Data - Communicating Data with Tableau [Book] (oreilly.com)](https://www.oreilly.com/library/view/communicating-data-with/9781449372019/ch01.html)
## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ds/quiz/31)
Revise o que acabou de aprender com o questionário pós-aula acima!
## Tarefa
[Market Research](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 na sua língua nativa deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.

@ -0,0 +1,15 @@
# Conte uma história
## Instruções
A Ciência de Dados trata de contar histórias. Escolha qualquer conjunto de dados e escreva um pequeno artigo sobre uma história que poderia contar com ele. O que espera que o seu conjunto de dados revele? O que fará se as suas revelações forem problemáticas? E se os seus dados não revelarem facilmente os seus segredos? Pense nos cenários que o seu conjunto de dados pode apresentar e escreva-os.
## Rubrica
Exemplar | Adequado | Necessita 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 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autoritativa. 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 resultantes do uso desta tradução.

@ -0,0 +1,19 @@
# O Ciclo de Vida da Ciência de Dados
![comunicação](../../../translated_images/pt-PT/communication.06d8e2a88d30d168d661ad9f9f0a4f947ebff3719719cfdaf9ed00a406a01ead.jpg)
> 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 conteúdos, vais explorar alguns dos aspetos 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
Estas lições foram escritas 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 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,105 @@
# Introdução à Ciência de Dados na Cloud
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/17-DataScience-Cloud.png)|
|:---:|
| Ciência de Dados na Cloud: Introdução - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Nesta lição, vais aprender os princípios fundamentais da Cloud, perceber porque pode ser interessante utilizares serviços de Cloud para executar os teus projetos de ciência de dados e analisar alguns exemplos de projetos de ciência de dados realizados na Cloud.
## [Questionário Pré-Aula](https://ff-quizzes.netlify.app/en/ds/quiz/32)
## O que é a Cloud?
A Cloud, ou Computação na Cloud, refere-se à entrega de uma ampla gama de serviços de computação sob demanda, hospedados numa infraestrutura através da internet. Estes serviços incluem soluções como armazenamento, bases de dados, redes, software, análises e serviços inteligentes.
Normalmente, distinguimos entre Cloud Pública, Privada e Híbrida da seguinte forma:
* Cloud Pública: uma cloud pública é propriedade e operada por um fornecedor de serviços de cloud de terceiros, que disponibiliza os seus recursos de computação ao público através da Internet.
* Cloud Privada: refere-se a recursos de computação na cloud utilizados exclusivamente por uma única empresa ou organização, com serviços e infraestrutura mantidos numa rede privada.
* Cloud Híbrida: a cloud híbrida é um sistema que combina clouds públicas e privadas. Os utilizadores optam por um datacenter local, permitindo que dados e aplicações sejam executados numa ou mais clouds públicas.
A maioria dos serviços de computação na cloud enquadra-se 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 utilizadores alugam uma infraestrutura de TI, como servidores e máquinas virtuais (VMs), armazenamento, redes e sistemas operativos.
* Plataforma como Serviço (PaaS): os utilizadores alugam um ambiente para desenvolver, testar, entregar e gerir aplicações de software. Não é necessário configurar ou gerir a infraestrutura subjacente de servidores, armazenamento, redes e bases de dados necessárias para o desenvolvimento.
* Software como Serviço (SaaS): os utilizadores têm acesso a aplicações de software através da Internet, sob demanda e, geralmente, com base em subscrição. Não é necessário hospedar ou gerir a aplicação de software, a infraestrutura subjacente ou a manutenção, como atualizações de software e correções de segurança.
Alguns dos maiores fornecedores de Cloud são Amazon Web Services, Google Cloud Platform e Microsoft Azure.
## Por que escolher a Cloud para Ciência de Dados?
Desenvolvedores e profissionais de TI escolhem trabalhar com a Cloud por várias razões, incluindo as seguintes:
* Inovação: podes potenciar as tuas aplicações integrando serviços inovadores criados pelos fornecedores de Cloud diretamente nas tuas apps.
* Flexibilidade: pagas apenas pelos serviços de que precisas e podes escolher entre uma ampla gama de serviços. Normalmente, pagas conforme usas e adaptas os serviços às tuas necessidades em evolução.
* Orçamento: não precisas de fazer investimentos iniciais para comprar hardware e software, configurar e operar datacenters locais, e podes simplesmente pagar pelo que utilizas.
* Escalabilidade: os teus recursos podem ser escalados de acordo com as necessidades do teu projeto, o que significa que as tuas apps podem usar mais ou menos poder de computação, armazenamento e largura de banda, adaptando-se a fatores externos em qualquer momento.
* Produtividade: podes focar-te no teu negócio em vez de perder tempo com tarefas que podem ser geridas por terceiros, como a gestão de datacenters.
* Confiabilidade: a Computação na Cloud oferece várias formas de fazer backups contínuos dos teus dados e podes configurar planos de recuperação de desastres para manter o teu negócio e serviços a funcionar, mesmo em tempos de crise.
* Segurança: podes beneficiar de políticas, tecnologias e controlos que reforçam a segurança do teu projeto.
Estas são algumas das razões mais comuns pelas quais as pessoas escolhem usar serviços de Cloud. Agora que temos uma melhor compreensão do que é a Cloud e dos seus principais benefícios, vamos analisar mais especificamente o trabalho de cientistas de dados e desenvolvedores que trabalham com dados, e como a Cloud pode ajudá-los a enfrentar vários desafios:
* Armazenar grandes volumes de dados: em vez de comprar, gerir e proteger grandes servidores, podes armazenar os teus dados diretamente na cloud, 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, permitindo a transição da recolha de dados para a tomada de ações. Com serviços de integração de dados oferecidos na cloud, podes recolher, transformar e integrar dados de várias fontes num ú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 suficientemente poderosas para isso, razão pela qual muitas pessoas optam por aproveitar diretamente o enorme poder de computação da cloud para executar e implementar as suas soluções.
* Usar serviços de análise de dados: serviços de cloud como Azure Synapse Analytics, Azure Stream Analytics e Azure Databricks ajudam-te a transformar os teus dados em insights acionáveis.
* Usar serviços de Machine Learning e inteligência de dados: em vez de começar do zero, podes usar algoritmos de machine learning oferecidos pelo fornecedor de cloud, com serviços como AzureML. Também podes 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 Cloud
Vamos tornar isto mais tangível analisando alguns cenários.
### Análise de sentimento em redes sociais em tempo real
Começaremos com um cenário comummente estudado por quem inicia em machine learning: análise de sentimento em redes sociais em tempo real.
Imagina que geres um site de notícias e queres aproveitar dados em tempo real para entender que tipo de conteúdo pode interessar aos teus leitores. Para saber mais sobre isso, podes criar um programa que realiza análise de sentimento em tempo real de dados provenientes de publicações no Twitter, sobre tópicos relevantes para os teus leitores.
Os indicadores-chave que vais analisar são o volume de tweets sobre tópicos específicos (hashtags) e o sentimento, que é estabelecido usando ferramentas analíticas 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 streaming de entrada, que irá recolher dados do Twitter
* Configurar e iniciar uma aplicação cliente do Twitter, que irá 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, consulta 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 a COVID. Ao rever este projeto, vais perceber como podes criar uma ferramenta que extrai conhecimento de artigos científicos, obtém insights e ajuda investigadores a navegar por grandes coleções de artigos de forma eficiente.
Vejamos os diferentes passos utilizados para isto:
* 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, visita o [blog do Dmitry](https://soshnikov.com/science/analyzing-medical-papers-with-azure-and-text-analytics-for-health/).
Como podes ver, podemos aproveitar os serviços de Cloud de várias formas 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/
## Questionário Pós-Aula
## [Questionário 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.

@ -0,0 +1,14 @@
# Pesquisa de Mercado
## Instruções
Nesta lição, aprendeste que existem vários fornecedores importantes de serviços na nuvem. Faz uma pesquisa de mercado para descobrir o que cada um pode oferecer ao Cientista de Dados. As ofertas são comparáveis? Escreve um artigo a descrever as ofertas de três ou mais destes fornecedores de serviços na nuvem.
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | -- |
Um artigo de uma página descreve as ofertas de ciência de dados de três fornecedores de serviços na nuvem e diferencia entre elas. | Um artigo mais curto é apresentado. | Um artigo é apresentado sem completar 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 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.

@ -0,0 +1,341 @@
# Ciência de Dados na Nuvem: O método "Low code/No code"
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/18-DataScience-Cloud.png)|
|:---:|
| Ciência de Dados na Nuvem: Low Code - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Índice:
- [Ciência de Dados na Nuvem: O método "Low code/No code"](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [Quiz pré-aula](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1. Introdução](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.1 O que é o Azure Machine Learning?](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.2 O Projeto de Previsão de Insuficiência Cardíaca:](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [1.3 O Conjunto de Dados de Insuficiência Cardíaca:](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2. Treinamento Low code/No code de um modelo no Azure ML Studio](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.1 Criar um workspace no Azure ML](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2 Recursos de Computação](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2.1 Escolhendo as opções certas para os seus recursos de computação](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.2.2 Criando um cluster de computação](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.3 Carregando o Conjunto de Dados](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [2.4 Treinamento Low code/No code com AutoML](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3. Implantação de modelo Low code/No code e consumo de endpoint](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3.1 Implantação de modelo](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [3.2 Consumo de endpoint](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [🚀 Desafio](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [Quiz pós-aula](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [Revisão e Autoestudo](../../../../5-Data-Science-In-Cloud/18-Low-Code)
- [Tarefa](../../../../5-Data-Science-In-Cloud/18-Low-Code)
## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ds/quiz/34)
## 1. Introdução
### 1.1 O que é o Azure Machine Learning?
A plataforma de nuvem Azure é composta por mais de 200 produtos e serviços de nuvem projetados para ajudar a dar vida a novas soluções. Cientistas de dados dedicam muito esforço à exploração e pré-processamento de dados, além de testar vários tipos de algoritmos de treinamento de modelos para produzir modelos precisos. Essas tarefas consomem tempo e frequentemente utilizam de forma ineficiente hardware de computação caro.
[Azure ML](https://docs.microsoft.com/azure/machine-learning/overview-what-is-azure-machine-learning?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109) é uma plataforma baseada na nuvem para construir e operar soluções de machine learning no Azure. Ela inclui uma ampla gama de recursos e funcionalidades que ajudam os cientistas de dados a preparar dados, treinar modelos, publicar serviços preditivos e monitorar seu uso. O mais importante é que ela aumenta a eficiência ao automatizar muitas das tarefas demoradas associadas ao treinamento de modelos e permite o uso de recursos de computação baseados na nuvem que escalam de forma eficaz para lidar com grandes volumes de dados, incorrendo em custos apenas quando realmente utilizados.
O Azure ML fornece todas as ferramentas que desenvolvedores e cientistas de dados precisam para seus fluxos de trabalho de machine learning. Estas incluem:
- **Azure Machine Learning Studio**: um portal web no Azure Machine Learning para opções de treinamento de modelo com pouco ou nenhum código, implantação, automação, rastreamento e gerenciamento de ativos. O studio integra-se ao Azure Machine Learning SDK para uma experiência contínua.
- **Jupyter Notebooks**: prototipagem rápida e teste de modelos de ML.
- **Azure Machine Learning Designer**: permite arrastar e soltar módulos para construir experimentos e depois implantar pipelines em um ambiente de baixo código.
- **Interface de AutoML**: automatiza tarefas iterativas de desenvolvimento de modelos de machine learning, permitindo construir modelos de ML com alta escala, eficiência e produtividade, mantendo a qualidade do modelo.
- **Rotulagem de Dados**: uma ferramenta assistida de ML para rotular dados automaticamente.
- **Extensão de machine learning para Visual Studio Code**: fornece um ambiente de desenvolvimento completo para construir e gerenciar projetos de ML.
- **CLI de machine learning**: fornece comandos para gerenciar recursos do Azure ML a partir da linha de comando.
- **Integração com frameworks de código aberto** como PyTorch, TensorFlow, Scikit-learn e muitos outros para treinar, implantar e gerenciar o processo de machine learning de ponta a ponta.
- **MLflow**: uma biblioteca de código aberto para gerenciar o ciclo de vida dos seus experimentos de machine learning. **MLFlow Tracking** é um componente do MLflow que registra e rastreia métricas de execução de treinamento e artefatos de modelo, independentemente do ambiente do seu experimento.
### 1.2 O Projeto de Previsão de Insuficiência Cardíaca:
Não há dúvida de que criar e desenvolver projetos é a melhor forma de testar suas habilidades e conhecimentos. Nesta aula, vamos explorar duas maneiras diferentes de construir um projeto de ciência de dados para prever ataques de insuficiência cardíaca no Azure ML Studio, utilizando o método Low code/No code e o Azure ML SDK, conforme mostrado no esquema abaixo:
![project-schema](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/project-schema.PNG)
Cada método tem seus próprios prós e contras. O método Low code/No code é mais fácil para começar, pois envolve interagir com uma interface gráfica (GUI), sem necessidade de conhecimento prévio de código. Este método permite testar rapidamente a viabilidade do projeto e criar um POC (Prova de Conceito). No entanto, à medida que o projeto cresce e precisa estar pronto para produção, não é viável criar recursos através da GUI. É necessário automatizar tudo programaticamente, desde a criação de recursos até a implantação de um modelo. É aqui que o conhecimento do Azure ML SDK se torna essencial.
| | Low code/No code | Azure ML SDK |
|-------------------|------------------|---------------------------|
| Conhecimento de código | Não necessário | Necessário |
| Tempo de desenvolvimento | Rápido e fácil | Depende da experiência em código |
| Pronto para produção | Não | Sim |
### 1.3 O Conjunto de Dados de Insuficiência Cardíaca:
As doenças cardiovasculares (DCVs) são a principal causa de morte globalmente, representando 31% de todas as mortes no mundo. Fatores de risco ambientais e comportamentais, como uso de tabaco, dieta pouco saudável e obesidade, inatividade física e consumo nocivo de álcool, podem ser usados como características para modelos de estimativa. Ser capaz de estimar a probabilidade de desenvolvimento de uma DCV pode ser muito útil para prevenir ataques em pessoas de alto risco.
O Kaggle disponibilizou publicamente um [conjunto de dados de insuficiência cardíaca](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data), que vamos usar neste projeto. Você pode baixar o conjunto de dados agora. Este é um conjunto de dados tabular com 13 colunas (12 características e 1 variável alvo) e 299 linhas.
| | Nome da variável | Tipo | Descrição | Exemplo |
|----|---------------------------|-----------------|---------------------------------------------------------|-------------------|
| 1 | age | numérico | idade do paciente | 25 |
| 2 | anaemia | booleano | Redução de glóbulos vermelhos ou hemoglobina | 0 ou 1 |
| 3 | creatinine_phosphokinase | numérico | Nível da enzima CPK no sangue | 542 |
| 4 | diabetes | booleano | Se o paciente tem diabetes | 0 ou 1 |
| 5 | ejection_fraction | numérico | Percentagem de sangue que sai do coração em cada contração | 45 |
| 6 | high_blood_pressure | booleano | Se o paciente tem hipertensão | 0 ou 1 |
| 7 | platelets | numérico | Plaquetas no sangue | 149000 |
| 8 | serum_creatinine | numérico | Nível de creatinina sérica no sangue | 0.5 |
| 9 | serum_sodium | numérico | Nível de sódio sérico no sangue | jun |
| 10 | sex | booleano | mulher ou homem | 0 ou 1 |
| 11 | smoking | booleano | Se o paciente fuma | 0 ou 1 |
| 12 | time | numérico | período de acompanhamento (dias) | 4 |
|----|---------------------------|-----------------|---------------------------------------------------------|-------------------|
| 21 | DEATH_EVENT [Alvo] | booleano | se o paciente morre durante o período de acompanhamento | 0 ou 1 |
Depois de obter o conjunto de dados, podemos começar o projeto no Azure.
## 2. Treinamento Low code/No code de um modelo no Azure ML Studio
### 2.1 Criar um workspace no Azure ML
Para treinar um modelo no Azure ML, primeiro é necessário criar um workspace no Azure ML. O workspace é o recurso de nível superior para o Azure Machine Learning, fornecendo um local centralizado para trabalhar com todos os artefatos criados ao usar o Azure Machine Learning. O workspace mantém um histórico de todas as execuções de treinamento, incluindo logs, métricas, resultados e um snapshot dos seus scripts. Você usa essas informações para determinar qual execução de treinamento produz o melhor modelo. [Saiba mais](https://docs.microsoft.com/azure/machine-learning/concept-workspace?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
Recomenda-se usar o navegador mais atualizado que seja compatível com o seu sistema operacional. Os seguintes navegadores são suportados:
- Microsoft Edge (O novo Microsoft Edge, versão mais recente. Não o Microsoft Edge legado)
- Safari (versão mais recente, apenas para Mac)
- Chrome (versão mais recente)
- Firefox (versão mais recente)
Para usar o Azure Machine Learning, crie um workspace na sua assinatura do Azure. Você pode então usar este workspace para gerenciar dados, recursos de computação, código, modelos e outros artefatos relacionados às suas cargas de trabalho de machine learning.
> **_NOTA:_** Sua assinatura do Azure será cobrada uma pequena quantia pelo armazenamento de dados enquanto o workspace do Azure Machine Learning existir na sua assinatura, por isso recomendamos que você exclua o workspace do Azure Machine Learning quando não estiver mais utilizando-o.
1. Entre no [portal do Azure](https://ms.portal.azure.com/) usando as credenciais da Microsoft associadas à sua assinatura do Azure.
2. Selecione **Criar um recurso**
![workspace-1](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-1.PNG)
Pesquise por Machine Learning e selecione o tile de Machine Learning
![workspace-2](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-2.PNG)
Clique no botão criar
![workspace-3](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-3.PNG)
Preencha as configurações conforme segue:
- Assinatura: Sua assinatura do Azure
- Grupo de recursos: Crie ou selecione um grupo de recursos
- Nome do workspace: Insira um nome único para o seu workspace
- Região: Selecione a região geográfica mais próxima de você
- Conta de armazenamento: Note a nova conta de armazenamento padrão que será criada para o seu workspace
- Key vault: Note o novo key vault padrão que será criado para o seu workspace
- Application insights: Note o novo recurso de application insights padrão que será criado para o seu workspace
- Container registry: Nenhum (um será criado automaticamente na primeira vez que você implantar um modelo em um container)
![workspace-4](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-4.PNG)
- Clique em criar + revisar e depois no botão criar
3. Aguarde a criação do seu workspace (isso pode levar alguns minutos). Depois, acesse-o no portal. Você pode encontrá-lo através do serviço de Machine Learning do Azure.
4. Na página de visão geral do seu workspace, inicie o Azure Machine Learning studio (ou abra uma nova aba no navegador e navegue para https://ml.azure.com), e entre no Azure Machine Learning studio usando sua conta Microsoft. Se solicitado, selecione seu diretório e assinatura do Azure, e seu workspace do Azure Machine Learning.
![workspace-5](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-5.PNG)
5. No Azure Machine Learning studio, alterne o ícone ☰ no canto superior esquerdo para visualizar as várias páginas da interface. Você pode usar essas páginas para gerenciar os recursos do seu workspace.
![workspace-6](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/workspace-6.PNG)
Você pode gerenciar seu workspace usando o portal do Azure, mas para cientistas de dados e engenheiros de operações de Machine Learning, o Azure Machine Learning Studio fornece uma interface de usuário mais focada para gerenciar os recursos do workspace.
### 2.2 Recursos de Computação
Recursos de Computação são recursos baseados na nuvem nos quais você pode executar processos de treinamento de modelo e exploração de dados. Existem quatro tipos de recursos de computação que você pode criar:
- **Instâncias de Computação**: Estações de trabalho de desenvolvimento que cientistas de dados podem usar para trabalhar com dados e modelos. Isso envolve a criação de uma Máquina Virtual (VM) e o lançamento de uma instância de notebook. Você pode então treinar um modelo chamando um cluster de computação a partir do notebook.
- **Clusters de Computação**: Clusters escaláveis de VMs para processamento sob demanda de código de experimentos. Você precisará deles ao treinar um modelo. Clusters de computação também podem empregar recursos especializados de GPU ou CPU.
- **Clusters de Inferência**: Alvos de implantação para serviços preditivos que utilizam seus modelos treinados.
- **Attached Compute**: Ligações a recursos de computação existentes no Azure, como Máquinas Virtuais ou clusters do Azure Databricks.
#### 2.2.1 Escolher as opções certas para os seus recursos de computação
Alguns fatores importantes devem ser considerados ao criar um recurso de computação, e essas escolhas podem ser decisões críticas.
**Precisa de CPU ou GPU?**
Uma CPU (Unidade Central de Processamento) é o circuito eletrônico que executa instruções de um programa de computador. Uma GPU (Unidade de Processamento Gráfico) é um circuito eletrônico especializado que pode executar código relacionado a gráficos a uma taxa muito alta.
A principal diferença entre a arquitetura de CPU e GPU é que uma CPU é projetada para lidar com uma ampla gama de tarefas rapidamente (medida pela velocidade do clock da CPU), mas é limitada na simultaneidade das tarefas que podem estar em execução. As GPUs são projetadas para computação paralela e, portanto, são muito melhores em tarefas de aprendizagem profunda.
| CPU | GPU |
|-----------------------------------------|-----------------------------|
| Menos caro | Mais caro |
| Nível mais baixo de simultaneidade | Nível mais alto de simultaneidade |
| Mais lento no treino de modelos de aprendizagem profunda | Ótimo para aprendizagem profunda |
**Tamanho do Cluster**
Clusters maiores são mais caros, mas resultam em melhor capacidade de resposta. Portanto, se tiver tempo, mas não muito dinheiro, deve começar com um cluster pequeno. Por outro lado, se tiver dinheiro, mas pouco tempo, deve começar com um cluster maior.
**Tamanho da VM**
Dependendo das suas restrições de tempo e orçamento, pode variar o tamanho da RAM, disco, número de núcleos e velocidade do clock. Aumentar todos esses parâmetros será mais caro, mas resultará em melhor desempenho.
**Instâncias Dedicadas ou de Baixa Prioridade?**
Uma instância de baixa prioridade significa que é interrompível: essencialmente, a Microsoft Azure pode usar esses recursos e atribuí-los a outra tarefa, interrompendo assim um trabalho. Uma instância dedicada, ou não interrompível, significa que o trabalho nunca será terminado sem a sua permissão.
Esta é outra consideração entre tempo e dinheiro, já que instâncias interrompíveis são menos caras do que as dedicadas.
#### 2.2.2 Criar um cluster de computação
No [Azure ML workspace](https://ml.azure.com/) que criámos anteriormente, vá para computação e poderá ver os diferentes recursos de computação que acabámos de discutir (ou seja, instâncias de computação, clusters de computação, clusters de inferência e computação ligada). Para este projeto, vamos precisar de um cluster de computação para treino de modelo. No Studio, clique no menu "Compute", depois na aba "Compute cluster" e clique no botão "+ New" para criar um cluster de computação.
![22](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-1.PNG)
1. Escolha as suas opções: Dedicado vs Baixa prioridade, CPU ou GPU, tamanho da VM e número de núcleos (pode manter as configurações padrão para este projeto).
2. Clique no botão Next.
![23](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-2.PNG)
3. Dê ao cluster um nome de computação.
4. Escolha as suas opções: Número mínimo/máximo de nós, segundos inativos antes de reduzir, acesso SSH. Note que, se o número mínimo de nós for 0, poupará dinheiro quando o cluster estiver inativo. Note que quanto maior o número de nós máximos, mais curto será o treino. O número máximo de nós recomendado é 3.
5. Clique no botão "Create". Este passo pode levar alguns minutos.
![29](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/cluster-3.PNG)
Fantástico! Agora que temos um cluster de computação, precisamos de carregar os dados para o Azure ML Studio.
### 2.3 Carregar o Conjunto de Dados
1. No [Azure ML workspace](https://ml.azure.com/) que criámos anteriormente, clique em "Datasets" no menu à esquerda e clique no botão "+ Create dataset" para criar um conjunto de dados. Escolha a opção "From local files" e selecione o conjunto de dados do Kaggle que descarregámos anteriormente.
![24](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-1.PNG)
2. Dê ao seu conjunto de dados um nome, um tipo e uma descrição. Clique em Next. Carregue os dados a partir dos ficheiros. Clique em Next.
![25](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-2.PNG)
3. No Schema, altere o tipo de dados para Boolean para as seguintes características: anaemia, diabetes, high blood pressure, sex, smoking e DEATH_EVENT. Clique em Next e clique em Create.
![26](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/dataset-3.PNG)
Ótimo! Agora que o conjunto de dados está pronto e o cluster de computação foi criado, podemos começar o treino do modelo!
### 2.4 Treino com pouco ou nenhum código usando AutoML
O desenvolvimento tradicional de modelos de machine learning é intensivo em recursos, requer conhecimento significativo do domínio e tempo para produzir e comparar dezenas de modelos.
O machine learning automatizado (AutoML) é o processo de automatizar as tarefas iterativas e demoradas do desenvolvimento de modelos de machine learning. Permite que cientistas de dados, analistas e programadores construam modelos de ML com alta escala, eficiência e produtividade, mantendo a qualidade do modelo. Reduz o tempo necessário para obter modelos de ML prontos para produção, com grande facilidade e eficiência. [Saiba mais](https://docs.microsoft.com/azure/machine-learning/concept-automated-ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109)
1. No [Azure ML workspace](https://ml.azure.com/) que criámos anteriormente, clique em "Automated ML" no menu à esquerda e selecione o conjunto de dados que acabou de carregar. Clique em Next.
![27](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-1.PNG)
2. Insira um novo nome de experimento, a coluna alvo (DEATH_EVENT) e o cluster de computação que criámos. Clique em Next.
![28](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-2.PNG)
3. Escolha "Classification" e clique em Finish. Este passo pode levar entre 30 minutos a 1 hora, dependendo do tamanho do cluster de computação.
![30](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-3.PNG)
4. Quando a execução estiver concluída, clique na aba "Automated ML", clique na sua execução e clique no algoritmo no cartão "Best model summary".
![31](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/aml-4.PNG)
Aqui pode ver uma descrição detalhada do melhor modelo que o AutoML gerou. Também pode explorar outros modelos gerados na aba Models. Dedique alguns minutos para explorar os modelos na aba Explanations (preview). Depois de escolher o modelo que deseja usar (neste caso, escolhemos o melhor modelo selecionado pelo AutoML), veremos como podemos implantá-lo.
## 3. Implantação de modelo com pouco ou nenhum código e consumo de endpoint
### 3.1 Implantação do modelo
A interface de machine learning automatizado permite implantar o melhor modelo como um serviço web em alguns passos. A implantação é a integração do modelo para que ele possa fazer previsões com base em novos dados e identificar áreas potenciais de oportunidade. Para este projeto, a implantação como um serviço web significa que aplicações médicas poderão consumir o modelo para fazer previsões em tempo real sobre o risco de ataque cardíaco dos seus pacientes.
Na descrição do melhor modelo, clique no botão "Deploy".
![deploy-1](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-1.PNG)
15. Dê-lhe um nome, uma descrição, tipo de computação (Azure Container Instance), habilite a autenticação e clique em Deploy. Este passo pode levar cerca de 20 minutos para ser concluído. O processo de implantação envolve várias etapas, incluindo o registo do modelo, a geração de recursos e a configuração para o serviço web. Uma mensagem de status aparece em Deploy status. Selecione Refresh periodicamente para verificar o status da implantação. Está implantado e em execução quando o status é "Healthy".
![deploy-2](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-2.PNG)
16. Depois de implantado, clique na aba Endpoint e clique no endpoint que acabou de implantar. Aqui pode encontrar todos os detalhes que precisa saber sobre o endpoint.
![deploy-3](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/deploy-3.PNG)
Incrível! Agora que temos um modelo implantado, podemos começar o consumo do endpoint.
### 3.2 Consumo do endpoint
Clique na aba "Consume". Aqui pode encontrar o endpoint REST e um script Python na opção de consumo. Dedique algum tempo para ler o código Python.
Este script pode ser executado diretamente a partir da sua máquina local e consumirá o seu endpoint.
![35](../../../../5-Data-Science-In-Cloud/18-Low-Code/images/consumption-1.PNG)
Dedique um momento para verificar estas 2 linhas de código:
```python
url = 'http://98e3715f-xxxx-xxxx-xxxx-9ec22d57b796.centralus.azurecontainer.io/score'
api_key = '' # Replace this with the API key for the web service
```
A variável `url` é o endpoint REST encontrado na aba de consumo e a variável `api_key` é a chave primária também encontrada na aba de consumo (apenas no caso de ter habilitado a autenticação). É assim que o script pode consumir o endpoint.
18. Ao executar o script, deverá ver o seguinte resultado:
```python
b'"{\\"result\\": [true]}"'
```
Isso significa que a previsão de insuficiência cardíaca para os dados fornecidos é verdadeira. Isso faz sentido porque, se olhar mais de perto os dados gerados automaticamente no script, tudo está em 0 e falso por padrão. Pode alterar os dados com a seguinte amostra de entrada:
```python
data = {
"data":
[
{
'age': "0",
'anaemia': "false",
'creatinine_phosphokinase': "0",
'diabetes': "false",
'ejection_fraction': "0",
'high_blood_pressure': "false",
'platelets': "0",
'serum_creatinine': "0",
'serum_sodium': "0",
'sex': "false",
'smoking': "false",
'time': "0",
},
{
'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",
},
],
}
```
O script deverá retornar:
```python
b'"{\\"result\\": [true, false]}"'
```
Parabéns! Acabou de consumir o modelo implantado e treinado no Azure ML!
> **_NOTA:_** Quando terminar o projeto, não se esqueça de eliminar todos os recursos.
## 🚀 Desafio
Observe atentamente as explicações e detalhes do modelo que o AutoML gerou para os melhores modelos. Tente entender por que o melhor modelo é melhor do que os outros. Que algoritmos foram comparados? Quais são as diferenças entre eles? Por que o melhor está a ter um desempenho superior neste caso?
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/35)
## Revisão e Estudo Individual
Nesta lição, aprendeu como treinar, implantar e consumir um modelo para prever o risco de insuficiência cardíaca de forma simplificada na nuvem. Se ainda não o fez, aprofunde-se nas explicações do modelo que o AutoML gerou para os melhores modelos e tente entender por que o melhor modelo é superior aos outros.
Pode explorar mais sobre AutoML com pouco ou nenhum código lendo esta [documentação](https://docs.microsoft.com/azure/machine-learning/tutorial-first-experiment-automated-ml?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
## Tarefa
[Projeto de Ciência de Dados com pouco ou nenhum código no Azure ML](assignment.md)
---
**Aviso Legal**:
Este documento foi traduzido utilizando o serviço de tradução automática [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a 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 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 resultantes do uso desta tradução.

@ -0,0 +1,14 @@
# Projeto de Ciência de Dados Low code/No code no Azure ML
## Instruções
Vimos como usar a plataforma Azure ML para treinar, implementar e consumir um modelo de forma Low code/No code. Agora procure alguns dados que possa usar para treinar outro modelo, implementá-lo e consumi-lo. Pode procurar conjuntos de dados no [Kaggle](https://kaggle.com) e nos [Azure Open Datasets](https://azure.microsoft.com/services/open-datasets/catalog?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
## Rubrica
| Exemplar | Adequado | Precisa de Melhorias |
|----------|----------|----------------------|
|Ao carregar os dados, teve o cuidado de alterar o tipo das variáveis, se necessário. Também limpou os dados, caso fosse preciso. Realizou um treino num conjunto de dados através do AutoML e verificou as explicações do modelo. Implementou o melhor modelo e conseguiu consumi-lo. | Ao carregar os dados, teve o cuidado de alterar o tipo das variáveis, se necessário. Realizou um treino num conjunto de dados através do AutoML, implementou o melhor modelo e conseguiu consumi-lo. | Implementou 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 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.

@ -0,0 +1,316 @@
# Ciência de Dados na Nuvem: O caminho do "Azure ML SDK"
|![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../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)
- [Questionário 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 e conjunto de dados de previsão de insuficiência cardíaca](../../../../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 do 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)
- [Questionário 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)
## [Questionário 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 criar e executar fluxos de trabalho de aprendizado de máquina com o serviço Azure Machine Learning. É possível interagir com o serviço em qualquer ambiente Python, incluindo Jupyter Notebooks, Visual Studio Code ou o seu IDE Python favorito.
Áreas principais do SDK incluem:
- Explorar, preparar e gerenciar o ciclo de vida dos seus conjuntos de dados usados em experimentos de aprendizado de máquina.
- Gerenciar recursos na nuvem para monitorar, registrar e organizar 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 por 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. Nesta lição, faremos exatamente a mesma coisa, mas utilizando o Azure Machine Learning SDK.
![esquema-do-projeto](../../../../5-Data-Science-In-Cloud/19-Azure/images/project-schema.PNG)
### 1.2 Introdução ao projeto e conjunto de dados de previsão de insuficiência cardíaca
Consulte [aqui](../18-Low-Code/README.md) a introdução ao projeto e conjunto de dados de previsão de insuficiência cardíaca.
## 2. Treinando um modelo com o Azure ML SDK
### 2.1 Criar um workspace do Azure ML
Para simplificar, vamos trabalhar em um Jupyter Notebook. 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.
![instância-de-computação-1](../../../../5-Data-Science-In-Cloud/19-Azure/images/compute-instance-1.PNG)
Vamos criar uma instância de computação para provisionar um Jupyter Notebook.
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 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 fazer o upload do notebook.
Os 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 Jupyter Notebook. 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 Aplicações, clique na opção Jupyter.
2. Marque a caixa "Sim, eu entendo" e clique no botão Continuar.
![notebook-1](../../../../5-Data-Science-In-Cloud/19-Azure/images/notebook-1.PNG)
3. Isso abrirá uma nova aba do navegador com sua instância do Jupyter Notebook, como mostrado abaixo. Clique no botão "Novo" para criar um notebook.
![notebook-2](../../../../5-Data-Science-In-Cloud/19-Azure/images/notebook-2.PNG)
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 pelo nome. 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 este passo 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 do 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 interrompido automaticamente e os resultados disponibilizados.
- `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 destino 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. Este passo pode levar até uma hora, dependendo do tamanho do cluster.
```python
remote_run = experiment.submit(automl_config)
```
Você pode executar o widget RunDetails para exibir 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 visualizar 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). A InferenceConfig representa as configurações de ambiente personalizadas usadas para a 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 no 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 essa 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)
```
Este passo 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 essa entrada para o seu modelo para obter uma previsão:
```python
response = aci_service.run(input_data=test_sample)
response
```
Isto deverá gerar `'{"result": [false]}'`. Isto significa que os dados do paciente que enviámos para o endpoint geraram a previsão `false`, o que indica que esta pessoa não tem probabilidade de sofrer um ataque cardíaco.
Parabéns! Acabou de consumir o modelo implementado e treinado no Azure ML com o Azure ML SDK!
> **_NOTE:_** Quando terminar o projeto, não se esqueça de eliminar todos os recursos.
## 🚀 Desafio
Há muitas outras coisas que pode fazer através do SDK; infelizmente, não conseguimos abordá-las todas nesta lição. Mas boas notícias: aprender a navegar pela documentação do SDK pode levá-lo muito longe por conta própria. Consulte a documentação do Azure ML SDK e procure pela classe `Pipeline`, que permite criar pipelines. Um Pipeline é uma coleção de etapas que podem ser executadas como um fluxo de trabalho.
**DICA:** Aceda à [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 escreva palavras-chave na barra de pesquisa, como "Pipeline". Deverá encontrar a classe `azureml.pipeline.core.Pipeline` nos resultados da pesquisa.
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/37)
## Revisão e Estudo Individual
Nesta lição, aprendeu a treinar, implementar e consumir um modelo para prever o risco de insuficiência cardíaca com o Azure ML SDK na cloud. Consulte 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 obter mais informações sobre o Azure ML SDK. Experimente criar o seu próprio modelo com o Azure ML SDK.
## Tarefa
[Projeto de Ciência de Dados usando o 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, é importante ter em conta que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.

@ -0,0 +1,14 @@
# Projeto de Ciência de Dados usando Azure ML SDK
## Instruções
Vimos como utilizar a plataforma Azure ML para treinar, implementar e consumir um modelo com o Azure ML SDK. Agora procure alguns dados que possa usar para treinar outro modelo, implementá-lo e consumi-lo. Pode procurar conjuntos de dados no [Kaggle](https://kaggle.com) e nos [Azure Open Datasets](https://azure.microsoft.com/services/open-datasets/catalog?WT.mc_id=academic-77958-bethanycheum&ocid=AID3041109).
## Rubrica
| Exemplar | Adequado | Necessita Melhorias |
|----------|----------|---------------------|
|Ao configurar o AutoML, consultou a documentação do SDK para verificar quais parâmetros poderia usar. Realizou um treino num conjunto de dados através do AutoML usando o Azure ML SDK e verificou as explicações do modelo. Implementou o melhor modelo e conseguiu consumi-lo através do Azure ML SDK. | Realizou um treino num conjunto de dados através do AutoML usando o Azure ML SDK e verificou as explicações do modelo. Implementou o melhor modelo e conseguiu consumi-lo através do Azure ML SDK. | Realizou um treino num conjunto de dados através do AutoML usando o Azure ML SDK. Implementou 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, tenha em atenção 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.

@ -0,0 +1,323 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Ciência de Dados na Nuvem: O caminho do \"Azure ML SDK\"\n",
"\n",
"## Introdução\n",
"\n",
"Neste notebook, vamos aprender a usar o Azure ML SDK para treinar, implementar e consumir um modelo através do Azure ML.\n",
"\n",
"Pré-requisitos: \n",
"1. Criou um workspace do Azure ML. \n",
"2. Carregou o [conjunto de dados de Insuficiência Cardíaca](https://www.kaggle.com/andrewmvd/heart-failure-clinical-data) no Azure ML. \n",
"3. Carregou este notebook no Azure ML Studio. \n",
"\n",
"Os próximos passos são:\n",
"\n",
"1. Criar uma Experiência num 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 a experiência AutoML. \n",
"6. Explorar os resultados e obter o melhor modelo. \n",
"7. Registar o melhor modelo. \n",
"8. Implementar 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 persistente. Certifique-se de que o ficheiro de configuração está 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 uma experiência no Azure ML\n",
"\n",
"Vamos criar uma experiência chamada 'aml-experiment' no espaço de trabalho que acabámos 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",
"Será necessário criar um [alvo de computação](https://docs.microsoft.com/azure/machine-learning/concept-azure-machine-learning-architecture#compute-target) para a 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 carregou o conjunto de dados para o Azure ML e que a chave tem o mesmo nome que o 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": [
"## Implementar o Melhor Modelo\n",
"\n",
"Execute o seguinte código para implementar o melhor modelo. Pode verificar o estado da implementação no portal do Azure ML. Este passo pode demorar 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",
"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 automática [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 na sua língua nativa 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 resultantes do uso desta tradução.\n"
]
}
],
"metadata": {
"orig_nbformat": 4,
"language_info": {
"name": "python"
},
"coopTranslator": {
"original_hash": "af42669556d5dc19fc4cc3866f7d2597",
"translation_date": "2025-09-02T05:39:32+00:00",
"source_file": "5-Data-Science-In-Cloud/19-Azure/notebook.ipynb",
"language_code": "pt"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

@ -0,0 +1,23 @@
# Ciência de Dados na Cloud
![cloud-picture](../../../translated_images/pt-PT/cloud-picture.f5526de3c6c6387b2d656ba94f019b3352e5e3854a78440e4fb00c93e2dea675.jpg)
> 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 cloud pode ser um divisor de águas. Nas próximas três lições, vamos explorar o que é a cloud e por que ela pode ser tão útil. Também vamos analisar um conjunto de dados sobre insuficiência cardíaca e construir um modelo para ajudar a avaliar a probabilidade de alguém sofrer de insuficiência cardíaca. Utilizaremos o poder da cloud para treinar, implementar e consumir um modelo de duas formas diferentes. Uma forma será utilizando apenas a interface de utilizador, num estilo de "Low code/No code", e a outra será através do Azure Machine Learning Software Developer Kit (Azure ML SDK).
![project-schema](../../../translated_images/pt-PT/project-schema.420e56d495624541eaecf2b737f138c86fb7d8162bb1c0bf8783c350872ffc4d.png)
### Tópicos
1. [Por que usar a Cloud para Ciência de Dados?](17-Introduction/README.md)
2. [Ciência de Dados na Cloud: O método "Low code/No code"](18-Low-Code/README.md)
3. [Ciência de Dados na Cloud: O método "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). 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, tenha em atenção 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.

@ -0,0 +1,147 @@
# Ciência de Dados no Mundo Real
| ![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../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 aprendizagem!
Começámos com as definições de ciência de dados e ética, explorámos várias ferramentas e técnicas para análise e visualização de dados, revisámos o ciclo de vida da ciência de dados e analisámos como escalar e automatizar fluxos de trabalho de ciência de dados com serviços de computação na nuvem. Então, provavelmente estás a perguntar-te: _"Como exatamente posso aplicar tudo o que aprendi 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 investigação, humanidades digitais e sustentabilidade. Vamos também abordar oportunidades de projetos para estudantes e concluir com recursos úteis para continuar a tua jornada de aprendizagem!
## Questionário Pré-Aula
## [Questionário 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 a encontrar formas mais fáceis de projetar e integrar decisões baseadas em IA e insights orientados por dados em experiências de utilizadores 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/) utilizou ciência de dados para correlacionar termos de pesquisa com tendências de gripe. Embora a abordagem tenha tido falhas, destacou as possibilidades (e desafios) das 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 aprendizagem automática para prever rotas ótimas de entrega, considerando condições meteorológicas, padrões de trânsito, prazos de entrega e mais.
* [Visualização de Rotas de Táxis em NYC](http://chriswhong.github.io/nyctaxi/) - dados obtidos através 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 compreender como 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 recolha e entrega, duração das viagens, rotas preferidas, etc.) recolhidos de milhões de viagens diárias da Uber para construir uma ferramenta de análise de dados que ajuda em decisões de preços, segurança, deteção de fraudes e navegação.
* [Análise Desportiva](https://towardsdatascience.com/scope-of-analytics-in-sports-world-37ed09c39860) - foca-se em _análise preditiva_ (análise de equipas e jogadores - pensa 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_ (dashboards de equipas e fãs, jogos, etc.) com aplicações como recrutamento de talentos, apostas desportivas e gestão de inventário/locais.
* [Ciência de Dados na Banca](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 deteçã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ções 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 imagiologia 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 ao paciente e logística de fornecimento), rastreamento e prevenção de doenças, etc.
![Aplicações de Ciência de Dados no Mundo Real](../../../../translated_images/pt-PT/data-science-applications.4e5019cd8790ebac2277ff5f08af386f8727cac5d30f77727c7090677e6adb9c.png) 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. Queres explorar outras aplicações? Consulta a secção [Revisão e Autoestudo](../../../../6-Data-Science-In-Wild/20-Real-World-Examples) abaixo.
## Ciência de Dados + Investigação
| ![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-Research.png) |
| :---------------------------------------------------------------------------------------------------------------: |
| Ciência de Dados & Investigação - _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 _investigação_ podem ser úteis de duas perspetivas:
* _oportunidades de inovação_ - explorar protótipos rápidos de conceitos avançados e testar experiências de utilizadores 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, estes projetos de investigação podem proporcionar oportunidades de aprendizagem e colaboração que melhoram a compreensão do tema e ampliam a consciência e o envolvimento com pessoas ou equipas relevantes que trabalham em áreas de interesse. Então, como são os projetos de investigação e como podem ter 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 investigação de referência](http://proceedings.mlr.press/v81/buolamwini18a/buolamwini18a.pdf) coautorado com Timnit Gebru (então na Microsoft Research) que se focou em:
* **O quê:** O objetivo do projeto de investigação era _avaliar o viés presente em algoritmos e conjuntos de dados de análise facial automatizada_ com base no género e tipo de pele.
* **Porquê:** 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 a viés) podem causar potenciais danos económicos e sociais a indivíduos ou grupos afetados. Compreender (e eliminar ou mitigar) os vieses é essencial para a equidade no uso.
* **Como:** Os investigadores reconheceram que os benchmarks existentes utilizavam predominantemente sujeitos de pele mais clara e criaram um novo conjunto de dados (1000+ imagens) que era _mais equilibrado_ em termos de 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 notá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:** Destacou a necessidade de conjuntos de dados mais _representativos_ (subgrupos equilibrados) e equipas mais _inclusivas_ (diversidade de origens) para reconhecer e eliminar ou mitigar esses vieses mais cedo em soluções de IA. Esforços de investigação como este também são fundamentais para muitas organizações definirem princípios e práticas para _IA responsável_ para melhorar a equidade nos seus produtos e processos de IA.
**Queres saber mais sobre esforços de investigação relevantes na Microsoft?**
* Consulta [Projetos de Investigação 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.
* Explora projetos de estudantes da [Microsoft Research Data Science Summer School](https://www.microsoft.com/en-us/research/academic-program/data-science-summer-school/).
* Consulta 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
| ![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../sketchnotes/20-DataScience-Humanities.png) |
| :---------------------------------------------------------------------------------------------------------------: |
| Ciência de Dados & Humanidades Digitais - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
Humanidades Digitais [foram 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 da [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ção, análise espacial e textual que podem ajudar-nos a revisitar conjuntos de dados históricos e literários para obter novos insights e perspetivas.
*Queres explorar e expandir um projeto nesta área?*
Consulta ["Emily Dickinson and the Meter of Mood"](https://gist.github.com/jlooper/ce4d102efd057137bc000db796bfd671) - um excelente exemplo de [Jen Looper](https://twitter.com/jenlooper) que questiona como podemos usar ciência de dados para revisitar poesia familiar e reavaliar o seu significado e as contribuições do autor em novos contextos. Por exemplo, _podemos prever a estação em que um poema foi escrito analisando o 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 recolher 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 na 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 este fluxo de trabalho, podemos explorar os impactos sazonais no sentimento dos poemas e ajudar-nos a formar as nossas próprias perspetivas sobre o autor. Experimenta - depois expande o notebook para fazer outras perguntas ou visualizar os dados de novas formas!
> Podes usar algumas das ferramentas no [Digital Humanities toolkit](https://github.com/Digital-Humanities-Toolkit) para seguir estas linhas de investigação.
## Ciência de Dados + Sustentabilidade
| ![ Sketchnote por [(@sketchthedocs)](https://sketchthedocs.dev) ](../../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 se concentram em **Proteger o Planeta** da degradação e do impacto das mudanças climáticas. A iniciativa [Microsoft Sustainability](https://www.microsoft.com/en-us/sustainability) apoia esses objetivos ao explorar formas de como soluções tecnológicas podem ajudar a 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 requer pensamento em escala de nuvem - e dados em grande escala. A iniciativa [Planetary Computer](https://planetarycomputer.microsoft.com/) fornece 4 componentes para ajudar cientistas de dados e desenvolvedores neste 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 utilizadores a pesquisar dados relevantes no espaço e no tempo.
* [Hub](https://planetarycomputer.microsoft.com/docs/overview/environment/) - ambiente gerido para cientistas processarem conjuntos de dados geoespaciais massivos.
* [Aplicações](https://planetarycomputer.microsoft.com/applications) - mostram casos de uso e ferramentas para insights de sustentabilidade.
**O Projeto Planetary Computer está atualmente em fase de pré-visualização (a partir de setembro de 2021)** - veja como pode começar a contribuir para soluções de sustentabilidade utilizando ciência de dados.
* [Solicite acesso](https://planetarycomputer.microsoft.com/account/request) para iniciar a exploração e conectar-se com outros utilizadores.
* [Explore a documentação](https://planetarycomputer.microsoft.com/docs/overview/about) para compreender os conjuntos de dados e APIs suportados.
* Explore aplicações como [Monitorização de Ecossistemas](https://analytics-lab.org/ecosystemmonitoring/) para inspiração em ideias de aplicações.
Pense em como pode usar visualização de dados para expor ou amplificar insights relevantes em áreas como alterações climáticas e desflorestação. Ou reflita sobre como esses insights podem ser utilizados para criar novas experiências de utilizador que motivem mudanças comportamentais para um estilo de vida mais sustentável.
## Ciência de Dados + Estudantes
Falámos sobre aplicações reais na indústria e na investigação, e explorámos exemplos de aplicações de ciência de dados nas humanidades digitais e na sustentabilidade. Então, como pode desenvolver as suas competências e partilhar a sua experiência como principiante em ciência de dados?
Aqui estão alguns exemplos de projetos de estudantes em ciência de dados para inspirá-lo.
* [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 que exploram tópicos como:
- [Preconceito 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)
- [Fiabilidade do Sistema de Metro de Nova Iorque](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)
* [Digitalização da 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 equipa em Claremont, utilizando [ArcGIS StoryMaps](https://storymaps.arcgis.com/).
## 🚀 Desafio
Procure artigos que recomendem projetos de ciência de dados adequados para principiantes - como [estas 50 áreas temáticas](https://www.upgrad.com/blog/data-science-project-ideas-topics-beginners/), [estas 21 ideias de projetos](https://www.intellspot.com/data-science-project-ideas) ou [estes 16 projetos com código fonte](https://data-flair.training/blogs/data-science-project-ideas/) que pode desconstruir e adaptar. E não se esqueça de escrever sobre as suas jornadas de aprendizagem e partilhar os seus insights connosco.
## Questionário Pós-Aula
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ds/quiz/39)
## Revisão & 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 de Ciência de Dados no Mundo Real 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/), [Cuidados de 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 na sua língua nativa deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.

@ -0,0 +1,39 @@
# Explorar um Conjunto de Dados do Planetary Computer
## Instruções
Nesta lição, falámos sobre vários domínios de aplicação da ciência de dados - com análises aprofundadas de exemplos relacionados com investigação, sustentabilidade e humanidades digitais. Nesta tarefa, vais explorar um destes exemplos com mais detalhe e aplicar alguns dos teus conhecimentos sobre visualizações e análises de dados para obter insights sobre dados de sustentabilidade.
O projeto [Planetary Computer](https://planetarycomputer.microsoft.com/) tem conjuntos de dados e APIs que podem ser acedidos com uma conta - solicita uma para ter acesso caso queiras experimentar o passo extra da tarefa. O site também oferece uma funcionalidade chamada [Explorer](https://planetarycomputer.microsoft.com/explore), que podes usar sem criar uma conta.
`Passos:`
A interface do Explorer (mostrada na imagem abaixo) permite-te selecionar um conjunto de dados (a partir 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, o teu objetivo é:
1. Ler a [documentação do Explorer](https://planetarycomputer.microsoft.com/docs/overview/explorer/) - compreender as opções disponíveis.
2. Explorar o [Catálogo](https://planetarycomputer.microsoft.com/catalog) de conjuntos de dados - aprender o propósito de cada um.
3. Usar o Explorer - escolher um conjunto de dados do teu interesse, selecionar uma consulta relevante e uma opção de renderização.
![O Explorer do Planetary Computer](../../../../translated_images/pt-PT/planetary-computer-explorer.c1e95a9b053167d64e2e8e4347cfb689e47e2037c33103fc1bbea1a149d4f85b.png)
`A Tua Tarefa:`
Agora analisa a visualização que foi gerada no navegador e responde às seguintes questões:
* Quais são as _características_ do conjunto de dados?
* Que _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, que insights não conseguiste obter)?
* Se pudesses aceder aos dados brutos, que _visualizações alternativas_ criarias e porquê?
`Pontos Bónus:`
Solicita uma conta - e faz login quando for aceite.
* Usa a opção _Launch Hub_ para abrir os dados brutos num Notebook.
* Explora os dados de forma interativa e implementa as visualizações alternativas que pensaste.
* Agora analisa as tuas visualizações personalizadas - conseguiste obter os insights que te faltavam anteriormente?
## Rubrica
Exemplar | Adequado | Necessita de Melhorias
--- | --- | --- |
Todas as cinco questões 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 questões com grande detalhe, mostrando que teve experiência prática com o Explorer. | O aluno não respondeu a várias questões ou forneceu detalhes insuficientes - indicando que não foi feita uma tentativa significativa para 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, tenha em atenção 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.

@ -0,0 +1,14 @@
# 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas resultantes 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 Microsoft Azure Cloud Advocates. Este repositório é um recurso de aprendizagem que ensina conceitos fundamentais de ciência de dados através de lições baseadas em projetos, incluindo notebooks Jupyter, questionários interativos e tarefas práticas.
**Principais Tecnologias:**
- **Jupyter Notebooks**: Meio principal de aprendizagem utilizando Python 3
- **Bibliotecas Python**: pandas, numpy, matplotlib para análise e visualização de dados
- **Vue.js 2**: Aplicação de questionários (pasta quiz-app)
- **Docsify**: Gerador de sites de documentação para acesso offline
- **Node.js/npm**: Gestão 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-no-Mundo-Real)
- Cada lição inclui README, notebooks, tarefas e questionários
- Aplicação de questionários 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 da Aplicação de Questionários
```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 ficheiros `.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 em 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 da Aplicação de Questionários
- Aplicação Vue.js 2 com recarregamento automático durante o desenvolvimento
- Questionários armazenados em `quiz-app/src/assets/translations/`
- Cada idioma tem a sua própria pasta de tradução (en, fr, es, etc.)
- A numeração dos questionários começa em 0 e vai até 39 (40 questionários no total)
### Adicionando Traduções
- Traduções vão para a pasta `translations/` na raiz do repositório
- Cada idioma tem uma estrutura completa de lições espelhada do inglês
- Tradução automatizada via GitHub Actions (co-op-translator.yml)
## Instruções de Teste
### Teste da Aplicação de Questionários
```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 ficheiros de dados estão acessíveis e se os resultados são gerados corretamente
- Confirme 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 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 de ficheiro único Vue (.vue files)
- Mantenha uma arquitetura baseada em componentes
- Execute `npm run lint` antes de submeter alterações
### Documentação em Markdown
- Use uma hierarquia clara de cabeçalhos (# ## ### etc.)
- Inclua blocos de código com especificadores de linguagem
- Adicione texto alternativo para imagens
- Ligue a lições e recursos relacionados
- Mantenha comprimentos de linha razoáveis para facilitar a leitura
### Organização de Ficheiros
- Conteúdo das lições em pastas numeradas (01-definindo-ciencia-de-dados, etc.)
- Soluções em subpastas dedicadas `solution/`
- Traduções espelham a estrutura em inglês na pasta `translations/`
- Mantenha os ficheiros de dados na pasta `data/` ou em pastas específicas das lições
## Construção e Implantação
### Implantação da Aplicação de Questionários
```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
A aplicação quiz-app pode ser implantada no Azure Static Web Apps:
1. Crie um recurso Azure Static Web App
2. Conecte ao repositório GitHub
3. Configure as definições de construção:
- Localização da aplicação: `quiz-app`
- Localização de saída: `dist`
4. O fluxo de trabalho do GitHub Actions fará a implantação automática ao fazer push
### 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
- O 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 Submeter
```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`
- `[Aplicação de Questionários] Adicionar tradução para alemão`
- `[Documentação] Atualizar README com novos pré-requisitos`
### Verificações Necessárias
- Certifique-se de que todo o código é executado sem erros
- Verifique se os notebooks são executados completamente
- Confirme que as aplicações Vue.js são construídas com sucesso
- Verifique se os links da documentação funcionam
- Teste a aplicação de questionários se modificada
- 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
- Consulte o ficheiro CONTRIBUTING.md
## Notas Adicionais
### Bibliotecas Comuns Utilizadas
- **pandas**: Manipulação e análise de dados
- **numpy**: Computação numérica
- **matplotlib**: Visualização e criação de gráficos
- **seaborn**: Visualização estatística de dados (algumas lições)
- **scikit-learn**: Aprendizagem de máquina (lições avançadas)
### Trabalhando com Ficheiros de Dados
- Ficheiros de dados localizados na pasta `data/` ou em diretórios específicos das lições
- A maioria dos notebooks espera ficheiros de dados em caminhos relativos
- Ficheiros 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
- Fluxo de trabalho de tradução em `.github/workflows/co-op-translator.yml`
- Traduções na pasta `translations/` com códigos de idioma
- Traduções de questionários 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 na nuvem
3. **Contêineres de Desenvolvimento do VS Code**: Desenvolvimento local baseado em contêineres
4. **Binder**: Inicie notebooks na nuvem (se configurado)
### Diretrizes de Conteúdo das Lições
- Cada lição é independente, mas constrói conceitos anteriores
- Questionários pré-lição testam conhecimentos prévios
- Questionários pós-lição reforçam o aprendizado
- Tarefas oferecem prática prática
- Sketchnotes fornecem resumos visuais
### Resolução de Problemas Comuns
**Problemas com o 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
- Confirme a compatibilidade da versão do Python (recomenda-se Python 3.7+)
- Certifique-se de que o ambiente virtual está ativado
**Docsify Não Carrega:**
- Verifique se está a servir a partir da raiz do repositório
- Confirme que o ficheiro `index.html` existe
- Certifique-se de que há acesso de rede adequado (porta 3000)
### Considerações de Desempenho
- Conjuntos de dados grandes podem demorar a 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
- As construções de produção são otimizadas e minificadas
### Notas de Segurança
- Não devem ser comprometidos dados sensíveis ou credenciais
- 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 correções de segurança
## Contribuindo com Traduções
- Traduções automatizadas geridas via GitHub Actions
- Correções manuais são bem-vindas para melhorar a precisão das traduções
- Siga a estrutura de pastas de tradução existente
- Atualize os links dos questionários 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 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 resultantes do uso desta tradução.

@ -0,0 +1,12 @@
# 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/)
- [FAQ do Código de Conduta da Microsoft](https://opensource.microsoft.com/codeofconduct/faq/)
- Contacte [opencode@microsoft.com](mailto:opencode@microsoft.com) para questões 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas resultantes do uso desta tradução.

@ -0,0 +1,360 @@
# Contribuir para Data Science para Principiantes
Obrigado pelo seu interesse em contribuir para o currículo de Data Science para Principiantes! Agradecemos as 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, consulte as [FAQ do Código de Conduta](https://opensource.microsoft.com/codeofconduct/faq/)
ou contacte [opencode@microsoft.com](mailto:opencode@microsoft.com) para quaisquer questões ou comentários adicionais.
## Como Posso Contribuir?
### Reportar Erros
Antes de criar relatórios de erros, verifique os problemas existentes para evitar duplicados. Ao criar um relatório de erro, 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 ecrã)
- **Descreva o comportamento observado e o que esperava**
- **Inclua os 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 esta melhoria seria útil**
- **Liste quaisquer funcionalidades semelhantes em outros projetos, se aplicável**
### Contribuir para a Documentação
Melhorias na documentação são sempre apreciadas:
- **Corrigir erros ortográficos e gramaticais**
- **Melhorar a clareza das explicações**
- **Adicionar documentação em falta**
- **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 erros**
- **Melhorias em notebooks existentes**
- **Novos conjuntos de dados ou exemplos**
- **Melhorias na aplicação de quizzes**
## Primeiros Passos
### Pré-requisitos
Antes de contribuir, certifique-se de que tem:
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 na aplicação de quizzes)
5. Familiaridade com a estrutura do currículo
Consulte [INSTALLATION.md](INSTALLATION.md) para instruções detalhadas de configuração.
### Fazer Fork e Clonar
1. **Faça fork do repositório** no GitHub
2. **Clone o seu fork** localmente:
```bash
git clone https://github.com/YOUR-USERNAME/Data-Science-For-Beginners.git
cd Data-Science-For-Beginners
```
3. **Adicione o upstream remoto**:
```bash
git remote add upstream https://github.com/microsoft/Data-Science-For-Beginners.git
```
### Criar uma Branch
Crie uma nova branch para o seu trabalho:
```bash
git checkout -b feature/your-feature-name
# or
git checkout -b fix/your-bug-fix
```
Convenções de nomenclatura de branches:
- `feature/` - Novas funcionalidades ou lições
- `fix/` - Correções de erros
- `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 estes elementos**:
- Objetivos de aprendizagem 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 aprendizagem
### Para Notebooks Jupyter
1. **Limpe todos os outputs** antes de fazer commit:
```bash
jupyter nbconvert --clear-output --inplace notebook.ipynb
```
2. **Inclua células 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 o notebook** completamente antes de submeter
### 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 na Aplicação de Quizzes
Ao modificar a aplicação de quizzes:
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 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 ficheiros 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 Submeter
1. **Atualize a sua branch** com as alterações mais recentes:
```bash
git fetch upstream
git rebase upstream/main
```
2. **Teste as suas alterações**:
- Execute todos os notebooks modificados
- Teste a aplicação de quizzes, se modificada
- Verifique se todos os links funcionam
- Revise erros ortográficos e gramaticais
3. **Faça commit das suas alterações**:
```bash
git add .
git commit -m "Brief description of changes"
```
Escreva mensagens de commit claras:
- Use o tempo presente ("Adicionar funcionalidade" em vez de "Adicionou funcionalidade")
- Use o 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. **Faça push para o seu fork**:
```bash
git push origin feature/your-feature-name
```
### Criar 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 o 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 quê**: Quais alterações foram feitas?
- **Porquê**: Por que estas alterações são necessárias?
- **Como**: Como implementou as alterações?
- **Testes**: Como testou as alterações?
- **Capturas de ecrã**: Inclua capturas de ecrã 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 irão rever** a sua contribuição
3. **Responda ao feedback** fazendo commits adicionais
4. Uma vez aprovado, um **mantenedor irá fazer merge** do seu PR
### Após o Merge do Seu PR
1. Apague a sua branch:
```bash
git branch -d feature/your-feature-name
git push origin --delete feature/your-feature-name
```
2. Atualize o 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: `![Texto alternativo](../../translated_images/pt-PT/image.4ee84a82b5e4c9e6651b13fd27dcf615e427ec584929f2cef7167aa99151a77a.png)`
- Mantenha comprimentos de linha 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 Vue.js 2
- Use a configuração ESLint fornecida
- Escreva componentes modulares e reutilizáveis
- Adicione comentários para lógica complexa
### Organização de Ficheiros
- Mantenha ficheiros relacionados juntos
- Use nomes de ficheiros descritivos
- Siga a estrutura de diretórios existente
- Não faça commit de ficheiros 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 requer que concorde com um Acordo de Licença de Contribuidor (CLA), declarando que tem o direito de, e realmente concede-nos os direitos para usar a sua contribuição. Para mais detalhes, visite
https://cla.microsoft.com.
Quando submeter um pull request, um CLA-bot determinará automaticamente se precisa fornecer um CLA e decorará o PR apropriadamente (ex.: etiqueta, comentário). Basta seguir as instruções fornecidas pelo bot. Só precisará fazer isto uma vez em todos os repositórios que utilizam o nosso CLA.
## Questões?
- Consulte o nosso [Canal Discord #data-science-for-beginners](https://aka.ms/ds4beginners/discord)
- Junte-se à nossa [comunidade Discord](https://aka.ms/ds4beginners/discord)
- Revise os [problemas](https://github.com/microsoft/Data-Science-For-Beginners/issues) e [pull requests](https://github.com/microsoft/Data-Science-For-Beginners/pulls) existentes
## Obrigado!
As suas contribuições tornam este currículo melhor para todos. Obrigado por dedicar o seu tempo a contribuir!
---
**Aviso**:
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.

@ -0,0 +1,252 @@
# Guia de Instalação
Este guia irá ajudá-lo a configurar o 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 a Instalação](../..)
## Pré-requisitos
Antes de começar, deve ter:
- Familiaridade básica com linha de comandos/terminal
- Uma conta GitHub (gratuita)
- Conexão estável à internet para a configuração inicial
## Opções de Início Rápido
### Opção 1: GitHub Codespaces (Recomendado para Iniciantes)
A forma mais fácil de começar é com o GitHub Codespaces, que fornece um ambiente de desenvolvimento completo no seu navegador.
1. Navegue até ao [repositório](https://github.com/microsoft/Data-Science-For-Beginners)
2. Clique no menu suspenso **Code**
3. Selecione o separador **Codespaces**
4. Clique em **Create codespace on main**
5. Aguarde enquanto o ambiente é inicializado (2-3 minutos)
O seu ambiente está agora 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 acompanhar as suas alterações.
**Windows:**
- Faça o download 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 faça o download 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
É necessário Python 3.7 ou superior para as lições de ciência de dados.
**Windows:**
1. Faça o download do 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 a Aplicação de Questionários)
A aplicação de questionários requer Node.js e npm.
**Windows/macOS:**
- Faça o download em [nodejs.org](https://nodejs.org/) (recomenda-se a versão LTS)
- 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 da Aplicação de Questionários
```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 a 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
```
O seu navegador deve abrir com a interface do Jupyter. Agora pode navegar até ao ficheiro `.ipynb` de qualquer lição.
### Testar a Aplicação de Questionários
```bash
# Navigate to quiz app
cd quiz-app
# Start development server
npm run serve
```
A aplicação de questionários deve estar disponível em `http://localhost:8080` (ou outro porto, caso o 8080 esteja ocupado).
### 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`.
## Usar Contêineres de Desenvolvimento do VS Code
Se tiver o Docker instalado, pode usar os Contêineres de Desenvolvimento 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 enquanto o contêiner é construído (apenas 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
## Obter Ajuda
Se 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 o 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 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,253 @@
# Ciência de Dados para Iniciantes - Um Currículo
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=344191198)
[![GitHub license](https://img.shields.io/github/license/microsoft/Data-Science-For-Beginners.svg)](https://github.com/microsoft/Data-Science-For-Beginners/blob/master/LICENSE)
[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/graphs/contributors/)
[![GitHub issues](https://img.shields.io/github/issues/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/issues/)
[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/Data-Science-For-Beginners.svg)](https://GitHub.com/microsoft/Data-Science-For-Beginners/pulls/)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/Data-Science-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/Data-Science-For-Beginners/watchers/)
[![GitHub forks](https://img.shields.io/github/forks/microsoft/Data-Science-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Data-Science-For-Beginners/network/)
[![GitHub stars](https://img.shields.io/github/stars/microsoft/Data-Science-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/Data-Science-For-Beginners/stargazers/)
[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG)
[![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum)
Os Azure Cloud Advocates da Microsoft têm o prazer de oferecer um currículo de 10 semanas e 20 lições totalmente dedicado à Ciência de Dados. Cada lição inclui questionários pré e pós-lição, instruções escritas para completar a lição, uma solução e um trabalho prático. A nossa pedagogia baseada em projetos permite que aprenda enquanto constrói, uma forma comprovada para que as novas competências 'fiquem'.
**Um enorme agradecimento 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/),** nomeadamente 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/)
|![Sketchnote by @sketchthedocs https://sketchthedocs.dev](../../translated_images/pt-PT/00-Title.8af36cd35da1ac55.webp)|
|:---:|
| Ciência de Dados para Iniciantes - _Sketchnote de [@nitya](https://twitter.com/nitya)_ |
### 🌐 Suporte Multilíngue
#### Suportado via GitHub Action (Automático e Sempre Atualizado)
<!-- CO-OP TRANSLATOR LANGUAGES TABLE START -->
[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](./README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md)
> **Prefere Clonar Localmente?**
> Este repositório inclui traduções para mais de 50 idiomas, o que aumenta significativamente o tamanho do download. Para clonar sem as traduções, use sparse checkout:
> ```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'
> ```
> Isto dá-lhe tudo o que precisa para completar o curso com um download muito mais rápido.
<!-- CO-OP TRANSLATOR LANGUAGES TABLE END -->
**Se desejar suportar línguas adicionais, estão listadas [aqui](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)**
#### Junte-se à Nossa Comunidade
[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG)
Temos uma série de aprender com IA a decorrer no Discord, saiba mais e junte-se a nós em [Série Learn with AI](https://aka.ms/learnwithai/discord) de 18 a 30 de setembro de 2025. Receberá dicas e truques para usar o GitHub Copilot para Ciência de Dados.
![Série Learn with AI](../../translated_images/pt-PT/1.2b28cdc6205e26fe.webp)
# É estudante?
Comece com os seguintes recursos:
- [Página Student Hub](https://docs.microsoft.com/en-gb/learn/student-hub?WT.mc_id=academic-77958-bethanycheum) Nesta página, encontrará recursos para iniciantes, pacotes para estudantes e até formas de obter um voucher de certificação grátis. Esta é uma página que deve guardar nos favoritos e consultar de vez em quando, pois alteramos 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, esta pode ser a sua porta de entrada para a Microsoft.
# Começar
## 📚 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
- **[Resoluçã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 para ensino e recursos para sala de aula
## 👨‍🎓 Para Estudantes
> **Iniciantes Completos**: Novo na ciência dos dados? Comece com os nossos [exemplos amigáveis para iniciantes](examples/README.md)! Estes exemplos simples e bem comentados ajudarão a entender o básico antes de se aprofundar no currículo completo.
> **[Estudantes](https://aka.ms/student-page)**: para usar este currículo por conta própria, faça um fork do repositório completo e execute os exercícios sozinho, começando por um questionário pré-aula. Depois leia a aula e complete o resto das atividades. Tente criar os projetos compreendendo as lições em vez de copiar o código solução; no entanto, esse código está disponível nas pastas /solutions em cada lição orientada a projetos. Outra ideia seria formar um grupo de estudo com amigos e passar pelo conteúdo juntos. Para estudo adicional, recomendamos [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/qprpajyoy3x0g7?WT.mc_id=academic-77958-bethanycheum).
**Início Rápido:**
1. Consulte o [Guia de Instalação](INSTALLATION.md) para configurar o seu ambiente
2. Revise o [Guia de Uso](USAGE.md) para aprender a trabalhar com o currículo
3. Comece pela Lição 1 e siga sequencialmente
4. Junte-se à nossa [comunidade Discord](https://aka.ms/ds4beginners/discord) para apoio
## 👩‍🏫 Para Professores
> **Professores**: incluímos [algumas sugestões](for-teachers.md) sobre como usar este currículo. Gostaríamos muito de receber o seu feedback [no nosso fórum de discussão](https://github.com/microsoft/Data-Science-For-Beginners/discussions)!
## Conheça a Equipa
[![Vídeo promocional](../../ds-for-beginners.gif)](https://youtu.be/8mzavjQSMM4 "Vídeo promocional")
**Gif por** [Mohit Jaisal](https://www.linkedin.com/in/mohitjaisal)
> 🎥 Clique na imagem acima para ver 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 é baseado em projetos e que inclui 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 maneiras de trabalhar com dados, visualização de dados, análise de dados, casos reais de uso da ciência de dados e muito 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 maior retenção. Este currículo foi projetado para ser flexível e divertido, podendo ser feito na totalidade ou apenas em partes. Os projetos começam pequenos e tornam-se progressivamente mais complexos ao longo do ciclo de 10 semanas.
> Encontre as nossas [Regras de Conduta](CODE_OF_CONDUCT.md), diretivas de [Contribuição](CONTRIBUTING.md), e de [Tradução](TRANSLATIONS.md). Agradecemos o seu feedback construtivo!
## Cada aula inclui:
- Sketchnote opcional
- Vídeo suplementar opcional
- Quiz de aquecimento pré-aula
- Aula escrita
- Para as aulas baseadas em projetos, guias passo a passo para construção do projeto
- Verificações de conhecimento
- Um desafio
- Leitura suplementar
- Trabalho para casa
- [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, num total de 40 quizzes com três perguntas cada. Eles estão ligados dentro das aulas, mas a aplicação de quizzes pode ser executada localmente ou implantada no Azure; siga as instruções na pasta `quiz-app`. Estão gradualmente a ser localizados.
## 🎓 Exemplos Amigáveis para Iniciantes
**É novo em Ciência de Dados?** Criámos um diretório especial de [exemplos](examples/README.md) com código simples e bem comentado para ajudar você a começar:
- 🌟 **Olá Mundo** - O 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 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)** 👈
## Aulas
|![ Sketchnote por @sketchthedocs https://sketchthedocs.dev](../../translated_images/pt-PT/00-Roadmap.4905d6567dff4753.webp)|
|:---:|
| Ciência de Dados Para Iniciantes: Roteiro - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
| Número da Aula | Tópico | Agrupamento da Aula | Objetivos de Aprendizagem | Aula Ligada | Autor |
| :-----------: | :----------------------------------------: | :--------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------: | :----: |
| 01 | Definição de Ciência de Dados | [Introdução](1-Introduction/README.md) | Aprenda os conceitos básicos por detrás da ciência de dados e como esta se relaciona com a inteligência artificial, aprendizagem automática e big data. | [aula](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. | [aula](1-Introduction/02-ethics/README.md) | [Nitya](https://twitter.com/nitya) |
| 03 | Definição de Dados | [Introdução](1-Introduction/README.md) | Como os dados são classificados e suas fontes comuns. | [aula](1-Introduction/03-defining-data/README.md) | [Jasmine](https://www.twitter.com/paladique) |
| 04 | Introdução a Estatísticas & Probabilidades | [Introdução](1-Introduction/README.md) | As técnicas matemáticas de probabilidade e estatística para compreender dados. | [aula](1-Introduction/04-stats-and-probability/README.md) [vídeo](https://youtu.be/Z5Zy85g4Yjw) | [Dmitry](http://soshnikov.com) |
| 05 | Trabalho com Dados Relacionais | [Trabalho com Dados](2-Working-With-Data/README.md) | Introdução aos dados relacionais e conhecimentos básicos sobre exploração e análise de dados relacionais com a Structured Query Language, também conhecida como SQL (pronúncia “see-quell”). | [aula](2-Working-With-Data/05-relational-databases/README.md) | [Christopher](https://www.twitter.com/geektrainer) | | |
| 06 | Trabalho com Dados NoSQL | [Trabalho com Dados](2-Working-With-Data/README.md) | Introdução aos dados não relacionais, seus vários tipos e o básico da exploração e análise de bases de dados de documentos. | [aula](2-Working-With-Data/06-non-relational/README.md) | [Jasmine](https://twitter.com/paladique)|
| 07 | Trabalho com Python | [Trabalho 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. Compreensão fundamental da programação em Python é recomendada. | [aula](2-Working-With-Data/07-python/README.md) [vídeo](https://youtu.be/dZjWOGbsN4Y) | [Dmitry](http://soshnikov.com) |
| 08 | Preparação de Dados | [Trabalho com Dados](2-Working-With-Data/README.md) | Tópicos sobre técnicas de dados para limpeza e transformação de dados para lidar com desafios de dados em falta, incorretos ou incompletos. | [aula](2-Working-With-Data/08-data-preparation/README.md) | [Jasmine](https://www.twitter.com/paladique) |
| 09 | Visualização de Quantidades | [Visualização de Dados](3-Data-Visualization/README.md) | Aprenda como usar Matplotlib para visualizar dados de aves 🦆 | [aula](3-Data-Visualization/09-visualization-quantities/README.md) | [Jen](https://twitter.com/jenlooper) |
| 10 | Visualização de Distribuições de Dados | [Visualização de Dados](3-Data-Visualization/README.md) | Visualização de observações e tendências dentro de um intervalo. | [aula](3-Data-Visualization/10-visualization-distributions/README.md) | [Jen](https://twitter.com/jenlooper) |
| 11 | Visualização de Proporções | [Visualização de Dados](3-Data-Visualization/README.md) | Visualização de percentagens discretas e agrupadas. | [aula](3-Data-Visualization/11-visualization-proportions/README.md) | [Jen](https://twitter.com/jenlooper) |
| 12 | Visualização de Relações | [Visualização de Dados](3-Data-Visualization/README.md) | Visualização de conexões e correlações entre conjuntos de dados e suas variáveis. | [aula](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 as suas visualizações valiosas para a resolução eficaz de problemas e obtenção de insights. | [aula](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 o seu primeiro passo de aquisição e extração de dados. | [aula](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-se em técnicas para analisar dados. | [aula](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-se em apresentar os insights dos dados de forma que facilite o entendimento por parte dos decisores. | [aula](4-Data-Science-Lifecycle/16-communication/README.md) | [Jalen](https://twitter.com/JalenMcG) | | |
| 17 | Ciência de Dados na Cloud | [Dados na Cloud](5-Data-Science-In-Cloud/README.md) | Esta série de aulas apresenta a ciência de dados na cloud e os seus benefícios. | [aula](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 Cloud | [Dados na Cloud](5-Data-Science-In-Cloud/README.md) | Treino de modelos usando ferramentas Low Code. |[aula](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 Cloud | [Dados na Cloud](5-Data-Science-In-Cloud/README.md) | Implantação de modelos com Azure Machine Learning Studio. | [aula](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 de ciência de dados no mundo real. | [aula](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 num Codespace:
1. Clique no menu suspenso Código e selecione a opção Abrir com Codespaces.
2. Selecione + Novo codespace na parte inferior do painel.
Para mais informações, consulte 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 num container usando a sua máquina local e o VSCode através da extensão VS Code Remote - Containers:
1. Se esta for a primeira vez que usa um container de desenvolvimento, certifique-se de que o seu sistema cumpre os pré-requisitos (por exemplo, ter o Docker instalado) em [a documentação para começar](https://code.visualstudio.com/docs/devcontainers/containers#_getting-started).
Para usar este repositório, pode abrir diretamente o repositório num volume Docker isolado:
**Nota**: Por baixo do capô, isto usará o comando Remote-Containers: **Clonar repositório num volume de container...** para clonar o código-fonte num volume Docker em vez do sistema de ficheiros local. [Volumes](https://docs.docker.com/storage/volumes/) são o mecanismo preferido para persistir dados dos containers.
Ou abra uma cópia clonada ou descarregada do repositório localmente:
- Clone este repositório no seu sistema de ficheiros local.
- Pressione F1 e selecione o comando **Remote-Containers: Open Folder in Container...**.
- Selecione a cópia clonada desta pasta, aguarde o início do container e experimente.
## Acesso Offline
Pode executar esta documentação offline usando [Docsify](https://docsify.js.org/#/). Faça fork deste repositório, [instale o Docsify](https://docsify.js.org/#/quickstart) na sua máquina local e, na pasta raiz deste repositório, digite `docsify serve`. O site será servido na porta 3000 no seu localhost: `localhost:3000`.
> Nota, notebooks não serão apresentados via Docsify, assim, quando precisar de executar um notebook, faça isso separadamente no VS Code a correr um kernel Python.
## Outros Currículos
A nossa equipa produz outros currículos! Veja:
<!-- CO-OP TRANSLATOR OTHER COURSES START -->
### LangChain
[![LangChain4j para Iniciantes](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners)
[![LangChain.js para Iniciantes](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
---
### Azure / Edge / MCP / Agentes
[![AZD para Iniciantes](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
[![Edge AI para Iniciantes](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
[![MCP para Iniciantes](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
[![Agentes de IA para Iniciantes](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Série de IA Generativa
[![IA Generativa para Iniciantes](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[![IA Generativa (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
[![IA Generativa (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
[![IA Generativa (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
### Aprendizagem Core
[![ML para Iniciantes](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[![Ciência de Dados para Iniciantes](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[![IA para Iniciantes](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[![Cibersegurança para Iniciantes](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
[![Desenvolvimento Web para Iniciantes](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
[![IoT para Iniciantes](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
[![Desenvolvimento XR para Iniciantes](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Série Copilot
[![Copilot para Programação em Par com IA](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
[![Copilot para C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
[![Aventura Copilot](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
<!-- CO-OP TRANSLATOR OTHER COURSES END -->
## Obter Ajuda
**Está a ter problemas?** Consulte o nosso [Guia de Resolução de Problemas](TROUBLESHOOTING.md) para soluções aos problemas comuns.
Se ficar preso ou tiver dúvidas sobre como construir aplicações de IA, junte-se a outros aprendizes e desenvolvedores experientes em discussões sobre MCP. É uma comunidade solidária onde as perguntas são bem-vindas e o conhecimento é partilhado livremente.
[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG)
Se tiver feedback sobre o produto ou encontrar erros enquanto desenvolve, visite:
[![Forum de Desenvolvedores Microsoft Foundry](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum)
---
<!-- 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, por favor tenha em atenção que traduções automáticas podem conter erros ou imprecisões. O documento original, no seu idioma nativo, deve ser considerado a fonte autorizada. Para informações críticas, recomenda-se a tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas resultantes do uso desta tradução.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->

@ -0,0 +1,40 @@
## Segurança
A Microsoft leva a segurança dos seus produtos e serviços de software muito a sério, incluindo todos os repositórios de código-fonte geridos através das 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 [as nossas organizações no GitHub](https://opensource.microsoft.com/).
Se acredita ter encontrado uma vulnerabilidade de segurança em qualquer repositório pertencente à Microsoft que se enquadre na [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, reporte-a conforme descrito abaixo.
## Relatar Problemas de Segurança
**Por favor, não reporte vulnerabilidades de segurança através de issues públicas no GitHub.**
Em vez disso, reporte-as ao Microsoft Security Response Center (MSRC) em [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report).
Se preferir submeter sem iniciar sessão, envie um email para [secure@microsoft.com](mailto:secure@microsoft.com). Se possível, encripte a sua mensagem com a nossa chave PGP; pode descarregá-la na [página da Chave PGP do Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc/pgp-key-msrc).
Deverá receber uma resposta no prazo de 24 horas. Se, por algum motivo, não receber, por favor envie um email de seguimento para garantir que recebemos a sua mensagem original. Informações adicionais podem ser encontradas em [microsoft.com/msrc](https://www.microsoft.com/msrc).
Inclua as informações solicitadas abaixo (na medida do possível) para nos ajudar a compreender melhor a natureza e o alcance do possível problema:
* Tipo de problema (por exemplo, buffer overflow, SQL injection, cross-site scripting, etc.)
* Caminhos completos dos ficheiros de código-fonte relacionados com a 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 atacante poderia explorar o problema
Estas informações ajudarão a priorizar o seu relatório mais rapidamente.
Se estiver a reportar para um programa de recompensas por bugs, relatórios mais completos podem contribuir para uma recompensa maior. Por favor, visite a nossa página do [Programa de Recompensas por Bugs da Microsoft](https://microsoft.com/msrc/bounty) para mais detalhes sobre os 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 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.

@ -0,0 +1,13 @@
# Suporte
## Como reportar problemas e obter ajuda
Este projeto utiliza o GitHub Issues para rastrear erros e pedidos de funcionalidades. Por favor, pesquise os problemas existentes antes de reportar novos problemas para evitar duplicados. Para novos problemas, reporte o seu erro ou pedido de funcionalidade como um novo Issue.
Para obter ajuda e esclarecer dúvidas sobre a utilização deste projeto, crie um Issue.
## Política de Suporte da Microsoft
O suporte para este repositório está 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo 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 resultantes do uso desta tradução.

@ -0,0 +1,618 @@
# Guia de Resolução de Problemas
Este guia fornece soluções para problemas comuns que pode encontrar ao trabalhar com o currículo de Data Science para Principiantes.
## Índice
- [Problemas com Python e Jupyter](../..)
- [Problemas com Pacotes e Dependências](../..)
- [Problemas com Jupyter Notebook](../..)
- [Problemas com a Aplicação de Questionários](../..)
- [Problemas com Git e GitHub](../..)
- [Problemas com a Documentação Docsify](../..)
- [Problemas com Dados e Ficheiros](../..)
- [Problemas de Desempenho](../..)
- [Obter 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 a partir de [python.org](https://www.python.org/)
2. Durante a instalação, selecione "Add Python to PATH"
3. Reinicie o terminal/linha de comandos
### Problemas na Ativação de Ambientes Virtuais
**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
```
**Verificar 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 a falhar"
**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 Guarda
**Problema:** "Notebook falhou ao carregar" ou erros ao guardar
**Solução:**
1. Verifique as permissões do ficheiro
```bash
# Make sure you have write permissions
ls -l notebook.ipynb
chmod 644 notebook.ipynb # If needed
```
2. Verifique se o ficheiro está corrompido
```bash
# Try opening in text editor to check JSON structure
# Copy content to new notebook if corrupted
```
3. Limpe a cache do Jupyter
```bash
jupyter notebook --clear-cache
```
### Célula Não Executa
**Problema:** Célula fica presa em "In [*]" ou demora muito tempo
**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 `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 a Aplicação de Questionários
### 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
```
### Aplicação de Questionários 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á Está 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
```
### Questionário Não Carrega ou Página em Branco
**Problema:** A aplicação de questionários carrega mas mostra uma página em branco
**Solução:**
1. Verifique erros na consola do navegador (F12)
2. Limpe a cache e os cookies do navegador
3. Experimente outro navegador
4. Certifique-se de que o JavaScript está ativado
5. Verifique se bloqueadores de anúncios estão a interferir
```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 a partir de [git-scm.com](https://git-scm.com/)
- Reinicie o terminal após a instalação
**macOS:**
> **Nota:** Se 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 ficheiros de imagem existem no repositório
3. Limpe a cache do navegador
4. Verifique se as extensões dos ficheiros correspondem (sensível a maiúsculas/minúsculas em alguns sistemas)
## Problemas com Dados e Ficheiros
### Erros de Ficheiro 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 ficheiros 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 ficheiros 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 Falha
**Problema:** Navegador falha ou torna-se não responsivo
**Solução:**
1. Feche separadores não utilizados
2. Limpe a cache do navegador
3. Aumente a memória do navegador (Chrome: `chrome://settings/system`)
4. Use JupyterLab em vez disso:
```bash
pip install jupyterlab
jupyter lab
```
## Obter Ajuda Adicional
### Antes de Pedir Ajuda
1. Consulte este guia de resoluçã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. Experimente pesquisar a mensagem de erro online
### Como Pedir Ajuda
Ao criar um problema ou pedir ajuda, inclua:
1. **Sistema Operativo**: 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 fez antes de ocorrer o erro
5. **O que Já Tentou**: Soluções que 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**: [Criar um problema](https://github.com/microsoft/Data-Science-For-Beginners/issues/new)
- **Discord**: [Junte-se à 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se uma tradução profissional humana. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas resultantes do uso desta tradução.

@ -0,0 +1,365 @@
# Guia de Utilização
Este guia fornece exemplos e fluxos de trabalho comuns para utilizar o currículo de Ciência de Dados para Iniciantes.
## Índice
- [Como Utilizar Este Currículo](../..)
- [Trabalhar com as Lições](../..)
- [Trabalhar com Jupyter Notebooks](../..)
- [Utilizar a Aplicação de Questionários](../..)
- [Fluxos de Trabalho Comuns](../..)
- [Dicas para Autoaprendizes](../..)
- [Dicas para Professores](../..)
## Como Utilizar Este Currículo
Este currículo foi concebido para ser flexível e pode ser utilizado de várias formas:
- **Aprendizagem autónoma**: Trabalhe nas lições de forma independente ao seu próprio ritmo
- **Instrução em sala de aula**: Utilize como um curso estruturado com orientação
- **Grupos de estudo**: Aprenda colaborativamente com colegas
- **Formato de workshop**: Sessões intensivas de aprendizagem de curto prazo
## Trabalhar com as Lições
Cada lição segue uma estrutura consistente para maximizar a aprendizagem:
### Estrutura da Lição
1. **Questionário pré-lição**: Teste os seus conhecimentos existentes
2. **Sketchnote** (Opcional): Resumo visual dos conceitos principais
3. **Vídeo** (Opcional): Conteúdo suplementar em vídeo
4. **Lição escrita**: Conceitos principais e explicações
5. **Jupyter Notebook**: Exercícios práticos de programação
6. **Tarefa**: Pratique o que aprendeu
7. **Questionário pós-lição**: Reforce a 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
```
## Trabalhar com Jupyter Notebooks
### Iniciar 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
```
### Executar 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: Trabalhar com Dados num 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()
```
### Guardar o Seu Trabalho
- O Jupyter guarda automaticamente periodicamente
- Guardar manualmente: Pressione `Ctrl + S` (ou `Cmd + S` no macOS)
- O seu progresso é guardado no ficheiro `.ipynb`
## Utilizar a Aplicação de Questionários
### Executar a Aplicação de Questionários Localmente
```bash
# Navigate to quiz app directory
cd quiz-app
# Start the development server
npm run serve
# Access at http://localhost:8080
```
### Realizar Questionários
1. Os questionários pré-lição estão ligados no início de cada lição
2. Os questionários pós-lição estão ligados no final de cada lição
3. Cada questionário tem 3 perguntas
4. Os questionários são concebidos para reforçar a aprendizagem, não para testar exaustivamente
### Numeração dos Questionários
- Os questionários estão numerados de 0 a 39 (40 questionários no total)
- Cada lição geralmente tem um questionário pré e pós
- Os URLs dos questionários incluem o número do questionário: `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: Aprendizagem Específica por Tópico
Se estiver interessado num 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: Aprendizagem Baseada 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 Autoaprendizes
### 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
### Envolva-se com a Comunidade
- Junte-se à [comunidade Discord](https://aka.ms/ds4beginners/discord)
- Participe no canal #Data-Science-for-Beginners no Discord [Discussões no Discord](https://aka.ms/ds4beginners/discord)
- Partilhe o seu progresso e faça perguntas
### Crie os Seus Próprios Projetos
Depois de completar 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 partilhado (GitHub Classroom ou Codespaces)
3. Estabeleça um canal de comunicação (Discord, Slack ou Teams)
### Planeamento de Lições
**Cronograma sugerido de 10 semanas:**
- **Semana 1-2**: Introdução (Lições 1-4)
- **Semana 3-4**: Trabalhar 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)
### Executar 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 verificar os exercícios concluídos
- Verifique a compreensão através dos resultados dos questionários
- Avalie os projetos finais utilizando os princípios do ciclo de vida da ciência de dados
### Criar 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
"""
```
## Trabalhar Offline
### Transferir 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 Aplicação de Questionários Localmente
```bash
cd quiz-app
npm run serve
```
## Aceder a 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
### Continuar a Aprender
- [Microsoft Learn](https://docs.microsoft.com/learn/) - Caminhos de aprendizagem 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)
## Obter 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 reportar problemas ou contribuir
---
**Aviso**:
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.

@ -0,0 +1,29 @@
- Introdução
- [Definir Ciência de Dados](../1-Introduction/01-defining-data-science/README.md)
- [Ética na Ciência de Dados](../1-Introduction/02-ethics/README.md)
- [Definir Dados](../1-Introduction/03-defining-data/README.md)
- [Probabilidade e Estatística](../1-Introduction/04-stats-and-probability/README.md)
- Trabalhar com Dados
- [Bases de Dados Relacionais](../2-Working-With-Data/05-relational-databases/README.md)
- [Bases 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
- [Visualizar Quantidades](../3-Data-Visualization/09-visualization-quantities/README.md)
- [Visualizar Distribuições](../3-Data-Visualization/10-visualization-distributions/README.md)
- [Visualizar Proporções](../3-Data-Visualization/11-visualization-proportions/README.md)
- [Visualizar 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 automáticas podem conter erros ou imprecisões. O documento original no seu idioma nativo deve ser considerado a fonte autoritativa. 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 resultantes 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-te a começar com ciência de dados, mesmo que sejas um completo principiante.
## 📚 O Que Vais Encontrar Aqui
Cada exemplo é autónomo e inclui:
- **Comentários claros** explicando cada passo
- **Código simples e legível** que demonstra um conceito de cada vez
- **Contexto do mundo real** para ajudar-te a entender quando e por que usar estas técnicas
- **Saída esperada** para saberes o que procurar
## 🚀 Começar
### Pré-requisitos
Antes de executares estes exemplos, certifica-te de que tens:
- Python 3.7 ou superior instalado
- Compreensão básica de como executar scripts em Python
### Instalar Bibliotecas Necessárias
```bash
pip install pandas numpy matplotlib
```
## 📖 Visão Geral dos Exemplos
### 1. Hello World - Estilo Ciência de Dados
**Ficheiro:** `01_hello_world_data_science.py`
O teu primeiro programa de ciência de dados! Aprende a:
- Carregar um conjunto de dados simples
- Exibir informações básicas sobre os teus dados
- Imprimir a tua primeira saída de ciência de dados
Perfeito para principiantes absolutos que querem ver o seu primeiro programa de ciência de dados em ação.
---
### 2. Carregar e Explorar Dados
**Ficheiro:** `02_loading_data.py`
Aprende os fundamentos de trabalhar com dados:
- Ler dados de ficheiros CSV
- Visualizar as primeiras linhas do teu conjunto de dados
- Obter estatísticas básicas sobre os teus dados
- Compreender os tipos de dados
Este é frequentemente o primeiro passo em qualquer projeto de ciência de dados!
---
### 3. Análise Simples de Dados
**Ficheiro:** `03_simple_analysis.py`
Realiza a tua 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
Descobre como responder a perguntas simples sobre os teus dados.
---
### 4. Noções Básicas de Visualização de Dados
**Ficheiro:** `04_basic_visualization.py`
Cria as tuas primeiras visualizações:
- Fazer um gráfico de barras simples
- Criar um gráfico de linhas
- Gerar um gráfico de pizza
- Guardar as tuas visualizações como imagens
Aprende a comunicar as tuas descobertas visualmente!
---
### 5. Trabalhar com Dados Reais
**Ficheiro:** `05_real_world_example.py`
Coloca tudo em prática com um exemplo completo:
- Carregar dados reais do repositório
- Limpar e preparar os dados
- Realizar análises
- Criar visualizações significativas
- Tirar conclusões
Este exemplo mostra-te um fluxo de trabalho completo do início ao fim.
---
## 🎯 Como Usar Estes Exemplos
1. **Começa pelo início**: Os exemplos estão numerados por ordem de dificuldade. Começa com `01_hello_world_data_science.py` e avança gradualmente.
2. **Lê os comentários**: Cada ficheiro tem comentários detalhados explicando o que o código faz e porquê. Lê-os com atenção!
3. **Experimenta**: Tenta modificar o código. O que acontece se mudares um valor? Faz alterações e corrige-as - é assim que se aprende!
4. **Executa o código**: Executa cada exemplo e observa a saída. Compara com o que esperavas.
5. **Constrói sobre isso**: Quando entenderes um exemplo, tenta expandi-lo com as tuas próprias ideias.
## 💡 Dicas para Iniciantes
- **Não tenhas pressa**: Dedica tempo para entender cada exemplo antes de passar para o próximo
- **Escreve o código tu mesmo**: Não copies e coles apenas. Escrever ajuda-te a aprender e a memorizar
- **Procura conceitos desconhecidos**: Se vires algo que não entendes, pesquisa online ou nas lições principais
- **Faz perguntas**: Junta-te ao [fórum de discussão](https://github.com/microsoft/Data-Science-For-Beginners/discussions) se precisares de ajuda
- **Pratica regularmente**: Tenta programar um pouco todos os dias em vez de sessões longas uma vez por semana
## 🔗 Próximos Passos
Depois de completares estes exemplos, estás pronto para:
- Trabalhar nas lições principais do currículo
- Experimentar os exercícios em cada pasta de lições
- Explorar os Jupyter notebooks para um aprendizado mais aprofundado
- Criar os teus 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) - Usar este currículo na tua sala de aula
- [Microsoft Learn](https://docs.microsoft.com/learn/) - Recursos de aprendizagem online gratuitos
- [Documentação do Python](https://docs.python.org/3/) - Referência oficial do Python
## 🤝 Contribuir
Encontraste um erro ou tens uma ideia para um novo exemplo? Aceitamos contribuições! Consulta o nosso [Guia de Contribuição](../CONTRIBUTING.md).
---
**Boa Aprendizagem! 🎉**
Lembra-te: Todo especialista já foi um principiante. Dá um passo de cada vez e não tenhas medo de cometer erros - eles fazem parte do processo de aprendizagem!
---
**Aviso**:
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,67 @@
## Para Educadores
Gostaria de usar este currículo na sua sala de aula? Sinta-se à vontade!
Na verdade, pode utilizá-lo diretamente no GitHub, recorrendo ao GitHub Classroom.
Para isso, faça um fork deste repositório. Vai precisar de criar um repositório para cada lição, extraindo cada pasta para um repositório separado. Desta forma, o [GitHub Classroom](https://classroom.github.com/classrooms) consegue identificar cada lição individualmente.
Estas [instruções completas](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) dão-lhe uma ideia de como configurar a sua sala de aula.
## Utilizar o repositório como está
Se preferir usar este repositório no seu formato atual, sem recorrer ao GitHub Classroom, também é possível. Nesse caso, terá de comunicar aos seus alunos qual a lição a seguir em conjunto.
Num formato online (Zoom, Teams ou outro), pode criar salas de grupo para os questionários e orientar os alunos para os preparar para aprender. Depois, convide os alunos a realizar os questionários e a submeter as suas respostas como 'issues' num momento específico. Pode fazer o mesmo com os trabalhos, caso deseje que os alunos colaborem de forma aberta.
Se preferir um formato mais privado, peça aos seus alunos para fazerem fork do currículo, lição por lição, para os seus próprios repositórios privados no GitHub, e conceder-lhe acesso. Assim, poderão completar os questionários e trabalhos de forma privada e submetê-los através de issues no repositório da sua sala de aula.
Existem várias formas de fazer isto funcionar num formato de sala de aula online. Por favor, diga-nos qual funciona melhor para si!
## Incluído neste currículo:
20 lições, 40 questionários e 20 trabalhos. As lições incluem sketchnotes para os alunos que aprendem melhor visualmente. Muitas lições estão disponíveis tanto em Python como em R e podem ser realizadas utilizando Jupyter notebooks no VS Code. Saiba mais sobre como configurar a sua sala de aula para usar esta stack tecnológica: https://code.visualstudio.com/docs/datascience/jupyter-notebooks.
Todos os sketchnotes, incluindo um poster em grande formato, estão disponíveis [nesta pasta](../../sketchnotes).
Também pode executar este currículo como um site autónomo e compatível offline, utilizando o [Docsify](https://docsify.js.org/#/). [Instale o Docsify](https://docsify.js.org/#/quickstart) na sua máquina local e, na pasta raiz da sua cópia local deste repositório, digite `docsify serve`. O site será servido na porta 3000 do seu localhost: `localhost:3000`.
Uma versão compatível offline do currículo será aberta como uma página web autónoma: https://localhost:3000
As lições estão organizadas em 6 partes:
- 1: Introdução
- 1: Definir Ciência de Dados
- 2: Ética
- 3: Definir Dados
- 4: Visão Geral de Probabilidade e Estatística
- 2: Trabalhar com Dados
- 5: Bases de Dados Relacionais
- 6: Bases 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 Cloud
- 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, partilhe a sua opinião!
Queremos que este currículo funcione para si e para os seus alunos. Por favor, dê-nos o 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 os 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 no seu idioma nativo deve ser considerado a fonte oficial. 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 resultantes do uso desta tradução.

@ -0,0 +1,128 @@
# Questionários
Estes 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
## Adicionar 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 grupos. Certifique-se de alinhar a numeração com a secção correta do questionário. Existem 40 questionários no total neste currículo, começando a contagem em 0.
Depois de editar as traduções, edite o ficheiro index.js na pasta de tradução para importar todos os ficheiros seguindo as convenções em `en`.
Edite o ficheiro `index.js` em `assets/translations` para importar os novos ficheiros traduzidos.
Depois, edite o menu suspenso em `App.vue` nesta aplicação para adicionar o seu idioma. Combine a abreviatura 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 esta localização como um parâmetro de consulta: `?loc=fr`, por exemplo.
## Configuração do projeto
```
npm install
```
### Compilar e recarregar automaticamente para desenvolvimento
```
npm run serve
```
### Compilar e minimizar para produção
```
npm run build
```
### Verificar e corrigir ficheiros
```
npm run lint
```
### Personalizar configuração
Consulte [Referência de Configuração](https://cli.vuejs.org/config/).
Créditos: Agradecimentos à versão original desta aplicação de questionários: https://github.com/arpan45/simple-quiz-vue
## Implementar no Azure
Aqui está um guia passo a passo para o ajudar a começar:
1. Faça um fork do repositório GitHub
Certifique-se de que o código da sua aplicação web estático está no seu repositório GitHub. Faça um fork deste repositório.
2. Crie uma Aplicação Web Estática no Azure
- Crie uma [conta Azure](http://azure.microsoft.com)
- Aceda ao [portal do Azure](https://portal.azure.com)
- Clique em “Criar um recurso” e procure por “Aplicação Web Estática”.
- Clique em “Criar”.
3. Configure a Aplicação Web Estática
- Básico:
- Subscrição: Selecione a sua subscrição Azure.
- Grupo de Recursos: Crie um novo grupo de recursos ou utilize um existente.
- Nome: Forneça um nome para a sua aplicação web estática.
- Região: Escolha a região mais próxima dos seus utilizadores.
- #### Detalhes de Implementação:
- Fonte: Selecione “GitHub”.
- Conta GitHub: Autorize o Azure a aceder à sua conta GitHub.
- Organização: Selecione a sua organização GitHub.
- Repositório: Escolha o repositório que contém a sua aplicação web estática.
- Ramo: Selecione o ramo a partir do qual deseja implementar.
- #### Detalhes de Construção:
- Predefinições de Construção: Escolha o framework com o qual a sua aplicação foi construída (por exemplo, React, Angular, Vue, etc.).
- Localização da Aplicação: Especifique a pasta que contém o código da sua aplicação (por exemplo, / se estiver na raiz).
- Localização da API: Se tiver uma API, especifique a sua localização (opcional).
- Localização de Saída: Especifique a pasta onde a saída da construção é gerada (por exemplo, build ou dist).
4. Rever e Criar
Revise as suas definições e clique em “Criar”. O Azure configurará os recursos necessários e criará um ficheiro de workflow do GitHub Actions no seu repositório.
5. Workflow do GitHub Actions
O Azure criará automaticamente um ficheiro de workflow do GitHub Actions no seu repositório (.github/workflows/azure-static-web-apps-<name>.yml). Este workflow irá gerir o processo de construção e implementação.
6. Monitorizar a Implementação
Aceda ao separador “Actions” no seu repositório GitHub.
Deverá ver um workflow em execução. Este workflow irá construir e implementar a sua aplicação web estática no Azure.
Assim que o workflow for concluído, a sua aplicação estará ativa no URL fornecido pelo Azure.
### Exemplo de Ficheiro de Workflow
Aqui está um exemplo de como pode ser o ficheiro de workflow do GitHub Actions:
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 Aplicações Web Estáticas do 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, tenha em atenção 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.

@ -0,0 +1,10 @@
Encontre todas as sketchnotes aqui!
## Créditos
Nitya Narasimhan, artista
![sketchnote do roadmap](../../../translated_images/pt-PT/00-Roadmap.4905d6567dff47532b9bfb8e0b8980fc6b0b1292eebb24181c1a9753b33bc0f5.png)
**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 no seu idioma nativo 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 resultantes do uso desta tradução.
Loading…
Cancel
Save