{ "cells": [ { "cell_type": "markdown", "id": "6c96c51f-2cb3-4985-a032-7519d06cfac7", "metadata": {}, "source": [ "# Metodologia e resultados: visão geral\n", "\n", "Com base nos dados disponibilizados pela Assembleia da República em\n", "formato XML são criadas _dataframes_ (tabelas de duas dimensões) com\n", "base no processamento e selecção de informação relativa aos padrões de\n", "votação de cada partido (e/ou deputados não-inscritos).\n", "\n", "Uma explicação mais detalhada dos processos pode ser obtida nos apêndices, o que se segue é uma introdução a algumas das análises fundamentais com base num exemplo fictício.\n", "\n", "## As votações e os partidos" ] }, { "cell_type": "markdown", "id": "11e445bf-302f-41c5-9b1a-b043383ed5b8", "metadata": {}, "source": [ "```{margin}\n", "A conversão de votos em representações númericas pode ser feita de várias formas {cite}`hixDimensionsPoliticsEuropean2006`; adoptamos a abordagem de {cite:t}`krilaviciusStructuralAnalysisParliamentarian2008` no seu trabalho relativo às votações no parlamento lituano por nos parecer apropriada à realidade portuguesa:\n", "\n", "* A favor: 1\n", "* Contra: -1\n", "* Abstenção: 0\n", "* Ausência: 0\n", "\n", "Este ponto é (mais um) dos que de forma relativamente opaca - pois raramente os detalhes têm a mesma projecção que os resultado finais - podem influenciar os resultados; cremos que em particular a equiparação entre abstenção e ausência merece alguma reflexão: considerámos que uma ausência em determinada votação tem um peso equivalente à abstenção, embora uma de forma passiva e outra activa.\n", "```" ] }, { "cell_type": "markdown", "id": "ef661da1-a606-4945-8d6e-ffa64d8993b8", "metadata": { "tags": [ "margin" ] }, "source": [ "Para simplificar usamos desde já valores numéricos, onde 1 = Favor, 0 = Abstenção, -1 = Contra, e não consideramos ausências. O processo de tratamento de dados reais irá, num dos seus passos, fazer esta transformação." ] }, { "cell_type": "markdown", "id": "0f5ff069-965e-44c0-9c8a-050fec63dd50", "metadata": {}, "source": [ "Considerem-se 4 partidos, para o nosso efeito denominados pelo sentido mais comum do seu voto; a seguinte tabela reflecte 10 votações e o comportamente de cada partido em cada uma delas" ] }, { "cell_type": "code", "execution_count": 1, "id": "8d509b56-732b-4d97-839b-7a3ce1a0b09b", "metadata": { "tags": [ "remove-cell" ] }, "outputs": [], "source": [ "import pandas as pd\n", "from scipy.spatial.distance import squareform\n", "from scipy.spatial.distance import pdist\n", "import matplotlib.pyplot as plt\n", "import matplotlib as mpl\n", "import seaborn as sns\n", "#sns.set(font=\"EB Garamond\")\n", "sns.set_theme(style=\"whitegrid\", palette=\"pastel\")\n", "import scipy.spatial as sp, scipy.cluster.hierarchy as hc\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "id": "465acd3c-658b-4856-8ec8-282d6d0785d2", "metadata": { "tags": [ "hide-input", "center" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
v1v2v3v4v5v6v7v8v9v10
Fav1111111111
Abst0000000000
Var1000110101
Cont-1-1-1-1-1-1-1-1-1-1
\n", "
" ], "text/plain": [ " v1 v2 v3 v4 v5 v6 v7 v8 v9 v10\n", "Fav 1 1 1 1 1 1 1 1 1 1\n", "Abst 0 0 0 0 0 0 0 0 0 0\n", "Var 1 0 0 0 1 1 0 1 0 1\n", "Cont -1 -1 -1 -1 -1 -1 -1 -1 -1 -1" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v5=[[1,1,1,1,1,1,1,1,1,1],[0,0,0,0,0,0,0,0,0,0],[1,0,0,0,1,1,0,1,0,1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]]\n", "v5_df = pd.DataFrame(v5, columns=[\"v1\",\"v2\", \"v3\",\"v4\",\"v5\",\"v6\",\"v7\",\"v8\",\"v9\",\"v10\"], index=[\"Fav\",\"Abst\",\"Var\",\"Cont\"])\n", "v5_df" ] }, { "cell_type": "markdown", "id": "228ec62e-cde3-4495-8184-794b82a135dd", "metadata": {}, "source": [ "## Mapa térmico das votações de todos os partidos" ] }, { "cell_type": "markdown", "id": "b387d49f-1f07-46c9-9cf7-7e6a5b085797", "metadata": {}, "source": [ "Um mapa térmico permite-nos visualizar os votos através de cores; é uma forma de observar os mesmos dados que os da tabela mas de forma gráfica, o que se neste caso não faz muita diferenças, passa a ser importante quando temos centenas de votações." ] }, { "cell_type": "code", "execution_count": 3, "id": "755e36a4-09da-44c0-a76a-ce5777a5d1c3", "metadata": { "tags": [ "hide-input", "center" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import matplotlib as mpl\n", "import seaborn as sns\n", "\n", "\n", "voting_palette = [\"#FB6962\",\"#FCFC99\",\"#79DE79\"]\n", "\n", "fig = plt.figure(figsize=(6,6))\n", "sns.heatmap(v5_df.T,\n", " square=False,\n", " yticklabels = False,\n", " cbar=False,\n", " cmap=sns.color_palette(voting_palette),\n", " linecolor=\"black\",\n", " linewidths=1\n", " )\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "7e928a61-d661-45ff-b40b-edcd7de6c028", "metadata": {}, "source": [ "## Matriz de distância" ] }, { "cell_type": "markdown", "id": "201109bf-fc68-434e-b075-1d74a6efbce4", "metadata": { "tags": [ "margin" ] }, "source": [ "```{margin}\n", "A matriz de distâncias é uma matriz quadradra $n\\times n$ (onde _n_ é o número de partidos) e onde a distância entre _p_ e _q_ é o valor de $ d_{pq} $.\n", "\n", "$ \n", "\\begin{equation}\n", "D= \\begin{bmatrix} d_{11} & d_{12} & \\cdots & d_{1 n} \\\\ d_{21} & d_{22} & \\cdots & d_{2 n} \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ d_{31} & d_{32} & \\cdots & d_{n n} \\end{bmatrix}_{\\ n\\times n} \n", "\\end{equation}\n", "$\n", "\n", "\n", "A distância é obtida através da comparação de todas as observações de cada par usando uma determinada métrica de distância, sendo a distância euclideana bastante comum em termos gerais e também dentro de estudos sobre o mesmo domínio temático _(Krilavičius and Žilinskas 2008)_: cada elemento da matriz representa $ d\\left( p,q\\right) = \\sqrt {\\sum _{i=1}^{n} \\left( q_{i}-p_{i}\\right)^2 }$, equivalente, para dois pontos $P,Q $ , à mais genérica distância de Minkowski $ D\\left(P,Q\\right)=\\left(\\sum _{i=1}^{n}|x_{i}-y_{i}|^{p}\\right)^{\\frac {1}{p}} $ para $ p = 1$, mas note-se que a diagonal da matrix irá representar a distância entre um partido e ele próprio, logo $ d_{11} = d_{22} = \\dots = d_{nn} = 0 $.\n", "```" ] }, { "cell_type": "markdown", "id": "66ec7ed2-a4ff-4511-b842-d53f35b0ea45", "metadata": {}, "source": [ "Uma matriz de distância apresenta o resultado das distâncias entre dois pontos - é o formato usado, por exemplo, para mostrar a distância entre vários pontos geográficos.\n", "\n", "No caso de partidos e votações a distância é o resultado das diferenças entre sentidos de votos acumulados para todas as votações (de forma muito simples), e representada por uma matriz bidimensional onde quanto maior o número, mais distante está do par correspondente." ] }, { "cell_type": "code", "execution_count": 4, "id": "a84be3de-8e9f-47dd-8c86-3ba0bacdb065", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FavAbstVarCont
Fav0.0000003.1622782.2360686.324555
Abst3.1622780.0000002.2360683.162278
Var2.2360682.2360680.0000005.000000
Cont6.3245553.1622785.0000000.000000
\n", "
" ], "text/plain": [ " Fav Abst Var Cont\n", "Fav 0.000000 3.162278 2.236068 6.324555\n", "Abst 3.162278 0.000000 2.236068 3.162278\n", "Var 2.236068 2.236068 0.000000 5.000000\n", "Cont 6.324555 3.162278 5.000000 0.000000" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v5_distmat=pd.DataFrame(squareform(pdist(v5)), columns=v5_df.index, index=v5_df.index)\n", "v5_distmat" ] }, { "cell_type": "markdown", "id": "5bdc9a02-a1d5-4460-b2f4-a73543a47ef5", "metadata": {}, "source": [ "A sua visualização (também através de um mapa térmico) permite ver rapidamente as proximidades através das cores utilizadas: quanto mais claro, mais distante. " ] }, { "cell_type": "code", "execution_count": 5, "id": "27e5bf56-3179-4228-b249-4391964d9c48", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(6,6))\n", "\n", "sns.heatmap(\n", " v5_distmat,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " annot = True,\n", " square =True,\n", ")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "f0ff66bf-f9f2-4241-a58a-5441d5a5a3b5", "metadata": {}, "source": [ "## Dendograma e _clustermap_" ] }, { "cell_type": "markdown", "id": "cfaf919a-56da-4307-a8af-d3cf78b01501", "metadata": {}, "source": [ "Com base nas distâncias segue-se o agrupamento (_clustering_); existem várias formas de o fazer e é preciso ter em consideração que o resultado obtido considera as distâncias entre todos os pares: é perfeitamente possível que elementos com maior distância aparecem agrupados de forma mais próxima devido à distância que cada um deles tem de todos os outros.\n", "\n", "Dito isto, a visualização mais comum é um dendograma que apresenta uma \"árvore\" com diferentes ramos:" ] }, { "cell_type": "code", "execution_count": 6, "id": "d2bca3bc-b2c1-4c58-8d2f-c46e61f6fd73", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v5_distmat_link = hc.linkage(pdist(v5_df), method=\"ward\")\n", "\n", "from scipy.cluster.hierarchy import dendrogram\n", "fig = plt.figure(figsize=(7,6))\n", "dendrogram(v5_distmat_link, labels=v5_df.T.columns)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "b171adcc-d580-46b3-a440-12dc8ef84505", "metadata": {}, "source": [ "Um _clustermap_ é a combinação do mapa térmico de distância com o dendograma: as colunas e linhas são reordernadas e as linhas de agrupamento adicionadas." ] }, { "cell_type": "code", "execution_count": 12, "id": "0ce728e4-865b-40f2-bf82-3369fc948d92", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sns.clustermap(\n", " v5_distmat,\n", " annot = True,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " row_linkage=v5_distmat_link,\n", " col_linkage=v5_distmat_link,\n", " figsize=(6,6)\n", ")\n", "plt.title('Clustermap')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "ae777a41-ba63-42fa-a4a4-2265659651a7", "metadata": {}, "source": [ "Como o _clustermap_ combina a informação de ambos será o mais utilizado." ] }, { "cell_type": "markdown", "id": "502a5032-a7e6-450b-9c5b-b10956fd8c24", "metadata": {}, "source": [ "## Multidimensional Scaling" ] }, { "cell_type": "markdown", "id": "2169e2da-cb81-4def-960a-468995b1bc22", "metadata": {}, "source": [ "Com base na matriz de distâncias podemos também visulizar a distância relativa entre todos os partidos através de _Multidimensional scaling_: com base na distância (acumulada) entre todos os pares determinam-se coordenadas em duas ou três dimensões (daí o nome, trata-se de reduzir as dimensões mantendo a distância relativa)" ] }, { "cell_type": "code", "execution_count": 14, "id": "71675f0e-5814-4e14-8538-cabf5133a87e", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.manifold import MDS\n", "import random\n", "\n", "mds = MDS(n_components=2, dissimilarity='precomputed',random_state=2020, n_init=100, max_iter=1000)\n", "\n", "results = mds.fit(v5_distmat.values)\n", "coords = results.embedding_\n", "fig, ax = plt.subplots(figsize=(8,8))\n", "\n", "for label, x, y in zip(v5_distmat.columns, coords[:, 0], coords[:, 1]):\n", " ax.scatter(x, y, s=250)\n", " ax.axis('equal')\n", " ax.annotate(\n", " label,\n", " xy = (x+0.1, y),\n", " )\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "a5fb0298-c4f8-404f-ac77-8c3c759e6039", "metadata": { "tags": [ "margin" ] }, "source": [ "```{margin}\n", "A visualização do MDS tridimensional pode, dependendo do suporte, ser feita de forma interactiva.\n", "```" ] }, { "cell_type": "markdown", "id": "51ad7bcb-9e32-4e40-96da-db5ac4aa3635", "metadata": {}, "source": [ "Observe-se que não temos agrupamentos: MDS não é um método de _clustering_ mas sim de redução das dimensões de forma a manter as distâncias relativas entre os vários pontos, o que nos permite identificar visualmente possíveis grupos (e, neste caso, podemos ver como se relaciona com a matriz de distância obtida anteriormente). A redução das dimensões pode ser feita para 2 ou para 3, sendo nesse caso o resultado visualizável num cubo:" ] }, { "cell_type": "code", "execution_count": 29, "id": "ea3d0ab7-43a0-4482-be49-047fd32f771f", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.manifold import MDS\n", "import random\n", "\n", "mds = MDS(n_components=3, dissimilarity='precomputed',random_state=2020, n_init=100, max_iter=1000)\n", "\n", "results = mds.fit(v5_distmat.values)\n", "coords = results.embedding_\n", "\n", "import plotly.graph_objects as go\n", "from IPython.core.display import display, HTML\n", "from plotly.offline import init_notebook_mode, plot\n", "init_notebook_mode(connected=True)\n", "# Create figure\n", "fig = go.Figure()\n", "\n", "# Loop df columns and plot columns to the figure\n", "for label, x, y, z in zip(v5_df.T.columns, coords[:, 0], coords[:, 1], coords[:, 2]):\n", " fig.add_trace(go.Scatter3d(x=[x], y=[y], z=[z],\n", " text=label,\n", " textposition=\"top center\",\n", " mode='markers+text', # 'lines' or 'markers'\n", " name=label))\n", "fig.update_layout(\n", " width = 800,\n", " height = 800,\n", " scene_aspectmode='cube',\n", " title = \"3D MDS\",\n", " template=\"plotly_white\",\n", " showlegend=False\n", ")\n", "plot(fig, filename = 'intro_3d_mds.html')\n", "display(HTML('intro_3d_mds.html'))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }