parent
a89e994767
commit
f90a519794
File diff suppressed because one or more lines are too long
@ -0,0 +1,259 @@
|
||||
# Introdução à Ética de Dados
|
||||
|
||||
| ](../../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.
|
||||
|
||||

|
||||
|
||||
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:
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||
| ](../../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,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.
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,20 @@
|
||||
# Introdução à Ciência de Dados
|
||||
|
||||

|
||||
> 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
|
||||
|
||||
| ](../../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,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
|
||||
|
||||
|  ](../../sketchnotes/07-WorkWithPython.png) |
|
||||
| :-------------------------------------------------------------------------------------------------------: |
|
||||
| Trabalhar com Python - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
[](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()
|
||||
```
|
||||

|
||||
|
||||
Agora suponha que, a cada semana, organizamos uma festa para amigos e levamos 10 pacotes adicionais de sorvete para a festa. Podemos criar outra série, indexada por semana, para demonstrar isso:
|
||||
```python
|
||||
additional_items = pd.Series(10,index=pd.date_range(start_date,end_date,freq="W"))
|
||||
```
|
||||
Quando somamos duas séries, obtemos o número total:
|
||||
```python
|
||||
total_items = items_sold.add(additional_items,fill_value=0)
|
||||
total_items.plot()
|
||||
```
|
||||

|
||||
|
||||
> **Nota** que não estamos usando a sintaxe simples `total_items+additional_items`. Se 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')
|
||||
```
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
> 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.
|
||||
|
||||

|
||||
|
||||
## 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
|
||||
|
||||
| ](../../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.
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,20 @@
|
||||
# Trabalhar com Dados
|
||||
|
||||

|
||||
> Foto por <a href="https://unsplash.com/@swimstaralex?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Alexander Sinn</a> no <a href="https://unsplash.com/s/photos/data?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a>
|
||||
|
||||
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
|
||||
|
||||
| ](../../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()
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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?
|
||||
|
||||

|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
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')
|
||||
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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!
|
||||
|
||||

|
||||
|
||||
## 🚀 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
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,209 @@
|
||||
# Visualizar Distribuições
|
||||
|
||||
| ](../../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()
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
✅ 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:
|
||||
|
||||

|
||||
|
||||
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();
|
||||
```
|
||||
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
✅ 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,
|
||||
)
|
||||
```
|
||||
|
||||

|
||||
|
||||
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")
|
||||
```
|
||||
|
||||

|
||||
|
||||
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
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,195 @@
|
||||
# Visualizar Proporções
|
||||
|
||||
| ](../../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!
|
||||
|
||||

|
||||
|
||||
## 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()
|
||||
```
|
||||
|
||||

|
||||
|
||||
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!
|
||||
|
||||

|
||||
|
||||
✅ 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
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,179 @@
|
||||
# Visualizar Relações: Tudo Sobre Mel 🍯
|
||||
|
||||
| ](../../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);
|
||||
```
|
||||

|
||||
|
||||
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);
|
||||
```
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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:
|
||||
|
||||

|
||||
|
||||
✅ 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);
|
||||
```
|
||||
|
||||

|
||||
|
||||
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:
|
||||
|
||||

|
||||
|
||||
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();
|
||||
```
|
||||

