Skip to content

Commit

Permalink
Merge pull request #587 from basedosdados/br_rf_arrecadacao
Browse files Browse the repository at this point in the history
[dados]br_rf_arrecadacao
  • Loading branch information
Winzen authored Aug 8, 2024
2 parents 4303ce8 + 7968c35 commit 79696f4
Show file tree
Hide file tree
Showing 5 changed files with 463 additions and 0 deletions.
3 changes: 3 additions & 0 deletions dbt_project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,9 @@ models:
br_poder360_pesquisas:
+materialized: table
+schema: br_poder360_pesquisas
br_rf_arrecadacao:
+materialized: table
+schema: br_rf_arrecadacao
br_rf_cafir:
+materialized: table
+schema: br_rf_cafir
Expand Down
65 changes: 65 additions & 0 deletions models/br_rf_arrecadacao/br_rf_arrecadacao__uf.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{{
config(
schema="br_rf_arrecadacao",
alias="uf",
materialized="table",
partition_by={
"field": "ano",
"data_type": "int64",
"range": {"start": 2000, "end": 2024, "interval": 1},
},
cluster_by=["mes"],
)
}}

select
safe_cast(ano as int64) ano,
safe_cast(mes as int64) mes,
safe_cast(sigla_uf as string) sigla_uf,
safe_cast(imposto_importacao as float64) imposto_importacao,
safe_cast(imposto_exportacao as float64) imposto_exportacao,
safe_cast(ipi_fumo as float64) ipi_fumo,
safe_cast(ipi_bebidas as float64) ipi_bebidas,
safe_cast(ipi_automoveis as float64) ipi_automoveis,
safe_cast(ipi_importacoes as float64) ipi_importacoes,
safe_cast(ipi_outros as float64) ipi_outros,
safe_cast(irpf as float64) irpf,
safe_cast(irpj_entidades_financeiras as float64) irpj_entidades_financeiras,
safe_cast(irpj_demais_empresas as float64) irpj_demais_empresas,
safe_cast(irrf_rendimentos_trabalho as float64) irrf_rendimentos_trabalho,
safe_cast(irrf_rendimentos_capital as float64) irrf_rendimentos_capital,
safe_cast(irrf_remessas_exterior as float64) irrf_remessas_exterior,
safe_cast(irrf_outros_rendimentos as float64) irrf_outros_rendimentos,
safe_cast(iof as float64) iof,
safe_cast(itr as float64) itr,
safe_cast(ipmf as float64) ipmf,
safe_cast(cpmf as float64) cpmf,
safe_cast(cofins as float64) cofins,
safe_cast(cofins_financeiras as float64) cofins_entidades_financeiras,
safe_cast(cofins_demais_empresas as float64) cofins_demais_empresas,
safe_cast(pis_pasep as float64) pis_pasep,
safe_cast(
pis_pasep_entidades_financeiras as float64
) pis_pasep_entidades_financeiras,
safe_cast(pis_pasep_demais_empresas as float64) pis_pasep_demais_empresas,
safe_cast(csll as float64) csll,
safe_cast(csll_financeiras as float64) csll_entidades_financeiras,
safe_cast(csll_demais_empresas as float64) csll_demais_empresas,
safe_cast(
cide_combustiveis_parcela_nao_dedutivel as float64
) cide_combustiveis_parcela_nao_dedutivel,
safe_cast(cide_combustiveis as float64) cide_combustiveis,
safe_cast(cpsss_1 as float64) cpsss_1,
safe_cast(cpsss_2 as float64) cpsss_2,
safe_cast(contribuicoes_fundaf as float64) contribuicao_fundaf,
safe_cast(refis as float64) refis,
safe_cast(paes as float64) paes,
safe_cast(retencoes_fonte as float64) retencoes_fonte,
safe_cast(pagamento_unificado as float64) pagamento_unificado,
safe_cast(outras_receitas_ as float64) outras_receitas_rfb,
safe_cast(demais_receitas as float64) demais_receitas,
safe_cast(receita_previdenciaria as float64) receita_previdenciaria,
safe_cast(receita_previdenciaria_propria as float64) receita_previdenciaria_propria,
safe_cast(receita_previdenciaria_demais as float64) receita_previdenciaria_demais,
safe_cast(receitas_outros_orgaos as float64) receitas_outros_orgaos,
from `basedosdados-dev.br_rf_arrecadacao_staging.uf` as t
120 changes: 120 additions & 0 deletions models/br_rf_arrecadacao/code/clean_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
import os
import numpy as np
import pandas as pd

file_directory = os.path.dirname(__file__)

def read_data():
data_directory = os.path.join(file_directory, '../input/arrecadacao-estado.csv')
return pd.read_csv(data_directory, sep=';')

def removeEmptyRows(df):
return df.dropna(axis=0, how='all')

