M1 - Análise de dados com Python
M1 - Análise de dados com Python
1.1 Introdução à Análise de Dados com Python 4 2.1 Criação e Manipulação de Arrays com NumPy 15
1.2 Configurando Ambientes: Jupyter 6 2.2 Pandas: Series e DataFrames 18
1.3 Revisão dos conceitos básicos de Python 11
3
Aula 1 - Contextualização
4
• Python (bibliotecas como Pandas, Nump e Scipy): para análise estatística 5. Comunicação dos resultados
e de dados.
• R: para análise estatística avançada. • PowerPoint: para criação de apresentações.
• Excel: para análises simples e uso de fórmulas e tabelas dinâmicas. • Tableau/ Power BI: para apresentações interativas.
• SPSS/Stata/SAS: para análise estatística avançada. • Jupyter Notebook: para apresentar resultados em um formato narrativo e
interativo.
3. Modelagem de dados
• R e Markdown: para relatórios interativos.
• Python (bibliotecas como Scikit-learn, TensorFlow e Keras): para Neste contexto, podemos observar que Python é uma linguagem extremamente
modelagem preditiva e machine learning. versátil, pois possui uma ferramenta para quase todas as etapas e possui um
PyData stack (conjunto de ferramentas e bibliotecas em Python) muito útil para
• R: para modelagem estatística e machine learning. ciência de dados. Por isso, para a nossa trilha, adotamos o Python, juntamente
• SQL: para modelagem e agregação de dados. com o Jupyter Notebook, uma ferramenta que facilita a criação, o teste e o
compartilhamento de códigos.
6
O Jupyter Notebook é muito usado em análise de dados por ser fácil de instalar
e de utilizar. Ele permite escrever o código, separar o código em células para
melhor visualização e entendimento e facilita o compartilhamento do trabalho
que você fizer. Além disso, é leve, amigável ao usuário e compatível com
qualquer sistema operacional, pois funciona direto do navegador.
usuários. Assim, aconselhamos novos usuários a começarem pelo Jupyter Editada pelo autor.
Agora, vamos utilizar o terminal para instalar o Jupyter notebook. Para isso, vamos
usar o gerenciador de pacotes do Python, chamado pip. Primeiro, procure nos
programas do seu computador o terminal do Anaconda.
Caso a página com a aplicação carregada não apareça, clique ou copie e cole o link
que apareceu no terminal no seu navegador:
9
Na interface do Jupyter Notebook, escolha uma pasta onde irá trabalhar e clique
em “File” -> “New” -> “Notebook”. Isso vai criar um arquivo novo com o nome
Untitled.ipynb, que você pode renomear depois.
Começando pelo nome do arquivo: você pode clicar no nome ao lado do logotipo
do Jupyter e renomear o arquivo que criamos, onde está escrito “Untitled”. Ao
clicar lá, poderá renomear à vontade que ele já salva para você.
10
O Jupyter Notebook é formado de células. Cada célula contém uma seção do seu
projeto. Em cada seção, você pode fazer três ações: Adicione código nas células e execute-o clicando em "Run" (o símbolo de play em
1. Criar células de texto corrido sem formatação e que não executa em Python cima) ou pressionando Shift + Enter.
para descrição ou comentários.
2. Criar células formatadas via Markdown, que é uma linguagem bastante Salvar e Fechar Notebooks
comum para documentação e permite estilizar seu texto com alguns símbolos.
Você encontra orientações no site Markdown Guide.
3. Criar células com código Python. Use o menu "File" para salvar seu trabalho e fechar o notebook.
Saiba que em determinados cenários, pode ser necessário mudar o tipo de uma
variável.
Variáveis
Outro conceito importante que precisamos lembrar são as funções. Elas permitem • Tupla (tuple): assim como Listas, Tupla é um tipo que agrupa um conjunto de
agrupar um conjunto de instruções que executam uma tarefa específica mais de elementos variados. A diferença para Lista é que Tuplas são imutáveis, ou
uma vez. Ajudam também a separar nosso código em blocos mais fáceis de seja, uma vez criadas, suas entradas não podem ser modificadas. Um índice
entender. Veja exemplos: também é usado para acessar e referir-se aos itens de uma tupla.
# Definição de uma função simples que soma dois números minha_tupla = (1, 2, 3, 'quatro', 5.0)
def soma(valor_um, valor_dois):
return valor_um + valor_dois • Dicionário (dict): eles são utilizados para agrupar elementos através da
estrutura de chave e valor, onde a chave é o primeiro elemento, que deve ser
imutável e único, associada a um valor.
# Chamada da função
resultado = soma(3, 5) meu_dicionario = {'nome': 'Daenerys Targaryen', 'idade': 20}
print(resultado) # Saída: 8
if idade >= 18: • Módulos: um módulo é um único arquivo Python que pode conter definições
print("Maior de idade") de funções, classes e variáveis, bem como código executável. Por exemplo:
else: O módulo math fornece funções matemáticas como sin(), que calcula o seno
print("Menor de idade") de uma tangente matemática, e cos(), que calcula o cosseno.
• Pacotes: um pacote é uma coleção de módulos organizados em diretórios que
# Estrutura de controle for loop fornecem uma hierarquia de namespace. Um pacote é simplesmente um
# Dica: rode para todos os itens dentro de um contexto diretório que contém um arquivo especial chamado __init__.py e um ou mais
for i in range(5): módulos. Por exemplo:
print(i) O pacote collections contém tipos de dados especializados como deque,
Counter, OrderedDict etc.
# Estrutura de controle while loop • Bibliotecas: uma biblioteca é uma coleção de módulos e pacotes que
# Dica: rode enquanto uma sentença for verdadeira fornecem funcionalidades específicas e que podem ser reutilizadas em
contador = 0 diferentes projetos. Bibliotecas podem ser instaladas e gerenciadas usando
while contador < 5: ferramentas como pip, que é o gerenciador de pacotes padrão do Python. Por
print(contador) exemplo:
contador += 1 As bibliotecas NumPy e Pandas fornecem funcionalidades avançadas para
manipulação e análise de dados, que utilizaremos ao longo da trilha, inclusive.
# Estrutura de controle try-except:
# Dica: tente fazer, se der errado, faça outra coisa sem explodir tudo
try:
resultado = 10 / 0
except ZeroDivisionError:
print("Erro: Divisão por zero!")
14
Foto de tohamina
disponível no Freepik.
Editada pelo autor.
com NumPy
O que é NumPy?
O NumPy utiliza arrays, que são mais rápidos e consomem menos memória que
as listas tradicionais do Python. Além disso, o NumPy fornece uma ampla gama
de funções matemáticas e científicas.
# Esse código vai criar duas listas: # Usa as funções para saber o tamanho em memória das listas em megabytes
# Uma, usando listas nativas do python, outra usando o numpy. tamanho_lista_python =
# Depois, vê o tempo decorrido para criá-las e o tamanho em memória! avalia_tamanho_da_lista_em_python(cria_lista_em_python())
tamanho_lista_numpy = avalia_tamanho_da_lista_em_numpy(cria_lista_numpy())
# Função que avalia o tamanho da lista em memória para numpy
def avalia_tamanho_da_lista_em_numpy(lista): # Imprime o tempo decorrido e o espaço necessário para criar as listas nos dois
return f'{lista.nbytes / (1024 * 1024):.3f}' cenários
print('Tempo decorrido para criar as listas:')
# Função que avalia o tamanho da lista em memória para listas Python print('-> Python:')
def avalia_tamanho_da_lista_em_python(lista): print(f' - Tempo de execução: {python_tempo_decorrido:.4f} segundos')
list_size = sys.getsizeof(lista) print(f' - Espaço em memória: {tamanho_lista_python} MB')
element_size = sys.getsizeof(0) print()
total_elements_size = len(lista) * element_size print('-> NumPy:')
return f'{(list_size + total_elements_size) / (1024 * 1024):.3f}' print(f' - Tempo de execução: {numpy_tempo_decorrido:.4f} segundos')
print(f' - Espaço em memória: {tamanho_lista_numpy} MB')
# Função para criar uma lista em Python
def cria_lista_em_python():
return [i for i in range(1_000_000 + 1)]
Nesse caso, a saída foi a seguinte:
# Função para criar uma lista em NumPy
def cria_lista_numpy():
return np.arange(0, 1_000_000 + 1, dtype=‘int64')
17
Veja que a criação do array com o NumPy foi muito mais rápida, usando apenas Saída:
uma fração da memória. Para tarefas e aplicações com uso intensivo de dados
que exigem cálculos numéricos rápidos, o aproveitamento do NumPy pode levar
a acelerações significativas e utilização mais eficiente de recursos. Criação de arrays multidimensionais ou matrizes
# Criando uma matrix quadrada de 3x3 elementos, de 1 a 9
Além disso, podemos fazer muito mais com o NumPy. Veja alguns exemplos. matrix = np.arange(1., 10.).reshape((3, 3))
print(matrix)
import numpy as np
Saída:
arr = np.array([1, 2, 3, 4, 5])
print(f"Elementos: {arr}, Tipo dos elementos: {arr.dtype}, Tamanho do array: Nesse caso, primeiro criamos um array da sequência de números de 1 a 9, com o
{arr.shape}") tipo ponto flutuante, utilizando o “arange”, e em seguida transformamos o
formato desse array para uma matriz de 3 colunas por 3 linhas, usando o
Saída: "reshape”.
Séries
É um arranjo unidimensional, como uma Lista. Ao aplicar alguma
função em uma Serie, ela é aplicada a todos os seus elementos. Para
melhor visualizar na mente, uma série é parecida com uma coluna no
excel. Eles podem ser organizados de acordo com um índice, que
funciona como os rótulos das linhas da sua planilha.
cidades_serie = pd.Series([
Saída: "São Paulo (SP)",
"Manaus (AM)",
Assim como nos arrays, conseguimos acessar um índice: "Brasília (DF)"
])
cidades_serie[2]
populacoes_serie = pd.Series([
12.0,
Saída: 6.5,
3.0
])
Ou acessar uma faixa de índices:
cidades_populosas = pd.DataFrame({
print(cidades_serie[:2]) 'Cidade': cidades_serie,
'População em milhões': populacoes_serie
})
print(cidades_populosas)
Saída:
Saída:
20
populosas['População em milhões'].mean()
print("Média de população:", f'{media_populacao:.2f}', 'milhões de
habitantes')
Saída:
print(cidades_populosas.iloc[:2])
Adicionando uma nova coluna de números como texto
Quando estamos trabalhando com um DataFrame, muitas vezes temos a
necessidade de adicionar novas informações. Para fazer isso no Pandas,
Saída: basta criar uma nova coluna e atribuir os novos elementos:
# Aqui é texto! Lembre-se disso, depois a gente vai converter! :D
area_urbana = ['914', '640', '590']
cidades_populosas['Área urbana em km²'] = area_urbana
print(cidades_populosas)
Os dois pontos indicam que queremos selecionar um intervalo de linhas. O
número antes dos dois pontos (omitido neste caso) representa o índice
inicial (que, por padrão é 0). O número após os dois pontos (2) representa o
índice final (exclusivo), ou seja, a seleção vai até a linha de índice 1 (segunda
linha).
Saída:
21
Saída:
Saída:
Explore mais!
Referências bibliográficas
Array objects — NumPy v1.26 manual (2024). Disponível em: <https:// SILVA, Andressa. Por onde começar em Análise de Dados. Disponível em:
numpy.org/doc/stable/reference/arrays.html>. Acesso em: 15 abr. 2024. <https://medium.com/data-hackers/por-onde-come%C3%A7ar-em-
an%C3%A1lise-de-dados-a0793af9b6c8>. Acesso em: 24 jul. 2024.
Python para quem está começando [s.d]. Python Brasil. Disponível em:
<https://python.org.br/introducao/>. Acesso em: 15 abr. 2024.