|
||||
|
||||
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
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,173 @@
|
||||
# Criando Visualizações Significativas
|
||||
|
||||
| ](../../sketchnotes/13-MeaningfulViz.png)|
|
||||
|:---:|
|
||||
| Visualizações Significativas - _Sketchnote por [@nitya](https://twitter.com/nitya)_ |
|
||||
|
||||
> "Se você torturar os dados por tempo suficiente, eles confessarão qualquer coisa" -- [Ronald Coase](https://en.wikiquote.org/wiki/Ronald_Coase)
|
||||
|
||||
Uma das habilidades básicas de um cientista de dados é a capacidade de criar uma visualização de dados significativa que ajude a responder às perguntas que você possa ter. Antes de visualizar 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!
|
||||
|
||||
[](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:
|
||||
|
||||

|
||||
|
||||
[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.
|
||||
|
||||

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

|
||||
|
||||
Este gráfico estranho mostra como a proporção pode ser manipulada, com efeito hilário:
|
||||
|
||||

|
||||
|
||||
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`.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
> "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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
File diff suppressed because one or more lines are too long
@ -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
|
||||
| ](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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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?
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
## 🚀 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
|
||||
|
||||
| ](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()
|
||||
```
|
||||

|
||||
|
||||
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')
|
||||
```
|
||||

|
||||
|
||||
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')
|
||||
```
|
||||
|
||||

|
||||
|
||||
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')
|
||||
```
|
||||
|
||||

|
||||
|
||||
✅ 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:
|
||||
|
||||

|
||||
|
||||
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"))
|
||||
```
|
||||
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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()
|
||||
```
|
||||

|
||||
|
||||
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)
|
||||
```
|
||||

|
||||
|
||||
✅ 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)
|
||||
```
|
||||

|
||||
|
||||
## 🚀 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
|
||||
|
||||
| ](../../../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!
|
||||
|
||||

|
||||
|
||||
## 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))
|
||||
```
|
||||
|
||||

|
||||
|
||||
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!
|
||||
|
||||

|
||||
|
||||
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 🍯
|
||||
|
||||
| ](../../../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")
|
||||
```
|
||||

|
||||
|
||||
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))
|
||||
```
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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:
|
||||
|
||||

|
||||
|
||||
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")
|
||||
```
|
||||
|
||||

|
||||
|
||||
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:
|
||||
|
||||

|
||||
|
||||
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)
|
||||
```
|
||||

|
||||
|
||||
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
|
||||
|
||||
| ](../../../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!
|
||||
|
||||
[](https://www.youtube.com/watch?v=oX74Nge8Wkw "Como os gráficos enganam")
|
||||
|
||||
> 🎥 Clique na imagem acima para assistir a uma palestra sobre gráficos enganosos
|
||||
|
||||
Este gráfico inverte o eixo X para mostrar o oposto da verdade, com base na data:
|
||||
|
||||

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

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

|
||||
|
||||
Este gráfico estranho mostra como a proporção pode ser manipulada, com efeito hilário:
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
## 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.
|
||||
|
||||

|
||||
|
||||
> "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.
|
||||
|
||||

|
||||
|
||||
## 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
|
||||
|
||||

|
||||
> 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
|
||||
|
||||
| ](../../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.
|
||||
|
||||

|
||||
> 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)|
|
||||
|--|--|
|
||||
| |  |
|
||||
| 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
|
||||
|
||||
| ](../../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,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
|
||||
|
||||

|
||||
> 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
|
||||
|
||||
| ](../../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,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"
|
||||
|
||||
| ](../../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.
|
||||
|
||||

|
||||
|
||||
### 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.
|
||||
|
||||

|
||||
|
||||
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.
|
||||

|
||||
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.
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||

|
||||
|
||||
> 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).
|
||||
|
||||

|
||||
|
||||
### 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
|
||||
|
||||
|  ](../../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.
|
||||
|
||||
 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
|
||||
|
||||
|  ](../../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
|
||||
|
||||
|  ](../../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
|
||||
|
||||
|  ](../../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.
|
||||
|
||||

|
||||
|
||||
`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: ``
|
||||
- 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
|
||||
|
||||
[](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=344191198)
|
||||
|
||||
[](https://github.com/microsoft/Data-Science-For-Beginners/blob/master/LICENSE)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/graphs/contributors/)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/issues/)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/pulls/)
|
||||
[](http://makeapullrequest.com)
|
||||
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/watchers/)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/network/)
|
||||
[](https://GitHub.com/microsoft/Data-Science-For-Beginners/stargazers/)
|
||||
|
||||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
[](https://aka.ms/foundry/forum)
|
||||
|
||||
Os Azure Cloud Advocates da Microsoft têm o prazer de oferecer um currículo de 10 semanas 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/)
|
||||
|
||||
||
|
||||
|:---:|
|
||||
| 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
|
||||
[](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.
|
||||
|
||||

|
||||
|
||||
# É 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
|
||||
|
||||
[](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
|
||||
|
||||
|
||||
||
|
||||
|:---:|
|
||||
| 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
|
||||
[](https://aka.ms/langchain4j-for-beginners)
|
||||
[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
|
||||
|
||||
---
|
||||
|
||||
### Azure / Edge / MCP / Agentes
|
||||
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Série de IA Generativa
|
||||
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
|
||||
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
|
||||
[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Aprendizagem Core
|
||||
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
|
||||
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst)
|
||||
|
||||
---
|
||||
|
||||
### Série Copilot
|
||||
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
|
||||
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
|
||||
<!-- CO-OP TRANSLATOR OTHER COURSES END -->
|
||||
|
||||
## 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.
|
||||
|
||||
[](https://discord.gg/nTYy5BXMWG)
|
||||
|
||||
Se tiver feedback sobre o produto ou encontrar erros enquanto desenvolve, visite:
|
||||
|
||||
[](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
|
||||
|
||||

|
||||
|
||||
**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…
Reference in new issue