diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..ccfdd206 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,63 @@ + +# Template Pull Requests - Queries-basedosdados + +## Nomeação do Pull Request + +A nomeação de cada Pull Request (PR) deve seguir o seguinte padrão: + +- O título de cada Pull Request (PR) deve começar com uma das seguintes palavras-chave, entre colchetes. Além disso, **marque a palavra-chave que melhor descreve o seu PR atual**: + - [ ] **[Dbt]**: Para subida de novos dados em produção. + - [ ] **[Feature]**: Para novas funcionalidades. + - [ ] **[Table-Approve]**: Para rodar apenas o Table-Approve. + - [ ] **[Bugfix]**: Para correções de bugs. + - [ ] **[Refactor]**: Para mudanças no código que não alteram a funcionalidade. + - [ ] **[Docs]**: Para atualizações na documentação. + - [ ] **[Test]**: Para mudanças relacionadas a testes. + - [ ] **[Chore]**: Para tarefas menores e de manutenção. + +--- + - Exemplos de título: + - **[docs] br_me_caged** + - **[Feature] br_cgu_servidores_publicos** + +## Draft: +- Ao abrir o PR, deverá coloca-lo como draft + + +## Descrição do PR: +- Explique de maneira clara e concisa o objetivo deste PR. O que foi alterado? Qual o problema que ele resolve? + - **Motivação/Contexto:** + + +## Detalhes Técnicos: +- Detalhe as mudanças mais técnicas, como ajustes no dbt, scripts ou modelo de dados utilizado. + - **Principais alterações no dbt/scripts:** + - **Mudanças nos dados e no schema:** + - **Impacto no desempenho:** + +- Se alguma parte do código precisar de alguma atenção a mais, comente na linha sinalizando para os revisores. + +## Teste e Validações: + +- Relate os testes e validações relacionado aos dados/script: + - [ ] Testado em `queries-basedosdados-dev` + - [ ] **Decisões relacionadas aos testes:** + + - **Caso haja algo relacionado aos testes que vale a pena informar:** + +## Riscos e Mitigações: +- Identifique os riscos potenciais desta mudança e como mitigar esses Riscos + + - Riscos conhecidos: + - Planos de rollback: + +## Dependencias: +- Liste quaisquer dependências externas, como bibliotecas, outros PRs ou mudanças que precisam ser feitas antes deste merge. + - [ ] Dependências: + - [ ] Nenhuma dependencias adicional + + +## Revisadores: +- Quando o PR estiver pronto para ser revisado, retire o **Draft** através do **Ready for reviews**, marque os revisadores de repositório, envie o PR no nosso [discord](https://discord.gg/V3yTWRYWZZ) na aba **Correções de PRs, arquiteturas e afins** e marque a **@equipe_dados**: + - Revisadores recomendados no github: + - basedosdados/dados diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_deficiencia.sql b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_deficiencia.sql new file mode 100644 index 00000000..384fa0e2 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_deficiencia.sql @@ -0,0 +1,23 @@ +{{ + config( + alias="docente_deficiencia", + schema="br_inep_sinopse_estatistica_educacao_basica", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2012, "end": 2023, "interval": 1}, + }, + cluster_by="sigla_uf", + ) +}} +select + safe_cast(ano as int64) ano, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(id_municipio as string) id_municipio, + safe_cast(tipo_classe as string) tipo_classe, + safe_cast(deficiencia as string) deficiencia, + safe_cast(quantidade_docente as int64) quantidade_docente, +from + `basedosdados-staging.br_inep_sinopse_estatistica_educacao_basica_staging.docente_deficiencia` + as t diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_escolaridade.sql b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_escolaridade.sql new file mode 100644 index 00000000..77a3b180 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_escolaridade.sql @@ -0,0 +1,23 @@ +{{ + config( + alias="docente_escolaridade", + schema="br_inep_sinopse_estatistica_educacao_basica", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2007, "end": 2023, "interval": 1}, + }, + cluster_by="sigla_uf", + ) +}} +select + safe_cast(ano as int64) ano, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(id_municipio as string) id_municipio, + safe_cast(tipo_classe as string) tipo_classe, + safe_cast(escolaridade as string) escolaridade, + safe_cast(replace(quantidade_docente, ".0", "") as int64) quantidade_docente, +from + `basedosdados-staging.br_inep_sinopse_estatistica_educacao_basica_staging.docente_escolaridade` + as t diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_etapa_ensino.sql b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_etapa_ensino.sql new file mode 100644 index 00000000..73424c9e --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_etapa_ensino.sql @@ -0,0 +1,24 @@ +{{ + config( + alias="docente_etapa_ensino", + schema="br_inep_sinopse_estatistica_educacao_basica", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2007, "end": 2023, "interval": 1}, + }, + cluster_by="sigla_uf", + ) +}} + +select + safe_cast(ano as int64) ano, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(replace(id_municipio, ".0", "") as string) id_municipio, + safe_cast(tipo_classe as string) tipo_classe, + safe_cast(etapa_ensino as string) etapa_ensino, + safe_cast(replace(quantidade_docentes, ".0", "") as int64) quantidade_docente, +from + `basedosdados-staging.br_inep_sinopse_estatistica_educacao_basica_staging.docente_etapa_ensino` + as t diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_faixa_etaria_sexo.sql b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_faixa_etaria_sexo.sql new file mode 100644 index 00000000..bd7e3636 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_faixa_etaria_sexo.sql @@ -0,0 +1,24 @@ +{{ + config( + alias="docente_faixa_etaria_sexo", + schema="br_inep_sinopse_estatistica_educacao_basica", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2007, "end": 2023, "interval": 1}, + }, + cluster_by="sigla_uf", + ) +}} +select + safe_cast(ano as int64) ano, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(id_municipio as string) id_municipio, + safe_cast(tipo_classe as string) tipo_classe, + safe_cast(faixa_etaria as string) faixa_etaria, + safe_cast(sexo as string) sexo, + safe_cast(quantidade_docente as int64) quantidade_docente, +from + `basedosdados-staging.br_inep_sinopse_estatistica_educacao_basica_staging.docente_faixa_etaria_sexo` + as t diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_localizacao.sql b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_localizacao.sql new file mode 100644 index 00000000..a58cb833 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_localizacao.sql @@ -0,0 +1,24 @@ +{{ + config( + alias="docente_localizacao", + schema="br_inep_sinopse_estatistica_educacao_basica", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2007, "end": 2023, "interval": 1}, + }, + cluster_by="sigla_uf", + ) +}} +select + safe_cast(ano as int64) ano, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(replace(id_municipio, ".0", "") as string) id_municipio, + safe_cast(tipo_classe as string) tipo_classe, + safe_cast(rede as string) rede, + safe_cast(localizacao as string) localizacao, + safe_cast(quantidade_docente as int64) quantidade_docente, +from + `basedosdados-staging.br_inep_sinopse_estatistica_educacao_basica_staging.docente_localizacao` + as t diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_regime_contrato.sql b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_regime_contrato.sql new file mode 100644 index 00000000..74c2d810 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/br_inep_sinopse_estatistica_educacao_basica__docente_regime_contrato.sql @@ -0,0 +1,24 @@ +{{ + config( + alias="docente_regime_contrato", + schema="br_inep_sinopse_estatistica_educacao_basica", + materialized="table", + partition_by={ + "field": "ano", + "data_type": "int64", + "range": {"start": 2007, "end": 2023, "interval": 1}, + }, + cluster_by="sigla_uf", + ) +}} +select + safe_cast(ano as int64) ano, + safe_cast(sigla_uf as string) sigla_uf, + safe_cast(id_municipio as string) id_municipio, + safe_cast(tipo_classe as string) tipo_classe, + safe_cast(rede as string) rede, + safe_cast(regime_contrato as string) regime_contrato, + safe_cast(quantidade_docente as int64) quantidade_docente, +from + `basedosdados-staging.br_inep_sinopse_estatistica_educacao_basica_staging.docente_regime_contrato` + as t diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_deficiencia.py b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_deficiencia.py new file mode 100644 index 00000000..4473f626 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_deficiencia.py @@ -0,0 +1,172 @@ +import os +import zipfile +import pandas as pd +import basedosdados as bd +import numpy as np + +INPUT = os.path.join(os.getcwd(), "input") +OUTPUT = os.path.join(os.getcwd(), "output") + +# os.makedirs(INPUT, exist_ok=True) +# os.makedirs(OUTPUT, exist_ok=True) + +RENAME_DEFICIENCIA = { + "Educacao Especial - Classes Comuns": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Cegueira": "Cegueira", + "Baixa Visão": "Baixa Visão", + "Surdez": "Surdez", + "Deficiência Auditiva": "Deficiência Auditiva", + "Surdocegueira": "Surdocegueira", + "Deficiência Física": "Deficiência Física", + "Deficiência Intelectual": "Deficiência Intelectual", + "Deficiência Múltipla": "Deficiência Múltipla", + # "Transtorno do Espectro Autista": "Transtorno do Espectro Autista", + # "Altas Habilidades / Superdotação": "Altas Habilidades / Superdotação", + }, + "Educacao Especial - Classes Exclusivas": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Cegueira": "Cegueira", + "Baixa Visão": "Baixa Visão", + "Surdez": "Surdez", + "Deficiência Auditiva": "Deficiência Auditiva", + "Surdocegueira": "Surdocegueira", + "Deficiência Física": "Deficiência Física", + "Deficiência Intelectual": "Deficiência Intelectual", + "Deficiência Múltipla": "Deficiência Múltipla", + # "Transtorno do Espectro Autista": "Transtorno do Espectro Autista", + # "Altas Habilidades / Superdotação": "Altas Habilidades / Superdotação", + }, +} + +deficiencia = { + "educacao_especial_classes_comuns": { + "dicionario": RENAME_DEFICIENCIA["Educacao Especial - Classes Comuns"], + "chave": "2.48", + "valor": "Educacao Especial - Classes Comuns", + "skiprows": 7, + "table": "docente_deficiencia", + }, + "educacao_especial_classes_exclusivas": { + "dicionario": RENAME_DEFICIENCIA["Educacao Especial - Classes Exclusivas"], + "chave": "2.54", + "valor": "Educacao Especial - Classes Exclusivas", + "skiprows": 7, + "table": "docente_deficiencia", + }, +} + + +def read_sheet( + table: str, ano: int, chave: str, valor: str, dicionario: dict, skiprows +) -> pd.DataFrame: + print("Tratando dados de", valor, ano) + path_excel = os.path.join( + INPUT, + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}", + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}.xlsx", + ) + + df = pd.read_excel( + path_excel, + skiprows=skiprows, + sheet_name=chave, + ) + + sheets_etapa_ensino_serie = {chave: valor} + + dfs_deficiencia = { + name: pd.read_excel(path_excel, skiprows=skiprows, sheet_name=sheet_name) + for sheet_name, name in sheets_etapa_ensino_serie.items() + } + + dataframes = {} + + for table_name, columns in dfs_deficiencia.items(): + df = pd.DataFrame(columns) # Create DataFrame for each table + dataframes[table_name] = df # Store the DataFrame in a dictionary + + print(df.columns) + + def drop_unused_columns(df: pd.DataFrame) -> pd.DataFrame: + cols_drop = [ + col + for col in df.columns + if col.startswith("Unnamed") or col.startswith("Total") + ] + + return df.drop(columns=cols_drop) + + dfs_deficiencia = { + name: drop_unused_columns( + df.rename(columns=RENAME_DEFICIENCIA[name], errors="raise") + ) + for name, df in dfs_deficiencia.items() + } + + df_deficiencia = pd.concat( + [ + df.pipe( + lambda d: d.loc[(d["id_municipio"].notna()) & (d["id_municipio"] != " "),] + ) + .pipe( + lambda d: pd.melt( + d, + id_vars=["id_municipio", "uf"], + value_vars=d.columns.difference( + ["id_municipio", "uf"] + ).tolist(), # Convert to list + var_name="deficiencia", + value_name="quantidade_docente", + ) + ) + .assign(tipo_classe=tipo_classe) + for tipo_classe, df in dfs_deficiencia.items() + ] + ) + + bd_dir = bd.read_sql( + "SELECT nome, sigla FROM `basedosdados.br_bd_diretorios_brasil.uf`", + billing_project_id="basedosdados", + reauth=False, + ) + + df_deficiencia["uf"] = df_deficiencia["uf"].apply(lambda uf: uf.strip()).replace({i["nome"]: i["sigla"] for i in bd_dir.to_dict("records")}) # type: ignore + + df_deficiencia = df_deficiencia.rename(columns={"uf": "sigla_uf"}, errors="raise") + + df_deficiencia["quantidade_docente"] = df_deficiencia["quantidade_docente"].astype( + int + ) + + print("Particionando dados") + for sigla_uf, df in df_deficiencia.groupby("sigla_uf"): + path = os.path.join(OUTPUT, f"{table}", f"ano={ano}", f"sigla_uf={sigla_uf}") + if not os.path.exists(path): + os.makedirs(path, exist_ok=True) + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="w" + ) + else: + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="a", header=False + ) + +if __name__ == '__main__' : + lista = [ + "educacao_especial_classes_comuns", + "educacao_especial_classes_exclusivas", + ] + + for x in lista: + # for ano in range(2012, 2019): + read_sheet( + table=deficiencia[x]["table"], + ano=2011, + chave=deficiencia[x]["chave"], + valor=deficiencia[x]["valor"], + dicionario=deficiencia[x]["dicionario"], + skiprows=deficiencia[x]["skiprows"], + ) diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_escolaridade.py b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_escolaridade.py new file mode 100644 index 00000000..179dadf4 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_escolaridade.py @@ -0,0 +1,347 @@ +import os +import zipfile +import pandas as pd +import basedosdados as bd +import numpy as np + + +INPUT = os.path.join(os.getcwd(), "input") +OUTPUT = os.path.join(os.getcwd(), "output") + +# os.makedirs(INPUT, exist_ok=True) +# os.makedirs(OUTPUT, exist_ok=True) + +RENAMES_ETAPA_ENSINO_SERIE = { + "Educacao Basica": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura10": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Educacao Infantil - Creche": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura10": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Educacao Infantil - Pré-Escola": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura10": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Ensino Fundamental": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura9": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Ensino Fundamental - Anos Iniciais": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura9": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Ensino Fundamental - Anos Finais": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura9": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Ensino Médio": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura9": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Educacao Profissional": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura9": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "EJA": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura9": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Educacao Especial - Classes Comuns": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura9": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, + "Educacao Especial - Classes Exclusivas": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Unnamed: 5": "Ensino Fundamental", + "Unnamed: 6": "Ensino Médio", + "Com Licenciatura8": "Graduação - Com Licenciatura", + "Sem Licenciatura": "Graduação - Sem Licenciatura", + "Especialização": "Pós Graduação - Especialização", + "Mestrado": "Pós Graduação - Mestrado", + "Doutorado": "Pós Graduação - Doutorado", + }, +} + + +escolaridade = { + "educacao_basica": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Basica"], + "chave": "2.4", + "valor": "Educacao Basica", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "ensino_infantil_creche": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Infantil - Creche"], + # "chave": "2.10", + "chave": "2.9", # Para anos anteriores a 2010 + "valor": "Educacao Infantil - Creche", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "educacao_infantil_pre_escola": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Infantil - Pré-Escola"], + # "chave": "2.14", + "chave": "2.12", # Para anos anteriores a 2010 + "valor": "Educacao Infantil - Pré-Escola", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "ensino_fundamental": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental"], + "chave": "2.19", + "chave": "2.16", # Para anos anteriores a 2010 + "valor": "Ensino Fundamental", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "ensino_fundamental_anos_iniciais": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental - Anos Iniciais"], + # "chave": "2.23", + "chave": "2.19", # Para anos anteriores a 2010 + "valor": "Ensino Fundamental - Anos Iniciais", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "ensino_fundamental_anos_finais": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental - Anos Finais"], + # "chave": "2.27", + "chave": "2.22", # Para anos anteriores a 2010 + "valor": "Ensino Fundamental - Anos Finais", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "ensino_medio": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Médio"], + # "chave": "2.31", + "chave": "2.25", # Para anos anteriores a 2010 + "valor": "Ensino Médio", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "educacao_profissional": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Profissional"], + # "chave": "2.36", + "chave": "2.29", # Para anos anteriores a 2010 + "valor": "Educacao Profissional", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "EJA": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["EJA"], + # "chave": "2.41", + "chave": "2.33", # Para anos anteriores a 2010 + "valor": "EJA", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "educacao_especial_classes_comuns": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Especial - Classes Comuns"], + # "chave": "2.47", + "chave": "2.38", # Para anos anteriores a 2010 + "valor": "Educacao Especial - Classes Comuns", + "skiprows": 9, + "table": "docente_escolaridade", + }, + "educacao_especial_classes_exclusivas": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE[ + "Educacao Especial - Classes Exclusivas" + ], + # "chave": "2.53", + "chave": "2.52", # Para o ano de 2011 + "chave": "2.42", # Para anos anteriores a 2010 + "valor": "Educacao Especial - Classes Exclusivas", + "skiprows": 9, + "table": "docente_escolaridade", + }, +} + + +def read_sheet( + table: str, ano: int, chave: str, valor: str, dicionario: dict, skiprows: int = 9 +) -> pd.DataFrame: + print("Tratando dados de", valor, ano) + path_excel = os.path.join( + INPUT, + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}", + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}.xlsx", + ) + df = pd.read_excel( + path_excel, + skiprows=skiprows, + sheet_name=chave, + ) + + sheets_escolaridade = {chave: valor} + + dfs_escolaridade = { + name: pd.read_excel( + path_excel, + skiprows=skiprows, + sheet_name=sheet_name, + ) + for sheet_name, name in sheets_escolaridade.items() + } + + dataframes = {} + for table_name, columns in dfs_escolaridade.items(): + df = pd.DataFrame(columns) + dataframes[table_name] = df + + print(df.columns) + + def drop_unused_columns(df: pd.DataFrame) -> pd.DataFrame: + cols_drop = [ + col + for col in df.columns + if col.startswith("Unnamed") or col.startswith("Total") + ] + + return df.drop(columns=cols_drop) + + dfs_escolaridade = { + name: drop_unused_columns(df.rename(columns=dicionario, errors="raise")) + for name, df in dfs_escolaridade.items() + } + + df_escolaridade = pd.concat( + [ + df.pipe( + lambda d: d.loc[(d["id_municipio"].notna()) & (d["id_municipio"] != " "),] + ) + .pipe( + lambda d: pd.melt( + d, + id_vars=["id_municipio", "uf"], + value_vars=d.columns.difference( + ["id_municipio", "uf"] + ).tolist(), # Convert to list + var_name="escolaridade", + value_name="quantidade_docente", + ) + ) + .assign(tipo_classe=tipo_classe) + for tipo_classe, df in dfs_escolaridade.items() + ] + ) + + bd_dir = bd.read_sql( + "SELECT nome, sigla FROM `basedosdados.br_bd_diretorios_brasil.uf`", + billing_project_id="basedosdados", + reauth=False, + ) + + df_escolaridade["uf"] = df_escolaridade["uf"].apply(lambda uf: uf.strip()).replace({i["nome"]: i["sigla"] for i in bd_dir.to_dict("records")}) # type: ignore + + df_escolaridade = df_escolaridade.rename(columns={"uf": "sigla_uf"}, errors="raise") + + print("Particionando dados") + for sigla_uf, df in df_escolaridade.groupby("sigla_uf"): + path = os.path.join(OUTPUT, f"{table}", f"ano={ano}", f"sigla_uf={sigla_uf}") + if not os.path.exists(path): + os.makedirs(path, exist_ok=True) + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="w" + ) + else: + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="a", header=False + ) + +if __name__ == '__main__' : + lista = [ + "educacao_basica", + "ensino_infantil_creche", + "educacao_infantil_pre_escola", + "ensino_fundamental", + "ensino_fundamental_anos_iniciais", + "ensino_fundamental_anos_finais", + "ensino_medio", + "educacao_profissional", + "EJA", + "educacao_especial_classes_comuns", + "educacao_especial_classes_exclusivas", + ] + + for x in lista: + read_sheet( + table=escolaridade[x]["table"], + ano=2007, + chave=escolaridade[x]["chave"], + valor=escolaridade[x]["valor"], + dicionario=escolaridade[x]["dicionario"], + skiprows=escolaridade[x]["skiprows"], + ) diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_faixa_etaria_sexo.py b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_faixa_etaria_sexo.py new file mode 100644 index 00000000..fb16a601 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_faixa_etaria_sexo.py @@ -0,0 +1,444 @@ +import os +import zipfile +import pandas as pd +import basedosdados as bd +import numpy as np + + +INPUT = os.path.join(os.getcwd(), "input") +OUTPUT = os.path.join(os.getcwd(), "output") + +# os.makedirs(INPUT, exist_ok=True) +# os.makedirs(OUTPUT, exist_ok=True) + +RENAMES_ETAPA_ENSINO_SERIE = { + "Educacao Basica": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Educacao Infantil - Creche": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Educacao Infantil - Pré-Escola": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Ensino Fundamental": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Ensino Fundamental - Anos Iniciais": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Ensino Fundamental - Anos Finais": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Ensino Médio": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Educacao Profissional": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "EJA": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Educacao Especial - Classes Comuns": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, + "Educacao Especial - Classes Exclusivas": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Até 24 anos": "Feminino_Até 24 anos", + "De 25 a 29 anos": "Feminino_25 a 29 anos", + "De 30 a 39 anos": "Feminino_30 a 39 anos", + "De 40 a 49 anos": "Feminino_40 a 49 anos", + "De 50 a 54 anos": "Feminino_50 a 54 anos", + "De 55 a 59 anos": "Feminino_55 a 59 anos", + "60 anos ou mais": "Feminino_60 anos ou mais", + "Até 24 anos.1": "Masculino_Até 24 anos", + "De 25 a 29 anos.1": "Masculino_25 a 29 anos", + "De 30 a 39 anos.1": "Masculino_30 a 39 anos", + "De 40 a 49 anos.1": "Masculino_40 a 49 anos", + "De 50 a 54 anos.1": "Masculino_50 a 54 anos", + "De 55 a 59 anos.1": "Masculino_55 a 59 anos", + "60 anos ou mais.1": "Masculino_60 anos ou mais", + }, +} + + +localizacao = { + "educacao_basica": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Basica"], + "chave": "2.3", + "valor": "Educacao Basica", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "educacao_infantil_creche": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Infantil - Creche"], + #"chave": "2.9", + "chave": "2.8", # para anos anteriores a 2010 + "valor": "Educacao Infantil - Creche", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "educacao_infantil_pre_escola": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Infantil - Pré-Escola"], + #"chave": "2.13", + "chave": "2.11", # Para anos anteriores a 2010 + "valor": "Educacao Infantil - Pré-Escola", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "ensino_fundamental": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental"], + #"chave": "2.18", + "chave": "2.15", # Para anos anteriores a 2010 + "valor": "Ensino Fundamental", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "ensino_fundamental_anos_iniciais": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental - Anos Iniciais"], + #"chave": "2.22", + "chave": "2.18", # Para anos anteriores a 2010 + "valor": "Ensino Fundamental - Anos Iniciais", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "ensino_fundamental_anos_finais": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental - Anos Finais"], + # "chave": "2.26", + "chave": "2.21", # Para anos anteriores a 2010 + "valor": "Ensino Fundamental - Anos Finais", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "ensino_medio": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Médio"], + #"chave": "2.30", + "chave": "2.24", # Para anos anteriores a 2010 + "valor": "Ensino Médio", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "educacao_profissional": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Profissional"], + "chave": "2.35", + "chave": "2.28", # Para anos anteriores a 2010 + "valor": "Educacao Profissional", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "EJA": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["EJA"], + #"chave": "2.40", + "chave": "2.32", # Para anos anteriores a 2010 + "valor": "EJA", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "educacao_especial_classes_comuns": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Especial - Classes Comuns"], + #"chave": "2.46", + "chave": "2.37", # Para anos anteriores a 2010 + "valor": "Educacao Especial - Classes Comuns", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, + "educacao_especial_classes_exclusivas": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE[ + "Educacao Especial - Classes Exclusivas" + ], + #"chave": "2.52", + #"chave": "2.51", # Para o ano de 2011 + "chave": "2.41", # Para o ano anteriores a 2010 + "valor": "Educacao Especial - Classes Exclusivas", + "skiprows": 8, + "table": "docente_faixa_etaria_sexo", + }, +} + + +def read_sheet( + table: str, ano: int, chave: str, valor: str, dicionario: dict, skiprows: int = 9 +) -> pd.DataFrame: + print("Tratando dados de", valor, ano) + path_excel = os.path.join( + INPUT, + # f"sinopse_estatística_educaç╞o_básica_{ano}", + # f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}.xlsx", + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}", + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}.xlsx", + ) + df = pd.read_excel( + path_excel, + skiprows=skiprows, + sheet_name=chave, + ) + + sheets_etapa_ensino_serie = {chave: valor} + + dfs_faixa_etaria = { + name: pd.read_excel( + path_excel, + skiprows=skiprows, + sheet_name=sheet_name, + ) + for sheet_name, name in sheets_etapa_ensino_serie.items() + } + + dataframes = {} + for table_name, columns in dfs_faixa_etaria.items(): + df = pd.DataFrame(columns) + dataframes[table_name] = df + + print(df.columns) + + def drop_unused_columns(df: pd.DataFrame) -> pd.DataFrame: + cols_drop = [ + col + for col in df.columns + if col.startswith("Unnamed") or col.startswith("Total") + ] + + return df.drop(columns=cols_drop) + + dfs_faixa_etaria = { + name: drop_unused_columns( + df.rename(columns=RENAMES_ETAPA_ENSINO_SERIE[name], errors="raise") + ) + for name, df in dfs_faixa_etaria.items() + } + + df_faixa_etaria = pd.concat( + [ + df.pipe( + lambda d: d.loc[(d["id_municipio"].notna()) & (d["id_municipio"] != " "),] + ) + .pipe( + lambda d: pd.melt( + d, + id_vars=["id_municipio", "uf"], + value_vars=d.columns.difference( + ["id_municipio", "uf"] + ).tolist(), # Convert to list + var_name="faixa_etaria", + value_name="quantidade_docente", + ) + ) + .assign(tipo_classe=tipo_classe) + for tipo_classe, df in dfs_faixa_etaria.items() + ] + ) + + bd_dir = bd.read_sql( + "SELECT nome, sigla FROM `basedosdados.br_bd_diretorios_brasil.uf`", + billing_project_id="basedosdados", + reauth=False, + ) + + df_faixa_etaria["uf"] = ( + df_faixa_etaria["uf"] + .apply(lambda uf: uf.strip()) + .replace({i["nome"]: i["sigla"] for i in bd_dir.to_dict("records")}) # type: ignore + ) + + df_faixa_etaria = df_faixa_etaria.rename(columns={"uf": "sigla_uf"}, errors="raise") + + df_faixa_etaria["sexo"] = df_faixa_etaria["faixa_etaria"].apply( + lambda v: v.split("_")[-1] + ) + + df_faixa_etaria["faixa_etaria"] = df_faixa_etaria["faixa_etaria"].apply( + lambda v: v.split("_")[0] + ) + + df_faixa_etaria["quantidade_docente"] = df_faixa_etaria["quantidade_docente"].astype( + int + ) + + print("Particionando dados") + for sigla_uf, df in df_faixa_etaria.groupby("sigla_uf"): + path = os.path.join(OUTPUT, f"{table}", f"ano={ano}", f"sigla_uf={sigla_uf}") + if not os.path.exists(path): + os.makedirs(path, exist_ok=True) + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="w" + ) + else: + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="a", header=False + ) + +if __name__ == '__main__' : + lista = [ + "educacao_basica", + "educacao_infantil_creche", + "educacao_infantil_pre_escola", + "ensino_fundamental", + "ensino_fundamental_anos_iniciais", + "ensino_fundamental_anos_finais", + "ensino_medio", + "educacao_profissional", + "EJA", + "educacao_especial_classes_comuns", + "educacao_especial_classes_exclusivas", + ] + + for x in lista: + read_sheet( + table=localizacao[x]["table"], + ano=2007, + chave=localizacao[x]["chave"], + valor=localizacao[x]["valor"], + dicionario=localizacao[x]["dicionario"], + skiprows=localizacao[x]["skiprows"], + ) diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_localizacao.py b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_localizacao.py new file mode 100644 index 00000000..dc546fbf --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_localizacao.py @@ -0,0 +1,544 @@ +import os +import zipfile +import pandas as pd +import basedosdados as bd +import numpy as np + + +INPUT = os.path.join(os.getcwd(), "input") +OUTPUT = os.path.join(os.getcwd(), "output") + +# os.makedirs(INPUT, exist_ok=True) +# os.makedirs(OUTPUT, exist_ok=True) + +RENAMES_ETAPA_ENSINO_SERIE = { + "Educacao Basica": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, + "Educacao Infantil": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, + "Educacao Infantil - Creche": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + #### + # Para 2014 + #### + # "Unnamed: 1": "uf", + # "Unnamed: 3": "id_municipio", + # "Pública ": "Dependência Administrativa_Pública", + # "Federal": "Dependência Administrativa_Federal", + # "Estadual": "Dependência Administrativa_Estadual", + # "Municipal": "Dependência Administrativa_Municipal", + # "Privada": "Dependência Administrativa_Privada", + # "Pública": "Urbana_Pública", + # "Federal.1": "Urbana_Federal", + # "Estadual.1": "Urbana_Estadual", + # "Municipal.1": "Urbana_Municipal", + # "Privada.1": "Urbana_Privada", + # "Pública.1": "Rural_Pública", + # "Federal.2": "Rural_Federal", + # "Estadual.2": "Rural_Estadual", + # "Municipal.2": "Rural_Municipal", + # "Privada.2": "Rural_Privada", + }, + "Educacao Infantil - Pré-Escola": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, + "Ensino Fundamental": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, + "Ensino Fundamental - Anos Iniciais": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, + "Ensino Fundamental - Anos Finais": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, + "Ensino Médio": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, + "Educacao Profissional": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, + "EJA": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + #### + # Para 2014 + #### + # "Unnamed: 1": "uf", + # "Unnamed: 3": "id_municipio", + # "Publica ": "Dependência Administrativa_Pública", + # "Federal": "Dependência Administrativa_Federal", + # "Estadual": "Dependência Administrativa_Estadual", + # "Municipal": "Dependência Administrativa_Municipal", + # "Privada": "Dependência Administrativa_Privada", + # "Pública": "Urbana_Pública", + # "Federal.1": "Urbana_Federal", + # "Estadual.1": "Urbana_Estadual", + # "Municipal.1": "Urbana_Municipal", + # "Privada.1": "Urbana_Privada", + # "Pública.1": "Rural_Pública", + # "Federal.2": "Rural_Federal", + # "Estadual.2": "Rural_Estadual", + # "Municipal.2": "Rural_Municipal", + # "Privada.2": "Rural_Privada", + }, + "Educacao Especial - Classes Comuns": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + ##### + # Para 2014 + #### + # "Unnamed: 1": "uf", + # "Unnamed: 3": "id_municipio", + # "Pública ": "Dependência Administrativa_Pública", + # "Federal": "Dependência Administrativa_Federal", + # "Estadual": "Dependência Administrativa_Estadual", + # "Municipal": "Dependência Administrativa_Municipal", + # "Privada": "Dependência Administrativa_Privada", + # "Pública": "Urbana_Pública", + # "Federal.1": "Urbana_Federal", + # "Estadual.1": "Urbana_Estadual", + # "Municipal.1": "Urbana_Municipal", + # "Privada.1": "Urbana_Privada", + # "Pública.1": "Rural_Pública", + # "Federal.2": "Rural_Federal", + # "Estadual.2": "Rural_Estadual", + # "Municipal.2": "Rural_Municipal", + # "Privada.2": "Rural_Privada", + }, + "Educacao Especial - Classes Exclusivas": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Dependência Administrativa_Pública", + "Federal": "Dependência Administrativa_Federal", + "Estadual": "Dependência Administrativa_Estadual", + "Municipal": "Dependência Administrativa_Municipal", + "Privada": "Dependência Administrativa_Privada", + "Pública.1": "Urbana_Pública", + "Federal.1": "Urbana_Federal", + "Estadual.1": "Urbana_Estadual", + "Municipal.1": "Urbana_Municipal", + "Privada.1": "Urbana_Privada", + "Pública.2": "Rural_Pública", + "Federal.2": "Rural_Federal", + "Estadual.2": "Rural_Estadual", + "Municipal.2": "Rural_Municipal", + "Privada.2": "Rural_Privada", + }, +} + + +localizacao = { + "educacao_basica": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Basica"], + "chave": "2.2", + "valor": "Educacao Basica", + "skiprows": 8, + "table": "docente_localizacao", + }, + "educacao_infantil": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Infantil"], + "chave": "2.6", # Para o ano de 2010 + #"chave": "2.7", + "valor": "Educacao Infantil", + "skiprows": 8, + "table": "docente_localizacao", + }, + "ensino_infantil_creche": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Infantil - Creche"], + "chave": "Creche 2.7", # Para o ano de 2010 + #"chave": "Creche 2.8", + "valor": "Educacao Infantil - Creche", + "skiprows": 8, + "table": "docente_localizacao", + }, + "educacao_infantil_pre_escola": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Infantil - Pré-Escola"], + "chave": "Pré-Escola 2.10", # Para o ano de 2010 + #"chave": "Pré-Escola 2.12", + "valor": "Educacao Infantil - Pré-Escola", + "skiprows": 8, + "table": "docente_localizacao", + }, + "ensino_fundamental": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental"], + #"chave": "2.17", + "chave": "2.14", # Para o ano de 2010 + "valor": "Ensino Fundamental", + "skiprows": 8, + "table": "docente_localizacao", + }, + "ensino_fundamental_anos_iniciais": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental - Anos Iniciais"], + #"chave": "Anos Iniciais 2.21", + "chave": "Anos Iniciais 2.17", # Para o ano de 2010 + "valor": "Ensino Fundamental - Anos Iniciais", + "skiprows": 8, + "table": "docente_localizacao", + }, + "ensino_fundamental_anos_finais": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental - Anos Finais"], + #"chave": "Anos Finais 2.25", + "chave": "Anos Finais 2.20", # Para o ano de 2010 + "valor": "Ensino Fundamental - Anos Finais", + "skiprows": 8, + "table": "docente_localizacao", + }, + "ensino_medio": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Médio"], + #"chave": "Ensino Médio 2.29", + "chave": "Ensino Médio 2.23", # Para o ano de 2010 + "valor": "Ensino Médio", + "skiprows": 8, + "table": "docente_localizacao", + }, + "educacao_profissional": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Profissional"], + #"chave": "2.34", + "chave": "2.27", # Para o ano de 2010 + "valor": "Educacao Profissional", + "skiprows": 8, + "table": "docente_localizacao", + }, + "EJA": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["EJA"], + #"chave": "2.39", + "chave": "2.31", # Para o ano de 2010 + "valor": "EJA", + "skiprows": 8, + "table": "docente_localizacao", + }, + "educacao_especial_classes_comuns": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Especial - Classes Comuns"], + #"chave": "2.45", + "chave": "2.36", # Para o ano de 2010 + "valor": "Educacao Especial - Classes Comuns", + "skiprows": 8, + "table": "docente_localizacao", + }, + "educacao_especial_classes_exclusivas": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE[ + "Educacao Especial - Classes Exclusivas" + ], + #"chave": "2.51", + #"chave": "2.50", # Para o ano de 2011 + "chave": "2.40", # Para o ano de 2010 + "valor": "Educacao Especial - Classes Exclusivas", + "skiprows": 8, + "table": "docente_localizacao", + }, +} + + +def read_sheet( + table: str, ano: int, chave: str, valor: str, dicionario: dict, skiprows: int = 9 +) -> pd.DataFrame: + print("Tratando dados de", valor, ano) + path_excel = os.path.join( + INPUT, + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}", + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}.xlsx", + ) + df = pd.read_excel( + path_excel, + skiprows=skiprows, + sheet_name=chave, + ) + + sheets_etapa_ensino_serie = {chave: valor} + + df_localizacao = { + name: pd.read_excel( + path_excel, + skiprows=skiprows, + sheet_name=sheet_name, + ) + for sheet_name, name in sheets_etapa_ensino_serie.items() + } + + dataframes = {} + for table_name, columns in df_localizacao.items(): + df = pd.DataFrame(columns) + dataframes[table_name] = df + + print(df.columns) + + def drop_unused_columns(df: pd.DataFrame) -> pd.DataFrame: + cols_drop = [ + col + for col in df.columns + if col.startswith("Unnamed") or col.startswith("Total") + ] + + return df.drop(columns=cols_drop) + + dfs_localizacao = { + name: drop_unused_columns(df.rename(columns=dicionario, errors="raise")) + for name, df in df_localizacao.items() + } + + df_localizacao = pd.concat( + [ + df.pipe( + lambda d: d.loc[(d["id_municipio"].notna()) & (d["id_municipio"] != " "),] + ) + .pipe( + lambda d: pd.melt( + d, + id_vars=["id_municipio", "uf"], + value_vars=d.columns.difference( + ["id_municipio", "uf"] + ).tolist(), # Convert to list + var_name="localizacao", + value_name="quantidade_docente", + ) + ) + .assign(tipo_classe=tipo_classe) + for tipo_classe, df in dfs_localizacao.items() + ] + ) + + bd_dir = bd.read_sql( + "SELECT nome, sigla FROM `basedosdados.br_bd_diretorios_brasil.uf`", + billing_project_id="basedosdados", + reauth=False, + ) + + df_localizacao["uf"] = ( + df_localizacao["uf"] + .apply(lambda uf: uf.strip()) + .replace({i["nome"]: i["sigla"] for i in bd_dir.to_dict("records")}) # type: ignore + ) + + df_localizacao = df_localizacao.rename(columns={"uf": "sigla_uf"}, errors="raise") + + df_localizacao["rede"] = df_localizacao["localizacao"].apply(lambda v: v.split("_")[-1]) + + df_localizacao["localizacao"] = df_localizacao["localizacao"].apply( + lambda v: v.split("_")[0] + ) + df_localizacao["quantidade_docente"] = df_localizacao["quantidade_docente"].astype(int) + + df_localizacao = df_localizacao[ + [ + "sigla_uf", + "id_municipio", + "tipo_classe", + "rede", + "localizacao", + "quantidade_docente", + ] + ] + + print("Particionando dados") + for sigla_uf, df in df_localizacao.groupby("sigla_uf"): + path = os.path.join(OUTPUT, f"{table}", f"ano={ano}", f"sigla_uf={sigla_uf}") + if not os.path.exists(path): + os.makedirs(path, exist_ok=True) + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="w" + ) + else: + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="a", header=False + ) +if __name__ == "__main__": + lista = [ + "educacao_basica", + "educacao_infantil", + "ensino_infantil_creche", + "educacao_infantil_pre_escola", + "ensino_fundamental", + "ensino_fundamental_anos_iniciais", + "ensino_fundamental_anos_finais", + "ensino_medio", + "educacao_profissional", + "EJA", + "educacao_especial_classes_comuns", + "educacao_especial_classes_exclusivas" + ] + + for x in lista: + read_sheet( + table=localizacao[x]["table"], + ano=2007, + chave=localizacao[x]["chave"], + valor=localizacao[x]["valor"], + dicionario=localizacao[x]["dicionario"], + skiprows=localizacao[x]["skiprows"], + ) diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_regime_contratacao.py b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_regime_contratacao.py new file mode 100644 index 00000000..3e8e50a4 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docente_regime_contratacao.py @@ -0,0 +1,586 @@ +import os +import zipfile +import pandas as pd +import basedosdados as bd +import numpy as np + + +INPUT = os.path.join(os.getcwd(), "input") +OUTPUT = os.path.join(os.getcwd(), "output") + +# os.makedirs(INPUT, exist_ok=True) +# os.makedirs(OUTPUT, exist_ok=True) + +##### +# Para anos anteriores a 2011 +##### + +# RENAMES_CONTRATO = { +# "Educacao Basica": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Educacao Infantil - Creche": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Educacao Infantil - Pré-Escola": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Ensino Fundamental": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Ensino Fundamental - Anos Iniciais": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Ensino Fundamental - Anos Finais": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Ensino Médio": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Educacao Profissional": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "EJA": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Educacao Especial - Classes Comuns": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# "Educacao Especial - Classes Exclusivas": { +# "Unnamed: 1": "uf", +# "Unnamed: 3": "id_municipio", +# "Federal": "Concursado_Federal", +# "Estadual": "Concursado_Estadual", +# "Municipal": "Concursado_Municipal", +# "Federal.1": "Contrato Temporário_Federal", +# "Estadual.1": "Contrato Temporário_Estadual", +# "Municipal.1": "Contrato Temporário_Municipal", +# "Federal.2": "Contrato Terceirizado_Federal", +# "Estadual.2": "Contrato Terceirizado_Estadual", +# "Municipal.2": "Contrato Terceirizado_Municipal", +# "Federal.3": "Contrato CLT_Federal", +# "Estadual.3": "Contrato CLT_Estadual", +# "Municipal.3": "Contrato CLT_Municipal", +# }, +# } + +RENAMES_CONTRATO = { # Para anos anteriores a 2011 + "Educacao Basica": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Educacao Infantil - Creche": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Educacao Infantil - Pré-Escola": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Ensino Fundamental": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Ensino Fundamental - Anos Iniciais": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Ensino Fundamental - Anos Finais": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Ensino Médio": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Educacao Profissional": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "EJA": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Educacao Especial - Classes Comuns": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, + "Educacao Especial - Classes Exclusivas": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Federal": "Concursado_Federal", + "Estadual": "Concursado_Estadual", + "Municipal": "Concursado_Municipal", + "Federal.1": "Contrato Temporário_Federal", + "Estadual.1": "Contrato Temporário_Estadual", + "Municipal.1": "Contrato Temporário_Municipal", + "Federal.2": "Contrato Terceirizado_Federal", + "Estadual.2": "Contrato Terceirizado_Estadual", + "Municipal.2": "Contrato Terceirizado_Municipal", + + }, +} + + +regime_contrato = { + "educacao_basica": { + "dicionario": RENAMES_CONTRATO["Educacao Basica"], + "chave": "2.5", + "valor": "Educacao Basica", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "ensino_infantil_creche": { + "dicionario": RENAMES_CONTRATO["Educacao Infantil - Creche"], + "chave": "2.11", + "valor": "Educacao Infantil - Creche", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "educacao_infantil_pre_escola": { + "dicionario": RENAMES_CONTRATO["Educacao Infantil - Pré-Escola"], + "chave": "2.15", + "valor": "Educacao Infantil - Pré-Escola", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "ensino_fundamental": { + "dicionario": RENAMES_CONTRATO["Ensino Fundamental"], + "chave": "2.20", + "valor": "Ensino Fundamental", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "ensino_fundamental_anos_iniciais": { + "dicionario": RENAMES_CONTRATO["Ensino Fundamental - Anos Iniciais"], + "chave": "2.24", + "valor": "Ensino Fundamental - Anos Iniciais", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "ensino_fundamental_anos_finais": { + "dicionario": RENAMES_CONTRATO["Ensino Fundamental - Anos Finais"], + "chave": "2.28", + "valor": "Ensino Fundamental - Anos Finais", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "ensino_medio": { + "dicionario": RENAMES_CONTRATO["Ensino Médio"], + "chave": "2.32", + "valor": "Ensino Médio", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "educacao_profissional": { + "dicionario": RENAMES_CONTRATO["Educacao Profissional"], + "chave": "2.37", + "valor": "Educacao Profissional", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "EJA": { + "dicionario": RENAMES_CONTRATO["EJA"], + "chave": "2.42", + "valor": "EJA", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + "table": "docente_regime_contrato", + }, + "educacao_especial_classes_comuns": { + "dicionario": RENAMES_CONTRATO["Educacao Especial - Classes Comuns"], + # "chave": "2.49", + "chave": "2.48", # Para o ano de 2010 + "valor": "Educacao Especial - Classes Comuns", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + #"skiprows": 10, # Para o ano de 2011 + "table": "docente_regime_contrato", + }, + "educacao_especial_classes_exclusivas": { + "dicionario": RENAMES_CONTRATO["Educacao Especial - Classes Exclusivas"], + # "chave": "2.55", + "chave": "2.53", # Para o ano de 2021 + "valor": "Educacao Especial - Classes Exclusivas", + # "skiprows": 8, + "skiprows": 9, # Para o ano de 2021 + #"skiprows": 10, # Para o ano de 2011 + "table": "docente_regime_contrato", + }, +} + + +def read_sheet( + table: str, ano: int, chave: str, valor: str, dicionario: dict, skiprows +) -> pd.DataFrame: + print("Tratando dados de", valor, ano) + path_excel = os.path.join( + INPUT, + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}", + f"Sinopse_Estatistica_da_Educaç╞o_Basica_{ano}.xlsx", + ) + + df = pd.read_excel( + path_excel, + skiprows=skiprows, + sheet_name=chave, + ) + + sheets_etapa_ensino_serie = {chave: valor} + + dfs_regime_contrato = { + name: pd.read_excel( + path_excel, skiprows=skiprows, sheet_name=sheet_name + ) + for sheet_name, name in sheets_etapa_ensino_serie.items() + } + + dataframes = {} + + for table_name, columns in dfs_regime_contrato.items(): + df = pd.DataFrame(columns) # Create DataFrame for each table + dataframes[table_name] = df # Store the DataFrame in a dictionary + + print(df.columns) + + def drop_unused_columns(df: pd.DataFrame) -> pd.DataFrame: + cols_drop = [ + col + for col in df.columns + if col.startswith("Unnamed") or col.startswith("Total") + ] + + return df.drop(columns=cols_drop) + + dfs_regime_contrato = { + name: drop_unused_columns(df.rename(columns=dicionario, errors="raise")) + for name, df in dfs_regime_contrato.items() + } + + df_regime_contrato = pd.concat( + [ + df.pipe( + lambda d: d.loc[ + (d["id_municipio"].notna()) & (d["id_municipio"] != " "), + ] + ) + .pipe( + lambda d: pd.melt( + d, + id_vars=["id_municipio", "uf"], + value_vars=d.columns.difference( + ["id_municipio", "uf"] + ).tolist(), # Convert to list + var_name="regime_contrato", + value_name="quantidade_docente", + ) + ) + .assign(tipo_classe=tipo_classe) + for tipo_classe, df in dfs_regime_contrato.items() + ] + ) + + bd_dir = bd.read_sql( + "SELECT nome, sigla FROM `basedosdados.br_bd_diretorios_brasil.uf`", + billing_project_id="basedosdados", + reauth=False, + ) + + df_regime_contrato["uf"] = df_regime_contrato["uf"].apply(lambda uf: uf.strip()).replace({i["nome"]: i["sigla"] for i in bd_dir.to_dict("records")}) # type: ignore + + df_regime_contrato = df_regime_contrato.rename( + columns={"uf": "sigla_uf"}, errors="raise" + ) + + df_regime_contrato["rede"] = df_regime_contrato["regime_contrato"].apply( + lambda v: v.split("_")[-1] + ) + + df_regime_contrato["regime_contrato"] = df_regime_contrato["regime_contrato"].apply( + lambda v: v.split("_")[0] + ) + + df_regime_contrato["quantidade_docente"] = df_regime_contrato[ + "quantidade_docente" + ].astype(int) + + df_regime_contrato["quantidade_docente"] = df_regime_contrato[ + "quantidade_docente" + ].astype(int) + + print("Particionando dados") + for sigla_uf, df in df_regime_contrato.groupby("sigla_uf"): + path = os.path.join(OUTPUT, f"{table}", f"ano={ano}", f"sigla_uf={sigla_uf}") + if not os.path.exists(path): + os.makedirs(path, exist_ok=True) + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="w" + ) + else: + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="a", header=False + ) + +if __name__ == "__main__": + lista = [ + "educacao_basica", + "ensino_infantil_creche", + "educacao_infantil_pre_escola", + "ensino_fundamental", + "ensino_fundamental_anos_iniciais", + "ensino_fundamental_anos_finais", + "ensino_medio", + "educacao_profissional", + "EJA", + "educacao_especial_classes_comuns", + "educacao_especial_classes_exclusivas", + ] + + for x in lista: + # for ano in range(2012, 2019): + read_sheet( + table=regime_contrato[x]["table"], + ano=2010, + chave=regime_contrato[x]["chave"], + valor=regime_contrato[x]["valor"], + dicionario=regime_contrato[x]["dicionario"], + skiprows=regime_contrato[x]["skiprows"], + ) diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docentes_etapa_ensino.py b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docentes_etapa_ensino.py new file mode 100644 index 00000000..0cfbb7e3 --- /dev/null +++ b/models/br_inep_sinopse_estatistica_educacao_basica/code_docente/docentes_etapa_ensino.py @@ -0,0 +1,489 @@ +import os +import zipfile +import pandas as pd +import basedosdados as bd +import numpy as np + +INPUT = os.path.join(os.getcwd(), "input") +OUTPUT = os.path.join(os.getcwd(), "output") + +# os.makedirs(INPUT, exist_ok=True) +# os.makedirs(OUTPUT, exist_ok=True) + +RENAMES_ETAPA_ENSINO_SERIE = { + "Educacao Basica": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Creche": "Educação Infantil - Creche", + "Pré-Escola11": "Educação Infantil - Pré Escola", + "Total12": "", + "Anos Iniciais13": "Ensino Fundamental - Anos Iniciais", + "Anos Finais14": "Ensino Fundamental - Anos Finais", + "Ensino Médio Propedêutico": "Ensino Médio - Propedêutico", + "Ensino Médio Normal/Magistério": "Ensino Médio - Normal/Magistério", + "Curso Técnico Integrado (Ensino Médio Integrado)": "Ensino Médio - Curso Técnico Integrado", + "Associada ao Ensino Médio18": "Educação Profissional Técnica de Nível Médio - Associada ao Ensino Médio", + "Curso Técnico Concomitante": "Educação Profissional Técnica de Nível Médio - Curso Técnico Concomitante", + "Curso Técnico Subsequente": "Educação Profissional Técnica de Nível Médio - Curso Técnico Subsequente", + "Curso Técnico Misto (Concomitante e Subsequente)": "Educação Profissional Técnica de Nível Médio - Curso Técnico Misto (Concomitante e Subsequente)", + "Curso FIC Concomitante": "Educação Profissional - Curso FIC Concomitante", + "Curso FIC Integrado na Modalidade EJA20": "Educação Profissional - Curso FIC Integrado na Modalidade EJA", + "Ensino Fundamental22": "EJA - Ensino Fundamental", + "Ensino Médio23": "EJA - Ensino Médio", + "Classes Comuns25": "Educação Especial - Classes Comuns", + "Classes Exclusivas26": "Educação Especial - Classes Exclusivas", + ##### + # Para valores anteriores a 2016 e 2013 + #### + # "Classes Comuns": "Educação Especial - Classes Comuns", + # "Classes Exclusivas": "Educação Especial - Classes Exclusivas", + }, + "Educacao Infantil": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Creche - Pública", + "Federal": "Creche - Federal", + "Estadual": "Creche - Estadual", + "Municipal": "Creche - Municipal", + "Privada": "Creche - Privada", + "Pública.1": "Pré-Escola - Pública", + "Federal.1": "Pré-Escola - Federal", + "Estadual.1": "Pré-Escola - Estadual", + "Municipal.1": "Pré-Escola - Municipal", + "Privada.1": "Pré-Escola - Privada", + }, + "Ensino Fundamental": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Anos Iniciais - Pública", + "Federal": "Anos Iniciais - Federal", + "Estadual": "Anos Iniciais - Estadual", + "Municipal": "Anos Iniciais - Municipal", + "Privada": "Anos Iniciais - Privada", + "Pública.1": "Anos Finais - Pública", + "Federal.1": "Anos Finais - Federal", + "Estadual.1": "Anos Finais - Estadual", + "Municipal.1": "Anos Finais - Municipal", + "Privada.1": "Anos Finais - Privada", + "Pública.2": "Turmas Multi - Pública", + "Federal.2": "Turmas Multi - Federal", + "Estadual.2": "Turmas Multi - Estadual", + "Municipal.2": "Turmas Multi - Municipal", + "Privada.2": "Turmas Multi - Privada", + }, + "Educacao Profissional": #{ + + # "Unnamed: 1": "uf", + # "Unnamed: 3": "id_municipio", + # "Pública": "Curso Técnico Integrado (Ensino Médio Integrado) - Pública", + # "Federal": "Curso Técnico Integrado (Ensino Médio Integrado) - Federal", + # "Estadual": "Curso Técnico Integrado (Ensino Médio Integrado) - Estadual", + # "Municipal": "Curso Técnico Integrado (Ensino Médio Integrado) - Municipal", + # "Privada": "Curso Técnico Integrado (Ensino Médio Integrado) - Privada", + # "Pública.1": "Ensino Médio Normal/Magistério - Pública", + # "Federal.1": "Ensino Médio Normal/Magistério - Federal", + # "Estadual.1": "Ensino Médio Normal/Magistério - Estadual", + # "Municipal.1": "Ensino Médio Normal/Magistério - Municipal", + # "Privada.1": "Ensino Médio Normal/Magistério - Privada", + # "Pública.2": "Curso Técnico Concomitante - Pública", + # "Federal.2": "Curso Técnico Concomitante - Federal", + # "Estadual.2": "Curso Técnico Concomitante - Estadual", + # "Municipal.2": "Curso Técnico Concomitante - Municipal", + # "Privada.2": "Curso Técnico Concomitante - Privada", + # "Pública.3": "Curso Técnico Subsequente - Pública", + # "Federal.3": "Curso Técnico Subsequente - Federal", + # "Estadual.3": "Curso Técnico Subsequente - Estadual", + # "Municipal.3": "Curso Técnico Subsequente - Municipal", + # "Privada.3": "Curso Técnico Subsequente - Privada", + # "Pública.4": "Curso Técnico Misto (Concomitante e Subsequente) - Pública", + # "Federal.4": "Curso Técnico Misto (Concomitante e Subsequente) - Federal", + # "Estadual.4": "Curso Técnico Misto (Concomitante e Subsequente) - Estadual", + # "Municipal.4": "Curso Técnico Misto (Concomitante e Subsequente) - Municipal", + # "Privada.4": "Curso Técnico Misto (Concomitante e Subsequente) - Privada", + # "Pública.5": "Curso Técnico Integrado a EJA - Pública", + # "Federal.5": "Curso Técnico Integrado a EJA - Federal", + # "Estadual.5": "Curso Técnico Integrado a EJA - Estadual", + # "Municipal.5": "Curso Técnico Integrado a EJA - Municipal", + # "Privada.5": "Curso Técnico Integrado a EJA - Privada", + # "Pública.6": "EJA Ensino Fundamental Projovem Urbano - Pública", + # "Federal.6": "EJA Ensino Fundamental Projovem Urbano - Federal", + # "Estadual.6": "EJA Ensino Fundamental Projovem Urbano - Estadual", + # "Municipal.6": "EJA Ensino Fundamental Projovem Urbano - Municipal", + # "Privada.6": "EJA Ensino Fundamental Projovem Urbano - Privada", + # "Pública.7": "Curso FIC Concomitante - Pública", + # "Federal.7": "Curso FIC Concomitante - Federal", + # "Estadual.7": "Curso FIC Concomitante - Estadual", + # "Municipal.7": "Curso FIC Concomitante - Municipal", + # "Privada.7": "Curso FIC Concomitante - Privada", + # "Pública.8": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Pública", + # "Federal.8": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Federal", + # "Estadual.8": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Estadual", + # "Municipal.8": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Municipal", + # "Privada.8": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Privada", + # "Pública.9": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Pública", + # "Federal.9": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Federal", + # "Estadual.9": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Estadual", + # "Municipal.9": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Municipal", + # "Privada.9": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Privada", + #}, + ##### + # Valores antes depois de 2018 + #### + { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Curso Técnico Integrado (Ensino Médio Integrado) - Pública", + "Federal": "Curso Técnico Integrado (Ensino Médio Integrado) - Federal", + "Estadual": "Curso Técnico Integrado (Ensino Médio Integrado) - Estadual", + "Municipal": "Curso Técnico Integrado (Ensino Médio Integrado) - Municipal", + "Privada": "Curso Técnico Integrado (Ensino Médio Integrado) - Privada", + "Pública.1": "Ensino Médio Normal/Magistério - Pública", + "Federal.1": "Ensino Médio Normal/Magistério - Federal", + "Estadual.1": "Ensino Médio Normal/Magistério - Estadual", + "Municipal.1": "Ensino Médio Normal/Magistério - Municipal", + "Privada.1": "Ensino Médio Normal/Magistério - Privada", + "Pública.2": "Curso Técnico Concomitante - Pública", + "Federal.2": "Curso Técnico Concomitante - Federal", + "Estadual.2": "Curso Técnico Concomitante - Estadual", + "Municipal.2": "Curso Técnico Concomitante - Municipal", + "Privada.2": "Curso Técnico Concomitante - Privada", + "Pública.3": "Curso Técnico Subsequente - Pública", + "Federal.3": "Curso Técnico Subsequente - Federal", + "Estadual.3": "Curso Técnico Subsequente - Estadual", + "Municipal.3": "Curso Técnico Subsequente - Municipal", + "Privada.3": "Curso Técnico Subsequente - Privada", + "Pública.4": "Curso Técnico Misto (Concomitante e Subsequente) - Pública", + "Federal.4": "Curso Técnico Misto (Concomitante e Subsequente) - Federal", + "Estadual.4": "Curso Técnico Misto (Concomitante e Subsequente) - Estadual", + "Municipal.4": "Curso Técnico Misto (Concomitante e Subsequente) - Municipal", + "Privada.4": "Curso Técnico Misto (Concomitante e Subsequente) - Privada", + "Pública.5": "Curso Técnico Integrado a EJA - Pública", + "Federal.5": "Curso Técnico Integrado a EJA - Federal", + "Estadual.5": "Curso Técnico Integrado a EJA - Estadual", + "Municipal.5": "Curso Técnico Integrado a EJA - Municipal", + "Privada.5": "Curso Técnico Integrado a EJA - Privada", + "Pública.6": "Curso FIC Concomitante - Pública", + "Federal.6": "Curso FIC Concomitante - Federal", + "Estadual.6": "Curso FIC Concomitante - Estadual", + "Municipal.6": "Curso FIC Concomitante - Municipal", + "Privada.6": "Curso FIC Concomitante - Privada", + "Pública.7": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Pública", + "Federal.7": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Federal", + "Estadual.7": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Estadual", + "Municipal.7": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Municipal", + "Privada.7": "Curso FIC Integrado na Modalidade EJA de Nível Fundamental - Privada", + "Pública.8": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Pública", + "Federal.8": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Federal", + "Estadual.8": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Estadual", + "Municipal.8": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Municipal", + "Privada.8": "Curso FIC Integrado na Modalidade EJA de Nível Médio - Privada"}, + "EJA": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Pública": "Ensino Fundamental - Pública", + "Federal": "Ensino Fundamental - Federal", + "Estadual": "Ensino Fundamental - Estadual", + "Municipal": "Ensino Fundamental - Municipal", + "Privada": "Ensino Fundamental - Privada", + "Pública.1": "Ensino Médio - Pública", + "Federal.1": "Ensino Médio - Federal", + "Estadual.1": "Ensino Médio - Estadual", + "Municipal.1": "Ensino Médio - Municipal", + "Privada.1": "Ensino Médio - Privada", + }, + "Educacao Especial": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Creche": "Educação Infantil - Creche", + "Pré-Escola11": "Educação Infantil - Pré Escola", + "Anos Iniciais13": "Ensino Fundamental - Anos Iniciais", + "Anos Finais14": "Ensino Fundamental - Anos Finais", + "Ensino Médio Propedêutico": "Ensino Médio - Propedêutico", + "Ensino Médio Normal/Magistério": "Ensino Médio - Normal/Magistério", + "Curso Técnico Integrado (Ensino Médio Integrado)": "Ensino Médio - Curso Técnico Integrado", + "Associada ao Ensino Médio18": "Educação Profissional Técnica de Nível Médio - Associada ao Ensino Médio", + "Curso Técnico Concomitante": "Educação Profissional Técnica de Nível Médio - Curso Técnico Concomitante", + "Curso Técnico Subsequente": "Educação Profissional Técnica de Nível Médio - Curso Técnico Subsequente", + "Curso Técnico Misto (Concomitante e Subsequente)": "Educação Profissional Técnica de Nível Médio - Curso Técnico Misto (Concomitante e Subsequente)", + "Curso FIC Concomitante": "Educação Profissional - Curso FIC Concomitante", + "Curso FIC Integrado na Modalidade EJA20": "Educação Profissional - Curso FIC Integrado na Modalidade EJA", + "Ensino Fundamental22": "EJA - Ensino Fundamental", + "Ensino Médio23": "EJA - Ensino Médio", + "Classes Comuns25": "Educação Especial - Classes Comuns", + "Classes Exclusivas26": "Educação Especial - Classes Exclusivas", + ##### + # Para valores anteriores a 2016 e 2013 + #### + # "Classes Comuns": "Educação Especial - Classes Comuns", + # "Classes Exclusivas": "Educação Especial - Classes Exclusivas", + }, + "Educacao Especial - Classes Comuns": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Creche": "Educação Infantil - Creche", + "Pré-Escola11": "Educação Infantil - Pré Escola", + "Anos Iniciais13": "Ensino Fundamental - Anos Iniciais", + "Anos Finais14": "Ensino Fundamental - Anos Finais", + "Ensino Médio Propedêutico": "Ensino Médio - Propedêutico", + "Ensino Médio Normal/ Magistério": "Ensino Médio - Normal/Magistério", + "Ensino Médio Curso Técnico Integrado (Ensino Médio Integrado)": "Ensino Médio - Curso Técnico Integrado", + "Associada ao Ensino Médio18": "Educação Profissional Técnica de Nível Médio - Associada ao Ensino Médio", + "Curso Técnico Concomitante": "Educação Profissional Técnica de Nível Médio - Curso Técnico Concomitante", + "Curso Técnico Subsequente": "Educação Profissional Técnica de Nível Médio - Curso Técnico Subsequente", + "Curso Técnico Misto (Concomitante e Subsequente)": "Educação Profissional Técnica de Nível Médio - Curso Técnico Misto (Concomitante e Subsequente)", + "Curso FIC Concomitante": "Educação Profissional - Curso FIC Concomitante", + "Curso FIC Integrado na Modalidade EJA20": "Educação Profissional - Curso FIC Integrado na Modalidade EJA", + "Ensino Fundamental22": "EJA - Ensino Fundamental", + "Ensino Médio23": "EJA - Ensino Médio", + }, + "Educacao Especial - Classes Exclusivas": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Creche": "Educação Infantil - Creche", + "Pré-Escola11": "Educação Infantil - Pré Escola", + "Anos Iniciais13": "Ensino Fundamental - Anos Iniciais", + "Anos Finais14": "Ensino Fundamental - Anos Finais", + "Ensino Médio Propedêutico": "Ensino Médio - Propedêutico", + "Ensino Médio Normal/ Magistério": "Ensino Médio - Normal/Magistério", + "Curso Técnico Integrado (Ensino Médio Integrado)": "Ensino Médio - Curso Técnico Integrado", + "Associada ao Ensino Médio18": "Educação Profissional Técnica de Nível Médio - Associada ao Ensino Médio", + "Curso Técnico Concomitante": "Educação Profissional Técnica de Nível Médio - Curso Técnico Concomitante", + "Curso Técnico Subsequente": "Educação Profissional Técnica de Nível Médio - Curso Técnico Subsequente", + "Curso Técnico Misto (Concomitante e Subsequente)": "Educação Profissional Técnica de Nível Médio - Curso Técnico Misto (Concomitante e Subsequente)", + "Curso FIC Concomitante": "Educação Profissional - Curso FIC Concomitante", + "Curso FIC Integrado na Modalidade EJA20": "Educação Profissional - Curso FIC Integrado na Modalidade EJA", + "Ensino Fundamental22": "EJA - Ensino Fundamental", + "Ensino Médio23": "EJA - Ensino Médio", + }, + "Educacao Indigena": { + "Unnamed: 1": "uf", + "Unnamed: 3": "id_municipio", + "Creche": "Educação Infantil - Creche", + "Pré-Escola11": "Educação Infantil - Pré Escola", + "Anos Iniciais13": "Ensino Fundamental - Anos Iniciais", + "Anos Finais14": "Ensino Fundamental - Anos Finais", + "Ensino Médio Propedêutico": "Ensino Médio - Propedêutico", + "Ensino Médio Normal/Magistério": "Ensino Médio - Normal/Magistério", + "Curso Técnico Integrado (Ensino Médio Integrado)": "Ensino Médio - Curso Técnico Integrado", + "Associada ao Ensino Médio18": "Educação Profissional Técnica de Nível Médio - Associada ao Ensino Médio", + "Curso Técnico Concomitante": "Educação Profissional Técnica de Nível Médio - Curso Técnico Concomitante", + "Curso Técnico Subsequente": "Educação Profissional Técnica de Nível Médio - Curso Técnico Subsequente", + "Curso Técnico Misto (Concomitante e Subsequente)": "Educação Profissional Técnica de Nível Médio - Curso Técnico Misto (Concomitante e Subsequente)", + "Curso FIC Concomitante": "Educação Profissional - Curso FIC Concomitante", + "Curso FIC Integrado na Modalidade EJA20": "Educação Profissional - Curso FIC Integrado na Modalidade EJA", + "Ensino Fundamental22": "EJA - Ensino Fundamental", + "Ensino Médio23": "EJA - Ensino Médio", + "Classes Comuns25": "Educação Especial - Classes Comuns", + "Classes Exclusivas26": "Educação Especial - Classes Exclusivas", + }} + + +etapa_ensino = { + "educacao_basica": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Basica"], + "chave": "Educação Básica 2.1", + "valor": "Educacao Basica", + "skiprows": 8, + "table": "docente_etapa_ensino", + }, + "educacao_infantil": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Infantil"], + "chave": "Educação Infantil 2.6", + #"chave": "Educação Infantil 2.5", # Em 2010, a chave é 2.5 + "valor": "Educacao Infantil", + "skiprows": 8, + "table": "docente_etapa_ensino", + }, + "ensino_fundamental": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Ensino Fundamental"], + "chave": "Ensino Fundamental 2.16", + #"chave": "Ensino Fundamental 2.13", # Em 2010, a chave é 2.13 + "valor": "Ensino Fundamental", + "skiprows": 8, + "table": "docente_etapa_ensino", + }, + "educacao_profissional": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Profissional"], + "chave": "Educação Profissional 2.33", + #"chave": "Educação Profissional 2.26", # Em 2010, a chave é 26 + "valor": "Ensino Profissional", + "skiprows": 9, + "table": "docente_etapa_ensino", + }, + "EJA": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["EJA"], + "chave": "EJA 2.38", + #"chave": "EJA 2.30", # Em 2010, a chave é 2.30 + "valor": "EJA", + "skiprows": 8, + "table": "docente_etapa_ensino", + }, + "educacao_especial": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Especial"], + "chave": "Educação Especial 2.43", + #"chave": "Educação Especial 2.34", # Em 2010, a chave é 2.34 + "valor": "Educacao Especial", + "skiprows": 8, + "table": "docente_etapa_ensino", + }, + "educacao_especial_classes_comuns": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Especial - Classes Comuns"], + "chave": "Classes Comuns 2.44", + #"chave": "Classes Comuns 2.35", # Em 2010, a chave é 2.35 + "valor": "Educacao Especial - Classes Comuns", + "skiprows": 8, + "table": "docente_etapa_ensino", + }, + "educacao_especial_classes_exclusivas": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Especial - Classes Exclusivas"], + "chave": "Classes Exclusivas 2.50", + #"chave": "Classes Exclusivas 2.49", # Em 2011, a chave é 2.49 + #"chave" : "Classes Exclusivas 2.39", # Em 2010, a chave é 2.39 + "valor": "Educacao Especial - Classes Exclusivas", + "skiprows": 8, + "table": "docente_etapa_ensino", + }, + "educacao_indigena": { + "dicionario": RENAMES_ETAPA_ENSINO_SERIE["Educacao Indigena"], + "chave": "Educação Indígena 2.56", + "valor": "Educacao Indigena", + "skiprows": 9, + "table": "docente_etapa_ensino", + }, +} + + +def read_sheet( + table: str, ano: int, chave: str, valor: str, dicionario: dict, skiprows: int = 9 +) -> pd.DataFrame: + print("Tratando dados de", valor) + df = pd.read_excel( + os.path.join( + INPUT, + f"Sinopse_Estatistica_da_Educacao_Basica_{ano}", + f"Sinopse_Estatistica_da_Educacao_Basica_{ano}.xlsx", + ), + skiprows=skiprows, + sheet_name=chave, + ) + + sheets_etapa_ensino_serie = { + chave: valor + } + + dfs_etapa_ensino_serie = { + name: pd.read_excel( + os.path.join( + INPUT, + f"Sinopse_Estatistica_da_Educacao_Basica_{ano}", + f"Sinopse_Estatistica_da_Educacao_Basica_{ano}.xlsx", + ), + skiprows=skiprows, + sheet_name=sheet_name, + ) + for sheet_name, name in sheets_etapa_ensino_serie.items() + } + + dataframes = {} + for table_name, columns in dfs_etapa_ensino_serie.items(): + df = pd.DataFrame(columns) + dataframes[table_name] = df + + print(df.columns) + + def drop_unused_columns(df: pd.DataFrame) -> pd.DataFrame: + cols_drop = [ + col + for col in df.columns + if col.startswith("Unnamed") or col.startswith("Total") + ] + + return df.drop(columns=cols_drop) + + dfs_etapa_ensino_serie = { + name: drop_unused_columns(df.rename(columns=dicionario, errors="raise")) + for name, df in dfs_etapa_ensino_serie.items() + } + + df_etapa_ensino = pd.concat( + [ + df.pipe( + lambda d: d.loc[ + (d["id_municipio"].notna()) & (d["id_municipio"] != " "), + ] + ) + .pipe( + lambda d: pd.melt( + d, + id_vars=["id_municipio", "uf"], + value_vars=d.columns.difference( + ["id_municipio", "uf"] + ).tolist(), # Convert to list + var_name="etapa_ensino", + value_name="quantidade_docentes", + ) + ) + .assign(tipo_classe=tipo_classe) + for tipo_classe, df in dfs_etapa_ensino_serie.items() + ] + ) + + df_etapa_ensino["etapa_ensino"] = ( + df_etapa_ensino["etapa_ensino"].str.strip().replace("", np.nan).dropna() + ) + + bd_dir = bd.read_sql( + "SELECT nome, sigla FROM `basedosdados.br_bd_diretorios_brasil.uf`", + billing_project_id="basedosdados", + reauth=False, + ) + + df_etapa_ensino["etapa_ensino"] = ( + df_etapa_ensino["etapa_ensino"].str.strip().replace("", np.nan) + ) + + df_etapa_ensino['quantidade_docentes'] = df_etapa_ensino['quantidade_docentes'].astype(int) + + df_etapa_ensino = df_etapa_ensino[pd.notna(df_etapa_ensino["etapa_ensino"])] + df_etapa_ensino["uf"] = ( + df_etapa_ensino["uf"] + .apply(lambda uf: uf.strip()) + .replace({i["nome"]: i["sigla"] for i in bd_dir.to_dict("records")}) # type: ignore + ) + df_etapa_ensino = df_etapa_ensino.rename(columns={"uf": "sigla_uf"}, errors="raise") + for sigla_uf, df in df_etapa_ensino.groupby("sigla_uf"): + path = os.path.join(OUTPUT, f"{table}", f"ano={ano}", f"sigla_uf={sigla_uf}") + if not os.path.exists(path): + os.makedirs(path, exist_ok=True) + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="w" + ) + else: + df.drop(columns=["sigla_uf"]).to_csv( + os.path.join(path, "data.csv"), index=False, mode="a", header=False + ) + + return df_etapa_ensino + +if __name__ == "__main__": + lista = [ + "educacao_basica", + "educacao_infantil", + "ensino_fundamental", + "educacao_profissional", + "EJA", + "educacao_especial", + "educacao_especial_classes_comuns", + "educacao_especial_classes_exclusivas", + #"educacao_indigena", + ] + + for x in lista: + read_sheet( + table=etapa_ensino[x]["table"], + ano=2021, + chave=etapa_ensino[x]["chave"], + valor=etapa_ensino[x]["valor"], + dicionario=etapa_ensino[x]["dicionario"], + skiprows=etapa_ensino[x]["skiprows"], + ) diff --git a/models/br_inep_sinopse_estatistica_educacao_basica/schema.yml b/models/br_inep_sinopse_estatistica_educacao_basica/schema.yml index 9678cac1..93301eac 100644 --- a/models/br_inep_sinopse_estatistica_educacao_basica/schema.yml +++ b/models/br_inep_sinopse_estatistica_educacao_basica/schema.yml @@ -165,3 +165,240 @@ models: description: Raça/Cor - name: quantidade_matricula description: Número de matrículas + - name: br_inep_sinopse_estatistica_educacao_basica__docente_escolaridade + description: A base conta com o total de docentes por município, escolaridade + e rede + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ano + - id_municipio + - escolaridade + - tipo_classe + - 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: id_municipio + description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: tipo_classe + description: 'Tipo de classe da Educação Especial (e.g.: Classes Comuns ou + Classes Exclusivas/Especiais)' + - name: escolaridade + description: Escolaridade + - name: quantidade_docente + description: Número de Docentes + - name: br_inep_sinopse_estatistica_educacao_basica__docente_regime_contrato + description: A base conta com o total de docentes por município, regime de contrato + e rede + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ano + - id_municipio + - regime_contrato + - rede + - tipo_classe + - 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: id_municipio + description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: tipo_classe + description: 'Tipo de classe da Educação Especial (e.g.: Classes Comuns ou + Classes Exclusivas/Especiais)' + - name: rede + description: Rede Escolar (e.g. Federal, Estadual, Municipal e Privada) + - name: regime_contrato + description: Regime de contratação + - name: quantidade_docente + description: Número de Docentes + - name: br_inep_sinopse_estatistica_educacao_basica__docente_faixa_etaria_sexo + description: A base conta com o total de docentes por município, faixa etária + e sexo + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ano + - id_municipio + - faixa_etaria + - sexo + - tipo_classe + - 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: id_municipio + description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: tipo_classe + description: 'Tipo de classe da Educação Especial (e.g.: Classes Comuns ou + Classes Exclusivas/Especiais)' + - name: faixa_etaria + description: Faixa Etária dos docentes + - name: sexo + description: Sexo dos docentes + - name: quantidade_docente + description: Número de Docentes + - name: br_inep_sinopse_estatistica_educacao_basica__docente_deficiencia + description: A base conta com o total de docentes por município, tipo de deficiência + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ano + - id_municipio + - deficiencia + - tipo_classe + - 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: id_municipio + description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: tipo_classe + description: 'Tipo de classe da Educação Especial (e.g.: Classes Comuns ou + Classes Exclusivas/Especiais)' + - name: deficiencia + description: Tipo de deficiência, transtorno global do desenvolvimento ou + altas habilidades/superdotação + - name: quantidade_docente + description: Número de docentes + - name: br_inep_sinopse_estatistica_educacao_basica__docente_localizacao + description: A base conta com o total de docentes por município, rede e localização + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ano + - id_municipio + - rede + - localizacao + - tipo_classe + - 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: id_municipio + description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: tipo_classe + description: 'Tipo de classe da Educação Especial (e.g.: Classes Comuns ou + Classes Exclusivas/Especiais)' + - name: rede + description: Rede Escolar (e.g. Federal, Estadual, Municipal e Privada) + - name: localizacao + description: Localização (e.g. Zona Urbana, Zona Rural) + - name: quantidade_docente + description: Número de docentes + - name: br_inep_sinopse_estatistica_educacao_basica__docente_etapa_ensino + description: A base conta com o total de docentes por município, faixa etária + e sexo + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - ano + - id_municipio + - etapa_ensino + - tipo_classe + - 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: id_municipio + description: ID Município - IBGE 7 Dígitos + tests: + - relationships: + to: ref('br_bd_diretorios_brasil__municipio') + field: id_municipio + - name: tipo_classe + description: 'Tipo de classe da Educação Especial (e.g.: Classes Comuns ou + Classes Exclusivas/Especiais)' + - name: etapa_ensino + description: Etapa e/ou Sub-etapas de ensino (e.g. Creche, Pré-escola, Anos + Iniciais, Anos Finais, Ensino Fundamental - EJA, ...) + - name: quantidade_docente + description: Número de Docentes diff --git a/models/br_ms_sim/br_ms_sim__dicionario.sql b/models/br_ms_sim/br_ms_sim__dicionario.sql index cd5d5419..41d561d9 100644 --- a/models/br_ms_sim/br_ms_sim__dicionario.sql +++ b/models/br_ms_sim/br_ms_sim__dicionario.sql @@ -1,5 +1,5 @@ {{ config(alias="dicionario", schema="br_ms_sim") }} --- Dicionário de dados do SIM + select safe_cast(id_tabela as string) id_tabela, safe_cast(coluna as string) nome_coluna,