0% acharam este documento útil (0 voto)
16 visualizações10 páginas

Introdução Ao Pandas Parte 4

O documento apresenta um desafio para analisar dados de exportação de etanol no Brasil usando Python. Ele descreve como baixar os dados, transformá-los em um DataFrame e extrair informações como os valores mínimos, máximos e médias de exportação por ano e mês.

Enviado por

Silvana Furtado
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 DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
16 visualizações10 páginas

Introdução Ao Pandas Parte 4

O documento apresenta um desafio para analisar dados de exportação de etanol no Brasil usando Python. Ele descreve como baixar os dados, transformá-los em um DataFrame e extrair informações como os valores mínimos, máximos e médias de exportação por ano e mês.

Enviado por

Silvana Furtado
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 DOCX, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 10

INTRODUÇÃO A MANIPULAÇÃO DE

DADOS EM PANDAS
Vanessa Cadan Scheffer

TRANSFORMAÇÃO DOS DADOS E EXTRAÇÃO DE


INFORMAÇÕES
A biblioteca pandas possui métodos capazes de fazer a leitura dos dados e o
carregamento em um DataFrame, além de recursos como a aplicação de filtros.

Fonte: Shutterstock.

Deseja ouvir este material?

DESAFIO

Como desenvolvedor em uma empresa de consultoria de software, você foi alocado em


um projeto para uma empresa de geração de energia. Essa empresa tem interesse em
criar uma solução que acompanhe as exportações de etanol no Brasil. Esse tipo de
informação está disponível no site do governo
brasileiro http://www.dados.gov.br/dataset, em formatos CSV, JSON, dentre outros.
No endereço http://www.dados.gov.br/dataset/importacoes-e-exportacoes-de-etanol é
possível encontrar várias bases de dados (datasets), contendo informações de
importação e exportação de etanol. O cliente está interessado em obter informações
sobre a Exportação Etano Hidratado (barris equivalentes de petróleo) 2012-2020, cujo
endereço é http://www.dados.gov.br/dataset/importacoes-e-exportacoes-de-etanol/
resource/ca6a2afe-def5-4986-babc-b5e9875d39a5. Para a análise será necessário fazer o
download do arquivo.

O cliente deseja uma solução que extraia as seguintes informações:

 Em cada ano, qual o menor e o maior valor arrecadado da exportação?


 Considerando o período de 2012 a 2019, qual a média mensal de arrecadamento
com a exportação.
 Considerando o período de 2012 a 2019, qual ano teve o menor arrecadamento? E
o menor?

Como parte das informações técnicas sobre o arquivo, foi lhe informado que se trata de
um arquivo delimitado CSV, cujo separador de campos é ponto-e-vírgula e a
codificação do arquivo está em ISO-8859-1. Como podemos obter o arquivo? Como
podemos extrair essas informações usando a linguagem Python? Serão necessários
transformações nos dados para obtermos as informações solicitadas?

RESOLUÇÃO

Para começar a resolver o desafio, precisamos fazer o download do arquivo com os


dados. Podemos acessar o endereço http://www.dados.gov.br/dataset/importacoes-e-
exportacoes-de-etanol/resource/ca6a2afe-def5-4986-babc-b5e9875d39a5 e clicar no
botão "ir para recurso" ou então digitar o
endereço http://www.anp.gov.br/arquivos/dadosabertos/iee/exportacao-etanol-
hidratado-2012-2020-bep.csv que fará o download do arquivo de modo automático.
Após obter o arquivo, basta copiá-lo para a pasta do projeto.

Conforme orientações, o arquivo é delimitado, mas seu separador padrão é o ";" e a


codificação do arquivo foi feita em ISO-8859-1. Portanto, teremos que passar esses dois
parâmetros para a leitura do arquivo usando a biblioteca pandas, uma vez que o
delimitar padrão da biblioteca é o ",". No código a seguir, estamos fazendo a importação
dos dados. Veja que temos 9 linhas e 8 colunas.

In [28]:
import pandas as pd

