Please enable JavaScript.
Coggle requires JavaScript to display documents.
Data Science Academy - DSA DSA Python Fundamentos Para Análise de…
Data Science Academy - DSA
Python Fundamentos Para Análise de Dados 3.0
Mapa Mental criado por
Plínio de Albuquerque
Links:
GithubDSA
Tutorial Python
1.Introdução
Programação é o processo de analisar uma tarefa, dividi-la em pedaços ou etapas e escrever uma sequência de instruções que o computador possa entender ou executar
Conhecendo a Linguagem Python:
Lançada em 1991, na Holanda, por Guido Van Rossum;
Linguagem Interpretada;
Orientada a Objetos;
Portável;
Comunidade Ativa;
Interpretador e Biblioteca
Por que Cientistas
de Dados escolhem
Python
Permite criar um canal direto para análise de dados
Grande Comunidade
Bibliotecas de Análise de Dados (em torno de 100 mil)
Jupyter Notebook
Facilidade de aprender
Escalabilidade e Portabilidade
PyData
Stack
(Bibliotecas)
Jupyter Manual
NumPy
pandas
matplolib
etc
Empresas que usam Python
Divertida
Não usar o interpretador padrão para não precisar instalar vários pacotes de forma manual.
Anaconda
Python
é a melhor opção de interpretador para análise de dados.
IDE
( Integrat Develop Enviroment ) - Ambiente Integrado de Desenvolvimento):
- Jupyter
: já está no anaconda. Ótima IDE para análise de dados. Precisa de instalação.
-
PyCharm
: alternativa para softwares maiores. Não vem com anaconda. Independente
- Spyder
: já está no anaconda.
-
GoogleColab
: ferramenta na nuvem, onde você executa um Jupyter notebook. Vantagem de não precisar instalar nada no computador. Alternativa para quem não pode instalar softwares no computador como administrador. :!:
- Sublime Text
Links Úteis
Por Que Todos Deveriam Aprender a Programar?
Code.org
O Incrível Crescimento da Linguagem Pytho
Por que Cientistas de Dados escolhem Python?
Cientista de Dados –Por Onde Começar em 8 Passos(passo 2 com detalhes sobre hardware)
2.
Variáveis, Tipos de
Estruturas de Dados
3 modos de executar linguagens em Python:
Modo shell;
Modo script (arquivos com extensão. py);
Modo interativo (Jupyter Notebook).
Indentação com 1 TAB ou 4 spaces
Comentários:
Única linha usa: #
Mais de uma linha usa: """
Dicas:
Clareza é importante. Mantenha seu código limpo e organizado;
Código esparso é melhor que código denso;
Sempre documente seu código;
Siga padrões para não criar complexidade, mas para manter a regra;
Erros nunca serão silenciosos, a menos que propositalmente;
Simples é melhor que complexo e complexo é melhor que complicado;
Não se sinta obrigado a criar classes sem uma boa razão.
Números e
operações
matemáticas
Tipos de números em Python.
Int
: números inteiros.
Float
: números fracionários.
Função
type ()
para saber o tipo de um número.
Funções
int ()
e
float ()
para converter números.
Funções
Built-in
: funções internas, prontas.
Funções e operações com números
Aritmética
Operadores
Variáveis e
operadores
Variáveis
são usadas em nosso código Python para armazenar valores que queremos utilizar mais tarde.
b = 10 ( estou atribuindo o valor 10 a variável "b" )
Atenção. Não confunda:
== (igual)
!= (diferente)
função
print ()
imprime os valores na tela.
print(10): imprime na tela o valor 10;
print (b): imprime na tela o valor da variável "b". Não imprime a leta "b" na tela
Regras Variáveis:
Os nomes das variáveis não podem começar com número;
Não pode haver espaços no nome. Utilize _ em vez disso;
Não pode usar símbolos nas variáveis: <>, |, /, \, &, etc
Não pode usar palavras reservadas do Python como variável.
Operadores:
Aritméticos, Relacionais (para fazer comparação), operadores de atribuição e lógicos (and, or, not)
Relacionais:
" == " Igualdade
" != " Desigualdade
" > " Maior que
" < " Menor que
" >= " Maior ou igual
" <= " Menor ou igual
Atribuição:
" = " Atribuição (z=10)
" += " Soma (z+=10, equivale a z=z+10)
" -= " Subtração (z-=10, equivale a z=z-10)
"
= " Multiplicação (z
=10, equivale a z=z
10)
" /= " Divisão (z/=10, equivale a z=z/10)
" %= " Módulo (z%=10, equivale a z=z%10) ---> é o resto da divisão de um número pelo outro.
"
= " Potência (z
=10, equivale a z=z*
10)
" //= " Divisão inteira (z//=10, equivale a z=z//10)
Lógicos:
and, or, not
Strings
São usadas em Python para gravar informações em formato de texto, como nomes por exemplo.
Strings em Python são na verdade uma sequência de caracteres
, o que significa, basicamente, que Python mantém o controle de cada elemento da sequência.
Indexando Strings:
Strings são uma sequência. Isso significa que Python pode usar índices para chamar partes da sequência.
Em Python usamos colchetes[ ] para representar um
índice
de um objeto. :warning:
Em Python a indexação começa por 0
Por exemplo, podemos criar a string (Variável
texto
, que é uma string):
texto = "Python e Análise de Dados"
texto[0] = P
--> chamando minha variável
texto
e o seu
primeiro índice
texto[1] = y
texto[2] = t
Funções internas
(Built-in)
Biblioteca
abs(), all(), any(), ascii(), bin(), bool(), bytearray(), bytes(), callable(), chr(), classmethod(), compile(), complex(), delattr()
dict(), dir(), divmod(), enumerate(), eval(), filter(), float(), format(), frozenset(), getattr(), globals(), hasattr(), hash()
help(), hex(), id(), input(), int(), isinstance(), issubclass(), iter(), len(), list(), locals(), map(), max(), memoryview()
min(), next(), object(), oct(), open(), ord(), pow(), print(), property(), range(), repr(), reversed(), round(), set()
setattr(), slice(), sorted(), staticmethod(), str(), sum(), super(), tuple(), type(), vars(), zip(),
import
()
Estrutura de Dados
Objeto: Listas
(Mutável)
As listas podem ser consideradas a versão geral de uma sequência em Python. Ao contrários de Strings, as listas são mutáveis, ou seja, dentro de uma lista podem ser alterados.
As listas são construídas com o uso de colchetes [] e vírgulas separando cada elemento da lista.
lista = [elemento1, elemento2, elemento3]
Listas em Python tendem a ser mais flexíveis do que matrizes em outras linguagens por 2 motivos:
Listas não tem tamanho fixo (o que significa que não
precisamos especificar quão grande uma lista será);
Listas não tem restrições de tipo fixo
Uma grande característica de estruturas de dados em Python é que elas suportam aninhamento. Isto significa que podemos usar estruturas de dados dentro de estruturas de dados, isto é, uma lista dentro de uma lista.
Estrutura de Dados
Objeto: Dicionários
(Mutável)
Imaginar os dicionários como tabelas de hash (
hashtables
)
Os dicionários são construídos com uso de chaves {} e vírgulas separando cada elemento do dicionário
dict = {k1:v1, k2:v2,...,kn:vn}
Mapeamentos
: são uma coleção de objetos que são armazenados por uma chave, ao contrário de uma sequência de objetos armazenados por sua posição relativa
Um dicionário Python consiste de uma chave e, em seguida, um valor associado. Essa valor pode ser qualquer objeto Python.
São mapeamentos de chaves e valores
{chave1:valor1, chave2:valor2}
Estrutura de Dados
Objeto: Tuplas
Em Python Tuplas são muito semelhantes às listas, no entanto, ao contrário das listas, tuplas são imutáveis, o que significa que não podem ser alteradas. Você usaria tuplas para apresentar dados que não podem ser alterados, como os dias da semana ou datas em um calendário.
As tuplas são construídas com o uso de parênteses() e vírgulas separando cada elemento da tupla.
tupla = (item1, item2,..., itemz)
"Por que se preocupar usando tuplas, uma vez que trata-se de um objeto com limitações e um número menor de métodos disponíveis?" Se em seu programa você precisa ter certeza de que os dados não sofrerão mudança, então tupla pode ser a solução. Ela fornece uma fonte conveniente de integridade de dados.
Posso alterar uma tupla a transformando em uma lista e depois a torno uma tupla novamente.
tupla1 = ("A","B","C")
lista1 =
list
(tupla1) -->["A","B","C"]
lista1.append("D") -->["A","B","C","D"]
tupla1 =
tuple
(lista1) --> ("A","B","C","D")
Links Úteis
Python DEV
Python ou R Para Análise de Dados
Big Data Real-Time Analytics com Python e Spark
Lab 01 - Desenvolvendo game em Python
3.
Loops, Condicionais,
Métodos e Funções
Links Úteis
Condicionais Lógicos
Deep Learning Book
Condicionais
O condicional
if
nos permite dizer ao computador para executar ações com base em um determinado conjunto de dados.
if
(expressão 1):
print("comando executado caso a expressão 1 seja verdadeira")
else
:
print("comando executado caso a expressão 1 seja falsa")
O
elif
substitui a necessidade de criar várias estruturas de if...else aninhadas.
if
(expressão 1):
print("comando executado caso a expressão 1 seja Verdadeira")
elif
(expressão 2):
print("comando executado caso a expressão 1 seja Falsa e expressão 2 seja Verdadeira")
else
:
print("comando executado caso as expressões 1 e 2 sejam Falsas")
Operadores
Lógicos
or | and
Input:
Função que recebe uma entrada do usuário.
Estrutura de
Repetições
Loop for
Valida cada item em uma série de valores
for
item
in
série-de-itens (coleção):
Executar comandos
Podemos utilizar em objetos sequenciais, como:
strings, listas, tuplas, elementos de dicionário, arquivos.
lista = [1,2,3,4,5,6,7,8,9,10]
for num in lista:
_
if num % 2 == 0:
__
print (num)
Loop While
É uma das formas mais comuns em Python para executar iteração
A instrução será executada repetidamente, seja uma única instrução ou grupo de instruções, desde que uma condição seja verdadeira
while (expressão 1):
print("comando executado caso a expressão 1 seja verdadeira")
Pass, Break, Continue
Range
A função range() nos permite criar uma lista de números em um intervalo específico.
Tem o seguinte formato:
range([start],[stop],[step])
[start] - número que inicia a sequência,
[stop] - número que encerra a sequência (não é incluído na sequência,
[step] - diferença entre cada número na sequência.
Métodos
Funções incorporadas a objetos
Permitem executar ações específicas no objeto e podem também ter argumentos, exatamente como uma função
São executados sob a forma:
objeto.método (arg.1, arg.2, etc)
Com o Jupyter Notebook podemos ver rapidamente todos os métodos possíveis para o objeto, usando a tecla TAB. Por exemplo, os métodos para o objeto lista são:
append, count, extend, insert, pop, remove, reserve, sort
Funções
Também conhecidas como
subrotinas
É um dispositivo que agrupo um conjunto de instruções para que elas possam ser executadas mais de uma vez.
Permitem especificar os parâmetros que podem servir como entrada para as funções
.
Nos permite reutilizar códigos, sem ter que rescrevê-los novamente
. Com funções escrevemos o código uma única vez e repetimos a mesma instrução, chamando a função quantas vezes forem necessárias
Formato geral de uma função:
def
nome da função
(arg1,arg2):
"Comentários da função"
<Aqui vai o seu código>
<Retorno desejado pela função> :star:
Por que função é importante :question:
É uma forma de escrever a sua lógica em um único pacote e utilizá-la em diferentes lugares no seu código e quantas vezes quiser
Entrada:
Argumentos, Variáveis Globais, Arquivos / Streams de dados
Função - Variáveis Locais
Saída:
Resultados, Variáveis Globais, Arquivos / Streams de dados
Variáveis Globais e Locais:
Não é possível imprimir uma variável local, pois ela só é usada na função
Funções Built-in:
Funções já existentes. Não preciso criar certas funções que eu já tenho. Consultar a documentação antes de criar uma função.
Ex: abs(), bool()
# soma de lista
list1 = [23, 23, 34, 45]
sum(list1)
# tamanho de lista
len([23,34,45,46])
4
Funções str, ind, float
Cria primeiro da definição da função para depois usá-la
Utilizo também para
modularizar
o meu programa
Expressões Lambda
Conhecidas como função
in-line
ou função
Anônima
Nos permitem criar funções "anônimas". Isso significa que podemos fazer rapidamente funções ad-hoc sem a necessidade de definir uma função usando a palavra reservada
def
Objetos de função desenvolvidos executando expressões lambda funcionam exatamente da mesma forma como aqueles criados e atribuídos pela palavra reservada
def
.
Mas há algumas diferenças fundamentais que fazem lambda útil em funções especializadas:
O corpo do lambda é uma única expressão, não um bloco de instruções
O corpo do lambda é semelhante a uma instrução de retorno do corpo def
Realmente são úteis, quando usadas em conjunto com as funções
map()
,
filter()
e
reduce()
São usadas para criar funções simples
lamba x: x**2
Lambda
x
Def
(para criar funções):
def
: cria um objeto e atribui um nome a ele (nome da função)
lambda
: cria um objeto, mas o retorna como um resultado em tempo de execução
Lab 02 - Desenvolvendo uma calculadora em Python
4.
Tratamento de Arquivos, Módulos, Pacotes e Funções Built-ins
Manipulação de Arquivos em Python
Python usa objeto de arquivo para interagir com arquivos em seu computador. Esses objetos de arquivo podem ser de qualquer tipo de arquivo como um arquivo de áudio, um arquivo de texto, e-mails, documentos de Excel, etc.
Você provavelmente terá que instalar algumas bibliotecas ou módulos para interagir com vários tipos de arquivos, mas eles estão facilmente disponíveis.
ex:
Python oferece o pacote csv para manipulação de arquivos .csv
Métodos:
open() - usada para abrir o arquivo
read() - leitura do arquivo
write() - gravação do arquivo
seek() - retorna para uma determinada posição
readlines() - retorna a lista de linhas do arquivo
close() - fecha o arquivo/conexão
Dataset
- Conjunto de dados
Funções Built-in:
Map,
Reduce,
Filter,
Zip
e Enumerate
Python fornece várias funções que permitem uma abordagem funcional à programação, oferendo mais facilidade na criação do seu código.
Podemos dizer que a programação funcional é uma programação orientada à expressão
Funções orientadas a expressão, em Python:
map (função, sequência)
reduce (função, sequência)
filter (função, sequência)
lambda
list comprehension
Como pode ser uma operação comum, Python fornece uma função interna (built-in) que faz a maior parte do trabalho para nós.
Map
É uma função que recebe 2 argumentos:
Uma função
Uma sequência
map (função, sequência)
O primeiro argumento é o nome de uma função e o segundo uma sequência (por exemplo, uma lista)
A função map() aplica a função a todos os elementos da sequência. Uma nova lista com os elementos alterados pelo função é retornado.
Reduce
É uma função que recebe 2 argumentos:
Uma função
Uma sequência
reduce(função, sequência)
Ao contrário da função map() que aplica a função a cada elemento da sequência e retorna outra sequência de elementos, a função reduce() aplica a função passada como parâmetro aos elementos da sequência, até que reste apenas
um elemento
, que no exemplo abaixo é o número
113
. No exemplo abaixo vou aplicar uma
função de soma dentro da função reduce()
lista = [47,11,42,13]
47+11 =
58
58
+ 42 =
100
100
+ 13 = 113
Filter
A exemplo das funções built-in, map() e reduce(), a função filter() também recebe 2 argumentos, uma função e uma sequência.
filter(função, sequência)
A função filter() oferece uma maneira conveniente para filtrar todos os elementos de uma sequência, para os quais a função retorne True.
A função passada como parâmetro para filter(), deve retornar um valor booleano,
True ou False
.
A função será aplicada a todos os valores de uma sequência e os
valores serão retornados, apenas se retornarem True para a função.
Zip e Enumerate
A função
zip()
agrega os valores de 2 sequências e retorna uma tupla, isto é, uma nova sequência.
zip(sequência, sequência)
zip()
pode ser usado quando o número de elementos for diferente em cada sequência. Mas o objeto resultante terá o mesmo número de elementos da sequência menor.
Exemplo:
zip([1,2,3,4],[1,2,3])
(1,1) (2,2) (3,3)
A função
enumerate()
permite retornar o índice de cada valor em uma sequência, à medida que você percorre toda a sequência.
Enumerate()
retorna uma tupla no formato tupla (índice, valor)
enumerate(sequência)
List Comprehension
Podemos utilizar as funções map(), reduce() e filter() para aplicar uma determinada função a uma sequência de dados, mas como essa é uma atividade comum em Python, a linguagem fornece alternativas ainda mais flexíveis que Map() e Filter()
Aplica uma função arbitrária (ao invés de aplicar apenas uma função) a uma sequência de elementos.
Permite desenvolver listas usando uma notação diferente. Seria essencialmente uma loop for, construída dentro de [].
lst = [x for x in "sequência"]
Normalmente utilizamos
loop for
quando trabalhamos com a função
map()
e usamos
list comprehension
quando esta for mais fácil de ser aplicada.
No entanto,
há uma vantagem substancial de desempenho ao utilizar list comprehension
:red_flag:
Erros e Exceções
Mesmo quando uma expressão estiver sintaticamente correta, ainda poderão ocorrer erros e neste caso, chamamos
Exceções
Podemos tratar Exceções em Python da seguinte forma:
try:
aqui vão as operações.....
except Exceção1:
Se houver a Exceção1, execute este bloco
except Exceção2:
Se houver a Exceção2, execute este bloco
else:
Se não houver exceção, execute este bloco
Temos ainda a palavra reservada
Finally
, que nos permite executar código, mesmo que exceções ocorram
Lista Completa Exceções
Pacotes Math e Datetime
PyPi e instalação de pacotes
Módulos e Pacotes
Módulos
Se você sair do interpretador Python e entrar novamente, todas as definições que você fez (funções e variáveis) são perdidas.
Portanto, se você quiser escrever um programa um pouco mais longo, você precisa usar um editor de texto ou uma IDE para escrever seu código, salvar e então executar o arquivo no interpretador Python. Isso é conhecido como a
criação de um script.
À medida que seu programa fica maior, você pode querer dividi-lo em vários módulos para facilitar a manutenção.
Você também pode querer usar uma função que você escreveu, em vários programas sem ter que copiar sua definição em cada programa, ou seja, você quer
reaproveitar o seu código
.
Para suportar isso,
Python tem uma maneira de colocar tais definições em um arquivo
e usá-las em um script ou em uma instância interativa do interpretador (como o Jupyter Notebook).
Esse arquivo é chamado de Módulo
.
Módulos em Python são simplesmente arquivos Python com a extensão .py
, que implementam um conjunto de funções. Importamos o módulo em nosso script Python, usando o comando import:
import math
(módulo "math")
A primeira vez que um módulo é carregado em um script Python, ele é inicializado e fica disponível para uso. Você precisa importar um módulo apenas uma vez em seu código.
Escrever módulos Python é muito simples. Basta criar um módulo de sua preferência, basta criar um novo arquivo .py com o nome do módulo e, em seguida, importá-lo usando o nome do arquivo Python (sem a extensão .py), utilizando o comando de importação.
meu_modulo.py
import "meu_modulo"
Muito útil para criar uma função para leitura de arquivos
Também é possível importar funções específicas de um módulo. Evita que o Python importe o módulo inteiro uma vez que você deseja uma função específica. Para ocupar menos memória do computador.
from math import sqrt
Anaconda traz na instalação uma série de módulos disponíveis, principalmente módulos para computação científica e Data Science
Para verificar os módulos e pacotes instalados usamos o comando
conda list
Você pode instalar qualquer módulo que desejar e que seja compatível com sua versão da linguagem Python.
Para isso, abra o prompt de comando no seu computador e use o comando:
conda install "nome_do_modulo" ou pip install "nome_do_modulo"
Por exemplo, se você quiser instalar um módulo para criar arquivos do Microsoft PowerPoint a partir do Python.
Instalador para criar PowerPoint pelo Python
pip install python-pptx
Existem diversos módulos Python criados por desenvolvedores e empresas ao redor do mundo.
Pacotes
São uma forma de estruturar os módulos Python
import modulo
import pacote.modulo
Um pacote é um conjunto de módulos Python
Enquanto um módulo é um único arquivo Python, um pacote é um diretório de módulos Python contendo um arquivo "
init
.py""
import pacote.modulo
O repositório de pacotes Python, é o PyPi (Python Package Index) com mais de 130 mil pacotes disponíveis.
Repositório de pacotes Python (PyPi)
Links Úteis
Documentação Python
Repositório do Curso no Github
Deep Learning Book
Python PPTX
Exceções em Python
PyPi
5.
Orientação a Objetos
Programação Orientada a Objetos (POO)
foi criada para tentar aproximar o mundo real e o mundo virtual. A ideia fundamental é tentar simular o mundo real dentro do computador.
A orientação a objetos é um modelo de
análise
,
projeto
e
programação
de sistemas de
software
baseado na composição e interação entre diversas unidades de software chamadas objetos.
Na programação orientada a objetos o programador é responsável por moldar o mundo dos objetos, e definir como os objetos devem interagir entre si.
Os objetos "conversam" uns com os outros através do envio de mensagens e o papel principal do programador é definir quais serão as mensagens que cada objeto pode receber e também qual ação o objeto deve realizar ao receber cada mensagem.
Exemplo de linguagens orientadas a objetos utilizadas por grandes empresas em todo o mundo:
Java, C#, C++, Ruby, Lisp, Python, etc.
Programação Estruturada X
Programação Orientada a Objetos
Programação
Estruturada
Sequência, Decisão, Iteração (Repetição)
Dados e Funções compõe a aplicação através de estruturas básicas de controle, modularização e tipos abstratos de dados.
POO
Métodos são funções dentro de classes e tem como objetivo manipular os atributos do objeto
Exemplo:
Classe: Cachorro | tamanho: int | raça: string |*latir()
Principais Conceitos:
Classe, Objeto, Atributos, Métodos, Mensagem, Herança, Polimorfismo, Encapsulamento
Classes e Objetos
A
classe
é a estrutura básica do paradigma de orientação a objetos, que representa o tipo de objeto, um modelo a partir do qual os objetos serão criados, ou seja, são como
Templates
Uma
classe
é apenas um molde. Uma especificação que define o que um objeto desse tipo deverá ter como atributo e como ele deve se comportar.
Exemplo: podemos criar a classe Livro
A
classe
é um tipo de template que define a natureza de um futuro objeto
A partir de
classes
nós construímos instâncias.
Cada instância é um objeto.
Uma instância, é um objeto específico, criado a partir de uma classe.
Objetos
representam entidades, com suas qualidades (atributos) e ações (métodos) que estas podem realizar.
Em Python tudo é um
objeto
.
list, tuple, dict, int, float
Como podemos criar nossos próprios
objetos
em Python?
Objetos
definidos pelo usuário Python são criados a partir de instâncias de classes criadas usando a palavra reservada
class
. Nós criamos a classe e instanciamos a classe o que consequentemente cria o objeto
Por convenção o nome de uma
classe
começa com letra MAIÚSCULA
Classe
: Carro
Objetos
: Mercedes, BMW, Audi
Cada objeto tem seu próprio atributo
Em Python, novos objetos são criados a partir de classes. O objeto é uma instância da classe, que possui características próprias.
Métodos
São funções definidas dentro do corpo de uma classe
Eles são usados para realizar operações com os atributos dos nosso objetos
São usados no conceito de encapsulamento, do paradigma da Programação Orientada a Objetos
São basicamente funções definidas dentro de uma classe, para manipular os objetos criados a partir da classe
Utiliza-se a palavra reservada
def
para criar métodos, da mesma forma que se cria funções
Podemos criar classes para nossas atividades de análise de dados e criar métodos específicos para cada tarefa, encapsulando nossa lógica de programação
Herança
Herança é uma forma de gerar novas classes usando classes que foram definidas previamente
Estas novas classes formadas, são chamadas
classes derivadas ou sub-classes
A classe que deu origem a sub-classe, é chamada
super-classe ou classe base
Um dos principais benefícios da Herança é a
reutilização de código e a redução da complexidade dos programas
As classes derivadas estendem as funcionalidades das classes base
Operações
Especiais
Classes em Python podem implementar determinadas operações com métodos especiais
Ao usar métodos especiais, sua classe poderá ter um comportamento semelhante a um dicionário, uma função ou mesmo um número
Possuem underline + underline antes e depois do nome. Exemplo do
init
na criação da classe.
Por exemplo, quando você usa a função
del
para remover um atributo de um objeto, o método especial underline + underline delattr é chamado.
Só precisa digitar:
del obj.my_attrib
Você não precisa fazer uma chamada ao método diretamente. Python oferece vários métodos especiais para você!
Lab 03 - Desenvolvendo uma aplicação em Python com POO
Links Úteis
Documentação Python
Repositório do Curso no Github
Deep Learning Book
Python Orientado a Objetos
Python e Programação Orientada a Objetos
Classes e Objetos –Fundamentos
Características da orientação a objetos
Jogo da Forca
Formação Cientista de Dados
Scratch
Código e Robótica para Crianças
6.
Manipulando Banco
de Dados em Python
O que são
Banco de Dados?
Bancos de dados são coleções de dados interligados entre si e organizados para fornecer informações
É uma coleção de dados inter-relacionados, representando informações sobre um domínio específico.
Dados x Informações
Dados - fatos brutos
informação - agrupamento de dados de forma organizada
SGBD
SGBD - Sistema de Gerenciamento de Banco de Dados ou
DBMS
- Database Management System
É um conjunto de programas de computador (software) responsáveis pelo gerenciamento de uma base de dados.
Por que usar um SGBD?
Controlar redundância
Compartilhamento de dados
Independência dos dados
Segurança
Backup e recuperação de falhas
Forçar restrições de integridade
Aumentar a produtividade e rastreabilidade
Flexibilidade e padronização
Onde encontramos SGBD?
Data Mining
Datawarehousing e OLAP (Online Analytical Processing)
Banco de dados mutimídia
Banco de dados espaciais e temporais
Banco de dados móveis
Banco de dados semiestruturados
Novas aplicações de banco de dados: bibliotecas digitais, comércio eletrônico, telecomunicações, etc.
Uma das fontes do Big Data.
Bancos de dados
Relacionais
São gerenciados por
RDBMS
(Relational Database Management System). Guardados em tabelas que é um conjunto de linhas e colunas.
Coleção de tabelas.
Conceitos fundamentais:
Entidades (tabelas) e atributos
Registros (tuplas)
Chaves (primária e estrangeira)
Relacionamentos entre entidades (tabelas)
Integridade Referencial
Normalização
Cada
linha
formada por uma lista ordenada de colunas representa um
registro
, ou tupla, dentro da tabela.
As
colunas
em uma tabela são chamadas de
atributo
.
Um conceito importante em um banco de dados relacional é o conceito de atributo
chave
, que permite identificar e diferenciar uma tupla de outra.
Chave Primária (PK) - coluna(s) que garantem a unidade das linhas. É a chave principal de uma tabela. Uma tabela só pode ter uma chave primária.
Chave Estrangeira (FK) - coluna(s) de uma tabela que contém valores de PK de outra tabela. Uma tabela pode ter mais de uma chave estrangeira.
As chaves garantem o relacionamento entre as tabelas
Índices - é uma lista ordenada de valores que apontam para os dados nas tabelas. Utilizado para agilizar a leitura dos dados. Pode ser utilizado também para forçar a unicidade dos dados.
Integridade referencial - é o conceito em que várias tabelas de banco de dados compartilham uma relação com base nos dados armazenados nas tabelas e essa relação deve ser coerente. Isso geralmente é imposto com ações de adição, exclusão e atualização em cascata.
Normalização
de dados é o processo de organização de campos e tabelas em um banco de dados relacional para minimizar a redundância e a dependência. É a divisão de tabelas grandes em tabelas menores e define o relacionamento entre essas tabelas.
O que se deseja é isolar dados para quando houver necessidade de alterações, que elas sejam realizadas apenas nas tabelas necessárias.
:red_flag:
Linguagem
SQL
( Structured Query Language )
DDL
(Data Definition
Language)
Suporte
CREATE: definição de um objeto (tabela, índice)
ALTER: alteração de um objeto
DROP: eliminação de um objeto
DML
(Data Manipulation
Language)
Desenvolvimento
SELECT: pesquisa de dados
UPDATE: atualização de dados
DELETE: eliminação de dados
INSERT: inserção de dados
DCL
(Data Control
Language)
Suporte/Desenvolvimento
GRANT: fornecer um privilégio
REVOKE: tirar um privilégio
Banco de dados
SQLite
É um engine (motor) de banco de dados SQL
Se o SQLite é um único arquivo, por que não usar um arquivo comum ao invés de SQLite :question:
Arquivo comum é carregado inteiramente na memória, enquanto o SQLite carrega apenas os registros que estão sendo usados.
Por que usar o SQLite :question:
Não requer um processo servidor dedicado
Configuração zero, o que significa que nenhuma configuração ou administração é necessária
Um banco de dados SQLite completo é armazenado em um único arquivo multiplataforma
SQLite é pequeno e leve, menos que 400 KB quando totalmente configurado.
Está disponível para diversas plataformas, como Unix (Linux, Mac OSX, Android e iOS) e Windows.
Pode ser usado, quando recursos avançados de SGBDs não forem necessários, como por exemplo para aplicações que executam em um smartphone.
É instalado automaticamente quando você instala o Anaconda
O código SQLite, totalmente escrito em linguagem C, é de domínio público e pode ser usado livremente, inclusive para uso comercial e privado.
É amplamente utilizado na internet e em smartphones
Ao contrário de outros bancos de dados, o SQLite não requer um processo ou serviço sendo executado em um servidor. Todo acesso ao banco de dados é feito através de leitura/escrita ao arquivos do banco de dados, acesso este feito pelas bibliotecas SQLite.
Todos os objetos do banco de dados, como tabelas, índices, triggers e views ficam armazenados no mesmo arquivo.
Quando usar o
SQLite
:question:
1.Dispositivos embarcados (como em sistemas de Internet das Coisas);
2.Websites;
3.Análise de dados;
4.Cache para dados de RDBMS;
5.Bancos de dados temporários ou internos.
Quando não é apropriado usar:
Aplicações cliente/servidor
Websites com alto volume de tráfego
Análise de datasets muito grandes
Alta concorrência requerida
Armazenar Big Data
Banco de dados
NoSQL
São bancos de dados distribuídos e não-relacionais, que foram projetados para atender os requerimentos de Big Data.
Oferecem uma estrutura muito mais escalável e eficiente do que os bancos relacionais e facilitam consultas NoSQL de dados semi-estruturados ou não estruturados
Surgiu como um paradigma não tradicional para lidar com grandes volumes de dados e para resolver os desafios colocados pela chegada de implementações
Big Data
.
Oferecem 4 categorias principais de banco de dados:
Graph databases (Neo4J, FlockDB, GraphDB, ArangoDB)
Documents databases (
MongoDB
,
CouchDB
, RavenDB, Terrastore)
Key-value stores (Oracle NoSQL DB, MemcacheDB,
Redis
, AWS DynamoDB)
Column family stores (
Apache HBase
,
Cassandra*
, Hypertable, Accumulo)
RDBMS x NoSQL
RDBMS:
Suas aplicações foram centralizadas (ERP, CRM)
Alta disponibilidade moderada for necessária
Dados gerados em velocidade moderada
Dados foram gerados a partir de poucas fontes
Dados forem estruturados
Transações complexas
For necessário manter moderado volume de dados (Terabytes)
NoSQL:
Suas aplicações forem descentralizadas (Web, Mobile, Big Data, IoT)
Quando a disponibilidade tiver que ser contínua, sem interrupção
Dados gerados em alta velocidade (sensores)
Dados forem gerados a partir de múltiplas fontes
Dados forem semi ou não-estruturados
Transações simples
For necessário manter alto volume de dados (Petabytes)
MongoDB
Banco de dados orientado a documento, uma das categorias de banco de dados NoSQL
Um banco de dados NoSQL orientado a documento, substitui o conceito de "linha" como em banco de dados relacionais, por um modelo mais flexível, o "documento"
É open-source e um dos líderes no segmento de banco de dados NoSQL. Ele foi desenvolvido em linguagem C++
Características:
Indexação
Agregação
Tipos de dados especiais
Armazenamento
Algumas características presentes em banco de dados relacionais, não estão presentes no MongoDB, como alguns tipos de joins e transações multi-linha.
Conceitos relacionados a bancos relacionais:
Database (MongoDB) x Database (RDBMS)
Collection
(MongoDB) x
Tabela
(RDBMS)
Document
(MongoDB) x
Linha/Tupla
(RDBMS)
Field
(MongoDB) x
Coluna
(RDBMS)
Embbeded Documents
(MongoDB) x
Join de tabelas
(RDBMS)
Primary Key (MongoDB) x Primary Key (RDBMS)
Onde usar?
Big Data
Gestão de Conteúdo
Infraestrutura Social e Mobile
Gestão de Dados de Usuários
Data Hub
Capturar Stream de Dados para Análise
Links Úteis
Documentação Python
Repositório do curso no Github
Deep Learning Book
Documentação Python SQLite
SQLite
SQLite Browser
NoSQL Databases
MongoDB
DB-Engines
Big Data Real-Time Analytics com Python e Spark
:warning:
Mini-Projeto 01
:warning:
Guia de Análise Exploratória de Dados com Python e Linguagem SQL
Objetivos a serem alcançados:
Introduzir o processo de análise exploratória, fundamental em qualquer projeto de Ciência de Dados.
Revisar conceitos estudados nos capítulos anteriores, mostrando as aplicações práticas.
Ajudar a desenvolver a mentalidade orientada a solução de problemas.
7.
Desafio DSA
Missão 1:
Implementar um algoritmo para determinar se uma string possui todos os caracteres exclusivos.
Missão2:
Gerar uma lista de números primos
Missão 3:
Implementar um algoritmo para mover um robô do canto superior esquerdo para o canto inferior direito de uma grade
Missão4
:
Implementar o Algoritmo de Ordenação "Selectionsort
:warning:
Missão5:
Analisar o Comportamento de Compra de Consumidores
analisar os dados de compras de um web site! Os dados estão no
formato JSON
e disponíveis junto com este notebook
Número total de consumidores
Número de itens exclusivos
Preço médio de compra
Número total de compras
Rendimento total
Porcentagem e contagem de compradores masculinos
Os resultados são transformados em DataFrames que posteriormente podem ser convertidos em Excel.
Exemplo --> df.to_excel('/content/drive/MyDrive/Data_Science/teste-df-output.xlsx',sheet_name='Planilha01')
8.
Módulos Python para
Análise de Dados
(Python Open
Data Science Stack)
Stack = Pilha
Pilha de pacotes Python que utilizados em conjunto formam uma plataforma analítica
Python Open Data Science Stack
X
Outras ferramentas de análise: R,
SAS
, Stata, Matlab
Python, IPython,
NumPy
( para computação matemática ),
SciPy
( para computação científica ),
matplotlib
( para visualização ),
jupyter notebook,
pandas
( "Excel do Python" ), xarray,
scikit learn
( para machine learning ),
scikit-image (biblioteca para visão computacional),
StatsModels
( para estatística em Python ),
Seaborn
( para visualização )
Numpy
Acronimo para Numerical Python é o pacote fundamental para computação matemática em Python
Fornece suporte para arrays e matrizes
, além de funções matemáticas para operações com esses objetos
Nasceu a partir de 2 outros pacotes: Numeric e Numarray. Esses pacotes foram criados em um esforço para prover uma solução open-source ao Matlab.
Numeric e Numarray foram descontinuados e NumPy nasceu com o melhor de ambos
Oferece:
Um rápido e eficiente array multidimensional;
Ferramentas para leitura de datasets baseados em arrays
;
Operações de álgebra linear;
Integração com C,C++ e Fortran.
Além da alta capacidade de processamento de arrays, NumPy adiciona ao Python, uma de suas funções principais em Análise de Dados, a possibilidade de passar dados de um algoritmo para outro.
Para dados numéricos, o NumPy é mais eficiente para armazenar e manipular dados, em relação a outros objetos built-in em Python
:warning:
Operações com Datasets:
Pelo NumPy é possível trabalhar com datasets, mas o ideal é utilizar o Pandas.
O que são arrays?
Uma array Numpy é um conjunto de valores, todos do mesmo tipo e indexados por uma tupla de valores não-negativos
Por que usar Arrays com Numpy?
São homogêneos e possuem tipos estáticos
São mais eficientes no uso de memória
Arrays oferecem rápida implementação de funções matemáticas
Arrays são uma opção mais rápida e poderosa que listas
Embora Numpy não ofereça funcionalidades analíticas de alto nível, a compreensão sobra arrays ajudará a utilizar as ferramentas do Pandas de forma mais eficaz, além de ser a base para construção de modelos de Machine Learning em Python :star:
:warning:
Pandas
É uma biblioteca
criada para manipular de forma rápida e expressiva, dados estruturados
É um dos componentes principais no portifólio Python para análise de dados
Possui uma
sofisticada funcionalidade de indexação que torna fácil o "slice and dice", agregações e seleção de subsets de dados
Possui funcionalidades de manipulação de séries temporais de alta performance
, ideal para manipulação de dados financeiros
Excelente opção para
Data Munging/Wrangling
, que é o processo de converter e mapear dados de um estado "bruto" em outro formato que permita manipular os dados com ferramentas de mais alto nível, como por exemplo aplicar algoritmos de Machine Learning
Largamente utilizado na fase de
preparação dos dados
, uma das fases mais importantes no processo de Data Science
Contém estruturas de alto nível e ferramentas de manipulação que tornam a análise de dados rápida e fácil com Python. Pandas funciona muito bem com Numpy e juntos eles oferecem:
Estrutura de dados de alto nível
Funcionalidade de time-series (séries temporais)
A mesma estrutura de dados consegue tratar dados time-series e não time-series
Tratamento flexível de dados missing
Merge e outras operações relacionais com SQL
Para trabalhar com Pandas, você deve conhecer bem estas duas estruturas:
Series
e
DataFrames
Series
É um array unidimensional que contém um array de dados e uma array de labels, chamado índice.
:warning: Séries são colunas, Dataframes são tabelas!
:warning:
Data Frames
Representam uma estrutura tabular semelhante a estrutura de uma planilha do Microsoft Excel, contendo uma coleção de colunas em que cada um pode ser um diferente tipo de valor (número, string, etc)
Possuem index e linhas e esta estrutura é muito semelhante a um dataframe em R. Os dados de um dataframe são armazenados em um ou mais blocos bidimensionais, ao invés de listas, dicionários ou alguma outra estrutura de array
Dataframes e
Arquivos csv
Usando o método
read_csv
Usando o método
read_table
df.describe()
: Faz um resumo dos campos do dataframe, incluindo count, mean, std, min, max, etc.
Na verdade, um Dataframe é formado por um conjunto de séries, cada uma delas sendo uma coluna da ‘tabela’
:warning:
Time Series
(Série Temporal)
É um DataFrame com apenas uma coluna de dado. Ou seja, uma coluna de índice e uma coluna de dado
Através da série temporal podemos fazer previsão do futuro utilizando machine learning. (cotação de ações, preços de produtos).
:warning:
Gerando um arquivo em excel
a partir de um Dataframe
df.to_excel('/content/drive/MyDrive/Data_Science/teste-df-output.xlsx',sheet_name='Planilha01')
Matplotlib
É a biblioteca Python
mais popular para visualização de dados e geração de gráficos
Permite que você crie facilmente gráficos, histogramas e outras visualizações profissionais
Quando usando no Jupyter Notebook, tem recursos interativos como zoom e visão panorâmica
Possui suporte a todos os sistemas operacionais e também pode exportar gráficos para um vetor comum e outros formatos como: pdf, svg, jpg, png, bmp, gif, etc.
Para simples plotagem o
método pyplot fornece uma interface parecida com Matlab
, especialmente quando combinado com Jupyter Notebook
O usuário tem total controle de estilos de linhas, propriedades de fonte, atributos, etc. através de uma interface orientada a objetos ou através de um conjunto de funções familiares aos usuários de Matlab
A dica mais importante quando se trata de plotagem é:
menos é mais
O objetivo final da visualização dos dados, é apresentar um resultado, um insight. E você não precisa de um gráfico poluído para isso. Acredite, visualização de dados é quase uma arte!
SciPy
É uma
coleção de pacotes que tratam problemas em domínios específicos em computação científica
Scipy e Numpy quando utilizados juntos, possuem por exemplo as mesmas funcionalidades do Matlab.
É um conjunto de algoritmos matemáticos e funções que permitem estender as funcionalidades do Numpy
O
Numpy na verdade é um subconjunto do Scipy
Com Scipy uma sessão interativa do Python torna-se um ambiente de processamento de dados e sistema de prototipagem tal com Matlab, Octave, R-Lab e SciLab
Possui uma série de pacotes, que são utilizadas durante as construções de modelos de
Machine Learning
e também para aplicações de
Inteligência Artificial
:
Álgebra Linear
Matrizes esparsas
Número randômicos
Transformações Fast Fourier
Estimativa de Densidade
Otimização
Processamento de sinais e imagens
:warning:
Scikit-Learn
Machine Learning é um dos temas mais quentes em Data Science. A possibilidade de ensinar um software a aprender com experiência é algo fascinante e abre um mundo de possibilidades.
Permite a construção de modelos preditivos :!:
É cada vez mais comum softwares que aprendem e adquirem novos conhecimentos através da experiência
É provavelmente a biblioteca mais poderosa para Machine Learning em Python
É usado com NumPy, SciPy e Matplotlib, permitindo a criação de ferramentas eficientes para Machine Learning e modelagem estatística como classificação, regressão, clustering e redução de dimensionalidade
É usado para criar modelos e não para leitura, manipulação e sumarização de dados. Existem bibliotecas específicas para isso (NumPy, Pandas, etc)
Contém ferramentas simples e eficiente para a mineração de dados e análise de dados. Ele implementa uma ampla variedade de algoritmos e processos de aprendizado de máquina para realizar análises avançadas
Em geral, um problema de aprendizagem considera um conjunto de amostras de dados e, em seguida, tenta prever propriedades em dados desconhecidos
Os problemas de aprendizagem
de máquina são divididos
em 2 categorias
Supervisionada:
É o termo usando sempre que o programa é "treinado" sobre um conjunto de dados pré-definido. Baseado no treinamento com os dados pré-definidos, o programa pode tomar decisões precisas quando recebe novos dados.
Exemplo
: Pode-se usar um conjunto de dados de recursos humanos para treinamento de Machine Learning, que tenha tweets marcados como positivos, negativos e neutros e assim treinar um classificador de análise de sentimento.
Possui duas
sub-categorias
Classificação
: é o processo de tomar algum tipo de entrada e atribuir um rótulo a ela. Sistemas de classificação são usados geralmente quando as previsões são de natureza distinta, ou seja, um simples "sim" ou "não.
Exemplo
: Mapeamento da imagem de uma pessoa e classificação como masculino ou feminino.
Regressão:
usada quando o valor que está sendo previsto difere de um "sim" ou "não" e que siga um espectro contínuo. Sistemas de regressão poderiam ser usados, por exemplo, para responder às perguntas: "Quanto custa?" ou "Quantos existem?"
Não-supervisionada:
Termo usando quando um programa pode automaticamente encontrar padrões e relações em um conjunto de dados.
Exemplo
: Análise de um conjunto de dados de e-mails e agrupamento automático de e-mails relacionados ao tema, sem que o programa possua qualquer conhecimento prévio sobre os dados.
:warning:
Prevendo o
Preço da Pizza
Modelar o relacionamento usando regressão linear e criar um modelo para prever o preço da Pizza.
Um dos conceitos estatísticos mais utilizados dentro do machine learning, a
regressão linear
é denominada dessa forma por ser uma reta
traçada a partir de uma relação em um diagrama de dispersão
O resultado da regressão linear é sempre um número. É utilizada adequadamente quando o dataset apresenta algum tipo de tendência de crescimento/descrescimento constante.
A classe sklearn.linear_model.LinearRegression é um estimador. Um estimador prevê um valor baseado em dados observados. Em scikit-learn, todos os estimadores implementam os métodos fit() e predict(). O método fit() é usado para aprender os parâmetros de um modelo e o método predict() é usado para prever o valor de uma variável dependente em relação a uma variável explanatória usando os parâmetros aprendidos.
:warning:
Explorando o Dataset
Boston Housing
Prevendo o Preço das Casas em Boston
Y - variável dependente (preço das casas em Boston)
X - variáveis independentes ou explanatórias (todas as outras caracterísricas da casa). Posso usar quantas variáveis eu quiser. Preciso conhecer o processo e experimentar para identificar as variáveis X que influenciarão o Y.
13 coeficientes pois eu tenho 13 variáveis preditoras (13 colunas), isto é, um modelo de regressão linear múltipla, mais de uma variável preditora.
Criar nossos datasets de treino. Vamos então dividir os datasets randomicamente. O Scikit-Learn provê uma função chamada
train_test_split()
para isso.
Bokeh
É uma biblioteca Python usada para
visualização interativa em web browsers
Permite escrever o código em diferentes linguagens, como Python, R, Lua e Julia
Permite a construção elegante e concisa de gráficos com interatividade de alto desempenho em conjunto de dados muito grandes (Big Data) ou de streaming (Real-Time Data), de uma maneira rápida e fácil
Principais benefícios:
Permite construir gráficos estatísticos complexos de forma rápida e através de comandos simples
Fornece a saída em vários meios como html e Jupyter Notebook
Pode transformar visualizações escritas em outras bibliotecas, como Matplotlib, Seaborn ou ggplot
Tem flexibilidade para aplicação de interação, layouts e diferentes opções de estilo de visualização
Interface
Charts
Interface de alto nível, que são usados para construções de gráficos estatísticos complexos mais rapidamente e de forma simplista
Plotting
Interface de nível intermediário, que é centrada nos elementos visuais
Models
Representam uma interface de baixo nível que oferecem a máxima flexibilidade para os desenvolvedores de aplicativos
StatsModels
Fornece classes e funções para estimativa de muitos modelos estatísticos diferentes, bem como para testes estatísticos e exploração de dados
Seaborn
A principal biblioteca em Python é o Matplotlib
. No entanto existem outras opções, criadas recentemente e que vem ganhando notoriedade
É uma biblioteca para construir atraentes e informativos gráficos estatísticos em Python
Construído sobre o Maptplotlib, sendo totalmente integrado com o PyData Stack, incluindo suporte para estruturas NumPy e Pandas e rotinas estatísticas do SciPy e StatsModels
Links Úteis
Bibliografia Big Data e Data Science
Datasets públicos
Pydata
NumPy
Pandas
Formação cientista de dados
Matplotlib
Visualização de dados e Design de Dashboard
SciPy
Scikit-learn
Bokeh
Statsmodels
Seaborn
Deep Learning Book
9.
Introdução à Análise de
Dados com Python
Processo de análise de dados:
1.Problema a ser resolvido;
2.Preparação e exploração dos dados;
3.Criação do modelo;
4.Automatizar o processo;
5.Apresentação do resultado
Lembre-se:
A qualidade de seus outputs depende da qualidade dos seus inputs.
"Se entrar lixo, vai sair lixo"
1.Problema a ser resolvido:
"Se você não sabe para onde vai, qualquer caminho serve".
Perguntas de negócio que precisam ser resolvidas.
"Quem não sabe o que procura, quando o vê não reconhece".
É necessário pelo menos ter uma noção do que se está procurando.
2.Preparação e exploração de dados:
50% a 70% de um cientista de dados.
Uma das etapas mais importantes.
a. Identificação das variáveis:
Variáveis são as colunas em um DataFrame
Identificar as variáveis preditoras (input) e as variáveis target (output).
Definição de dados e categorias.
b. Tratamento de valores missing:
Os valores que estão faltando em determinadas linhas e colunas.
Podem reduzir o poder dos modelos preditivos, que podem levar a resultados distorcidos.
Pode ser um problema da fonte de dados ou extração e coleta dos dados.
Existem técnicas: remover a linha, remover pares de linhas.
c. Tratamento de outliers:
São valores extremos, que fogem da média dos valores.
Remover, tratá-los ou transformá-los.
d. Transformação de variáveis:
Centro nervoso do trabalho de um cientista de dados, pois muitas escolhas terão que ser feitas e essas escolhas poderão influenciar no processo de análise de dados e no resultado final.
Posso mudar a escala de uma variável, mudar a simetria da distribuição dos dados, etc.
Chamada de engenharia de recursos ou feature engineering.
e. Criação de variáveis:
Exemplo de pegar um campo de data e criar um campo com o nome do mês.
3. Criação do modelo
Espera-se que nessa fase os dados estejam limpos e organizados
Definição do modelo de machine learning que ajude a explicar o relacionamento entre as variáveis e fazer as previsões
Temos mais de 60 algoritmos de machine learning, e deve ser escolhido qual será utilizado de acordo com a minha necessidade. Ex: Redes neurais profundas (deep learning)
Divisão de dados de treino e dados de teste
Trabalho iterativo, que é um trabalho de repetição, onde:
a. Preparação e exploração dos dados,
b. Escolhemos um algoritmo,
c. Treinamos o algoritmo,
d. Avaliamos e testamos o nosso modelo
e. Verificamos se a precisão está ou não adequada.
f. Se precisão não estiver adequada:
f.1.Modificamos os dados,
f.2.Alteramos os parâmetro do algoritmo,
f.3.Treinamos de novo,
f.4.Testamos e avaliamos
4. Automatização do processo
Tornar o modelo autônomo de forma que ao receber novos conjuntos de dados seu processo possa ser executado de uma única vez, preferencialmente sem interferência do cientista de dados
É nessa fase que nós pensamos como transformar o processo de análise em um produto ou serviço que poderá ser publicado através de um site de compras ou mesmo através de um dashboard usado pelos gestores para tomada de decisão
Podemos criar um app para smartphone, uma página web
Na formação cientista de dados é utilizado o Microsoft Azure em nuvem para automatizar esse processo e é criada uma aplicação web em linguagem Python, automatizando a entrega de um modelo de machine learning
Na formação IA criamos uma aplicação web e trabalhamos com ambiente em nuvem.
5. Apresentação do resultado
Forma diferentes: Tabelas, Dashboards, apps, etc. Depende do objetivo
Nessa fase o storylling telling pode ser aplicado. Contar a história do que os dados querem dizer, o que é fundamental para aqueles que irão tomar a decisão
Mini-Projeto 2
Análise Exploratória em Conjunto de Dados do Kaggle
A Análise exploratória de dados, é um dos principais componentes do processo de Data Science. É, portanto, parte do trabalho de Cientistas de Dados, Engenheiros de Dados e Analistas de Dados.
Este Mini-Projeto vai demonstrar alguns métodos e técnicas de análise exploratória de dados comuns, usando Python
O conjunto de dados foi retirado do kaggle e contém detalhes dos carros usados na Alemanha que estão à venda no ebay
Link Úteis
Bibliografia Big Data e Data Science
Datasets Públicos
O Incrível Crescimento da Linguagem Python
Kaggle 1
Kaggle 2
Kaggle 3
:warning:
Análise Exploratória
de Dados
:warning:
Foi usado notebook com uma pesquisa recente nos EUA sobre o mercado de trabalho para programadores de software.
Objetivo é fazer uma investigação inicial dos dados a fim de detectar problemas com os dados, necessidade de mais variáveis, falhas na organização e necessidades de transformação
Pesquisa salarial realizada pelo site
http://www.freecodecamp.com/
com programadores de software nos EUA que frequentaram treinamentos Bootcamp.
Lista todas as colunas:
list(df)
:warning: Distribuição de Idade através de histograma :warning:
Análise Exploratória de
Dados com Python
Análise exploratória em um dos mais famosos datasets para Machine Learning, o dataset iris com informações sobre 3 tipos de plantas. Esse dataset é comumente usado em problemas de Machine Learning de classificação, quando nosso objetivo é prever a classe dos dados. No caso deste dataset, prever a categoria de uma planta a partir de medidas da planta (sepal e petal)
10.
Introdução ao
TensorFlow
CPU X GPU
CPU (Central Processing Unit)
GPU (Graphical Processing Unit)
Para programação paralela;
Operações simultâneas;
Bom para execução de modelos de deep learning
Programação
paralela em GPU
CUDA Toolkit: Software para que o computador possa se comunicar com a GPU (hardware)
Preciso também da biblioteca NIVIDIA cuDNN: biblioteca de rede neural artificial profunda para que se possa submeter o modelo de IA para ser executado na GPU
Framework
TensorFlow
vai receber o código Python, transformar e submeter para a plataforma CUDA, que por sua vez vai se comunicar com a GPU e vai receber nosso código de inteligência artificial
O que é o
TensorFlow?
É um framework, que é um conjunto de aplicativos, bibliotecas, APIs que permite você interagir com outro tipo de interface. No nosso caso queremos interagir com a CPU ou GPU.
TensorFlow é uma plataforma completa que facilita a criação e a implantação de modelos de ML
O Tensorflow é uma das bibliotecas mais amplamente utilizadas para implementar o aprendizado de máquina e outros algoritmos que envolvem grandes operações matemáticas.
O Tensorflow foi desenvolvido pelo Google e é uma das bibliotecas de aprendizado de máquina mais populares no GitHub. O Google usa o Tensorflow para aprendizado de máquina em quase todos os aplicativos. Se você já usou o Google Photos ou o Google Voice Search, então já utlizou uma aplicação criada com a ajuda do TensorFlow. Vamos compreender os detalhes por trás do TensorFlow.
Instalando o TensorFlow
O que são
Tensores
?
Tensor
Rank 0
é um
escalar
,
Tensor
Rank 1
é um
vetor
,
Tensor
Rank 2
é uma
matriz
Tensor
Rank 3
é um
tensor
Matematicamente, um tensor é um vetor N-dimensional, significando que um tensor pode ser usado para representar conjuntos de dados N-dimensionais.
TensorFlow x
NumPy
TensorFlow e NumPy são bastante semelhantes (ambos são bibliotecas de matriz N-d). NumPy é o pacote fundamental para computação científica com Python. Ele contém um poderoso objeto array N-dimensional, funções sofisticadas (broadcasting) e etc. Acredito que os usuários Python não podem viver sem o NumPy. O NumPy tem suporte a matriz N-d, mas não oferece métodos para criar funções de tensor e automaticamente computar derivadas, além de não ter suporte a GPU, e esta é uma das principais razões para a existência do TensorFlow. Muitas palavras-chave são semelhantes.
Grafo Computacional
Grafos computacionais são uma boa maneira de pensar em expressões matemáticas. O conceito de grafo foi introduzido por Leonhard Euler em 1736 para tentar resolver o problema das Pontes de Konigsberg. Grafos são modelos matemáticos para resolver problemas práticos do dia a dia, com várias aplicações no mundo real tais como: circuitos elétricos, redes de distribuição, relações de parentesco entre pessoas, análise de redes sociais, logística, redes de estradas, redes de computadores e muito mais. Grafos são muito usados para modelar problemas em computação.
Um Grafo é um modelo matemático que representa relações entre objetos. Um grafo G = (V, E) consiste de um conjunto de vértices V (também chamados de nós), ligados por um conjunto de bordas ou arestas E.
Para criar um grafo computacional, fazemos cada uma dessas operações nos nós, juntamente com as variáveis de entrada. Quando o valor de um nó é a entrada para outro nó, uma seta vai de um para outro e temos nesse caso um grafo direcionado.
Esses tipos de grafos surgem o tempo todo em Ciência da Computação, especialmente ao falar sobre programas funcionais. Eles estão intimamente relacionados com as noções de grafos de dependência e grafos de chamadas.
Eles também são a principal abstração por trás do popular framework de Deep Learning, o TensorFlow
.
Agora sabemos o que o tensor realmente significa, é hora de entender o fluxo. Este fluxo refere-se a um grafo computacional ou simplesmente um grafo.
Um grafo para execução de um modelo de Machine Learning pode ser bem grande e podemos executar sub-grafos (porções dos grafos) em dispositivos diferentes, como uma GPU.
Modelo de
programação
TensorFlow
O principal objetivo de um programa TensorFlow é expressar uma computação numérica como um grafo direcionado. A figura abaixo é um exemplo de grafo de computação, que representa o cálculo de
h = ReLU (Wx + b)
. Este é um componente muito clássico em muitas redes neurais, que conduz a transformação linear dos dados de entrada e, em seguida, alimenta uma linearidade (função de ativação linear retificada, neste caso).
A fórmula é uma rede neural simples. É o ponto de partida para inteligência artificial.
h
: hipótese. É o valor de y. O que pretendo prever.
x
: é a variável ou variáveis de entrada. São os dados históricos.
b
: é o bies (viés), um componente que adicionamos a operação matemática.
W
: é um vetor/matriz de pesos. Eu não tenho o valor de W antes de treinar o modelo, motivo pelo qual eu treino o modelo, onde aprendo também o valor ideal de
b
. No início coloco valores aleatórios a
W
, que é o que chamamos inicialização de pesos.
ReLu
: função de ativação com o objetivo de gerar linearidade.
Passo os dados várias e várias vezes no grafo computacional e ao final terei o
modelo, que nada mais é que um conjunto de dados numéricos que representa exatamente o W
. Salvo o modelo em disco, depois informo novos valores de
x
, para prever o valor de
h
ou
y
O grafo acima representa um cálculo de fluxo de dados; cada nó está em operação com zero ou mais entradas e zero ou mais saídas. As arestas do grafo são tensores que fluem entre os nós. Os Cientistas de Dados geralmente constroem um grafo computacional usando uma das linguagens frontend suportadas como Python e C ++ e, em seguida, iniciam o grafo.
Vamos ver o grafo computacional acima em detalhes. Truncamos o grafo e deixamos a parte acima do nó ReLU, que é exatamente o cálculo h = ReLU (Wx + b).
Podemos ver o grafo como um sistema, que tem entradas (os dados x), saída (h neste caso), variáveis com estado (W e b) e um monte de operações (matmul, add e ReLU).
Variáveis
: quando treinamos um modelo, usamos variáveis para manter e atualizar parâmetros. Ao contrário de muitos tensores que fluem ao longo das margens do grafo, uma variável é um tipo especial de operação. Na maioria dos modelos de aprendizado de máquina, existem muitos parâmetros que temos que aprender, que são atualizados durante o treinamento. Variáveis são nós com estado que armazenam parâmetros e produzem seus valores atuais de tempos em tempos. Seus estados são mantidos em múltiplas execuções de um grafo. Por exemplo, os valores desses nós não serão atualizados até que uma etapa completa de treinamento usando um mini lote de dados seja concluída.
Operações matemáticas
: Neste grafo, existem três tipos de operações matemáticas. A operação
MatMul
multiplica dois valores de matriz; A operação
Add
adiciona elementos e a operação
ReLU
é ativada com a função linear retificada de elementos.
É o que é aprendido durante o treinamento do modelo
Mini-Projeto 3
Guia de Modelagem Preditiva com Python e TensorFlow. O objetivo é trazer o processo de Machine Learning de ponta a ponta e então mostrar em alto nível cada etapa necessária para construir, treinar, avaliar e fazer previsões com o modelo.
Links Úteis
:warning:
Bibliografia Big Data e Data Science
:warning:
TensorFlow
CUDA Toolkit
Deep Learning Frameworks
O Que é Visão Computacional?
TensorFlow: Large-Scale Machine Learning on Heterogeneous Distributed Systems
Formação IA
11.
Introdução
a Machine
Learning com Python
O que é
aprendizado?
5 Características principais:
Adaptação; Correção; Otimização; Representação; Interação.
É a capacidade de se adaptar, modificar e melhorar o seu comportamento e suas respostas, sendo portanto uma da propriedades mais importantes dos seres ditos inteligentes, sejam eles humanos ou não.
Estamos tentando reproduzir o processo de aprendizado de seres humanos em máquinas, através de algoritmos de Machine Learning
O que é machine learning (aprendizado de máquina)?
É matemática, estatística e programação de computadores
É um subcampo da Inteligência Artificial. É o estudo e construção de algoritimos que podem aprender a partir de dados e fazer previsões. O aspecto iterativo do aprendizado de máquina é importante porque, conforme os modelos são expostos a novos dados, eles são capazes de se adaptar de forma independente.
Impulsionado pelo Big Data
É um método de análise de dados que automatiza o desenvolvimento de modelos analíticos. Usando algoritmos que aprendem iterativamente a partir de dados. O aprendizado de máquina permite que os computadores encontrem insights a partir de reconhecimento de padrões.
Em vez de escrever um programa à mão para cada tarefa específica, nós coletamos muitos exemplos que especificam a saída correta para uma determinada entrada. Um algoritmo de aprendizagem de máquina recebe esses exemplos e produz um programa que faz o trabalho.
Inteligência Artificial x
Machine Learning x
Deep Learning
Tipos de aprendizagem
de máquina
Supervisionada
:red_flag:
Previsão de valores ou classes
Os dados de treino precisam conter os valores de entrada e saída, para que o modelo aprenda como, a partir de novos dados de entrada, gerar a saída correta.
Cada linha (observação) no conjunto de dados possui atributos (tamanho, número de quartos, ano de construção) =
dados de entrada
Preço da casa =
dados de saída
2 Categorias
Classificação
:
Tem como alvo variáveis qualitativas, ou seja, categóricas (sim ou não | masculino ou feminino). Pode ser classificação binária ou multiclasse (mais de duas categorias).
Análise de Sentimentos. Ex: twites positivos, negativos e neutros.
Regressão
:
O alvo é um valor numérico. Segue um espectro contínuo. Quanto custa? Quantos existem?
Fazem previsões com base em um conjunto de exemplos. Ex: previsão de ações na bolsa de valores.
É o termo usando sempre que o programa é "treinado" sobre um conjunto de dados pré-definido.
Dados históricos fazem a previsão do futuro.
Não
supervisionada
Identificação de grupos (clusters) de dados
Os dados de treino contém apenas os dados de entrada
Alguns sistemas de recomendação encontrados na internet sob a forma de automação de markenting são baseados nesse tipo de aprendizagem. Estimativa de que grupo de clientes eu me pareço mais e depois o algoritmos faz a inferência sobre as minhas preferências.
É usado com dados que não possuem rótulos históricos, ou seja, nós não temos variável target (variáveis de saída) para serem estimadas.
Algoritmos dessa categoria podem identificar segmentos de clientes com atributos semelhantes que podem ser tratados de modo semelhante em campanhas de marketing
Termo usado quando um programa pode automaticamente encontrar padrões e relações em um conjunto de dados, mesmo sem saber quais são as possíveis saídas.
Por reforço
Treinamento,
Validação e Teste
Os processos de aprendizagem dos algoritmos de ML começa com a criação de
subsets dos seus dados, são os chamados dados de treino e dados de teste
.
70% a 75% - dados de treino
25% a 30% - dados de teste
Problemas como overfitting. Solução usando:
70% dados para treino
20% dados para validação
10% dados para teste
Depende também do algoritmo de ML que se esteja trabalhando.
É recomendável realizar a separação de forma aleatória, independentemente da ordenação inicial dos dados.
Quando a amostra for n>10.000, posso criar um conjunto de dados aleatoriamente dividido.
Se menor, devo comparar as estatísticas básicas, como média, moda, mediana, variância e desvio padrão para avaliar se o conjunto de teste é adequado ou não. Caso não tenha certeza se foi feita a separação correta de dados de treino e de teste, faça os cálculos. Os dados devem ser tratados da forma mais profissional possível para que o treinamento seja adequado.
Verificar se a acurácia do modelo está adequado.
Cross-Validation ou
Validação Cruzada
Técnica para avaliar a capacidade de generalização de um modelo de ML a partir de um conjunto de dados.
Amplamente empregada em problema cujo objetivo de modelagem é a predição. Busca-se então estimar o quão preciso é este modelo na prática, ou seja, o seu desempenho para um novo conjunto de dados.
Particionamento do conjunto de dados em subconjuntos mutuamente exclusivos e posteriormente utiliza-se alguns desses subconjuntos para estimação dos parâmetros do modelo, dos dados de treinamento e o restante dos subconjuntos, dados de validação ou de teste são empregados na validação do modelo. Ou seja, nós temos algumas técnicas de cross-validation exatamente para tentar evitar o problema que nós causamos no momento em que fazemos a divisão em dados de treino e teste.
O que é um
modelo preditivo?
Coleta de dados
Exploração e preparação (análise exploratória dos dados)
Treinamento do modelo (de acordo com o algoritmos escolhido). O processo de "fit" do modelo de um dataset é chamado de treinamento do modelo.
Avaliação do modelo
Otimização do modelo
Seu trabalho como
cientista de dados
é buscar sempre o melhor modelo possível para suas previsões
:star:
O modelo pode ser implementado, se tiver tido um bom desempenho, para resolver o problema de negócio para o qual ele foi desenvolvido
. É quando fazemos o deploy do modelo em produção, que nada mais é do que gerar um produto ou serviço (ex: sistema de recomendação de livros, projeções sobre análises financeiras, resultados de campanhas de marketing em tempo real ou mesmo gerar um relatório que servirá de suporte para tomadas de decisões. :star:
Lembre-se: um modelo de machine learning será usado para resolver um problema específico :!:
Não pode ser aplicado a tudo que se vê pela frente. Problemas diferentes requerem modelos diferentes.
Modelo Preditivo:
Um pouco de matemática
Modelo preditivo é uma função matemática que, aplicada a uma massa de dados, consegue identificar padrões ocultos e prever o que poderá ocorrer.
O que é um processo estocástico?
Fenômeno que varia em algum grau, de forma imprevisível, à medida que o tempo passa.
Exs
: variação do tráfego em um cruzamento, variação diária no tamanho de estoque de uma empresa, variação minuto a minuto do índice IBOVESPA, variação no estado de um sistema de potência, variação no número de chamadas feitas a uma central telefônica.
Na aprendizagem supervisionada, o objetivo do aprendizado de máquina é aprender a aproximação da função
f
que melhor representa a relação entre os atributos de entrada (chamadas variáveis preditoras) com a variável de saída (chamada variável target)
O processo de
aprendizagem
Um componente chave do processo de aprendizagem é a generalização.
Se um algoritmo de Machine Learning não for capaz de generalizar uma função matemática que faça previsões sobre novos conjuntos de dados, ele não está aprendendo nada e sim memorizando os dados, o que é bem diferente.
E para generalizar a função que melhor resolve o problema, os algoritmos de Machine Learning se baseiam em 3 componentes:
Representação;
Avaliação;
Otimização.
Os algoritmos de Machine Learning possuem diversos parâmetros internos
O modelo de Machine Learning é composto do espaço de hipóteses e um algoritmo de aprendizagem
Nenhum algorítmo único, ou uma combinação de algoritmos, é 100% preciso o tempo todo. Pelo menos não ainda! Podem ter erros de mapeamento e os chamados falsos positivos, quando o algoritmo parece ter encontrado a melhor solução, mas que na verdade não resolve o problema. Normalmente quando isso ocorre foi devido a insuficiência de dados ou um pré-processamento que não foi feita de maneira adequada.
Cost Function (Função de custo, função de perda, função objetivo, função de pontuação ou função de erro)
É uma função de avaliação que mede quão bem o algoritmo mapeia a função alvo, aquela que ela está tentando deduzir a partir dos dados que você forneceu.
Determina o quão bem o algoritmo de aprendizado de máquina executa em um processo supervisionado ou em um problema de otimização não supervisionado.
Definindo o erro:
Comparamos as previsões com os dados que alimentamos no início, para saber se a saída que eu alimentei no início é parecida ou não com a saída do meu modelo. Eu comparo esses valores e calculo a taxa de erro, que é usada para atualizar o algoritmo a cada passada.
Por se uma função matemática expressa o nível de erro em uma forma numérica
Underfitting x Overfitting
Overfitting
:
ocorre quando o algoritmo aprende tanto sobre os dados ao ponto que a curva de mapeamento dos parâmetros simplesmente deixa de existir e a partir desse ponto qualquer mudança vai simplesmente gerar mais erros.
Underfitting
:
é quando o algoritmo não é capaz de aprender a formulação matemática que descreve os dados, seja porque não temos dados suficientes ou os parâmetros ou combinações de parâmetros não são suficientes também.
Elementos do processo
de aprendizagem
Para que ocorra a aprendizagem é preciso que:
Um padrão exista (tem um histórico);
Não exista um único modelo matemático que explique esse padrão (não deve existir uma fórmula matemática pronta);
Dados esteja disponíveis (dados históricos, para que se possa conhecer os padrões).
Cenário de Aprovação de Crédito
Se já existe uma fórmula matemática para dar a solução para que eu vou usar um modelo de machine learning? Só uso ML se não existir um modelo matemático.
Elementos do processo de
aprendizagem supervisionada:
Input
| X (dados do cliente),
Output
| Y (decisão -> crédito: sim/não),
Função alvo
| f: X->Y (representação do relacionamento, função matemática desconhecida),
Dados
| x1,y1; x2,y2; xn,yn (dados históricos),
Hipótese
| g: x -> y (função a ser descoberta pelo algoritmo). É a aproximação da função f.
Espaço de Hipóteses
Modelo de aprendizagem tem o
espaço de hipóteses
e um
algoritmo de aprendizagem
, isto é, uma combinação.
Exemplo1
:
Redes neurais ( Espaço de hipóteses ),
Backpropagation ( Algoritmo de aprendizagem ). Posso utilizar outros algoritmos para redes neurais.
Exemplo2
:
Support Vector Machines ( Espaço de hipóteses ),
Programação Quadrática ( Algoritmo de aprendizagem ).
Algoritmos de
Machine Learning
Aprendizagem
Supervisionada
Classificação
Regressão
Ordinary Least Squares Regression (OLSR),
Linear Regressional,
Logistic Regression,
Stepwise Regression,
Multivariate Adaptive Regression Splines (MARS),
Locally Estimated Scatterplot Smoothing (LOESS).
Refere-se a modelar a relação entre as variáveis, ajustando as medidas de erro nas previsões feitas pelo modelo.
Para valores numéricos
Aprendizagem
Não Supervisionada
Clustering
Segmentação
Redução de Dimensionalidade
Aprendizagem
por Reforço
Sistemas de Recomendação
Sistemas de Recompensa
Processo de Decisão
Há tantos algoritmos disponíveis com tantos métodos diferentes, que somente o processo de escolha de qual deve ser usado, já vai consumir bastante do seu tempo como Cientista de Dados
Algoritmos
regulatórios
Ridge Regression,
Least Absolute Shrinkage and Selection Operator (LASSO),
Elastic Net,
Least-Angle Regression (LARS).
Extensão para os métodos de regressão. Populares e poderosos
Algoritmos baseados em
Instância (
Instance-Based
)
Geralmente constroem um banco de dados de exemplo e comparam os novos dados com esse banco, utilizando uma medida de similaridade a fim de encontrar a melhor correspondência e assim fazer uma previsão.
Aprendizagem baseada em memória,
k-Nearest Neighbour (kNN),
Learning Vector Quantization (LVQ),
Self-Organizing Map (SOM),
Locally Weighted Learning (LWL).
Algoritmos de
Árvore de Decisão
Classification and Regression Tree (CART),
Conditional Decision Trees,
Iterative Dichotomiser 3 (ID3),
C4.5 and C5.0,
Chi-squared Automatic Interaction Detection (CHAID),
Decicion Stump,
M5.
Constroem um modelo de decisão com base em valores reais dos atributos dos dados. Eles então criam uma espécie de estrutura de árvore, até que uma decisão de previsão seja feita para um determinado registro
São treinadas com dados para
problemas de classificação e regressão
.
São muitas vezes rápidas e precisas. E um dos métodos preferidos no processo de Machine Learning
Algoritimos
Bayesianos
Naive Bayes,
Gaussian Naive Bayes,
Multinomial Naive Bayes,
Averaged One-Dependence Estimators (AODE),
Bayesian Belief Network (BBN),
Bayesian Network (BN).
São aqueles que explicitamente aplicam o famoso teorema de Bayes, um dos fundamentos da estatística, para
problemas tais como classificação e regressão
.
Algoritmos de
Clustering
k-Means,
k-Means ++,
k-Medians,
Expectation Maximization (EM),
Hierarchical Clustering.
Nessa categoria os dados são organizados em grupos, chamados clusters
Algoritmos Baseados em
Regras de Associação
Apriori algorithm,
Eclat algorithm
São métodos que extraem regras que melhores explicam as relações observadas entre as variáveis dos dados.
Podem descobrir associações importantes, comercialmente úteis em grandes conjuntos de dados multidimensionais
Redes Neurais
Artificiais
Perceptron,
Multilayer Perceptron,
BackPropagation,
Hopfield Network,
Radial Basis Function Network (RBFN)
Modelos que são inspirados pela estrutura ou pelas funções das redes neurais biológicas. São uma classe de correspondência de padrões.
São comumente usadas para problemas de regressão ou de classificação
. Mas que são na verdade um enorme subcampo composto por centenas de algoritmos e variações de todos os tipos de problemas.
Bastante importante em Machine Learning
Deep Learning
Convolutional Neural Network (CNN),
Recurrenty Neural Network (RNN),
Deep Boltzmann Machine (DBM),
Deep Belief Networks (DBN),
Stacked Auto-Encoders,
Generative Adversarial Netwok.
São uma atualização moderna para redes neurais artificiais.
Estão preocupados com redes neurais maiores e mais complexas para resolver problemas mais complexos, como
problemas de visão computacional e processamento de linguagem natural
.
É a essência para aplicações de inteligência artificial
Algoritimos de
Redução
de Dimensionalidade
Principal Component Analysis (PCA),
Principal Component Regression (PCR),
Partial Least Squares Regression (PLSR),
Multidimensional Scalling (MDS),
Linear Discriminant Analysis (LDA),
Mixture Discriminant Analysis (MDA),
Quadratic Discriminant Analysis (QDA),
Flexible Discriminant Analysis (FDA).
Busca explorar a estrutura inerente aos dados, mas de forma não supervisionada, ou para resumir, ou para descrever os dados usando menos informações. Muitos desses métodos podem ser adaptados para uso na classificação e regressão.
Algoritmos
Ensemble
Boosting,
Bootstrapped Aggregation (Bagging),
AdaBoost,
Stacked Generalization (blending),
Gradient Boosting Machine (GBM),
Gradient Boosted Regression Trees (GBRT),
Random Forest.
Modelos compostos por múltiplos modelos mais fracos que são independentemente treinados e cujas previsões são combinadas de alguma forma para fazer a previsão final.
Bastante poderosa e bastante utilizada nas competições do Kaggle
Outro algoritmos e modelos
Support Vector Machines,
Computer Vision (CV),
Natural Language Processing (NPL),
Sistemas de Recomendação.
Machine Learning
Workflow
Conjunto de etapas que sistematicamente transforma e processa dados a fim de criar soluções preditivas
Business Problem
Preparação de Dados
Seleção do Algoritmo
Treinamento do Modelo
Teste e Avaliação do Modelo
Dicas: :warning:
A etapa de preparação dos dados é uma das mais importantes. Lembre-se: a qualidade dos seus outputs será equivalente a qualidade dos seus inputs.
A medida que você caminha pelo processo, percebe a necessidade de modificar etapas anteriores. Isso é normal e esperado.
Os dados raramente virão prontos, organizados e limpos. É seu trabalho fazer isso.
Mais dados = Melhores resultados. Por isso Big Data está revolucionando o mundo :!!:
Não perca tempo com uma solução ruim. Avalie, otimize e se perceber que o resultado esperado não será alcançado, descarte e comece novamente!
:warning:
Business Problem
Definindo o Problema de Negócio :warning:
Definindo os Objetivos:
Definir o escopo,
Definir os níveis de performance do modelo preditivo,
Definir o contexto,
Definir como a solução será criada.
Prever se uma pessoa irá desenvolver diabetes:
Definir as fontes de dados,
Compreender os atributos dos dados coletados,
Selecionar as ferramentas de análise mais adequados,
Definir o resultado esperado. Neste caso: Verdadeiro ou Falso,
Definir o nível de acurácia: 70% de precisão.
Obs
: enquanto o modelo não chegar em 70% de precisão, o objetivo não foi alcançado.
É o que precisa ser feito em cada projeto de Machine Learning
.
Links Úteis
Bibliografia Big Data e Data Science
Machine Learning: An Artificial Intelligence Approach
Intelligent Systems: A Modern Approach: 17
Principles and Theory for Data Mining and Machine Learning
Ensemble Machine Learning: Methods and Applications
Deep Learning Book
12.
Introdução a Deep Learning
Introdução
Principal tecnologia usada em sistemas de inteligência artificial
. São redes neurais profundas que tentam simular em máquinas o funcionamento do cérebro humano e que
vem sendo usadas com sucesso em diversas aplicações de inteligência artificial com níveis de precisão cada vez maiores
.
É uma subárea de Machine Learning, que por sua vez é uma subárea de Inteligência Artificial.
2 pilares que vem possibilitando a rápida evolução de IA:
Big Data (grande quantidade de dados gerados em alta velocidade, variedade e volume;
Programação paralela, especialmente em GPUs (Unidades de Processamento Gráfico).
3 cursos DSA Deep Learning:
Deep Learning Frameworks;
Deep Learning I;
Deep Learning II.
Por que aprender
Deep Learning?
Aplicações
:
Visão computacional;
Reconhecimento de voz;
Processamento de linguagem natural
Vem sendo usada nas mais diversas áreas: desde descobertas de novos medicamentos, passando por tradutores online de idiomas, até busca em documentos e assistentes virtuais
Deep Learning é o termo usado para descrever o processo de utilizar modelos de redes neurais de múltiplas camadas e que podem ser usados para uma incrível variedade de diferentes combinações de técnicas matemáticas.
Exemplos
:
:warning: Veículos autônomos, reconhecimento facial, análise preditiva, reconhecimento de voz, sistemas de tradução de idiomas, composição de músicas por algoritmos. :warning:
:warning:
Áreas de Aplicação
:warning:
1. Compreendendo o comportamento do cliente
Objetivo: Entender o comportamento do cliente e sua propensão para comprar um produto específico.
Redes neurais recorrentes e suas células.
2. Reconhecimento de faces
Objetivo: Identificar, detectar e rastrear pessoas de interesse, veículos estacionados, falta de bagagem e muito mais usando CCTVs ou outras câmeras high-end.
VPUs: Unidades de processamento de vídeos.
3. Suporte técnico personalizado e assistentes pessoais
Objetivo: Melhorar a eficiência do trabalho de uma organização através da instalação de uma unidade de equipe de suporte baseada em chatbots que usam Inteligência Artificial, em vez de contratar mão-de-obra manual.
Exemplo: Clara, que é utilizada para agendamento de reuniões, gerar relatórios e fazer pedidos.
4. Mineração com redes neurais convolucionais
(funcionam com base na visão humana)
Objetivo: Detectar depósitos minerais usando imagens de satélite multi-espaciais que ajudam a encontrar recursos minerais.
5. Classificação automática de doenças oculares
Objetivo: simplificar os processos que conduzem à detecção de doenças oculares, proporcionando aos pesquisadores orientação baseada em informações históricas.
Exemplo: retinopatia diabética.
6. Redução de taxa de erro no diagnóstico de câncer
Objetivo: Usar dados compactos para habilitar diagnóstico rápido e sem erros.
Nessas aplicações os modelos são alimentados com dados que foram coletados de clientes. Os planos de calor de probabilidade tumoral são usados para encontrar a probabilidade de um determinado elemento contendo câncer. Permitiu que os patologistas trabalhando com computadores com aplicações utilizando deep learning, superassem os patologistas operacionais.
Os algoritmos desse modelo ajudam os patologistas a identificar as células cancerígenas através das imagens dos linfonodos
.
7. Carros autônomos
Objetivo: criar um sistema que entenda conexões entre vários conjuntos de dados.
Computador neural diferenciável que cria um sistema de navegação.
Redes neurais artificiais
O desenvolvimento do cérebro humano ocorre principalmente nos 2 primeiros anos de vida.
O cérebro humano é verdadeiramente a máquina mais incrível do planeta Terra. E estamos tentando reproduzir seu funcionamento em computadores.
Habilidade de aprender através de dados de entrada com ou sem supervisão.
O cérebro humano tem sido extensamente estudado, mas ainda não somos capazes de entender completamente seu funcionamento.
Com redes neurais artificiais tentamos programar um computador de modo e fazê-lo imitar um comportamento inteligente (saber jogar xadrez, compreender e manter um diálogo, traduzir línguas estrangeiras, resolver problemas de matemática, etc.)
Modela a relação entre um conjunto de sinais de entrada e um sinal de saída usando um modelo derivado de nossa compreensão de como um cérebro biológico responde a estímulos de entradas sensoriais.
Computação paralela em
GPUs
(Unidades de processamento gráfico) está acelerando o desenvolvimento de sistemas inteligentes, pois somos capazes de processar cada vez mais dados em redes neurais artificiais com cada vez mais neurônios (modelos matemáticos artificiais).
As unidades de processamento gráfico, que permitem realizar operações matemáticas de forma paralela, principalmente operações com matrizes e vetores, elementos presentes em modelos de redes neurais artificias, formaram a tempestade perfeita, que permitiu a evolução na qual nos encontramos hoje:
Big Data + Processamento Paralelo + Modelos de Aprendizagem de Máquina = Inteligência Artificial
.
São modelos versáteis que podem ser aplicadas a quase todas as tarefas de aprendizagem: classificação, previsão numérica e mesmo reconhecimento não supervisionado de padrões.
São melhor aplicadas a problemas onde os dados de entrada e os dados de saída são bem definidos ou, pelo menos, bastante simples, mas o processo que relaciona a entrada com a saída é extremamente complexo.
São
considerados métodos de caixa preta
, pois não sabemos como se chegou ao resultado.
A unidade fundamental de uma rede neural artificial é um nó (ou neurônio matemático), que por sua vez é baseado no neurônio biológico
Uma breve história das
redes neurais artificiais
O que são redes neurais
profundas ou deep learning?
Jonh McCarthy, considerado o pai da inteligência artificial
A Inteligência Artificial busca ensinar computadores a executar tarefas que são fáceis para os seres humanos, mas que não podem ser descritas formalmente ou são muito complexas para computadores, como reconhecimento de voz e imagens
.
Se desenharmos um gráfico mostrando como esses conceitos são construídos um sobre o outro, o gráfico é profundo, com muitas camadas. Por essa razão, nós chamamos essa abordagem da Inteligência Artificial, de
Aprendizagem Profunda
ou
Deep Learning
Cada neurônio (círculo branco do gráfico) é caracterizado pelo peso, bias e a função de ativação
Arquiteturas de
Deep Learning
São diversas arquiteturas, usadas para resolver diferentes tipos de problemas
Redes neurais convolucionais, usadas em problemas de Visão Computacional
Redes neurais recorrentes usadas em problemas de Processamento de Linguagem Natural
O que caracteriza modelos de aprendizagem profunda, como o nome sugere, são redes neurais artificiais com muitas camadas ocultas (ou intermediárias). Mas antes de chegarmos lá, precisamos passar pela arquitetura mais simples de uma rede neural artificial, o
Perceptron
Perceptron
Perceptron
é uma rede neural de camada única e um Perceptron de várias camadas é chamado de Rede Neural Artificial. O Perceptron é um classificador linear (binário). Além disso, é usado na aprendizagem supervisionada e pode ser usado para classificar os dados de entrada fornecidos
Um
Perceptron
é um modelo matemático que recebe várias entradas, x1, x2, … e produz uma única saída binária
Função de
Ativação
A informação se move da camada de entrada para as camadas ocultas. As camadas ocultas fazem o processamento e enviam a saída final para a camada de saída. Este é o movimento direto da informação conhecido como propagação direta.
Mas e se o resultado gerado estiver longe do valor esperado :question:
Em uma rede neural, atualizaríamos os pesos e bias dos neurônios com base no erro. Este processo é conhecido como BACKPROPAGATION
É um componente matemático em nosso neurônio artificial, que permite que pequenas mudanças nos pesos e bias causem apenas uma pequena alteração no output. Esse é o fato crucial que permitirá que uma rede de neurônios artificiais aprenda.
Basicamente decidem se um neurônio deve ser ativado ou não
Uma rede neural sem função de ativação é essencialmente apenas um modelo de regressão linear. Uma equação linear é simples de resolver, mas é limitada na sua capacidade de resolver problemas complexos.
Queremos que nossas redes neurais funcionem em tarefas complicadas, como
traduções de idiomas (Processamento de Linguagem Natural)
e
classificações de imagens (Visão Computacional)
Tipos
Função de Etapa Binária (Binary Step Function): Se o valor Y estiver acima de um valor de limite determinado, ative o neurônio senão deixa desativado
Função Linear: f(x) = ax
Sigmóide: f (x) = 1 / (1 + e ^ -x)
Tanh:
Tanh (x) = 2sigmoides (2x) -1
tanh (x) = 2 / (1 + e ^ (- 2x)) -1
ReLU
: f(x) = max (0, x).
É a função de ativação mais amplamente utilizada ao projetar redes neurais atualmente
Leaky ReLU:
Não passa de uma versão melhorada da função ReLU
Softmax:
é um tipo de função sigmóide, mas é útil quando tentamos lidar com problemas de classificação
Escolhendo a função:
Funções Sigmóide e suas combinações geralmente funcionam melhor no caso de classificadores.
Funções Sigmóide e Tanh às vezes são evitadas devido ao problema de Vanishing Gradient.
A função ReLU é uma função de ativação geral e é usada na maioria dos casos atualmente.
Se encontrarmos um caso de neurônios deficientes em nossas redes, a função Leaky ReLU é a melhor escolha.
Tenha sempre em mente que a função ReLU deve ser usada apenas nas camadas ocultas.
Como regra geral, você pode começar usando a função ReLU e depois passar para outras funções de ativação no caso da ReLU não fornecer resultados ótimos.
:warning:
Backpropagation
“diferenciação de modo reverso”
(reverse-mode differentiation
È indiscutivelmente o algoritmo mais importante na história das redes neurais. É o algoritmo-chave que faz o treinamento de modelos profundos algo computacionalmente tratável
Além de seu uso em Deep Learning, o backpropagation é uma poderosa ferramenta computacional em muitas outras áreas, desde previsão do tempo até a análise da estabilidade numérica
É uma técnica para calcular derivadas (taxa de variação entre 2 pontos) rapidamente
Grafo Computacional
Grafos são modelos matemáticos para resolver problemas práticos do dia a dia, com várias aplicações no mundo real tais como: circuitos elétricos, redes de distribuição, relações de parentesco entre pessoas, análise de redes sociais, logística, redes de estradas, redes de computadores e muito mais
Eles também são a principal abstração por trás do popular framework de Deep Learning, o TensorFlow.
É considerado o método padrão em redes neurais artificiais para calcular a contribuição de erro de cada neurônio após processar um lote de dados.
Backpropagation e o
Treinamento de Redes Neurais
O algoritmo de backpropagation
consiste em duas fases:
O passo para frente (forward pass), onde nossas entradas são passadas através da rede e as previsões de saída obtidas (essa etapa também é conhecida como fase de propagação).
O propósito do passo para frente é propagar nossas entradas (os dados de entrada) através da rede aplicando uma série de dot products (multiplicação entre os vetores) e ativações até chegarmos à camada de saída da rede (ou seja, nossas previsões)
O passo para trás (backward pass), onde calculamos o gradiente da função de perda na camada final (ou seja, camada de previsão) da rede e usamos esse gradiente para aplicar recursivamente a regra da cadeia (chain rule) para atualizar os pesos em nossa rede (etapa também conhecida como fase de atualização de pesos ou retro-propagação).
As 10 Principais Arquiteturas
de Redes Neurais
1- Redes Multilayer Perceptrons:
É um algoritmo simples destinado a realizar a classificação binária; isto é, prevê se a entrada pertence a uma determinada categoria de interesse ou não:
fraude ou não_fraude, gato ou não_gato.
:star:
2- Redes Neurais Convolucionais
(ConvNets ou CNNs)
São redes neurais artificiais profundas que podem ser usadas para classificar imagens, agrupá-las por similaridade (busca de fotos) e realizar reconhecimento de objetos dentro de cenas. São algoritmos que podem identificar rostos, indivíduos, sinais de rua, cenouras, ornitorrincos e muitos outros aspectos dos dados visuais.
Este tipo de rede
está impulsionando grandes avanços em Visão Computacional
, que tem aplicações óbvias em carros autônomos, robótica, drones, segurança, diagnósticos médicos e tratamentos para deficientes visuais
:star:
3- Redes Neurais Recorrentes
Especialmente úteis para o processamento de dados sequenciais, como som, dados de séries temporais ou linguagem natural. Uma versão de redes recorrentes foi usada pelo DeepMind no projeto de videogames com agentes autônomos
4- Long Short-Term Memory (LSTM)
Possuem muitas aplicações práticas, incluindo processamento de linguagem natural, geração automática de texto e análise de séries temporais
5- Redes de Hopfield
6- Máquinas de Boltzmann
Foi uma das primeiras redes neurais capazes de aprender representações internas e é capaz de representar e resolver problemas combinatórios difíceis.
7- Deep Belief Network
São usadas para reconhecer, agrupar e gerar imagens, sequências de vídeos e dados de captura de movimento. Outra aplicação das Deep Belief Networks é no Processamento de Linguagem Natural.
8- Deep Auto-Encoders
9- Generative Adversarial Network
10- Deep Neural Network Capsules
Recurrent Neural Networks
(Redes Neurais Recorrentes)
A idéia por trás das RNNs é fazer uso de informações sequenciais.
Tem uma espécie de memória que captura informações sobre o que foi calculado até o momento.
Constituem uma ampla classe de redes cuja evolução do estado depende tanto da entrada corrente quanto do estado atual.
O tipo mais comumente usado são as LSTMs (Long Short-Term Memory), que são muito melhores na captura de dependências de longo prazo do que RNNs padrões.
Tem mostrado grande sucesso em muitas tarefas de processamento de linguagem natural.
A arquitetura usada em RNNs é adequada para permitir o processamento de informação sequencial (textos, áudio e vídeo)
Unidades de Entradas, Unidades Ocultas, Unidades de Saídas.
Retroprogramação através do tempo (Backpropagation Through Time, BPTT).
O BACKPROPAGATION é utilizado para atualização dos pesos da rede neural, quando se encontra o erro para calcular o gradiente da derivada, volta para o início, atualiza os pesos e fica no ciclo durante o período
.
Aplicações
:
Reconhecimento de fala, geração de texto, geração de texto manuscrito, tradução automática de idiomas, predição em vídeo, previsões de séries temporais, construções de robôs advogados.
Mini-Projeto 4
:warning: Inteligência Artificial na Agricultura
:warning:
Este Mini-Projeto é uma demonstração prática de como construir um modelo de Inteligência Artificial usando Deep Learning
Nosso objetivo será construir um modelo de IA para classificação que, ao receber uma imagem, vai identificar se a imagem é de uma fruta ou vegetal e indicar o nome exato da fruta ou vegetal. Esse tipo de modelo envolve conceitos de Visão Computacional, uma das principais áreas da Inteligência Artificial e tem diversas aplicações práticas no setor de Agricultura. Os conceitos estudados podem ser usados em projetos de qualquer outro segmento.
Base de Dados
Links Úteis
Bibliografia Big Data e Data Science
Machine Learning: An Artificial Intelligence Approach
Deep Learning e a Tempestade Perfeita
Uma Breve História das Redes Neurais Artificiais
The Neural Network Zoo
7 Casos de Uso de Deep Learning
Clara
Howdy
13.
Desenvolvimento Web
As aplicações web são executadas no navegador do usuário, ou seja, não é necessário instalar no computador.
A linguagem Python, por ser de uso geral, permite o desenvolvimento de aplicações web, que podem ser usadas, por exemplo, para a publicação de aplicações analíticas como o resultado de um processo de Data Science.
O que é o
desenvolvimento web?
É o termo usado para descrever a criação de softwares, que são usados via web. Esses softwares são normalmente desenvolvidos para realizar operações em tempo real.
Ex: Internet Banking
Front-End
: Interface inicial.
HTML, CSS, XHTML, JavaScript, Ajax, Flash
Back-End
: Onde tem a inteligência de negócio.
PHP, ASP, .NET, Node.js(JavaScript), Java (J2EE),
Python (Django, Flask)
, Ruby (Ruby on Rails)
Profissional que domina Front-End e Back-End é denominado de
Full-Stack Web Developer
Banco de dados:
MySQL, PostgreSQL, SQLite, Firebird, SQL Server, Oracle, DB2
Web Design, Arquitetura da Informação, Usabilidade, Acessibilidade
Diferenças entre aplicações
Web e Tradicionais
Aplicações web
são executadas via browser, enquanto
aplicações tradicionais
devem ser instaladas no computador ou acessadas em um arquitetura cliente/servidor.
Aplicações tradicionais:
Requerem hardware mais específico,
Podem ter problemas de incompatibilidade de SO,
Manutenção mais complexa,
Dificuldade de atualização,
Risco de segurança,
Difícil escalabilidade.
Aplicações web:
Acesso via browser,
Indiferente do SO do usuário,
Facilidade de manutenção e atualização,
Segurança centralizada,
Alta escalabilidade,
Facilidade de uso e menos treinamento do usuário,
Integração facilitada.
web site x
aplicação web
Website
é estático. Não existe nenhum software de inteligência. Não existe uma regra de negócio.
Aplicação web
tem inteligência, regras de negócio.
Como funciona uma
aplicação web
5 estágios
Servidor Web
Solicitações do usuário
Protocolo HTTP
Métodos HTTP (GET, POST)
Resposta do HTTP
Cientista de Dados x
Full-Stack Web Developer
:warning:
Cientista de Dados:
Matemática e Estatística,
Programação (Python, R, Scala ou Java),
Banco de dados relacional e NoSQL,
Linguagem SQL,
Machine Learning e Deep Learning,
Armazenamento e Processamento Distribuído de Big Data,
Inteligência Artificial
Full-Stack Web Developer:
Programação,
Engenharia de Software,
HTML, CSS,
PHP, ASP, Node.js,
Python, Ruby, Java,
Banco de Dados Relacional e NoSQL,
Linguagem SQL,
Design Gráfico
Web Frameworks for Python
É uma coleção de pacotes ou módulos que permitem aos desenvolvedores construir aplicações web ou serviços.
Mini-Projeto 5 - Jogando com o Matias - IA via Browser
Links Úteis
Bibliografia Big Data e Data Science
Top 20 Bibliotecas Python Para Data Science
Web Frameworks For Python
Top 10 Python Web Frameworks
Django
Web2py
Flask
Axure
Download do MySQL
Jquery Download
Algoritmo Mini-max
Deep Reinforcement Learning
What’s hot in AI: Deep reinforcement learning
Design e Administração de Cloud Computing comAWS
14.
Introdução a Web Scraping
"Raspagem da Internet", que basicamente é conectar em uma página web e extrair os dados que estão naquela página.
Web Scraping e Web Crawling
são Legais ou Ilegais?
Com Web Crawling obtemos informações genéricas e com Web Scraping, obtemos informações específicas.
Muitos scrapers são escritos em linguagem Python para facilitar a etapa de processamento adicional dos dados coletados. Podemos escrever scrapers usando
frameworks e bibliotecas para web crawling, como Scrapy, Ghost, lxml, aiohttp ou Selenium
.
o web scraping tem se tornado uma prática maliciosa utilizada por criminosos para roubar conteúdos protegidos e cometer fraudes, repassando informações de produtos e serviços de uma empresa para a concorrência, o que pode causar grandes prejuízos aos negócios. Isso é ilegal, criminoso e pode levar para a cadeia
O web scraping e o web crawling não são ilegais por si mesmos. Afinal, você pode raspar ou rastrear seu próprio site, sem problemas.
O problema surge quando você raspa ou rastreia o site de outra pessoa, sem obter a permissão prévia por escrito ou em desconsideração dos Termos de Serviço ou Uso. Você está essencialmente se colocando em uma posição vulnerável.
Apenas pense nisso: você está usando a largura de banda de outra pessoa e está recuperando e usando livremente os dados. É razoável pensar que eles podem não gostar, porque o que você está fazendo pode prejudicá-los de alguma forma. Portanto, dependendo de muitos fatores, eles estão perfeitamente livres para entrar com uma ação legal contra você.
O LinkedIn está processando quase 100 pessoas que anonimamente rasparam seu site (não existe anonimato na web)
o web scraping e o web crawling não são ilegais por si mesmos. Eles podem se tornar problemáticos quando você joga no território de outra pessoa, em seus próprios termos, sem obter sua permissão prévia.
É essencialmente extrair e reunir conjuntos de dados da web (o que pode ser considerado Big Data em alguns casos), dados esses que são a pedra angular do Big Data Analytics, Machine Learning e Inteligência Artificial. Esses dados podem ser usados em projetos de Data Science para resolver problemas de negócio específicos e ajudar os tomadores de decisão, podendo trazer vantagem competitiva
Web Scraping:
O ato de baixar automaticamente os dados de uma página web e extrair informações muito específicas dela. As informações extraídas podem ser armazenadas praticamente em qualquer lugar (banco de dados, arquivo, etc.). Web scraping, também conhecido como Extração de Dados da Web, é uma maneira automatizada de extrair informações/conteúdo usando bots, conhecidos como scrapers. Aqui, as informações podem ser usadas para replicar em algum outro site ou podem ser usadas para análise de dados.
Web Crawling:
O ato de baixar automaticamente os dados de uma página web, extrair os hiperlinks contidos nela e segui-los. Os dados baixados são geralmente armazenados em um índice ou banco de dados para facilitar sua busca. Web crawling,
também conhecido como Indexação
, é usado para indexar as informações em uma página web usando bots, também chamados de crawlers. Web Crawlers são basicamente utilizados pelos principais motores de busca como o Google, Bing e Yahoo.
Também é importante entender a diferença entre Web Scraping e a Mineração de Dados (
Data Mining
). Resumindo, enquanto a mineração de dados pode acontecer em qualquer matriz de dados e pode ser feita manualmente, o Web Scraping ocorre apenas nas páginas web sendo executados por robôs especiais - scrapers/crawlers.
É uma técnica de software de computador para extrair dados de páginas web. Essa técnica concentra-se principalmente na transformação de dados não estruturados (formato HTML) na web em dados estruturados (banco de dados ou planilhas)
Tags HTML
Como a página web está organizada
Preciso saber as tags HTML de meu interesse para fazer o web scraping
Ações que precisam ser realizadas:
Verificar se temos ou não permissão para fazer o web scraping. Coloco "/robot.txt" ao final do endereço para identificar o que é ou não permitido.
Conectar na página HTML e extrair o código completo.
Depois que tem o código completo é necessário fazer o que é chamado de "parser", que basicamente é olhar o código e extrair a informação que é de seu interesse. Utilizo a biblioteca "BeautifulSoup".
Links Úteis
Bibliografia Big Data e Data Science
Top 20 Bibliotecas Python Para Data Science
:warning:
HTML Tutorial
:warning:
Formato Unicode
Para trabalhar de forma eficiente e profissional com manipulação de arquivos, é importante conhecer os diferentes formatos de um arquivo, incluindo o formato Unicode
Materiais Estudo
Python Brasil - Luciano Ramalho
Python Brasil - Wiki
Os exemplos fornecidos estão em Python 2 e caso você queira testar em Python 3, será necessário fazer modificações nos códigos disponibilizados. No link abaixo você encontra um material de referência sobre como isso pode ser feito
Link