Skip to content

Commit

Permalink
Merge pull request #210 from ResidenciaTICBrisa/186-script-dados-iea
Browse files Browse the repository at this point in the history
186 script dados iea
  • Loading branch information
EduardoGurgel authored Nov 2, 2023
2 parents a1d633d + e2390c0 commit 2d70296
Show file tree
Hide file tree
Showing 7 changed files with 687 additions and 8 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/atualiza_tabelas.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
pip install bs4==0.0.1
pip install openpyxl==3.1.2
- name: execute py script # run main.py
run: python 04_PipelineTCU/main.py
run: python 04_PipelineTCU/scripts/main.py
- name: commit files
run: |
git config --local user.email "[email protected]"
Expand Down
Binary file not shown.
38 changes: 38 additions & 0 deletions scripts/Scrappers/excelScrapperIEA.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import requests
import re
from bs4 import BeautifulSoup
from pathlib import Path


class ExcelScrapperIEA:
def __init__(self, url, path_raiz):
self.url = url
self.nome_arquivo = None
self.path_raiz = path_raiz

self.download_link = None
self.diretorio = '/scripts/constants/IEA/'
self.path_destino = None
def baixa_arquivo(self) -> str:
response = requests.get(self.url)
# Verifica se a requisição foi bem-sucedida (código 200)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
download_button = soup.find('a', attrs={'download': True, 'href': True})
self.download_link = download_button['href']
self.nome_arquivo = re.search(r'[^/]+$', self.download_link).group(0)
else:
raise ValueError(f"Não foi possivel acessar a url {self.url} \n")

if self.download_link:
download_response = requests.get(self.download_link)
if download_response.status_code == 200:
self.path_destino = Path(self.path_raiz + self.diretorio + self.nome_arquivo)
self.path_destino.parent.mkdir(parents=True, exist_ok=True)
with open(str(self.path_destino), 'wb') as file:
file.write(download_response.content)
return self.nome_arquivo
else:
raise ValueError(f"Não foi possivel baixar o arquivo {self.nome_arquivo} \n")
else:
raise ValueError(f"Não existe link para download \n")
Binary file not shown.
532 changes: 532 additions & 0 deletions scripts/constants/IEA/tabelas_paises_TES.csv

Large diffs are not rendered by default.

98 changes: 98 additions & 0 deletions scripts/ieaHandler.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import pandas as pd
from pathlib import Path


class IeaHandler:
"""
Classe responsável por ler um arquivo correspondente ao Energy Statics Data Browser do IEA, seleciona e salva
as tabelas desejadas e salva em um arquivo csv
Atributos:
file (str): nome do arquivo que será lido
n_tabelas (str): número de tabelas que o arquivo conseguiu criar, inicialmente é zero
path (str): caminho até a pasta onde os arquivos serão salvos
paises (str): lista de paises que estão na base de dados da IEA
"""
def __init__(self, file) -> None:
"""
:param file:
"""
self.file = file
self.n_table = 0
self.tables = []
self.path = str(Path(__file__).parent.resolve())
self.paises = [
"Argentina",
"Australia",
"Austria",
"Belgium",
"Brazil",
"Canada",
"Chile",
"China",
"Colombia",
"Czech Republic",
"Denmark",
"Egypt",
"Estonia",
"Finland",
"France",
"Germany",
"Greece",
"Hungary",
"India",
"Indonesia",
"Ireland",
"Israel",
"Italy",
"Japan",
"Kenya",
"Korea",
"Latvia",
"Lithuania",
"Luxembourg",
"Mexico",
"Morocco",
"New Zealand",
"Norway",
"Poland",
"Portugal",
"Senegal",
"Singapore",
"Slovak Republic",
"South Africa",
"Spain",
"Sweden",
"Switzerland",
"The Netherlands",
"Thailand",
"Türkiye",
"Ukraine",
"United Kingdom",
"United States"
]
# TODO: Será necessário fazer métodos que irão ler o arquivo xlsx e direcionar para a página certa da planilha
# TODO: Será necessário fazer um método que, ao ler o arquivo xlsx, selecionará as linhas que possuem a coluna de flow igual a Total energy supply (PJ) e a coluna de country correspondente aos países citados na lista de paises

