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:
Importando as bibliotecas¶
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.
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¶
# Verificando as primeiras linhas do DataFrame de estados
df_estados.head()
| 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 |
# 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
# Verificando se existem valores duplicados no DataFrame de estados
df_estados.duplicated().any()
False
DataFrame Consumo¶
# Verificando as primeiras linhas do DataFrame de consumo
df_consumo.head()
| 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 |
# 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
# A coluna 'numero_consumidores' possui valores ausentes, vamos verificar a distribuição desses valores
df_consumo['numero_consumidores'].value_counts(dropna=False)
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
# Removendo a coluna 'numero_consumidores' do DataFrame de consumo
df_consumo.drop(columns=['numero_consumidores'], inplace=True)
# Criando a coluna de data
df_consumo['data'] = pd.to_datetime(df_consumo['ano'].astype(str) + '-' + df_consumo['mes'].astype(str))
# Removendo as colunas de ano e mês
df_consumo.drop(columns=['ano', 'mes'], inplace=True)
# Verificando as primeiras linhas do DataFrame de consumo modificado
df_consumo.head()
| 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¶
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()
| 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¶
# 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()
Consumo Total ao longo do tempo¶
# 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()
Consumo residencial por Estado¶
# 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()
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:
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.
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.
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.