11. Orçamento de Estado de 2023

Considerar todas as coisas como accidentes de uma illusão irracional, embora cada uma se apresente reacional para si mesma - nisto reside o princípio da sabedoria. Mas estes princípio da sabedoria não é mais que metade do entendimento das mesmas coisas. A outra parte do entendimento consiste no conhecimento d’essas coisas, na participação intima d’ellas.

—Fernando Pessoa, Esp. 54A-p, in Yvette Centeno «Fernando Pessoa e a Filosofia Hermética»

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 2023 é o segundo aprovado pelo governo de maioria absoluta do Partido Socialista, emergido das eleições anecipadas de Janeiro de 2022.

11.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)

11.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/OE2023_12_0.png
oe_df.groupby('GP')[['ID']].count().sort_values("ID", ascending=False)
ID
GP
CH 506
PCP 425
PAN 263
PSD 217
BE 156
L 141
PS 73
SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS 46
IL 35

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 Aprovado(a) Parcialmente em Comissão Aprovado(a) em Comissão Aprovado(a) em Plenário Aprovado(a) por Unanimidade em Comissão Aprovado(a) por Unanimidade em Plenário Não Admitida Rejeitado(a) em Comissão Rejeitado(a) em Plenário Retirado(a)
GP
BE 1 5 0 0 0 0 148 2 0
CH 0 0 0 0 0 0 489 11 6
IL 0 1 0 1 0 0 30 2 1
L 4 19 0 3 1 0 110 1 3
PAN 2 26 0 0 0 0 224 2 9
PCP 2 1 0 1 0 1 407 7 6
PS 0 59 11 2 0 0 0 0 1
PSD 1 5 0 1 0 0 194 16 0
SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS 0 0 0 0 0 0 44 1 1

Uma das diferenças que pode ser observada é a passagem do Chega para o primeiro lugar, em termos de número de propostas. Este dado não se deve ao diminuir das propostas dos outros partidos (o PCP, que em OEs anteriores foi quem mais propostas apresentou, tem neste OE quase 100 propostas a mais que no anterior), mas pelo crescimento das do Chega, que passa de 309 para 506).

O Livre aumenta também significativamente o número das suas propostas (de 84 para 141), enquanto a Iniciativa Liberal reduz de forma relevante (de 127 para 35). Os restantes (PSD, BE, PAN) )apresentam valores semelhantes

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 Comissão',
                                         '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 Comissão Rejeitado(a) em Plenário Rejeitado(a) em Comissão
GP
BE 0 0 0 5 1 2 148
CH 0 0 0 0 0 11 489
IL 0 1 0 1 0 2 30
L 1 3 0 19 4 1 110
PAN 0 0 0 26 2 2 224
PCP 0 1 0 1 2 7 407
PS 0 2 11 59 0 0 0
PSD 0 1 0 5 1 16 194
SÉRGIO MARQUES, SARA MADRUGA DA COSTA, PATRÍCIA DANTAS 0 0 0 0 0 1 44

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) 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/OE2023_19_0.png

Tendo em conta o resultado das propostas, alguns comentários:

  • O maior número de propostas submetidas e também rejeitadas é do Chega, que não consegue aprovação de nenhuma proposta.

  • O Livre e o PAN são os partidos que conseguem taxas de aprovação com alguma relevância.

  • O PCP, com o segundo maior número de propostas, tem uma taxa de aprovação muito reduzida (apenas 4).

  • BE e PSD aprovam ligeiramente mais, mas mesmo assim é residual.

  • IL consegue 2 aprovações.

É, em vários aspectos, um resulta em linha com o orçamento anterior, na forma como a maioria absoluta do PS garante uma taxa de aprovação completa a propostas do PS, bem como uma aparente convergência (dentro do contexto) com PAN e Livre.