def formatar_xlsx_IEA(self) -> None:
"""
Função responsável por ler o arquivo excel, selecionar o sheet específico e salvar apenas as informações
importantes em um novo arquivo do tipo csv.
:param nome_tab:
:return: bool
"""
excel_file = pd.ExcelFile(self.path + "/constants/IEA/" + self.file)
df_iea_sheet_principal = pd.read_excel(excel_file, sheet_name=3)
lista_indices_linhas = df_iea_sheet_principal.index[df_iea_sheet_principal.iloc[:,2] == 'Total energy supply ' \
'(PJ)'].tolist()
df_novo_csv = df_iea_sheet_principal.iloc[lista_indices_linhas]
nome_colunas_novas = ['PAIS','PRODUTO','DADO_TIPO']
df_novo_csv.columns.values[:3] = nome_colunas_novas

df_novo_csv = df_novo_csv.drop(df_novo_csv.columns[3:6], axis=1)

df_novo_csv.columns.values[3:] = df_iea_sheet_principal.iloc[0,6:]

df_novo_csv.replace('..', 0,inplace=True)

df_novo_csv.to_csv(self.path + "/constants/IEA/" + "tabelas_paises_TES.csv", index=False)
25 changes: 18 additions & 7 deletions scripts/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
from pcbioHandler import PCBIOHandler
from pneHandler import PNEHandler
from zipScrapper import ZipScrapper
from ieaHandler import IeaHandler
from Scrappers.excelScrapperIEA import ExcelScrapperIEA

if __name__ == '__main__':
year_atual = datetime.now().year
path_dir = str(pathlib.Path(__file__).parent.resolve())
path_dir = str(pathlib.Path(__file__).parent.resolve())
path_consts = path_dir + '/constants/'
path_raiz = path_dir[0:-14]
path_raiz = path_dir[0:-8]
name_left = 'Anuário'
year = year_atual
name_right = 'Workbook'
Expand All @@ -39,7 +41,7 @@
while(cont < 10):
scrapper = ExcelScrapper(name_left, str(year), name_right, url_site, url_final, file, path_raiz, path_consts)
if scrapper.link != None:
if scrapper.getFile():
if scrapper.getFile():
ben = BenHandler(file, path_consts)
ben.generateTable()
break
Expand All @@ -50,15 +52,15 @@
url_site = 'https://www.epe.gov.br/pt/publicacoes-dados-abertos/publicacoes/Plano-Nacional-de-Energia-2050'
scrapper = ZipScrapper(name_left, name_right, url_site, url_final, path_consts + 'Dados_saida_eletricidade/')
if scrapper.link != None:
if scrapper.getFile():
if scrapper.getFile():
pne = PNEHandler(path_consts + 'Dados_saida_eletricidade/', path_consts + 'Cenarios_PNE/')
pne.generaterTables()
name_left = 'EmissoesGEE'
url_site = 'https://www.gov.br/mcti/pt-br/acompanhe-o-mcti/indicadores/paginas/dados-abertos/dados-abertos-mctic/sirene-sistema-de-registro-nacional-de-emissoes'
file = 'ComunicacaoNacional.xlsx'
scrapper = ExcelScrapperByHref(name_left, url_site, file, path_raiz, path_consts)
if scrapper.link != None:
if scrapper.getFile():
if scrapper.getFile():
comunicacao = ComunicacaoHandler(file, path_consts, path_consts)
comunicacao.generateTable()
name_left = 'PCBIO'
Expand All @@ -71,8 +73,17 @@
scrapper = ExcelScrapperByHref(name_left, url_site, file, path_raiz, path_consts, str(year), url_final)
if scrapper.link != None:
if scrapper.getFile():
pcbio = PCBIOHandler(file, path_consts, path_consts)
pcbio = PCBIOHandler(file, path_consts, path_consts)
pcbio.generateTable()
break
year -= 1
cont += 1
cont += 1

'''
Extração arquivo IEA
'''
url_site = "https://www.iea.org/data-and-statistics/data-product/world-energy-statistics-and-balances"
scrapperIea = ExcelScrapperIEA(url_site, path_raiz)
nome_arquivo = scrapperIea.baixa_arquivo()
ieaHandler = IeaHandler(file=nome_arquivo)
ieaHandler.formatar_xlsx_IEA()

0 comments on commit 2d70296

Please sign in to comment.