RESUMO - TÓPICOS DE BIG DATA EM PYTHON
TEMA 2. PRINCÍPIOS DE BIG DATA
Introdução
📌 O que é Big Data?
Big Data não é apenas “grandes volumes de dados”.
É um conjunto de tecnologias capaz de lidar com:
o Grande volume de dados.
o Alta velocidade de geração.
o Diversidade de formatos e fontes.
📌 Por que o Big Data cresceu tanto?
A computação em nuvem tornou mais barato escalar sistemas.
A Internet das Coisas (IoT) aumentou muito a quantidade de dados gerados.
Empresas podem crescer sem comprar infraestrutura própria.
📌 Vantagens da computação em nuvem
Escalar hardware e software rapidamente.
Pagar apenas pelo que usa.
Não precisar manter servidores próprios.
Concentrar esforços no negócio principal.
📌 Conexão com outras tecnologias
Big Data trabalha junto com:
o Computação na nuvem
o Internet das Coisas (IoT)
o Inteligência Artificial (IA)
o Aprendizado de Máquina (Machine Learning)
Essas tecnologias se complementam: a IoT gera dados, a nuvem armazena e processa, o Big Data organiza e trata, e
a IA “aprende” com os dados.
🎯 RESUMO
Big Data é o conjunto de tecnologias que permite trabalhar com dados muito grandes, rápidos e variados. Ele
cresceu porque a nuvem barateou o processamento e a IoT aumentou a quantidade de dados gerados. Junto com
nuvem, IoT e IA, o Big Data forma um ecossistema moderno que sustenta aplicações inteligentes usadas hoje no
mundo todo.
📌 Como geramos dados na Internet
Busca na internet, compras online e vídeos geram dados que empresas usam para entender nossos
comportamentos e nos oferecer coisas que gostamos.
Exemplo simples:
Quando você pesquisa algo no Google, ele “aprende” o que você gosta e, por isso, te mostra anúncios relacionados
ao seu interesse.
📌 O que é Big Data?
Big Data é o processo de lidar com grandes volumes de dados, de diferentes fontes, de maneira eficiente,
para transformá-los em informações úteis.
Exemplo simples:
Se você tem um site de compras com milhões de visitantes, Big Data ajuda a organizar todos os dados, como o que as
pessoas compram, para melhorar as ofertas no futuro.
📌 Por que Big Data é importante?
Big Data é fundamental para descobrir padrões e oportunidades:
o Segmentação de mercado: Entender grupos de consumidores.
o Engajamento do público: Aumentar a interação com os consumidores.
o Descobrir valores ocultos: Encontrar insights não visíveis a princípio.
Exemplo simples:
Uma empresa de roupas usa Big Data para saber quais estilos estão em alta entre diferentes faixas etárias e lançar
novos produtos com base nisso.
📌 Desafios de Big Data
Volume e Disponibilidade: Lidar com o grande volume de dados e garantir que eles estejam disponíveis para
análise.
Técnicas adequadas: Muitas vezes os dados não são estruturados e exigem técnicas rápidas para análise.
Exemplo simples:
Comentários de clientes em redes sociais são dados não estruturados e precisam ser analisados com ferramentas
especiais para entender o que as pessoas estão dizendo sobre um produto.
📌 Investimentos e Implicações Legais
Empresas e governos estão investindo em Big Data para melhorar suas operações, mas também surgem
questões éticas sobre o uso de dados pessoais.
A Lei Geral de Proteção de Dados (LGPD) no Brasil regula como os dados devem ser usados para proteger a
privacidade dos cidadãos.
Exemplo simples:
Se um site vende seus dados sem permissão, ele pode estar violando a LGPD, que protege seus dados pessoais de
usos indevidos.
🎯 RESUMO
Big Data é a análise de grandes volumes de dados para entender comportamentos e descobrir oportunidades. Ele
envolve coleta, organização e análise de dados de diferentes fontes e tem grandes impactos em negócios, políticas
públicas e na nossa vida cotidiana, com foco na proteção de dados pessoais.
📌 O que é Big Data?
Big Data envolve grandes volumes de dados, mas também dados que não podem ser processados por
sistemas tradicionais, por causa da complexidade ou tempo de processamento.
Ele se tornou uma ferramenta para inovação, competição e produtividade.
Exemplo: Imagine uma rede social com milhões de postagens. Não é possível organizar tudo manualmente, então o
Big Data entra para ajudar a processar e analisar essas postagens rapidamente.
📌 Arquitetura de Big Data
A arquitetura de Big Data é composta por várias partes que trabalham juntas:
1. Data Lake: Um grande lago de dados onde tudo é armazenado, sem estrutura fixa.
2. Fontes de Dados: Coleta de dados de diferentes fontes como dispositivos IoT, sensores e sistemas na nuvem.
3. Armazenamento de Dados: Aqui, os dados precisam ser organizados de forma eficiente, acessível e segura.
Exemplo: Um exemplo prático seria uma empresa que coleta dados de sensores de suas máquinas e os armazena em
um data lake para que possam ser analisados em tempo real.
📌 Componentes da Arquitetura de Big Data
Aspectos que devem ser considerados em um projeto de Big Data:
1. Fontes de dados: Dados podem vir de diversas fontes, como sistemas de IoT e nuvem.
2. Armazenamento de dados: Os dados precisam ser armazenados de forma eficiente, com características
como segurança, escala e disponibilidade.
3. Processamento:
o Batch Processing: Processamento em lotes de dados grandes. Exemplo: Batch Processing seria
analisar todas as transações bancárias do mês no final do mês.
o Stream Processing: Processamento contínuo à medida que os dados são gerados (ex: dados de
sensores). Exemplo: Stream Processing seria monitorar a temperatura de um motor enquanto ele
está funcionando, para evitar falhas.
4. Armazenamento Analítico: Dados que serão analisados para Business Intelligence (BI), como dados de
mercado e clientes.
5. Análise e relatórios: Geração de relatórios para monitorar o desempenho dos negócios.
📌 KPIs (Indicadores de Desempenho)
São usados para medir a performance de processos em uma empresa. Existem 3 tipos:
o Estratégicos: Medem o desempenho geral de um negócio (ex: receita total).
o Táticos: Focam em áreas específicas (ex: vendas de um produto específico).
o Operacionais: Acompanham atividades detalhadas (ex: tempo de inatividade de uma máquina).
Exemplo: Um KPI estratégico pode ser o faturamento total de uma loja, enquanto um KPI operacional seria o tempo
que uma máquina ficou parada por falha.
📌 Os 5 Vs do Big Data
Big Data é definido por 5 características, conhecidas como os 5 Vs:
1. Volume: A quantidade de dados (ex: petabytes de dados de transações bancárias).
2. Velocidade: A rapidez com que os dados são gerados e processados (ex: transações por segundo).
3. Variedade: Tipos de dados (estruturados, não estruturados e semiestruturados).
o Dados Estruturados: São dados organizados em um formato fixo, fácil de ser processado e analisado.
Exemplo: Dados em tabelas de bancos de dados relacionais (como MySQL ou SQL Server), onde as
informações estão organizadas em linhas e colunas.
o Dados Não Estruturados: Dados que não têm uma estrutura definida e são mais difíceis de organizar
e processar. Exemplo: Imagens, vídeos, áudio, postagens em redes sociais, emails.
o Dados Semiestruturados: Dados que possuem uma estrutura flexível, não totalmente organizada,
mas com algum formato que facilita a análise. Exemplo: Arquivos JSON, XML, logs de servidores.
4. Veracidade: Qualidade e precisão dos dados (dados imprecisos podem levar a conclusões erradas).
5. Valor: A importância de extrair valor dos dados para os negócios. O objetivo de extrair insights e tomar
decisões baseadas nos dados.
Exemplo simples: Imagine uma empresa de transporte que coleta dados de velocidade de veículos (velocidade),
localização (dados estruturados), imagens das câmeras de segurança (não estruturados) e comentários dos
motoristas (semiestruturados). O Big Data ajuda a analisar tudo isso para melhorar as operações.
🎯 RESUMO
Big Data é uma tecnologia que lida com grandes volumes de dados de diversas fontes, processando-os de
maneira eficiente para gerar informações úteis para negócios.
Ele envolve arquitetura especializada, processamento rápido e análise para ajudar empresas a tomar
decisões com base em KPIs e características como volume, velocidade, variedade, veracidade e valor.
📌 Aplicações de Big Data em Diversos Setores
1. Saúde
o Big Data é usado para analisar dados e encontrar os melhores tratamentos para doenças, além de
monitorar a saúde de uma região.
o Isso ajuda a propor ações que melhoram a saúde das pessoas.
o Como funciona: Os dados sobre saúde, como históricos de pacientes, exames, e condições regionais,
são analisados para encontrar os melhores tratamentos e estratégias de saúde.
o Exemplo: Se um hospital tem dados sobre os tratamentos de uma doença, Big Data ajuda a
identificar qual tratamento tem maior sucesso em determinados grupos de pacientes.
2. Governo
o O governo utiliza Big Data para melhorar serviços públicos como educação e segurança.
o Ele também pode detectar fraudes e integrar dados de várias áreas para tomar decisões mais
precisas.
o Como funciona: O governo usa Big Data para integrar informações de diferentes áreas (saúde,
segurança, educação) e melhorar os serviços prestados aos cidadãos.
o Exemplo: Imagine uma cidade usando Big Data para entender onde ocorrem mais acidentes de
trânsito. Isso ajuda a melhorar a sinalização nas áreas mais críticas e reduzir acidentes.
3. Mídia e Entretenimento
o Big Data ajuda empresas a personalizar anúncios para os usuários na internet.
o Eles analisam os dados dos usuários para oferecer produtos e serviços que combina com o perfil de
cada um.
o Como funciona: Empresas de mídia analisam os dados dos usuários (o que assistem, quando
assistem, e por quanto tempo) para mostrar anúncios mais relevantes e oferecer serviços
personalizados.
o Exemplo: No YouTube, se você assiste a vídeos de culinária, o algoritmo sugere mais vídeos de
receitas porque ele usa os dados sobre seu perfil de interesse.
4. Internet das Coisas (IoT)
o Dispositivos IoT geram dados contínuos que são enviados para servidores.
o Esses dados são analisados para entender padrões e melhorar processos monitorados.
o Como funciona: Dispositivos IoT, como sensores de temperatura, enviam dados constantemente.
Esses dados são analisados para entender padrões e otimizar os processos.
o Exemplo: Um sensor em uma fábrica pode monitorar a temperatura de máquinas. Big Data analisa
esses dados para prever quando a máquina pode quebrar e assim evitar falhas.
Conceitos de IOT e Computação Distribuída
📌 Avanço da Tecnologia e Geração de Dados
A tecnologia criou sensores e dispositivos que geram muitos dados para diversas aplicações, como:
o Monitoramento da temperatura em câmaras frigoríficas.
o Segurança no transporte de cargas.
o Acompanhamento da poluição do ar.
o Avaliação da pressão arterial de pacientes.
📌 Internet das Coisas (IoT)
IoT é a tecnologia que conecta dispositivos e permite a troca de dados através da Internet.
A IoT expande a realidade física para além de limitações espaciais, permitindo que possamos monitorar
coisas à distância.
Exemplo: A IoT permite monitorar a saúde de um paciente em uma área rural onde não há médicos
presentes.
📌 Como os Dados de IoT se Relacionam com Big Data
Dados de diferentes fontes: Permitem verificar a veracidade e confiabilidade dos dados.
Dados em diferentes formatos: Sensores geram dados variados (ex: temperatura, pressão, etc.) que ajudam
a entender melhor o que está sendo monitorado.
Frequência de dados: A velocidade com que os dados são gerados e a necessidade de análise rápida para
tomar ações adequadas.
📌 Questões a Serem Consideradas sobre Dados de IoT
1. Velocidade: Quão rápido devemos consumir e analisar os dados para tomar decisões.
2. Volume de Dados: Qual a quantidade de dados devemos armazenar e tratar.
3. Valor dos Dados: Como determinar a prioridade dos dados fornecidos pelos dispositivos.
📌 Oportunidades e Desafios com IoT
Oportunidades: Melhorar processos, como saúde e trabalho, além de proporcionar um conhecimento mais
profundo de diferentes contextos.
Desafios éticos e legais: A coleta detalhada de dados pode invadir a privacidade, exigindo cuidados
especiais.
📌 Considerações Tecnológicas sobre IoT
Equipamentos: São distribuídos, possuem limitações de memória e processamento e são usados para
tarefas específicas.
Algoritmos Distribuídos: São usados para reconhecer dispositivos e transmitir dados de forma eficiente.
🎯 RESUMO FINAL
A Internet das Coisas (IoT) permite que dispositivos e sensores se conectem e troquem dados, criando
muitas oportunidades em áreas como saúde, segurança e meio ambiente.
Porém, ao mesmo tempo, traz desafios sobre privacidade, volume de dados e velocidade de processamento,
que precisam ser cuidadosamente gerenciados para aproveitar o máximo da tecnologia.
📌 IoT: Componentes Colaborativos
A tecnologia IoT (Internet das Coisas) é formada por 4 componentes principais:
1. Objetos Físicos (ou “coisas”): Dispositivos e sensores que coletam dados e realizam ações.
o Exemplo: Termostatos que controlam a temperatura de um ambiente.
2. Computação: Gerencia todo o ciclo de vida dos dados, desde a coleta até o processamento.
3. Protocolos de Comunicação: Permitem a troca de dados entre dispositivos IoT e outros sistemas via
Internet.
4. Serviços: Fornecem autenticação e gerenciamento dos dispositivos, além da infraestrutura necessária.
📌 Computação Distribuída para IoT
Computação distribuída é usada para gerenciar dispositivos IoT de forma eficiente e descentralizada,
mesmo com dispositivos geograficamente espalhados.
Ela permite que dados e responsabilidades sejam compartilhados, aumentando a eficiência e desempenho
do sistema.
Exemplo: Em uma fábrica com muitos sensores IoT (medindo temperatura, pressão, umidade), a computação
distribuída ajuda a processar os dados de forma eficiente em diferentes pontos da rede, sem sobrecarregar um único
servidor.
📌 Princípios da Computação Distribuída
1. Distribuição e Processamento: Armazenamento e processamento de dados são feitos de forma
descentralizada, otimizando a eficiência.
2. Transferência de Dados e Análises: Os nós da rede fazem pré-processamentos de dados, reduzindo custos
no processamento final.
3. Tolerância a Falhas: Caso algum nó da rede falhe, o sistema se reorganiza e continua funcionando.
4. Otimização de Recursos: Dispositivos IoT têm restrições de memória e processamento, por isso a
computação distribuída otimiza o uso de energia.
📌 Computação Distribuída e Big Data
No contexto de IoT e Big Data, é necessário coletar, armazenar, processar e analisar grandes volumes de
dados.
A computação distribuída é ideal para IoT, pois ela distribui o processamento para os nós da rede e facilita a
comunicação com os dispositivos.
📌 Camadas da Arquitetura de Computação Distribuída em IoT
1. Computação em Nuvem (Cloud Computing):
o Exemplo: Armazenamento de dados em servidores remotos da nuvem.
o Função: Processamento de Big Data, lógica de negócios, armazenamento de dados (data
warehousing).
2. Computação em Névoa (Fog Computing):
o Exemplo: Servidores mais próximos dos dispositivos IoT.
o Função: Processamento de Big Data localmente, análise e redução de dados, controle de respostas.
3. Computação de Borda (Edge Computing):
o Exemplo: Sensores e controladores que estão diretamente conectados aos dispositivos IoT.
o Função: Processamento em tempo real de grandes volumes de dados, visualização dos dados
diretamente da fonte.
📌 Sensores e Controladores
Sensores: Responsáveis por coletar dados, como temperatura, pressão, umidade.
Controladores: Dispositivos que executam ações com base nos dados, como ligar um ventilador quando a
temperatura atingir um valor específico.
Exemplo: Sistema de irrigação que usa sensores de umidade do solo para ativar os controladores de irrigação
quando necessário.
🎯 RESUMO FINAL
A computação distribuída e a IoT trabalham juntas para tornar as operações mais eficientes e
descentralizadas, distribuindo o processamento de dados entre vários dispositivos e camadas da
arquitetura.
Isso é essencial para lidar com o grande volume de dados gerado pelos dispositivos IoT e fornecer respostas
rápidas e precisas para ações automáticas.
📌 O que são Protocolos de Comunicação?
Os protocolos de comunicação permitem que os dispositivos em um sistema de IoT (Internet das Coisas) se
comuniquem entre si, seja com outros dispositivos, computadores ou servidores.
Esses protocolos garantem que os dados sejam trocados de maneira eficiente e segura.
📌 Principais Protocolos de Comunicação de IoT
1. HTTP (Hyper Text Transport Protocol)
o Protocolo baseado em TCP (Transmission Control Protocol).
o Usado principalmente para comunicação na Web, onde a confiabilidade e a ordenação das
mensagens são importantes.
o Função: Protocolo básico para a comunicação entre clientes (dispositivos que fazem requisições) e
servidores (dispositivos que respondem a essas requisições).
o Exemplo: Quando você acessa uma página da web:
O navegador (cliente) faz uma solicitação HTTP para o servidor (onde o site está
armazenado).
O servidor responde com os dados (como texto e imagens) que compõem a página.
2. MQTT (Message Queuing Telemetry Transport)
o Protocolo baseado em TCP.
o Usado para troca de mensagens entre dispositivos IoT, com confiabilidade garantida pela transmissão
TCP.
o Função: Usado para troca de mensagens entre dispositivos através de um broker (intermediário que
recebe e envia as mensagens).
o Exemplo: Um sensor de temperatura envia dados para um broker que, por sua vez, repassa a
informação para outros dispositivos que precisam da informação (ex: um ar-condicionado que ajusta
a temperatura).
o Vantagens: Protocolo eficiente para ambientes com recursos limitados e com baixa largura de
banda.
3. CoAP (Constrained Application Protocol)
o Protocolo baseado em UDP.
o Usado para aplicações de IoT em dispositivos com recursos limitados (como sensores e
controladores), que podem se beneficiar de uma comunicação sem a sobrecarga de TCP.
o Função: Protocolo semelhante ao HTTP, mas projetado para dispositivos de IoT com limitações de
recursos (como memória e processamento).
o Exemplo: Um sensor de umidade em uma fazenda que envia dados sobre a umidade do solo para
um servidor central.
o Vantagens: Usa UDP (um protocolo mais rápido e leve que o TCP), o que o torna ideal para
dispositivos com recursos limitados e comunicação rápida.
4. XMPP-IOT (Extensible Messaging and Presence Protocol for IoT)
o Protocolo baseado em TCP.
o Usado principalmente para trocas de mensagens instantâneas em sistemas IoT, utilizando a
confiabilidade e a ordenação do TCP.
o Função: Usado para mensagens instantâneas e presença de dispositivos em uma rede IoT.
o Exemplo: Um sistema de segurança inteligente que envia mensagens de alerta para os donos de
casa quando detecta movimento.
o Vantagens: Baseado em XML, é altamente flexível e pode expandir suas funcionalidades conforme
necessário. Funciona bem para comunicação em tempo real.
RESUMO
Os protocolos de comunicação são essenciais para permitir que dispositivos IoT troquem dados de maneira
eficiente e segura.
Cada protocolo, como HTTP, MQTT, CoAP e XMPP-IOT, tem suas próprias vantagens e é projetado para tipos
específicos de dispositivos e cenários de uso.
📌 O que são Plataformas para IoT?
Plataformas para IoT são sistemas que ajudam no desenvolvimento e integração de dispositivos e
tecnologias em Internet das Coisas (IoT).
Elas oferecem software e hardware que tornam mais fácil a conexão e interoperabilidade entre os
dispositivos.
Elas permitem que dispositivos se comuniquem entre si e com redes externas, além de serem fundamentais
para coletar e processar dados.
📌 Principais Plataformas para IoT
1. Arduino
o Função: Uma plataforma de código aberto que oferece hardware (placas de circuito) e software
(linguagem de programação) para criar projetos de IoT.
o Características:
Código aberto: Isso significa que qualquer pessoa pode modificar
e compartilhar seus projetos.
Comunidade ativa: Existe uma grande comunidade de
desenvolvedores que compartilham ideias e projetos online.
o Exemplo: Usar um Arduino para criar um termômetro que envia os dados de temperatura para um
aplicativo.
2. NODEMCU
o Função: Um kit eletrônico de código aberto baseado no microcontrolador ESP8266, ideal para
desenvolver aplicações conectadas à Internet.
o Características:
Fácil de usar: Ótimo para quem está começando a desenvolver dispositivos IoT.
Conexão com Wi-Fi: Permite que os dispositivos se conectem à
Internet facilmente.
o Exemplo: Usar o NODEMCU para monitorar a umidade do solo de uma
plantação e enviar os dados para a nuvem, de onde podem ser
acessados via smartphone.
3. Raspberry Pi
o Função: Uma computadora de placa única, com um sistema operacional Linux e muito usada para
ensino e projetos de IoT.
o Características:
GPIO (General Purpose Input/Output): Permite controlar
dispositivos externos como sensores e atuadores.
Versatilidade: Pode ser usado em várias aplicações IoT, como controle de automação
residencial ou monitoramento de energia.
o Exemplo: Usar o Raspberry Pi para controlar luzes em uma casa com base no horário ou em sensores
de movimento.
✅ CONCLUSÃO
Plataformas como Arduino, NODEMCU e Raspberry Pi são essenciais para quem deseja desenvolver e
implementar soluções de IoT de maneira fácil, com hardware e software integrados, permitindo que
dispositivos se conectem e interajam entre si.
Plataformas em Nuvem para Aplicações de Big Data
📌 1. O que é Computação em Nuvem
É o uso de serviços de computação (programas, armazenamento, servidores etc.) pela Internet, sob
demanda.
Reduz custos, pois você paga apenas pelo que usa.
Aumenta a confiabilidade, pois os sistemas ficam em estruturas profissionais e seguras.
Permite integrar e conectar diferentes tecnologias e dispositivos.
📌 2. Modelos de Serviços na Nuvem
🔹 SaaS — Software como Serviço
Você usa um software pronto, direto pela Internet.
Paga apenas pelo uso (licenças, número de usuários, recursos necessários).
O cliente não precisa instalar, atualizar ou fazer manutenção — isso é responsabilidade do fornecedor.
Exemplos: Gmail, Office 365, Google Drive.
🔹 PaaS — Plataforma como Serviço
Fornece ambiente de desenvolvimento na nuvem.
Inclui sistema operacional, ferramentas, bibliotecas, banco de dados.
Usado por desenvolvedores para criar e testar aplicativos.
🔹 IaaS — Infraestrutura como Serviço
Fornece infraestrutura básica como: máquinas virtuais, servidores, firewalls, rede e armazenamento.
Você monta sua própria estrutura de TI usando os recursos da nuvem
É como “alugar um datacenter” pela Internet.
🔹 DaaS — Desktop como Serviço
Oferece computadores virtuais acessados pela Internet.
Exemplo: O usuário acessa um desktop remoto de qualquer lugar, ou seja, funciona como um PC normal,
mas tudo está na nuvem.
Tipos de DaaS:
Persistente → as personalizações e arquivos ficam salvos sempre que o usuário acessa.
Não persistente → tudo é apagado ao sair; o desktop é “zerado”.
🔹 XaaS — Everything as a Service
É o termo geral que engloba qualquer coisa oferecida como serviço na nuvem.
Exemplos:
o SaaS, PaaS, IaaS
o CaaS (Comunicação como Serviço)
o MaaS (Monitoramento como Serviço)
o DRaaS (Recuperação de desastres)
o NaaS (Rede como Serviço)
📌 3. Tipos de Nuvem
🔹 Nuvem Pública
A infraestrutura é compartilhada com várias empresas.
Ideal para negócios com demandas variáveis.
Paga apenas o uso, sem investimento em hardware.
🔹 Nuvem Privada
Servidores exclusivos de uma empresa.
Oferece controle total e maior segurança.
Indicado para dados sensíveis (ex.: bancos, hospitais).
🔹 Nuvem Híbrida
Combina pública + privada.
Dados sigilosos → nuvem privada.
Processos comuns/variáveis → nuvem pública.
Útil para Big Data: dados não confidenciais podem ficar na nuvem pública para economizar
recursos e sigiloso em rede privada.
Plataformas de Big Data na Nuvem
1. O que é uma plataforma de Big Data na nuvem
É um conjunto de tecnologias de software + hardware oferecido pela Internet.
Permite gerenciar projetos de Big Data, incluindo:
o Desenvolvimento de programas
o Implantação (colocar no ar)
o Operação (manter funcionando)
o Controle da infraestrutura
O contratante não precisa cuidar de detalhes técnicos, pois o provedor de nuvem gerencia tudo.
Economiza tempo e dinheiro com manutenção, servidores e atualizações.
2. O que essas plataformas oferecem
a) Gestão de dados: Oferece servidores de banco de dados especializados para armazenar e organizar grandes
volumes de dados.
b) Análise de dados: Inclui ferramentas que permitem extrair informações dos dados:
o Relatórios
o Inteligência de negócios (BI)
o Dashboards
o Processamento de grandes volumes
c) Ferramentas de desenvolvimento
Disponibiliza ambientes prontos para criar aplicativos de análise.
Permitem integrar cálculos, análises e relatórios com outros sistemas da empresa.
d) Segurança e proteção de dados
Controla o acesso, permissões e proteção de dados
Políticas de segurança
Firewalls e criptografia
3. Por que é vantajoso?
Reduz a complexidade técnica.
Diminui custos com servidores físicos.
Permite focar no negócio, não na infraestrutura.
Facilita o trabalho de profissionais que lidam com grandes volumes de dados.
4. Quem usa essas plataformas
Engenheiros de dados: Cuidam de toda a preparação dos dados:
o Coleta
o Organização
o Limpeza
o Transformação
Deixam os dados prontos para análises.
Cientistas de dados: Usam os dados prontos para:
descobrir padrões,
gerar insights,
apoiar decisões estratégicas.
Dois tipos de atividades dos cientistas de dados
1. Análise exploratória e visualização
Estudam os dados por meio de técnicas estatísticas.
Criam gráficos, tabelas e relatórios para entender o comportamento dos dados.
2. Algoritmos de aprendizado de máquina
Aplicam modelos para descobrir padrões ocultos.
Ajudam empresas a:
o aumentar engajamento,
o prever comportamentos,
o melhorar vendas, etc.
🔹 1. O que é um Data Lake?
É um repositório central onde se armazenam grandes quantidades de dados:
o estruturados (organizados, tabelas);
o não estruturados (imagens, textos, vídeos).
Permite guardar dados sem precisar organizar primeiro.
Facilita análises e criação de painéis para decisões.
✅ 2. Por que o Data Lake é importante?
É essencial para Big Data, porque:
o guarda tudo em um único local;
o permite fazer vários tipos de análises;
o ajuda empresas a transformar dados em estratégias de negócio.
✅ 3. Principais plataformas de Big Data e seus Data Lakes
📌 Amazon AWS
Primeira a oferecer serviços de nuvem (2006).
Criou o EC2 (Elastic Cloud Compute), que fornece “computadores virtuais” para processamento.
Seu data lake é o Amazon S3 — muito usado por empresas.
📌 Microsoft Azure
Lançado em 2010.
Forte em segurança, governança e integração.
Possui o Azure Data Lake, ideal para dados complexos.
📌 Google Cloud Platform
Usa a mesma tecnologia que o Google usa no YouTube e na pesquisa Google.
Seu data lake é o Google Cloud Storage, feito para exabytes (quantidades gigantescas).
📌 Oracle Cloud
Focada em bancos de dados.
Oferece armazenamento flexível + análise de dados.
Forte em segurança, com criptografia em tempo real.
📌 IBM Cloud
Oferece diferentes tipos de armazenamento:
o objetos,
o blocos,
o arquivos.
Integra-se com a plataforma Watson (inteligência artificial e análises).
Quadro Comparativo das Plataformas de Big Data na Nuvem
Plataforma Serviço de Data Lake Pontos fortes Para que é mais indicada
Amazon AWS Amazon S3 - Pioneira em nuvem Empresas que precisam de flexibilidade e muitas
(lançamento 2006) - Alta escalabilidade opções de serviços
- EC2 para processamento
Microsoft Azure Azure Data Lake - Forte segurança e Organizações que já usam produtos Microsoft e
(lançamento 2010) governança querem integração total
- Integração com ferramentas
como Power BI
- Ótima para dados complexos
Google Cloud Google Cloud Storage - Mesma tecnologia do Empresas que processam volumes enormes de
Platform (GCP) YouTube e Google Search dados e precisam de velocidade
- Suporte a exabytes
- Alta performance
Oracle Cloud Oracle Cloud Storage / - Especialista em bancos de Quem precisa de segurança máxima e trabalha
serviços Oracle dados intensamente com bancos de dados
- Criptografia em tempo real
- Armazenamento flexível
IBM Cloud IBM Cloud Object Storage / - Várias opções de Negócios que querem usar IA (Watson) e precisam
opções de arquivo e bloco armazenamento escolher tipos de armazenamento específicos
- Integração com IBM Watson
(IA)
- Escalabilidade ajustável
🎯 Resumo do Comparativo (em frases curtas)
AWS: mais completa e versátil; serve para quase qualquer projeto.
Azure: melhor integração com o ecossistema Microsoft e ótima segurança.
Google Cloud: ideal para volumes gigantes de dados e alta performance.
Oracle Cloud: foco total em bancos de dados e segurança avançada.
IBM Cloud: bom para quem quer IA integrada (Watson) e variedade de armazenamento.
Processamento e Streaming de Dados
🔹 O que é streaming de dados?
É o processo de transmitir dados de forma contínua, sem interrupção.
Esses dados chegam em sequência, ordenados no tempo, formando um fluxo de dados.
🔹 O que é um fluxo de dados?
Conjunto de informações que chega em ordem cronológica.
Cada pedaço de informação representa um evento (algo que aconteceu).
🔹 Por que isso é importante?
Eventos mostram mudanças importantes em processos.
Empresas usam esse fluxo para:
o monitorar sistemas,
o evitar falhas,
o melhorar operações,
o tomar decisões.
✅ Processamento dos dados em tempo real ou não
🔹 Processamento ao longo de dias
Usado quando não é urgente.
Exemplo: usado na manutenção preditiva — analisar dados de equipamentos para prever defeitos.
🔹 Processamento em tempo real
Necessário quando há risco à vida, segurança ou patrimônio.
Exemplo: controlar equipamentos industriais perigosos.
✅ Exemplos típicos de fluxos de dados
Sensores em máquinas.
Arquivos de logs de navegadores.
Registros de transações financeiras.
Monitores pessoais de saúde.
Sistemas de segurança patrimonial.
✅ Por que o streaming cresceu tanto?
A Internet das Coisas (IoT) ampliou o número de sensores gerando dados.
IoT produz um fluxo enorme e contínuo de informações.
É comum que os dados sejam gerados por diversas fontes simultaneamente,
Esses dados precisam ser:
o processados em tempo real (para detectar problemas),
o ou armazenados para análises futuras.
Características e Desafios do Processamento de Fluxos de Dados
🔹 Por que o processamento de fluxos de dados é diferente?
Porque os dados chegam em tempo real, de fontes diversas e com formatos variados.
Precisam ser tratados de forma especial, diferente de dados históricos (que já estão armazenados).
✅ Características do Processamento de Fluxos de Dados
1. Sensibilidade ao Tempo
Cada dado vem com data e hora.
A utilidade do dado depende de quão rápido ele é analisado.
Exemplo: leitura anômala de sinais vitais precisa resposta imediata.
2. Continuidade
Os dados chegam sem parar, sempre que algum evento ocorre.
O sistema deve estar pronto para trabalhar a qualquer momento.
Exemplo: sensores industriais enviando dados 24h/por dia e 7 dias/semana.
3. Heterogeneidade
Os dados vêm de fontes diferentes, formatos diferentes e lugares diferentes.
Exemplos: combinar dados de câmeras, sensores e logs de aplicações.
4. Imperfeição
Dados podem:
o ser perdidos,
o chegar corrompidos,
o chegar fora de ordem.
O sistema precisa saber lidar com essas falhas.
Exemplo: pacotes de dados que chegam embaralhados por instabilidade de rede.
5. Volatilidade
Os dados existem no momento e desaparecem.
Se forem perdidos, não dá para “voltar no tempo” e reconstruir o estado exato.
Necessário usar redundância e estratégias de proteção.
Exemplo: leitura de estado de máquina perdida durante falha de transmissão.
✅ Desafios do Processamento de Fluxos de Dados
1. Escalabilidade: O sistema deve suportar picos de dados, aumentando capacidade automaticamente.
2. Ordenação
Os dados devem ser recebidos na ordem correta para fazer sentido.
Exemplo: vídeo ao vivo não pode ter quadros fora de sequência.
3. Consistência e Durabilidade
Mesmo sendo voláteis, alguns dados precisam ser guardados para análise futura.
O sistema deve garantir:
o originalidade,
o qualidade,
o integridade.
4. Tolerância a falhas
O sistema deve continuar funcionando mesmo com problemas.
Estratégias incluem:
o redundância,
o sistemas distribuídos,
o análises estatísticas para avaliar qualidade.
Conclusão curta
Processar fluxos exige soluções diferentes de dados históricos: rapidez, resistência a falhas, capacidade de
escalar e lidar com variedade e imperfeições.
Implementações robustas combinam monitoramento em tempo real, armazenamento confiável e
arquiteturas distribuídas.
Descoberta de conhecimento a partir de fluxo de dados
De onde vêm os dados?
Dados vêm de várias origens: vendas, estoque, pesquisas com clientes, sensores, logs, etc.
Como isso funciona no modelo tradicional?
Os dados são guardados em um data warehouse (grande repositório).
Depois, são processados em lote - batch (de tempos em tempos, como diariamente).
Funcionam bem quando não há pressa para agir.
Exemplo: relatórios mensais de vendas gerados a partir do data warehouse.
Batch vs Streaming — quando cada um é adequado
Processamento em lote (batch): bom quando não há urgência para agir.
Exemplo: fechamento contábil mensal.
Processamento de fluxo (streaming): necessário quando o tempo entre coleta e ação é crítico.
Exemplos típicos: fornecimento de água/energia, monitoramento de saúde, operação de equipamentos,
campanhas ao vivo para aumentar engajamento.
Por que usar streaming (vantagens)
Permite tomar decisões imediatas (alarme, ajuste, bloqueio).
Detecta falhas e comportamento anômalo na hora.
Suporta operações críticas onde atraso pode causar prejuízo ou risco à vida.
Aprendizado de máquina em fluxos de dados
Técnicas de Machine Learning ajudam a detectar padrões em grandes volumes de
dados.
São melhores quando têm muitos dados variados.
Alguns algoritmos funcionam muito bem com dados contínuos, ou seja,
incrementais (algoritmo incremental atualizam o modelo à medida que chegam
novos dados), por exemplo:
✔ k-vizinhos mais próximos (k-NN)
Aprende com novos dados rapidamente, comparando com os mais próximos.
✔ Naive Bayes (Bayes ingênuo)
Atualiza suas probabilidades conforme novos dados chegam.
➡ Esses algoritmos conseguem se adaptar automaticamente ao que muda no fluxo.
Modelos em streaming devem autoajustar (aprender o estado atual) e esquecer dados antigos que já não
são relevantes.
Fluxos de Dados em IoT
Em sistemas IoT, os dados são transitórios (chegam o tempo todo).
Podem ser salvos para análises futuras, mas precisam ser processados no momento.
A análise desses fluxos permite:
a) Identificar perfis — entender grupos de clientes ou comportamentos para personalizar ofertas.
Ex.: consumo de clientes, comportamento de usuários
➡ Ajuda a criar serviços mais personalizados e campanhas mais eficientes.
b) Estimar demanda — prever quanto recurso será necessário (pessoal, servidores, estoque).
Ex.: prever quando vai aumentar o uso de energia, água, transporte, etc.
➡ Permite dimensionar recursos (mais servidores, mais equipe, mais estoque).
c) Detectar falhas e comportamentos anormais — avisar imediatamente para intervenção.
Ex.: vibração estranha numa máquina, acesso suspeito num sistema
➡ Garante ação rápida, antes que o problema se torne grave.
✅ Resumo
O modelo tradicional (processamento em lote) é lento para situações que exigem ação rápida.
Em vários cenários reais (saúde, energia, máquinas, eventos), é necessário usar processamento em fluxo.
Técnicas de IA que aprendem de forma incremental são essenciais.
IoT gera dados contínuos e permite descobrir perfis, prever demanda e detectar problemas em tempo real.
TEMA 3. HADOOP E ARMAZENAMENTO DE DADOS
Introdução
📌 Onde o Big Data está presente
Presente em muitos setores: educação, comércio, governo, entretenimento etc.
Sempre que há muitos dados diferentes chegando rápido, é um problema de Big Data.
📌 O que é Big Data
Termo usado para descrever tecnologias capazes de lidar com muita informação, em diferentes formatos e
em alta velocidade.
Essas aplicações são caracterizadas pelos 5Vs.
📌 As 5 características fundamentais do Big Data (5Vs)
1. Volume: Representa a grande quantidade de dados produzidos. Ex.: aplicações que lidam com Petabytes (PB) —
1 PB = 1.024 Terabytes.
2. Variedade: Os dados vêm em formatos diferentes, como: Tabelas (estruturados), Arquivos de texto (semi-
estruturados) e JSON, imagens, vídeos, posts, etc (não estruturados). Essa diversidade exige ferramentas que
entendam vários tipos de dados.
3. Velocidade: Refere-se à rapidez com que os dados são gerados e precisam ser processados. Ex.: redes sociais
gerando milhares de posts por segundo.
4. Veracidade: Trata da qualidade e confiabilidade dos dados. É essencial garantir que os dados não tenham erros,
duplicações ou falhas.
5. Valor: É o benefício obtido ao analisar grandes volumes de dados. Ex.: encontrar padrões, prever
comportamentos, melhorar decisões.
📌 O desafio
Projetar, desenvolver e gerenciar sistemas que lidem com Volume + Variedade + Velocidade é difícil: requer
hardware, software e arquiteturas específicas.
📌 Por que Big Data cresce tanto
Expansão da computação em nuvem, que facilita armazenar e processar dados.
Avanço da Internet das Coisas (IoT), que gera milhões de novos dados por segundo.
📌 Como lidar com tanta complexidade
É necessário usar tecnologias específicas para gerenciar dados, máquinas e processos.
Uma das mais importantes é o framework Hadoop.
📌 O que é Hadoop?
Hadoop é um framework (conjunto de software) criado pela Apache.
Permite processar grandes conjuntos de dados de forma distribuída — ou seja, dividindo o trabalho entre
vários computadores (cluster).
Usa modelos de programação simples para quem desenvolve (por exemplo, MapReduce; hoje também se
usa com outras ferramentas do ecossistema).
📌 Por que o Hadoop surgiu/foi adotado
Primeiro usado por empresas de internet (muitas têm problemas naturais de Big Data).
Deu certo e foi expandido para outras áreas (varejo, saúde, finanças, pesquisas etc.).
🎯 Resumo
Big Data é complexo porque tem muitos dados, muitos formatos, alta velocidade e exige qualidade.
Para lidar com isso, usamos ferramentas específicas.
O Hadoop é uma das mais importantes, pois ajuda a armazenar, organizar e processar enormes volumes de
dados distribuídos em vários computadores.
Arquitetura Hadoop
1. O que é o Hadoop
É um framework de software livre criado pela Apache Foundation.
Usado para armazenar e processar grandes volumes de dados (Big Data).
Possui várias distribuições comerciais, como:
o Cloudera, Hortonworks, MapR, IBM, Microsoft Azure, AWS EMR.
Todas são baseadas na distribuição original da Apache.
2. Por que o Hadoop é importante
Funciona como um cluster com arquitetura mestre–escravo.
Permite processamento paralelo, ideal para Big Data.
Grandes empresas como Facebook, Google, Twitter e LinkedIn utilizam Hadoop porque lidam com:
o Dados estruturados (tabelas, planilhas),
o Semi-estruturados (XML, HTML, metadados),
o Não estruturados (e-mails, logs, textos).
Essas aplicações possuem os 5Vs do Big Data, favorecendo o uso do Hadoop.
3. Componentes principais da arquitetura Hadoop
MapReduce – modelo de programação paralela.
HDFS – sistema de arquivos distribuído.
YARN – gerenciador de recursos e tarefas.
Hadoop Common – utilitários de suporte usados por todos os módulos.
✅ 4. Como é a estrutura de um cluster Hadoop
Nó mestre (master):
o Job Tracker
o Task Tracker
o NameNode
o DataNode
Nós escravos (slaves):
o DataNode
o Task Tracker
O mestre coordena; os escravos armazenam dados e executam tarefas.
✅ 5. MapReduce — processamento paralelo
Fases do MapReduce: O funcionamento é dividido em duas etapas:
A) Fase de Map (mapeamento): Transforma os dados brutos em pares chave–valor.
Etapas internas:
Record Reader: Divide os dados e transforma em pares (chave = posição, valor = conteúdo).
Mapper: Função criada pelo programador para processar cada par.
Combiner (opcional): Reduz o volume de dados enviados ao redutor.
Partitioner: Decide para qual Reducer cada chave-valor vai.
B) Fase de Reduce (redução): Agrupa os pares por chave e produz o resultado final.
Etapas internas:
Shuffle (embaralhamento): Recebe os pares do Map, organiza e direciona por chave.
Sort (classificação): Ordena e agrupa as chaves iguais.
Reduce: Executa operações finais (soma, contagem, agregação etc.).
Write Output: Grava o resultado final em arquivo.
✅ 6. HDFS — sistema de arquivos distribuído
Função geral: Armazenar dados distribuídos em muitos computadores baratos, com:
Tolerância a falhas
Alta disponibilidade
Escalabilidade
Componentes principais:
NameNode (mestre)
o Guarda metadados (informações sobre os arquivos).
o Controla operações: criar, excluir, renomear, replicar.
Metadados
o Nome do arquivo
o Tamanho
o Localização dos blocos nos DataNodes
o Ajudam a encontrar o dado mais rapidamente.
DataNode (escravo)
o Armazena os blocos reais dos arquivos.
o Podem ser muitos, aumentando a capacidade total.
✅ 7. YARN — gerenciador de recursos e tarefas
Principais funções:
Agendamento de tarefas
o Divide uma grande tarefa em várias subtarefas menores.
o Distribui para os nós do cluster conforme prioridades.
Gerenciamento de recursos
o Controla o uso de CPU, memória, rede e disco.
o Cada máquina possui um processo chamado NodeManager, que:
Monitora recursos computacionais (monitorar o uso da CPU, memória e disco em cada máquina
do clauster)
Gerencia containers
Envia relatórios ao gerenciador central
Ideia fundamental: Separar:
Gerenciamento de recursos
Agendamento e monitoramento de tarefas
✅ 8. Hadoop Common — utilitários do Hadoop
Conjunto de bibliotecas e scripts que permitem o funcionamento do Hadoop.
Oferece:
o JARs, scripts de inicialização
o Códigos fonte
o Documentação
o Funções básicas usadas por HDFS, YARN e MapReduce
Assume que falhas em hardware são comuns e deve tratá-las automaticamente.
Tabela de Estudo Rápido — Componentes do Hadoop
Componente O que é Função principal Como funciona?
MapReduce Modelo de processamento Processar grandes volumes de dados 1. Map transforma dados brutos em pares
paralelo do Hadoop dividindo o trabalho chave–valor.
2. Reduce agrupa e resume esses pares (ex.:
somar, contar, ordenar).
HDFS Sistema de arquivos Armazenar dados em muitos - Divide arquivos em blocos.
distribuído computadores de forma segura - NameNode guarda os metadados.
- DataNodes armazenam os blocos reais.
- Oferece tolerância a falhas, alta
disponibilidade e escalabilidade
YARN Gerenciador de recursos e Distribuir e organizar o uso de CPU, - Divide tarefas grandes em menores, envia
tarefas memória e execução de tarefas para os nós e controla priorização.
- O NodeManager monitora e executa
containers.
Hadoop Common Bibliotecas e utilitários do Dar suporte e base para todo o - Fornece JARs, scripts e funções essenciais
Hadoop ecossistema usadas por HDFS, YARN e MapReduce.
- Lida com falhas comuns de hardware.
🎯 Resumo máximo
Hadoop é um framework de Big Data que usa clusters de computadores.
Sua arquitetura tem quatro módulos: MapReduce, HDFS, YARN e Hadoop Common.
Empresas usam Hadoop porque ele processa grandes volumes de dados em paralelo.
MapReduce divide o processamento em map e reduce.
HDFS armazena dados distribuídos com tolerância a falhas.
YARN gerencia recursos e organiza as tarefas do cluster.
Hadoop Common é o conjunto de bibliotecas, utilitários e scripts essenciais para o funcionamento do
Hadoop
Vantagens e Desvantagens do Hadoop
🔵 Vantagens do Hadoop
• Escalabilidade
o Projetado para lidar com grandes volumes de dados.
o Permite adicionar mais máquinas ao cluster sem grandes dificuldades.
• Redução de custos
o É software livre (Apache).
o Funciona em hardware comum, sem exigir servidores caros.
• Flexibilidade
o Aceita todos os tipos de dados: estruturados, semiestruturados e não estruturados.
o Facilita análises mais completas e diversas.
• Velocidade
o Usa MapReduce e HDFS, que permitem:
Processar em paralelo, acelerando tarefas complexas.
Armazenar rapidamente grandes volumes de informação.
• Tolerância a falhas
o Os dados são replicados entre vários nós.
o Se um computador falhar, outro assume automaticamente.
🔴 Desvantagens do Hadoop
• Problemas de segurança
o O sistema de segurança vem desativado por padrão.
o Exige configuração manual de segurança e criptografia.
• Vulnerabilidade intrínseca
o O Hadoop foi desenvolvido na linguagem de programação Java.
o Já houve casos de falhas como:
Escalonamento de privilégios,
Acesso indevido a senhas.
o Requer profissionais atualizados em segurança e arquitetura Hadoop.
• Ineficiente para pequenos volumes de dados
o Projetado para Big Data.
o Com poucos dados, torna-se lento e pesado em comparação a ferramentas mais simples.
• Estabilidade variável
o Evolui rapidamente e possui várias distribuições diferentes.
o Isso pode causar inconsistências, bugs ou problemas de compatibilidade.
o Necessita acompanhamento constante por profissionais especializados.
Tabela: Vantagens x Desvantagens do Hadoop
VANTAGENS DO HADOOP DESVANTAGENS DO HADOOP
Escalabilidade Cresce facilmente adicionando novos Preocupações de Segurança é complexa e o módulo vem
nós ao cluster. segurança desativado por padrão.
Redução de Software de uso livre. Funciona em Vulnerabilidade Feito em Java, sofre com falhas conhecidas e
custos hardware comum. intrínseca requer constante vigilância.
Flexibilidade Lida com dados estruturados e não Ineficiente para dados Foi criado para grandes volumes; ruim para
estruturados. pequenos datasets pequenos.
Alta velocidade HDFS e MapReduce aceleram o Problemas de Evolui rápido e possui muitas distribuições,
processamento distribuído. estabilidade podendo causar instabilidades.
Tolerância a Dados são replicados entre nós: se um — —
falhas falhar, outro assume.
Exemplo de MapReduce com Python (mrjob)
📌 1. Objetivo:
O objetivo é contar quantas vezes cada palavra aparece em um texto, usando MapReduce implementado em
Python com a biblioteca mrjob.
✅ 2. Etapas do Processo
✔ Instalação do Python e mrjob
Instalar Python e a IDE PyCharm.
No terminal, instalar o pacote:
pip install mrjob
O mrjob permite escrever o código MapReduce em um único arquivo Python, rodando localmente ou em
clusters Hadoop.
✅ 3. Código do Programa MapReduce
📌 Arquivo: [Link]
from [Link] import MRJob # Importa a classe MRJob, usada para criar jobs MapReduce em
Python
import re # Importa o módulo de expressões regulares
# Expressão regular que encontra palavras
palavra_regex = [Link](r"[\w']+") # Define padrão para capturar palavras (letras, números e
apóstrofos)
class QuantidadePalavras(MRJob): # Cria uma classe que herda de MRJob para contar
palavras
# Fase MAP
def mapper(self, _, linha): # Função que processa cada linha do texto
for p in palavra_regex.findall(linha): # Percorre todas as palavras encontradas
na linha
yield ([Link](), 1) # Emite: (palavra, 1)
# Fase REDUCE
def reducer(self, p, qtd): # Função que recebe cada palavra e a lista de contagens
yield (p, sum(qtd)) # Soma todos os valores 1 e retorna a quantidade total da
palavra
# Inicia o programa
if __name__ == '__main__': # Verifica se o arquivo está sendo executado
diretamente
[Link]() # Executa o job MapReduce
✅ 4. Explicação Simplificada do Código
📌 Importações
[Link]: permite criar um job MapReduce.
re: usada para detectar palavras usando expressões regulares.
📌 Regex
palavra_regex = [Link](r"[\w']+")
Encontra todas as palavras na linha.
Remove espaços.
Mantém letras, números e apóstrofos.
📌 Classe MapReduce
class QuantidadePalavras(MRJob):
Classe que herda funções do mrjob.
📌 Mapper
def mapper(self, _, linha):
for p in palavra_regex.findall(linha):
yield ([Link](), 1)
O que faz:
1. Recebe uma linha do texto.
2. Encontra palavras.
3. Converte para minúsculas.
4. Envia para o Hadoop pares: ("palavra", 1)
📌 Reducer
def reducer(self, p, qtd):
yield (p, sum(qtd))
O que faz:
Recebe todas os valores 1 de cada palavra.
Soma todos → número total de ocorrências da palavra.
📌 Execução
if __name__ == '__main__':
[Link]()
Inicia o processo MapReduce.
✅ 5. Arquivo de Entrada
📌 texto_exemplo.txt
Este texto tem palavras repetidas
mapreduce hadoop palavras
palavras palavra hadoop texto python
mrjob hadoop mapreduce hadoop mapreduce
✅ 6. Rodando o Programa
No terminal, executar:
python [Link] texto_exemplo.txt > [Link]
O arquivo [Link] será criado com o resultado.
✅ 7. Resultado Gerado ([Link])
'este' 1
'hadoop' 4
'mapreduce' 3
'mrjob' 1
'palavra' 1
'palavras' 3
'python' 1
'repetidas' 1
'tem' 1
'texto' 2
✔ Cada linha mostra: 'palavra' quantidade
📚 Resumo Final em Tópicos Essenciais
O exemplo usa mrjob para criar um MapReduce simples em Python.
Objetivo: contar palavras em um arquivo de texto.
Mapper: transforma cada palavra em um par (palavra, 1).
Reducer: soma os valores de cada palavra.
A entrada é um arquivo .txt com várias palavras.
A saída é outro arquivo contendo cada palavra + quantidade.
Execução é feita pelo terminal redirecionando a saída para um arquivo.
HDFS versus RDBMS:
🌐 1. Big Data no nosso cotidiano
Muitas atividades diárias geram enormes volumes de dados: redes sociais, compras, serviços digitais,
sensores etc.
Esses dados são muito volumosos, crescem rápido e vêm de diversas fontes e formatos.
🎯 2. Objetivo das aplicações de Big Data
Extrair valor dos dados.
Encontrar padrões, tendências e conhecimento.
Ajudar na tomada de decisões em empresas e serviços para gerar valor e insights..
🧩 3. Por que usar Hadoop?
É uma tecnologia criada para lidar com:
o grandes volumes de dados,
o diferentes formatos,
o processamento distribuído e paralelo.
Seus dois principais pilares:
o HDFS → Responsável por armazenar dados distribuídos.
o MapReduce → Responsável pelo processamento de dados em paralelo.
📁 4. Comparação HDFS x RDBMS
HDFS
o Armazena qualquer tipo de dado (estruturado ou não estruturado).
o Ideal para sistemas distribuídos.
o Exige cuidado especial com segurança.
RDBMS (bancos relacionais tradicionais)
o Aceitam apenas dados estruturados em tabelas.
o São mais seguros e estáveis, porém menos flexíveis para Big Data.
🔹 Por que migrar RDBMS para Hadoop?
Quando o volume de dados cresce muito ou os formatos ficam variados.
Hadoop oferece processamento massivo, escalabilidade e ferramentas próprias para Big Data.
🔧 5. Componentes do Ecossistema Hadoop
Principais ferramentas e funções:
HDFS – Sistema de arquivos distribuído.
YARN – Gerenciador de recursos e tarefas. Armazenamento e Processamento
MapReduce – Processamento paralelo por mapeamento e redução.
Spark – Processamento rápido em memória.
PIG / HIVE – Consultas e análises (tipo SQL). Consultas e Processamento Simplificado
Apache Drill – SQL para explorar dados no Hadoop.
HBase – Banco NoSQL distribuído. Bancos de Dados
Mahout, Spark MLlib – Machine learning. Aprendizado de Máquina
Zookeeper → Coordenação e controle do cluster.
Ambari → Monitoramento, instalação e manutenção do cluster. Gerenciamento e Coordenação
Oozie → Agendamento de fluxos de trabalho.
Flume → Importa dados de logs.
Sqoop → Importa/exporta dados entre RDBMS ↔ HDFS. Ingestão de Dados
Solr & Lucene → Motores de busca e indexação de dados. Busca e Indexação
🔄 6. Sqoop: Transferência de Dados entre RDBMS e HDFS
Qual o papel do Sqoop?
O Sqoop é uma ferramenta do Hadoop usada principalmente para transferir dados entre bancos de dados
relacionais (MySQL, Oracle, SQL Server etc.) e o Hadoop (HDFS, Hive, HBase).
Resumindo: É uma ferramenta específica para conectar RDBMS ↔ Hadoop (HDFS).
Ele pode:
Importar dados do banco relacional → HDFS.
Exportar dados do HDFS → banco relacional.
✔ Como funciona:
A) Importação: RDBMS → HDFS
1. O Sqoop divide a importação em subtarefas.
2. Cada subtarefa vira uma Map Task (tarefa de mapeamento).
3. Cada tarefa lê uma parte dos dados do banco.
4. Os dados são importados e armazenados dentro do Hadoop.
B) Exportação: HDFS → RDBMS
1. O Sqoop gera tarefas de mapeamento para ler blocos do HDFS.
2. Cada tarefa envia seus dados para o banco relacional.
3. Os dados são carregados no banco de destino.
🧪 7. Processo ETL (usado pelo Sqoop)
ETL é o processo de Extrair, Transformar e Carregar dados, usado para mover informações de uma ou várias
fontes para um destino final (como um data warehouse ou data lake), já organizadas e prontas para análise.
O Sqoop participa do processo de ETL, mas apenas como ferramenta de extração e carregamento, não
como responsável por todo o fluxo.
O processo ETL usado pelo Sqoop:
ETL
Sqoop realiza?
Etapa Significado O que acontece
E – Extract Extrair Dados são lidos do RDBMS ou do HDFS. ✔ Sim
T – Transform Transforma Os dados podem ser ajustados/formulados.
❌ Não
r
L – Load Carregar Dados são enviados ao destino (HDFS ou banco). ✔ Sim
Diferenças entre HDFS e RDBMS
1. O que é um RDBMS (Banco de Dados Relacional)
São sistemas que armazenam dados em tabelas relacionais (ex.: Oracle, SQL Server, MySQL, PostgreSQL).
Garantem regras de integridade entre tabelas.
Trabalham com transações seguindo as propriedades ACID:
o A – Atomicidade: a transação é indivisível (ou tudo acontece, ou nada acontece).
o C – Consistência: ao final da transação, os dados continuam corretos e seguindo as regras.
o I – Isolamento: uma transação não interfere na outra.
o D – Durabilidade: após concluída, a transação grava dados permanentemente.
Objetivo principal: armazenar, gerenciar e recuperar dados de forma rápida e confiável.
2. O que é o HDFS
É o sistema de arquivos distribuídos do Hadoop.
Feito para armazenar e processar grandes volumes de dados em vários computadores ao mesmo tempo.
Usado em ambientes de Big Data, que lidam com estruturas de dados diversas e muito grandes.
✔ 3. Comparação entre HDFS x RDBMS
CARACTERÍSTICAS HDFS (Hadoop Distributed File System) RDBMS (Banco de Dados Relacional)
Objetivo principal Processar e armazenar grandes volumes e variedade de Garantir transações rápidas, seguras e consistentes
dados distribuídos
Volume de dados Projetado para Petabytes – PB (muito maior). Trabalha bem com GB a TB
Taxa de transferência Leitura e escrita rápidas em grandes volumes (otimizado Leitura rápida, escrita lenta
para grandes volumes).
Variedade de dados Aceita dados estruturados, semiestruturados e não Aceita apenas dados estruturados e
estruturados semiestruturados
Tempo de resposta Melhor para grandes lotes (maior latência), mas mais Respostas rápidas para consultas pequenas
(latência) lento para consultas rápidas.
Escalabilidade Horizontal — adiciona mais máquinas ao cluster. Vertical — aumenta capacidade da mesma
máquina.
Processamento OLAP — analises complexas e pesadas, porém lentas. OLTP — transações rápidas e frequentes, mas mais
velozes
Modelo de dados OLAP → tabelas desnormalizadas (para análises). OLTP → tabelas normalizadas (conforme modelo
relacional).
Custo Software livre + hardware comum Muitas vezes exige licenças e hardware mais caro.
Instalação, Configuração e Teste do Hadoop
🔹 1. Etapas gerais de instalação
1. Verificar pré-requisitos
2. Baixar o Hadoop
3. Criar diretórios de dados
4. Configurar arquivos do Hadoop
5. Configurar variáveis de ambiente
6. Atualizar a pasta bin com o winutils
7. Testar o funcionamento do Hadoop
🔹 2. Pré-requisitos
Necessário ter o Java 8 instalado.
Variável de ambiente JAVA_HOME deve apontar para a pasta do Java.
✔️Comando para verificar instalação do Java:
java -version
🔹 3. Download e instalação do Hadoop
Baixar a versão do Hadoop no site do Apache (ex.: 2.10.1).
Descompactar e renomear a pasta para:
C:\hadoop
🔹 4. Criar diretórios de dados (HDFS local)
Criar dentro de C:\hadoop:
C:\hadoop\data
C:\hadoop\data\datanode
C:\hadoop\data\namenode
Essas pastas armazenam os dados do HDFS.
🔹 5. Configurar os arquivos do Hadoop
Local dos arquivos:
C:\hadoop\etc\hadoop
📝 [Link]: Lista de parâmetros para a configuração do MapReduce.
Adicionar:
<configuration>
<property>
<name>[Link]</name>
<value>yarn</value>
</property>
</configuration>
📝 [Link]: Contém a configuração que substitui os parâmetros padrões do núcleo (core) do Hadoop.
<configuration>
<property>
<name>[Link]</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
📝 [Link]: Contém a definição de configuração para processos do HDFS, além de especificar a replicação de
bloco padrão e a verificação de permissão no HDFS;
(Substitua os “PATH TO…” pelos caminhos criados)
<configuration>
<property>
<name>[Link]</name>
<value>1</value>
</property>
<property>
<name>[Link]</name>
<value>C:/hadoop/data/namenode</value>
</property>
<property>
<name>[Link]</name>
<value>C:/hadoop/data/datanode</value>
</property>
</configuration>
📝 [Link]: Descreve as opções de configuração do YARN;
<configuration>
<property>
<name>[Link]-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>[Link]</name>
<value>[Link]</value>
</property>
</configuration>
📝 [Link]: Armazena as configurações globais usadas pelos comandos do Hadoop.
Adicionar linha com o caminho do Java:
SET JAVA_HOME="C:\Progra~1\Java\jdk1.8.0_131"
🔹 6. Configurar variáveis de ambiente
Criar variável:
HADOOP_HOME = C:\hadoop\bin
Editar variável Path:
Adicionar ao final:
;%HADOOP_HOME%
Testar variáveis:
echo %JAVA_HOME%
echo %HADOOP_HOME%
🔹 7. Atualizar pasta bin com o winutils
Baixar winutils compatível com a versão do Hadoop.
Copiar todos os arquivos para:
C:\hadoop\bin
🧪 8. Testar funcionamento do Hadoop
✔️Passo 1 — Formatar o Namenode
(No CMD como Administrador)
hadoop namenode -format
✔️Passo 2 — Iniciar o Hadoop
[Link]
Daemons iniciados:
namenode
datanode
resourcemanager
nodemanager
✔️Passo 3 — Monitorar serviços
Acessar no navegador:
Serviço Endereço
Namenode [Link]
Resourcemanage [Link]
r
Datanode [Link]
🔧 Dicas caso dê erro
Apague o conteúdo das pastas:
o C:\hadoop\data\namenode
o C:\hadoop\data\datanode
Apague o conteúdo da pasta C:\tmp
Reconfira todos os arquivos de configuração.
Entendendo um Data Lake
🔹 1. Características do Big Data
As aplicações de Big Data são definidas pelos 5Vs:
Volume, Velocidade, Variedade, Veracidade e Valor.
Algumas abordagens modernas incluem mais "Vs", como:
o Variabilidade (mudanças nos dados)
o Visualização (apresentação dos dados)
O Big Data ainda está evoluindo, por isso surgem novas definições.
🔹 2. Necessidade de novas soluções
Devido ao grande volume e diversidade dos dados, são necessárias novas formas de armazenamento.
Uma dessas soluções modernas é o Data Lake.
🔹 3. O que é um Data Lake
“Lago de dados”: um local centralizado para armazenar grandes volumes de dados.
Os dados ficam no formato original, sem necessidade de pré-processamento.
Aceita todos os tipos:
o Estruturados (tabelas, planilhas)
o Semiestruturados (JSON, XML)
o Não estruturados (imagens, vídeos, textos)
🔹 4. Como os dados são armazenados
Os dados são salvos em object storage (objetos de armazenamento).
Cada objeto possui:
o Metadados (tags que descrevem o conteúdo)
o Um identificador único
Essa estrutura facilita buscas rápidas e análises eficientes.
🔹 5. Comparação: Data Lake x Data Warehouse
📦 Data Warehouse (DW)
Arquitetura hierárquica
Dados organizados em pastas e arquivos
Exige estruturação prévia (esquema definido)
🌊 Data Lake
Arquitetura plana baseada em objetos
Armazena dados como estão (raw data)
Mais flexível e escalável
🔹 6. Benefícios do Data Lake
✔️Escalabilidade: Fácil expansão: basta adicionar novos nós. Não precisa de hardware especial.
✔️Alta velocidade: Captura dados rapidamente e integra com dados históricos.
✔️Armazenamento eficiente: Usa object storage, permitindo guardar qualquer tipo de dado.
✔️Acesso ao dado original: Mantém o formato bruto (raw), ideal para análises exploratórias (OLAP).
✔️Acessibilidade: Outros sistemas e usuários podem acessar os dados por ferramentas de consulta.
Tabela Comparativa — Data Lake x Data Warehouse
CRITÉRIO DATA LAKE DATA WAREHOUSE (DW)
Objetivo principal Exploração, ciência de dados, machine learning, Relatórios empresariais, BI, análises
análises avançadas estruturadas
Ferramentas comuns Hadoop, Spark, S3, Azure Data Lake, Google Cloud Oracle, SQL Server, Teradata, Snowflake,
Storage BigQuery (modo DW)
Tipo de dados Todos os tipos: estruturados, semiestruturados e Apenas estruturados (tabelas definidas)
armazenados não estruturados
Forma de Object Storage (arquitetura plana) Arquitetura hierárquica (pastas, arquivos,
armazenamento esquemas)
Formato dos dados Raw data (dados brutos, no formato original) Dados limpos, tratados e organizados
Flexibilidade Muito alta Baixa a moderada
Processamento Schema-on-read (estrutura definida na hora da Schema-on-write (estrutura definida antes
leitura) de gravar)
Velocidade de ingestão Muito alta Mais lenta (exige transformação antes de
armazenar)
Custo de Geralmente mais baixo (hardware comum, fácil Geralmente mais alto (hardware especial e
armazenamento expansão) licenças)
Usuários típicos Cientistas de dados, analistas avançados Usuários de negócio, profissionais de BI
Escalabilidade Horizontal (adiciona novos nós facilmente) Vertical (depende de hardware mais potente)
Qualidade dos dados Pode variar (dados sem limpeza inicial) Dados com alta qualidade e consistência
Aspectos Essenciais do Data Lake
🔹 Camadas do Data Lake (o que cada uma faz)
1. Camada de Governança e Segurança
Controla quem pode ver e mexer nos dados.
Garante segurança, evitando acessos indevidos.
Usa mecanismos como: permissões, autenticação e perfis de usuário.
2. Camada de Metadados
Adiciona informações extras aos dados (ex.: origem, tipo, relevância).
Ajuda a organizar, buscar e entender os dados.
Funciona com qualquer tipo de dado: estruturado, semiestruturado ou não estruturado.
3. Camada de Gerenciamento do Ciclo de Vida
Define por quanto tempo cada dado deve ficar armazenado.
Remove ou arquiva dados antigos que perderam valor.
Mantém o Data Lake organizado e eficiente.
🔹 Níveis do Data Lake (como os dados fluem)
Os níveis representam o caminho que os dados percorrem dentro do Data Lake.
1. Nível de Admissão (Ingestão)
É a entrada dos dados no Data Lake.
Pode receber dados de:
o Lotes (batch) → dados que chegam de tempos em tempos.
o Microlotes (micro-batch) → pequenas porções de dados frequentes.
o Fluxo em tempo real (streaming) → dados chegando continuamente.
2. Nível de Gerenciamento
Organiza os dados que chegaram.
Aplica metadados e relacionamentos.
Facilita a localização e identificação dos dados.
3. Nível de Consumo
Onde os dados são usados por:
o análises,
o dashboards,
o machine learning,
o relatórios de negócios (BI).
É o ponto de entrega da informação.
✔️Resumo
O Data Lake é organizado em camadas (responsáveis por funções específicas) e níveis (representam o fluxo
sequencial dos dados).
As camadas lidam com segurança, metadados e ciclo de vida.
Os níveis lidam com como os dados entram, são organizados e finalmente consumidos.
Exemplo de Execução no Hadoop
🔹 Objetivo do exemplo
Demonstrar, passo a passo, como:
iniciar o Hadoop,
criar diretórios e mover arquivos no HDFS,
executar uma aplicação MapReduce,
visualizar os resultados,
e encerrar o sistema.
🔹 Passo a passo:
✅ 1. Iniciar o Hadoop
Antes de tudo, abra o prompt dentro da pasta sbin do Hadoop.
Comandos usados:
hadoop namenode -format
[Link]
Formatar o NameNode → prepara o HDFS para uso (feito apenas na primeira vez).
[Link] → inicia os 4 daemons: namenode, datanode, resourcemanager e nodemanager.
As janelas não devem ser fechadas.
✅ 2. Criar diretório no HDFS
Criamos um diretório onde serão armazenados os arquivos.
Comando:
hadoop fs -mkdir /dir_entrada
✅ 3. Copiar arquivo para o HDFS
Criamos um arquivo local “texto_exemplo.txt” e enviamos para o Hadoop.
Conteúdo do arquivo:
Este texto tem palavras repetidas,
como as palavras texto e muitas, por exemplo.
Dessa forma, o processamento do texto nos ajuda
a entender o pacote mrjob do python.
Comando:
hadoop fs -put C:/texto_exemplo.txt /dir_entrada
✅ 4. Verificar se o arquivo foi copiado
Lista o conteúdo do diretório no HDFS.
Comando:
hadoop fs -ls /dir_entrada
✅ 5. Visualizar o conteúdo do arquivo no HDFS
Usamos o cat para mostrar o arquivo direto do Hadoop.
Comando:
hadoop dfs -cat /dir_entrada/texto_exemplo.txt
✅ 6. Executar uma aplicação MapReduce
Neste exemplo usamos o wordcount, que conta palavras em um arquivo.
📌 Antes, copie o arquivo JAR de exemplo para **C:**:
Arquivo: [Link]
Local original: C:\hadoop\share\hadoop\mapreduce
Comando para rodar o MapReduce:
hadoop jar C:/[Link] wordcount /dir_entrada
/dir_saida
Isso gera uma saída com a contagem de cada palavra.
✅ 7. Verificar o conteúdo do arquivo de saída
Visualizamos o resultado do processamento.
Comando:
hadoop dfs -cat /dir_saida/*
📌 Exemplo de saída:
processamento 1
texto 3
palavras 2
...
✅ 8. Encerrar e limpar o ambiente
Sair do modo de segurança do Hadoop:
hadoop dfsadmin -safemode leave
Excluir o arquivo:
hadoop fs -rm -r /dir_entrada/texto_exemplo.txt
Excluir o diretório:
hadoop fs -rm -r /dir_entrada
📌 Resumo Final (em poucas linhas)
O exemplo guia o usuário por todas as etapas: iniciar o Hadoop, criar diretórios no HDFS, enviar arquivos,
executar MapReduce e visualizar resultados.
Os comandos utilizados seguem a lógica do HDFS (mkdir, put, ls, cat) e do MapReduce (hadoop jar).
Ao final, também mostra como excluir arquivos e diretórios e encerrar o processo com segurança.
Dicas e Exemplo Extra do Hadoop
📌 1. Dicas importantes para usar o Hadoop
Essas recomendações ajudam a evitar erros comuns ao rodar exemplos no Hadoop.
✔ Antes de iniciar qualquer execução:
Verifique as versões do Hadoop e do Java instaladas.
Confira se as variáveis de ambiente estão corretas:
o JAVA_HOME
o HADOOP_HOME
Certifique-se de que os diretórios estejam vazios (apenas se você não precisa dos dados):
o datanode
o namenode
o tmp (na raiz)
Os arquivos .jar de exemplos MapReduce geralmente ficam em:
o C:\hadoop\share\hadoop\mapreduce
Sempre execute estes comandos antes de iniciar um novo exemplo:
📌 Comandos usados
hadoop namenode -format
[Link]
⚠ Dica final
Se algo der errado, revise cada arquivo de configuração com calma.
Hadoop exige atenção, pois muitos serviços rodam simultaneamente.
✅ 2. Exemplo Extra – Executando outro programa MapReduce
Após iniciar o Hadoop, execute mais um exemplo usando o arquivo .jar.
✔ Passo a passo
1️⃣ Copiar o arquivo .jar para outro diretório
Copie o arquivo para:
C:/teste
2️⃣ Executar o programa MapReduce
Use no prompt:
hadoop jar C:/teste/[Link]
Esse arquivo contém vários programas MapReduce, como:
aggregatewordcount – conta palavras usando agregação
aggregatewordhist – cria histograma das palavras
dbcount – faz contagens em um banco de dados
grep – busca padrões usando regex
join – faz junção entre arquivos
multifilewc – conta palavras de vários arquivos
randomtextwriter – gera texto aleatório
sudoku – resolve sudoku
wordmean – calcula média do tamanho das palavras
wordmedian – calcula mediana
wordstandarddeviation – calcula desvio padrão
wordcount – conta palavras
✅ 3. Executando o exemplo com wordmean
📌 Comando usado
hadoop jar C:/teste/[Link] wordmean
/dir_entrada/texto_exemplo.txt /dir_saida2
Esse comando:
Lê o arquivo texto_exemplo.txt
Processa com o programa wordmean
Salva o resultado na pasta /dir_saida2
✅ 4. Verificando a saída do processamento
📌 Comando:
hadoop dfs -cat /dir_saida2/*
📌 Saída esperada:
count 28
length 138
Isso significa:
O arquivo tem 28 palavras
A soma dos comprimentos de todas elas é 138 caracteres
✅ 5. Excluindo o diretório depois (opcional)
📌 Comando
hadoop fs -rm -r /dir_entrada
TEMA 4. PRINCÍPIOS DE DESENVOLVIMENTO DE SPARK COM PYTHON
Conceitos do framework Apache Spark
1. Contexto e origem
A evolução do Big Data exigiu ferramentas capazes de processar grandes volumes de dados de forma
distribuída e tolerante a falhas.
O Hadoop foi o primeiro framework de grande sucesso, mas passou a ter limitações com o aumento das
demandas.
O Apache Spark surgiu como a próxima grande solução, oferecendo desempenho superior.
Criado em 2009 na Universidade de Berkeley.
Tornou-se código aberto em 2010 e passou para a Apache Foundation em 2013.
Em 2014, foi promovido a projeto de alta relevância dentro da Apache.
2. O que é o Apache Spark
Framework open source de computação distribuída.
Usado para aplicações de Big Data em geral (aplicações de Internet das Coisas, Redes Sociais, etc) .
Muito mais rápido que o Hadoop devido ao uso de:
o Cache em memória (RAM)
o Algoritmos otimizados de processamento
Oferece APIs na seguintes linguagens: Scala, Python, Java, R.
3. Funcionalidades do Spark
Suporte a diversas áreas:
o Machine Learning
o SQL
o Análise de grafos
o Processamento de streams (Spark Streaming)
4. Objetivo principal
Processar grandes volumes de dados gerados em tempo real (streaming).
Trabalhar em clusters de computadores, inspirado no modelo MapReduce do Hadoop.
Usa uma estratégia de memória chamada clustering para alcançar maior eficiência.
5. Problemas do Hadoop que o Spark resolveu
Os desenvolvedores buscavam:
Mais velocidade nas consultas.
Melhor processamento em memória.
Maior tolerância a falhas.
6. Benefícios do Apache Spark
Velocidade: Muito rápido em processamento de dados em lote e em fluxo.
Facilidade de uso
o APIs simples para várias linguagens.
o Compatível com ferramentas como Hive, Pig, Sqoop e HBase.
Bibliotecas variadas: SQL, machine learning, grafos, streaming.
Custo de licença: É gratuito, assim como o Hadoop.
Desafio principal:
Sua configuração não é simples.
Para configurar o Spark corretamente, é necessário:
o Conhecimento profundo da plataforma,
o Entendimento detalhado da aplicação,
o Ajuste cuidadoso de diversos parâmetros de desempenho.
7. Custos de infraestrutura
Spark é grátis, mas exige hardware mais caro:
o Depende de muita memória RAM.
Hadoop depende mais de discos rápidos, que são mais baratos que grandes quantidades de RAM.
Por isso, Spark tende a custar mais para funcionar, mesmo sendo gratuito.
Aplicações do Apache Spark
1. Cenários adequados para usar o Spark
Integração de dados (ETL)
o Útil para extrair, transformar e carregar dados de forma rápida.
o Ideal quando os dados brutos são inconsistentes e precisam ser limpos.
o Reduz tempo e custo de processos ETL.
Processamento de fluxo (streaming)
o Indicado para analisar dados que chegam em tempo real.
o Exemplos: logs de sites, detecção de fraudes enquanto ocorrem.
Aprendizado de máquina
o Perfeito para modelos que precisam treinar com grandes volumes de dados.
o Armazena dados na memória, o que acelera testes e treinamentos.
Análise interativa
o Gera respostas rapidamente.
o Permite explorar os dados de forma dinâmica, e não apenas com consultas prontas.
2. Cenários inadequados para usar o Spark
Gerenciamento complexo do cluster
o Ajustar, manter e otimizar o Spark exige conhecimento profundo.
o A má configuração prejudica o desempenho e é comum em aplicações de ciência de dados.
Poucos recursos computacionais
o Spark depende fortemente de memória RAM.
o Em máquinas com baixa capacidade, o desempenho cai muito.
o Nessas situações, ferramentas como o Hadoop podem ser mais adequadas.
Risco de falhas por má configuração
o Jobs podem falhar por falta de memória se o Spark não estiver bem ajustado.
o É necessário configurar corretamente:
Alocação de memória (fixa ou dinâmica)
Número de núcleos usados pelo Spark
Memória de cada executor
Número de partições ao embaralhar dados
Conclusão:
O Spark é excelente para processamentos rápidos, dados em tempo real, machine learning e análises
interativas, mas exige boa infraestrutura e configuração técnica avançada.
Em ambientes limitados ou mal configurados, pode não ser a melhor escolha.
Arquitetura do Spark
✅ 1. Visão geral da arquitetura do Spark
Ela é baseada no modelo mestre–escravo.
Componentes separados e fracamente acoplados, facilitando a integração.
Estruturada sobre duas abstrações fundamentais:
o RDD (Conjunto de dados distribuídos resilientes)
o DAG (Grafo Acíclico Dirigido)
📌 Abstração 1: RDD (Conjunto de Dados Distribuídos Resilientes)
RDD (Resilient Distributed Dataset) é a estrutura básica de dados do Spark.
Os dados são divididos e distribuídos entre vários nós do cluster (conjunto de dados distribuído).
Permite processamento paralelo, pois suas partições podem ser executadas ao mesmo tempo em diferentes
máquinas.
Os dados de um RDD são imutáveis, ou seja, após serem criados, não podem ser alterados — somente gerar
novos RDDs a partir de transformações.
“Resiliente”: dados podem ser recuperados em caso de falha.
“Distribuído”: cada parte fica em um nó diferente.
“Dataset”: organizado em grupos de dados.
Tipos de operações:
o Transformações: criam um novo RDD (ex.: map, filter, join, union).
o Ações: retornam um valor final (ex.: count, reduce, first/last).
📌 Abstração 2: DAG (Grafo Acíclico Dirigido)
DAG é a forma como as operações sobre os dados são executadas.
Grafo é um modelo matemático com nós (RDDs) e arestas
(transformações).
Representa a sequência de operações a serem executadas nos dados.
“Dirigido”: tem direção definida nas operações.
“Acíclico”: não possui ciclos, não volta para etapas anteriores.
O DAG funciona como um plano de execução da aplicação.
✅ 4. Componentes principais da arquitetura do Spark
A arquitetura do Spark é composta por três componentes principais:
Driver Program
Cluster Manager
Executors
1. Driver Program
Responsável por converter a aplicação do
usuário em tarefas.
Gerencia a execução e envia trabalho aos
executores.
Funções importantes:
o Cria o SparkContext.
o Solicita executores ao Cluster Manager.
o Envia código e tarefas aos executores.
o Retorna resultados ao usuário.
2. Cluster Manager (Gerenciador de Cluster)
Necessário apenas em execução distribuída.
Gerencia as máquinas que atuarão como workers.
Tipos:
o Standalone: simples e fácil de configurar.
o Apache Mesos: gerenciador geral, suporta Hadoop.
o Hadoop YARN: gestor de recursos do Hadoop.
Suporte experimental ao Kubernetes.
2. Worker Nodes (Nós de Trabalho)
Máquinas onde as tarefas são executadas.
Se o Spark estiver em modo local, a própria máquina faz tudo (Driver + Worker).
Componentes internos:
o Executors:
Processos que executam as tarefas.
Permanecem ativos durante toda a aplicação.
Enviam resultados ao Driver.
Armazenam RDDs em cache.
o Tasks (Tarefas):
Unidades de trabalho enviadas a cada executor.
✅ 5. Fluxo de execução de uma aplicação Spark
1. Driver Program cria o DAG e inicializa o SparkContext.
2. O Driver solicita recursos ao Cluster Manager.
3. O Cluster Manager inicia os Executors.
4. O Driver envia tarefas para os executores conforme as transformações e ações nos RDDs.
5. Os Executors executam as tarefas e armazenam os resultados.
6. Se algum Worker falhar, as tarefas são redistribuídas automaticamente.
Ecossistema do Spark
✅ O que é o Ecossistema do Spark
Conjunto de linguagens, bibliotecas e componentes totalmente integrados ao Spark.
Voltado para aplicações de Big Data distribuídas.
Permite agendar, distribuir e monitorar aplicações em um cluster.
✅ Linguagens de Programação Suportadas
Scala
o Linguagem nativa do Spark.
o Recebe novos recursos antes das demais.
Python: Ampla variedade de bibliotecas para ciência de dados e machine learning.
R: Muito usada em estatística e análise avançada de dados.
Java: Linguagem robusta e amplamente utilizada em ambientes corporativos.
✅ Principais Componentes do Ecossistema do Spark
1. Spark Core
Núcleo principal do Spark.
Base para todas as outras bibliotecas.
Funções principais:
o Agendamento de tarefas.
o Recuperação de falhas.
o Gerenciamento de memória.
o Distribuição de trabalhos entre os Worker Nodes.
Suporta RDDs, a estrutura básica de dados do Spark.
2. Spark SQL
Suporte a dados estruturados (tabelas).
Permite consultas usando SQL.
Utiliza Datasets e DataFrames como formatos de dados.
3. Spark Streaming
Processamento de dados em tempo real (streaming).
Tolerante a falhas e escalável.
Exemplos de uso:
o Recomendação de anúncios logo após pesquisas na internet.
o Análise de sensores IoT.
o Processamento de logs.
o Detecção de intrusão e fraude.
o Campanhas online, finanças e cadeia de suprimentos.
4. MLlib
Biblioteca de machine learning do Spark.
Possui algoritmos como:
o Classificação
o Regressão
o Agrupamento
o PCA (análise de componentes principais)
o Correlações e testes de hipóteses
5. GraphX
Biblioteca voltada para grafos.
Permite visualizar, manipular e fazer cálculos paralelos com grafos.
Integra operações de grafos com RDDs.
✅ Resumo
O ecossistema do Spark oferece um conjunto robusto de ferramentas que tornam possível desenvolver aplicações
completas de Big Data — desde processamento em tempo real, análise de dados estruturados, machine learning até
manipulação de grafos — utilizando diferentes linguagens de programação.
Instalação e Uso Básico do Spark no Google Colab
1. Pré-requisitos
Ter uma conta Google para acessar o Google Colab.
Todo o processo é feito em células de código dentro do Colab.
2. Instalar o PySpark
Instalar o Spark (via PySpark) usando o comando abaixo em uma célula:
📌 Comando de instalação:
!pip install -q pyspark
3. Testar a instalação
Criar uma SparkSession, que é o ponto de entrada para qualquer operação no Spark.
📌 Comando para criar a SparkSession:
from [Link] import SparkSession
spark =
[Link]("local[*]").appName("TesteInstalacaoSpark").getOrCreate()
Observações sobre o parâmetro master:
Execução em cluster: usar "yarn" ou "mesos", dependendo do cluster.
Execução local: usar "local[n]", onde n = número de núcleos da CPU.
o Ex.: local[2], local[4], local[*].
4. Ler e exibir dados
O Google Colab já possui datasets disponíveis na pasta /content/sample_data/.
Exemplo: arquivo california_housing_test.csv.
📌 Comando para carregar o dataset
dataset =
[Link]('/content/sample_data/california_housing_test.csv',
inferSchema=True,
header=True)
📌 Comando para visualizar a estrutura dos dados
[Link]()
Exemplo de saída do schema:
root
|-- longitude: double (nullable = true)
|-- latitude: double (nullable = true)
|-- housing_median_age: double (nullable = true)
|-- total_rooms: double (nullable = true)
|-- total_bedrooms: double (nullable = true)
|-- population: double (nullable = true)
|-- households: double (nullable = true)
|-- median_income: double (nullable = true)
|-- median_house_value: double (nullable = true)
5. Encerrar a sessão do Spark
Ao finalizar o uso, feche a sessão.
📌 Comando para finalizar
[Link]()
Utilização do PySpark
🔹 O que é o PySpark?
PySpark é a API do Apache Spark para Python.
Permite escrever programas em Python utilizando todo o poder de processamento distribuído do Spark.
🔹 Por que o PySpark existe?
O Spark foi criado originalmente em Scala.
Para permitir que desenvolvedores Python também utilizem o Spark, foi criada a biblioteca PySpark.
🔹 Para que o PySpark é usado?
Muito utilizado em ciência de dados e aprendizado de máquina.
Isso acontece porque:
o Python possui várias bibliotecas populares de análise e Machine Learning (NumPy, Pandas, Scikit-
Learn…).
o O Spark facilita o processamento de grandes volumes de dados com alto desempenho.
⭐ Principais Vantagens do PySpark
✔ 1. Processamento distribuído em memória
Usa vários computadores ao mesmo tempo.
Processa dados de forma rápida e eficiente.
✔ 2. Melhor desempenho que sistemas tradicionais
Comparado a ferramentas como scripts Python comuns ou MapReduce, o PySpark é muito mais rápido.
✔ 3. Excelente para pipelines de ingestão de dados
Muito usado em ETL (extrair, transformar e carregar dados).
✔ 4. Suporte a vários sistemas de arquivos
Pode ler dados do:
o HDFS (Hadoop)
o S3
o Sistemas locais
o Outros repositórios distribuídos
✔ 5. Processamento em tempo real
Suporta streams de dados (processamento contínuo).
✔ 6. Bibliotecas integradas
Bibliotecas internas para:
o Grafos (GraphX / GraphFrames)
o Machine Learning (MLlib)
Uso do PySpark
🔹 1. Conexão com o Cluster Spark
Como funciona o cluster
Um computador atua como mestre (master): gerencia tarefas e divisão de dados.
Vários computadores atuam como trabalhadores (workers): executam cálculos e devolvem resultados.
Para usar PySpark, é necessário instalar e configurar o Spark e suas variáveis de ambiente.
Passos necessários
1. Conectar ao cluster Spark usando PySpark.
2. Realizar operações com Spark DataFrames.
🔹 2. Conectar-se ao Cluster com SparkContext
Etapas
Importar o PySpark.
Criar um objeto SparkContext, responsável por iniciar a conexão com o cluster.
📌 Comandos utilizados
from pyspark import SparkContext
spark_contexto = SparkContext()
print(spark_contexto)
print(spark_contexto.version)
O que cada linha faz
Linha 1: importa o SparkContext.
Linha 2: cria a conexão com o cluster.
Linha 3: imprime informações sobre o contexto.
Linha 4: imprime a versão do Spark.
Saída
<SparkContext master=local[*] appName=pyspark-shell>
3.1.2
🔹 3. Operações com Spark DataFrames
Importância do RDD e DataFrame
RDD: estrutura distribuída básica do Spark (dados divididos entre vários nós).
DataFrame: abstração otimizada sobre RDDs, semelhante a uma tabela SQL.
DataFrames realizam otimizações automáticas → mais rápido e eficiente.
🔹 4. Criar uma SparkSession
Por quê? SparkSession é a interface principal para manipular DataFrames.
📌 Comandos utilizados
from [Link] import SparkSession
spark = [Link]() # Create my_spark
print(spark) # Print my_spark
Saída
<[Link] object at 0x7f93043e2590>
🔹 5. Leitura de Arquivo CSV
Leitura de dados
Vamos ler o arquivo:
/content/sample_data/california_housing_test.csv
📌 Comando utilizado
dataset = [Link]('/content/sample_data/california_housing_test.csv',
inferSchema=True, header=True)
🔹 6. Visualizar Informações do DataFrame
Mostrar primeira linha e cabeçalho:
[Link]()
Saída:
Row(longitude=-122.05, latitude=37.37, housing_median_age=27.0,
total_rooms=3885.0, total_bedrooms=661.0, population=1537.0,
households=606.0, median_income=6.6085, median_house_value=344700.0)
🔹 7. Contar Número de Registros
[Link]()
Saída:
3000
🔹 8. Criar uma Tabela SQL Temporária
Criar a tabela e visualizar no catálogo:
[Link]('tabela_temporaria')
print([Link]())
Saída:
[Table(name='tabela_temporaria', database=None, description=None,
tableType='TEMPORARY', isTemporary=True)]
🔹 9. Executar Consulta SQL
Selecionar longitude e latitude (3 registros)
query = 'FROM tabela_temporaria SELECT longitude, latitude LIMIT 3'
saida = [Link](query)
[Link]()
Saída
+---------+--------+
|longitude|latitude|
+---------+--------+
| -122.05| 37.37 |
| -118.3 | 34.26 |
| -117.81| 33.78 |
+---------+--------+
PySpark com Pandas
🔹 1. Por que usar Pandas com PySpark?
O Pandas é uma das bibliotecas mais importantes do Python para:
o limpeza de dados
o análise exploratória
o cálculos estatísticos (média, correlação, desvio-padrão etc.)
Foi construído sobre o NumPy, otimizando desempenho e produtividade.
O objeto principal é o Pandas DataFrame, uma tabela bidimensional:
o colunas e linhas rotuladas
o suporta tipos diferentes de dados (heterogêneos)
o pode mudar de tamanho
No contexto de Big Data, Pandas + PySpark permite:
o converter entre DataFrames do Spark e do Pandas
o usar SQL no Spark e depois analisar resultados com Pandas
✅ 2. Converter Spark SQL → Pandas DataFrame
Objetivo: Encontrar a localização (latitude e longitude) da residência com maior quantidade de quartos.
Passos:
1. Fazer consulta SQL para buscar o valor máximo de total_rooms.
2. Executar o SQL no Spark → retorna um Spark DataFrame.
3. Converter para Pandas DataFrame.
4. Imprimir o resultado.
5. Converter o valor para inteiro.
📌 Comandos utilizados
query1 = 'SELECT MAX(total_rooms) as maximo_quartos FROM tabela_temporaria'
q_maximo_quartos = [Link](query1)
pd_maximo_quartos = q_maximo_quartos.toPandas()
print('A quantidade máxima de quartos é: {}'.format(pd_maximo_quartos['maximo_quartos']))
qtd_maximo_quartos = int(pd_maximo_quartos.loc[0,'maximo_quartos'])
Saída
A quantidade máxima de quartos é: 0 30450.0
Name: maximo_quartos, dtype: float64
✅ 3. Obter localização (latitude e longitude)
Passos
1. Realizar nova consulta SQL usando o valor máximo encontrado.
2. Executar SQL no Spark.
3. Converter para Pandas DataFrame.
4. Mostrar o resultado.
📌 Comandos utilizados
query2 = 'SELECT longitude, latitude FROM tabela_temporaria WHERE total_rooms =
'+str(qtd_maximo_quartos)
localizacao_maximo_quartos = [Link](query2)
pd_localizacao_maximo_quartos = localizacao_maximo_quartos.toPandas()
print(pd_localizacao_maximo_quartos.head())
Saída
longitude latitude
0 -117.2 33.58
✅ 4. Converter Pandas DataFrame → Spark DataFrame
Passos
1. Gerar dados aleatórios com NumPy (distribuição normal).
2. Criar DataFrame Pandas.
3. Converter para Spark DataFrame.
4. Listar tabelas do catálogo do Spark.
5. Criar uma nova tabela temporária no Spark.
6. Listar as tabelas novamente.
📌 Comandos utilizados
import pandas as pd
import numpy as np
media = 0
desvio_padrao = 0.1
pd_temporario = [Link]([Link](media, desvio_padrao, 100))
spark_temporario = [Link](pd_temporario)
print([Link]())
spark_temporario.createOrReplaceTempView('nova_tabela_temporaria')
print([Link]())
Saída 1 (antes de criar tabela nova)
[Table(name='tabela_temporaria', ...), Table(name='temp', ...)]
Saída 2 (depois de criar a nova tabela)
[Table(name='nova_tabela_temporaria', ...),
Table(name='tabela_temporaria', ...),
Table(name='temp', ...)]
✅ 5. Encerrar a sessão Spark
📌 Comando
[Link]()
Dicas para Uso do PySpark no Google Colab
🔹 1. Vantagens do Google Colab
Facilita testes e ajustes de código.
Dispensa configurações complexas de ambiente.
Permite organizar o código em células separadas, o que facilita identificar erros.
🔹 2. Boa prática recomendada
Usar uma célula de código para cada sequência de comandos:
o facilita o debug
o ajuda a descobrir rapidamente onde ocorreu o erro
🔹 3. Atenção à indentação
Indentação é parte da sintaxe do Python, pois define blocos lógicos.
Erros comuns acontecem quando:
o espaços estão desalinhados
o misturam-se tabulações e espaços
o comandos internos de estruturas (if, for, while, funções etc.) não estão recuados corretamente
🔹 4. Instalação correta dos pacotes
É essencial instalar todos os pacotes e dependências antes de rodar os exemplos.
Caso contrário, ocorrem erros de importação ou execução.
Operações de MapReduce com PySpark
Introdução e Contextualização sobre Processamento Distribuído e MapReduce
🔹 1. Aplicações distribuídas no cotidiano
Hoje usamos diversos sistemas distribuídos, como:
o Serviços na internet
o Computação móvel
o Internet das Coisas (IoT)
Com o avanço da internet, cresceu a necessidade de processamento mais rápido e eficiente, tornando
inviável o uso de abordagens totalmente sequenciais.
🔹 2. Necessidade do processamento distribuído
Surgiu para lidar com grandes volumes de dados e tarefas intensivas.
Baseia-se no princípio "dividir para conquistar":
o Divisão: separa grandes conjuntos de dados em partes menores e mais fáceis de tratar.
o Conquista: cada parte é processada até completar o objetivo final.
🔹 3. Paradigma MapReduce
Introduzido pelo Google por volta de 2004.
Segue duas etapas principais:
o Map (Mapeamento): divide os dados e cria pares (chave, valor).
o Reduce (Redução): combina todos os pares que têm a mesma chave.
Trabalha em várias máquinas ao mesmo tempo, garantindo eficiência e escalabilidade.
🔹 4. Características do MapReduce
Processa grandes conjuntos de dados de forma distribuída.
Usa pares (chave, valor), que podem ser de qualquer tipo (string, número, tipos abstratos etc.).
É uma forma eficiente de resolver diversos tipos de problemas distribuídos.
🔹 5. Exemplo clássico de aplicação
Contagem de frequência de palavras em um texto muito grande.
Também é útil para:
o Classificações
o Pesquisas distribuídas
o Aprendizado de máquina
o Diversas outras aplicações práticas
Figura: Exemplo de MapReduce
Paradigma MapReduce
🔹 1. Objetivo do MapReduce
Processar grandes volumes de dados de forma distribuída.
Exemplo clássico: contagem de palavras em um arquivo de texto.
o Entrada: arquivo com palavras (podem se repetir).
o Saída: lista com cada palavra e seu número de ocorrências.
🔹 2. Etapas do processo MapReduce
1. Entrada de dados
É o conjunto de dados que será processado.
Geralmente uma lista de elementos que podem ser tratados de forma independente.
2. Separação
Divide os dados em partes (listas menores).
Cada parte é processada paralelamente.
3. Mapeamento (Map)
Aplica uma função a cada elemento da lista.
Transforma cada palavra em um par (chave, valor):
o chave: palavra
o valor: 1 (uma ocorrência)
4. Embaralhamento (Shuffle)
Agrupa todos os pares que possuem a mesma chave.
Junta todas as ocorrências da mesma palavra.
5. Redução (Reduce)
Soma ou combina os valores associados à mesma chave.
No exemplo: contar quantas vezes cada palavra aparece.
6. Resultado final
Produz uma lista com palavra → quantidade de repetições.
🔹 3. Aplicações práticas
Contagem de palavras (exemplo clássico).
Base para soluções distribuídas em:
o Análise de textos
o Pesquisa
o Classificação
o Aprendizado de máquina
o Processamento de grandes volumes de dados
Exemplos Práticos de MapReduce com PySpark
📌 Preparação Inicial
Antes de executar qualquer exemplo, é necessário instanciar uma seção Spark:
Comando:
from pyspark import SparkContext
spark_contexto = SparkContext()
⚙️Exemplo 1 – Vetores
🎯 Objetivo: Aplicar, a cada elemento de um vetor numérico, a função matemática: f(x) = x² + x
1️⃣ Importar o NumPy
import numpy as np
2️⃣ Criar o vetor
vetor = [Link]([10, 20, 30, 40, 50])
3️⃣ Criar o RDD
paralelo = spark_contexto.parallelize(vetor)
4️⃣ Verificar o conteúdo do RDD
print(paralelo)
(Saída indica que o RDD foi criado: ParallelCollectionRDD[...])
5️⃣ Aplicar o mapeamento (função f(x) = x² + x)
mapa = [Link](lambda x : x**2 + x)
lambda x : x**2 + x → função aplicada elemento por elemento
.map() → aplica a função sobre todo o RDD
6️⃣ Coletar o resultado
[Link]()
✔️Saída esperada:
[110, 420, 930, 1640, 2550]
⚙️Exemplo 2 – Listas
🎯 Objetivo: Contar quantas vezes cada palavra aparece em uma lista.
1️⃣ Criar o RDD com palavras
paralelo = spark_contexto.parallelize(['distribuida', 'distribuida', 'spark', 'rdd', 'spark',
'spark'])
2️⃣ Criar uma função lambda que associa cada palavra ao número 1
funcao_lambda = lambda x: (x, 1)
Isso transforma cada palavra em um par:
🔹 'spark' → ('spark', 1)
3️⃣ Aplicar MapReduce
Importar operador de soma:
from operator import add
Aplicar mapeamento + redução + coleta:
mapa = [Link](funcao_lambda).reduceByKey(add).collect()
Explicação:
1. .map(funcao_lambda) → transforma cada palavra em (palavra, 1)
2. .reduceByKey(add) → soma os valores de cada chave (palavra)
3. .collect() → transforma o RDD final em lista
4️⃣ Exibir o resultado
for (w, c) in mapa:
print('{}: {}'.format(w, c))
✔️Saída esperada:
distribuida: 2
spark: 3
rdd: 1
🔚 Finalizar a seção Spark
Ao terminar os exemplos, é necessário encerrar a sessão:
Comando:
spark_contexto.stop()
📘 Resumo Geral dos Comandos (todos reunidos)
# Importa o SparkContext para criar a sessão do Spark
from pyspark import SparkContext
spark_contexto = SparkContext()
# -------------------------------
# Exemplo 1 - Vetores
# -------------------------------
# Importa o pacote Numpy para criar vetores numéricos
import numpy as np
# Cria um vetor com valores numéricos
vetor = [Link]([10, 20, 30, 40, 50])
# Cria um RDD (estrutura distribuída) a partir do vetor
paralelo = spark_contexto.parallelize(vetor)
# Verifica o conteúdo do RDD criado
print(paralelo)
# Saída esperada:
# ParallelCollectionRDD[3] at readRDDFromFile at [Link]
# Aplica a função f(x) = x^2 + x em cada elemento do vetor
mapa = [Link](lambda x : x**2 + x)
# Coleta os resultados do mapeamento
[Link]()
# Saída esperada:
# [110, 420, 930, 1640, 2550]
# -------------------------------
# Exemplo 2 - Listas
# -------------------------------
# Cria um RDD a partir de uma lista de palavras
paralelo = spark_contexto.parallelize(['distribuida', 'distribuida', 'spark', 'rdd', 'spark',
'spark'])
# Define uma função lambda que associa cada palavra ao número 1
funcao_lambda = lambda x: (x, 1)
# Importa o operador "add" para somar as ocorrências
from operator import add
# Aplica o mapeamento (palavra, 1), depois reduz somando as ocorrências por chave (palavra)
mapa = [Link](funcao_lambda).reduceByKey(add).collect()
# Percorre os pares (palavra, contagem) e imprime o resultado
for (w, c) in mapa:
print('{}: {}'.format(w, c))
# Saída esperada:
# distribuida: 2
# spark: 3
# rdd: 1
# -------------------------------
# Finalização da sessão
# -------------------------------
# Fecha a sessão do Spark
spark_contexto.stop()
Transformações com PySpark
📌 O que é um RDD?
É a estrutura de dados fundamental do Spark.
Representa um conjunto de dados distribuído e resiliente.
Os dados são divididos em partições e processados em vários nós do cluster.
📌 Principais características dos RDDs
1. Computação em memória
Os dados podem ser armazenados diretamente na RAM.
Isso garante alto desempenho e processamento muito rápido.
2. Avaliação preguiçosa (Lazy Evaluation)
Transformações não são executadas imediatamente.
O processamento só começa quando uma ação é chamada.
Após isso, os dados do RDD não podem mais ser alterados.
3. Tolerância a falhas
O Spark consegue reconstruir automaticamente dados perdidos.
Isso é possível porque o RDD mantém um histórico das operações realizadas.
4. Imutabilidade
Um RDD não pode ser modificado.
Qualquer operação cria um novo RDD.
Isso garante consistência e facilita o processamento paralelo.
5. Particionamento
Os dados são divididos logicamente e enviados para vários nós.
Isso permite paralelismo e maior rapidez.
6. Persistência
Os dados podem ser salvos em:
o Memória RAM (mais rápido)
o Disco (alternativa mais lenta)
Permite reutilizar os mesmos dados em múltiplas operações.
7. Operações de granulação grossa
Permitem aplicar transformações amplas como map() ou filter() sobre todo o cluster.
8. Fixação de localização
O Spark tenta processar os dados próximos de onde estão armazenados, reduzindo tempo de transferência
e acelerando o processamento.
Quadro Comparativo 4 – Características Principais do RDD
Característica Explicação Simplificada
Computação em Processamento muito rápido usando RAM.
memória
Avaliação preguiçosa Só processa quando uma ação é chamada.
Tolerância a falhas Se algo falhar, o Spark reconstrói os dados automaticamente.
Imutabilidade Não muda; sempre cria novos RDDs.
Particionamento Divide os dados entre vários nós para paralelismo.
Persistência Podemos guardar dados na memória ou disco para reutilização.
Granulação grossa Operações amplas (map, filter) feitas de uma vez no cluster.
Fixação de localização Processa os dados perto de onde eles estão armazenados.
📌 Tipos de operações no RDD
1. Transformações
O que são? São operações aplicadas a um RDD para criar um novo RDD.
Não executam o processamento imediatamente (são preguiçosas — lazy).
Como os RDDs são imutáveis, uma transformação nunca altera o RDD original, apenas gera outro RDD.
2. Ações
São operações aplicadas ao RDD com o objetivo de o Spark realizar os cálculos e enviar os resultados de volta
ao Driver Program.
Diferente das transformações, elas iniciam de fato a execução imediatamente no cluster.
Ao chamar uma ação, o Spark processa todas as transformações acumuladas.
Quadro Comparativo 1 – Transformações vs. Ações
Aspecto Transformações Ações
O que são? Operações que criam novos RDDs. Operações que executam o processamento e retornam o resultado.
Execução Preguiçosa (não executa imediatamente). Imediata (aciona o processamento).
Resultado Um novo RDD. Um valor, lista ou salvamento no sistema de arquivos.
Modificam Não — apenas geram RDDs derivados (RDD é imutável). Não modificam RDD, apenas coletam ou salvam.
dados?
Exemplos comuns map(), filter(), flatMap(), groupByKey() collect(), count(), first(), reduce()
📌 Resumo
O RDD é imutável, distribuído e tolerante a falhas.
Transformações criam novos RDDs e são lazy.
Ações iniciam o processamento.
Persistência e computação em memória garantem alto desempenho.
Particionamento e granulação grossa permitem processamento paralelo eficiente.
Transformações no Spark RDD
📌 O que são transformações?
São funções que recebem um RDD e produzem um ou mais novos RDDs.
Não modificam o RDD original (pois ele é imutável).
Criam novos conjuntos de dados a partir de outros.
São operações preguiçosas (lazy) — só são executadas quando uma ação é chamada.
Ao aplicar uma transformação, o Spark cria um DAG (grafo que representa as operações).
Só quando uma ação é usada o Spark realmente executa os cálculos.
🔄 Tipos de Transformações
Existem dois tipos:
1. Transformações estreitas (narrow transformations)
2. Transformações amplas (wide transformations)
📘 1. Transformações Estreitas
📌 Características
Os dados necessários para o cálculo vêm de uma única partição.
Não precisam mover dados entre partições → sem shuffle.
São chamadas de autossuficientes.
O Spark as agrupa em um único estágio chamado pipelining, para aproveitar melhor o processamento local.
📌 Exemplos de transformações estreitas
map() – aplica uma função a cada elemento e retorna novo conjunto de dados.
flatMap() – aplica função e depois “achata” os resultados.
mapPartitions() – aplica função por partição, não por elemento.
sample() – retorna um subconjunto aleatório dos dados.
filter() – filtra registros que atendem a uma condição.
union() – une dois RDDs.
📘 2. Transformações Amplas
📌 Características
Para realizar o cálculo, os dados podem estar em várias partições diferentes.
É necessário mover dados entre nós, processo chamado shuffle.
Por isso são chamadas de transformações aleatórias ou amplas.
Dividem os estágios de execução, pois exigem reorganização dos dados.
📌 Exemplos de transformações amplas
intersection() – interseção entre dois RDDs.
distinct() – remove duplicatas.
groupByKey() – agrupa valores pelo mesmo identificador (K, V).
reduceByKey() – agrega valores por chave usando uma função de redução.
sortByKey() – ordena os pares (K, V) pela chave.
join() – combina dados de dois RDDs pela chave.
coalesce() – reduz o número de partições, misturando menos dados que um reparticionamento completo.
Quadro Comparativo – Transformações Estreitas vs. Transformações Amplas
Aspecto Transformações Estreitas Transformações Amplas
Origem dos dados Cada partição de saída depende de apenas 1 partição de Cada partição de saída pode depender de várias partições
entrada. de entrada.
Movimentação de dados Não ocorre shuffle (dados não precisam ser redistribuídos). Ocorre shuffle (dados são movidos entre nós para
(shuffle) reorganização).
Desempenho Mais rápidas e eficientes. Mais lentas devido ao custo de comunicação entre nós.
Execução Podem ser executadas em pipelining (sequência contínua Exigem quebra de estágios na execução (diversos steps no
dentro da mesma partição). DAG).
Custo computacional Baixo Alto
Autossuficiência São autossuficientes (cada partição tem tudo que precisa). São dependentes (precisam combinar dados de várias
partições).
Uso ideal Transformações locais, simples e frequentes. Operações que exigem agregação, organização ou junção de
dados.
Quando ocorrem? Quando o trabalho pode ser feito localmente em cada Quando é necessário misturar dados para realizar a
partição. operação.
Exemplos map(), flatMap(), filter(), sample(), mapPartitions(), union() groupByKey(), reduceByKey(), sortByKey(), join(), distinct(),
intersection(), coalesce()
🎯 Resumo Final
Transformações não executam imediatamente — apenas quando uma ação ocorre.
Estreitas → dependem de uma única partição, não exigem shuffle, são rápidas.
Amplas → exigem movimentação de dados entre partições, causando shuffle.
Ambas geram novos RDDs, preservando a imutabilidade do Spark.
Ações no Spark RDD
📌 O que são Ações?
São operações que executam de fato o processamento no RDD.
Utilizam o DAG para:
o Carregar os dados do RDD original,
o Executar todas as transformações acumuladas,
o Produzir um resultado final.
Ao contrário das transformações, as ações não criam novos RDDs.
Elas retornam valores ao Driver Program ou salvam resultados em arquivos.
📌 Características principais
São elas que desencadeiam a execução de todo o pipeline de transformações.
Usadas para coletar, contar, reduzir ou visualizar os dados processados.
São necessárias para transformar o trabalho “preguiçoso” do Spark em resultados reais.
📌 Exemplos de ações
first(): Retorna o primeiro elemento do RDD.
take(n): Retorna um vetor com os n primeiros elementos.
reduce(func): Agrega todos os elementos usando uma função de redução (ex.: soma, máximo, mínimo).
collect(): Retorna todos os elementos do RDD como um vetor (usar com cuidado em conjuntos grandes).
count(): Retorna o número total de elementos do RDD.
📌 Resumo
Ações são as operações que realizam o processamento e retornam resultados.
Sem uma ação, nenhuma transformação é executada.
Elas são essenciais para visualizar, contar ou salvar os dados processados pelo Spark.
Exemplo Prático com Transformações e Ações no Spark
📌 1. Criando o ambiente Spark
Antes de usar RDDs, é necessário criar um SparkContext, que é a porta de entrada para o Spark.
Código:
from pyspark import SparkContext
spark_contexto = SparkContext()
📌 2. Criando um RDD a partir de uma lista
Criamos uma lista simples de números.
Convertê-la para RDD permite usar transformações e ações distribuídas.
Código:
lista = [1, 2, 3, 4, 5, 3]
lista_rdd = spark_contexto.parallelize(lista)
📌 3. Executando uma Ação – count()
A ação count() retorna a quantidade de elementos no RDD.
Aqui, o RDD possui 6 elementos.
Código:
lista_rdd.count()
Saída:
6
📌 4. Criando uma função lambda
A função recebe um número e retorna um par (número, número × 10).
Código:
par_ordenado = lambda numero: (numero, numero*10)
📌 5. Aplicando transformação flatMap + ação collect
flatMap() aplica a função e espalha os resultados no RDD.
collect() retorna todos os elementos como uma lista.
Cada número gera dois valores separados.
Código:
lista_rdd.flatMap(par_ordenado).collect()
Saída:
[1, 10, 2, 20, 3, 30, 4, 40, 5, 50, 3, 30]
📌 6. Aplicando transformação map + ação collect
map() aplica a função e gera um único par por elemento.
collect() retorna o resultado como lista.
Código:
lista_rdd.map(par_ordenado).collect()
Saída:
[(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (3, 30)]
📌 7. Encerrando a sessão Spark
Sempre finalize o processamento fechando o SparkContext.
Código:
spark_contexto.stop()
🎯 Resumo Final
Transformações: map(), flatMap().
Ações: count(), collect().
O Spark só executa quando chamamos ações.
Funções lambda permitem gerar pares ou novos valores para o RDD.
map → estrutura tuplas;
flatMap → expande em valores soltos.
Sempre usar stop() ao final.
TEMA 5. ANÁLISE DE DADOS EM PYTHON COM PANDAS
Introdução à Análise de Dados com Python
🔹 Importância da análise de dados
A análise de dados é essencial no início de projetos de sistemas de informação.
Ajuda a entender melhor processos além do que foi levantado nos requisitos.
Fornece insights que orientam decisões e melhorias no sistema.
🔹 Automatização da análise de dados
O avanço tecnológico tornou a análise mais automatizada e eficiente.
Existem sistemas e ferramentas específicas para análise de dados.
Linguagens de programação permitem criar desde scripts simples até sistemas completos de exploração de
dados.
🔹 Python como ferramenta principal
Python é uma das linguagens mais populares para análise de dados.
Possui muitas bibliotecas especializadas:
o Ciência de dados
o Processamento de dados
o Análise de séries temporais
o Visualização
É flexível e poderosa, facilitando desde análises básicas até projetos avançados.
🔹 O que será aprendido
Principais componentes da linguagem Python.
Sintaxe necessária para realizar análises de dados.
Ferramentas e técnicas importantes para trabalhar com dados.
Tipos de dados mais comuns e cuidados na manipulação.
Como encontrar dados e prepará-los para análise.
🔹 Visualização de dados
Aprender a representar dados visualmente.
Gráficos ajudam a transformar análises em insights imediatos.
A visualização é essencial para interpretar informações rapidamente.
1. Componentes e sintaxe do Python para análise de dados
📌 O que é Python e por que é tão usado
Python é uma linguagem de programação de alto nível, ou seja, muito próxima da linguagem humana.
Foi criada para ser fácil de ler, parecida com o inglês.
Isso ajuda qualquer pessoa a entender o código, mesmo sem ser especialista.
📌 Por que o nome é “Python”?
Apesar do símbolo ser uma cobra, o nome vem do grupo de humor Monty Python.
A cobra só se tornou o símbolo depois, como uma referência divertida.
✅ Como o Python trata variáveis e tipos
Diferente de linguagens como C ou Java, o Python não obriga você a dizer o tipo da variável.
o Exemplo: você pode simplesmente escrever x = 10 e pronto.
Isso acontece porque Python tem tipagem dinâmica (descobre o tipo sozinho).
Porém, ele não mistura tipos incompatíveis automaticamente, pois tem tipagem forte.
o Exemplo: não deixa somar número com texto por engano.
✅ Indentação: a regra mais importante
Em Python, os espaços no início das linhas definem blocos de código.
Eles substituem o uso de chaves {} de outras linguagens.
Isso deixa o código mais limpo e fácil de ler.
Exemplo:
if x > 0:
print("Positivo")
✅ Principais tipos de dados do Python
Tipo Descrição Exemplo
str, unicode Cadeia de Caracteres "batata", u"alface"
list Lista (permite repetição, tem ordem e índice) [1,2,3], ['a','b','c'], [1.0, 'a', True]
tuple Tupla (igual a lista, porém imutável, ótimo para dados fixos) ("what","who","whom","where","when")
set Conjunto mutável, não ordenado, sem repetição, não indexado s = {1, 2, 3} ou s = set([1, 2, 3]), vazio = set()
frozenset Conjunto imutável, não ordenado, sem repetição frozenset(['batata','alface','uva'])
dict Dicionário, conjunto chave-valor (chaves: são únicas) {"a":1,"b":2,"c":3}, {"k1":"a","k2":"b","k3":"c"}
int Número inteiro (se muito grande pode virar Long) 42, 50, 100, 1, 2, 3, 78394024920L
float Número de ponto flutuante 3.7, 4.55, 9.012, 9.18293, 10.1
complex Número complexo 1e10, 3i, 7+4j
bool Booleano True, False
!= Operador "diferente de" <>, !=
✅ Comandos principais da linguagem
Tipo de Constructo Descrição Exemplo
Constructo
Condicional If Condicional se if(x%2 == 0): print("X é par")
Else Condicional senão if(x%2 == 0): print("X é par") else: print("X é ímpar")
Elif Condicional senão se if(x==0): print("X é zero") elif(x%2 == 0): print("X é par") else:
print("X é ímpar")
Repetição For Laço para cada for c in [Link]: print("c:", c)
While Laço enquanto condição while(True): main()
Classe class Definição de classe class SGDRegression: def __init__(self): pass
Funções/Rotinas def Definição de função def soma(a,b): return a+b
Escopo with Comando executado dentro de um with open("./[Link]") as file: sql_query = [Link]()
escopo
✅ Módulos: como organizar e reaproveitar código
Um módulo é um arquivo com código que pode ser usado em outros arquivos do projeto.
Para criar um módulo:
1. Criar uma pasta com o nome do módulo
2. Dentro dela, criar o arquivo __init__.py
3. Criar também o arquivo com o código, por exemplo [Link]
Como importar módulos
from module import * → importa tudo (caminho absoluto)
from .module import function_x → caminho relativo (mesma pasta)
from ..[Link] import function_y → caminho relativo, importa subindo pastas.
✅ Para que serve o arquivo __init__.py?
Ele funciona como o “início” do módulo, parecido com o construtor de uma classe.
É executado automaticamente quando você importa o módulo.
Mesmo vazio, ele é necessário para o Python entender que aquela pasta é um “pacote” importável.
✅ Resumo
Etapa O que fazer
1 Criar uma pasta (nome do módulo)
2 Criar um arquivo __init__.py (mesmo vazio)
3 Criar um arquivo .py com funções/classes
4 Importar esse arquivo em outro lugar do projeto
📌 Se a pasta tiver __init__.py, ela vira um "pacote" que pode conter vários módulos.
✅ Exemplo
Estrutura:
calculadora/
__init__.py
[Link]
Conteúdo de [Link]:
def somar(a, b):
return a + b
No arquivo principal:
from [Link] import somar
print(somar(10, 5))
Estrutura de Projetos e Boas Práticas em Python
📌 Importação de bibliotecas
Python permite usar bibliotecas criadas por outras pessoas, o que facilita muito o desenvolvimento.
A comunidade é grande e ativa, com ajuda disponível em sites como StackOverflow e GitHub.
Para instalar uma biblioteca, usamos o gerenciador de pacotes pip.
✔ Como instalar uma biblioteca:
pip install <nome_do_módulo>
Depois disso, basta importar no código:
import <nome_da_biblioteca>
📌 Registro das dependências — [Link]
É importante registrar todas as bibliotecas usadas no projeto.
Isso garante que outras pessoas possam rodar o projeto corretamente.
✔ Gerar o arquivo de dependências:
pip freeze > [Link]
✔ Instalar dependências a partir dele:
pip install -r [Link]
📌 Ambientes virtuais (virtualenv / venv)
Ambientes virtuais isolam as bibliotecas do projeto.
Assim, as instalações não afetam todo o computador, somente o projeto atual.
São como “mini ambientes” para cada aplicação.
✔ Criar um ambiente virtual:
venv
✔ Sair do ambiente virtual:
deactivate
📌 Outras ferramentas de ambiente
Pyenv e Pipenv são alternativas mais avançadas.
Podem:
o criar ambientes virtuais
o gerenciar versões diferentes do Python
Mas não vêm instalados com o Python, ao contrário do venv.
📌 Jupyter Notebook
Ambiente muito útil para scripts, testes rápidos e análise exploratória de dados.
Pode ser instalado globalmente (sem virtualenv).
✔ Instalar Jupyter Notebook:
pip install jupyter
✔ Abrir o Jupyter:
jupyter notebook
Isso abre um servidor local no navegador.
Permite criar notebooks, que são arquivos com código dividido em células, muito usados em ciência de
dados.
Ativos de Dados
📌 O que são ativos de dados
São arquivos usados como fonte de dados em projetos Python.
Podem ser planilhas, arquivos de texto, documentos, imagens etc.
Servem como entrada para programas que irão processar esses dados e gerar informações úteis.
📌 De onde vêm os dados
Coleta externa (scraping): dados obtidos automaticamente de sites ou outras fontes online.
Arquivos locais: dados armazenados no computador, como .csv, .txt, .json, .xlsx e outros.
📌 Organização dos dados no projeto
É recomendado criar uma pasta na raiz do projeto para guardar os arquivos de dados.
Essa pasta costuma ser chamada de assets (ativos).
A pasta pode ou não ser dividida em subpastas, de acordo com categorias de dados.
o Ex.: assets/imagens, assets/planilhas, assets/textos.
📌 Por que organizar os dados dessa forma?
Facilita a localização e manutenção dos arquivos.
Mantém o projeto organizado, evitando arquivos soltos.
Ajuda outros desenvolvedores a entenderem rapidamente onde encontrar os dados.
📌 Para que servem os ativos de dados
Podem funcionar como banco de dados temporário para testes.
Podem servir como material de experimentação durante o desenvolvimento.
Também podem alimentar bibliotecas instaladas, por exemplo, licenças, tokens, arquivos de configuração,
etc.
Biblioteca Pandas
📌 O que é o Pandas?
Pandas é uma biblioteca Python usada para manipulação e análise de dados.
Fornece estruturas poderosas para trabalhar com tabelas e séries temporais.
É uma das ferramentas mais importantes em projetos de ciência de dados em Python.
📌 Origem do nome
O nome não tem relação com o animal panda.
Vem do termo estatístico panel data (“dados em painel”).
“Panel data sets” → derivou para “Pandas”.
📌 O que são dados em painel (panel data)
São conjuntos de dados que acompanham várias unidades ao longo do tempo.
o Exemplo: medir vendas de diferentes lojas durante vários meses.
📌 Principais estruturas do Pandas
✔ DataFrame
É a estrutura principal do Pandas.
Pode ser imaginado como uma tabela, parecida
com uma planilha.
Organiza dados em linhas e colunas.
✔ Series
Cada coluna de um DataFrame é uma Series,
que pode ser vista como uma lista de valores.
Muitas vezes representam séries temporais ou listas organizadas.
📌 Por que DataFrames são tão usados?
São mais práticos e poderosos do que matrizes tradicionais.
Permitem:
o filtrar dados,
o calcular estatísticas,
o limpar e transformar tabelas,
o integrar facilmente com gráficos e modelos de machine learning.
📌 Onde DataFrames são usados?
Criação de dashboards.
Scripts de análise de dados.
Processos de ETL (extração, transformação e carregamento de dados).
Machine Learning, pois servem como base para alimentar modelos.
Preparação de dados para análise no Python
📌 1. O que é coleta de dados?
É o processo de capturar e medir informações importantes.
Deve ser feito de forma organizada e sistemática.
Serve para:
o Responder perguntas de pesquisa
o Testar hipóteses
o Avaliar resultados
📌 2. Tipos de dados coletados
🔹 Dados Qualitativos
Não numéricos (textos, descrições, rótulos).
Vêm de perguntas abertas.
Métodos comuns:
o Entrevistas
o Grupos de foco
o Discussões
Bons para entender o comportamento ou a razão de um fenômeno.
Desvantagens: caros, demorados e aplicáveis a grupos pequenos.
🔹 Dados Quantitativos
Numéricos; podem ser medidos e calculados.
Representam escalas:
o Nominal
o Ordinal
o Intervalar
o Proporcional
Geralmente vêm de processos bem estruturados e automatizáveis.
Métodos comuns:
o Surveys
o Queries (consultas)
o Relatórios
o Scrapers (captação automática)
Vantagens: coleta mais barata, rápida e fácil de automatizar.
📌 Observação:
Um mesmo conjunto de dados pode ter informações qualitativas e quantitativas ao mesmo tempo.
Ex.: renda (número) + escolaridade (texto).
📌 3. Formas de obtenção dos dados
🔷 1. Dados Primários
Dados coletados diretamente na fonte, pela primeira vez.
Não foram publicados → são “puros”, sem interferência humana.
Métodos:
o Surveys
o Entrevistas
o Questionários
o Experimentos
Vantagens:
o Dados exclusivos para o problema estudado.
o Podem ser coletados novamente se for necessária uma amostra maior.
🔷 2. Dados Secundários
Dados que já foram publicados e processados.
Exemplo: literatura, registros, censos, jornais, arquivos.
Usados quando não dá para fazer coleta primária.
Vantagens:
o Economia de tempo
o Menor custo
o Responsabilidade sobre os dados fica com o autor original
Tratamento de Dados Nulos ou Corrompidos
📌 Problemas comuns na qualidade dos dados
Dados podem chegar:
o Com valores faltantes
o Com registros nulos
o Mal escritos ou desformatados
o Corrompidos
O tratamento depende:
o Do tamanho da base
o Do tipo de dado
o Da importância do atributo faltante
o Da origem do problema
📌 Por que é importante o Tratamento de Dados Nulos ou Corrompidos?
Antes de analisar dados, precisamos garantir que eles estão completos e corretos.
Dados faltando ou quebrados podem prejudicar totalmente os resultados.
Como tratar dados faltantes (valor nulo)?
✔️A estratégia depende do tamanho da base de dados
🔶 Estratégias para bases grandes (≈ 10.000 registros ou mais)
👉 OPÇÃO 1: Quando a proporção de nulos é pequena (até 10%)
Pode-se remover os registros incompletos sem causar grande impacto.
Funciona bem porque a base é grande e a perda é mínima.
👉 OPÇÃO 2: Preencher automaticamente
Para atributos numéricos → técnicas de regressão
Para atributos categóricos → técnicas de classificação
Observação:
o A grande quantidade de dados ajuda esses algoritmos.
o Alta variância pode dificultar o preenchimento.
🔶 Estratégias para bases pequenas (≈ 1.000 registros ou menos)
👉 OPÇÃO 1: Tentar preencher automaticamente
o Igual às bases grandes.
👉 OPÇÃO 2: Refazer a coleta
o Porque cada registro é muito importante.
o Perder ou preencher errado pode distorcer o resultado.
📌 Bases de dados muito precárias
👉 Quando:
Não dá para excluir
Não dá para preencher
👉 Solução:
Refazer a coleta de dados
— porque a base simplesmente não serve para análise.
📌 Tratamento de dados repetidos
✔️Caso simples:
Basta remover duplicatas.
✔️Caso mais complexo:
Quando a repetição ocorrer em apenas algumas colunas, pode significar que:
1. Os dados agregados foram “explodidos”, ou seja, um dado foi transformado em registros mais
detalhados.
o Exemplo:
Suponha um dado agregado:
Cliente Quantidade de itens comprados
Ana 3
Se esse dado for “explodido”, pode virar:
Cliente Quantidade de itens comprados
Ana 1
Ana 1
Ana 1
2. Mesmos eventos registrados em períodos diferentes, ou seja, ocorreram registros do mesmo
acontecimento, mas em datas/meses diferentes, portanto não são duplicatas.
Exemplo: Imagine uma assinatura mensal.
Cliente Mês Pagamento
Maria Janeiro Pago
Maria Fevereir Pago
o
Maria Março Pago
Aqui, “Maria pagou” aparece várias vezes, mas são eventos diferentes, pois aconteceram em meses
diferentes.
✔️Por que pode parecer duplicado?
Porque os campos “Cliente = Maria” ou “Pagamento = Pago” se repetem,
mas não são duplicatas — representam eventos distintos no tempo.
📌 Dica importante:
Para lidar com duplicatas ou entender inconsistências, sempre que possível:
o Consulte os metadados do conjunto de dados (metadados são as informações que explicam os
dados de uma coluna, informações sobre a coleta, estrutura do arquivo e regras do conjunto de
dados);
o Estude a origem dos dados;
Exemplo: Imagine uma coluna chamada:
Temperatura
Nos metadados você descobre:
Unidade: °C
Frequência: medida a cada hora
Origem: sensor XYZ-2023
Observação: valores “-99” indicam falha de leitura
👉 Sem os metadados, você acharia que -99°C é real e trataria como dado válido.
Regularização de Dados
📌 1. Problema: Dados com ruídos e outliers
Dados coletados podem apresentar falhas como:
o Valores faltantes
o Dados corrompidos
o Pontos fora da curva (outliers)
Outlier = valor muito distante do padrão da maioria dos dados.
Exemplo: na série [1, 1, 2, 3, 4, 5, 6, 100, 7, 8, 9, 50]
→ 100 e 50 são outliers porque estão muito longe dos demais valores.
📌 2. Por que outliers são um problema?
Podem distorcer análises.
Afetam médias, variâncias e algoritmos de aprendizado.
Fazem o sistema apresentar resultados inconsistentes ou indesejados.
📌 3. O que fazer com valores muito distantes?
Existem duas opções principais:
✔️(a) Remover os outliers
Adequado quando:
o Existem poucos outliers.
o Eles são claramente erros.
✔️(b) Manter e tratar via regularização
Usado quando:
o Queremos aproveitar todos os dados.
o Os valores extremos podem ser importantes.
o Queremos evitar que eles “desbalanceiem” o conjunto.
🎯 4. O que é regularização?
Regularizar significa colocar os dados numa mesma escala.
Dessa forma:
o Outliers deixam de influenciar tanto.
o A base fica mais homogênea.
o Algoritmos de aprendizado trabalham melhor.
📐 5. Regularização Min-Max
É uma das técnicas mais usadas.
✔️Como funciona?
Coloca todos os valores numa escala entre 0 e 1.
✔️Fórmula:
d observado
d max −d min
✔️O que a fórmula faz?
d_min → menor valor do conjunto
d_max → maior valor
O valor observado é “espremido” entre 0 e 1.
✔️Resultado
O menor valor da base vira 0
O maior valor vira 1
Todos os outros ficam proporcionalmente entre esses dois pontos
# Importando bibliotecas necessárias
import pandas as pd # Usada para manipulação e análise de dados em formato de tabelas (DataFrames)
import numpy as np # Biblioteca para cálculos numéricos e manipulação de arrays
from [Link] import MinMaxScaler # Ferramenta para normalização de dados (escalonamento entre
0 e 1)
# Lista com valores fictícios de pressão sistólica (em mmHg)
pressao_sistolica = [
70, 118, 122, 130, 110, 125, 135, 128, 119, 132,
115, 140, 138, 121, 134, 129, 126, 137, 133, 127,
120, 123, 131, 124, 136, 139, 117, 116, 113, 112,
111, 112, 114, 130, 128, 134, 137, 122, 119, 125,
200, 220, 118, 132, 135, 129, 121, 117, 125, 133
]
# Criando um DataFrame a partir da lista de valores
# Isso organiza os dados em formato de tabela, com uma coluna chamada "Pressão sistólica"
pressao_df = [Link](data=pressao_sistolica, columns=['Pressão sistólica'])
# Exibindo o DataFrame original (valores brutos de pressão sistólica)
display(pressao_df)
# Criando o objeto MinMaxScaler
# Ele será usado para normalizar os dados, transformando-os para o intervalo [0, 1]
scaler = MinMaxScaler()
# Ajustando o scaler aos dados (aprende os valores mínimo e máximo da coluna)
[Link](pressao_df)
# Transformando os dados originais para a escala normalizada
# Cada valor será convertido proporcionalmente entre 0 (mínimo) e 1 (máximo)
novo_pressao_df = [Link](pressao_df)
# Convertendo o resultado novamente para DataFrame
# Mantemos o nome da coluna original e arredondamos os valores para 2 casas decimais
novo_pressao_df = [Link](data=novo_pressao_df, columns=pressao_df.columns).round(2)
# Exibindo o DataFrame com os valores normalizados
display(novo_pressao_df)
# Importando bibliotecas necessárias
import pandas as pd # Manipulação e análise de dados em tabelas (DataFrames)
import numpy as np # Biblioteca para cálculos numéricos e arrays
from [Link] import load_iris # Função para carregar o famoso dataset Iris
from [Link] import MinMaxScaler # Ferramenta para normalização de dados (escala entre 0 e 1)
# Carregando o dataset Iris
# Esse conjunto de dados contém medidas de flores (sepal length, sepal width, petal length, petal width)
# e suas respectivas espécies (Setosa, Versicolor, Virginica).
dados = load_iris()
# Criando um DataFrame com as variáveis independentes (características das flores)
# '[Link]' contém as medidas numéricas e 'dados.feature_names' são os nomes das colunas
iris_df = [Link](data=[Link], columns=dados.feature_names)
# Adicionando uma coluna com os valores da variável alvo (espécie da flor codificada como 0, 1 ou 2)
iris_df['encoded_target'] = [Link]
# Exibindo o DataFrame original com as medidas e a espécie codificada
display(iris_df)
# Criando o objeto MinMaxScaler
# Ele será usado para normalizar os dados, transformando-os para o intervalo [0, 1]
scaler = MinMaxScaler()
# Ajustando o scaler aos dados (aprende os valores mínimo e máximo de cada coluna)
[Link](iris_df)
# Transformando os dados originais para a escala normalizada
# Cada valor de cada coluna é convertido proporcionalmente entre 0 (mínimo) e 1 (máximo)
novo_iris_df = [Link](iris_df)
# Convertendo o resultado novamente para DataFrame
# Mantemos os nomes das colunas originais e arredondamos os valores para
2 casas decimais
novo_iris_df = [Link](data=novo_iris_df,
columns=iris_df.columns).round(2)
# Exibindo o DataFrame com os valores normalizados
display(novo_iris_df)
🧠 6. Por que isso ajuda com outliers?
Quando tudo fica entre 0 e 1, um valor muito alto deixa de ser tão “impactante”.
A diferença entre valores se torna proporcional, evitando distorções.
🎨 7. Relação com o gráfico (boxplot)
O gráfico boxplot mostra um ponto que está muito longe do restante → outlier.
A regularização ajuda a “reduzir” o impacto desse ponto para análises e modelos.
Demonstração com Python e Pandas
1. Como inserir dados em scripts Python
Os dados podem vir de:
o Coletas automáticas (scraping) com bibliotecas como BeautifulSoup e Scrapy.
o Arquivos locais, geralmente CSV, Excel ou JSON.
2. Importando a biblioteca Pandas
import pandas as pd
Pandas é a principal ferramenta em Python para trabalhar com tabelas (DataFrames).
3. Lendo arquivos CSV
df = pd.read_csv('./DIRETORIO/[Link]')
CSV = arquivo separado por vírgulas.
Por padrão:
o A primeira linha é o cabeçalho (nomes das colunas).
o O separador padrão é a vírgula, mas pode ser alterado usando sep=";", por exemplo.
4. Lendo arquivos Excel
df = pd.read_excel('./DIRETORIO/[Link]')
Funciona de forma parecida com read_csv.
Por padrão:
o Lê a primeira aba (sheet) do arquivo.
o O separador padrão é o tab (tabulação), mas também pode ser alterado.
5. Lendo arquivos JSON
df = pd.read_json('./DIRETORIO/[Link]', orient='records')
Pandas consegue ler estruturas mais complexas como:
o Lista de dicionários
o Registros em formato JSON
O parâmetro orient indica como os dados estão organizados no JSON:
o "records" = lista de dicionários, um por linha.
o "split" = valores organizados por colunas.
6. Convertendo listas de dicionários em DataFrame (método comum)
json_array = [{'a':1,'b':2}, {'a':3,'b':4}, {'a':5,'b':6}]
df = [Link](json_array)
Muito usado quando os dados já estão no próprio código.
7. Quando o JSON vem como string
import json
json_array = "[{'a':1,'b':2}, {'a':3,'b':4}, {'a':5,'b':6}]"
df = [Link]([Link](json_array))
Vale ressaltar que nem todos os arquivos JSON já vêm no formato de lista de dicionários, mas sim como
strings convertidas.
É necessário decodificar a string para um formato válido antes de criar o DataFrame.
8. Salvando (exportando) dados com Pandas
As funções mais comuns são:
df.to_csv('./DIRETORIO/[Link]')
df.to_excel('./DIRETORIO/[Link]')
df.to_json('./DIRETORIO/[Link]', orient='records')
Atenção ao parâmetro orient, especialmente ao exportar JSON:
o Ele garante compatibilidade com outros sistemas que irão ler esses dados.
9. Leituras avançadas
Pandas também pode ler dados de:
o Bancos de dados SQL, usando pd.read_sql().
o URLs, baixando arquivos diretamente da internet.
o Conexões ODBC e JDBC (dependendo do banco de dados).
Manipulação de dados no Python
DataFrames e Tabelas no Pandas
📌 O que é um DataFrame?
É uma estrutura de dados do Pandas semelhante a uma tabela de banco de dados.
Pode ser criado a partir de várias fontes:
o Arquivos CSV
o Arquivos Excel
o Listas de dicionários
o Matrizes
o Junções de listas
📌 Semelhança entre DataFrames e tabelas de banco de dados
Colunas têm tipos específicos
o Ex.: object → equivalente a varchar (texto).
Index (índice)
o Marca cada linha.
o Ajuda a ordenar e localizar dados.
o Similar ao índice (PRIMARY KEY) em tabelas SQL.
📌 Como descrever o conteúdo de um DataFrame no
Pandas?
🔍 OPÇÃO 1. [Link]()
Exibe:
o Número de linhas e colunas.
o Nome e tipo de cada coluna.
o Quantidade de valores não nulos.
o Uso de memória.
🔍 OPÇÃO 2. [Link]()
Exibe estatísticas básicas (principalmente para dados categóricos):
o count – quantidade de dados por
coluna
o unique – número de valores diferentes
o top – valor mais frequente
o freq – frequência desse valor
📌 Exemplos
📌 Por que essas funções são úteis?
Permitem conhecer rapidamente a estrutura do DataFrame.
Ajudam a identificar:
o Tipos de dados incorretos.
o Presença de valores nulos.
o Possíveis inconsistências.
Facilitam o planejamento de limpeza e análise dos dados.
Manipulação de Dados em DataFrames (Pandas)
📌 1. DataFrames funcionam como tabelas (SQL)
Assim como em bancos de dados (MySQL, PostgreSQL etc.), podemos:
o Projetar (selecionar colunas)
o Selecionar (filtrar linhas)
o Deletar
o Fazer junções
Métodos principais:
loc → seleção por rótulos (colunas)
iloc → seleção por índices numéricos
query → seleção usando expressões tipo SQL
✅ 2. Seleção com loc (por rótulos)
✔ Exemplo:
📌 Resumo:
[Link]['vibora'] → retorna uma linha (tipo Series).
[Link][['vibora', 'cascavel']] → retorna duas linhas (tipo DataFrame).
✅ 3. Seleção com iloc (por posição numérica)
✔ Exemplo:
📌 Resumo dos prints:
[Link][0] → primeira linha
[Link][[0]] → primeira linha como DataFrame
[Link][[0,1]] → linhas 0 e 1
[Link][:3] → linhas 0, 1 e 2
[Link][lambda x: [Link] % 2 == 0] → linhas onde o índice é par
[Link][[0,2],[1,3]] → linhas 0 e 2 / colunas 1 e 3
[Link][1:3,0:3] → linhas 1 a 2 / colunas 0 a 2
✅ 4. Seleção com query() (modo SQL)
✔ Exemplo:
📌 Resumo:
[Link]('A > B') → seleciona linhas onde A é maior que B
Para nomes de colunas com espaço → usar crase `C C`
df[df.A > df.B] → alternativa sem query
✅ 5. Deleção de colunas e linhas
✔ Remover colunas:
df = [Link](columns=['col1', 'col2', 'col3'])
# ou
[Link](columns=['col1', 'col2', 'col3'], inplace=True)
✔ Remover linhas pelo índice:
[Link]([0,1], inplace=True)
✔ Remover valor da célula:
[Link][2, 1] = None
✅ 6. Resetar o index (reindexar)
df = df.reset_index(drop=True)
# ou
df.reset_index(drop=True, inplace=True)
📌 Resumo: Reorganiza os índices após deleções, deixando o DataFrame "limpo".
✅ 7. Junções (concat, merge, join)
🔷 concat — une DataFrames empilhando ou lado a lado
import pandas as pd
# Criando a primeira Series 's1'
# Ela contém os valores 'a' e 'b'
s1 = [Link](['a', 'b'])
# Criando a segunda Series 's2'
# Ela contém os valores 'c' e 'd'
s2 = [Link](['c', 'd'])
# Usando [Link] para juntar as duas Series lado a lado
# axis=1 → significa que a concatenação será feita por colunas
resultado = [Link]([s1, s2], axis=1)
# Mostrando o resultado
print(resultado)
📌 axis=1 → junta lado a lado
📌 Pode usar ignore_index=True para resetar automaticamente.
🔷 merge — junção estilo SQL (chave estrangeira)
import pandas as pd
# Criando o primeiro DataFrame 'df1'
# Ele tem duas colunas: 'lkey' (chave da esquerda) e 'value'
df1 = [Link]({
'lkey': ['foo', 'bar', 'baz', 'foo'],
'value': [1, 2, 3, 5]
})
# Criando o segundo DataFrame 'df2'
# Ele tem duas colunas: 'rkey' (chave da direita) e 'value'
df2 = [Link]({
'rkey': ['foo', 'bar', 'baz', 'foo'],
'value': [5, 6, 7, 8]
})
# Fazendo o merge (junção) entre df1 e df2
# - left_on='lkey' → usa a coluna 'lkey' de df1 como chave
# - right_on='rkey' → usa a coluna 'rkey' de df2 como chave
# - suffixes → adiciona sufixos para diferenciar as colunas 'value' que existem nos dois
DataFrames
resultado = [Link](df2,
left_on='lkey',
right_on='rkey',
suffixes=("_left", "_right"))
# Mostrando o resultado da junção
print(resultado)
📌 Permite definir:
chave da esquerda (lkey)
chave da direita (rkey)
sufixos para colunas duplicadas (_left, _right)
🔷 join — junção baseada no index
import pandas as pd
# Criando o primeiro DataFrame 'df'
# Ele tem duas colunas: 'key' e 'A'
df = [Link]({
'key': ['K0','K1','K2','K3','K4','K5'],
'A': ['A0','A1','A2','A3','A4','A5']
})
# Criando o segundo DataFrame 'other'
# Ele tem duas colunas: 'key' e 'B'
other = [Link]({
'key': ['K0','K1','K2'],
'B': ['B0','B1','B2']
})
# Fazendo o join entre 'df' e 'other'
# O join usa o índice das linhas (0,1,2,...) para combinar os DataFrames
# lsuffix e rsuffix servem para evitar conflito de nomes de colunas
resultado = [Link](other, lsuffix='_caller', rsuffix='_other')
# Mostrando o resultado
print(resultado)
📌 O join:
Usa index como chave
Pode adicionar sufixos
# Fazendo o join novamente, mas agora com o parâmetro how='right'
# Isso significa que o resultado terá como base o DataFrame 'other' (à direita),
# ou seja, apenas as linhas presentes em 'other' serão mantidas no resultado.
# As colunas de 'df' são adicionadas conforme os índices coincidirem,
# e onde não houver correspondência, será preenchido com NaN.
resultado_2 = [Link](other, lsuffix='_caller', rsuffix='_other', how='right')
print(resultado_2)
✅ 8. Alterar o index para outra coluna
df.set_index("nome_da_coluna")
🎯 Resumo Final
loc → selecionar por rótulo (coluna)
iloc → selecionar por posição
query → selecionar com sintaxe parecida com SQL
drop → deletar linhas/colunas
reset_index → reorganizar índices
concat → unir DataFrames
merge → junção com chaves (tipo SQL)
join → junção pelo index
GroupBy e Apply em DataFrames (Pandas)
📌 1. Para que servem GroupBy e Apply
GroupBy → usado para agregar dados, resumir informações, criar estatísticas e organizar os dados por
grupos.
Apply → usado para aplicar funções a colunas ou linhas, transformando valores (equivalente ao map em
outras linguagens).
Exemplo de aplicação de GroupBy
📌 2. Agrupamento com GroupBy
✔ Como agrupar:
✔ O que acontece:
Os dados são agrupados pela coluna Animal.
A função mean() calcula a média das colunas numéricas em cada grupo.
O index do resultado passa a ser a coluna de agrupamento (Animal).
✔ Outras agregações:
Podemos usar várias agregações com agg():
✔ Para evitar que o agrupamento vire index:
Use reset_index()
📌 3. Apply: aplicando funções em DataFrames
✔ O apply funciona como um map:
Permite aplicar funções:
Em cada coluna (padrão)
Em cada linha (axis=1)
✔ Exemplo completo:
✔ O que acontece:
1. [Link]([Link])
o Calcula √A e √B para todas as linhas.
2. df['A'] = df['A'].apply(lambda x: x + 1)
o Adiciona 1 ao valor de cada célula da coluna A.
3. df['C'] = ... axis=1
o O apply percorre linha por linha.
o Cria uma nova coluna, aplicando a formula C = A + B.
📌 4. Pontos principais
groupby() não calcula nada sozinho, é preciso chamar uma função (ex: mean, sum, count).
Para manter o agrupador como coluna normal, use reset_index().
O apply():
o Modifica conteúdo usando funções personalizadas.
o Pode operar por colunas (padrão) ou linhas (axis=1).
GroupBy é essencial para:
o estatísticas
o sumarização
o análises exploratórias
Visualização de dados no Python
📌 1. Por que classificar dados?
No Big Data, os dados vêm de fontes diversas e podem parecer confusos isoladamente.
Classificar ajuda a:
o escolher técnicas de visualização,
o definir modelos,
o entender melhor o comportamento dos dados.
📌 2. Principais tipos de dados
⭐ A. Dados Numéricos
Representam quantidades, valores que podem ser medidos ou calculados.
o Exemplos: preços, idade, notas, temperaturas, distâncias.
Permitem operações matemáticas (média, soma, desvio padrão etc.).
⚠ Atenção importante:
o Alguns dados parecem numéricos, mas são apenas categorias disfarçadas.
Ex.: notas 1–5 representando conceitos (A, B, C…).
o Certos valores numéricos podem virar categorias quando são agrupados.
Ex.: idade → "jovem", "adulto", "idoso".
Ex.: temperatura → "frio", "ameno", "quente".
⭐ B. Dados Categóricos
Representam rótulos, identificadores ou nomes.
Normalmente são textos, mas podem aparecer como números quando representam classes.
Exemplos:
o estados civis (solteiro, casado…)
o cores (azul, verde…)
o categorias de produto
o códigos (tipo 1 = bronze, 2 = prata, 3 = ouro)
⭐ C. Dados Temporais
Representam informações no tempo, indicando sequência ou cronologia.
Exemplos:
o datas (2025-01-01)
o dias da semana
o meses, anos
o horas e minutos
o índices temporais (1º trimestre, século XX)
Muito usados em:
o séries temporais
o previsões
o análise de tendências
📌 3. Por que isso é importante?
Ajuda a escolher:
o o tipo correto de gráfico,
o o tipo de processamento,
o a técnica de modelagem estatística ou de machine learning.
Evita erros comuns, como:
o tratar categorias como números reais,
o confundir ordinal com quantitativo,
o ignorar a importância da ordem em dados de tempo.
Tipos de visualizações de Dados
📌 1. Por que usar visualizações diferentes?
Cada tipo de dado (numérico, categórico ou temporal) tem gráficos mais adequados.
O objetivo é destacar padrões, proporções e relações que não aparecem claramente apenas olhando
tabelas.
📌 2. Visualizações para Dados Numéricos
⭐ A. Histograma
Mostra a distribuição de valores numéricos.
Útil para identificar:
o padrões,
o assimetrias,
o concentrações,
o outliers.
Comando:
import [Link] as px
# Carrega o conjunto de dados "tips"
# Esse dataset contém informações sobre contas e gorjetas em um restaurante
df = [Link]()
# Cria um histograma
# - x='total_bill' → usa os valores da coluna 'total_bill' (valor total da conta)
# O histograma mostra a distribuição dos valores das contas
fig = [Link](df, x='total_bill')
# Exibe o gráfico interativo na tela
[Link]()
⭐ B. Gráfico de Dispersão (Scatterplot)
Mostra a correlação entre duas variáveis numéricas.
Pode usar cores para diferenciar categorias.
Comando:
import [Link] as px
# Carrega o conjunto de dados "iris"
# Esse dataset contém medidas de flores de três espécies diferentes
df = [Link]()
# Cria um gráfico de dispersão (scatter plot)
# - x='sepal_width' → usa a largura da sépala no eixo X
# - y='sepal_length' → usa o comprimento da sépala no eixo Y
# - color='species' → diferencia os pontos pela espécie da flor
# - symbol='species' → usa símbolos diferentes para cada espécie
fig = [Link](df, x='sepal_width', y='sepal_length', color='species', symbol='species')
# Exibe o gráfico interativo na tela
[Link]()
📌 3. Visualizações para Dados Categóricos
⭐ A. Gráfico de Barras (Bar Plot)
Mostra contagem ou proporções de
categorias.
Eixo X → categorias
Eixo Y → quantidade
Comando:
import [Link] as px
# Carrega o conjunto de dados "medals_long"
# Esse dataset mostra a contagem de medalhas por nação em formato longo
long_df = [Link].medals_long()
# Cria um gráfico de barras
# - x='nation' → coloca as nações no eixo X
# - y='count' → usa a contagem de medalhas no eixo Y
# - color='medal' → diferencia as barras pela categoria de medalha (ouro, prata, bronze)
# - title → define o título do gráfico
fig = [Link](long_df, x='nation', y='count', color='medal', title='Long-Form Input')
# Exibe o gráfico interativo na tela
[Link]()
Comentário:
É parecido com um histograma, mas o eixo X é sempre categórico.
⭐ B. Gráfico de Pizza (Pie Chart)
Mostra a proporção de cada categoria.
Útil quando há poucas categorias.
Comando:
import [Link] as px
# Carrega o conjunto de dados "tips" (gorjetas em
restaurante)
df = [Link]()
# Cria um gráfico de pizza (pie chart)
# - values='tip' → usa os valores da coluna 'tip' (gorjetas)
# - names='day' → agrupa os valores pelo dia da semana
fig = [Link](df, values='tip', names='day')
# Exibe o gráfico interativo na tela
[Link]()
Observação:
o Se houver muitas fatias, o gráfico fica ilegível → prefira barras.
📌 4. Visualizações para Dados Temporais
⭐ A. Gráfico de Linhas (Line Plot)
Representa mudanças ao longo do tempo.
Ideal para séries temporais (datas, anos,
meses, horas).
Comando:
import [Link] as px
# Filtrando apenas os dados do continente Oceania
df = [Link]().query("continent == 'Oceania'")
# Criando o gráfico de linha: ano vs expectativa de vida, separado por país
fig = [Link](df, x='year', y='lifeExp', color='country')
# Exibindo o gráfico
[Link]()
Observação:
o O eixo X deve ser temporal.
o Pode colorir séries por categorias (ex.: país).
o Evitar muitas categorias coloridas → pode poluir o gráfico.
🎯 Resumo final
Dados numéricos → histograma e scatterplot
Dados categóricos → barras e pizza
Dados temporais → linha
Use cores e agrupamentos com cuidado:
muitos valores únicos podem dificultar a leitura.
Biblioteca Plotly
📌 1. O que é a Plotly?
É uma biblioteca de visualização gráfica interativa para Python.
Funciona muito bem no Jupyter Notebook, oferecendo:
o interação com o mouse,
o zoom,
o movimentação (pan),
o informações detalhadas ao passar o cursor,
o exportação dos gráficos.
📌 2. Como instalar
A instalação é feita pelo pip:
pip install plotly
📌 3. Como importar
Para usar os gráficos de forma simples, importa-se o módulo express:
import [Link] as px
📌 4. Catálogo de gráficos
A Plotly possui muitas visualizações prontas, como:
o histogramas,
o dispersão (scatter),
o barras,
o pizza,
o linha,
o mapas,
o bubble charts,
o e muito mais.
A documentação oficial contém todos os tipos disponíveis.
📌 5. Exemplo de visualização — Bubble Chart
Um bubble chart (gráfico de bolhas) é uma variação do scatterplot:
o Eixo X → variável numérica
o Eixo Y → variável numérica
o Tamanho da bolha → outra variável
o Cor → categoria
o Nome ao passar o mouse → informações detalhadas
Código do exemplo:
import [Link] as px # Importa a biblioteca Plotly Express para criar gráficos
interativos
df = [Link]() # Carrega o dataset "gapminder", que contém dados de países ao longo
dos anos
fig = [Link]( # Cria um gráfico de dispersão (scatter plot)
[Link]('year==2007'), # Filtra os dados apenas para o ano de 2007
x='gdpPercap', # Define o eixo X como o PIB per capita
y='lifeExp', # Define o eixo Y como a expectativa de vida
size='pop', # O tamanho dos pontos representa a população de cada país
color='continent', # A cor dos pontos diferencia os continentes
hover_name='country', # Mostra o nome do país ao passar o mouse sobre o ponto
log_x=True, # Usa escala logarítmica no eixo X (PIB per capita)
size_max=60 # Define o tamanho máximo dos pontos no gráfico
)
[Link]() # Exibe o gráfico interativo na tela
O que esse gráfico mostra:
Relação entre:
o renda per capita (gdpPercap)
o expectativa de vida (lifeExp)
Agrupado por continente (cores).
O tamanho da bolha representa a
população de cada país.
🎯 Em resumo
A Plotly permite criar gráficos interativos e profissionais com poucos comandos.
Fácil de instalar, fácil de usar.
Ideal para análises exploratórias e apresentações.
TEMA 6. BIG DATA ANALYTICS
Introdução
1. O cenário atual dos dados
Vivemos em um mundo repleto de dados gerados o tempo todo.
Termos como ciência de dados, business analytics, inteligência artificial (IA) e aprendizado de máquina são
comuns, mas não significam a mesma coisa.
A área de dados está em forte crescimento e tem grande demanda no mercado de Tecnologia da Informação.
2. Por que a área de dados cresce tanto
A grande quantidade de informações exige ferramentas e profissionais capazes de analisá-las.
Compreender esse crescimento ajuda a entender como as “máquinas inteligentes” aprendem e por que isso
é útil.
O uso correto de dados pode trazer benefícios significativos para a sociedade, em diversas áreas.
3. Diferenças dentro da Inteligência Artificial
Existem tipos diferentes de IA, cada um adequado a um tipo de problema.
Cada tipo de IA utiliza métodos e técnicas específicas.
Conhecer essas diferenças permite escolher a melhor estratégia para cada situação.
4. Aplicações práticas e ferramentas
Ao entender os tipos de IA e seus métodos, fica mais fácil implementar modelos.
A linguagem Python oferece bibliotecas prontas que ajudam nesse processo.
5. Orientação sobre unidades de medida
No material de estudo, números e unidades aparecem juntos (ex.: 25km) apenas por conveniência.
O padrão correto, segundo o Inmetro, é usar espaço entre número e unidade (ex.: 25 km).
Em relatórios técnicos e documentos formais, sempre use esse padrão internacional.
O processo de KDD no contexto da inteligência artificial
Motivação
1. Popularização da ciência de dados
Cresce pela capacidade de gerar análises rápidas, eficientes e com menor custo.
Para entender esse crescimento, é preciso voltar à origem da internet.
2. Origem da internet
Década de 1960: criada como ARPANET, projeto militar dos EUA para comunicação segura.
Objetivo inicial: manter comunicações e inteligência militar mesmo em caso de ataques.
3. Expansão para o meio acadêmico
Década de 1970: universidades passaram a utilizar e expandir a rede.
Esse uso acadêmico ajudou a consolidar o formato de internet que conhecemos hoje.
4. Popularização da internet
Anos 1980: computadores pessoais se tornam comuns.
Década de 1990: surge a World Wide Web (Web), levando a internet para o público em geral.
5. Evolução da Web
Web 1.0 – A web do consumo (anos 1990)
Usuários apenas consumiam informações.
Conteúdos eram produzidos por órgãos governamentais, universidades e centros de pesquisa.
Acesso restrito a locais como bibliotecas e gabinetes.
Web 2.0 – A web da colaboração (anos 2000)
Também chamada de Web Semântica.
Crescimento do uso doméstico do computador.
Surgimento de blogs, fóruns, redes sociais iniciais e e-commerce com CRM.
Usuários passam de consumidores para produtores de conteúdo.
6. A virada dos smartphones (a partir de 2007)
Evolução dos celulares para smartphones impulsionou a produção de dados.
Aumento enorme no volume, variedade e velocidade de dados.
Esse fenômeno ficou conhecido como Big Data, definido pelos 3 Vs:
o Volume: grande quantidade de dados.
o Variedade: diferentes formatos (texto, imagem, vídeo etc.).
o Velocidade: dados gerados e transmitidos rapidamente.
7. Transição para a Web 3.0
Com Big Data e dispositivos conectados, surgem dados personalizados em massa.
Web 3.0 é a web da hiperpersonalização.
Algoritmos e motores de busca passam a identificar padrões e recomendar conteúdos.
Organizações usam grandes volumes de dados para melhorar negócios.
Esse cenário reacende a inteligência artificial, gerando áreas como:
o Mineração de dados
o Ciência de dados
Definição de Inteligência Artificial (IA)
1. O que é Inteligência Artificial
IA é uma área da computação que busca criar métodos e dispositivos capazes de imitar ou ampliar a
capacidade humana de pensar, resolver problemas e agir de forma inteligente.
Também é chamada de inteligência de agentes ou agentes inteligentes/cognitivos.
2. Como as máquinas simulam o comportamento humano
Usam diferentes formas de processamento, como:
o Processamento de Linguagem Natural (PLN) – entendimento de textos e fala.
o Visão Computacional / Processamento de Imagens – interpretação de imagens e vídeos.
o Representação do Conhecimento e Raciocínio Lógico – uso de regras, lógica e inferências.
o Sistemas de agentes – softwares que tomam decisões com base no ambiente.
Agentes inteligentes:
o Aprendem com o ambiente por meio de sensores (observam) e atuadores (agem).
o Decidem e aprendem através de processamentos lógicos e aprendizado de máquina.
3. Tipos principais de IA
Existem duas grandes abordagens:
A. IA simbólica
Conhecimento representado por regras lógicas, fórmulas ou árvores de decisão.
Fácil de interpretar e relacionar ao raciocínio humano.
Baseia-se em símbolos, axiomas e regras já conhecidas.
Funciona bem quando o problema pode ser descrito com lógica clara e estruturada.
B. IA subsimbólica ou conexionista
Conhecimento representado por modelos classificadores ou redes neurais.
Surge devido às limitações da IA simbólica em lidar com problemas complexos e flexíveis.
Capaz de realizar processamentos mais robustos, mesmo sem regras explícitas.
O raciocínio fica “oculto” no modelo, não sendo totalmente transparente ao usuário.
Aprendizado de Máquina
1. O que é aprendizado de máquina
É a forma de implementar os processos cognitivos que a IA tenta imitar.
Assim como humanos usam diferentes formas de pensar para tarefas diversas, a IA também usa diferentes
métodos para resolver tipos de problemas.
2. Métodos de aprendizado de máquina
✔ Aprendizado supervisionado
O modelo aprende com exemplos já rotulados (com respostas corretas).
Tem entradas e saídas conhecidas para aprender o padrão.
✔ Aprendizado não supervisionado
O modelo recebe dados sem rótulos.
Ele próprio encontra padrões, grupos e estruturas analisando similaridades.
✔ Aprendizado semissupervisionado
Parte dos dados é rotulada e a maior parte não é.
O modelo usa a pequena parte rotulada para generalizar padrões no restante dos dados.
✔ Aprendizado por reforço
O agente aprende interagindo com o ambiente.
Recebe recompensas ou punições dependendo de suas ações.
Aprende políticas que maximizam recompensas no longo prazo.
3. Principais técnicas de aprendizado de máquina
✔ Classificação (supervisionado)
Categoriza dados em classes (ex.: spam/não spam).
Aprende com registros históricos e suas características.
✔ Regressão (supervisionado)
Parecida com a classificação, mas o resultado é numérico, não categórico.
Ex.: prever preço, temperatura, vendas etc.
✔ Agrupamento (não supervisionado)
O modelo forma grupos de dados semelhantes sem usar rótulos.
Baseia-se em critérios de similaridade.
Big Data e o Boom da IA
1. A origem da IA
A Inteligência Artificial surgiu nos anos 1950, antes da internet.
No começo, era muito limitada e não atraía grandes investimentos das empresas.
2. A virada causada pela Web e pela produção de dados
Com a Web 2.0 e o uso massivo da internet a partir dos anos 2000, o volume de dados cresceu rapidamente.
O ano de 2007, com o avanço dos smartphones, acelerou ainda mais a geração de dados.
Passamos a ter dados em grande volume, variedade e velocidade — características do Big Data.
3. Como o Big Data impulsionou a IA
A grande quantidade de dados permitiu que modelos de IA se tornassem mais eficientes e úteis.
A IA ganhou força, popularidade e credibilidade porque agora era possível treinar modelos robustos.
Os avanços tecnológicos e novos problemas surgidos na sociedade conectada estimularam ainda mais as
pesquisas em IA.
4. Papel da ciência de dados no crescimento da IA
A ciência de dados é o processo de analisar e resolver problemas de negócio usando:
o técnicas de aprendizado de máquina,
o métodos de processamento de dados (mineração de dados).
A ciência de dados descobre padrões ocultos na massa de dados.
Ajuda organizações a tomar decisões, adaptando sistemas ao ambiente e:
o maximizando ganhos,
o reduzindo custos.
5. Consolidação da IA no mercado
A combinação entre Big Data + aprendizado de máquina + ciência de dados fez a IA se tornar uma
tecnologia cada vez mais presente e aplicada.
Hoje, a IA está praticamente consolidada como ferramenta essencial no mercado.
Descoberta de Conhecimento em Bases de Dados (KDD)
1. Conceitos fundamentais
✔ Dado
Valor isolado, sem significado por si só.
Ex.: 38.
✔ Informação
Dado processado e contextualizado.
Ex.: 38 como temperatura corporal → começa a fazer sentido.
✔ Conhecimento
Relação entre múltiplas informações + contexto.
Ex.: idade, temperatura, peso, altura, contato com COVID → possível diagnóstico.
✔ Sabedoria
Uso do conhecimento para tomar decisões práticas.
Ex.: uma prescrição médica baseada no diagnóstico.
2. O que é um sistema de informação
Conjunto de partes que trabalham juntas.
Recebem dados, processam e geram informações úteis.
Exemplos: sistemas de cadastro, bancos de dados, sistemas analíticos.
3. Mineração de dados x KDD
Mineração de dados é apenas uma etapa do processo maior chamado KDD – Knowledge Discovery in
Databases.
KDD é o conjunto de etapas para descobrir padrões e gerar conhecimento a partir de dados.
4. Etapas do KDD
1) Coleta de dados
Captura dos dados de uma organização.
Conjunto geralmente grande → inclui informações úteis e inúteis (Big Data).
2) Seleção
Escolha das características relevantes da base de dados.
Separar o que importa do que não importa para o problema.
3) Pré-processamento
Etapa mais longa (≈70% do trabalho).
Inclui:
o limpeza de dados,
o tratamento de dados faltantes/corrompidos,
o integração com outras bases.
4) Transformação
Ajuste e preparação fina dos dados:
o normalização de escalas,
o redução de dimensionalidade,
o seleção automática de atributos.
Objetivo: deixar os dados consistentes e com menos ruído.
5) Mineração de dados (ou descoberta de padrões)
Aplicação de algoritmos de aprendizado de máquina adequados ao problema.
Modelo é treinado e testado para identificar padrões.
6) Avaliação e apresentação
Verifica se o modelo aprendeu de verdade ou apenas decorou.
Uso de métricas e visualizações para avaliar qualidade e impacto para o negócio.
Resultado final: conhecimento útil para tomadas de decisão.
5. Resultado do processo KDD
Os padrões descobertos transformam dados → informação → conhecimento → sabedoria.
Esses conhecimentos podem ser usados por outros sistemas para resolver problemas reais.
CRISP-DM e sua diferença para o KDD
1. O que é o CRISP-DM
Significa Cross Industry Standard Process for Data Mining.
É considerado por muitos um subconjunto do KDD.
Possui seis etapas, assim como o KDD:
o Entendimento do Negócio
o Entendimento dos Dados
o Preparação de Dados
o Modelagem
o Avaliação
o Implantação
2. Semelhanças entre CRISP-DM e KDD
As etapas correspondem da seguinte forma:
CRISP-DM KDD
Preparação de Seleção, Pré-Processamento e Transformação
Dados
Modelagem Mineração de Dados
Avaliação Avaliação e Apresentação dos Resultados
Suas operações são essencialmente equivalentes nessas etapas.
Por isso, o CRISP-DM é conhecido como o KDD da indústria.
3. Principais diferenças entre os processos
✔ Etapas iniciais
CRISP-DM enfatiza:
o Entendimento do Negócio
o Entendimento dos Dados
KDD inicia com:
o Coleta de Dados
✔ Etapa final
CRISP-DM inclui Implantação, ou seja, colocar o modelo em uso real no negócio.
KDD termina com a descoberta de conhecimento, sem obrigação de entregar um artefato pronto.
✔ Entrega de valor
CRISP-DM: entrega um modelo de aprendizado de máquina aplicável ao problema do negócio.
KDD: entrega conhecimento e padrões descobertos — o suficiente para estudos e análises estratégicas.
4. Onde cada processo é mais usado
Indústria → prefere CRISP-DM, pois precisa de soluções operacionais (modelos implantáveis).
Academia → prefere KDD, pois o foco é conhecimento e fundamentação teórica.
5. Conclusão essencial
A maior diferença entre os dois processos é o tipo de entrega final:
o CRISP-DM → entrega modelo
o KDD → entrega conhecimento
Aprender KDD fornece a base; CRISP-DM é a aplicação prática desses fundamentos na indústria.
Aplicações de Aprendizado de Máquina com Scikit-Learn
Motivação (Aprendizado de Máquina no KDD/CRISP-DM)
Objetivo do módulo:
Realizar demonstrações práticas de técnicas de aprendizado de máquina.
Onde isso se encaixa no processo de dados:
o Faz parte da mineração de dados ou descoberta de padrões no processo KDD.
o Corresponde à etapa de modelagem no processo CRISP-DM.
Tipo de aprendizado utilizado:
O módulo usa aprendizado supervisionado, que funciona com exemplos de treinamento contendo entradas
e respostas corretas.
Método escolhido para demonstração:
o A técnica mais comum e intuitiva do mercado: classificação.
→ Objetivo: prever categorias (ex.: "spam" ou "não spam").
Técnicas de classificação utilizadas nos exemplos:
o SVM (Support Vector Machine):
Modelo que encontra a melhor fronteira para separar categorias.
o Árvore de Decisão:
Modelo baseado em perguntas sucessivas ("nós") que levam a uma classificação final.
✅ Demonstração de Classificação com SVM (Scikit-Learn)
📌 1. Instalação e importação das bibliotecas necessárias
Para trabalhar com SVM usando Python e Scikit-Learn, importamos:
import pandas as pd # Biblioteca para manipulação de dados em tabelas (DataFrames)
import numpy as np # Biblioteca para cálculos numéricos e criação de arrays
from matplotlib import pyplot as plt # Biblioteca para criação de gráficos
📌 2. Carregando o dataset Íris
O dataset Íris é um clássico do aprendizado de máquina.
Ele contém medidas de flores (pétala e sépala) e suas respectivas classes (targets).
Comandos:
from [Link] import load_iris # Função que carrega o dataset clássico Iris
data = load_iris() # Carrega o dataset na variável 'data'
iris = [Link](data['data'], # Converte os dados em um DataFrame pandas
columns=data.feature_names) # Define os nomes das colunas com as features
do dataset
target = [Link] # Vetor com as classes (0, 1, 2)
📌 3. Instanciação do classificador SVM (SVC)
No Scikit-Learn, o SVM de classificação é representado por SVC.
Usamos um parâmetro simples: gamma='auto'.
Comandos:
from sklearn.model_selection import cross_val_score # Importa método para validação cruzada
from [Link] import SVC # Importa o classificador SVM (Support Vector
Classifier)
svc = SVC(gamma='auto') # Instancia o SVM com parâmetro gamma ajustado automaticamente
📌 4. Treinamento e avaliação com validação cruzada
A validação cruzada divide o conjunto de dados em 10 partes (cv=10).
O modelo treina em 9 e testa em 1 repetidamente.
A média da acurácia mostra o desempenho geral.
Comandos:
# Testando o modelo 'svc' da base 'iris'
cv_result = cross_val_score( # Executa validação cruzada com o modelo SVM
svc, # Modelo a ser avaliado
iris, # Dados de entrada
target, # Classes verdadeiras
cv=10, # Número de divisões da validação cruzada (10-fold)
scoring='accuracy' # Métrica usada: acurácia
)
# Imprime a média da acurácia multiplicada por 100 (em porcentagem)
print('Acurácia com cross validation:', cv_result.mean()*100)
# Imprime: Acurácia com cross validation: 98.00000000000001
📌 5. Treinando o modelo completo e fazendo uma predição
Após a avaliação, treinamos o SVM com todos os dados.
Fazemos uma predição para uma nova flor com valores inéditos.
Comandos:
[Link](iris, target) # Treina o modelo SVM usando todo o conjunto de dados
[Link]([[6.9,2.8,6.1,2.3]]) # Prediz a classe de uma nova flor baseada nas 4 medidas
informadas
📌 6. Visualização dos dados (scatter plot)
Mostra como as classes do dataset se distribuem.
Comandos:
[Link](iris['sepal length (cm)'], # Eixo X: comprimento da sépala
iris['petal width (cm)'], # Eixo Y: largura da pétala
c=target) # Cor das amostras representando a classe
[Link]('Iris') # Título do gráfico
📌 7. Visualização dos hiperplanos do SVM
Para mostrar a separação criada pelo SVM, usamos apenas 2 features:
sepal length e petal width.
Gera uma malha de pontos (meshgrid), faz predições e plota o mapa de decisão.
Comandos:
# Definindo os limites do gráfico com base nos valores existentes nos dados
x0_min, x0_max = iris['sepal length (cm)'].min(), iris['sepal length (cm)'].max()
x1_min, x1_max = iris['petal width (cm)'].min(), iris['petal width (cm)'].max()
w = x0_max - x0_min # Largura do eixo X para ajuste
h = x1_max - x1_min # Altura do eixo Y para ajuste
# Cria uma grade de coordenadas (meshgrid) usada para traçar o contorno do SVM
x0, x1 = [Link](
[Link](x0_min - .1*w, x0_max + .1*w, 300), # 300 pontos ao longo do eixo X
[Link](x1_min - .1*h, x1_max + .1*h, 300) # 300 pontos ao longo do eixo Y
)
# Treina o SVM usando apenas duas features para visualização
[Link](iris[['sepal length (cm)', 'petal width (cm)']], target)
# Faz predições para cada ponto da malha
ypred = [Link](np.c_[[Link](-1, 1), # Converte a grade em uma lista de coordenadas
[Link](-1, 1)])
ypred = [Link]([Link]) # Ajusta o formato da predição para combinar com o grid
[Link](x0, x1, ypred) # Desenha o mapa de decisão (regiões definidas pelo SVM)
[Link](iris['sepal length (cm)'], # Plota novamente os pontos reais
iris['petal width (cm)'],
c=target, # Cores pelas classes
s=64, # Tamanho dos pontos
edgecolors='k') # Contorno preto nos marcadores
[Link]('Iris') # Título
[Link]() # Mostra o gráfico completo
📌 8. Conclusão da visualização
O SVM conseguiu separar bem as classes com hiperplanos.
Alguns outliers aparecem entre os limites, mas o SVM os ignora para evitar superajuste (overfitting).
Isso torna o classificador mais generalista e eficaz.
✅ Demonstração de Classificação com Árvore de Decisão (Scikit-Learn)
📌 1. Bibliotecas necessárias
Para implementar uma árvore de decisão, utilizam-se apenas:
sklearn – fornece algoritmo e dataset.
matplotlib – usada para gerar a visualização da árvore.
Comandos usados:
import [Link] as plt # Biblioteca usada para criar gráficos e visualizar
a árvore
from [Link] import load_iris # Função para carregar o dataset clássico Iris
from sklearn.model_selection import cross_val_score # Método para executar validação cruzada
from [Link] import DecisionTreeClassifier, plot_tree # Algoritmo Árvore de Decisão e função
para desenhar a árvore
📌 2. Carregando o dataset e configurando o modelo
O dataset usado é o Iris, clássico em aprendizado de máquina.
O modelo configurado é uma árvore de decisão com:
o max_depth=3 (limita profundidade da árvore)
o random_state=0 (reprodutibilidade dos resultados)
Comandos:
# Instancia o classificador de árvore de decisão
# max_depth=3 limita a profundidade da árvore (ajuda a evitar overfitting)
# random_state=0 garante que os resultados sejam sempre os mesmos
clf = DecisionTreeClassifier(max_depth=3, random_state=0)
iris = load_iris() # Carrega o dataset Iris com dados e classes
# Executa validação cruzada com 10 divisões (10-fold)
# [Link] contém as features (medições das flores)
# [Link] contém as classes (espécies de Iris)
# Retorna uma lista com as acurácias obtidas em cada rodada
cross_val_score(clf, [Link], [Link], cv=10)
📌 3. Treinamento do modelo
Após testar a acurácia com validação cruzada, treina-se o modelo completo.
Em seguida, gera-se a árvore resultante.
Comandos:
[Link]([Link], [Link]) # Treina o modelo de árvore de decisão com todo o dataset
plot_tree(clf, filled=True) # Desenha a árvore resultante; filled=True colore os nós por
classe
[Link]() # Exibe o gráfico contendo a árvore de decisão completa
📌 4. Conclusão
Com poucas linhas de código, é possível:
o carregar o dataset,
o avaliar a acurácia com validação cruzada,
o treinar o modelo,
o visualizar toda a árvore de decisão gerada.
A visualização mostra como o algoritmo divide os dados com base em regras simples até chegar às
classificações finais.
Aplicações de Aprendizado Profundo com TensorFlow
✅ Definindo Aprendizado Profundo (Deep Learning)
📌 O que é aprendizado profundo
É um ramo do aprendizado de máquina (machine learning).
Utilizado na etapa de modelagem do CRISP-DM, equivalente à mineração de dados no processo KDD.
Focado em descobrir padrões complexos de forma automática.
📌 Como funciona
Utiliza grafos com várias camadas de processamento.
Essas camadas fazem transformações lineares e não lineares nos dados.
O modelo "desmonta" dados complexos em representações mais simples, como:
o vetores
o matrizes
o séries temporais
📌 Principais vantagens
As camadas profundas fazem pré-processamento automático dos dados:
o extração de características (features)
o limpeza e organização de padrões
Em modelos tradicionais, essas etapas precisariam ser feitas manualmente antes do treinamento.
📌 Por que usa redes neurais
O aprendizado profundo funciona com redes neurais artificiais.
Cada camada ajusta pesos durante o treinamento para melhorar a representação dos dados.
A lógica imita, de forma simplificada, o funcionamento dos neurônios biológicos.
📌 O papel das camadas
Cada camada representa um “aspecto” ou “abstração” da observação.
As camadas ficam progressivamente mais complexas, formando uma hierarquia de entendimento.
Exemplo:
Em redes que reconhecem imagens, cada camada pode representar um aspecto da imagem:
o 1ª camada: detecta linhas.
o 2ª camada: detecta formas simples, como círculos.
o 3ª camada: reconhece combinações de formas, como objetos.
o Conforme as camadas avançam, o modelo entende a imagem de forma mais completa.
✅ Redes Neurais Artificiais
📌 1. Dois grandes grupos da Inteligência Artificial
IA Simbólica
o Baseada em regras, lógica e representações explícitas.
o Aprendizado acontece por meio de conhecimento estruturado.
IA Conexionista (Subsimbólica)
o Aprende diretamente dos dados ou da experiência.
o Não depende de pré-processamento manual.
o Redes neurais pertencem a este grupo.
📌 2. O Perceptron — origem das redes neurais
Criado em 1958, por Frank Rosenblatt.
Simula um neurônio biológico, com:
o entradas,
o saída,
o função de ativação.
Cada perceptron é um classificador linear.
A união de vários perceptrons forma uma rede neural artificial.
📌 3. Tipos principais de redes neurais
🔹 a) Redes Neurais Convolucionais (CNNs)
Muito usadas em processamento de imagens.
Possuem:
o Camada de entrada
o Camadas ocultas com filtros (kernels) que "deslizam" pela imagem
o Camada de saída
Características importantes:
o São invariantes a deslocamentos (identificam padrões mesmo se movidos).
o Aprendem seus próprios filtros, sem precisar de filtros definidos manualmente.
o Têm alta autonomia na extração de características.
🔹 b) Redes Neurais Recorrentes (RNNs)
Usadas para sequências e dados temporais, como texto e séries temporais.
Possuem ciclos na estrutura, permitindo memória dos estados anteriores.
A arquitetura RNN mais famosa é a LSTM (Long Short-Term Memory), criada em 1997.
▪ Por que LSTMs são importantes?
RNNs simples sofrem com dois problemas:
o gradiente desaparecendo (modelo esquece tudo),
o gradiente explodindo (pesos ficam gigantes).
LSTMs resolvem isso usando:
o portas (gates) de controle,
o memória de curto prazo,
o mecanismos de esquecimento regulado.
📌 4. Característica geral das redes neurais
A área é vasta e está em constante evolução.
Cada arquitetura é escolhida conforme o tipo de problema:
o imagens → CNN
o sequências → RNN/LSTM
o dados estruturados → MLP, etc.
✅ Demonstração de redes neurais com TensorFlow e Keras
⭐ O que é o TensorFlow (resumo simples)
TensorFlow é uma biblioteca de código aberto criada pelo Google para construir e treinar modelos de
inteligência artificial.
Ele é muito usado para Deep Learning (aprendizado profundo), que trabalha com redes neurais.
Permite criar modelos que reconhecem imagens, textos, sons, padrões e fazem previsões.
Funciona em diferentes dispositivos: computadores comuns, servidores, celulares e até navegadores.
Trabalha muito bem com grandes volumes de dados e com aceleração por GPU.
É rápido porque usa GPUs e outras otimizações para processar grandes quantidades de dados.
É usado em visão computacional, processamento de linguagem, séries temporais, recomendação, etc.
✔ Em outras palavras: TensorFlow é uma ferramenta que ajuda o computador a aprender com dados e a tomar
decisões inteligentes.
⭐ O que é Keras?
Keras foi criada para facilitar o uso de redes neurais.
Ela implementa automaticamente as operações matemáticas complexas usadas pelas redes neurais (como
multiplicação de matrizes).
Isso significa que o desenvolvedor não precisa lidar diretamente com cálculos de álgebra linear.
Com Keras, o foco passa a ser apenas montar a arquitetura da rede neural (quantas camadas, tipos, funções
de ativação etc.).
Em resumo, Keras abstrai os detalhes difíceis e deixa a construção da rede muito mais simples e intuitiva.
🧠 Resumindo:
TensorFlow = motor poderoso para IA.
Keras = painel fácil de usar para controlar esse motor.
📌 1. Objetivo
Demonstrar como criar, treinar e avaliar uma rede neural simples
usando:
o TensorFlow
o Keras
o MNIST (dígitos escritos à mão)
Utilizando Python em um ambiente como Jupyter Notebook ou Google Colab.
📌 2. Instalação das bibliotecas necessárias
Comandos
pip install --upgrade tensorflow
pip install sklearn numpy matplotlib
pip install keras
Pontos principais:
TensorFlow: framework principal para redes neurais.
sklearn, numpy, matplotlib: suporte para métricas, cálculos numéricos e gráficos.
Keras: biblioteca de alto nível para criação de modelos.
📌 3. Importação das bibliotecas
Comandos
from [Link] import LabelBinarizer # Converte as classes para formato binário
(one-hot)
from [Link] import classification_report # Gera relatório com métricas de
classificação
from [Link] import Sequential # Modelo sequencial (camada após camada)
from [Link] import Dense # Camada densa (totalmente conectada)
from [Link] import SGD # Otimizador Gradiente Descendente
from [Link] import mnist # Dataset MNIST (dígitos escritos à mão)
from [Link] import backend as K # Backend do TensorFlow
import [Link] as plt # Biblioteca para gráficos
import numpy as np # Biblioteca para cálculos numéricos
Pontos principais:
LabelBinarizer: transforma as classes em formato binário (one-hot).
Sequential: modelo sequencial.
Dense: camada totalmente conectada.
SGD: otimizador gradiente descendente.
mnist: conjunto de imagens 28×28 de dígitos escritos à mão.
📌 4. Acessando o dataset MNIST
Comando
# -----------------------------
# ACESSANDO O MNIST
# -----------------------------
print('[INFO] accessing MNIST...') # Mensagem informativa
((trainX, trainY), (testX, testY)) = mnist.load_data() # Carrega dados de treino e teste
Pontos principais:
Baixa automaticamente dados de treino e teste.
📌 5. Preparação dos dados (reshape + normalização)
Comandos
# -----------------------------
# PRÉ-PROCESSAMENTO DOS DADOS
# -----------------------------
# "Achata" as imagens 28x28 para vetores de 784 posições
trainX = [Link](([Link][0], 28 * 28 * 1)) # Ajusta treino para formato apropriado
testX = [Link](([Link][0], 28 * 28 * 1)) # Ajusta teste para formato apropriado
# Normaliza os pixels para valores entre 0 e 1
trainX = [Link]('float32') / 255.0 # Normaliza treino
testX = [Link]('float32') / 255.0 # Normaliza teste
Pontos principais:
Cada imagem 28 × 28 é transformada em vetor 784.
Normaliza para valores entre 0 e 1.
📌 6. Binarização das classes
Comandos
# -----------------------------
# BINARIZAÇÃO DAS CLASSES
# -----------------------------
lb = LabelBinarizer() # Cria binarizador de classes
trainY = lb.fit_transform(trainY) # Converte rótulos de treino para one-
hot
testY = [Link](testY) # Converte rótulos de teste para one-
hot
Pontos principais:
Converte dígitos (0 a 9) em vetores como 0010000000.
📌 7. Construção da rede neural
Comandos
# -----------------------------
# CONSTRUÇÃO DA REDE NEURAL
# -----------------------------
model = Sequential() # Cria o modelo sequencial
[Link](Dense(256, input_shape=(784,), activation='sigmoid')) # Primeira camada oculta (256
neurônios)
[Link](Dense(128, activation='sigmoid')) # Segunda camada oculta (128
neurônios)
[Link](Dense(10, activation='softmax')) # Camada de saída (10 classes)
Pontos principais:
Entrada: 784 neurônios (784 pixels).
Camada oculta 1: 256 neurônios (sigmoid).
Camada oculta 2: 128 neurônios (sigmoid).
Saída: 10 neurônios (softmax) — 10 dígitos possíveis.
📌 8. Compilação e treinamento
Comandos
# -----------------------------
# COMPILAÇÃO DO MODELO
# -----------------------------
sgd = SGD(0.01) # Otimizador SGD com taxa de
aprendizado 0.01
[Link](loss='categorical_crossentropy', # Função de custo apropriada para
multiclasse
optimizer=sgd,
metrics=['accuracy']) # Acompanha acurácia durante o treino
# -----------------------------
# TREINAMENTO DO MODELO
# -----------------------------
H = [Link](trainX, trainY, # Dados de treino
validation_data=(testX, testY), # Dados para validação
epochs=100, # Número de épocas (iterações)
batch_size=128) # Tamanho do lote (batch)
Pontos principais:
Otimizador: SGD com taxa 0.01.
Função de custo: categorical_crossentropy.
Treino: 100 épocas, lote (batch) de 128 imagens.
📌 9. Avaliação do modelo
Comandos
# -----------------------------
# AVALIAÇÃO DO MODELO
# -----------------------------
predictions = [Link](testX, batch_size=128) # Prediz classes do conjunto de teste
# Gera relatório completo de precisão, recall e f1-score
print(classification_report([Link](axis=1), # Converte one-hot para índice
[Link](axis=1), # Predições também convertidas
target_names=[str(x) for x in lb.classes_]))
Pontos principais:
Compara valores preditos vs reais.
Mostra:
o precisão (precision)
o sensibilidade (recall)
o F1-score
o acurácia geral
📌 10. Gráfico da evolução do treinamento
Comandos
# -----------------------------
# GRÁFICO DE TREINAMENTO
# -----------------------------
[Link]('ggplot') # Estilo visual do gráfico
[Link]() # Cria uma nova figura
# Plota a função de custo (loss)
[Link]([Link](0, 100), [Link]['loss'], label='train_loss') # Curva de perda do
treino
[Link]([Link](0, 100), [Link]['val_loss'], label='val_loss') # Curva de perda da
validação
# Plota a acurácia
[Link]([Link](0, 100), [Link]['accuracy'], label='train_acc') # Acurácia do treino
[Link]([Link](0, 100), [Link]['val_accuracy'], label='val_acc') # Acurácia da validação
[Link]('Training Loss and Accuracy') # Título do gráfico
[Link]('Epoch #') # Nome do eixo X
[Link]('Loss/Accuracy') # Nome do eixo Y
[Link]() # Adiciona legenda
[Link]() # Mostra o gráfico
Pontos principais:
Mostra:
o perda (loss) diminuindo
o acurácia aumentando
Ajuda a identificar:
o overfitting
o underfitting
📌 11. Considerações finais
A rede atingiu cerca de 92% de acurácia, o que é bom.
Alguns dígitos são mais fáceis de reconhecer (como "1") e outros mais difíceis (como "8" e "5").
Importante validar com novos dados para detectar:
o overfitting (modelo decorou o treino)
o underfitting (modelo não aprendeu bem)
Apresente um resumo didático, de forma simples e fácil de compreender, com os pontos principais e essenciais em
forma de tópicos do texto abaixo:
A biblioteca Keras foi criada com o propósito de implementar as funções matemáticas e de álgebra linear que as
redes neurais precisam para trabalhar (principalmente multiplicação de matrizes), de forma que o desenvolvedor
possa focar apenas a estruturação da arquitetura da rede. Serve para abstrair a construção de camadas de redes
neurais.