def rename_columns(df):
name_dict = {
'Ano':'ano',
'Mês':'mes',
'UF':'sigla_uf',
'IMPOSTO SOBRE IMPORTAÇÃO':'imposto_importacao',
'IMPOSTO SOBRE EXPORTAÇÃO':'imposto_exportacao',
'IPI - FUMO':'ipi_fumo',
'IPI - BEBIDAS':'ipi_bebidas',
'IPI - AUTOMÓVEIS':'ipi_automoveis',
'IPI - VINCULADO À IMPORTACAO':'ipi_importacoes',
'IPI - OUTROS':'ipi_outros',
'IRPF':'irpf',
'IRPJ - ENTIDADES FINANCEIRAS':'irpj_entidades_financeiras',
'IRPJ - DEMAIS EMPRESAS':'irpj_demais_empresas',
'IRRF - RENDIMENTOS DO TRABALHO':'irrf_rendimentos_trabalho',
'IRRF - RENDIMENTOS DO CAPITAL':'irrf_rendimentos_capital',
'IRRF - REMESSAS P/ EXTERIOR':'irrf_remessas_exterior',
'IRRF - OUTROS RENDIMENTOS':'irrf_outros_rendimentos',
'IMPOSTO S/ OPERAÇÕES FINANCEIRAS':'iof',
'IMPOSTO TERRITORIAL RURAL':'itr',
'IMPOSTO PROVIS.S/ MOVIMENT. FINANC. - IPMF':'ipmf',
'CPMF':'cpmf',
'COFINS':'cofins',
'COFINS - FINANCEIRAS':'cofins_financeiras',
'COFINS - DEMAIS':'cofins_demais_empresas',
'CONTRIBUIÇÃO PARA O PIS/PASEP':'pis_pasep',
'CONTRIBUIÇÃO PARA O PIS/PASEP - FINANCEIRAS':'pis_pasep_entidades_financeiras',
'CONTRIBUIÇÃO PARA O PIS/PASEP - DEMAIS':'pis_pasep_demais_empresas',
'CSLL':'csll',
'CSLL - FINANCEIRAS':'csll_financeiras',
'CSLL - DEMAIS':'csll_demais_empresas',
'CIDE-COMBUSTÍVEIS (parc. não dedutível)': 'cide_combustiveis_parcela_nao_dedutivel',
'CIDE-COMBUSTÍVEIS':'cide_combustiveis',
'CONTRIBUIÇÃO PLANO SEG. SOC. SERVIDORES':'cpsss_1',
'CPSSS - Contrib. p/ o Plano de Segurid. Social Serv. Público':'cpsss_2',
'CONTRIBUICÕES PARA FUNDAF':'contribuicoes_fundaf',
'REFIS':'refis',
'PAES':'paes',
'RETENÇÃO NA FONTE - LEI 10.833, Art. 30':'retencoes_fonte',
'PAGAMENTO UNIFICADO':'pagamento_unificado',
'OUTRAS RECEITAS ADMINISTRADAS':'outras_receitas_',
'DEMAIS RECEITAS':'demais_receitas',
'RECEITA PREVIDENCIÁRIA':'receita_previdenciaria',
'RECEITA PREVIDENCIÁRIA - PRÓPRIA':'receita_previdenciaria_propria',
'RECEITA PREVIDENCIÁRIA - DEMAIS':'receita_previdenciaria_demais',
'ADMINISTRADAS POR OUTROS ÓRGÃOS':'receitas_outros_orgaos'
}

return df.rename(columns=name_dict)

def replace_commas(value):
string_value = str(value)
num_commas = string_value.count(',')
if num_commas == 1:
return string_value.replace(',','.')
elif num_commas > 1:
return string_value.replace(',','',num_commas-1).replace(',','.')
else:
return string_value

def remove_dots(value):
string_value = str(value)
num_dots = string_value.count('.')
if num_dots > 1:
return string_value.replace('.','',num_dots-1)
else:
return string_value

def get_month_number(month_column):
month_numbers = {
'Janeiro': '1',
'Fevereiro': '2',
'Março': '3',
'Abril': '4',
'Maio': '5',
'Junho': '6',
'Julho': '7',
'Agosto': '8',
'Setembro': '9',
'Outubro': '10',
'Novembro': '11',
'Dezembro':'12'
}
return month_column.replace(month_numbers).astype('int')

def change_types(df):
df['ano'] = df['ano'].astype('int')
df['mes'] = get_month_number(df['mes'])
df['sigla_uf'] = df['sigla_uf'].astype('string')

#All remaining columns are monetary values
for col in df.columns[3:]:
df[col] = df[col].apply(replace_commas).apply(remove_dots).astype('float')

return df

def save_data(df):
data_directory = os.path.join(file_directory, '../output/br_rf_arrecadacao')
df.to_parquet(data_directory, partition_cols=['ano','mes'])

if __name__ == '__main__':
df = read_data()
df = removeEmptyRows(df)
df = rename_columns(df)
df = change_types(df)
save_data(df)
11 changes: 11 additions & 0 deletions models/br_rf_arrecadacao/code/download_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import requests

def download_data(url, file_path):
response = requests.get(url)
with open(file_path, 'w') as file:
file.write(response.content.decode('latin1'))

if __name__ == "__main__":
url = "https://www.gov.br/receitafederal/dados/arrecadacao-estado.csv"
file_path = f"input/arrecadacao-estado.csv"
download_data(url, file_path)
Loading

0 comments on commit 79696f4

Please sign in to comment.