0% acharam este documento útil (0 voto)
102 visualizações

Apostila - Módulo 2 - Bootcamp Desenvolvedor (A) Python

Enviado por

Rodrigo Kamenach
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
102 visualizações

Apostila - Módulo 2 - Bootcamp Desenvolvedor (A) Python

Enviado por

Rodrigo Kamenach
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 29

Python para a Análise de Dados

Bootcamp Desenvolvedor(a) Python

Matheus de Oliveira Mendonça

2021
Python para a Análise de Dados
Bootcamp Desenvolvedor(a) Python
Matheus de Oliveira Mendonça
© Copyright do Instituto de Gestão e Tecnologia da Informação.
Todos os direitos reservados.

Python para a Análise de Dados – Página 2 de 29


Sumário

Capítulo 1. Introdução à análise de dados ............................................................ 4

Capítulo 2. Pandas e numpy para análise de dados ............................................. 6

Numpy para análise de dados ............................................................................ 6

Pandas para análise de dados.......................................................................... 15

Capítulo 3. Introdução ao scikit-learn .................................................................. 24

Introdução ao machine learning ........................................................................ 25

Capítulo 4. Conclusão ......................................................................................... 28

Referências ………………………………………………………………………………29

Python para a Análise de Dados – Página 3 de 29


Capítulo 1. Introdução à análise de dados

A análise de dados pode ser definida como processo de coleta, tratamento,


análise e apresentação de dados, de forma a trazer novas informações e agregar
valor ao processo de tomada de decisão de qualquer negócio (ver figura 1).

Esse processo nasce a partir de uma dor do negócio, na qual os


conhecimentos empíricos não são suficientes para uma tomada de decisão assertiva
e imparcial. Assim, faz-se necessária a utilização de um processo metodológico bem
definido para munir o tomador de decisão com informações adicionais relevantes,
muitas vezes desconhecidas até então.

Figura 1 - Ciclo de um trabalho de análise de dados.

Existem diversas ferramentas para análise de dados, mas sem dúvida alguma
o Python, em conjunto com diversas bibliotecas disponíveis, é uma ferramenta
poderosíssima que vem ganhando cada vez mais popularidade entre a comunidade

Python para a Análise de Dados – Página 4 de 29


científica e os desenvolvedores. A Figura 2 mostra o resultado expressivo da pesquisa
conduzida pelo StackOverflow que mostra o Python figurando entre as 5 linguagens
de programação mais populares, desbancando o Java.

Figura 2 - Popularidade das linguagens de programação em 2019 no


StackOverflow.

Este curso dedica-se à introdução - de maneira prática - de algumas das


ferramentas fundamentais de análise de dados em Python, a saber:

1. NumPy;

2. Pandas;

3. Scikit-learn.

Python para a Análise de Dados – Página 5 de 29


Capítulo 2. Pandas e numpy para análise de dados

Numpy para análise de dados

O numpy é uma das principais bibliotecas para computação científica em


Python. Ela disponibiliza um objeto de array multidimensional de alta performance e
diversas ferramentas para se trabalhar com esses objetos.

Como a maioria das bibliotecas em Python, a instalação do numpy é bem


simples e pode ser executada através dos comandos:

Figura 3 - Instalação do numpy.

Fonte: https://numpy.org/install/.

Para utilizá-la, é necessário, inicialmente, importar o pacote com o comando:

▪ Arrays

Uma array em numpy é uma grade de valores, todos do mesmo tipo, indexada
por uma tupla de inteiros não negativos. O número de dimensões de uma array é
chamado de rank do array; o shape de uma array é representada através de uma

Python para a Análise de Dados – Página 6 de 29


tupla de inteiros, que indicam o tamanho da array em cada dimensão. A Figura a
seguir ilustra alguns exemplos de arrays.

Figura 4 - Ilustração de arrays multidimensionais.

Fonte: https://fgnt.github.io/python_crashkurs_doc/include/numpy.html.

É possível criar arrays em numpy utilizando listas de Python aninhadas, e o


acesso dos elementos é feito utilizando colchetes:

A biblioteca numpy também oferece várias funções para a criação de arrays:

‒ np.zeros(tuple): cria uma array com todos os valores iguais a 0. As


dimensões da array são definidas pela tupla passada por parâmetro.

Python para a Análise de Dados – Página 7 de 29


‒ np.ones(tuple): semelhante à função acima, porém cria uma array com
todos os valores iguais a 1.

‒ np.eye(n): cria uma matriz identidade de tamanho n x n. O tipo de n


deve ser int.

‒ np.random.random(tuple): cria uma matriz com valores aleatórios. As


dimensões são definidas pela tupla passada por parâmetro.

‒ np.linspace(start, stop, num): cria um vetor contendo num elementos,


linearmente espaçados dentro do intervalo [start, stop].

Alguns exemplos de implementação estão listados a seguir:

Python para a Análise de Dados – Página 8 de 29


▪ Indexação de arrays

Assim como listas em Python, arrays em numpy podem ser fatiadas (slicing,
termo comum em inglês). Dado que arrays podem ser multidimensionais, é
necessário especificar uma fatia para cada uma das dimensões da array:

Repare que um slice de uma array é uma visualização do mesmo dado, ou


seja, ao alterar um slice, o dado original também será alterado:

Python para a Análise de Dados – Página 9 de 29


Para a criação de um sub-array que não compartilha memória com o array
original, faz-se necessária a utilização do método copy() durante a indexação (slicing):

▪ Funções aritméticas

Funções aritméticas básicas operam sobre cada elemento em arrays, e estão


disponíveis tanto como sobrecarga de operadores quanto como funções no módulo
numpy. Elas podem ser implementadas tanto entre arrays quanto entre um array e
um escalar (exemplo: int e float). Exemplos:

Python para a Análise de Dados – Página 10 de 29


‒ Soma:

‒ Subtração:

‒ Multiplicação:

Repare que o operador * representa a multiplicação por elemento, e não a


multiplicação de matrizes. Para calcular o produto interno de vetores, multiplicar um

Python para a Análise de Dados – Página 11 de 29


vetor por uma matriz ou multiplicar matrizes, a função utilizada é dot, conforme
exemplificado a seguir:

‒ Divisão:

Python para a Análise de Dados – Página 12 de 29


‒ Outras operações:

▪ Comparações

Comparações booleanas também são possíveis em numpy arrays e são


executadas elemento por elemento, retornando um outro numpy array com o
resultado da comparação. A seguir, alguns exemplos de comparações que podem ser
executadas:

‒ Maior/Maior ou igual:

Python para a Análise de Dados – Página 13 de 29


‒ Menor/Menor ou igual:

‒ Igualdade:

‒ Indexação booleana:

Python para a Análise de Dados – Página 14 de 29


Pandas para análise de dados

Pandas é um pacote em Python desenvolvido para disponibilizar estruturas


de dados rápidas e flexíveis para se trabalhar com dados "relacionais" ou "rotulados"
(ver Figura 5). Ele é adequado para diversos tipos de dados:

‒ Dados tabulares com colunas de tipos heterogêneos, como em tabelas


SQL ou planilhas Excel;

‒ Dados de séries temporais ordenados ou não ordenados;

‒ Dados matriciais arbitrários, com linhas e colunas rotuladas;

‒ Qualquer outro tipo de conjunto de dados estatísticos ou observados.


Os dados não necessariamente precisam estar rotulados para serem
utilizados com a estrutura de dados do Pandas.

Figura 5 - Exemplo de um DataFrame.

Fonte: https://www.geeksforgeeks.org/python-Pandas-dataframe/.

O Pandas utiliza dois tipos principais de estruturas de dados: Series


(unidimensional) e DataFrame (bidimensional), que são abstrações de vetores e

Python para a Análise de Dados – Página 15 de 29


matrizes, respectivamente, assim como no numpy, porém com características mais
versáteis e mais próximas dos dados do mundo real. Essas duas estruturas são
capazes de representar a maioria dos casos de uso em finanças, em estatística, em
ciências sociais e em várias áreas da engenharia. A próxima Figura ilustra esse
conceito:

