Desafio Final¶

Este projeto faz parte do Módulo 04 do Bootcamp Cientista de Dados da Pós-graduação em Data Science da XP Educação.

Enunciado: Este estudo tem como objetivo analisar o consumo de energia elétrica no Brasil ao longo dos anos. A base de dados contém informações detalhadas sobre o consumo de energia elétrica por diferentes tipos de consumidores e estados brasileiros, abrangendo um período extenso.


Bases de Dados¶

Para esse projeto usaremos as bases de dados:

  • Dados de Estados
  • Consumo de Energia Elétrica

Importando as bibliotecas¶

In [89]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Coleta de dados¶

Como as bases utilizam diferentes separadores e codificações de caracteres, será necessário configurar cada uma delas individualmente.

In [90]:
df_estados = pd.read_csv('bases/estado_regiao.csv', sep=';', encoding='latin1')
df_consumo = pd.read_csv('bases/consumo_energia_eletrica.csv', sep=',', encoding='utf-8')

Tratamento de dados¶

DataFrame Estados¶

In [91]:
# Verificando as primeiras linhas do DataFrame de estados
df_estados.head()
Out[91]:
id_estado sigla estado regiao pais
0 1 AC Acre Norte Brasil
1 2 AL Alagoas Nordeste Brasil
2 3 AP Amapá Norte Brasil
3 4 AM Amazonas Norte Brasil
4 5 BA Bahia Nordeste Brasil
In [92]:
# Verificando as informações do DataFrame de estados
df_estados.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 27 entries, 0 to 26
Data columns (total 5 columns):
 #   Column     Non-Null Count  Dtype 
---  ------     --------------  ----- 
 0   id_estado  27 non-null     int64 
 1   sigla      27 non-null     object
 2   estado     27 non-null     object
 3   regiao     27 non-null     object
 4   pais       27 non-null     object
dtypes: int64(1), object(4)
memory usage: 1.2+ KB
In [93]:
# Verificando se existem valores duplicados no DataFrame de estados
df_estados.duplicated().any()
Out[93]:
False

DataFrame Consumo¶

In [94]:
# Verificando as primeiras linhas do DataFrame de consumo
df_consumo.head()
Out[94]:
ano mes sigla_uf tipo_consumo numero_consumidores consumo
0 2004 1 TO Total NaN 65876
1 2004 1 BA Total NaN 1444451
2 2004 1 PR Total NaN 1596274
3 2004 1 RS Total NaN 1780912
4 2004 1 GO Total NaN 630624
In [95]:
# Verificando as informações do DataFrame de consumo
df_consumo.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 39897 entries, 0 to 39896
Data columns (total 6 columns):
 #   Column               Non-Null Count  Dtype  
---  ------               --------------  -----  
 0   ano                  39897 non-null  int64  
 1   mes                  39897 non-null  int64  
 2   sigla_uf             39897 non-null  object 
 3   tipo_consumo         39897 non-null  object 
 4   numero_consumidores  26937 non-null  float64
 5   consumo              39897 non-null  int64  
dtypes: float64(1), int64(3), object(2)
memory usage: 1.8+ MB
In [96]:
# A coluna 'numero_consumidores' possui valores ausentes, vamos verificar a distribuição desses valores
df_consumo['numero_consumidores'].value_counts(dropna=False)
Out[96]:
numero_consumidores
NaN          12960
405.0           12
404.0            9
392.0            8
441.0            7
             ...  
12828.0          1
11204.0          1
86829.0          1
12793.0          1
3329325.0        1
Name: count, Length: 23852, dtype: int64
In [97]:
# Removendo a coluna 'numero_consumidores' do DataFrame de consumo
df_consumo.drop(columns=['numero_consumidores'], inplace=True)
In [98]:
# Criando a coluna de data
df_consumo['data'] = pd.to_datetime(df_consumo['ano'].astype(str) + '-' + df_consumo['mes'].astype(str))
In [99]:
# Removendo as colunas de ano e mês
df_consumo.drop(columns=['ano', 'mes'], inplace=True)
In [100]:
# Verificando as primeiras linhas do DataFrame de consumo modificado
df_consumo.head()
Out[100]:
sigla_uf tipo_consumo consumo data
0 TO Total 65876 2004-01-01
1 BA Total 1444451 2004-01-01
2 PR Total 1596274 2004-01-01
3 RS Total 1780912 2004-01-01
4 GO Total 630624 2004-01-01

