From 9989b006286cca4fc1e77123aa71dcabbc34caee Mon Sep 17 00:00:00 2001 From: Luiz Eduardo Date: Fri, 26 Jul 2024 01:30:53 -0300 Subject: [PATCH 1/2] Atualizar instituicao_ensino_superior --- ...os_brasil__instituicao_ensino_superior.sql | 2 +- .../[update]instituicao_ensino_superior.ipynb | 134 ++++++++++++++++++ models/br_inep_censo_escolar/schema.yml | 3 +- 3 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 models/br_bd_diretorios_brasil/code/[update]instituicao_ensino_superior.ipynb diff --git a/models/br_bd_diretorios_brasil/br_bd_diretorios_brasil__instituicao_ensino_superior.sql b/models/br_bd_diretorios_brasil/br_bd_diretorios_brasil__instituicao_ensino_superior.sql index 406274b1..f04a1e2c 100644 --- a/models/br_bd_diretorios_brasil/br_bd_diretorios_brasil__instituicao_ensino_superior.sql +++ b/models/br_bd_diretorios_brasil/br_bd_diretorios_brasil__instituicao_ensino_superior.sql @@ -5,7 +5,7 @@ materialized="table", ) }} - +-- Atualizado com mais 883 id_ies unicos: 07/2024 select safe_cast(id_ies as string) id_ies, safe_cast(nome as string) nome, diff --git a/models/br_bd_diretorios_brasil/code/[update]instituicao_ensino_superior.ipynb b/models/br_bd_diretorios_brasil/code/[update]instituicao_ensino_superior.ipynb new file mode 100644 index 00000000..c75d6ae9 --- /dev/null +++ b/models/br_bd_diretorios_brasil/code/[update]instituicao_ensino_superior.ipynb @@ -0,0 +1,134 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Import And Functions" + ], + "metadata": { + "id": "gAOeYQ6uRoMK" + } + }, + { + "cell_type": "code", + "source": [ + "from IPython.display import clear_output\n", + "!pip install basedosdados==2.0.0b16\n", + "clear_output()\n", + "import pandas as pd\n", + "import concurrent.futures\n", + "import basedosdados as bd\n", + "import os\n", + "\n", + "\n", + "def dicionatio_categoria(ano: int, categoria: str) -> list:\n", + "\n", + " dicionario = {\n", + " \"1\": \"Federal\",\n", + " \"2\": \"Estadual\",\n", + " \"3\": \"Municipal\",\n", + " \"7\": \"Especial\"\n", + " }\n", + "\n", + " status = \"Ativa\" if ano == 2022 else \"Inativa\"\n", + "\n", + " if categoria in (\"4\", \"5\", \"6\", \"8\", \"9\"):\n", + " return [\"Privada\", \"Privada\", status]\n", + " else:\n", + " return [\"Público\", dicionario[categoria], status]\n", + "\n", + "\n", + "def formar_linha(source_df: pd.DataFrame, id: str):\n", + "\n", + " mask = educacao_superior.id_ies == id\n", + "\n", + " row = educacao_superior[mask].sort_values(\n", + " by='ano', ascending=False).iloc[0].to_list()\n", + "\n", + " categoria = row.pop(3)\n", + " row += dicionatio_categoria(ano=row[0], categoria=categoria)\n", + "\n", + " return row\n", + "\n", + "def formar_df(source_df: pd.DataFrame) -> pd.DataFrame:\n", + "\n", + " columns = [\"ano\", \"id_ies\", \"nome\", \"id_municipio\",\n", + " \"sigla_uf\", \"tipo_instituicao\", \"rede\", \"situacao_funcionamento\"]\n", + "\n", + " ids_ies = source_df.id_ies.unique()\n", + "\n", + " with concurrent.futures.ThreadPoolExecutor() as executor:\n", + "\n", + " linhas = [row for row in executor.map(lambda id: formar_linha(source_df, id), ids_ies)]\n", + "\n", + " df = pd.DataFrame(linhas, columns=columns)\n", + "\n", + " return df\n" + ], + "metadata": { + "id": "FnKu0DwdKZDu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "# Gerar Tabela Atualizada" + ], + "metadata": { + "id": "Nfao_e3kRvlb" + } + }, + { + "cell_type": "code", + "source": [ + "billing_project_id = # Definir o seu \"billing_project_id\" do google\n", + "\n", + "query_educacao_superior = '''\n", + "SELECT ano, id_ies, nome, tipo_categoria_administrativa, id_municipio, sigla_uf FROM `basedosdados.br_inep_censo_educacao_superior.ies`\n", + "'''\n", + "query_ensino_superior = '''\n", + "SELECT * FROM `basedosdados.br_bd_diretorios_brasil.instituicao_ensino_superior`\n", + "'''\n", + "# Atual versão do \"br_inep_censo_educacao_superior.ies\" no BD\n", + "educacao_superior = bd.read_sql(query_educacao_superior, billing_project_id=billing_project_id)\n", + "# Atual versão do \"br_bd_diretorios_brasil.instituicao_ensino_superior\" no BD\n", + "instituicao_ensino_superior = bd.read_sql(query_ensino_superior, billing_project_id=billing_project_id)\n", + "\n", + "df = formar_df(educacao_superior)\n", + "\n", + "ensino_superior_to_merge = instituicao_ensino_superior[~instituicao_ensino_superior.id_ies.isin(df.id_ies.values)]\n", + "\n", + "df_to_merge = df.loc[:, instituicao_ensino_superior.columns]\n", + "\n", + "df_atualizada = pd.concat([ensino_superior_to_merge, df_to_merge])\n", + "\n", + "df_atualizada.nome = df_atualizada.nome.str.title()\n", + "\n", + "os.makedirs(\"output\", exist_ok=True)\n", + "\n", + "df_atualizada.to_csv(\"output/instituicao_ensino_superior.csv\", index=False)" + ], + "metadata": { + "id": "lNPxE4d3Ts9Z" + }, + "execution_count": null, + "outputs": [] + } + ] +} diff --git a/models/br_inep_censo_escolar/schema.yml b/models/br_inep_censo_escolar/schema.yml index a611728f..0e692aeb 100644 --- a/models/br_inep_censo_escolar/schema.yml +++ b/models/br_inep_censo_escolar/schema.yml @@ -189,9 +189,10 @@ models: - name: id_ies_ofertante description: Código da Instituição de Ensino Superior (IES) vinculada à escola tests: - - relationships: + - custom_relationships: to: ref('br_bd_diretorios_brasil__instituicao_ensino_superior') field: id_ies + ignore_values: ['21869', '21869', '21869', '18210', '19333', '21869'] # 6 ocorrências unicas de incompatibilidade - name: local_funcionamento_predio_escolar description: O local de funcionamento da escola é um prédio escolar - name: tipo_local_funcionamento_predio_escolar From d66a35ba6b57960fc4a848a8789e5f8ba2370211 Mon Sep 17 00:00:00 2001 From: Luiz Eduardo Date: Fri, 26 Jul 2024 02:44:55 -0300 Subject: [PATCH 2/2] Fix formar_linha --- .../[update]instituicao_ensino_superior.ipynb | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/models/br_bd_diretorios_brasil/code/[update]instituicao_ensino_superior.ipynb b/models/br_bd_diretorios_brasil/code/[update]instituicao_ensino_superior.ipynb index c75d6ae9..b61805c8 100644 --- a/models/br_bd_diretorios_brasil/code/[update]instituicao_ensino_superior.ipynb +++ b/models/br_bd_diretorios_brasil/code/[update]instituicao_ensino_superior.ipynb @@ -1,30 +1,21 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", - "source": [ - "# Import And Functions" - ], "metadata": { "id": "gAOeYQ6uRoMK" - } + }, + "source": [ + "# Import And Functions" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FnKu0DwdKZDu" + }, + "outputs": [], "source": [ "from IPython.display import clear_output\n", "!pip install basedosdados==2.0.0b16\n", @@ -54,9 +45,9 @@ "\n", "def formar_linha(source_df: pd.DataFrame, id: str):\n", "\n", - " mask = educacao_superior.id_ies == id\n", + " mask = source_df.id_ies == id\n", "\n", - " row = educacao_superior[mask].sort_values(\n", + " row = source_df[mask].sort_values(\n", " by='ano', ascending=False).iloc[0].to_list()\n", "\n", " categoria = row.pop(3)\n", @@ -78,24 +69,24 @@ " df = pd.DataFrame(linhas, columns=columns)\n", "\n", " return df\n" - ], - "metadata": { - "id": "FnKu0DwdKZDu" - }, - "execution_count": null, - "outputs": [] + ] }, { "cell_type": "markdown", - "source": [ - "# Gerar Tabela Atualizada" - ], "metadata": { "id": "Nfao_e3kRvlb" - } + }, + "source": [ + "# Gerar Tabela Atualizada" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lNPxE4d3Ts9Z" + }, + "outputs": [], "source": [ "billing_project_id = # Definir o seu \"billing_project_id\" do google\n", "\n", @@ -123,12 +114,21 @@ "os.makedirs(\"output\", exist_ok=True)\n", "\n", "df_atualizada.to_csv(\"output/instituicao_ensino_superior.csv\", index=False)" - ], - "metadata": { - "id": "lNPxE4d3Ts9Z" - }, - "execution_count": null, - "outputs": [] + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] + }, + "nbformat": 4, + "nbformat_minor": 0 }