Figura 6 - Exemplo de um DataFrame.

Fonte: http://www.datasciencemadesimple.com/create-series-in-python-Pandas/.

Algumas das tarefas que o Pandas faz com eficiência são:

‒ Tratamento de dados faltantes (representados por NaN);

‒ Tamanhos mutáveis: colunas podem ser inseridas e excluídas de


DataFrames com facilidade;

‒ Grupo de funcionalidades poderoso e flexível para operações de split-


apply-combine, para agregar e transformar conjuntos de dados;

‒ Ferramentas de IO robustas para leitura de dados de arquivos como


CSV, Excel, bancos de dados, além da possibilidade de se utilizar o
formato HDF5;

‒ Entre outros.

Para leitura dos dados, existem diversas funções, a depender do formato do


dado de entrada. Algumas da mais usadas estão listados abaixo:

Python para a Análise de Dados – Página 16 de 29


‒ read_csv: leitura de arquivos CSV;

‒ read_json: leitura de arquivos JSON;

‒ read_html: leitura de arquivos HTML;

‒ read_clipboard: leitura de dados da área de transferência (CTRL + C,


por exemplo);

‒ read_hdf: leitura de arquivos HDF5;

‒ read_sql: leitura de arquivos SQL;

‒ read_excel: leitura de arquivos Excel.

Uma das principais características do Pandas é a possibilidade de lidar com


diferentes formatos de uma maneira muito simples e similar ao que já está
implementado no numpy (slicing, indexação, comparações, etc). Entre os tipos de
dados suportados e como eles se relacionam com os formatos nativos do Python,
têm-se:

Tabela 1 - Tipos de dados suportados no Pandas.

Pandas dtype Python type Uso

object str ou mixed Texto ou valores mistos numéricos e não-


numéricos

int64 int Números inteiros

float64 float Números ponto flutuantes

bool bool Valores True/False

datetime64 NA Valores em formato de data e hora

timedelta[ns] NA Diferença de dois datetimes

category NA Lista finita de texto

Python para a Análise de Dados – Página 17 de 29


A instalação do Pandas é análoga à instalação do numpy e, para sua
utilização, basta a importação da biblioteca no ambiente de desenvolvimento,
conforme descrito a seguir:

Para carregar uma base de dados em memória, basta utilizar um dos métodos
de leitura disponíveis conforme o formato do arquivo que contém os dados a serem
analisados. Segue um exemplo de leitura de um arquivo com extensão .csv:

Esse DataFrame possui 3 colunas dos seguintes tipos:

Note que a coluna date claramente é uma representação de datas, mas como
não explicitamos na leitura do arquivo quais os tipos de cada coluna, o Pandas inferiu
que essa coluna é do tipo object. Para que possamos usufruir das funcionalidades de
comparações de datetimes, precisamos forçar a conversão da coluna date para o tipo
datetime:

Python para a Análise de Dados – Página 18 de 29


Também é conveniente definir qual coluna do DataFrame será utilizada como
“referência” para as demais. No Pandas, essa “referência” é denominada index e é
especialmente útil quando temos uma coluna de datetime, pois ela serve para
determinar os labels do eixo de todos os outros objetos do DataFrame:

Algumas das manipulações mais comuns são listadas a seguir:

‒ Estatísticas básicas:

Python para a Análise de Dados – Página 19 de 29


‒ Indexação por índice (método iloc):

‒ Indexação por nome (método loc):

‒ Ordenação por coluna:

Python para a Análise de Dados – Página 20 de 29


‒ Ordenação por índice:

‒ Indexação booleana:

Python para a Análise de Dados – Página 21 de 29


‒ Visualização: além de ser escrito em cima do numpy, o Pandas também
herda os métodos de visualização do matplotlib, uma biblioteca de
visualização de dados muito versátil e utilizada. Alguns plots podem ser
feitos com apenas uma linha de código no Pandas:

Python para a Análise de Dados – Página 22 de 29


Python para a Análise de Dados – Página 23 de 29
Capítulo 3. Introdução ao scikit-learn

O scikit-learn é um dos mais utilizados frameworks de aprendizado de


máquinas em Python. Ele possui interfaces para a execução de diversas atividades
inerentes às atividades de um cientista de dados:

‒ Classificação: identificação de qual categoria um novo exemplo


pertence.

‒ Regressão: predição de um valor contínuo associado a um determinado


exemplo.

‒ Agrupamento: agrupamento automático de exemplos em conjuntos.

‒ Redução de dimensionalidade: redução do número de variáveis


presentes em um dataset.

‒ Seleção de modelos: comparação, validação e calibração de


parâmetros de modelos.

‒ Pré-processamento: extração/seleção de atributos, normalização e


tratamento de dados faltantes.

Para exemplificação, resolveremos um problema simples de machine


learning baseado no dataset que estamos utilizando até o momento:

Python para a Análise de Dados – Página 24 de 29


Baseado nesse conjunto de seis exemplos de pares (temperatura,
classification), iremos treinar um modelo para nos dizer qual será a classificação de
uma temperatura que não está presente nessa tabela. Exemplo: para a temperatura
de 9ºC, qual classificação o modelo irá retornar? Esperamos que seja frio …

O modelo matemático irá aprender, a partir dessa pequena base de dados,


a inferir (generalizar) a classificação de uma temperatura nunca vista antes pelo
modelo. Daí o nome aprendizado de máquinas.

Introdução ao machine learning

No scikit-learn, é comum adotar a nomenclatura x para variáveis preditoras e


y para a variável alvo. No nosso exemplo, x é a temperatura e y é a classificação.
Sendo assim, o seguinte trecho de código executa esse slicing:

Observe que a variável resposta é uma string, mas modelos matemáticos


necessitam de valores numéricos para funcionarem. Sendo assim, umas das
funcionalidades presentes no scikit-learn é a codificação de variáveis categóricas em
variáveis numéricas, que pode ser feita pelo seguinte trecho:

Python para a Análise de Dados – Página 25 de 29


Após o pré-processamento, partiremos para o treinamento do modelo.
(Existem outras etapas em um fluxo normal de machine learning. Aqui, para fins
de exemplificação, não as realizaremos):

Com o modelo treinado, podemos inferir a classificação de novas


temperaturas. Para isso, iremos gerar uma sequência de 100 valores de temperatura
entre 0 e 45 para avaliarmos o resultado da generalização do modelo:

De posse da predição, podemos realizar a conversão inversa dos valores


numéricos de y para os seus valores originais (frio, confortável, quente, muito quente):

Salvando os resultados em um DataFrame:

Python para a Análise de Dados – Página 26 de 29


De posse dos resultados, vamos visualizar as classificações inferidas pelo
modelo através de um plot de caixa (boxplot, em inglês), que nos mostra a distribuição
dos valores de cada uma das classes para o novo conjunto de valores de temperatura
gerados. Observe que o comportamento está como o esperado e que o modelo
conseguiu aprender corretamente partindo de uma base de dados bem pequena.

Python para a Análise de Dados – Página 27 de 29


Capítulo 4. Conclusão

Esse módulo dedicou-se à introdução de conceitos fundamentais da análise


de dados e apresentou 2 das bibliotecas mais utilizadas no cotidiano de um
profissional de dados: Pandas e numpy. Além disso, foi apresentada de forma
simplificada a ideia de geral de um problema de aprendizado de máquinas, através
da resolução de um problema de classificação com a biblioteca scikit-learn.

Python para a Análise de Dados – Página 28 de 29


Referências

JAMES, G.; WITTEN, D.; HASTIE, T.; TIBISHIRANI, R. An introduction to statistical


learning. New York: Springer, 2013.

NumPy. Disponível em: <https://numpy.org/>. Acesso em: 24 mai. 2021.

Pandas. Disponível em: <https://Pandas.pydata.org/>. Acesso em: 24 mai. 2021.

Scikit-learn. Disponível em: <https://scikit-learn.org/stable/>. Acesso em: 24 mai.


2021.

Python para a Análise de Dados – Página 29 de 29

Você também pode gostar