Integrando as bases de dados¶

In [101]:
df_integrado = pd.merge(df_consumo, df_estados, left_on='sigla_uf', right_on='sigla', how='inner')
df_integrado.drop(columns=['sigla', 'id_estado'], inplace=True)
df_integrado.head()
Out[101]:
sigla_uf tipo_consumo consumo data estado regiao pais
0 TO Total 65876 2004-01-01 Tocantins Norte Brasil
1 BA Total 1444451 2004-01-01 Bahia Nordeste Brasil
2 PR Total 1596274 2004-01-01 Paraná Sul Brasil
3 RS Total 1780912 2004-01-01 Rio Grande do Sul Sul Brasil
4 GO Total 630624 2004-01-01 Goiás Centro-Oeste Brasil

Análise de dados¶

Consumo Total por Região¶

In [102]:
# Filtrar para tipo de consumo Total
df_total = df_integrado[df_integrado['tipo_consumo'] == 'Total'].copy()

# Análise de Consumo Total por Região
consumo_por_regiao = df_total.groupby('regiao')['consumo'].sum().sort_values(ascending=False)
plt.figure(figsize=(12, 6))
sns.barplot(x=consumo_por_regiao.index, y=consumo_por_regiao.values)
plt.title('Consumo Total de Energia por Região')
plt.xlabel('Região')
plt.ylabel('Consumo Total (em MWh)')
plt.show()
No description has been provided for this image

Consumo Total ao longo do tempo¶

In [103]:
# Filtrar para tipo de consumo Total
df_total = df_integrado[df_integrado['tipo_consumo'] == 'Total'].copy()

# Análise de Consumo Total ao Longo do Tempo
consumo_temporal = df_total.groupby('data')['consumo'].sum()
plt.figure(figsize=(12, 6))
consumo_temporal.plot(kind='line')
plt.title('Consumo Total de Energia ao Longo do Tempo')
plt.xlabel('Ano')
plt.ylabel('Consumo Total (em MWh)')
plt.grid(True)
plt.show()
No description has been provided for this image

Consumo residencial por Estado¶

In [104]:
# Filtrar para tipo de consumo Residencial
df_residencial = df_integrado[df_integrado['tipo_consumo'] == 'Residencial'].copy()

# Análise de Consumo 'Residencial' por Estado (Top 10)
consumo_residencial_estado = df_residencial.groupby('estado')['consumo'].sum().nlargest(10)
plt.figure(figsize=(12, 6))
sns.barplot(x=consumo_residencial_estado.index, y=consumo_residencial_estado.values)
plt.title('Top 10 Estados com Maior Consumo de Energia Residencial')
plt.xlabel('Estado')
plt.ylabel('Consumo Residencial (em MWh)')
plt.xticks(rotation=45)
plt.show()
No description has been provided for this image

Conclusão¶

O estudo realizou a coleta, o tratamento e a integração de dados de consumo de energia e de regiões do Brasil para responder a questões centrais sobre a distribuição e a tendência do consumo no país. As principais descobertas, visualizadas através dos gráficos gerados, nos permitem chegar à seguinte conclusão:

  1. Concentração Regional do Consumo: Existe uma clara concentração do consumo de energia na região Sudeste, que se destaca como a maior consumidora do país. As regiões Sul e Nordeste aparecem na sequência, enquanto o Norte e o Centro-Oeste apresentam um consumo consideravelmente menor. Essa distribuição reflete a concentração populacional e industrial do Brasil.

  2. Tendência de Crescimento Contínuo: A análise histórica, visualizada no gráfico de linhas, demonstra uma tendência clara de aumento no consumo de energia elétrica ao longo dos anos. Isso indica um crescimento contínuo da demanda, impulsionado pelo desenvolvimento econômico, aumento da população e maior acesso a bens de consumo.

  3. Liderança dos Grandes Centros Urbanos no Consumo Residencial: Ao analisar especificamente o consumo residencial, os estados de São Paulo, Minas Gerais e Rio de Janeiro figuram como os maiores consumidores. Isso reforça o impacto das grandes metrópoles e da densidade populacional no consumo de energia para uso doméstico.

Em resumo, o projeto conclui que o consumo de energia elétrica no Brasil é crescente e desigualmente distribuído, sendo fortemente influenciado por fatores geográficos e demográficos, com o Sudeste liderando tanto no consumo geral quanto no residencial, impulsionado por seus estados mais populosos.