11.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: 72  aprovadas.
GP IniTitle VoteDesc State
0 PS Atualização das pensões para 2023 Artigo 150.º-D Aprovado(a) em Plenário
1 PS Concessão e renovação simplificada de autorizações de residência Artigo 150.º-C Aprovado(a) em Comissão
2 PS Transferências para políticas ativas de emprego e formação profissional N.º 3, Artigo 83.º Aprovado(a) em Comissão
4 PS Conclusão da Residência da Escola Superior de Desporto de Rio Maior Artigo 117.º-A Aprovado(a) em Plenário
5 PS Aeroporto da Horta Artigo 46.º-A Aprovado(a) em Comissão
6 PS Alargamento da oferta de Profilaxia Pré Exposição Artigo 124.º-D Aprovado(a) em Comissão
7 PS Integração do Sistema Híbrido de Perfusão Subcutânea Contínua de Insulina no Regime Geral do Medicamento Artigo 124.º-C Aprovado(a) em Comissão
8 PS Alargamento do Programa Nacional de Promoção de Saúde Oral Artigo 124.º-B Aprovado(a) em Comissão
9 PS Comparticipação das fórmulas elementares que se destinem a crianças com alergia às proteínas do leite de vaca Artigo 124.º-A Aprovado(a) em Comissão
15 PS Prorrogação prazo suspensivo de novas licenças para Alojamento Local Artigo 100.º-A Aprovado(a) em Comissão
17 PS Alteração à lei geral tributária Artigo 195.º-A Aprovado(a) em Comissão
19 PS Alteração da Lei n.º 50/2012, de 31 de agosto Artigo 195.º-A Aprovado(a) em Comissão
22 PS Distribuição gratuita de bens de higiene pessoal feminina Artigo 150.º-A Aprovado(a) em Comissão
24 PS Reforço do apoio psicológico nas instituições de ensino Artigo 119.º-A Aprovado(a) por Unanimidade em Comissão
27 PS Transferências orçamentais Verba 106, Anexo I, Artigo 7.º Aprovado(a) em Comissão
28 PS Alteração ao Código do Imposto Municipal sobre Imóveis Artigo 175.º-A Aprovado(a) em Comissão
29 PS Amortização dos contratos de empréstimo Artigo 48.º-A Aprovado(a) em Comissão
81 PS Formação de contratos no âmbito da Jornada Mundial da Juventude 2023 N.º 6, Artigo 106.º Aprovado(a) em Comissão
82 PS Formação de contratos no âmbito da Jornada Mundial da Juventude 2023 N.º 5, Artigo 106.º Aprovado(a) em Comissão
171 PS Alteração ao Estatuto dos Eleitos Locais Artigo 195.º-A Aprovado(a) em Plenário
180 PS Alteração ao Código dos Impostos Especiais de Consumo Aprovado(a) em Comissão
294 PS Alteração em sede de Imposto do Selo Artigo 170.º-A Aprovado(a) em Comissão
298 PS Alteração ao Decreto-Lei n.º 61/2013, de 10 de maio Artigo 188.º-B Aprovado(a) em Comissão
304 PS Alteração ao Código do Imposto do Selo Aprovado(a) em Comissão
305 PS Alteração ao Código do Imposto do Selo Aprovado(a) em Comissão
306 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Coletivas Aprovado(a) em Comissão
307 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Coletivas Aprovado(a) em Comissão
308 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
309 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
310 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
316 PS Alteração ao Decreto-Lei n.º 84/2017, de 21 de julho Artigo 150.º-B Aprovado(a) em Comissão
319 PS Alteração ao Estatuto da Ordem dos Contabilistas Certificados Artigo 150.º-A Aprovado(a) em Comissão
324 PS Alteração à lista I anexa ao Código do Imposto sobre o Valor Acrescentado Artigo 167.º-A Aprovado(a) em Comissão
331 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
333 PS Alteração à Lei n.º 19/2022, de 21 de outubro Artigo 158.º-A Aprovado(a) em Comissão
336 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
338 PS Alteração ao Código Fiscal do Investimento Artigo 177.º-A Aprovado(a) em Comissão
342 PS Disposição transitória em matéria de imposto sobre o rendimento das pessoas coletivas N.º 2, Artigo 160.º Aprovado(a) em Comissão
344 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Coletivas Aprovado(a) em Comissão
345 PS Aditamento ao Estatuto dos Benefícios Fiscais Aprovado(a) em Comissão
346 PS Aditamento ao Estatuto dos Benefícios Fiscais Aprovado(a) em Comissão
353 PS Alteração ao Estatuto dos Benefícios Fiscais Aprovado(a) em Plenário
354 PS Alteração ao Estatuto dos Benefícios Fiscais Aprovado(a) em Plenário
362 PS Reforço do complemento de alojamento para estudantes do ensino superior Artigo 117.º-A Aprovado(a) em Comissão
369 PS Remuneração dos estágios curriculares Artigo 119.º-A Aprovado(a) em Comissão
373 PS Alteração ao Estatuto dos Benefícios Fiscais Aprovado(a) em Comissão
374 PS Alteração ao Estatuto dos Benefícios Fiscais Aprovado(a) em Comissão
379 PS Apoio à Emergência Demográfica Artigo 189.º-A Aprovado(a) em Comissão
387 PS Programa ESCOLHAS Artigo 121.º-A Aprovado(a) em Plenário
394 PS Aditamento ao Decreto-Lei n.º 53-B/2021, de 23 de junho Artigo 43.º-C Aprovado(a) em Comissão
402 PS Prorrogação de efeitos N.º 2, Artigo 198.º Aprovado(a) em Plenário
405 PS Pensão de velhice dos marítimos das embarcações de investigação Artigo 194.º-A Aprovado(a) em Comissão
421 PS Auxílios financeiros e cooperação técnica e financeira N.º 3, Artigo 59.º Aprovado(a) em Plenário
435 PS Estudo e avaliação do custo e da implementação de um plano de contingência no Aeroporto Internacional da Madeira – Cristiano Ronaldo Artigo 43.º-B Aprovado(a) em Plenário
442 PS Novo estabelecimento prisional de S. Miguel Artigo 47.º-A Aprovado(a) em Comissão
446 PS Cadeia de Apoio da Horta Artigo 47.º-B Aprovado(a) em Comissão
448 PS Instituições públicas de ensino superior das regiões autónomas Artigo 47.º-C Aprovado(a) em Plenário
452 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Coletivas Aprovado(a) em Comissão
455 PS Alteração ao Código do Imposto Municipal sobre Imóvei Artigo 175.º-A Aprovado(a) em Comissão
458 PS Produção de efeitos e vigência N.º 3, Artigo 197.º Aprovado(a) em Comissão
459 PS Aditamento à lista I anexa ao Código do Imposto sobre o Valor Acrescentado Artigo 167.º-A Aprovado(a) por Unanimidade em Comissão
464 PS Alteração à lista I anexa ao Código do Imposto sobre o Valor Acrescentado Artigo 167.º-A Aprovado(a) em Comissão
469 PS Norma revogatória Alínea e), Artigo 196.º Aprovado(a) em Comissão
470 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
471 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
472 PS Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Plenário
475 PS Alteração ao Código do Imposto Municipal sobre as Transmissões Onerosas de Imóveis Aprovado(a) em Comissão
476 PS Alteração ao Código do Imposto Municipal sobre as Transmissões Onerosas de Imóveis Aprovado(a) em Comissão
477 PS Alteração ao Código do Imposto Municipal sobre as Transmissões Onerosas de Imóveis Aprovado(a) em Comissão
481 PS Disposições relativas ao financiamento do ensino profissional N.º 1, Artigo 121.º Aprovado(a) em Comissão
485 PS Adaptação das zonas ajardinadas públicas às alterações climáticas Artigo 138.º-B Aprovado(a) em Comissão
487 PS Despoluição da Bacia Hidrográfica do Rio Lis Artigo 138.º-B Aprovado(a) em Comissão
L: 27  aprovadas.
GP IniTitle VoteDesc State
25 L Promoção da Língua Mirandesa (promoçon de la Lhéngua Mirandesa) Artigo 113.º-A Aprovado(a) em Comissão
173 L Promoção do transporte escolar e da mobilidade flexível, polivalente e ecológica Artigo 134.º-B Aprovado(a) em Comissão
174 L Passe Ferroviário Nacional Artigo 134.º-A Aprovado(a) em Comissão
184 L Comparticipação de leites, fórmulas infantis e vacina anti-alérgica Artigo 125.º-B Aprovado(a) em Comissão
187 L Encargos com nutrição entérica e parentérica Artigo 125.º-A Aprovado(a) por Unanimidade em Comissão
190 L Bilha Solidária Artigo 135.º-A Aprovado(a) em Comissão
193 L Disponibilização de bombas de insulina para pessoas com diabetes de tipo 1 Artigo 124.º-A Aprovado(a) por Unanimidade em Comissão
199 L Contratação de recursos humanos para concretização das políticas públicas de habitação Artigo 26.º-E Aprovado(a) Parcialmente em Comissão
203 L Programa 3C - Casa, Conforto e Clima Artigo 138.º-C Aprovado(a) em Comissão
214 L Programa de Mobilidade Sustentável Casa-Trabalho Artigo 141.º-A Aprovado(a) em Comissão
218 L Cartão +Cultura, +Cidadania Artigo 150.º-O Aprovado(a) Parcialmente em Comissão
219 L Combate à Poluição Luminosa Artigo 150.º-W Aprovado(a) Parcialmente em Comissão
222 L Apoio às Cooperativas de Habitação Artigo 150.º-X Aprovado(a) em Comissão
313 L Produção de efeitos e vigência N.º 3, Artigo 197.º Aprovado(a) em Comissão
314 L Complemento especial ao abono de família Artigo 77.º-B Aprovado(a) em Comissão
330 L Estratégia Nacional e Programa para a Remoção de Infraestruturas Hidráulicas obsoletas Artigo 142.º-C Aprovado(a) em Comissão
637 L Base de dados sobre juntas médicas e estudo sobre a dispensa de avaliação Artigo 123.º-B Aprovado(a) em Comissão
704 L Violência Contra Pessoas com Deficiência Artigo 150.º-H Aprovado(a) por Unanimidade em Plenário
743 L Produção de efeitos e vigência N.º 3, Artigo 197.º Aprovado(a) em Comissão
744 L Alteração ao Código do Imposto sobre o Valor Acrescentado Artigo 167.º-K Aprovado(a) em Comissão
872 L Acessibilidade do Portal da Queixa Eletrónica Artigo 149.º-A Aprovado(a) por Unanimidade em Comissão
879 L Estudo sobre Impacto da Menstruação Artigo 150.º-G Aprovado(a) em Comissão
886 L Transferência para o Fundo de Salvaguarda do Património Cultural Artigo 150.º-J Aprovado(a) em Comissão
889 L Atualização do Plano Nacional para o Alojamento no Ensino Superior com a identificação das necessidades dos estudantes com deficiência Artigo 117.º-A Aprovado(a) Parcialmente em Comissão
892 L Livro Branco sobre Trabalho Sexual e Prostituição Artigo 107.º-D Aprovado(a) em Comissão
898 L Alteração à lista I anexa ao Código do Imposto sobre o Valor Acrescentado Artigo 167.º-G Aprovado(a) em Comissão
906 L Formação em Direitos Humanos para Funções de Atendimento ao Público Artigo 32.º-A Aprovado(a) em Comissão
PAN: 28  aprovadas.
GP IniTitle VoteDesc State
70 PAN Plano de Proteção e Despoluição do Rio Paiva Artigo 135.º-A Aprovado(a) em Comissão
74 PAN Plano de Ação Nacional para a Gestão e Conservação de Tubarões e Raias Artigo 143.º-A Aprovado(a) em Comissão
100 PAN Melhoria dos procedimentos consulares no pedido de registo de mudança da menção do sexo e do nome próprio Artigo 142.º-A Aprovado(a) em Comissão
127 PAN Incentivo aos hábitos de leitura nos jovens adultos Artigo 149.º-A Aprovado(a) em Comissão
128 PAN Estudo sobre capturas indevidas de mamíferos e aves marinhas pelas redes de pesca e reforço da monitorização Artigo 139.º-A Aprovado(a) Parcialmente em Comissão
192 PAN Apoios para o arranque e controlo de eucaliptos de crescimento espontâneo Artigo 139.º-A Aprovado(a) em Comissão
271 PAN Gestão sustentável de habitats agrícolas Artigo 139.º-A Aprovado(a) em Comissão
273 PAN Alteração à lista I anexa ao Código do Imposto sobre o Valor Acrescentado Artigo 166.º-A Aprovado(a) em Comissão
390 PAN Estudo sobre o impacto da “Taxa Rosa” em Portugal Artigo 14.º-B Aprovado(a) em Comissão
427 PAN Espaço Gisberta - Resposta Integrada de Apoio à Vítima LGBTI Artigo 14.º-B Aprovado(a) em Comissão
468 PAN Plano Anual de Formação sobre bem-estar animal Artigo 143.º-A Aprovado(a) em Comissão
524 PAN Taxa de carbono sobre as viagens aéreas em aeronaves com capacidade máxima de até 19 lugares Artigo 139.º-A Aprovado(a) em Comissão
820 PAN Centros de recolha oficial de animais, apoio à esterilização e à promoção do bem-estar animal N.º 2, Artigo 143.º Aprovado(a) em Comissão
829 PAN Alteração à lista I anexa ao Código do Imposto sobre o Valor Acrescentado Artigo 166.º-A Aprovado(a) em Comissão
832 PAN Alteração à lista I anexa ao Código do Imposto sobre o Valor Acrescentado Artigo 166.º-A Aprovado(a) em Comissão
1032 PAN Atlas de risco das alterações climáticas Artigo 137.º-A Aprovado(a) em Comissão
1070 PAN Realização de campanha anual de identificação gratuita dos animais de companhia Artigo 143.º-A Aprovado(a) em Comissão
1817 PAN Alteração ao Código do Imposto sobre o Rendimento das Pessoas Coletivas Aprovado(a) em Comissão
1819 PAN Incentivo à introdução no consumo de veículos de baixas emissões Artigo 138.º-A Aprovado(a) Parcialmente em Comissão
1825 PAN Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
1832 PAN Alteração ao Decreto-Lei n.º 15/2022, de 14 de janeiro Artigo 135.º-A Aprovado(a) em Comissão
1835 PAN Alteração à lista I anexa ao Código do Imposto sobre o Valor Acrescentado Artigo 166.º-A Aprovado(a) em Comissão
1836 PAN Centros de recuperação de animais selvagens Artigo 143.º-A Aprovado(a) em Comissão
1853 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 143.º Aprovado(a) em Comissão
1854 PAN Centros de recolha oficial de animais, apoio à esterilização e à promoção do bem-estar animal N.º 6, Artigo 143.º Aprovado(a) em Comissão
1855 PAN Centros de recolha oficial de animais, apoio à esterilização e à promoção do bem-estar animal Alínea b), N.º 1, Artigo 143.º Aprovado(a) em Comissão
1856 PAN Centros de recolha oficial de animais, apoio à esterilização e à promoção do bem-estar animal Alínea a), N.º 1, Artigo 143.º Aprovado(a) em Comissão
1857 PAN Combate à pobreza menstrual Artigo 14.º-A Aprovado(a) em Comissão
PCP: 4  aprovadas.
GP IniTitle VoteDesc State
265 PCP Alteração ao Código do Imposto sobre o Valor Acrescentado Artigo 166.º-A Aprovado(a) por Unanimidade em Comissão
531 PCP Eliminação de barreiras arquitetónicas Artigo 76.º-A Aprovado(a) Parcialmente em Comissão
659 PCP Atualização da caraterização e diagnóstico do estado de conservação dos valores naturais em áreas protegidas Artigo 154.º-A Aprovado(a) em Comissão
1505 PCP Proteção das vítimas de violência doméstica (Alteração à Lei n.º 112/ 2009, de 16 de setembro) Artigo 192.º-A Aprovado(a) Parcialmente em Comissão
PSD: 7  aprovadas.
GP IniTitle VoteDesc State
335 PSD Regime extraordinário de apoio a encargos suportados na produção agrícola Alínea d), N.º 1, Artigo 164.º Aprovado(a) em Comissão
585 PSD Fiscalização prévia do Tribunal de Contas N.º 5, Artigo 147.º Aprovado(a) em Comissão
837 PSD Alteração à Lei n.º 19/2022, de 21 de outubro Artigo 179.º-A Aprovado(a) em Comissão
853 PSD Alteração ao Código do Imposto sobre o Rendimento das Pessoas Singulares Aprovado(a) em Comissão
854 PSD Alteração ao Código do Imposto sobre o Rendimento das Pessoas Coletivas Aprovado(a) em Comissão
1161 PSD Reforço de meios para a prevenção e combate ao tráfico de seres humanos Artigo 18.º-B Aprovado(a) Parcialmente em Comissão
1164 PSD Reforço da prevenção e combate à violência contra as pessoas idosas Artigo 18.º-A Aprovado(a) por Unanimidade em Comissão
BE: 6  aprovadas.
GP IniTitle VoteDesc State
662 BE Revisão das taxas de retenção para trabalhadores independentes Artigo 151.º-A Aprovado(a) Parcialmente em Comissão
667 BE Inquérito nacional de caraterização sociodemográfica da população com deficiência Artigo 150.º-C Aprovado(a) em Comissão
710 BE Alteração ao Código Civil Artigo 191.º-A Aprovado(a) em Comissão
1037 BE Alteração ao Código do Imposto Municipal sobre as Transmissões Onerosas de Imóveis Aprovado(a) em Comissão
1038 BE Norma revogatória de produção de efeitos em matéria fiscal Artigo 190.º-A Aprovado(a) em Comissão
1124 BE Concretização da Estratégia Nacional de Compras Públicas Ecológicas Artigo 14.º-A Aprovado(a) em Comissão
IL: 2  aprovadas.
GP IniTitle VoteDesc State
738 IL Regulamentação dos Sistemas de Depósito e Reembolso Artigo 138.º-A Aprovado(a) em Comissão
1014 IL Antecipação dos resultados do Concurso Nacional de Acesso e Ingresso no Ensino Superior Público Artigo 121.º-A Aprovado(a) por Unanimidade em Comissão

