10. Orçamento de Estado de 2022¶
Cursum perficio
Verbum sapienti (eo plus cupiunt)
Verbum sapienti
Quo plus habent, eo plus cupiunt
Verbum sapienti
Quo plus habent, eo plus cupiunt
Post nubila, Phoebus
Post nubila, Phoebus
Post nubila, Phoebus
– Enya, «Cursum perficio»
A análise das votações e posicionamento relativo dos partidos tendo como base exclusivamente a forma como votam foi a base do trabalho anterior, análise essa que teve como fonte as votações das Iniciativas e Actividades.
O Orçamento de Estado para 2022 que aqui analisamos é fruto de um processo longo e que resulta do chumbo da sua primeira versão, por falta de apoio parlamentar à proposta do governo minoritário do PS; durante um período de negociações com os vários parceiros “à esquerda” não foi conseguido o apoio suficiente para a aprovação: o BE desde cedo indicou não existirem condições para a viabilização, enquanto PEV e PCP (que tinham sido fundamentais para a aprovação do OE de 2021, já com a oposição do BE) continuam as negociações (sabe-se hoje) com o Governo até ao dia da votação mas sem que seja atingido o mínimo considerado necessário para a aprovação na generalidade.
A abstenção do PAN e das duas deputadas não inscritas (Joacine Katar Moreira, ex-Livre) e Cristina Rodrigues (ex-PAN) não foram suficientes para a aprovação, que levou ao chumbo do OE. Das opções existentes, o Presidente da República optou pela dissolução do Parlamento e convocação de eleições antecipadas, que resultariam numa maioria absoluta do PS, enfraquecimento de BE e PCP, crescimento de IL e CH e desaparecimento das bancadas parlamentos do CDS-PP e do PEV.
É neste contexto de maioria absoluta que as votações das propostas de alteração são feitas.
10.1. Metodologia¶
Com base nos dados disponibilizados pela Assembleia da República em formato XML são criadas dataframes (tabelas de duas dimensões) com base na selecção de informação relativa aos padrões de votação de cada partido (e/ou deputados não-inscritos)
São fundamentalmente feitas as seguintes análises:
Quantidade e tipo de propostas feitas, e resultado das mesmas
Apoio para as propostas de cada partido
Matriz de distância entre todos os partidos e dendograma
Identificação de grupos (spectral clustering) e visualização das distâncias num espaço cartesiano (multidimensional scaling)
10.2. As propostas: quantidade, aprovações, rejeições¶
Após obtermos e processarmos o ficheiro com as Propostas de Alteração podemos ter uma primeira ideia sobre a origem das propostas:
oe_df.groupby('GP')[['ID']].count().sort_values("ID", ascending=False)
ID | |
---|---|
GP | |
PCP | 353 |
CH | 309 |
PAN | 244 |
BE | 137 |
PSD | 130 |
IL | 127 |
L | 84 |
PS | 73 |
SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS | 48 |
O resultado das propostas de cada partido (ou seja, se e como foram aprovadas ou rejeitadas):
pd.crosstab(oe_df.GP, oe_df.State)
State | Aguarda Voto em Comissão | Aprovado(a) Parcialmente em Comissão | Aprovado(a) Parcialmente em Plenário | Aprovado(a) em Comissão | Aprovado(a) em Plenário | Aprovado(a) em Plenário com Alterações | Aprovado(a) por Unanimidade em Comissão | Aprovado(a) por Unanimidade em Plenário | Avocado(a) | Não Admitida | Prejudicado(a) | Rejeitado(a) em Comissão | Rejeitado(a) em Plenário | Remetido(a) a Plenário | Retirado(a) |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GP | |||||||||||||||
BE | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 132 | 2 | 0 | 1 |
CH | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 1 | 276 | 10 | 0 | 17 |
IL | 0 | 0 | 1 | 0 | 0 | 0 | 2 | 0 | 2 | 0 | 0 | 112 | 2 | 0 | 8 |
L | 0 | 0 | 0 | 10 | 2 | 0 | 1 | 0 | 0 | 0 | 0 | 64 | 1 | 0 | 6 |
PAN | 0 | 1 | 0 | 37 | 0 | 0 | 3 | 0 | 0 | 4 | 0 | 182 | 2 | 0 | 15 |
PCP | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 313 | 13 | 1 | 23 |
PS | 0 | 0 | 0 | 51 | 12 | 1 | 5 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 2 |
PSD | 0 | 0 | 0 | 1 | 0 | 0 | 2 | 0 | 1 | 0 | 0 | 111 | 14 | 0 | 1 |
SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS | 0 | 0 | 0 | 4 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 43 | 0 | 0 | 0 |
Em relação ao OE de 2021 notam-se algumas contantes (PCP como partido com maior número de propostas a mais óbvia) mas também algumas diferenças: desde logo a muito maior quantidade de propostas do BE (137 vs. 12), a duplicação das propostas do CH (que agora ultrapassam as 300 e o colocam em segundo lugar em número de propostas) e, claro, a diferente composição do Parlamento com o desaparecimento de propostas de CDS-PP, PEV, Joacine Katar Moreira (que tinha um número de propostas não muito inferior às de Rui Tavares) e Cristina Rodrigues (que abandonou o Parlamento e se tornou acessora parlamento do CH). A IL, com significativamente mais deputados, tem um número de propostas ligeiramente maior do que quando tinha apenas o deputado único Cotrim Figueiredo.
pd.crosstab(oe_df.GP, oe_df.State).columns
ct = pd.crosstab(oe_df.GP, oe_df.State)[['Aprovado(a) por Unanimidade em Plenário',
'Aprovado(a) por Unanimidade em Comissão',
'Aprovado(a) em Plenário',
'Aprovado(a) em Comissão',
'Aprovado(a) Parcialmente em Plenário',
'Aprovado(a) Parcialmente em Comissão',
'Retirado(a)',
'Prejudicado(a)',
'Rejeitado(a) em Plenário',
'Rejeitado(a) em Comissão'
]]
ct
State | Aprovado(a) por Unanimidade em Plenário | Aprovado(a) por Unanimidade em Comissão | Aprovado(a) em Plenário | Aprovado(a) em Comissão | Aprovado(a) Parcialmente em Plenário | Aprovado(a) Parcialmente em Comissão | Retirado(a) | Prejudicado(a) | Rejeitado(a) em Plenário | Rejeitado(a) em Comissão |
---|---|---|---|---|---|---|---|---|---|---|
GP | ||||||||||
BE | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 2 | 132 |
CH | 0 | 0 | 0 | 0 | 0 | 0 | 17 | 1 | 10 | 276 |
IL | 0 | 2 | 0 | 0 | 1 | 0 | 8 | 0 | 2 | 112 |
L | 0 | 1 | 2 | 10 | 0 | 0 | 6 | 0 | 1 | 64 |
PAN | 0 | 3 | 0 | 37 | 0 | 1 | 15 | 0 | 2 | 182 |
PCP | 0 | 0 | 0 | 0 | 0 | 1 | 23 | 1 | 13 | 313 |
PS | 1 | 5 | 12 | 51 | 0 | 0 | 2 | 0 | 0 | 0 |
PSD | 0 | 2 | 0 | 1 | 0 | 0 | 1 | 0 | 14 | 111 |
SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS | 0 | 1 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 43 |
A mesma informação em forma de gráfico de barras: o total de propostas de cada partido (ou deputados) com a distribuição do resultado das mesmas, ordenados pelo maior número de aprovações.
%matplotlib inline
# sp = sp.sort_values(by=['Favor','Abstenção','Contra'], ascending=False, axis=1)
import seaborn as sns
from matplotlib.colors import ListedColormap
sns.set()
sns.set_style("whitegrid")
## Sort by the "Approved" in the many ways it's possible
## sort by a separate aggregate value.
ct.sort_values(by=['Aprovado(a) em Comissão','Aprovado(a) por Unanimidade em Comissão','Aprovado(a) em Plenário','Aprovado(a) Parcialmente em Plenário','Aprovado(a) por Unanimidade em Plenário','Aprovado(a) Parcialmente em Comissão'], ascending=False,axis=0).plot(kind="bar", stacked=True, colormap=ListedColormap(sns.color_palette("coolwarm").as_hex()),figsize=(10,10))
plt.show()
Olhando para este gráfico, algumas possíveis leituras:
O maior número de propostas submetidas e também rejeitadas é do PCP.
CH não consegue aprovação de nenhuma proposta, sendo o segundo partido com maior número de propostas.
PS, PAN e Livre são os que conseguem maior número de propostas aprovadas.
O PS é o que tem uma percentagem de aprovação maior (quase total, apenas não completa por propostas retiradas).
Os restantes partidos têm um conjunto residual de propostas aprovadas.
A maioria absoluta do PS não pode ser separada destes resultados, havendo uma quase completa inversão de alguns factores relativamente ao orçamento anterior, bem como uma aparente convergência (dentro do contexto) com PAN e Livre.
10.2.1. Propostas aprovadas¶
E que propostas cada partido conseguiu aprovar? A utilização do título da iniciativa é aqui útil
from IPython.display import display, HTML
approved_oe = oe_df[oe_df.State.str.contains("Aprovado")].fillna("")
for gp in approved_oe.GP.unique():
gp_df = approved_oe[approved_oe["GP"]==gp][["GP","IniTitle", "VoteDesc", "State"]]
print(gp + ":", len(gp_df.index), " aprovadas.")
with pd.option_context('display.max_rows', None, 'display.max_columns', None, 'display.max_colwidth', -1): # more options can be specified also
display(gp_df)
PS: 70 aprovadas.
GP | IniTitle | VoteDesc | State | |
---|---|---|---|---|
2 | PS | Utentes inscritos por médico de família | N.º 11, Artigo 179.º | Aprovado(a) em Comissão |
3 | PS | Utentes inscritos por médico de família | N.º 5, Artigo 179.º | Aprovado(a) em Comissão |
5 | PS | Transferências orçamentais | 97, Anexo I, Artigo 7.º | Aprovado(a) em Comissão |
6 | PS | Utilização de viaturas de serviço | Artigo 165.º-A | Aprovado(a) em Comissão |
7 | PS | Programas operacionais que integram o Portugal 2020, o Portugal 2030 e a Estrutura de Missão «Recuperar Portugal» | N.º 5, Artigo 165.º | Aprovado(a) em Comissão |
8 | PS | Programas operacionais que integram o Portugal 2020, o Portugal 2030 e a Estrutura de Missão «Recuperar Portugal» | N.º 2, Artigo 165.º | Aprovado(a) em Comissão |
16 | PS | Fundo de Financiamento da Descentralização e transferências financeiras ao abrigo da descentralização e delegação de competências | Corpo, Alínea c), N.º 4, Artigo 82.º | Aprovado(a) em Plenário |
17 | PS | Fundo de Financiamento da Descentralização e transferências financeiras ao abrigo da descentralização e delegação de competências | Alinea b), N.º 1, Artigo 82.º | Aprovado(a) em Plenário |
33 | PS | Vinculação de trabalhadores dos serviços de abastecimento de água e de saneamento de águas residuais | Artigo 63.º-A | Aprovado(a) em Comissão |
76 | PS | Proteção social complementar dos trabalhadores em regime de contrato individual de trabalho | N.º 2, Artigo 43.º | Aprovado(a) em Comissão |
78 | PS | Norma revogatória e de produção de efeitos em matéria fiscal | N.º 6, Artigo 261.º | Aprovado(a) em Comissão |
285 | PS | Alteração à Lei n.º 70/2021, de 4 de novembro | Artigo 231.º-A | Aprovado(a) em Plenário |
291 | PS | Regime Especial de Imposto sobre Veículos | Artigo 235.º-A | Aprovado(a) em Comissão |
293 | PS | Montantes da participação das autarquias locais nos impostos do Estado | N.º 2, Artigo 71.º | Aprovado(a) por Unanimidade em Plenário |
298 | PS | Incentivo fiscal à recuperação | Alínea e), Artigo 2.º (Âmbito de aplicação subjetivo), Anexo III - Regime do Incentivo Fiscal à Recuperaç, Artigo 242.º | Aprovado(a) em Comissão |
299 | PS | Norma revogatória e de produção de efeitos em matéria fiscal | Alínea f), N.º 1, Artigo 261.º | Aprovado(a) em Comissão |
300 | PS | Alteração ao Código de Processo Civil | Artigo 254.º-A | Aprovado(a) em Comissão |
301 | PS | Alteração ao Código de Procedimento e de Processo Tributário | Artigo 246.º-A | Aprovado(a) em Comissão |
304 | PS | Alteração ao Código do Imposto Municipal sobre as Transmissões Onerosas de Imóveis | Aprovado(a) em Comissão | |
313 | PS | Introdução no consumo e comercialização de produtos do tabaco | Artigo 232.º-A | Aprovado(a) em Comissão |
316 | PS | Empréstimos dos municípios para habitação e operações de reabilitação urbana | N.º 3, Artigo 91.º | Aprovado(a) em Plenário |
319 | PS | Alteração ao Código do Imposto Único de Circulação | Aprovado(a) em Comissão | |
320 | PS | Alteração ao Código do Imposto sobre Veículos | Aprovado(a) em Comissão | |
322 | PS | Alteração à de Organização e Processo do Tribunal de Contas | Artigo 245.º-A | Aprovado(a) em Comissão |
324 | PS | Formação de contratos no âmbito da Jornada Mundial da Juventude | Artigo 134.º-A | Aprovado(a) em Comissão |
329 | PS | Alteração ao Código do Imposto do Selo | Aprovado(a) em Comissão | |
330 | PS | Alteração ao Código do Imposto do Selo | Aprovado(a) em Comissão | |
332 | PS | Limite mínimo do valor da propina | Artigo 170.º | Aprovado(a) em Comissão |
333 | PS | Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares | Aprovado(a) em Comissão | |
336 | PS | Alteração ao Código do Imposto Municipal sobre Imóveis | Artigo 236.º | Aprovado(a) em Comissão |
337 | PS | Centros de recolha oficial de animais, apoio à esterilização e à promoção do bem-estar animal | Alínea a), N.º 1, Artigo 210.º | Aprovado(a) em Comissão |
343 | PS | Alteração ao Estatuto dos Benefícios Fiscais | Aprovado(a) em Comissão | |
344 | PS | Alteração ao Código do Imposto do Selo | Aprovado(a) em Comissão | |
347 | PS | Transferências orçamentais | 49, Anexo I, Artigo 7.º | Aprovado(a) em Comissão |
353 | PS | Alteração ao Código do Imposto Municipal sobre as Transmissões Onerosas de Imóveis | Aprovado(a) em Comissão | |
354 | PS | Alteração ao Código do Imposto Municipal sobre as Transmissões Onerosas de Imóveis | Aprovado(a) em Comissão | |
355 | PS | Instituto da Conservação da Natureza e das Florestas, I. P. | Alínea a), Artigo 154.º | Aprovado(a) em Comissão |
359 | PS | Recuperação do pinhal de Leiria para rearborização | ., Artigo 150.º | Aprovado(a) em Comissão |
362 | PS | Alteração ao Código do Imposto sobre o Valor Acrescentado | Aprovado(a) em Comissão | |
363 | PS | Contratos não submetidos ao Novo Regime do Arrendamento Urbano | N.º 6, Artigo 206.º | Aprovado(a) em Comissão |
369 | PS | Alteração da Portaria nº 337-C/2018 de 31 de dezembro | Artigo 182.º-A | Aprovado(a) em Comissão |
374 | PS | Aeroporto da Horta | N.º 2, Artigo 66.º | Aprovado(a) em Comissão |
377 | PS | Subsídio de deslocação na ação social no Ensino Superior | Artigo 172.º-A | Aprovado(a) em Plenário |
379 | PS | Diferimento e suspensão extraordinários de prazos | Artigo 254.º-B | Aprovado(a) em Comissão |
380 | PS | Alteração ao Estatuto da Ordem dos Contabilistas Certificados | Artigo 254.º-A | Aprovado(a) em Comissão |
382 | PS | Fundo Social Municipal e aumento de margem de endividamento | Artigo 95.º- A | Aprovado(a) em Plenário |
383 | PS | Acordos de regularização de dívidas das autarquias locais | N.º 10, Artigo 95.º | Aprovado(a) em Plenário com Alterações |
386 | PS | Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares | Aprovado(a) em Comissão | |
387 | PS | Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares | Aprovado(a) em Plenário | |
395 | PS | Aquisição transitória de participações locais detidas por empresas locais | Artigo 188.º-A | Aprovado(a) em Comissão |
397 | PS | Novo estabelecimento prisional de São Miguel | Artigo 70.º-E | Aprovado(a) por Unanimidade em Comissão |
400 | PS | Acordos de regularização de dívidas das autarquias locais | N.º 11, Artigo 95.º | Aprovado(a) em Plenário |
406 | PS | Plano de remodelação dos tribunais na Região Autónoma dos Açores | Artigo 70.º-G | Aprovado(a) por Unanimidade em Comissão |
411 | PS | Aditamento ao Código do Imposto sobre o Rendimento das Pessoas Singulares | Aprovado(a) em Comissão | |
416 | PS | Recrutamento de trabalhadores nos municípios em situação de saneamento ou de rutura | N.º 1, Artigo 46.º | Aprovado(a) em Plenário |
418 | PS | Norma revogatória e de produção de efeitos em matéria fiscal | N.º 3, Artigo 261.º | Aprovado(a) em Comissão |
419 | PS | Alteração ao Estatuto dos Benefícios Fiscais | Aprovado(a) em Comissão | |
422 | PS | Alteração à Lei n.º 50/2012, de 31 de agosto | Aprovado(a) em Comissão | |
423 | PS | Alteração à Lei n.º 50/2012, de 31 de agosto | Aprovado(a) em Comissão | |
425 | PS | Subsídio à pequena pesca artesanal e costeira e à pequena aquicultura | N.º 3, Artigo 208.º | Aprovado(a) em Comissão |
426 | PS | Subsídio à pequena pesca artesanal e costeira e à pequena aquicultura | N.º 3, Artigo 208.º | Aprovado(a) em Comissão |
428 | PS | Pagamento a concessionários decorrente de decisão judicial ou arbitral ou de resgate de contrato de concessão | Alinea b), N.º 1, Artigo 80.º | Aprovado(a) em Plenário |
432 | PS | Novo Hospital Central do Algarve | Artigo 188.º-A | Aprovado(a) por Unanimidade em Comissão |
433 | PS | Alteração à Lei n.º 50/2012, de 31 de agosto | Aprovado(a) em Comissão | |
438 | PS | Fundos disponíveis e entidades com pagamentos em atraso no subsetor local | N.º 8, Artigo 78.º | Aprovado(a) em Plenário |
440 | PS | Descontaminação na ilha Terceira | Artigo 70.º-A | Aprovado(a) por Unanimidade em Comissão |
444 | PS | Limitação das propinas em todos os ciclos de estudo | Artigo 172.º-A | Aprovado(a) em Plenário |
452 | PS | Alteração ao Estatuto dos Benefícios Fiscais | Aprovado(a) em Comissão | |
453 | PS | Alteração ao Estatuto dos Benefícios Fiscais | Aprovado(a) por Unanimidade em Comissão | |
462 | PS | Regime excecional das redes de faixas de gestão de combustível | Corpo, N.º 4, Artigo 215.º | Aprovado(a) em Comissão |
PAN: 41 aprovadas.
GP | IniTitle | VoteDesc | State | |
---|---|---|---|---|
30 | PAN | Reconhecimento do capital natural como valor económico de um país | Artigo 196.º-A | Aprovado(a) em Comissão |
36 | PAN | Bolsa de Horas dos intérpretes de língua gestual no ensino obrigatório | Artigo 168.º-A | Aprovado(a) em Comissão |
41 | PAN | Rede de respostas para pessoas com deficiência maiores de idade | Artigo 216.º-A | Aprovado(a) em Comissão |
45 | PAN | Acessibilidade aos transportes públicos por pessoas invisuais | Artigo 216.º-A | Aprovado(a) em Comissão |
46 | PAN | Proteção dos tubarões | Artigo 208.º-A | Aprovado(a) em Comissão |
61 | PAN | Relatório sobre a qualidade do alojamento no Ensino Superior | Artigo 169.º-A | Aprovado(a) em Comissão |
66 | PAN | Centro de investigação com recurso a modelos alternativos aos animais utilizados para fins científicos | Artigo 211.º-A | Aprovado(a) em Comissão |
70 | PAN | Interdição do chumbo na pesca | Artigo 203.º-A | Aprovado(a) em Comissão |
74 | PAN | Revisão do Programa “Remuneração dos Serviços dos Ecossistemas em Espaços Rurais” | Artigo 194.º-A | Aprovado(a) em Comissão |
122 | PAN | Incentivos ao adequado descarte de produtos de tabaco | Artigo 197.º-A | Aprovado(a) em Comissão |
126 | PAN | Respostas transitórias para apoio a vítimas de tráfico de seres humanos | Artigo 98.º-A | Aprovado(a) por Unanimidade em Comissão |
162 | PAN | Apoio técnico e financeiro ao combate às práticas tradicionais nefastas | Artigo 143.º-A | Aprovado(a) em Comissão |
224 | PAN | Realização de Censos sobre espécies cinegéticas | Artigo 203.º-A | Aprovado(a) em Comissão |
469 | PAN | Apoio à criação de espaços de acolhimento de animais de grande porte e criação do regime jurídico | Artigo 211.º-A | Aprovado(a) em Comissão |
575 | PAN | Alteração ao regime jurídico de identificação dos animais de companhia | Artigo 210.º-A | Aprovado(a) em Comissão |
597 | PAN | Refeições vegetarianas nas cantinas públicas | Artigo 20.º-A | Aprovado(a) em Comissão |
600 | PAN | Gestão sustentável de habitats agrícolas | Artigo 156.º-A | Aprovado(a) em Comissão |
627 | PAN | Interdição de caça em terrenos geridos pela Florestgal | Artigo 248.º-A | Aprovado(a) em Comissão |
786 | PAN | Apoios ao investimento para a agricultura biológica | Artigo 156.º-A | Aprovado(a) em Comissão |
793 | PAN | Programa de monitorização, gestão e remoção de resíduos de artes de pesca | Artigo 208.º-A | Aprovado(a) em Comissão |
1072 | PAN | Incentivo à plantação de espécies autóctones | Artigo 196.º-A | Aprovado(a) em Comissão |
1075 | PAN | Requalificação e Musealização da Casa do Passal | Artigo 168.º-A | Aprovado(a) em Comissão |
1179 | PAN | Resposta Integrada de Apoio à Vítima | Artigo 99.º-A | Aprovado(a) por Unanimidade em Comissão |
1209 | PAN | Interdição da utilização de chumbo nas munições da atividade cinegética | Artigo 203.º-A | Aprovado(a) em Comissão |
1231 | PAN | Combate à pobreza energética e adaptação das habitações às alterações climáticas | Artigo 195.º-A | Aprovado(a) em Comissão |
1298 | PAN | Reforço das medidas de segurança em contexto universitário | Artigo 171.º-A | Aprovado(a) Parcialmente em Comissão |
1302 | PAN | Transparência na execução do Orçamento do Estado | Artigo 262.º-A | Aprovado(a) em Comissão |
1361 | PAN | Incentivo aos hábitos de leitura nos jovens adultos | Artigo 168.º-A | Aprovado(a) em Comissão |
1387 | PAN | Centros de Recuperação de Animais Selvagens | Artigo 203.º-A | Aprovado(a) em Comissão |
1389 | PAN | Transparência do financiamento público a associações e demais entidades de direito privado | Artigo 12.º-A | Aprovado(a) por Unanimidade em Comissão |
1394 | PAN | Nomeação de médicos veterinários municipais | Artigo 211.º-A | Aprovado(a) em Comissão |
1401 | PAN | Alteração ao Estatuto dos Benefícios Fiscais | N.º 2, Artigo 240.º | Aprovado(a) em Comissão |
1406 | PAN | Contratação de intérpretes de Língua Gestual Portuguesa | Artigo 39.º-A | Aprovado(a) em Comissão |
1441 | PAN | Atlas de risco das alterações climáticas | Artigo 196.º-A | Aprovado(a) em Comissão |
1447 | PAN | Criação de uma Rede Nacional de Bancos de Leite Materno | Artigo 183.º-A | Aprovado(a) em Comissão |
1459 | PAN | Criação de um plano de ação “rios livres” | Artigo 196.º-A | Aprovado(a) em Comissão |
1461 | PAN | Reforço da carreira de Vigilantes da Natureza | Artigo 154.º-A | Aprovado(a) em Comissão |
1467 | PAN | Centros de recolha oficial de animais, apoio à esterilização e à promoção do bem-estar animal | Alínea c), N.º 3, Artigo 210.º | Aprovado(a) em Comissão |
1468 | PAN | Centros de recolha oficial de animais, apoio à esterilização e à promoção do bem-estar animal | Subalínea ii), Alínea c), N.º 1, Artigo 210.º | Aprovado(a) em Comissão |
1469 | PAN | Estratégia Nacional para a Mobilidade Ativa Ciclável 2020-2030 | N.º 1, Artigo 200.º | Aprovado(a) em Comissão |
1470 | PAN | Programa de Apoio à Redução Tarifária nos transportes públicos | N.º 3, Artigo 191.º | Aprovado(a) em Comissão |
PSD: 3 aprovadas.
GP | IniTitle | VoteDesc | State | |
---|---|---|---|---|
53 | PSD | Suspensão da fixação de contingente global para efeitos de concessão de autorização de residência | Artigo 139.º | Aprovado(a) em Comissão |
710 | PSD | Alteração ao Código do Imposto do Selo | Artigo 231.º | Aprovado(a) por Unanimidade em Comissão |
724 | PSD | Reforço do combate à corrupção, fraude e criminalidade económico-financeira | Alínea a), N.º 1, Artigo 24.º | Aprovado(a) por Unanimidade em Comissão |
IL: 3 aprovadas.
GP | IniTitle | VoteDesc | State | |
---|---|---|---|---|
159 | IL | Antecipação das decisões sobre atribuição de bolsas de estudo no Ensino Superior | Artigo 172.º-A | Aprovado(a) Parcialmente em Plenário |
783 | IL | Reforço da formação para o combate à violência doméstica e no namoro | N.º 4, Artigo 47.º | Aprovado(a) por Unanimidade em Comissão |
785 | IL | Reforço da formação dos magistrados para o combate aos crimes contra a liberdade e autodeterminação sexual | Artigo 47.º-A | Aprovado(a) por Unanimidade em Comissão |
L: 13 aprovadas.
GP | IniTitle | VoteDesc | State | |
---|---|---|---|---|
253 | L | Estudo sobre impacto da menstruação no trabalho e na qualidade de vida e em Portugal | Artigo 143.º-A | Aprovado(a) em Comissão |
262 | L | Reforço das juntas médicas | Artigo 112.º-A | Aprovado(a) por Unanimidade em Comissão |
454 | L | Reconversão de veículos a combustão para utilização de energias limpas | Artigo 198.º-A | Aprovado(a) em Comissão |
470 | L | Formação sobre questões e identidades LGBTQIA+ | Artigo 178.º-B | Aprovado(a) em Comissão |
496 | L | Alteração à lista I anexa ao Código do Imposto sobre o Valor Acrescentado | Artigo 227.º-B | Aprovado(a) em Comissão |
632 | L | Formação em Direitos Humanos e em acolhimento de refugiados e migrantes | Artigo 47.º-A | Aprovado(a) em Comissão |
1471 | L | Licença para formação | Artigo 99.º-B | Aprovado(a) em Plenário |
1472 | L | Alargamento do subsídio de desemprego | Artigo 99.º-A | Aprovado(a) em Plenário |
1473 | L | Corpo da Guarda Prisional | N.º 2, Artigo 33.º | Aprovado(a) em Comissão |
1474 | L | Admissões nas forças e serviços de segurança | N.º 2, Artigo 31.º | Aprovado(a) em Comissão |
1482 | L | Fundo Ambiental | N.º 3, Artigo 194.º | Aprovado(a) em Comissão |
1484 | L | Eficiência energética e conforto térmico | Artigo 194.º-A | Aprovado(a) em Comissão |
1487 | L | Novos modelos de organização do trabalho | Artigo 177.º-A | Aprovado(a) em Comissão |
BE: 2 aprovadas.
GP | IniTitle | VoteDesc | State | |
---|---|---|---|---|
429 | BE | Medidas para combater a pobreza menstrual | Artigo 180.º-A | Aprovado(a) Parcialmente em Comissão |
617 | BE | Programa de promoção do Estatuto dos Profissionais da Área da Cultura | Artigo 168.º-A | Aprovado(a) em Comissão |
SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS: 5 aprovadas.
GP | IniTitle | VoteDesc | State | |
---|---|---|---|---|
494 | SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS | Alteração ao Código dos Impostos Especiais de Consumo | Aprovado(a) em Comissão | |
522 | SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS | Imputação de Receitas Fiscais às Regiões Autónomas | Artigo 62.º-A | Aprovado(a) por Unanimidade em Comissão |
549 | SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS | Limites máximos para a concessão de garantias | N.º 8, Artigo 123.º | Aprovado(a) em Comissão |
1323 | SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS | Norma revogatória e de produção de efeitos em matéria fiscal | N.º 6, Artigo 261.º | Aprovado(a) em Comissão |
1324 | SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS | Alteração ao Estatuto dos Benefícios Fiscais | Aprovado(a) em Comissão |
PCP: 1 aprovadas.
GP | IniTitle | VoteDesc | State | |
---|---|---|---|---|
1183 | PCP | Preferência de venda de imóveis a Autarquias Locais | Artigo 205.º-A | Aprovado(a) Parcialmente em Comissão |
10.2.2. Propostas rejeitadas¶
Da mesma forma podemos obter a lista de propostas rejeitas, por partido.
10.3. As votações¶
Até agora contabilizámos as propostas de alteração e o seu resultado; se em geral existe uma votação por proposta de alteração isso nem sempre acontece: existem propostas de alteração que dão origem a mais que uma votação. As votações contêm informação adicional que é interessante para de determinar de forma directa o teor das propostas (nomeadamente o título) e também a forma como os diferentes partidos e deputados votaram: se ao nível das propostas temos o resultado final, com as votações podemos saber como atingiram esse fim.
Após processarmos as votações enriquecemos o dataframe com informação adicional. do qual a seguinte selecção é um exemplo: note-se o maior numero de colunas com informação adicional sobre cada votação.
#df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
oe_dfr = oe_df.rename(columns={'Partido Socialista': 'PS',
'Partido Social Democrata': 'PSD',
'Bloco de Esquerda': 'BE',
'Partido Comunista Português': 'PCP',
'Pessoas-Animais-Natureza': 'PAN',
'Chega': 'CH',
'Iniciativa Liberal':'IL',
'Livre':'L',
})
oe_dfr.head()
ID | Nr | Date | Domain | Type | State | GP | IniTitle | VoteDesc | PS | ... | IL | PCP | BE | PAN | V_Date | Result | L | PATRÍCIA DANTAS(PSD) | SÉRGIO MARQUES(PSD) | SARA MADRUGA DA COSTA(PSD) | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 17153 | 1398C | 13/05/2022 20:27:00 | None | Aditamento (Artigo PPL) | Rejeitado(a) em Comissão | PSD | Criação de um Fundo de Garantia Mútua para o S... | Artigo 177.º-A: Criação de um Fundo de Garanti... | Contra | ... | Contra | Abstenção | Abstenção | Favor | 24/05/2022 00:00:00 | Rejeitado(a) | NaN | NaN | NaN | NaN |
1 | 17202 | 1396C-2 | 13/05/2022 20:14:00 | None | Aditamento (Números e Alíneas) | Aprovado(a) em Comissão | PS | Utentes inscritos por médico de família | NaN | Favor | ... | Abstenção | Favor | Abstenção | Favor | 24/05/2022 00:00:00 | Aprovado(a) | NaN | NaN | NaN | NaN |
2 | 17202 | 1396C-2 | 13/05/2022 20:14:00 | None | Aditamento (Números e Alíneas) | Aprovado(a) em Comissão | PS | Utentes inscritos por médico de família | NaN | Favor | ... | Abstenção | Favor | Abstenção | Favor | 24/05/2022 00:00:00 | Aprovado(a) | NaN | NaN | NaN | NaN |
3 | 17202 | 1396C-2 | 13/05/2022 20:14:00 | None | Aditamento (Números e Alíneas) | Aprovado(a) em Comissão | PS | Utentes inscritos por médico de família | NaN | Favor | ... | Abstenção | Favor | Abstenção | Favor | 24/05/2022 00:00:00 | Aprovado(a) | NaN | NaN | NaN | NaN |
4 | 17202 | 1396C-2 | 13/05/2022 20:14:00 | None | Aditamento (Números e Alíneas) | Aprovado(a) em Comissão | PS | Utentes inscritos por médico de família | NaN | Favor | ... | Abstenção | Favor | Abstenção | Favor | 24/05/2022 00:00:00 | Aprovado(a) | NaN | NaN | NaN | NaN |
5 rows × 22 columns
Para a análise das votações escolhemos um subconjunto alargado dos autores das propostas, isto porque as propostas de deputados individuais ou em grupo necessitaria de um tratamento mais complexo: consideramos todos os grupos parlamentos e deputados únicos de partido (Livre).
O resultado é uma tabela com a indicação do autor da proposta onde se integra a votação e os votos dos partidos.
mycol = ['GP', 'BE', 'PCP','L','PS', 'PAN', 'PSD','IL', 'CH' ]
parties = ['BE', 'PCP','L','PS', 'PAN','PSD','IL', 'CH']
df=oe_dfr
submissions_ini = df[mycol]
submissions_ini.head()
GP | BE | PCP | L | PS | PAN | PSD | IL | CH | |
---|---|---|---|---|---|---|---|---|---|
0 | PSD | Abstenção | Abstenção | NaN | Contra | Favor | Favor | Contra | Contra |
1 | PS | Abstenção | Favor | NaN | Favor | Favor | Abstenção | Abstenção | Favor |
2 | PS | Abstenção | Favor | NaN | Favor | Favor | Abstenção | Abstenção | Favor |
3 | PS | Abstenção | Favor | NaN | Favor | Favor | Abstenção | Abstenção | Favor |
4 | PS | Abstenção | Favor | NaN | Favor | Favor | Abstenção | Abstenção | Favor |
Com esta informação é possível determinar os padrões de votação; o diagrama seguinte mostra a relação entre cada par de partidos: no eixo horizontal quem propõe, e no vertical como votaram:
parties = ['BE', 'PCP','PS', 'PAN','PSD', 'IL','CH']
gpsubs = submissions_ini
cmap=ListedColormap(sns.color_palette("pastel").as_hex())
colors=["#DFE38C","#F59B9B","black","#7FE7CC" ]
cmap = ListedColormap(colors)
spn = 0
fig, axes = plt.subplots(nrows=7, ncols=7, figsize=(20, 20))
axes = axes.ravel()
for party in parties:
for p2 in parties:
sns.set_style("white")
subp = gpsubs[gpsubs['GP'] == p2][[party]]
sp = subp.fillna("Ausência").apply(pd.Series.value_counts)
d = pd.DataFrame(columns=["GP","Abstenção", "Contra", "Ausência","Favor"]).merge(sp.T, how="right").fillna(0)
d["GP"] = party
d = d.set_index("GP")
d = d[["Abstenção", "Contra", "Ausência","Favor"]]
if p2 != party:
sns.despine(left=True, bottom=True)
if spn < 8:
d.plot(kind='barh', stacked=True,width=400,colormap=cmap, title=p2,use_index=False,ax=axes[spn])
else:
d.plot(kind='barh', stacked=True,width=400,colormap=cmap,use_index=False,ax=axes[spn])
axes[spn].get_legend().remove()
plt.ylim(-4.5, axes[spn].get_yticks()[-1] + 0.5)
else:
axes[spn].set_xticks([])
#d.plot(kind='barh', stacked=True,width=400,colormap=cmap,use_index=False,ax=axes[spn])
#axes[spn].get_legend().remove()
if spn < 7:
axes[spn].set_title(p2)
axes[spn].set_yticks([])
## Why? Who knows? Certainly not me. This is likely a side-effect of using a single axis through .ravel
if spn%7 == 0:
if spn != 0:
text = axes[spn].text(-30,0,party,rotation=90)
else:
text = axes[spn].text(-0.17,0.5,party,rotation=90)
#print(party, p2)
#print(d)
#print("-------------------------_")
spn += 1
#axes[11].set_axis_off()
text = axes[0].text(4,1.3,"Quem propôs",rotation=0,fontsize=22)
text = axes[0].text(-0.4,-4,"Como votaram",rotation=90,fontsize=22)
#fig.tight_layout()
plt.show()
Uma outra visualização, menos condensada mas com maior clareza quantitativa: para cada partido é criado um gráfico de barras, ordenado pelos votos favoráveis, com comportamento de votos dos restantes para com as suas propostas. Incluimos aqui o Livre para que possa ser analisada a sua tendência de voto, apesar do número total ser, como se vê, significativamente inferior (algo que já tinhamos alertado para o OE 2021 em relação ao PEV).
from IPython.display import display
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
import matplotlib as mpl
import seaborn as sns
from matplotlib import cm
parties = ['BE', 'PCP', 'L','PS', 'PAN','PSD','IL', 'CH']
ndf = pd.DataFrame()
#submissions_ini_nu = submissions_ini.loc[submissions_ini['unanime'] != "unanime"]
gpsubs = submissions_ini
cmap=ListedColormap(sns.color_palette("pastel").as_hex())
colors=["#fdfd96", "black","#ff6961","#77dd77", ]
cmap = ListedColormap(colors)
#spn = 0
#axes = axes.ravel()
for party in parties:
sns.set_style("whitegrid")
subp = gpsubs[gpsubs['GP'] == party]
sp = subp[parties].apply(pd.Series.value_counts).fillna(0).drop([party],axis=1)
sp = sp.sort_values(by=['Favor','Abstenção','Contra'], ascending=False, axis=1)
d = sp.T
f = plt.figure()
plt.title(party)
d.plot(kind='bar', ax=f.gca(), stacked=True, title=party, colormap=cmap,)
plt.legend(loc='center left', bbox_to_anchor=(0.7, 0.9),)
plt.show()
plt.show()
10.4. Dendograma e distância¶
Com base nas votações obtemos a distância euclideana entre todos os partidos (a distância entre todos os pares possíveis, considerado todas as votações), e com base nela um dendograma que indica a distância entre eles; note-se pelos diagramas acima que o número de votações do Livre é várias ordens de magnitude inferior aos restantes. A opção aqui foi removermos o Livre da análise por considerarmos que o resultado seria muito pouco representativo (e possivelmente enganador) - em todo o caso, é uma opção subjectiva.
from scipy.spatial.distance import squareform
from scipy.spatial.distance import pdist
import scipy.spatial as sp, scipy.cluster.hierarchy as hc
import numpy as np
votes_hm = oe_dfr[['BE', 'PCP', 'PS', 'PAN', 'PSD','IL', 'CH']]
votes_hmn = votes_hm.replace(["Favor", "Contra", "Abstenção", "Ausente"], [1,-1,0,0]).fillna(0)
## Transpose the dataframe used for the heatmap
votes_t = votes_hmn.transpose()
## Determine the Eucledian pairwise distance
## ("euclidean" is actually the default option)
pwdist = pdist(votes_t, metric='euclidean')
## Create a square dataframe with the pairwise distances: the distance matrix
distmat = pd.DataFrame(
squareform(pwdist), # pass a symmetric distance matrix
columns = votes_t.index,
index = votes_t.index
)
## Normalise by scaling between 0-1, using dataframe max value to keep the symmetry.
## This is essentially a cosmetic step to
distmat_mm=((distmat-distmat.min().min())/(distmat.max().max()-distmat.min().min()))*1
## Affinity matrix
affinmat_mm = pd.DataFrame(1-distmat_mm, distmat.index, distmat.columns)
#pd.DataFrame(distmat_mm, distmat.index, distmat.columns)
## Perform hierarchical linkage on the distance matrix using Ward's method.
distmat_link = hc.linkage(pwdist, method="ward", optimal_ordering=True )
sns.clustermap(
distmat,
annot = True,
cmap=sns.color_palette("Greens_r"),
linewidth=1,
#standard_scale=1,
row_linkage=distmat_link,
col_linkage=distmat_link,
figsize=(8,8)).fig.suptitle('Votações do OE 2022: Clustermap')
plt.show()
BE | PCP | PS | PAN | PSD | IL | CH | |
---|---|---|---|---|---|---|---|
BE | 1539 | 1043 | 323 | 1045 | 420 | 488 | 647 |
PCP | 1043 | 1539 | 391 | 797 | 476 | 467 | 536 |
PS | 323 | 391 | 1539 | 256 | 520 | 454 | 295 |
PAN | 1045 | 797 | 256 | 1539 | 428 | 576 | 780 |
PSD | 420 | 476 | 520 | 428 | 1539 | 729 | 596 |
IL | 488 | 467 | 454 | 576 | 729 | 1539 | 709 |
CH | 647 | 536 | 295 | 780 | 596 | 709 | 1539 |
10.5. MDS: Multidimensional scaling¶
Tendo como base os votos no OE podemos utilizar a mesma técnica que empregámos na análise de toda a legislatura. Para identificar grupos usamos (mais uma vez, como no trabalho original, e presente nos Apêndices) Spectral scaling, definindo 4 grupos.
sc = SpectralClustering(3, affinity="precomputed",random_state=2020).fit_predict(affinmat_mm)
sc_dict = dict(zip(distmat,sc))
pd.DataFrame.from_dict(sc_dict, orient='index', columns=["Group"]).T
BE | PCP | PS | PAN | PSD | IL | CH | |
---|---|---|---|---|---|---|---|
Group | 1 | 1 | 0 | 1 | 2 | 2 | 2 |
O resultado aparente resultar numa divisão “esquerda/centro/direita”, com o PS numa posição individual; tal como referido não será indiferente o facto do PS ser o partido que suporta o Governo, ainda para mais num contexto de maioria absoluta onde o PS é quase sempre o partido que mais vezes vota contra as propostas de qualquer partido.
Esta separação pode ser vista também em termos de agrupamento e proximidade relativa:
from sklearn.manifold import MDS
import random
mds = MDS(n_components=2, dissimilarity='precomputed',random_state=2022, n_init=100, max_iter=1000)
## We use the normalised distance matrix but results would
## be similar with the original one, just with a different scale/axis
results = mds.fit(distmat_mm.values)
coords = results.embedding_
sns.set()
sns.set_style("ticks")
fig, ax = plt.subplots(figsize=(8,8))
fig.suptitle('2022 Budget Approval', fontsize=14)
ax.set_title('MDS with Spectrum Scaling clusters (2D)')
for label, x, y in zip(distmat_mm.columns, coords[:, 0], coords[:, 1]):
ax.scatter(x, y, c = "C"+str(sc_dict[label]), s=250)
ax.axis('equal')
ax.annotate(label,xy = (x-0.02, y+0.025))
plt.show()
Este mapa é bastante semelhante do do OE anterior, com uma separação esquerda/direita com o PS a uma distância semelhante de ambos os grupos.
Uma visualização em 3D permtie uma visão diferente, com mais uma dimensão:
mds = MDS(n_components=3, dissimilarity='precomputed',random_state=1234, n_init=100, max_iter=1000)
results = mds.fit(distmat.values)
parties = distmat.columns
coords = results.embedding_
import plotly.graph_objects as go
# Create figure
fig = go.Figure()
# Loop df columns and plot columns to the figure
for label, x, y, z in zip(parties, coords[:, 0], coords[:, 1], coords[:, 2]):
fig.add_trace(go.Scatter3d(x=[x], y=[y], z=[z],
text=label,
textposition="top center",
mode='markers+text', # 'lines' or 'markers'
name=label))
fig.update_layout(
width = 700,
height = 700,
title = "OE 2021: 3D MDS",
template="plotly_white",
showlegend=False
)
fig.update_yaxes(
scaleanchor = "x",
scaleratio = 1,
)
plot(fig, filename = 'oe_3d_mds.html')
display(HTML('oe_3d_mds.html'))
10.6. Palavras finais¶
Esta análise demonstra como a utilização de dados abertos pode, uma vez mais, facilitar a análise da actividade parlamentar por parte dos eleitores; as ilações políticas que se podem tirar são variadas e, se é verdade que existem limitações várias a ter em conta, tal como no trabalho relativo à análise das votações parlamentares parecem emergir padrões que parecem reflectir tendências e agrupamentos que estão presentes no discurso político.
Sugere-se uma leitura comparada da análise feita, exactamente nos mesmos moldes, para o OE de 2021: se aqui e ali formos fazendo referências ao que mudou e se manteve, mais há por explorar nessa dimensão comparativa.