diff --git a/models/br_inep_saeb/br_inep_saeb__brasil_taxa_alfabetizacao.sql b/models/br_inep_saeb/br_inep_saeb__brasil_taxa_alfabetizacao.sql new file mode 100644 index 00000000..fa86f32b --- /dev/null +++ b/models/br_inep_saeb/br_inep_saeb__brasil_taxa_alfabetizacao.sql @@ -0,0 +1,15 @@ +{{ + config( + alias="brasil_taxa_alfabetizacao", + schema="br_inep_saeb", + materialized="table", + ) +}} + +select + safe_cast(ano as int64) ano, + safe_cast(rede as string) rede, + safe_cast(localizacao as string) localizacao, + safe_cast(area as string) area, + safe_cast(taxa_alfabetizacao as float64) taxa_alfabetizacao, +from `basedosdados-staging.br_inep_saeb_staging.brasil_taxa_alfabetizacao` as t diff --git a/models/br_inep_saeb/br_inep_saeb__uf_taxa_alfabetizacao.sql b/models/br_inep_saeb/br_inep_saeb__uf_taxa_alfabetizacao.sql new file mode 100644 index 00000000..e6c98376 --- /dev/null +++ b/models/br_inep_saeb/br_inep_saeb__uf_taxa_alfabetizacao.sql @@ -0,0 +1,13 @@ +{{ + config( + alias="uf_taxa_alfabetizacao", schema="br_inep_saeb", materialized="table" + ) +}} +select + safe_cast(ano as int64) ano, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(rede as string) rede, + safe_cast(localizacao as string) localizacao, + safe_cast(area as string) area, + safe_cast(taxa_alfabetizacao as float64) taxa_alfabetizacao, +from `basedosdados-staging.br_inep_saeb_staging.uf_taxa_alfabetizacao` as t diff --git a/models/br_inep_saeb/code/main.py b/models/br_inep_saeb/code/main.py new file mode 100644 index 00000000..f2b06cc4 --- /dev/null +++ b/models/br_inep_saeb/code/main.py @@ -0,0 +1,103 @@ +import pandas as pd +import basedosdados as bd +import os + +os.getcwd() + +INPUT = os.path.join(os.getcwd(), "input") +OUTPUT = os.path.join(os.getcwd(), "output") +URL = "https://download.inep.gov.br/saeb/resultados/saeb_2021_brasil_estados_municipios_c_tx_alfabetizado.xlsx" + +os.makedirs(INPUT, exist_ok=True) +os.makedirs(OUTPUT, exist_ok=True) + +os.system(f"cd {INPUT}; curl -O -k {URL}") + +# Brasil + +df_br = pd.read_excel(os.path.join(INPUT, os.path.basename(URL)), sheet_name="Brasil") + +df_br.columns + +df_br["ID"].unique() + +df_br["ANO_SAEB"].unique() + +df_br["DEPENDENCIA_ADM"].unique() + +df_br["LOCALIZACAO"].unique() + +df_br["CAPITAL"].unique() + +df_br["TX_ALFABETIZADO"].unique() + +df_br["DEPENDENCIA_ADM"] = df_br["DEPENDENCIA_ADM"].str.lower() + +df_br["LOCALIZACAO"] = df_br["LOCALIZACAO"].str.lower() + +df_br["CAPITAL"] = df_br["CAPITAL"].str.lower() + +df_br = df_br.drop(columns=["ID", "MEDIA_2_LP", "MEDIA_2_MT"]) + +df_br = df_br.rename( + columns={ + "ANO_SAEB": "ano", + "DEPENDENCIA_ADM": "rede", + "LOCALIZACAO": "localizacao", + "CAPITAL": "area", + "TX_ALFABETIZADO": "taxa_alfabetizacao", + }, + errors="raise", +) + +df_br.to_csv(os.path.join(OUTPUT, "brasil_taxa_alfabetizacao.csv"), index=False) + +# Estados + +df_ufs = pd.read_excel(os.path.join(INPUT, os.path.basename(URL)), sheet_name="Estados") + +df_ufs["DEPENDENCIA_ADM"] = df_ufs["DEPENDENCIA_ADM"].str.lower() + +df_ufs["LOCALIZACAO"] = df_ufs["LOCALIZACAO"].str.lower() + +df_ufs["CAPITAL"] = df_ufs["CAPITAL"].str.lower() + +bd_dirs_ufs = bd.read_sql( + "select sigla, nome from `basedosdados.br_bd_diretorios_brasil.uf`", + billing_project_id="basedosdados-dev", +) + +uf_map = dict([(i["nome"], i["sigla"]) for i in bd_dirs_ufs.to_dict("records")]) # type: ignore + +df_ufs["NO_UF"].unique() + +df_ufs["NO_UF"] = df_ufs["NO_UF"].replace(uf_map) + +df_ufs["NO_UF"].isna().sum() + +df_ufs = df_ufs.drop(columns=["CO_UF", "MEDIA_2_LP", "MEDIA_2_MT"]) + +df_ufs = df_ufs.rename( + columns={ + "ANO_SAEB": "ano", + "NO_UF": "sigla_uf", + "DEPENDENCIA_ADM": "rede", + "LOCALIZACAO": "localizacao", + "CAPITAL": "area", + "TX_ALFABETIZADO": "taxa_alfabetizacao", + }, + errors="raise", +) + +df_ufs.to_csv(os.path.join(OUTPUT, "uf_taxa_alfabetizacao.csv"), index=False) + +# Upload + +## Brasil + +tb_br = bd.Table(dataset_id="br_inep_saeb", table_id="brasil_taxa_alfabetizacao") +tb_br.create(os.path.join(OUTPUT, "brasil_taxa_alfabetizacao.csv")) + + +tb_uf = bd.Table(dataset_id="br_inep_saeb", table_id="uf_taxa_alfabetizacao") +tb_uf.create(os.path.join(OUTPUT, "uf_taxa_alfabetizacao.csv")) diff --git a/models/br_inep_saeb/schema.yml b/models/br_inep_saeb/schema.yml index 883b8dc4..ec20c3da 100644 --- a/models/br_inep_saeb/schema.yml +++ b/models/br_inep_saeb/schema.yml @@ -1492,6 +1492,57 @@ models: description: Percentual de alunos que se enquadram no nível nove de aprendizage - name: nivel_10 description: Percentual de alunos que se enquadram no nível dez de aprendizagem + - name: br_inep_saeb__brasil_taxa_alfabetizacao + description: Taxa de alfabetização para o Brasil referente ao 2º ano divulgado + pelo SAEB + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: [ano, rede, localizacao, area] + - not_null_proportion_multiple_columns: + at_least: 0.95 + columns: + - name: ano + description: Ano + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: rede + description: Rede Escolar + - name: localizacao + description: Localização da escola + - name: area + description: 'Área onde a escola está localizada: interior, capital ou total' + - name: taxa_alfabetizacao + description: Taxa de alfabetização + - name: br_inep_saeb__uf_taxa_alfabetizacao + description: Taxa de alfabetização por UF referente ao 2º ano divulgado pelo SAEB + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: [ano, sigla_uf, rede, localizacao, area] + - not_null_proportion_multiple_columns: + at_least: 0.95 + columns: + - name: ano + description: Ano + tests: + - relationships: + to: ref('br_bd_diretorios_data_tempo__ano') + field: ano.ano + - name: sigla_uf + description: Sigla da Unidade da Federação + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__uf') + field: sigla + - name: rede + description: Rede Escolar + - name: localizacao + description: Localização da escola + - name: area + description: 'Área onde a escola está localizada: interior, capital ou total' + - name: taxa_alfabetizacao + description: Taxa de alfabetização - name: br_inep_saeb__dicionario description: Dicionário para tradução dos códigos do conjunto br_inep_saeb. Para taduzir códigos compartilhados entre instituições, como id_municipio, buscar @@ -1504,7 +1555,7 @@ models: - chave - cobertura_temporal - not_null_proportion_multiple_columns: - at_least: 0.05 + at_least: 0.95 columns: - name: id_tabela description: ID Tabela