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