5. Quem suportou quem: os votos na generalidade¶
“Just the place for a Snark!” the Bellman cried,
As he landed his crew with care;
Supporting each man on the top of the tide
By a finger entwined in his hair.
“Just the place for a Snark! I have said it twice:
That alone should encourage the crew.
Just the place for a Snark! I have said it thrice:
What I tell you three times is true.”—Lewis Carrol, «The Hunting of the Snark»
5.1. Metodologia¶
A obtenção dos dados e parte substancial do seu tratamento é idêntica a utilizada nas outras análises, com uma alteração que permite a obtenção de uam nova dimensão de dados, muito semelhante à utilizada na análise do Orçamento de Estados: o perfil de votações tendo em conta a origem da proposta.
Se no Orçamento de Estado esta informação é simples de obter, nas iniciativas parlamentares é menos óbvia: uma votação associada a uma iniciativa de determinado partido não pode ser classificada como sendo uma votação sobre algo proposto por esse mesmo partido. A razão é simples: as votações podem ser, por exemplo, sobre propostas de alteração, e estas podem ter múltiplas origens.
Existem duas soluções para esta questão:
Proceder a uma análise textual que permita identificar a origem da votação em causa, isto porque a única forma de proceder à sua identificação é pelo tratamento de um campo em texto livre (por exemplo, “Proposta de alteração de XXX - artigo 40”, mas com várias permutações).
Isolar uma determinada categoria de votação que permita a imputação de autoria de forma directa.
Optámos pela opção 2, pela maior fiabilidade dos resultados, sob a forma de isolamento das Votações na Generalidade - que são, das que cumprem o requisito, as que são em amior número, e também aquelas que à partida melhor representam os projectos postos a votação (por não serem alvo de alterações na especialdiade que podem ser substanciais).
5.2. As propostas: quantidade, aprovações, rejeições¶
O total de propostas votadas na generalidade, com a identificação das aprovadas e rejeitadas, é o seguinte:
ct = pd.crosstab(l14af.GP, l14af.resultado)
ct["Total"] = ct["Aprovado"] + ct["Rejeitado"]
ct.sort_values(by=['Total'], axis=0, ascending=False)
resultado | Aprovado | Rejeitado | Total |
---|---|---|---|
GP | |||
BE | 108 | 138 | 246 |
PCP | 87 | 151 | 238 |
PAN | 68 | 96 | 164 |
PEV | 53 | 86 | 139 |
PSD | 93 | 21 | 114 |
CDS-PP | 54 | 49 | 103 |
PS | 59 | 1 | 60 |
IL | 11 | 28 | 39 |
CH | 1 | 29 | 30 |
CR | 14 | 14 | 28 |
L/JKM | 9 | 14 | 23 |
ct.sort_values(by=['Total'], axis=0, ascending=False).drop("Total", axis=1).plot(kind="bar", stacked=True)
plt.show()
Com esta informação, e de forma muito semelhante à utilizada para determinar os apoios às propostas de alteração do Orçamento de Estado, é 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:
import seaborn as sns
from matplotlib.colors import ListedColormap
#parties = ['BE', 'PCP', 'PEV', 'PS', 'L', 'PAN','PSD','IL','CDS-PP', 'CH']
#parties = ['BE', 'PCP','PS', 'PAN','PSD','IL','CDS-PP', 'CH']
parties = ['BE', 'PCP', 'PEV', 'PS', 'L/JKM', 'CR', 'PAN','PSD','IL','CDS-PP', '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=11, ncols=11, figsize=(30, 30))
axes = axes.ravel()
plt.rcParams.update({'font.size': 22})
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","A Favor"]).merge(sp.T, how="right").fillna(0)
d["GP"] = party
d = d.set_index("GP")
d = d[["Abstenção", "Contra", "Ausência","A Favor"]]
if p2 != party:
sns.despine(left=True, bottom=True)
if spn < 11:
d.plot(kind='barh', stacked=True,width=400,colormap=cmap, title=p2,use_index=False,ax=axes[spn], fontsize=12)
axes[spn].title.set_size(20)
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)
axes[spn].tick_params(labelsize=14)
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 < 11:
axes[spn].set_title(p2, fontsize=20)
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%11 == 0:
if spn != 0:
text = axes[spn].text(-45,0,party,rotation=90, fontsize=20)
else:
text = axes[spn].text(-0.17,0.5,party,rotation=90,fontsize=20)
#print(party, p2)
#print(d)
#print("-------------------------_")
spn += 1
#axes[11].set_axis_off()
text = axes[0].text(6,1.3,"Quem propôs",rotation=0,fontsize=26)
text = axes[0].text(-0.4,-6,"Como votaram",rotation=90,fontsize=26)
#fig.tight_layout()
plt.show()
Uma outra visualização que foca cada gráfico nas propostas de cada partido, e como votaram os restantes:
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', 'PEV', 'PS'
, 'PAN','PSD','IL','CDS-PP', 'CH']
parties = ['BE', 'PCP', 'PEV', 'PS', 'L/JKM', 'CR', 'PAN','PSD','IL','CDS-PP', '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=["#77dd77", "#fdfd96", "black","#ff6961" ]
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=['A 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()
#print(d)
plt.show()
5.3. Análise¶
Os dados não divergem do panorama geral obtido por via da análise das votações (sem levar em conta a autoria), ou pelo menos não os contradizem; dada a identificação da autoria uma nova dimensão pode ser
BE, PCP, PEV, L/JKM e PAN estão, em ordens diferentes, sempre an metade que mais apoia as propostas de cada um.
PEV e BE apoiam todas as propostas do PCP, que por sua vez vota maioritariamente a fazer das propostas do BE e PEV mas com algumas abstenções e votos contra (ainda assim, residuais tendo em conta a quantidade de propostas).
O PCP tem alguns votos contra propostas do PEV, seu parceiro de coligação; olhando para a lista de dados são propostas em torno da caça e tauromaquia.
As propostas do PS obtêm mais votos favoráveis no PAN e L/JKM, e menos na IL e CH, com os restantes algures no meio.
Cristina Rodrigues é a maior apoiante do PAN, de onde saiu, e o PS e CDS-PP os que mais vezes votam contra propostas do PAN.
PSD tem maior suporte à sua direita (CDS-PP, CH, IL), sendo o PS e PCP os que menos votam favoravelmente as suas propostas.
IL, CH e CDS-PP são os maiores apoiantes mútuos, com a curiosidade de Cristina Rodrigues ser a maior apoiante das propostas do CH (seguida dos restantes).
O PAN aparece na metade que mais apoia em todo o espectro: é quem mais vota a favor de propostas à esquerda, mas está também no grupo que mais vota a favot de propostas da direita (em particular sendo, a seguir ao CH, quem mais apoia propostas da IL).
O PCP é o unico partido a não votar favoravelmente nenhuma proposta do CH (embora os votos favoráveis à esquerda sejam residuais nos outros partidos), sendo o PS é o partido que mais vota contra as propostas do mesmo.
lch = l14af[l14af["GP"] == "L/JKM"]
lch.sort_values(by='data', inplace = True)
/home/frmuno/.local/lib/python3.8/site-packages/pandas/util/_decorators.py:311: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
lch
fase | iniNr | iniTipo | iniDescTipo | iniLeg | iniSel | dataInicioleg | dataFimleg | iniTitulo | iniTextoSubst | ... | iniAnexos | unanime | iniTextoSubstCampo | iniObs | L | ausencias | peticoes | publicacao | iniciativasOrigem | GP | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
757 | Votação na generalidade | 126 | J | Projeto de Lei | XIV | 1 | 2019-10-25 | 2020-09-14 | Nona alteração à Lei n.º 37/81, de 3 de outubr... | NAO | ... | NaN | NaN | NaN | NaN | A Favor | NaN | NaN | NaN | NaN | L/JKM |
1268 | Votação na generalidade | 365 | R | Projeto de Resolução | XIV | 1 | 2019-10-25 | 2020-09-14 | Proteção dos Idosos do Vírus Sars-Cov-2 em Lar... | SIM | ... | NaN | NaN | Texto inicial substituído a pedido do autor em... | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
1269 | Votação na generalidade | 364 | R | Projeto de Resolução | XIV | 1 | 2019-10-25 | 2020-09-14 | Recomenda ao Governo medidas de apoio ao pagam... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
1270 | Votação na generalidade | 363 | R | Projeto de Resolução | XIV | 1 | 2019-10-25 | 2020-09-14 | Recomenda ao Governo medidas de apoio aos trab... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
1132 | Votação na generalidade | 498 | R | Projeto de Resolução | XIV | 1 | 2019-10-25 | 2020-09-14 | Plano Urgente de Ação para a Qualidade do Ar | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
1134 | Votação na generalidade | 496 | R | Projeto de Resolução | XIV | 1 | 2019-10-25 | 2020-09-14 | Plano de Ação para a Redução Drástica de Resíduos | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
1159 | Votação na generalidade | 476 | R | Projeto de Resolução | XIV | 1 | 2019-10-25 | 2020-09-14 | Recomenda ao Governo o aumento da oferta de tr... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
996 | Votação na generalidade | 621 | R | Projeto de Resolução | XIV | 1 | 2019-10-25 | 2020-09-14 | Institui o dia 25 de setembro como o Dia Nacio... | NAO | ... | NaN | unanime | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
3269 | Votação na generalidade | 812 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Recomenda ao Governo a criação de medidas que ... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
3203 | Votação na generalidade | 879 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Reforçar e Melhorar as Políticas de Saúde Ment... | SIM | ... | NaN | NaN | Título e texto substituídos a pedido do autor ... | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
3128 | Votação na generalidade | 960 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Recomenda a salvaguarda integral, valorização ... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
3031 | Votação na generalidade | 1097 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Recomenda ao Governo o Reforço Financeiro e Té... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2976 | Votação na generalidade | 1177 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Recomenda ao Governo proceder à declaração de ... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2995 | Votação na generalidade | 1143 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Por uma Lei Europeia do Clima com metas ambici... | SIM | ... | NaN | NaN | Substituição do texto da iniciativa em 2021-03... | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
3036 | Votação na generalidade | 1088 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Por uma Educação para a Sexualidade e para os ... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2884 | Votação na generalidade | 1288 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Pelo reforço das respostas locais de acesso a ... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2906 | Votação na generalidade | 1259 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Pela requalificação da Quinta dos Ingleses com... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2398 | Votação na generalidade | 772 | J | Projeto de Lei | XIV | 2 | 2020-09-15 | 2021-09-14 | Procede a uma alteração do Código Penal, atrib... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2868 | Votação na generalidade | 1310 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Por uma Política de Migração que garanta a pro... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2845 | Votação na generalidade | 1340 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Pelo reforço dos incentivos à aquisição de vel... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2455 | Votação na generalidade | 734 | J | Projeto de Lei | XIV | 2 | 2020-09-15 | 2021-09-14 | Cria o regime de proteção e ampliação do arvor... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
2842 | Votação na generalidade | 1347 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Pela restauração dos ecossistemas e por um mod... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
3325 | Votação na generalidade | 754 | R | Projeto de Resolução | XIV | 2 | 2020-09-15 | 2021-09-14 | Classificação da Serra de Carnaxide como Paisa... | NAO | ... | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | L/JKM |
23 rows × 44 columns