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 83ab5699..5f442135 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 @@ -22,4 +22,4 @@ select safe_cast(id_conta_bd as string) id_conta_bd, safe_cast(conta_bd as string) conta_bd, safe_cast(valor as float64) valor -from `basedosdados-staging.br_me_siconfi_staging.municipio_despesas_orcamentarias` as t +from `basedosdados-staging.br_me_siconfi_staging.municipio_despesas_orcamentarias` as t \ No newline at end of file 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 64f0f8d8..4b9ab276 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 @@ -22,4 +22,4 @@ select safe_cast(id_conta_bd as string) id_conta_bd, safe_cast(conta_bd as string) conta_bd, safe_cast(valor as float64) valor -from `basedosdados-staging.br_me_siconfi_staging.municipio_receitas_orcamentarias` as t +from `basedosdados-staging.br_me_siconfi_staging.municipio_receitas_orcamentarias` as t \ No newline at end of file diff --git a/models/br_me_siconfi/code/build.ipynb b/models/br_me_siconfi/code/build.ipynb index 3d944b2a..664d5985 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","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(1996, 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":{},"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]) <= 3) 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","\n"," if (ano >= 1989 and ano <= 1997):\n"," \n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\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"," \n"," if (ano >= 1998 and ano <= 2012):\n"," \n"," df_dados['length'] = df_dados['CD_MUN'].str.len()\n"," df_dados['id_municipio_6'] = '0'\n"," df_dados.loc[df_dados['length'] == 1, 'id_municipio_6'] = df_dados['CD_UF'] + '000' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 2, 'id_municipio_6'] = df_dados['CD_UF'] + '00' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 3, 'id_municipio_6'] = df_dados['CD_UF'] + '0' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 4, 'id_municipio_6'] = df_dados['CD_UF'] + df_dados['CD_MUN']\n"," \n"," df_comp_municipio_reduzido = df_comp_municipio[['id_municipio', 'sigla_uf']]\n"," df_comp_municipio_reduzido['id_municipio_6'] = df_comp_municipio_reduzido['id_municipio'].str[0:6]\n","\n"," df_dados = pd.merge(\n"," df_dados, df_comp_municipio_reduzido,\n"," how='left',\n"," left_on =['id_municipio_6'],\n"," right_on=['id_municipio_6']\n"," )\n","\n"," df_dados = df_dados.drop(['length', 'id_municipio_6'], axis = 1)\n","\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," if (ano >= 1989 and ano <= 1997): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original']\n"," if (ano >= 1998 and ano <= 2012): id_vars = ['id_municipio', 'sigla_uf', 'CD_UF', 'CD_MUN' ]\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"," if (ano >= 1989 and ano <= 1997):\n"," to_drop = ['municipio_auxiliar', 'municipio_original']\n"," else:\n"," to_drop = ['CD_UF', 'CD_MUN']\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"," 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"," 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":{},"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","\n"," if (ano >= 1989 and ano <= 1997):\n"," \n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\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"," \n"," if (ano >= 1998 and ano <= 2012):\n"," \n"," df_dados['length'] = df_dados['CD_MUN'].str.len()\n"," df_dados['id_municipio_6'] = '0'\n"," df_dados.loc[df_dados['length'] == 1, 'id_municipio_6'] = df_dados['CD_UF'] + '000' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 2, 'id_municipio_6'] = df_dados['CD_UF'] + '00' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 3, 'id_municipio_6'] = df_dados['CD_UF'] + '0' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 4, 'id_municipio_6'] = df_dados['CD_UF'] + df_dados['CD_MUN']\n"," \n"," df_comp_municipio_reduzido = df_comp_municipio[['id_municipio', 'sigla_uf']]\n"," df_comp_municipio_reduzido['id_municipio_6'] = df_comp_municipio_reduzido['id_municipio'].str[0:6]\n","\n"," df_dados = pd.merge(\n"," df_dados, df_comp_municipio_reduzido,\n"," how='left',\n"," left_on =['id_municipio_6'],\n"," right_on=['id_municipio_6']\n"," )\n","\n"," df_dados = df_dados.drop(['length', 'id_municipio_6'], axis = 1)\n"," \n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," df_dados.to_csv(\"~/Downloads/siconfi.csv\", index=False, encoding='utf-8', na_rep='')\n","\n"," if (ano >= 1989 and ano <= 1997): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original' ]\n"," if (ano >= 1998 and ano <= 2012): id_vars = ['id_municipio', 'sigla_uf', 'CD_UF', 'CD_MUN']\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 >= 1989 and ano <= 1997):\n"," to_drop = ['municipio_auxiliar', 'municipio_original']\n"," else:\n"," to_drop = ['CD_UF', 'CD_MUN']\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"," # conversão de moedas para Real\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"," #df.to_csv(\"~/Downloads/municipio_despesas_orcamentarias_{}.csv\".format(ano), index=False, encoding='utf-8', na_rep='')\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":{},"outputs":[],"source":["for ano in [*range(1996, 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 >= 1996 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 <= 2012:\n"," \n"," tipo_arquivo = int(arquivo[-6:-5])\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," \n"," if (ano >= 1996 and ano <= 1997):\n"," \n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\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","\n"," elif (ano >= 1998 and ano <= 2012):\n","\n"," df_dados['id_municipio_6'] = '0'\n","\n"," if ano >= 1998 and ano <= 2003:\n"," df_dados['length'] = df_dados['CD_MUN'].str.len()\n"," df_dados.loc[df_dados['length'] == 1, 'id_municipio_6'] = df_dados['CD_UF'] + '000' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 2, 'id_municipio_6'] = df_dados['CD_UF'] + '00' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 3, 'id_municipio_6'] = df_dados['CD_UF'] + '0' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 4, 'id_municipio_6'] = df_dados['CD_UF'] + df_dados['CD_MUN']\n"," else:\n"," df_dados['length'] = df_dados['Cod Mun'].str.len()\n"," df_dados.loc[df_dados['length'] == 1, 'id_municipio_6'] = df_dados['UF'] + '000' + df_dados['Cod Mun']\n"," df_dados.loc[df_dados['length'] == 2, 'id_municipio_6'] = df_dados['UF'] + '00' + df_dados['Cod Mun']\n"," df_dados.loc[df_dados['length'] == 3, 'id_municipio_6'] = df_dados['UF'] + '0' + df_dados['Cod Mun']\n"," df_dados.loc[df_dados['length'] == 4, 'id_municipio_6'] = df_dados['UF'] + df_dados['Cod Mun']\n"," \n"," df_comp_municipio_reduzido = df_comp_municipio[['id_municipio', 'sigla_uf']]\n"," df_comp_municipio_reduzido['id_municipio_6'] = df_comp_municipio_reduzido['id_municipio'].str[0:6]\n","\n"," df_dados = pd.merge(\n"," df_dados, df_comp_municipio_reduzido,\n"," how='left',\n"," left_on =['id_municipio_6'],\n"," right_on=['id_municipio_6']\n"," )\n","\n"," df_dados = df_dados.drop(['length', 'id_municipio_6'], axis = 1)\n"," \n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," if (ano >= 1996 and ano <= 1997):\n"," id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original']\n"," to_drop = ['municipio_auxiliar', 'municipio_original']\n"," elif (ano >= 1998 and ano <= 2003):\n"," id_vars = ['id_municipio', 'sigla_uf', 'CD_UF', 'CD_MUN'] #, 'municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," to_drop = ['CD_UF', 'CD_MUN']\n"," else:\n"," id_vars = ['id_municipio', 'sigla_uf', 'UF', 'Cod Mun'] #, 'municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," to_drop = ['UF', 'Cod Mun']\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"," df_dados.drop(to_drop, axis=1, inplace=True)\n","\n"," if (ano >= 2013):\n","\n"," tipo_arquivo = 0\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"," #df.to_csv(\"~/Downloads/municipio_despesas_funcao_{}.csv\".format(ano), index=False, encoding='utf-8', na_rep='')\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(1996, 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":{},"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]) <= 3) 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","\n"," if (ano >= 1989 and ano <= 1997):\n"," \n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\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"," \n"," if (ano >= 1998 and ano <= 2012):\n"," \n"," df_dados['length'] = df_dados['CD_MUN'].str.len()\n"," df_dados['id_municipio_6'] = '0'\n"," df_dados.loc[df_dados['length'] == 1, 'id_municipio_6'] = df_dados['CD_UF'] + '000' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 2, 'id_municipio_6'] = df_dados['CD_UF'] + '00' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 3, 'id_municipio_6'] = df_dados['CD_UF'] + '0' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 4, 'id_municipio_6'] = df_dados['CD_UF'] + df_dados['CD_MUN']\n"," \n"," df_comp_municipio_reduzido = df_comp_municipio[['id_municipio', 'sigla_uf']]\n"," df_comp_municipio_reduzido['id_municipio_6'] = df_comp_municipio_reduzido['id_municipio'].str[0:6]\n","\n"," df_dados = pd.merge(\n"," df_dados, df_comp_municipio_reduzido,\n"," how='left',\n"," left_on =['id_municipio_6'],\n"," right_on=['id_municipio_6']\n"," )\n","\n"," df_dados = df_dados.drop(['length', 'id_municipio_6'], axis = 1)\n","\n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," if (ano >= 1989 and ano <= 1997): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original']\n"," if (ano >= 1998 and ano <= 2012): id_vars = ['id_municipio', 'sigla_uf', 'CD_UF', 'CD_MUN' ]\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"," if (ano >= 1989 and ano <= 1997):\n"," to_drop = ['municipio_auxiliar', 'municipio_original']\n"," else:\n"," to_drop = ['CD_UF', 'CD_MUN']\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"," 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"," 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":{},"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","\n"," if (ano >= 1989 and ano <= 1997):\n"," \n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\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"," \n"," if (ano >= 1998 and ano <= 2012):\n"," \n"," df_dados['length'] = df_dados['CD_MUN'].str.len()\n"," df_dados['id_municipio_6'] = '0'\n"," df_dados.loc[df_dados['length'] == 1, 'id_municipio_6'] = df_dados['CD_UF'] + '000' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 2, 'id_municipio_6'] = df_dados['CD_UF'] + '00' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 3, 'id_municipio_6'] = df_dados['CD_UF'] + '0' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 4, 'id_municipio_6'] = df_dados['CD_UF'] + df_dados['CD_MUN']\n"," \n"," df_comp_municipio_reduzido = df_comp_municipio[['id_municipio', 'sigla_uf']]\n"," df_comp_municipio_reduzido['id_municipio_6'] = df_comp_municipio_reduzido['id_municipio'].str[0:6]\n","\n"," df_dados = pd.merge(\n"," df_dados, df_comp_municipio_reduzido,\n"," how='left',\n"," left_on =['id_municipio_6'],\n"," right_on=['id_municipio_6']\n"," )\n","\n"," df_dados = df_dados.drop(['length', 'id_municipio_6'], axis = 1)\n"," \n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," df_dados.to_csv(\"~/Downloads/siconfi.csv\", index=False, encoding='utf-8', na_rep='')\n","\n"," if (ano >= 1989 and ano <= 1997): id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original' ]\n"," if (ano >= 1998 and ano <= 2012): id_vars = ['id_municipio', 'sigla_uf', 'CD_UF', 'CD_MUN']\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 >= 1989 and ano <= 1997):\n"," to_drop = ['municipio_auxiliar', 'municipio_original']\n"," else:\n"," to_drop = ['CD_UF', 'CD_MUN']\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"," # conversão de moedas para Real\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":{},"outputs":[],"source":["for ano in [*range(1996, 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 >= 1996 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 <= 2012:\n"," \n"," tipo_arquivo = int(arquivo[-6:-5])\n"," df_dados = pd.read_excel(arquivo, dtype='string', na_values=\"\")\n"," \n"," if (ano >= 1996 and ano <= 1997):\n"," \n"," df_dados['municipio_original'] = df_dados['municipio_original'].str.strip()\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","\n"," elif (ano >= 1998 and ano <= 2012):\n","\n"," df_dados['id_municipio_6'] = '0'\n","\n"," if ano >= 1998 and ano <= 2003:\n"," df_dados['length'] = df_dados['CD_MUN'].str.len()\n"," df_dados.loc[df_dados['length'] == 1, 'id_municipio_6'] = df_dados['CD_UF'] + '000' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 2, 'id_municipio_6'] = df_dados['CD_UF'] + '00' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 3, 'id_municipio_6'] = df_dados['CD_UF'] + '0' + df_dados['CD_MUN']\n"," df_dados.loc[df_dados['length'] == 4, 'id_municipio_6'] = df_dados['CD_UF'] + df_dados['CD_MUN']\n"," else:\n"," df_dados['length'] = df_dados['Cod Mun'].str.len()\n"," df_dados.loc[df_dados['length'] == 1, 'id_municipio_6'] = df_dados['UF'] + '000' + df_dados['Cod Mun']\n"," df_dados.loc[df_dados['length'] == 2, 'id_municipio_6'] = df_dados['UF'] + '00' + df_dados['Cod Mun']\n"," df_dados.loc[df_dados['length'] == 3, 'id_municipio_6'] = df_dados['UF'] + '0' + df_dados['Cod Mun']\n"," df_dados.loc[df_dados['length'] == 4, 'id_municipio_6'] = df_dados['UF'] + df_dados['Cod Mun']\n"," \n"," df_comp_municipio_reduzido = df_comp_municipio[['id_municipio', 'sigla_uf']]\n"," df_comp_municipio_reduzido['id_municipio_6'] = df_comp_municipio_reduzido['id_municipio'].str[0:6]\n","\n"," df_dados = pd.merge(\n"," df_dados, df_comp_municipio_reduzido,\n"," how='left',\n"," left_on =['id_municipio_6'],\n"," right_on=['id_municipio_6']\n"," )\n","\n"," df_dados = df_dados.drop(['length', 'id_municipio_6'], axis = 1)\n"," \n"," df_dados.drop_duplicates(subset=['id_municipio'], keep ='first', inplace = True)\n","\n"," if (ano >= 1996 and ano <= 1997):\n"," id_vars = ['id_municipio', 'sigla_uf', 'municipio_auxiliar', 'municipio_original']\n"," to_drop = ['municipio_auxiliar', 'municipio_original']\n"," elif (ano >= 1998 and ano <= 2003):\n"," id_vars = ['id_municipio', 'sigla_uf', 'CD_UF', 'CD_MUN'] #, 'municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," to_drop = ['CD_UF', 'CD_MUN']\n"," else:\n"," id_vars = ['id_municipio', 'sigla_uf', 'UF', 'Cod Mun'] #, 'municipio_auxiliar', 'municipio_original', 'CdUF', 'CdMun', 'Populacao']\n"," to_drop = ['UF', 'Cod Mun']\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"," df_dados.drop(to_drop, axis=1, inplace=True)\n","\n"," if (ano >= 2013):\n","\n"," tipo_arquivo = 0\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"," #df.to_csv(\"~/Downloads/municipio_despesas_funcao_{}.csv\".format(ano), index=False, encoding='utf-8', na_rep='')\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_orcamentarias.xlsx b/models/br_me_siconfi/code/compatibilizacao/despesas_orcamentarias.xlsx index 9a7844ed..31af666f 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 ec635c64..eadd6b17 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