import pandas as pd
from collections import defaultdict
Peguei as três planilhas relativas ao planejamento das páginas:
!pip install xlrd
Downloading/unpacking xlrd Downloading xlrd-0.9.3.tar.gz (178kB): 178kB downloaded Running setup.py (path:/home/everton/.virtualenvs/ga/build/xlrd/setup.py) egg_info for package xlrd Installing collected packages: xlrd Running setup.py install for xlrd changing mode of build/scripts-2.7/runxlrd.py from 664 to 775 changing mode of /home/everton/.virtualenvs/ga/bin/runxlrd.py to 775 Successfully installed xlrd Cleaning up...
projeto_de_lei = pd.read_excel('../Orcamento/2015/Proposta/PLOA467BaseDados.xls')
quadro_detalhado = pd.read_excel('../Orcamento/2015/Proposta/PLOA467BaseDadosQuadroDetalhadoDaAcao.xls')
loa = pd.read_excel('../Orcamento/2014/LOA/OrcamentoAprovado2014.xls')
A primeira coisa que dá pra notar é que ambos possuem várias colunas diferentes:
quadro_detalhado.columns - projeto_de_lei.columns
/home/everton/.virtualenvs/ga/local/lib/python2.7/site-packages/pandas-0.15.2-py2.7-linux-x86_64.egg/pandas/core/index.py:1172: FutureWarning: using '-' to provide set differences with Indexes is deprecated, use .difference() "use .difference()",FutureWarning)
Index([u'ANO_EX', u'COD_COMPLT_DA', u'COD_DA', u'COD_DISTRITO', u'COD_EMP', u'COD_META', u'COD_REGIAO', u'COD_SUBPREFEITURA', u'DESC_DA', u'DESC_DISTRITO', u'DESC_META', u'DESC_ORGAO', u'DESC_PA', u'DESC_REGIAO', u'DESC_SUBPREFEITURA', u'DESC_UNIDADE', u'NOME_EMP', u'ORGAO', u'UNIDADE', u'VALOR_DA'], dtype='object')
projeto_de_lei.columns - quadro_detalhado.columns
Index([u'Administracao', u'Categoria_Despesa', u'Cd_Despesa', u'Cd_Dotac_Id', u'Cd_Elemento', u'Cd_Exerc_Empresa_Id', u'Cd_Exercicio', u'Cd_Fonte', u'Cd_Funcao', u'Cd_Modalidade', u'Cd_Orgao', u'Cd_Programa', u'Cd_Projeto_Atividade', u'Cd_SubFuncao', u'Cd_Unidade', u'DataExtracao', u'Ds_Categoria', u'Ds_Despesa', u'Ds_Fonte', u'Ds_Funcao', u'Ds_Grupo', u'Ds_Modalidade', u'Ds_Orgao', u'Ds_Programa', u'Ds_Projeto_Atividade', u'Ds_SubFuncao', u'Ds_Unidade', u'Grupo_Despesa', u'PAPA', u'Poder', u'ProjetoAtividade', u'Sld_Orcado_Ano', u'Tp_Projeto_Atividade'], dtype='object')
Outra questão é a diferença no número de linhas de cada planilha:
print("PLOA467BaseDados.xls => {} linhas".format(len(projeto_de_lei)))
print("PLOA467BaseDadosQuadroDetalhadoDaAcao.xls => {} linhas".format(len(quadro_detalhado)))
PLOA467BaseDados.xls => 2799 linhas PLOA467BaseDadosQuadroDetalhadoDaAcao.xls => 1784 linhas
Apesar do quadro detalhado possuir mais de 1000 linhas a menos, ele possui informações mais específicas em termos regionais. Por exemplo, na planilha "PLOA467BaseDados.xls" existem apenas 4 linhas referentes a construção de CEI's em 2015, mas o arquivo do quadro detalhado "PLOA467BaseDadosQuadroDetalhadoDaAcao.xls" possui 89.
O melhor desse exemplo é que no quadro detalhado possui o quanto está indo pra cada CEI em uma determinada subprefeitura. Achávamos antes que esse tipo de informação não existia, mas pelo que vi agora talvez o problema não seja tão grave.
Mas ainda precisamos descobrir porque existem menos linhas no quadro detalhado.
total_cei = projeto_de_lei[projeto_de_lei['ProjetoAtividade'] == 3359]['Sld_Orcado_Ano'].sum()
print("R$ {:,.2f}".format(total_cei))
R$ 231,586,768.00
"{} linhas sobre o CEI".format(len(projeto_de_lei[projeto_de_lei['ProjetoAtividade'] == 3359]))
'4 linhas sobre o CEI'
total_detalhado_cei = quadro_detalhado[quadro_detalhado['PA'] == 3359]['VALOR_DA'].sum()
print("R$ {:,.2f}".format(total_detalhado_cei))
R$ 231,586,768.00
projeto_de_lei[projeto_de_lei['ProjetoAtividade'] == 3359]['Ds_Projeto_Atividade']
432 Construção de Centros de Educação Infantil - CEI 433 Construção de Centros de Educação Infantil - CEI 434 Construção de Centros de Educação Infantil - CEI 435 Construção de Centros de Educação Infantil - CEI Name: Ds_Projeto_Atividade, dtype: object
loa[loa['ProjetoAtividade'] == 3359].groupby('Ds_Orgao')['Sld_Orcado_Ano'].sum()
loa.columns
Index([u'Cd_Exercicio', u'Administracao', u'Cd_Orgao', u'Ds_Orgao', u'Cd_Unidade', u'Ds_Unidade', u'Cd_Funcao', u'Ds_Funcao', u'Cd_SubFuncao', u'Ds_SubFuncao', u'Cd_Programa', u'Ds_Programa', u'PAPA', u'ProjetoAtividade', u'Ds_Projeto_Atividade', u'Cd_Despesa', u'Ds_Despesa', u'Categoria_Despesa', u'Ds_Categoria', u'Grupo_Despesa', u'Ds_Grupo', u'Cd_Modalidade', u'Ds_Modalidade', u'Cd_Elemento', u'Cd_Fonte', u'Ds_Fonte', u'Sld_Orcado_Ano', u'DataExtracao'], dtype='object')
quadro_detalhado[quadro_detalhado['PA'] == 3359].groupby('DESC_SUBPREFEITURA')['VALOR_DA'].sum()
DESC_SUBPREFEITURA A Definir 60763344 Subprefeitura Aricanduva/Formosa/Carrão 2288784 Subprefeitura Butantã 14306272 Subprefeitura Campo Limpo 14599056 Subprefeitura Capela do Socorro 27331760 Subprefeitura Casa Verde/Cachoeirinha 1288784 Subprefeitura Cidade Ademar 3577568 Subprefeitura Cidade Tiradentes 1288784 Subprefeitura Ermelino Matarazzo 2288784 Subprefeitura Freguesia/Brasilândia 2288784 Subprefeitura Guaianases 2288784 Subprefeitura Ipiranga 5866352 Subprefeitura Itaim Paulista 9151136 Subprefeitura Itaquera 15021488 Subprefeitura Jaçanã/Tremembé 12021488 Subprefeitura Moóca 2288784 Subprefeitura M´Boi Mirim 10021488 Subprefeitura Parelheiros 4577568 Subprefeitura Penha 1288784 Subprefeitura Perus 4577568 Subprefeitura Pirituba/Jaraguá 11155136 Subprefeitura São Mateus 12443920 Subprefeitura São Miguel 10862352 Name: VALOR_DA, dtype: float64
cod_atividade = set(projeto_de_lei['ProjetoAtividade'])
cod_atividade_detalhado = set(quadro_detalhado['PA'])
O número de atividade em cada planilha não difere em quantidade:
len(cod_atividade - cod_atividade_detalhado)
0
len(cod_atividade), len(cod_atividade_detalhado)
(313, 313)
hist_atividades = defaultdict(int)
for pa in cod_atividade:
for l in projeto_de_lei[projeto_de_lei['ProjetoAtividade'] == pa].iterrows():
hist_atividades[pa] += 1
hist_atividades_detalhado = defaultdict(int)
for pa in cod_atividade_detalhado:
for l in quadro_detalhado[quadro_detalhado['PA'] == pa].iterrows():
hist_atividades_detalhado[pa] += 1
No entanto diferem em detalhamento. Como citei no caso do CEI acima, no quadro detalhado existe o detalhamento por subprefeitur, enquanto na planilha do projeto de lei exixte apenas entradas totalizadoras. No entanto se formos comparar os histogramas abaixo veremos que em certos casos as atividades estão mais detalhas no arquivo do projeto de lei:
diff_hists = {pa: hist_atividades_detalhado[pa] - hist_atividades[pa] for pa in cod_atividade}
print("{} atividade mais detalhas em PLOA467BaseDados.xls".format(len(diff_hists.values()) - len(filter(lambda x: x < 0, diff_hists.values()))))
print("{} atividade com mesmo número de linhas em ambas planilhas".format(len(diff_hists.values()) - len(filter(lambda x: x == 0, diff_hists.values()))))
print("{} atividade mais detalhas em PLOA467BaseDadosQuadroDetalhadoDaAcao.xls".format(len(diff_hists.values()) - len(filter(lambda x: x > 0, diff_hists.values()))))
150 atividade mais detalhas em PLOA467BaseDados.xls 209 atividade com mesmo número de linhas em ambas planilhas 267 atividade mais detalhas em PLOA467BaseDadosQuadroDetalhadoDaAcao.xls
projeto_de_lei[projeto_de_lei['ProjetoAtividade'] == 4]
Cd_Dotac_Id | Cd_Exerc_Empresa_Id | Cd_Exercicio | Poder | Administracao | Cd_Orgao | Ds_Orgao | Cd_Unidade | Ds_Unidade | Cd_Funcao | ... | Ds_Categoria | Grupo_Despesa | Ds_Grupo | Cd_Modalidade | Ds_Modalidade | Cd_Elemento | Cd_Fonte | Ds_Fonte | Sld_Orcado_Ano | DataExtracao | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1197 | 101547 | 333 | 2015 | NaN | Administração Direta | 28 | Encargos Gerais do Município | 17 | Recursos Superv. pela Secretaria Municipal de ... | 28 | ... | Despesas Correntes | 2 | JUROS E ENCARGOS DA DIVIDA | 90 | Aplicações Diretas | 21 | 0 | Tesouro Municipal | 67868404 | 2014-09-29 18:02:01 |
1198 | 101548 | 333 | 2015 | NaN | Administração Direta | 28 | Encargos Gerais do Município | 17 | Recursos Superv. pela Secretaria Municipal de ... | 28 | ... | Despesas Correntes | 2 | JUROS E ENCARGOS DA DIVIDA | 90 | Aplicações Diretas | 22 | 0 | Tesouro Municipal | 2134045 | 2014-09-29 18:02:01 |
1199 | 101549 | 333 | 2015 | NaN | Administração Direta | 28 | Encargos Gerais do Município | 17 | Recursos Superv. pela Secretaria Municipal de ... | 28 | ... | Despesas de Capital | 6 | AMORTIZACAO DA DIVIDA | 90 | Aplicações Diretas | 71 | 0 | Tesouro Municipal | 280584141 | 2014-09-29 18:02:01 |
3 rows × 34 columns
quadro_detalhado[quadro_detalhado['PA'] == 4]
COD_COMPLT_DA | COD_META | DESC_META | COD_REGIAO | DESC_REGIAO | COD_SUBPREFEITURA | DESC_SUBPREFEITURA | COD_DISTRITO | DESC_DISTRITO | COD_DA | ... | VALOR_DA | ORGAO | DESC_ORGAO | UNIDADE | DESC_UNIDADE | PA | DESC_PA | ANO_EX | COD_EMP | NOME_EMP | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
878 | 201.00.00.00.001 | 201 | Serviço da Dívida Pública Interna | 0 | Supra-Regional | 0 | Supra-Regional | 0 | Supra-Distrital | 1 | ... | 350586590 | 28 | Encargos Gerais do Município | 17 | Recursos Superv. pela Secretaria Municipal de ... | 4 | Serviço da Dívida Pública Interna | 2015 | 1 | PREFEITURA DO MUNICÍPIO DE SÃO PAULO |
1 rows × 21 columns
E como vemos abaixo, ambos possuem um total de gastos igual:
projeto_de_lei[projeto_de_lei['ProjetoAtividade'] == 4]['Sld_Orcado_Ano'].sum() == quadro_detalhado[quadro_detalhado['PA'] == 4]['VALOR_DA'].sum()
True
A boa notícia é que o valor total em 2015 de gastos nas duas planilhas, detalhada e não detalhada não diferem:
print("R$ {:,.2f}".format(projeto_de_lei['Sld_Orcado_Ano'].sum()))
R$ 51,332,748,121.00
quadro_detalhado['VALOR_DA'].sum()
print("R$ {:,.2f}".format(quadro_detalhado['VALOR_DA'].sum()))
R$ 51,332,748,121.00
print("R$ {:,.2f}".format(loa['Sld_Orcado_Ano'].sum()))
R$ 50,569,325,587.00
len(loa)
3722
len(projeto_de_lei)
2799
loa[loa[('Ds_Funcao'] == u'Educação')]['Sld_Orcado_Ano'].sum()
9150325600
lsoma = loa.groupby('Ds_Funcao')['Sld_Orcado_Ano'].sum()
lsoma.to_csv('soma_por_funcao.csv', header=True, encoding='utf8')
lsoma.columns = ['funcao', 'orcado']
!soffice soma_por_funcao.csv
? lsoma.to_csv
loa.Ds_Funcao.value_counts()
Urbanismo 1010 Educação 685 Saúde 452 Administração 241 Desporto e Lazer 190 Direitos da Cidadania 175 Cultura 175 Assistência Social 141 Habitação 97 Saneamento 87 Gestão Ambiental 85 Transporte 83 Legislativa 63 Trabalho 54 Segurança Pública 46 Previdência Social 40 Judiciária 32 Encargos Especiais 19 Comércio e Serviços 15 Agricultura 14 Comunicações 11 Relações Exteriores 4 Defesa Nacional 2 Reserva de Contingência 1 dtype: int64