11.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 PSD CH IL PCP BE PAN L V_Date Result PATRÍCIA DANTAS(PSD)
0 19078 1763C 15/11/2022 15:47:00 None Aditamento (Artigo PPL) Aprovado(a) em Plenário PS Atualização das pensões para 2023 Artigo 150.º-D: Atualização das pensões para 2023 Favor Abstenção Contra Abstenção Abstenção Abstenção Abstenção Abstenção 23/11/2022 00:00:00 Aprovado(a) NaN
1 19078 1763C 15/11/2022 15:47:00 None Aditamento (Artigo PPL) Aprovado(a) em Plenário PS Atualização das pensões para 2023 Artigo 150.º-D: Atualização das pensões para 2023 Favor Abstenção Contra Abstenção Abstenção Abstenção Abstenção Abstenção 23/11/2022 00:00:00 Aprovado(a) NaN
2 19077 1762C 15/11/2022 15:45:00 None Aditamento (Artigo PPL) Aprovado(a) em Comissão PS Concessão e renovação simplificada de autoriza... Artigo 150.º-C: Concessão e renovação simplifi... Favor Favor Contra Abstenção Favor Favor Favor Favor 23/11/2022 00:00:00 Aprovado(a) NaN
3 19021 1761C 11/11/2022 21:24:00 None Aditamento (Números e Alíneas) Aprovado(a) em Comissão PS Transferências para políticas ativas de empreg... NaN Favor Abstenção Favor Favor Abstenção Abstenção Favor Favor 21/11/2022 00:00:00 Aprovado(a) Contra
4 19020 1760C 11/11/2022 21:21:00 None Aditamento (Artigo PPL) Rejeitado(a) em Comissão PAN Atualização da lista de espécies em risco e em... Artigo 139.º-A: Atualização da lista de espéci... Contra Abstenção Abstenção Favor Favor Favor Favor Favor 21/11/2022 00:00:00 Rejeitado(a) NaN

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 PS Abstenção Abstenção Abstenção Favor Abstenção Abstenção Abstenção Contra
1 PS Abstenção Abstenção Abstenção Favor Abstenção Abstenção Abstenção Contra
2 PS Favor Favor Favor Favor Favor Favor Abstenção Contra
3 PS Abstenção Abstenção Favor Favor Favor Abstenção Favor Favor
4 PAN Favor Favor Favor Contra Favor Abstenção Favor Abstenção

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','L','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=8, ncols=8, 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 < 9:
                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 < 8:
                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%8 == 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/OE2023_29_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.

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/OE2023_31_0.png _images/OE2023_31_1.png _images/OE2023_31_2.png _images/OE2023_31_3.png _images/OE2023_31_4.png _images/OE2023_31_5.png _images/OE2023_31_6.png _images/OE2023_31_7.png

11.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.

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', 'L','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 2023: Clustermap')

plt.show()
_images/OE2023_33_0.png
  BE PCP L PS PAN PSD IL CH
BE 1961 1340 1387 362 1360 600 688 871
PCP 1340 1961 1430 382 1044 701 655 649
L 1387 1430 1961 301 1285 687 635 670
PS 362 382 301 1961 279 459 602 294
PAN 1360 1044 1285 279 1961 673 766 964
PSD 600 701 687 459 673 1961 980 819
IL 688 655 635 602 766 980 1961 863
CH 871 649 670 294 964 819 863 1961
_images/OE2023_36_0.png

11.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 L PS PAN PSD IL CH
Group 1 1 1 0 1 2 2 2

São resultados, mais uma vez, idênticos ao da votação anterior, com o PS individualizado e separado de um grupo à sua esquerda, e outro à sua direita.

from sklearn.manifold import MDS
import random
mds = MDS(n_components=2, dissimilarity='precomputed',random_state=60, 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('2023 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/OE2023_41_0.png

Também o MDS é muito semelhante ao da votação anterior

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 2023: 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'))

11.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 os OEs anteriores: se aqui e ali formos fazendo referências ao que mudou e se manteve, mais há por explorar nessa dimensão comparativa.