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:

  1. Quantidade e tipo de propostas feitas, e resultado das mesmas

  2. Apoio para as propostas de cada partido

  3. Matriz de distância entre todos os partidos e dendograma

  4. 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:

_images/OE2022_12_0.png
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()
_images/OE2022_19_0.png

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()
_images/OE2022_31_0.png

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()
_images/OE2022_33_0.png _images/OE2022_33_1.png _images/OE2022_33_2.png _images/OE2022_33_3.png _images/OE2022_33_4.png _images/OE2022_33_5.png _images/OE2022_33_6.png _images/OE2022_33_7.png

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()
_images/OE2022_35_0.png
  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
_images/OE2022_38_0.png

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()
_images/OE2022_44_0.png

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.