{ "cells": [ { "cell_type": "markdown", "id": "221598f3", "metadata": {}, "source": [ "## Graph Space\n", "$\\textbf{Lead Author: Anna Calissano}$\n" ] }, { "cell_type": "markdown", "id": "e8ede5d2", "metadata": {}, "source": [ "Dear Learner,\n", "\n", "in this notebook we are going to see gpca and regression in graph space in action." ] }, { "cell_type": "code", "execution_count": 1, "id": "522f03d7", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO: Using numpy backend\n" ] } ], "source": [ "import os\n", "import sys\n", "import warnings\n", "\n", "import matplotlib.pyplot as plt\n", "import networkx as nx\n", "\n", "import geomstats.backend as gs\n", "\n", "import geomstats.datasets.utils as data_utils\n", "\n", "from geomstats.geometry.stratified.graph_space import (\n", " GraphSpace,\n", " GraphSpaceMetric,\n", ")\n", "from geomstats.learning.aac import AAC\n", "\n", "gs.random.seed(2020)\n", "\n", "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "markdown", "id": "32b1acd0", "metadata": {}, "source": [ "# Mammals Grooming\n", "\n", "## Motivation and Dataset\n", "This case study focuses on how the social interaction between baboons changes after an alpha or beta male is knocked-out from the community. Social interaction is here defined as grooming interaction between members of the group. The dataset consists of a set of $26$ social interaction networks between baboons, where nodes are baboons and edges are the number of grooming interactions between baboons. The networks are naturally unlabelled because the baboons in each network are different, belonging to different groups. Data are available at Rossi et al. (2015), while more details about the case study are available at Franz et al. (2015). Notice that the original dataset was filtered, keeping only the networks with less than $20$ baboons. " ] }, { "cell_type": "code", "execution_count": 2, "id": "4a44da66", "metadata": {}, "outputs": [], "source": [ "mammals = data_utils.load_mammals()" ] }, { "cell_type": "markdown", "id": "5f895fb8", "metadata": {}, "source": [ "We visualize one mammals group:" ] }, { "cell_type": "code", "execution_count": 3, "id": "ca8458a6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mammals.max()" ] }, { "cell_type": "code", "execution_count": 4, "id": "039f23fc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mammals_obs = nx.from_numpy_matrix(mammals[5])\n", "pos = nx.kamada_kawai_layout(mammals_obs)\n", "edges, weights = zip(*nx.get_edge_attributes(mammals_obs,'weight').items())\n", "\n", "pos = nx.spring_layout(mammals_obs)\n", "nx.draw_networkx_nodes(mammals_obs, pos, node_color='b', node_size=6)\n", "nx.draw_networkx_edges(mammals_obs, pos, edgelist=edges, edge_color=weights, \n", " width=2.0, edge_cmap=plt.cm.Blues, edge_vmin=0., edge_vmax=10.)" ] }, { "cell_type": "markdown", "id": "c07ba721", "metadata": {}, "source": [ "### Frechet Mean\n", "We compute the Frechet Mean of the set. We first initialize the graph space with the correct number of nodes (the adjacency matrices have been already padded with zeros), then we intialize the space metric and the parameters for the geodesic alignment. " ] }, { "cell_type": "code", "execution_count": 5, "id": "289c529b", "metadata": {}, "outputs": [], "source": [ "graph_space = GraphSpace(n_nodes=mammals.shape[1])\n", "graph_space_metric = GraphSpaceMetric(space=graph_space)\n", "\n", "graph_space_metric.set_aligner('FAQ')\n", "aac_fm=AAC(estimate='frechet_mean', metric=graph_space_metric, max_iter = 300)" ] }, { "cell_type": "code", "execution_count": 6, "id": "35c1120e", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Maximum number of iterations 300 reached. The estimate may be inaccurate\n" ] }, { "data": { "text/html": [ "
_AACFrechetMean(max_iter=300,\n",
       "                metric=<geomstats.geometry.stratified.graph_space.GraphSpaceMetric object at 0x000001858A4267C0>,\n",
       "                total_space_estimator_kwargs={})
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "_AACFrechetMean(max_iter=300,\n", " metric=,\n", " total_space_estimator_kwargs={})" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aac_fm.fit(mammals)" ] }, { "cell_type": "markdown", "id": "e67673b9", "metadata": {}, "source": [ "Let's visualize the mean:" ] }, { "cell_type": "code", "execution_count": 7, "id": "fe07aafc", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mammals_fm = nx.from_numpy_array(aac_fm.estimate_)\n", "edges,weights = zip(*nx.get_edge_attributes(mammals_fm,'weight').items())\n", "\n", "nx.draw_networkx_nodes(mammals_fm, pos, node_color='b', node_size=6)\n", "nx.draw_networkx_edges(mammals_fm, pos, edgelist=edges, edge_color=weights,\n", " width=2.0, edge_cmap=plt.cm.Blues, edge_vmin=0., edge_vmax=10.)" ] }, { "cell_type": "markdown", "id": "1e77de2f", "metadata": {}, "source": [ "### Generalized Geodesic Principal Component Analysis (GGPCA)\n", "We compute the principal components:" ] }, { "cell_type": "code", "execution_count": 8, "id": "0b6228cb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "graph_space_metric.set_point_to_geodesic_aligner(aligner='default', s_min=mammals.min()-1, s_max=mammals.max() +1,\n", " n_points=5)" ] }, { "cell_type": "code", "execution_count": 9, "id": "c778e6fd", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
_AACGGPCA(max_iter=5,\n",
       "          metric=<geomstats.geometry.stratified.graph_space.GraphSpaceMetric object at 0x000001858A4267C0>)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "_AACGGPCA(max_iter=5,\n", " metric=)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aac_ggpca = AAC(estimate='ggpca', metric=graph_space_metric, max_iter=5)\n", "aac_ggpca.fit(mammals)" ] }, { "cell_type": "markdown", "id": "00b5fb14", "metadata": {}, "source": [ "To visualize the GGPCA we plot the data along the geodesic:" ] }, { "cell_type": "code", "execution_count": 10, "id": "7b5e505b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2, 18, 18)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aac_ggpca.components_.shape" ] }, { "cell_type": "markdown", "id": "99624e6c", "metadata": {}, "source": [ "Let's visualized the pricipal components:" ] }, { "cell_type": "code", "execution_count": 11, "id": "cae60e9c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.26419311, 0.14383405])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aac_ggpca.explained_variance_ratio_" ] }, { "cell_type": "code", "execution_count": 12, "id": "781ac691", "metadata": {}, "outputs": [], "source": [ "X_last = graph_space.permute(mammals, aac_ggpca.metric.point_to_geodesic_aligner.perm_)" ] }, { "cell_type": "markdown", "id": "6125772c", "metadata": {}, "source": [ "\n", "The first geodesic principal components reflect the variability in terms of isolated nodes, the second principal component in terms of density. The example is able to show how the GGPCA in the Graph Space setting is capturing social interaction changes that the original paper Rossi et al. (2015) is not able to capture with standard Euclidean methods. This example is also naturally unlabelled, due to the different baboons in different groups (i.e. different nodes in different networks).\n" ] }, { "cell_type": "markdown", "id": "a2912d1d", "metadata": {}, "source": [ "# GGRegression Fifa 2018 Player Passing Networks\n", "\n", "## Motivation and Dataset\n", "In this last case study, we studied the football players passing network (PPN) (i.e., the number of times two players\n", "pass each other the ball throughout the match) as a function of the final match score. The analysis and visualization\n", "of the players passing networks has becoming popular in the last years to understand the players network, the teams performance and strategy, and the final score. Using open source database in Stats Bomb, we collect all\n", "the PPN of each team in each match for the whole Fifa 2018 World Championship. The dataset contains observations\n", "about the 64 matches played (from 14/06/2018 to 15/07/2018) between 32 teams from all over the world." ] }, { "cell_type": "code", "execution_count": 13, "id": "499c81c1", "metadata": {}, "outputs": [], "source": [ "ppn, scores = data_utils.load_football()" ] }, { "cell_type": "code", "execution_count": 14, "id": "0d55820f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ppn_obs = nx.from_numpy_matrix(ppn[5])\n", "pos = nx.kamada_kawai_layout(ppn_obs)\n", "edges, weights = zip(*nx.get_edge_attributes(ppn_obs,'weight').items())\n", "\n", "pos = nx.spring_layout(ppn_obs)\n", "nx.draw_networkx_nodes(ppn_obs, pos, node_color='b', node_size=6)\n", "nx.draw_networkx_edges(ppn_obs, pos, edgelist=edges, edge_color=weights, width=2.0,\n", " edge_cmap=plt.cm.Blues, edge_vmin=0., edge_vmax=10.)" ] }, { "cell_type": "code", "execution_count": 15, "id": "74eba5b2", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Maximum number of iterations 20 reached. The estimate may be inaccurate\n" ] }, { "data": { "text/html": [ "
_AACRegressor(metric=<geomstats.geometry.stratified.graph_space.GraphSpaceMetric object at 0x000001858A567F40>,\n",
       "              total_space_estimator_kwargs={})
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "_AACRegressor(metric=,\n", " total_space_estimator_kwargs={})" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "graph_space = GraphSpace(n_nodes=ppn.shape[1])\n", "graph_space_metric = GraphSpaceMetric(space=graph_space)\n", "graph_space_metric.set_aligner('FAQ')\n", "\n", "aac_reg = AAC(estimate='regression', metric=graph_space_metric)\n", "aac_reg.fit(X=gs.expand_dims(scores, axis=1), y=ppn)" ] }, { "cell_type": "markdown", "id": "077c2b94", "metadata": {}, "source": [ "### References:\n", " \n", "Franz, M., Altmann, J., & Alberts, S. C. (2015). Knockouts of high-ranking males have limited impact on baboon social networks. Current Zoology, 61(1), 107-113.\n", "\n", "S. S. Ltd, Statsbomb open data, https://github.com/statsbomb/open-data (2018).\n", "\n", "Rossi, R., & Ahmed, N. (2015, March). The network data repository with interactive graph analytics and visualization. In Twenty-ninth AAAI conference on artificial intelligence.\n" ] } ], "metadata": { "backends": [ "numpy" ], "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.9.6" } }, "nbformat": 4, "nbformat_minor": 5 }