{ "cells": [ { "cell_type": "markdown", "id": "d584d5ab-a380-4238-b70d-0f11b9fbcc53", "metadata": {}, "source": [ "# Distâncias e matrizes\n", "\n", "A matriz de distância é feita através da utilização da função `pdist`; como já mencionado a distância euclidiana entre dois pontos $p$ e $q$ é $ d\\left( p,q\\right) = \\sqrt {\\sum _{i=1}^{n} \\left( q_{i}-p_{i}\\right)^2 }$, para $n$ dimensões. De forma a facilitar a intuição de como esta distância é aplicada ao registo de votações vamos, passo a passo, analisar um caso simplificado (o que nos serve também de forma de validação indirecta do processo).\n", "\n", "Vamos criar um cenário com três partidos, com nomes que reflectem o seu perfil de votação:\n", "\n", "* O Partido Favorável vota a favor.\n", "* O Partido Abstencionista abstem-se (pelo menos até certo ponto).\n", "* O Partido do Contra vota contra.\n", "\n", "## Uma votação, $ n = 1 $\n", "\n", "Começemos por uma única votação, onde cada um dos partidos segue a sua linha programática:" ] }, { "cell_type": "code", "execution_count": 1, "id": "5d6922b6-0af3-4a24-95d7-65125870c69f", "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", "import scipy.spatial as sp, scipy.cluster.hierarchy as hc\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "id": "a700b273-fd4f-4cf4-a5eb-7e2d21e7a12f", "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", "
v1
F1
A0
C-1
\n", "
" ], "text/plain": [ " v1\n", "F 1\n", "A 0\n", "C -1" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "v1=[[1],[0],[-1]]\n", "v1_df = pd.DataFrame(v1, columns=[\"v1\"], index=[\"F\",\"A\", \"C\"])\n", "v1_df" ] }, { "cell_type": "markdown", "id": "5370bdc2-4897-4b15-a9d1-06dac42d918c", "metadata": {}, "source": [ "Com uma única votação o número de dimensões é de $n = 1$ e é bastante intuitivo que a distância entre eles é a _norma_:$ d\\left( x,y\\right) = | x - y |$; entre 1 e 0 a distância é 1, entre 1 e -1 a distância é 2, etc. Para $ n = 1 $ a distância euclidiana é equivalente à norma, pois $ \\sqrt{\\left( q - p\\right)^2} = | q - p | $, como pode ser observado quando medidas a distância entre eles:" ] }, { "cell_type": "code", "execution_count": 3, "id": "bfff6d6b-1909-4d07-af49-7e9f335697dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Distance from F and A = 1.0\n", "Distance from F and C = 2.0\n", "Distance from A and C = 1.0\n" ] } ], "source": [ "import math\n", "## We could also sue the array directly, e.g.\n", "## print(\"Distance from\" , a[0][0] , \"and\" , a[1][0],\"=\",math.sqrt((a[0][0]-a[1][0]) ** 2))\n", "\n", "print(\"Distance from\", v1_df.loc[\"F\"].name, \"and\", v1_df.loc[\"A\"].name, \"=\", \n", " math.sqrt((v1_df.loc[\"F\"][\"v1\"]-v1_df.loc[\"A\"][\"v1\"]) ** 2))\n", "print(\"Distance from\", v1_df.loc[\"F\"].name, \"and\", v1_df.loc[\"C\"].name, \"=\", \n", " math.sqrt((v1_df.loc[\"F\"][\"v1\"]-v1_df.loc[\"C\"][\"v1\"]) ** 2))\n", "print(\"Distance from\", v1_df.loc[\"A\"].name, \"and\", v1_df.loc[\"C\"].name, \"=\", \n", " math.sqrt((v1_df.loc[\"A\"][\"v1\"]-v1_df.loc[\"C\"][\"v1\"]) ** 2))" ] }, { "cell_type": "markdown", "id": "93c80c04-2193-4e60-93ff-baed8dbb59af", "metadata": {}, "source": [ "Temos a distância entre os três possíveis pares: a distância entre _F_ e _A_ é idêntica à distância entre _A_ e _F_. Isto é importante porque ajuda a explicar a diferença entre a forma \"condensada\" e forma \"quadrada\". A função `pdist` retorna a distância entre os vários pares na forma _condensada_:" ] }, { "cell_type": "code", "execution_count": 4, "id": "cd9ab62b-e28c-4553-b6dd-450a31789ef8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1., 2., 1.])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pdist(v1_df)" ] }, { "cell_type": "markdown", "id": "0fb3cbd8-5b81-4d5b-8b8c-fa8f7edfdc02", "metadata": {}, "source": [ "Estes são os mesmos valores que obtivemos de forma manual, e é isso que a função faz: calcula uma determinada distância (euclidiana, neste caso e por omissão) entre todos os pares possíveis, sem que seja necessário especificarmos todas as combinações possíveis.\n", "\n", "Este formato condensado não é o que permite uma leitura mais imediata, e para tal existe a função `squareform` que apresenta os mesmos resultados mas numa matriz simétrica:" ] }, { "cell_type": "code", "execution_count": 5, "id": "04901a6d-c126-4c13-9524-be5e034d910b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 1., 2.],\n", " [1., 0., 1.],\n", " [2., 1., 0.]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "squareform(pdist(v1_df))" ] }, { "cell_type": "markdown", "id": "64e12547-b3b8-41a1-a510-089aa33fde03", "metadata": {}, "source": [ "Em formato tabular torna-se ainda mais claro... e isto é exactmante a matriz de distância usada para o mapa térmico" ] }, { "cell_type": "code", "execution_count": 6, "id": "c24ed07d-efc2-4a05-b64f-36e7fe6a3a8f", "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", "
FAC
F0.01.02.0
A1.00.01.0
C2.01.00.0
\n", "
" ], "text/plain": [ " F A C\n", "F 0.0 1.0 2.0\n", "A 1.0 0.0 1.0\n", "C 2.0 1.0 0.0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v1_distmat=pd.DataFrame(squareform(pdist(v1)), columns=v1_df.index, index=v1_df.index)\n", "v1_distmat" ] }, { "cell_type": "markdown", "id": "7d704a10-fb21-4ff8-bbae-3b4334ac063f", "metadata": {}, "source": [ "Geometricamente temos pontos numa recta: uma análise das distâncias entre os três partidos com base no histórico de votação seria simples de visualizar com base na posição desses pontos:" ] }, { "cell_type": "code", "execution_count": 30, "id": "4e12afca-8a6f-4f95-9425-7ef22dc38ef9", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.axhline(y=0,c=\"gold\",zorder=-1)\n", "\n", "for x in v1_df[\"v1\"]:\n", " ax.scatter(x,y=0,)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "70e7fde0-3440-4afd-a71b-6b5cbb24b538", "metadata": {}, "source": [ "Com base na matriz de distância contruimos o mapa térmico de forma muito simples:" ] }, { "cell_type": "code", "execution_count": 8, "id": "ab76d624-eec0-420c-b354-14f963bc52cd", "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=(4,4))\n", "sns.heatmap(\n", " v1_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": "725e0a08-e104-49e5-b44f-27407486170b", "metadata": {}, "source": [ "...e o agrupamento com base nessa matriz:" ] }, { "cell_type": "code", "execution_count": 9, "id": "3bf08cfb-3e1d-432d-902c-91b3281a6054", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v1_distmat_link = hc.linkage(pdist(v1_df))\n", "\n", "sns.clustermap(\n", " v1_distmat,\n", " annot = True,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " row_linkage=v1_distmat_link,\n", " col_linkage=v1_distmat_link,\n", " figsize=(4,4)\n", ")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "c07c4387-3736-414f-abe9-a4fe217eb39f", "metadata": { "tags": [] }, "source": [ "## Duas votações, $ n = 2 $\n", "\n", "Usando a mesma abordagem (agora sem necessidade de explicações adicionais) adicionamos mais uma votação, sempre em linha com o perfil fixo de votos de cada um: cada partido passa a ter dois votos, logo temos duas dimensões:" ] }, { "cell_type": "code", "execution_count": 10, "id": "3d18e4dd-4f8f-48a7-bd60-7d406e2cf24d", "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", "
v1v2
F11
A00
C-1-1
\n", "
" ], "text/plain": [ " v1 v2\n", "F 1 1\n", "A 0 0\n", "C -1 -1" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v2=[[1,1],[0,0],[-1,-1]]\n", "v2_df = pd.DataFrame(v2, columns=[\"v1\",\"v2\"], index=[\"F\",\"A\", \"C\"])\n", "v2_df" ] }, { "cell_type": "markdown", "id": "7af1d05d-6256-4c9c-90c1-ec4d760d2bd4", "metadata": {}, "source": [ "A distância euclidiana é agora feita de forma mais genérica: a raíz quadrada da soma do quadrado das diferenças: para a primeira diferença isto significa, passo a passo e para $q=F$ e $p=A$:\n", "\n", "$ d\\left(q,p\\right) = \\sqrt {\\sum _{i=1}^{n} \\left( q_{i}-p_{i}\\right)^2 } = \\sqrt{\\left( q_{1}-p_{1}\\right)^2 + \\left( q_{2}-p_{2}\\right)^2 } = \\sqrt{\\left( 1 - 0\\right)^2 + \\left( 1 - 0\\right)^2} = \\sqrt{ 1^2 + 1^2 } = \\sqrt{1+1} = \\sqrt{2} \\approx 1.4142135623730951 $\n", "\n", "E de facto:" ] }, { "cell_type": "code", "execution_count": 11, "id": "99487bd1-c086-47c4-b827-85951c1d21a6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.4142135623730951\n", "2.8284271247461903\n", "1.4142135623730951\n" ] } ], "source": [ "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v2_df.loc[\"F\"],v2_df.loc[\"A\"]))))\n", "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v2_df.loc[\"F\"],v2_df.loc[\"C\"]))))\n", "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v2_df.loc[\"A\"],v2_df.loc[\"C\"]))))" ] }, { "cell_type": "markdown", "id": "da0d8dc3-5077-41d6-8475-8f70f5998e36", "metadata": {}, "source": [ "Tal como antes é idêntico ao resultado de `pdist`, tanto na sua forma condensada como quadrada:" ] }, { "cell_type": "code", "execution_count": 12, "id": "303db344-afe3-458a-8292-d71f0e2a38dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pdist:\n", " [1.41421356 2.82842712 1.41421356] \n", "\n", "squareform:\n", " [[0. 1.41421356 2.82842712]\n", " [1.41421356 0. 1.41421356]\n", " [2.82842712 1.41421356 0. ]]\n" ] }, { "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", "
FAC
F0.0000001.4142142.828427
A1.4142140.0000001.414214
C2.8284271.4142140.000000
\n", "
" ], "text/plain": [ " F A C\n", "F 0.000000 1.414214 2.828427\n", "A 1.414214 0.000000 1.414214\n", "C 2.828427 1.414214 0.000000" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"pdist:\\n\", pdist(v2),\"\\n\")\n", "print(\"squareform:\\n\",squareform(pdist(v2)))\n", "v2_distmat=pd.DataFrame(squareform(pdist(v2)), columns=v2_df.index, index=v2_df.index)\n", "v2_distmat" ] }, { "cell_type": "markdown", "id": "f0e516b0-9f73-4cbe-9c79-68eaebe77e07", "metadata": {}, "source": [ "Com duas votações temos $ n = 2 $ e conseguimos ver os pontos num espaço cartesiano em $ \\mathbb{R}^2 $ (um plano)." ] }, { "cell_type": "code", "execution_count": 27, "id": "10d97966-11b4-4db8-b55e-175d19689249", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "for x,y in zip(v2_df[\"v1\"], v2_df[\"v2\"]):\n", " ax.scatter(x,y)" ] }, { "cell_type": "markdown", "id": "90f3417a-9618-4b94-9d00-c7dd2c838258", "metadata": {}, "source": [ "A matriz de distância seria neste caso, como no anterior, desnecessária (em $ \\mathbb{R}^2 $ as distâncias entre os partidos são óbvias por facilmente visualizáveis); a forma de a construir é idêntica:" ] }, { "cell_type": "code", "execution_count": 14, "id": "10f73f36-5ae9-4302-98ac-954f1d3d0a50", "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=(4,4))\n", "\n", "sns.heatmap(\n", " v2_distmat,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " annot = True,\n", " square =True,\n", ")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "2ea338b0-f2c5-4fae-a6da-8b38d776bcd7", "metadata": {}, "source": [ "... e o _clustermap_ que agrega distâncias e agrupamento num único gráfico:" ] }, { "cell_type": "code", "execution_count": 15, "id": "6f47562e-6fec-46af-9097-7bee2a24d2c0", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v2_distmat_link = hc.linkage(pdist(v2_df))\n", "\n", "sns.clustermap(\n", " v2_distmat,\n", " annot = True,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " row_linkage=v2_distmat_link,\n", " col_linkage=v2_distmat_link,\n", " figsize=(4,4)\n", ")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "81c60161-bfee-494e-b2b2-233c4f282d25", "metadata": {}, "source": [ "## Três votações, $ n = 3 $\n", "\n", "Este é o último caso onde a visualização pode ser feita de forma directa. Consideremos:" ] }, { "cell_type": "code", "execution_count": 16, "id": "b6ae1fb7-c0cc-49be-a568-0ea97d07068b", "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", "
v1v2v3
F111
A000
C-1-1-1
\n", "
" ], "text/plain": [ " v1 v2 v3\n", "F 1 1 1\n", "A 0 0 0\n", "C -1 -1 -1" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v3=[[1,1,1],[0,0,0],[-1,-1,-1]]\n", "v3_df = pd.DataFrame(v3, columns=[\"v1\",\"v2\", \"v3\"], index=[\"F\",\"A\", \"C\"])\n", "v3_df" ] }, { "cell_type": "markdown", "id": "e7cf621c-d1b9-4939-b9ec-b48cf80953cb", "metadata": {}, "source": [ "A distância é calculada da mesma forma:" ] }, { "cell_type": "code", "execution_count": 17, "id": "2555178f-4521-44c0-9ae0-195565899793", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.7320508075688772\n", "3.4641016151377544\n", "1.7320508075688772\n" ] } ], "source": [ "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v3_df.loc[\"F\"],v3_df.loc[\"A\"]))))\n", "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v3_df.loc[\"F\"],v3_df.loc[\"C\"]))))\n", "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v3_df.loc[\"A\"],v3_df.loc[\"C\"]))))" ] }, { "cell_type": "markdown", "id": "fb70d621-4de6-403e-ba1f-c0f622225a39", "metadata": {}, "source": [ "... bem como a matriz de distância:" ] }, { "cell_type": "code", "execution_count": 18, "id": "3a82837f-b5a0-40c4-9e67-b064ce37b118", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pdist:\n", " [1.73205081 3.46410162 1.73205081] \n", "\n", "squareform:\n", " [[0. 1.73205081 3.46410162]\n", " [1.73205081 0. 1.73205081]\n", " [3.46410162 1.73205081 0. ]]\n" ] }, { "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", "
FAC
F0.0000001.7320513.464102
A1.7320510.0000001.732051
C3.4641021.7320510.000000
\n", "
" ], "text/plain": [ " F A C\n", "F 0.000000 1.732051 3.464102\n", "A 1.732051 0.000000 1.732051\n", "C 3.464102 1.732051 0.000000" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"pdist:\\n\", pdist(v3),\"\\n\")\n", "print(\"squareform:\\n\",squareform(pdist(v3)))\n", "v3_distmat=pd.DataFrame(squareform(pdist(v3)), columns=v3_df.index, index=v3_df.index)\n", "v3_distmat" ] }, { "cell_type": "markdown", "id": "209af09d-0244-407f-aa1e-804b70878705", "metadata": {}, "source": [ "e o correspondente mapa térmico:" ] }, { "cell_type": "code", "execution_count": 20, "id": "9cd71b5b-83ab-45e5-8e40-8c09f9f6692f", "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=(4,4))\n", "\n", "sns.heatmap(\n", " v3_distmat,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " annot = True,\n", " square =True,\n", ")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "19c8acc3-0508-426a-bd6a-65d4ce885961", "metadata": {}, "source": [ "O _clustermap_ apresenta os mesmos valores, mas reordenando colunas e linhas de forma a apresentar o resultado do agrupamento; note-se que, neste caso, não é apresentado nenhum agrupamento entre 2 dos partidos pois todos divergem de forma equidistante, constituindo três grupos separados:" ] }, { "cell_type": "code", "execution_count": 29, "id": "6e18dddd-4ef3-4cc4-a661-c29c1070c42a", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v3_distmat_link = hc.linkage(pdist(v3_df))\n", "\n", "sns.clustermap(\n", " v3_distmat,\n", " annot = True,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " row_linkage=v3_distmat_link,\n", " col_linkage=v3_distmat_link,\n", " figsize=(4,4)\n", ")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "f991e9b3-9beb-4da9-92dd-c57426bc8c91", "metadata": {}, "source": [ "Estamos agora em $ \\mathbb{R}^3 $, e para visualizar podemos usar uma projecção tridimensional:" ] }, { "cell_type": "code", "execution_count": 28, "id": "f4677563-570c-4c84-9681-9000354621b5", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax = fig.add_subplot(111,projection='3d')\n", "\n", "for x,y,z in zip(v3_df[\"v1\"], v3_df[\"v2\"], v3_df[\"v3\"]):\n", " ax.scatter(x,y,z)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "8ba59759-f55f-49b9-a0c7-57416d21d510", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d923f113-2455-4c5b-8349-3beae3abed54", "metadata": {}, "source": [ "## Mais de três votações, $ n > 3 $\n", "\n", "A partir daqui coloca-se a questão fundamental: a impossibilidade de visualizar de forma directa a distância para além das três dimensões. A distância existe e segue exactamente os mesmo passos, simplesmente não é passível de visualização, razão pela qual é necessário (agora sim) depender de formas que \"reduzam\" as dimensões e as tornem visualizáveis.\n", "\n", "Até agora os agrupamentos têm sido sempre iguais pois a distância é sempre linear; vamos neste último caso assumir que o Partido Abstencionista teve uma mudança de posição e passou a votar por vezes a favor e contra, embora mais contra que a favor:" ] }, { "cell_type": "code", "execution_count": 22, "id": "f0ed7d35-e040-4dbb-8b30-ac32337ceac2", "metadata": {}, "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", "
v1v2v3v4v5v6v7v8v9v10
F1111111111
A00010-10-1-1-1
C-1-1-1-1-1-1-1-1-1-1
\n", "
" ], "text/plain": [ " v1 v2 v3 v4 v5 v6 v7 v8 v9 v10\n", "F 1 1 1 1 1 1 1 1 1 1\n", "A 0 0 0 1 0 -1 0 -1 -1 -1\n", "C -1 -1 -1 -1 -1 -1 -1 -1 -1 -1" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v4=[[1,1,1,1,1,1,1,1,1,1],[0,0,0,1,0,-1,0,-1,-1,-1],[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]]\n", "v4_df = pd.DataFrame(v4, columns=[\"v1\",\"v2\", \"v3\",\"v4\",\"v5\",\"v6\",\"v7\",\"v8\",\"v9\",\"v10\"], index=[\"F\",\"A\", \"C\"])\n", "v4_df" ] }, { "cell_type": "markdown", "id": "f7eef283-b479-49db-b453-ddc7289ad83b", "metadata": {}, "source": [ "A distância calculdada \"manualmente\":" ] }, { "cell_type": "code", "execution_count": 23, "id": "0cfce024-0990-413c-9b9b-0652f0b3ea4d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4.58257569495584\n", "6.324555320336759\n", "3.0\n" ] } ], "source": [ "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v4_df.loc[\"F\"],v4_df.loc[\"A\"]))))\n", "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v4_df.loc[\"F\"],v4_df.loc[\"C\"]))))\n", "print(math.sqrt(sum((px - qx) ** 2.0 for px, qx in zip(v4_df.loc[\"A\"],v4_df.loc[\"C\"]))))" ] }, { "cell_type": "markdown", "id": "fbe4a871-a031-469d-b992-c4a37f4b895f", "metadata": {}, "source": [ "... e o cálculo via `pdist` e a matriz de distância:" ] }, { "cell_type": "code", "execution_count": 24, "id": "c23624ff-5229-45f4-97dc-37cb3a636cec", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pdist:\n", " [4.58257569 6.32455532 3. ] \n", "\n", "squareform:\n", " [[0. 4.58257569 6.32455532]\n", " [4.58257569 0. 3. ]\n", " [6.32455532 3. 0. ]]\n" ] }, { "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", "
FAC
F0.0000004.5825766.324555
A4.5825760.0000003.000000
C6.3245553.0000000.000000
\n", "
" ], "text/plain": [ " F A C\n", "F 0.000000 4.582576 6.324555\n", "A 4.582576 0.000000 3.000000\n", "C 6.324555 3.000000 0.000000" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"pdist:\\n\", pdist(v4),\"\\n\")\n", "print(\"squareform:\\n\",squareform(pdist(v4)))\n", "v4_distmat=pd.DataFrame(squareform(pdist(v4)), columns=v4_df.index, index=v4_df.index)\n", "v4_distmat" ] }, { "cell_type": "markdown", "id": "9aaf4b75-0598-4d96-8266-54183a49225a", "metadata": {}, "source": [ "O mapa térmico:" ] }, { "cell_type": "code", "execution_count": 25, "id": "8c1b513e-842f-47e3-b75b-ff6f5bf9cfd9", "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=(4,4))\n", "\n", "sns.heatmap(\n", " v4_distmat,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " annot = True,\n", " square =True,\n", ")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "86501bc3-11ba-4f05-8e92-bd878368082a", "metadata": {}, "source": [ "... e o dendograma, já apresentando um agrupamento com base na maior aproximação com base no registo de votação:" ] }, { "cell_type": "code", "execution_count": 26, "id": "b736e3a4-cb79-498b-92e7-a819dded5bee", "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v4_distmat_link = hc.linkage(pdist(v4_df), method=\"ward\")\n", "\n", "sns.clustermap(\n", " v4_distmat,\n", " annot = True,\n", " cmap=sns.color_palette(\"Reds_r\"),\n", " linewidth=1,\n", " row_linkage=v4_distmat_link,\n", " col_linkage=v4_distmat_link,\n", " figsize=(4,4)\n", ")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "c43907b2-f39e-4410-bbdd-55b89f569cb9", "metadata": {}, "source": [ "E aqui pode ser observado o resultado (e a utilidade) do cálculo das distâncias e da utilização de _clustering_: ao observarmos os votos acima conseguimos, intuitivamente, determinar que o partido do _A_ está mais próximo do _C_, mas fazer o mesmo para 100, 1000 ou 10000 votações seria manifestamente mais difícil." ] } ], "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 }