df_etanol = pd.read_csv('exportacao-etanol-hidratado-2012-2020-
bep.csv', sep=';', encoding="ISO-8859-1")

print(df_etanol.info())
df_etanol.head(2)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9 entries, 0 to 8
Data columns (total 17 columns):
ANO 9 non-null int64
PRODUTO 9 non-null object
MOVIMENTO COMERCIAL 9 non-null object
UNIDADE 9 non-null object
JAN 9 non-null object
FEV 9 non-null object
MAR 9 non-null object
ABR 9 non-null object
MAI 8 non-null object
JUN 8 non-null object
JUL 8 non-null object
AGO 8 non-null object
SET 8 non-null object
OUT 8 non-null object
NOV 8 non-null object
DEZ 8 non-null object
TOTAL 9 non-null object
dtypes: int64(1), object(16)
memory usage: 1.3+ KB
None
Out[28]:

MO
VI
ME U
PR NT NI T
A M A A O N
OD O D JA FE M JU JU SE D O
N A B G U O
UT CO A N V AI N L T EZ TA
O R R O T V
O ME D L
RC E
IA
L

ET
AN
OL
EX 87 14 12 98 15 14 38 24 70 73 46 80 40
2 HI
PO 23 15 21 00 32 43 47 48 22 17 59 20 78
0 DR be
0 RT 1,4 13, 57, 4,4 86, 73, 43, 61, 67, 00, 57, 60, 15
1 AT p
AC 11 51 33 29 60 68 61 02 57 02 05 82 7,1
2 AD
AO 32 86 85 26 78 94 42 89 98 32 4 58 21
O
(be
p)

1 2 ET EX be 67 38 96 54 11 38 33 35 43 60 45 26 41
0 AN PO p 34 73 92 39 50 74 91 43 47 58 84 12 68
1 OL RT 19, 31, 9,5 0,0 92, 98, 62, 43, 99, 70, 74, 31, 54
3 HI AC 97 64 92 50 48 37 21 28 85 15 38 16 3,1
DR AO 67 87 01 46 2 92 58 85 53 42 84 91
AT
AD
O
(be
MO
VI
ME U
PR NT NI T
A M A A O N
OD O D JA FE M JU JU SE D O
N A B G U O
UT CO A N V AI N L T EZ TA
O R R O T V
O ME D L
RC E
IA
L

p)

Agora que temos os dados, vamos dividir nossa solução em duas etapas: a de
transformação dos dados e a de extração de informações.

ETAPA DE TRANSFORMAÇÕES

Vamos começar removendo as colunas que sabemos que não serão utilizadas, afinal,
quanto menos dados na memória RAM, melhor. Veja no código a seguir a remoção de
três colunas, com o parâmetro inplace=True, fazendo com que a transformação seja
salva no próprio objeto.

In [29]:
df_etanol.drop(columns=['PRODUTO', 'MOVIMENTO COMERCIAL',
'UNIDADE'], inplace=True)

df_etanol.head(2)
Out[29]:

A TO
MA AB MA AG OU NO DE
N JAN FEV JUN JUL SET TA
R R I O T V Z
O L

2
8723 1415 1221 9800 1532 1443 3847 2448 7022 7317 4659 8020 4078
0
0 1,41 13,5 57,3 4,42 86,6 73,6 43,6 61,0 67,5 00,0 57,0 60,8 157,
1
132 186 385 926 078 894 142 289 798 232 54 258 121
2

2
6734 3873 9692 5439 1150 3874 3391 3543 4347 6058 4584 2612 4168
0
1 19,9 31,6 9,59 0,05 92,4 98,3 62,2 43,2 99,8 70,1 74,3 31,1 543,
1
767 487 201 046 82 792 1 858 585 553 842 684 191
3

Agora vamos redefinir os índices do DF, usando a coluna ANO. Esse passo será
importante para a fase de extração de informações. Veja que também optamos em
remover a coluna do DF (drop=True).

In [30]:
df_etanol.set_index(keys='ANO', drop=True, inplace=True)
df_etanol.head(2)
Out[30]:

MA AG OU NO TOT
JAN FEV ABR MAI JUN JUL SET DEZ
R O T V AL

A
N
O

2
8723 1415 1221 9800 1532 1443 3847 2448 7022 7317 4659 8020 4078
0
1,41 13,5 57,3 4,42 86,6 73,6 43,6 61,0 67,5 00,0 57,0 60,8 157,
1
132 186 385 926 078 894 142 289 798 232 54 258 121
2

2
6734 3873 9692 5439 1150 3874 3391 3543 4347 6058 4584 2612 4168
0
19,9 31,6 9,59 0,05 92,4 98,3 62,2 43,2 99,8 70,1 74,3 31,1 543,
1
767 487 201 046 82 792 1 858 585 553 842 684 191
3

Como os dados são de origem brasileira, a vírgula é usada como separador decimal, o
que não condiz com o padrão da biblioteca pandas. Precisamos converter todas as
vírgulas em ponto. Para isso vamos utilizar uma estrutura de repetição que filtra cada
coluna, criando uma Series, o que nos habilita a utilizar a funcionalidade str.replace(',',
'.') para a substituição.

In [31]:
for mes in 'JAN FEV MAR ABR MAI JUN JUL AGO SET OUT NOV DEZ
TOTAL'.split():
df_etanol[mes] = df_etanol[mes].str.replace(',', '.')

print(df_etanol.dtypes)
df_etanol.head(2)
JAN object
FEV object
MAR object
ABR object
MAI object
JUN object
JUL object
AGO object
SET object
OUT object
NOV object
DEZ object
TOTAL object
dtype: object
Out[31]:
MA AG OU NO TOT
JAN FEV ABR MAI JUN JUL SET DEZ
R O T V AL

A
N
O

2
8723 1415 1221 9800 1532 1443 3847 2448 7022 7317 4659 8020 4078
0
1.41 13.5 57.3 4.42 86.6 73.6 43.6 61.0 67.5 00.0 57.0 60.8 157.
1
132 186 385 926 078 894 142 289 798 232 54 258 121
2

2
6734 3873 9692 5439 1150 3874 3391 3543 4347 6058 4584 2612 4168
0
19.9 31.6 9.59 0.05 92.4 98.3 62.2 43.2 99.8 70.1 74.3 31.1 543.
1
767 487 201 046 82 792 1 858 585 553 842 684 191
3

Mesmo trocando a vírgula por ponto, a biblioteca ainda não conseguiu identificar como
ponto flutuante. Portanto, vamos fazer a conversão usando o método astype(float).

In [32]:
df_etanol = df_etanol.astype(float)
print(df_etanol.dtypes)

df_etanol.head(2)
JAN float64
FEV float64
MAR float64
ABR float64
MAI float64
JUN float64
JUL float64
AGO float64
SET float64
OUT float64
NOV float64
DEZ float64
TOTAL float64
dtype: object
Out[32]:
MA AB AG OU NO TO
JAN FEV MAI JUN JUL SET DEZ
R R O T V TAL

A
N
O

2
8723 1415 1221 9800 1532 1443 3847 2448 7022 7317 4659 8020 4078
0
1.411 13.5 57.33 4.42 86.6 73.6 43.6 61.0 67.5 00.0 57.0 60.8 157.
1
32 186 850 926 078 894 142 289 798 232 540 258 121
2

2
6734 3873 9692 5439 1150 3874 3391 3543 4347 6058 4584 2612 4168
0
19.97 31.6 9.592 0.05 92.4 98.3 62.2 43.2 99.8 70.1 74.3 31.1 543.
1
670 487 01 046 820 792 100 858 585 553 842 684 191
3
PESQUISE MAIS

Poderíamos ter usado a biblioteca locale para fazer parte desse trabalho, que tal se
aprofundar e pesquisar mais?!

ETAPA DE EXTRAÇÃO DE INFORMAÇÕES

Agora que preparamos os dados, podemos começar a etapa de extração das informações
solicitadas. Vamos começar extraindo o menor e maior valor arrecadado em cada ano.
Como nosso índice é o próprio ano, podemos usar a função loc para filtrar e então os
métodos min() e max(). Para que a extração seja feita para todos os anos, usamos uma
estrutura de repetição.

Nas linhas print(f"Menor valor = {minimo:,.0f}".replace(',',


'.')) print(f"Maior valor = {maximo:,.0f}".replace(',', '.')) do código a
seguir, estamos fazendo a impressão dos valores solicitados. Para que fique mais claro a
leitura, formatamos a exibição. O código minimo:,.0f faz com que seja exibida somente
a parte inteira e o separador de milhar seja feito por vírgula. Em seguida substituimos a
vírgula por ponto que é o padrão brasileiro.

In [33]:
# Em cada ano, qual o menor e o maior valor arrecadado da
exportação?

for ano in range(2012, 2021):


ano_info = df_etanol.loc[ano]
minimo = ano_info.min()
maximo = ano_info.max()
print(f"Ano = {ano}")
print(f"Menor valor = {minimo:,.0f}".replace(',', '.'))
print(f"Maior valor = {maximo:,.0f}".replace(',', '.'))
print("--------------")
Ano = 2012
Menor valor = 87.231
Maior valor = 4.078.157
--------------
Ano = 2013
Menor valor = 54.390
Maior valor = 4.168.543
--------------
Ano = 2014
Menor valor = 74.303
Maior valor = 2.406.110
--------------
Ano = 2015
Menor valor = 31.641
Maior valor = 3.140.140
--------------
Ano = 2016
Menor valor = 75.274
Maior valor = 3.394.362
--------------
Ano = 2017
Menor valor = 2.664
Maior valor = 1.337.427
--------------
Ano = 2018
Menor valor = 4.249
Maior valor = 2.309.985
--------------
Ano = 2019
Menor valor = 14.902
Maior valor = 2.316.773
--------------
Ano = 2020
Menor valor = 83.838
Maior valor = 298.194
--------------

Agora, vamos implementar o código para extrair a média mensal, considerando o


período de 2012 a 2019. Novamente, podemos usar o loc para filtrar os anos
requisitados e, para cada coluna, extrair a média. Na linha 5 fazemos a extração, mas
veja que está dentro de uma estrutura de repetição, mês a mês. Na linha 6 fazemos a
impressão do resultado, também formatando a saída. Veja que o mês de abril apresenta
um rendimento bem inferior aos demais!

In [34]:
# Considerando o período de 2012 a 2019, qual a média mensal de
arrecadamento com a exportação
print("Média mensal de rendimentos:")
for mes in 'JAN FEV MAR ABR MAI JUN JUL AGO SET OUT NOV
DEZ'.split():
media = df_etanol.loc[2012:2019, mes].mean()
print(f"{mes} = {media:,.0f}".replace(',', '.'))
Média mensal de rendimentos:
JAN = 248.380
FEV = 210.858
MAR = 135.155
ABR = 58.929
MAI = 106.013
JUN = 244.645
JUL = 295.802
AGO = 276.539
SET = 354.454
OUT = 376.826
NOV = 266.748
DEZ = 319.588

Agora precisamos descobrir qual ano teve a menor e a maior quantia em exportação,
considerando o período de 2012 a 2019. Para isso vamos usar o método idxmin() para
descobrir o mínimo e idxmax() para o máximo.

In [35]:
# Considerando o período de 2012 a 2019, qual ano teve o menor
arrecadamento? E o menor?

ano_menor_arrecadacao = df_etanol.loc[2012:2019,
'TOTAL'].idxmin()
ano_maior_arrecadacao = df_etanol.loc[2012:2019,
'TOTAL'].idxmax()

print(f"Ano com menor arrecadação = {ano_menor_arrecadacao}")


print(f"Ano com maior arrecadação = {ano_maior_arrecadacao}")
Ano com menor arrecadação = 2017
Ano com maior arrecadação = 2013

Agora é com você, que tal agora organizar as códigos em funções e deixar a solução
pronta para ser usada pela equipe?!

DESAFIO DA INTERNET

Ganhar habilidade em programação exige estudo e treino (muito treino). Acesse o


endereço https://www.kaggle.com/datasets, faço seu cadastro e escolha uma base de
dados para treinar e desenvolver seu conhecimento com a biblioteca pandas.

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy