diff --git a/models/br_me_siconfi/br_me_siconfi__municipio_despesas_funcao.sql b/models/br_me_siconfi/br_me_siconfi__municipio_despesas_funcao.sql index 490d9ea0..e8baa2bd 100644 --- a/models/br_me_siconfi/br_me_siconfi__municipio_despesas_funcao.sql +++ b/models/br_me_siconfi/br_me_siconfi__municipio_despesas_funcao.sql @@ -10,6 +10,7 @@ }, ) }} + select safe_cast(ano as int64) ano, safe_cast(sigla_uf as string) sigla_uf, diff --git a/models/br_me_siconfi/br_me_siconfi__municipio_despesas_orcamentarias.sql b/models/br_me_siconfi/br_me_siconfi__municipio_despesas_orcamentarias.sql index 49efbbba..83ab5699 100644 --- a/models/br_me_siconfi/br_me_siconfi__municipio_despesas_orcamentarias.sql +++ b/models/br_me_siconfi/br_me_siconfi__municipio_despesas_orcamentarias.sql @@ -10,6 +10,7 @@ }, ) }} + select safe_cast(ano as int64) ano, safe_cast(sigla_uf as string) sigla_uf, diff --git a/models/br_me_siconfi/br_me_siconfi__municipio_receitas_orcamentarias.sql b/models/br_me_siconfi/br_me_siconfi__municipio_receitas_orcamentarias.sql index b0726929..64f0f8d8 100644 --- a/models/br_me_siconfi/br_me_siconfi__municipio_receitas_orcamentarias.sql +++ b/models/br_me_siconfi/br_me_siconfi__municipio_receitas_orcamentarias.sql @@ -10,6 +10,7 @@ }, ) }} + select safe_cast(ano as int64) ano, safe_cast(sigla_uf as string) sigla_uf, diff --git a/models/br_me_siconfi/code/build.ipynb b/models/br_me_siconfi/code/build.ipynb index 28a960ad..ddb93468 100644 --- a/models/br_me_siconfi/code/build.ipynb +++ b/models/br_me_siconfi/code/build.ipynb @@ -1 +1 @@ -{"cells":[{"cell_type":"markdown","metadata":{"id":"mZOEor6E0F2M"},"source":["#### **Path + Partições:**"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":42099,"status":"ok","timestamp":1716202155905,"user":{"displayName":"Gabriel Pisa","userId":"07952161339457046076"},"user_tz":180},"id":"zX9H93dp0HMn","outputId":"025eb0e4-6dca-4b16-8bfb-350a3fe0e292"},"outputs":[],"source":["#--------------------#\n","# setup\n","#--------------------#\n","\n","path_dados = \"/Users/rdahis/Downloads/dados_SICONFI\"\n","\n","# requirements: pandas, openpyxl\n","\n","import pandas as pd\n","import os\n","import glob\n","\n","pd.options.mode.chained_assignment = None # default='warn'\n","\n","LAST_YEAR = 2023"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"G6U5Xnx7UC6n"},"outputs":[],"source":["# cria pastas de receita e despesas por ano e UF\n","\n","ufs = [\"AC\", \"AL\", \"AM\", \"AP\", \"BA\", \"CE\", \"DF\", \"ES\", \"GO\",\n"," \"MA\", \"MG\", \"MS\", \"MT\", \"PA\", \"PB\", \"PE\", \"PI\", \"PR\",\n"," \"RJ\", \"RN\", \"RO\", \"RR\", \"SC\", \"SE\", \"RS\", \"SP\", \"TO\"]\n","\n","for i in [*range(1989, LAST_YEAR+1)]:\n"," for uf in ufs:\n","\n"," path = os.path.join(path_dados, 'output/municipio_receitas_orcamentarias/ano={}/sigla_uf={}'.format(i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n","\n"," path = os.path.join(path_dados, 'output/municipio_despesas_orcamentarias/ano={}/sigla_uf={}'.format(i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n","\n","for i in [*range(2004, LAST_YEAR+1)]:\n"," for uf in ufs:\n","\n"," path = os.path.join(path_dados, 'output/municipio_despesas_funcao/ano={}/sigla_uf={}'.format(i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n","\n","for i in [*range(1998, LAST_YEAR+1)]:\n"," for uf in ufs:\n","\n"," path = os.path.join(path_dados, 'output/municipio_balanco_patrimonial/ano={}/sigla_uf={}'.format(i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n","\n","for i in [*range(2013, LAST_YEAR+1)]:\n"," for uf in ufs:\n"," for table in ['uf_receitas_orcamentarias', 'uf_despesas_orcamentarias', 'uf_despesas_funcao']:\n"," path = os.path.join(path_dados, 'output/{}/ano={}/sigla_uf={}'.format(table, i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"jANVKfNhBjJy"},"outputs":[],"source":["ordem = {\n"," 'municipio': ['ano', 'sigla_uf', 'id_municipio', 'estagio', 'portaria', 'conta', 'estagio_bd', 'id_conta_bd', 'conta_bd', 'valor'],\n"," 'uf': ['ano', 'sigla_uf', 'id_uf', 'estagio', 'portaria', 'conta', 'estagio_bd', 'id_conta_bd', 'conta_bd', 'valor']\n","}"]},{"cell_type":"markdown","metadata":{"id":"l1e75DtkW2wK"},"source":["#### **Contas - Joins:**"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":14780,"status":"ok","timestamp":1691129422684,"user":{"displayName":"Ricardo Dahis","userId":"04544939827922453208"},"user_tz":-600},"id":"8VVG51WOXGii","outputId":"a0f8edee-60a3-4838-a513-2dee636384d3"},"outputs":[],"source":["df_comp_municipio = pd.read_excel(os.path.join(path_dados, 'code/compatibilizacao/municipio.xlsx'), dtype='string')\n","\n","df_comp_receitas = pd.read_excel(os.path.join(path_dados, 'code/compatibilizacao/receitas_orcamentarias.xlsx'), dtype='string')\n","df_comp_receitas = df_comp_receitas.fillna('')\n","\n","df_comp_despesas = pd.read_excel(os.path.join(path_dados, 'code/compatibilizacao/despesas_orcamentarias.xlsx'), dtype='string')\n","df_comp_despesas = df_comp_despesas.fillna('')\n","\n","df_comp_despesas_funcao = pd.read_excel(os.path.join(path_dados, 'code/compatibilizacao/despesas_funcao.xlsx'), dtype='string')\n","df_comp_despesas_funcao = df_comp_despesas_funcao.fillna('')\n","\n","df_comp_balanco_patrimonial = pd.read_excel(os.path.join(path_dados, 'code/compatibilizacao/balanco_patrimonial.xlsx'), dtype='string')\n","df_comp_balanco_patrimonial = df_comp_balanco_patrimonial.fillna('')"]},{"cell_type":"markdown","metadata":{"id":"EAkrhhm90wsR"},"source":["#### **Receitas Orçamentarias**:\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1066362,"status":"ok","timestamp":1691128336532,"user":{"displayName":"Ricardo Dahis","userId":"04544939827922453208"},"user_tz":-600},"id":"dOkK_a4b6Mu3","outputId":"b591bd97-60e1-4992-d3f3-da8cec67554c"},"outputs":[],"source":["for ano in [*range(1989, LAST_YEAR+1)]:\n","\n"," #-------------------------------#\n"," # municipio\n"," #-------------------------------#\n","\n"," df = pd.DataFrame(columns=ordem['municipio'])\n","\n"," arquivos = [\n"," arquivo\n"," for arquivo in glob.iglob(os.path.join(path_dados, 'input/municipio/quadro*'))\n"," if int(arquivo[-11:-7]) == ano and\n"," ((ano >= 1989 and ano <= 1996 and int(arquivo[-6:-5]) < 4) or\n"," (ano >= 1997 and ano <= 2012 and int(arquivo[-6:-5]) == 1)\n"," )\n"," ]\n","\n"," if ano >= 2013:\n"," anexo = 'finbra_MUN_ReceitasOrcamentarias(AnexoI-C)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivos.append(os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo)))\n","\n"," for arquivo in arquivos:\n","\n"," if (ano >= 1989 and ano <= 2012):\n","\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\n","\n"," df_dados = pd.merge(df_dados, df_comp_municipio,\n"," how='left',\n"," left_on =['municipio_original', 'sigla_uf'],\n"," right_on=['municipio_original', 'sigla_uf'])\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," if (ano >= 1989 and ano <= 1998): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original']\n"," if (ano == 1999 ): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'Populacao 2000']\n"," if (ano >= 2000 and ano <= 2012): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'CD_UF', 'CD_MUN', 'Populacao']\n","\n"," value_vars = df_dados.drop(id_vars, axis = 1).columns\n"," df_dados = pd.melt(df_dados, id_vars = id_vars, value_vars = value_vars, var_name='conta', value_name='valor')\n","\n"," df_dados.drop(['municipio_auxiliar', 'municipio_original'],\n"," axis=1, inplace=True)\n","\n"," if ano >= 2013:\n","\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_municipio', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," if (ano >= 2013 and ano <= 2017):\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split(' -', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('- ', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n","\n"," if ano >= 2018: # TODO: double check if it should be 2017 here\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x[:14] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x[16:] if (x[0].isnumeric() and '0 -' in x) else x[15:] if x[0].isnumeric() else x).astype('string').str.strip()\n","\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," if (ano <= 2012): chaves = ['ano', 'conta']\n"," if (ano >= 2013): chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_receitas,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_municipio', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," if ano >= 1990 and ano <= 1993: # to fix issue pointed out at https://github.com/basedosdados/mais/issues/1426\n"," df_dados['valor'] = df_dados.apply(lambda row: 1000 * row.valor, axis=1)\n","\n"," if ano <= 1992:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(2.75*(1000**2)), axis=1)\n"," elif ano == 1993:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(2.75*1000), axis=1)\n","\n"," df_dados = df_dados[ordem['municipio']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/municipio_receitas_orcamentarias/ano={}/sigla_uf={}/municipio_receitas_orcamentarias.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n","\n"," #-------------------------------#\n"," # uf\n"," #-------------------------------#\n","\n"," if ano >= 2013:\n"," df = pd.DataFrame(columns=ordem['uf'])\n"," anexo = 'finbra_ESTDF_ReceitasOrcamentarias(AnexoI-C)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivo = os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo))\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_uf', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," if (ano >= 2013 and ano <= 2017): # TODO: double check if it should be 2018 here\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split(' -', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('- ', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n","\n"," else:\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x[:14] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x[16:] if (x[0].isnumeric() and '0 -' in x) else x[15:] if x[0].isnumeric() else x).astype('string').str.strip()\n","\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_receitas,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_uf', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," df_dados = df_dados[ordem['uf']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/uf_receitas_orcamentarias/ano={}/sigla_uf={}/uf_receitas_orcamentarias.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n","\n"]},{"cell_type":"markdown","metadata":{"id":"PjVNoUoWi5rN"},"source":["#### **Despesas Orçamentárias:**"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1263013,"status":"ok","timestamp":1691112748327,"user":{"displayName":"Ricardo Dahis","userId":"04544939827922453208"},"user_tz":-600},"id":"5DALIEKA1Srh","outputId":"f00793be-5820-45b3-db8b-a2049a5db6a9"},"outputs":[],"source":["for ano in [*range(1989, LAST_YEAR+1)]:\n","\n"," #-------------------------------#\n"," # municipio\n"," #-------------------------------#\n","\n"," df = pd.DataFrame(columns=ordem['municipio'])\n","\n"," arquivos = [\n"," arquivo\n"," for arquivo in glob.iglob(os.path.join(path_dados, 'input/municipio/quadro*'))\n"," if int(arquivo[-11:-7]) == ano and\n"," ((ano >= 1989 and ano <= 1996 and int(arquivo[-6:-5]) == 4) or\n"," (ano == 1997 and int(arquivo[-6:-5]) == 3) or\n"," (ano >= 1998 and ano <= 2008 and int(arquivo[-6:-5]) == 2) or\n"," (ano >= 2009 and ano <= 2012 and 2 <= int(arquivo[-6:-5]) <= 4)\n"," )\n"," ]\n","\n"," if ano >= 2013:\n"," anexo = 'finbra_MUN_DespesasOrcamentarias(AnexoI-D)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivos.append(os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo)))\n","\n"," for arquivo in arquivos:\n","\n"," if ano >= 2013:\n"," tipo_arquivo = 0\n"," else:\n"," tipo_arquivo = int(arquivo[-6:-5])\n","\n"," if (ano >= 1989 and ano <= 2012):\n","\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\n","\n"," df_dados = pd.merge(df_dados, df_comp_municipio,\n"," how='left',\n"," left_on =['municipio_original', 'sigla_uf'],\n"," right_on=['municipio_original', 'sigla_uf'])\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," if (ano >= 1989 and ano <= 1998): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original']\n"," if (ano == 1999 ): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'Populacao 2000']\n"," if (ano >= 2000 and ano <= 2012): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'CD_UF', 'CD_MUN', 'Populacao']\n","\n"," value_vars = df_dados.drop(id_vars, axis = 1).columns\n"," df_dados = pd.melt(df_dados, id_vars = id_vars, value_vars = value_vars, var_name='conta', value_name='valor') # esse passo introduz muitas linhas com valor=0 em células que antes não existiam\n","\n"," if (ano >= 2009 and ano <= 2012):\n"," if tipo_arquivo == 2:\n"," df_dados['estagio'] = 'Despesas Empenhadas'\n"," elif tipo_arquivo == 3:\n"," df_dados['estagio'] = 'Despesas Liquidadas'\n"," elif tipo_arquivo == 4:\n"," df_dados['estagio'] = 'Despesas Pagas'\n","\n"," if (ano >= 2004 and ano <= 2012):\n"," df_dados.loc[(df_dados['conta'] ==\"ADAD Inden e Restituições\" ), 'conta'] = \"ADAD Inden e Restituições\"\n"," df_dados.loc[(df_dados['conta'] ==\"IFAD Inden e Restituições\" ), 'conta'] = \"IFAD Inden e Restituições\"\n","\n"," if ano == 1999:\n"," to_drop = ['municipio_auxiliar', 'municipio_original', 'Populacao 2000']\n"," else:\n"," to_drop = ['municipio_auxiliar', 'municipio_original']\n"," df_dados.drop(to_drop, axis=1, inplace=True)\n","\n"," if (ano >= 2013):\n","\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_municipio', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," if (ano <= 2008 ): chaves = ['ano', 'conta']\n"," if (ano >= 2009 and ano <= 2012): chaves = ['ano', 'estagio', 'conta']\n"," if (ano >= 2013 ): chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_municipio', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," if ano >= 1990 and ano <= 1993: # to fix issue pointed out at https://github.com/basedosdados/mais/issues/1426\n"," df_dados['valor'] = df_dados.apply(lambda row: 1000 * row.valor, axis=1)\n","\n"," if ano <= 1992:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/((1000**2)*2.75), axis=1)\n"," elif ano == 1993:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(1000*2.75), axis=1)\n","\n"," df_dados = df_dados[ordem['municipio']]\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}.\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/municipio_despesas_orcamentarias/ano={}/sigla_uf={}/municipio_despesas_orcamentarias.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n","\n"," #-------------------------------#\n"," # uf\n"," #-------------------------------#\n","\n"," if ano >= 2013:\n","\n"," df = pd.DataFrame(columns=ordem['uf'])\n","\n"," anexo = 'finbra_ESTDF_DespesasOrcamentarias(AnexoI-D)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivo = os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo))\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_uf', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_uf', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," df_dados = df_dados[ordem['uf']]\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/uf_despesas_orcamentarias/ano={}/sigla_uf={}/uf_despesas_orcamentarias.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n"]},{"cell_type":"markdown","metadata":{"id":"AEfMMjFCU9qo"},"source":["#### **Despesa por Função**:\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":468106,"status":"ok","timestamp":1691129898452,"user":{"displayName":"Ricardo Dahis","userId":"04544939827922453208"},"user_tz":-600},"id":"JakoOCIuDJtG","outputId":"e7d9cfaa-bfbc-4ecf-c6ef-81cd65684ef8"},"outputs":[],"source":["for ano in [*range(2004, LAST_YEAR+1)]:\n","\n"," #-------------------------------#\n"," # municipio\n"," #-------------------------------#\n","\n"," df = pd.DataFrame(columns=ordem['municipio'])\n","\n"," arquivos = [\n"," arquivo\n"," for arquivo in glob.iglob(os.path.join(path_dados, 'input/municipio/quadro*'))\n"," if int(arquivo[-11:-7]) == ano and\n"," ((ano >= 2004 and ano <= 2012 and int(arquivo[-6:-5]) == 5))\n"," ]\n","\n"," if ano >= 2013:\n"," anexo = 'finbra_MUN_DespesasporFuncao(AnexoI-E)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivos.append(os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo)))\n","\n"," for arquivo in arquivos:\n","\n"," if ano >= 2013:\n"," tipo_arquivo = 0\n"," else:\n"," tipo_arquivo = int(arquivo[-6:-5])\n","\n"," if (ano >= 2004 and ano <= 2012):\n","\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\n","\n"," df_dados = pd.merge(df_dados, df_comp_municipio,\n"," how='left',\n"," left_on =['municipio_original', 'sigla_uf'],\n"," right_on=['municipio_original', 'sigla_uf'])\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," value_vars = df_dados.drop(id_vars, axis = 1).columns\n"," df_dados = pd.melt(df_dados, id_vars = id_vars, value_vars = value_vars, var_name='conta', value_name='valor')\n","\n"," to_drop = ['municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," df_dados.drop(to_drop, axis=1, inplace=True)\n","\n"," if (ano >= 2013):\n","\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_municipio', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['portaria'] = df_dados['portaria'].str.lstrip('0')\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," if (ano <= 2012): chaves = ['ano', 'conta']\n"," if (ano >= 2013): chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas_funcao,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_municipio', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," if ano >= 1990 and ano <= 1993: # to fix issue pointed out at https://github.com/basedosdados/mais/issues/1426\n"," df_dados['valor'] = df_dados.apply(lambda row: 1000 * row.valor, axis=1)\n","\n"," if ano <= 1992:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/((1000**2)*2.75), axis=1)\n"," elif ano == 1993:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(1000*2.75), axis=1)\n","\n"," df_dados = df_dados[ordem['municipio']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/municipio_despesas_funcao/ano={}/sigla_uf={}/municipio_despesas_funcao.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n","\n"," #-------------------------------#\n"," # uf\n"," #-------------------------------#\n","\n"," if ano >= 2013:\n","\n"," df = pd.DataFrame(columns=ordem['uf'])\n","\n"," anexo = 'finbra_ESTDF_DespesasporFuncao(AnexoI-E)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivo = os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo))\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_uf', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['portaria'] = df_dados['portaria'].str.lstrip('0')\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas_funcao,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_uf', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," df_dados = df_dados[ordem['uf']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/uf_despesas_funcao/ano={}/sigla_uf={}/uf_despesas_funcao.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n"]},{"cell_type":"markdown","metadata":{"id":"sEoz0QSJWTZM"},"source":["#### **Balanço Patrimonial (a terminar)**"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"hz-EhQE3WXbu"},"outputs":[],"source":["for ano in [*range(2004, LAST_YEAR+1)]:\n","\n"," df = pd.DataFrame(columns=ordem['municipio'])\n","\n"," arquivos = [\n"," arquivo\n"," for arquivo in glob.iglob(os.path.join(path_dados, 'input/municipio/quadro*'))\n"," if int(arquivo[-11:-7]) == ano and\n"," (\n"," (ano >= 1998 and ano <= 2003 and 5 <= int(arquivo[-6:-5]) <= 6) or\n"," (ano >= 2004 and ano <= 2012 and 6 <= int(arquivo[-6:-5]) <= 7)\n"," )\n"," ]\n","\n"," if ano >= 2013:\n"," anexo = 'finbra_MUN_BalancoPatrimonialDCA(AnexoI-AB)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivos.append(os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo)))\n","\n"," for arquivo in arquivos:\n","\n"," if ano >= 2013:\n"," tipo_arquivo = 0\n"," else:\n"," tipo_arquivo = int(arquivo[-6:-5])\n","\n"," if (ano >= 1998 and ano <= 2012):\n","\n"," # TODO: adapt code below to balanco_patrimonial\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\n","\n"," df_dados = pd.merge(df_dados, df_comp_municipio,\n"," how='left',\n"," left_on =['municipio_original', 'sigla_uf'],\n"," right_on=['municipio_original', 'sigla_uf'])\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," value_vars = df_dados.drop(id_vars, axis = 1).columns\n"," df_dados = pd.melt(df_dados, id_vars = id_vars, value_vars = value_vars, var_name='conta', value_name='valor')\n","\n"," to_drop = ['municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," df_dados.drop(to_drop, axis=1, inplace=True)\n","\n"," if (ano >= 2013):\n","\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_municipio', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['portaria'] = df_dados['portaria'].str.lstrip('0')\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," if (ano <= 2012): chaves = ['ano', 'conta']\n"," if (ano >= 2013): chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas_funcao,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_municipio', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," if ano >= 1990 and ano <= 1993: # to fix issue pointed out at https://github.com/basedosdados/mais/issues/1426\n"," df_dados['valor'] = df_dados.apply(lambda row: 1000 * row.valor, axis=1)\n","\n"," if ano <= 1992:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/((1000**2)*2.75), axis=1)\n"," elif ano == 1993:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(1000*2.75), axis=1)\n","\n"," df_dados = df_dados[ordem['municipio']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/municipio_despesas_funcao/ano={}/sigla_uf={}/municipio_despesas_funcao.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n"]}],"metadata":{"colab":{"provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.6"}},"nbformat":4,"nbformat_minor":0} +{"cells":[{"cell_type":"markdown","metadata":{"id":"mZOEor6E0F2M"},"source":["#### **Path + Partições:**"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":42099,"status":"ok","timestamp":1716202155905,"user":{"displayName":"Gabriel Pisa","userId":"07952161339457046076"},"user_tz":180},"id":"zX9H93dp0HMn","outputId":"025eb0e4-6dca-4b16-8bfb-350a3fe0e292"},"outputs":[],"source":["#--------------------#\n","# setup\n","#--------------------#\n","\n","path_dados = \"/Users/rdahis/Downloads/dados_SICONFI\"\n","path_queries = \"/Users/rdahis/Dropbox/BD/queries-basedosdados/models/br_me_siconfi\"\n","# requirements: pandas, openpyxl\n","\n","import pandas as pd\n","import os\n","import glob\n","\n","pd.options.mode.chained_assignment = None # default='warn'\n","\n","LAST_YEAR = 2023"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"G6U5Xnx7UC6n"},"outputs":[],"source":["# cria pastas de receita e despesas por ano e UF\n","\n","ufs = [\"AC\", \"AL\", \"AM\", \"AP\", \"BA\", \"CE\", \"DF\", \"ES\", \"GO\",\n"," \"MA\", \"MG\", \"MS\", \"MT\", \"PA\", \"PB\", \"PE\", \"PI\", \"PR\",\n"," \"RJ\", \"RN\", \"RO\", \"RR\", \"SC\", \"SE\", \"RS\", \"SP\", \"TO\"]\n","\n","for i in [*range(1989, LAST_YEAR+1)]:\n"," for uf in ufs:\n","\n"," path = os.path.join(path_dados, 'output/municipio_receitas_orcamentarias/ano={}/sigla_uf={}'.format(i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n","\n"," path = os.path.join(path_dados, 'output/municipio_despesas_orcamentarias/ano={}/sigla_uf={}'.format(i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n","\n","for i in [*range(2004, LAST_YEAR+1)]:\n"," for uf in ufs:\n","\n"," path = os.path.join(path_dados, 'output/municipio_despesas_funcao/ano={}/sigla_uf={}'.format(i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n","\n","for i in [*range(1998, LAST_YEAR+1)]:\n"," for uf in ufs:\n","\n"," path = os.path.join(path_dados, 'output/municipio_balanco_patrimonial/ano={}/sigla_uf={}'.format(i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n","\n","for i in [*range(2013, LAST_YEAR+1)]:\n"," for uf in ufs:\n"," for table in ['uf_receitas_orcamentarias', 'uf_despesas_orcamentarias', 'uf_despesas_funcao']:\n"," path = os.path.join(path_dados, 'output/{}/ano={}/sigla_uf={}'.format(table, i, uf))\n"," if not os.path.exists(path):\n"," os.makedirs(path)\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"jANVKfNhBjJy"},"outputs":[],"source":["ordem = {\n"," 'municipio': ['ano', 'sigla_uf', 'id_municipio', 'estagio', 'portaria', 'conta', 'estagio_bd', 'id_conta_bd', 'conta_bd', 'valor'],\n"," 'uf': ['ano', 'sigla_uf', 'id_uf', 'estagio', 'portaria', 'conta', 'estagio_bd', 'id_conta_bd', 'conta_bd', 'valor']\n","}"]},{"cell_type":"markdown","metadata":{"id":"l1e75DtkW2wK"},"source":["#### **Contas - Joins:**"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":14780,"status":"ok","timestamp":1691129422684,"user":{"displayName":"Ricardo Dahis","userId":"04544939827922453208"},"user_tz":-600},"id":"8VVG51WOXGii","outputId":"a0f8edee-60a3-4838-a513-2dee636384d3"},"outputs":[],"source":["df_comp_municipio = pd.read_excel(os.path.join(path_queries, 'code/compatibilizacao/municipio.xlsx'), dtype='string')\n","\n","df_comp_receitas = pd.read_excel(os.path.join(path_queries, 'code/compatibilizacao/receitas_orcamentarias.xlsx'), dtype='string')\n","df_comp_receitas = df_comp_receitas.fillna('')\n","\n","df_comp_despesas = pd.read_excel(os.path.join(path_queries, 'code/compatibilizacao/despesas_orcamentarias.xlsx'), dtype='string')\n","df_comp_despesas = df_comp_despesas.fillna('')\n","\n","df_comp_despesas_funcao = pd.read_excel(os.path.join(path_queries, 'code/compatibilizacao/despesas_funcao.xlsx'), dtype='string')\n","df_comp_despesas_funcao = df_comp_despesas_funcao.fillna('')\n","\n","df_comp_balanco_patrimonial = pd.read_excel(os.path.join(path_queries, 'code/compatibilizacao/balanco_patrimonial.xlsx'), dtype='string')\n","df_comp_balanco_patrimonial = df_comp_balanco_patrimonial.fillna('')"]},{"cell_type":"markdown","metadata":{"id":"EAkrhhm90wsR"},"source":["#### **Receitas Orçamentarias**:\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1066362,"status":"ok","timestamp":1691128336532,"user":{"displayName":"Ricardo Dahis","userId":"04544939827922453208"},"user_tz":-600},"id":"dOkK_a4b6Mu3","outputId":"b591bd97-60e1-4992-d3f3-da8cec67554c"},"outputs":[],"source":["for ano in [*range(1989, LAST_YEAR+1)]:\n","\n"," #-------------------------------#\n"," # municipio\n"," #-------------------------------#\n","\n"," df = pd.DataFrame(columns=ordem['municipio'])\n","\n"," arquivos = [\n"," arquivo\n"," for arquivo in glob.iglob(os.path.join(path_dados, 'input/municipio/quadro*'))\n"," if int(arquivo[-11:-7]) == ano and\n"," ((ano >= 1989 and ano <= 1996 and int(arquivo[-6:-5]) < 4) or\n"," (ano >= 1997 and ano <= 2012 and int(arquivo[-6:-5]) == 1)\n"," )\n"," ]\n","\n"," if ano >= 2013:\n"," anexo = 'finbra_MUN_ReceitasOrcamentarias(AnexoI-C)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivos.append(os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo)))\n","\n"," for arquivo in arquivos:\n","\n"," if (ano >= 1989 and ano <= 2012):\n","\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\n","\n"," df_dados = pd.merge(df_dados, df_comp_municipio,\n"," how='left',\n"," left_on =['municipio_original', 'sigla_uf'],\n"," right_on=['municipio_original', 'sigla_uf'])\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," if (ano >= 1989 and ano <= 1998): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original']\n"," if (ano == 1999 ): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'Populacao 2000']\n"," if (ano >= 2000 and ano <= 2012): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'CD_UF', 'CD_MUN', 'Populacao']\n","\n"," value_vars = df_dados.drop(id_vars, axis = 1).columns\n"," df_dados = pd.melt(df_dados, id_vars = id_vars, value_vars = value_vars, var_name='conta', value_name='valor')\n","\n"," df_dados.drop(['municipio_auxiliar', 'municipio_original'],\n"," axis=1, inplace=True)\n","\n"," if ano >= 2013:\n","\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_municipio', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," if (ano >= 2013 and ano <= 2017):\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split(' -', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('- ', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n","\n"," if ano >= 2018: # TODO: double check if it should be 2017 here\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x[:14] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x[16:] if (x[0].isnumeric() and '0 -' in x) else x[15:] if x[0].isnumeric() else x).astype('string').str.strip()\n","\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," if (ano <= 2012): chaves = ['ano', 'conta']\n"," if (ano >= 2013): chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_receitas,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_municipio', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," if ano >= 1990 and ano <= 1993: # to fix issue pointed out at https://github.com/basedosdados/mais/issues/1426\n"," df_dados['valor'] = df_dados.apply(lambda row: 1000 * row.valor, axis=1)\n","\n"," if ano <= 1992:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(2.75*(1000**2)), axis=1)\n"," elif ano == 1993:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(2.75*1000), axis=1)\n","\n"," df_dados = df_dados[ordem['municipio']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/municipio_receitas_orcamentarias/ano={}/sigla_uf={}/municipio_receitas_orcamentarias.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n","\n"," #-------------------------------#\n"," # uf\n"," #-------------------------------#\n","\n"," if ano >= 2013:\n"," df = pd.DataFrame(columns=ordem['uf'])\n"," anexo = 'finbra_ESTDF_ReceitasOrcamentarias(AnexoI-C)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivo = os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo))\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_uf', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," if (ano >= 2013 and ano <= 2017): # TODO: double check if it should be 2018 here\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split(' -', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('- ', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n","\n"," else:\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x[:14] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x[16:] if (x[0].isnumeric() and '0 -' in x) else x[15:] if x[0].isnumeric() else x).astype('string').str.strip()\n","\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_receitas,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_uf', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," df_dados = df_dados[ordem['uf']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/uf_receitas_orcamentarias/ano={}/sigla_uf={}/uf_receitas_orcamentarias.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n","\n"]},{"cell_type":"markdown","metadata":{"id":"PjVNoUoWi5rN"},"source":["#### **Despesas Orçamentárias:**"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1263013,"status":"ok","timestamp":1691112748327,"user":{"displayName":"Ricardo Dahis","userId":"04544939827922453208"},"user_tz":-600},"id":"5DALIEKA1Srh","outputId":"f00793be-5820-45b3-db8b-a2049a5db6a9"},"outputs":[],"source":["for ano in [*range(1989, LAST_YEAR+1)]:\n","\n"," #-------------------------------#\n"," # municipio\n"," #-------------------------------#\n","\n"," df = pd.DataFrame(columns=ordem['municipio'])\n","\n"," arquivos = [\n"," arquivo\n"," for arquivo in glob.iglob(os.path.join(path_dados, 'input/municipio/quadro*'))\n"," if int(arquivo[-11:-7]) == ano and\n"," ((ano >= 1989 and ano <= 1996 and int(arquivo[-6:-5]) == 4) or\n"," (ano == 1997 and int(arquivo[-6:-5]) == 3) or\n"," (ano >= 1998 and ano <= 2008 and int(arquivo[-6:-5]) == 2) or\n"," (ano >= 2009 and ano <= 2012 and 2 <= int(arquivo[-6:-5]) <= 4)\n"," )\n"," ]\n","\n"," if ano >= 2013:\n"," anexo = 'finbra_MUN_DespesasOrcamentarias(AnexoI-D)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivos.append(os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo)))\n","\n"," for arquivo in arquivos:\n","\n"," if ano >= 2013:\n"," tipo_arquivo = 0\n"," else:\n"," tipo_arquivo = int(arquivo[-6:-5])\n","\n"," if (ano >= 1989 and ano <= 2012):\n","\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\n","\n"," df_dados = pd.merge(df_dados, df_comp_municipio,\n"," how='left',\n"," left_on =['municipio_original', 'sigla_uf'],\n"," right_on=['municipio_original', 'sigla_uf'])\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," if (ano >= 1989 and ano <= 1998): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original']\n"," if (ano == 1999 ): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'Populacao 2000']\n"," if (ano >= 2000 and ano <= 2012): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'CD_UF', 'CD_MUN', 'Populacao']\n","\n"," value_vars = df_dados.drop(id_vars, axis = 1).columns\n"," df_dados = pd.melt(df_dados, id_vars = id_vars, value_vars = value_vars, var_name='conta', value_name='valor') # esse passo introduz muitas linhas com valor=0 em células que antes não existiam\n","\n"," if (ano >= 2009 and ano <= 2012):\n"," if tipo_arquivo == 2:\n"," df_dados['estagio'] = 'Despesas Empenhadas'\n"," elif tipo_arquivo == 3:\n"," df_dados['estagio'] = 'Despesas Liquidadas'\n"," elif tipo_arquivo == 4:\n"," df_dados['estagio'] = 'Despesas Pagas'\n","\n"," if (ano >= 2004 and ano <= 2012):\n"," df_dados.loc[(df_dados['conta'] ==\"ADAD Inden e Restituições\" ), 'conta'] = \"ADAD Inden e Restituições\"\n"," df_dados.loc[(df_dados['conta'] ==\"IFAD Inden e Restituições\" ), 'conta'] = \"IFAD Inden e Restituições\"\n","\n"," if ano == 1999:\n"," to_drop = ['municipio_auxiliar', 'municipio_original', 'Populacao 2000']\n"," else:\n"," to_drop = ['municipio_auxiliar', 'municipio_original']\n"," df_dados.drop(to_drop, axis=1, inplace=True)\n","\n"," if (ano >= 2013):\n","\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_municipio', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," if (ano <= 2008 ): chaves = ['ano', 'conta']\n"," if (ano >= 2009 and ano <= 2012): chaves = ['ano', 'estagio', 'conta']\n"," if (ano >= 2013 ): chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_municipio', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," if ano >= 1990 and ano <= 1993: # to fix issue pointed out at https://github.com/basedosdados/mais/issues/1426\n"," df_dados['valor'] = df_dados.apply(lambda row: 1000 * row.valor, axis=1)\n","\n"," if ano <= 1992:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/((1000**2)*2.75), axis=1)\n"," elif ano == 1993:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(1000*2.75), axis=1)\n","\n"," df_dados = df_dados[ordem['municipio']]\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}.\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/municipio_despesas_orcamentarias/ano={}/sigla_uf={}/municipio_despesas_orcamentarias.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n","\n"," #-------------------------------#\n"," # uf\n"," #-------------------------------#\n","\n"," if ano >= 2013:\n","\n"," df = pd.DataFrame(columns=ordem['uf'])\n","\n"," anexo = 'finbra_ESTDF_DespesasOrcamentarias(AnexoI-D)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivo = os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo))\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_uf', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_uf', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," df_dados = df_dados[ordem['uf']]\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/uf_despesas_orcamentarias/ano={}/sigla_uf={}/uf_despesas_orcamentarias.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n"]},{"cell_type":"markdown","metadata":{"id":"AEfMMjFCU9qo"},"source":["#### **Despesa por Função**:\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":468106,"status":"ok","timestamp":1691129898452,"user":{"displayName":"Ricardo Dahis","userId":"04544939827922453208"},"user_tz":-600},"id":"JakoOCIuDJtG","outputId":"e7d9cfaa-bfbc-4ecf-c6ef-81cd65684ef8"},"outputs":[],"source":["for ano in [*range(2004, LAST_YEAR+1)]:\n","\n"," #-------------------------------#\n"," # municipio\n"," #-------------------------------#\n","\n"," df = pd.DataFrame(columns=ordem['municipio'])\n","\n"," arquivos = [\n"," arquivo\n"," for arquivo in glob.iglob(os.path.join(path_dados, 'input/municipio/quadro*'))\n"," if int(arquivo[-11:-7]) == ano and\n"," ((ano >= 2004 and ano <= 2012 and int(arquivo[-6:-5]) == 5))\n"," ]\n","\n"," if ano >= 2013:\n"," anexo = 'finbra_MUN_DespesasporFuncao(AnexoI-E)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivos.append(os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo)))\n","\n"," for arquivo in arquivos:\n","\n"," if ano >= 2013:\n"," tipo_arquivo = 0\n"," else:\n"," tipo_arquivo = int(arquivo[-6:-5])\n","\n"," if (ano >= 2004 and ano <= 2012):\n","\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\n","\n"," df_dados = pd.merge(df_dados, df_comp_municipio,\n"," how='left',\n"," left_on =['municipio_original', 'sigla_uf'],\n"," right_on=['municipio_original', 'sigla_uf'])\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," value_vars = df_dados.drop(id_vars, axis = 1).columns\n"," df_dados = pd.melt(df_dados, id_vars = id_vars, value_vars = value_vars, var_name='conta', value_name='valor')\n","\n"," to_drop = ['municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," df_dados.drop(to_drop, axis=1, inplace=True)\n","\n"," if (ano >= 2013):\n","\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_municipio', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['portaria'] = df_dados['portaria'].str.lstrip('0')\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," if (ano <= 2012): chaves = ['ano', 'conta']\n"," if (ano >= 2013): chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas_funcao,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_municipio', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," if ano >= 1990 and ano <= 1993: # to fix issue pointed out at https://github.com/basedosdados/mais/issues/1426\n"," df_dados['valor'] = df_dados.apply(lambda row: 1000 * row.valor, axis=1)\n","\n"," if ano <= 1992:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/((1000**2)*2.75), axis=1)\n"," elif ano == 1993:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(1000*2.75), axis=1)\n","\n"," df_dados = df_dados[ordem['municipio']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/municipio_despesas_funcao/ano={}/sigla_uf={}/municipio_despesas_funcao.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n","\n"," #-------------------------------#\n"," # uf\n"," #-------------------------------#\n","\n"," if ano >= 2013:\n","\n"," df = pd.DataFrame(columns=ordem['uf'])\n","\n"," anexo = 'finbra_ESTDF_DespesasporFuncao(AnexoI-E)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivo = os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo))\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n"," !rm \"{arquivo}\"\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_uf', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['portaria'] = df_dados['portaria'].str.lstrip('0')\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas_funcao,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_uf', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," df_dados = df_dados[ordem['uf']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/uf_despesas_funcao/ano={}/sigla_uf={}/uf_despesas_funcao.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n"]},{"cell_type":"markdown","metadata":{"id":"sEoz0QSJWTZM"},"source":["#### **Balanço Patrimonial (a terminar)**"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"hz-EhQE3WXbu"},"outputs":[],"source":["for ano in [*range(2004, LAST_YEAR+1)]:\n","\n"," df = pd.DataFrame(columns=ordem['municipio'])\n","\n"," arquivos = [\n"," arquivo\n"," for arquivo in glob.iglob(os.path.join(path_dados, 'input/municipio/quadro*'))\n"," if int(arquivo[-11:-7]) == ano and\n"," (\n"," (ano >= 1998 and ano <= 2003 and 5 <= int(arquivo[-6:-5]) <= 6) or\n"," (ano >= 2004 and ano <= 2012 and 6 <= int(arquivo[-6:-5]) <= 7)\n"," )\n"," ]\n","\n"," if ano >= 2013:\n"," anexo = 'finbra_MUN_BalancoPatrimonialDCA(AnexoI-AB)'\n"," zip = os.path.join(path_dados, 'input/{}/{}.zip'.format(anexo, ano))\n"," folder = os.path.join(path_dados, 'input/{}'.format(anexo))\n"," !unzip -o \"{zip}\" -d \"{folder}\"\n"," arquivos.append(os.path.join(path_dados, 'input/{}/finbra.csv'.format(anexo)))\n","\n"," for arquivo in arquivos:\n","\n"," if ano >= 2013:\n"," tipo_arquivo = 0\n"," else:\n"," tipo_arquivo = int(arquivo[-6:-5])\n","\n"," if (ano >= 1998 and ano <= 2012):\n","\n"," # TODO: adapt code below to balanco_patrimonial\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\n","\n"," df_dados = pd.merge(df_dados, df_comp_municipio,\n"," how='left',\n"," left_on =['municipio_original', 'sigla_uf'],\n"," right_on=['municipio_original', 'sigla_uf'])\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," value_vars = df_dados.drop(id_vars, axis = 1).columns\n"," df_dados = pd.melt(df_dados, id_vars = id_vars, value_vars = value_vars, var_name='conta', value_name='valor')\n","\n"," to_drop = ['municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," df_dados.drop(to_drop, axis=1, inplace=True)\n","\n"," if (ano >= 2013):\n","\n"," df_dados = pd.read_csv(arquivo, skiprows=3, encoding='latin1', sep=';', dtype= 'string')\n","\n"," df_dados = df_dados.drop(['Instituição', 'População', 'Identificador da Conta'], axis =1)\n"," df_dados.columns = ['id_municipio', 'sigla_uf', 'estagio', 'conta', 'valor']\n","\n"," df_dados['portaria'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[0] if x[0].isnumeric() else \"\").astype('string').str.strip()\n"," df_dados['portaria'] = df_dados['portaria'].str.lstrip('0')\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.split('-', 1)[1] if x[0].isnumeric() else x).astype('string').str.strip()\n"," df_dados['conta'] = df_dados['conta'].apply(lambda x: x.replace('¿', '-'))\n"," df_dados['valor'] = df_dados['valor'].apply(lambda x: x.replace(\",\", \".\"))\n","\n"," df_dados['ano'] = ano\n"," df_dados['ano'] = df_dados['ano'].astype('string')\n","\n"," if (ano <= 2012): chaves = ['ano', 'conta']\n"," if (ano >= 2013): chaves = ['ano', 'estagio', 'portaria', 'conta']\n"," df_dados = pd.merge(df_dados, df_comp_despesas_funcao,\n"," how='left',\n"," left_on = chaves,\n"," right_on= chaves)\n"," #df.drop_duplicates(subset=['id_municipio', 'conta', 'valor'], keep='first', inplace=True)\n","\n"," df_dados['conta'] = df_dados['conta'].astype('string')\n"," df_dados = df_dados.fillna('')\n","\n"," df_dados['valor'] = pd.to_numeric(df_dados['valor']).astype('float')\n","\n"," if ano >= 1990 and ano <= 1993: # to fix issue pointed out at https://github.com/basedosdados/mais/issues/1426\n"," df_dados['valor'] = df_dados.apply(lambda row: 1000 * row.valor, axis=1)\n","\n"," if ano <= 1992:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/((1000**2)*2.75), axis=1)\n"," elif ano == 1993:\n"," df_dados['valor'] = df_dados.apply(lambda row: (row.valor)/(1000*2.75), axis=1)\n","\n"," df_dados = df_dados[ordem['municipio']]\n","\n"," df = pd.concat([df, df_dados], ignore_index= True)\n","\n"," #----------------#\n"," # particiona\n"," #----------------#\n","\n"," print(\"Particionando {}\".format(ano))\n","\n"," for uf in ufs:\n"," df_partition = df.loc[df['sigla_uf'] == uf]\n"," df_partition.drop(['sigla_uf', 'ano'], axis=1, inplace=True)\n"," partition_path = os.path.join(path_dados, 'output/municipio_despesas_funcao/ano={}/sigla_uf={}/municipio_despesas_funcao.csv'.format(ano,uf))\n"," df_partition.to_csv(partition_path, index=False, encoding='utf-8', na_rep='')\n"]}],"metadata":{"colab":{"provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.6"}},"nbformat":4,"nbformat_minor":0} diff --git a/models/br_me_siconfi/code/compatibilizacao/despesas_funcao.xlsx b/models/br_me_siconfi/code/compatibilizacao/despesas_funcao.xlsx index 01d009f9..d3a4a5f0 100644 Binary files a/models/br_me_siconfi/code/compatibilizacao/despesas_funcao.xlsx and b/models/br_me_siconfi/code/compatibilizacao/despesas_funcao.xlsx differ diff --git a/models/br_me_siconfi/code/compatibilizacao/despesas_orcamentarias.xlsx b/models/br_me_siconfi/code/compatibilizacao/despesas_orcamentarias.xlsx index 08e41aa7..9a7844ed 100644 Binary files a/models/br_me_siconfi/code/compatibilizacao/despesas_orcamentarias.xlsx and b/models/br_me_siconfi/code/compatibilizacao/despesas_orcamentarias.xlsx differ diff --git a/models/br_me_siconfi/code/compatibilizacao/receitas_orcamentarias.xlsx b/models/br_me_siconfi/code/compatibilizacao/receitas_orcamentarias.xlsx index d9e7d4e5..ec635c64 100644 Binary files a/models/br_me_siconfi/code/compatibilizacao/receitas_orcamentarias.xlsx and b/models/br_me_siconfi/code/compatibilizacao/receitas_orcamentarias.xlsx differ