├── resources └── main-image-python.png ├── .gitignore ├── README.md ├── A. Datasets.md └── 2. Vectores, Eventos Aleatorios y Probabilidad.ipynb /resources/main-image-python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sborquez/Python-LEC/HEAD/resources/main-image-python.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | 106 | # google drive 107 | .ini 108 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Python LEC 2 | ---------------- 3 | > La guia práctica de __Python__ para el **L**aboratorio de **E**stadística **C**omputacional. 4 | 5 | Esta es una recopilación de guias que te ayudarán a introducirte a las herramientas disponibles en [python](https://www.python.org/) para el análisis estadístico. El objetivo de estas guías es lograr que el lector: 6 | 7 | * Adopte estilos y buenas prácticas de programación con Python. 8 | * Aprenda a utilizar modulos del ambiente [scipy](https://www.scipy.org/), tales como: 9 | * [numpy](http://www.numpy.org/) 10 | * [pandas](http://pandas.pydata.org/) 11 | * [jupyter-notebook](http://jupyter.org/) 12 | * [scipy.stats](https://docs.scipy.org/doc/scipy/reference/stats.html/) 13 | * [matplotlib](http://matplotlib.org/) 14 | * Practique la manipulación de dato y aplique su razonamiento estadístico con casos de la mundo real. 15 | 16 | ## Abrir en Google Colab 17 | 18 | Puedes abrir una copia directamente con el siguiente link: 19 | 20 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/sborquez/Python-LEC/blob/master) 21 | 22 | ## Contenido 23 | 24 | 1. **[Introducción y Herramientas Básicas](https://github.com/sborquez/Python-LEC/blob/master/0.%20Introducci%C3%B3n%20y%20Herramientas%20B%C3%A1sicas.ipynb)**: 25 | Preparación del laboratorio, guias de estilo y buenas prácticas con Python. Una introducción a las herramientas que se útilizarán. 26 | 2. **[Análisis Exploratorio](https://github.com/sborquez/Python-LEC/blob/master/1.%20An%C3%A1lisis%20Exploratorio.ipynb)**: Carga, limpia y manipula datos usando pandas, crea visualizaciones informativas con matplolib, seaborn y plotly. 27 | 3. **[Vectores, Eventos Aleatorios y Probabilidad](https://github.com/sborquez/Python-LEC/blob/master/2.%20Vectores%2C%20Eventos%20Aleatorios%20y%20Probabilidad.ipynb)**: Aprende de lo básico a lo avanzado de NumPy. Python para la estadística computacional. 28 | 4. **[Distribuciones y Variables Aleatorias](https://github.com/sborquez/Python-LEC/blob/master/3.%20Distribuciones%20y%20Variables%20Aleatorias.ipynb)**: Utiliza las Variables Aleatorias y Distrubuciones disponibles con el paquete de scipy. 29 | 30 | ## Anexos 31 | 32 | A. **[Datasets](https://github.com/sborquez/Python-LEC/blob/master/A.%20Datasets.md)**: Colección de distintos datasets. 33 | 34 | B. **Algebra Lineal**: Pronto ... 35 | 36 | ## Bibliografía 37 | 38 | > Toda la documentación de los módulos se encuentra disponible en sus respectivas páginas. 39 | 40 | * Python for Data Analysis, 2nd Edition by William McKinney [web](http://shop.oreilly.com/product/0636920050896.do) 41 | * Think Bayes: Bayesian Statistics in Python, Allen B. Downey · O'Reilly Media [web](https://greenteapress.com/wp/think-bayes/) 42 | * Think Stats: Exploratory Data Analysis, Allen B. Downey · O'Reilly Media [web](https://greenteapress.com/thinkstats/) 43 | * Seeing Theory, A visual introduction to probability and statistics. [web](https://seeing-theory.brown.edu/) 44 | * Kaggle: Your Home For DataScience [web](https://www.kaggle.com) 45 | 46 | -------------------------------------------------------------------------------- /A. Datasets.md: -------------------------------------------------------------------------------- 1 |

Laboratorio de Estadística Computacional
con Python

2 | 3 | 4 |

Anexo A: Datasets

5 | 6 |
Recopilación creada por Sebastián Bórquez G. - sebastian.borquez.g@gmail.com - DI UTFSM - Abril 2020.
7 | 8 | # Tabla de Contenido 9 | 10 | * [Acceso](#A.1) 11 | * [Nacionales](#A.2) 12 | * [Internacionales](#A.3) 13 | * [Countries](#A.3.1) 14 | * [Coronavirus Source Data](#A.3.2) 15 | * [Kaggle Challenges](#A.4) 16 | * [Pokemon Dataset](#A.4.1) 17 | * [Imágenes](#A.5) 18 | * [Fuentes Favoritas](#A.6) 19 | * [Datasets Privados](#A.7) 20 | 21 | 22 |
23 | 24 | 25 | # Acceso 26 | 27 | Estos datos están disponible en este servidor. 28 | 29 | * [Labcomp](https://labcomp.cl/~sborquez/datasets/) 30 | 31 | 32 |
33 | 34 | 35 | # Nacionales 36 | 37 | Coleción de datos recolectados por fuentes Chilenas. 38 | 39 | ```https://labcomp.cl/~sborquez/datasets/chile/``` 40 | 41 | * Migraciones: [**fuente**](https://www.extranjeria.gob.cl/estadisticas-migratorias/) | [**descarga directa**](https://labcomp.cl/~sborquez/datasets/chile/Formato-WEB-PDs-2005-2016.xlsx) 42 | 43 | 44 |
45 | 46 | 47 | # Intercacional 48 | 49 | Distintas recolección de datos demográficos y ecconómicas. De fuentes internacionales. 50 | 51 | 52 |
53 | 54 | ## Countries 55 | 56 | Fuente: [countryinfo](https://github.com/porimol/countryinfo) 57 | 58 | Información demogeográfica de los paises del mundo. 59 | 60 | Una copia desactualizada `The last update was made on April 16, 2020 (11:30, London time).` en formato `.csv`. Se encuentra aqui [descarga directa](https://labcomp.cl/~sborquez/datasets/covid/total_cases.csv) 61 | 62 | 63 |
64 | 65 | 66 | ## Coronavirus Source Data 67 | 68 | Fuente: [Our World in Data](https://ourworldindata.org/coronavirus-source-data) 69 | 70 | Our complete COVID-19 dataset is a collection of the COVID-19 data maintained by Our World in Data. It is updated daily and includes data on confirmed cases, deaths, and testing. 71 | 72 | All our data can be downloaded. 73 | 74 | You find the complete Our World in Data COVID-19 dataset – together with a complete overview of our sources and more – at our GitHub repository [here](https://github.com/owid/covid-19-data/tree/master/public/data/). 75 | 76 | Una copia de los casos casos totales `The last update was made on April 16, 2020 (11:30, London time).` se encuentra aqui [descarga directa](https://labcomp.cl/~sborquez/datasets/covid/total_cases.csv) 77 | 78 | 79 |
80 | 81 | 82 | # Kaggle Challenges 83 | 84 | Mi colección kaggles favoritos. 85 | 86 | 87 |
88 | 89 | 90 | ## Pokemon Dataset 91 | 92 | 93 | Fuente: [The Complete Pokemon Dataset](https://www.kaggle.com/rounakbanik/pokemon) 94 | 95 | The Complete Pokemon Dataset es un conjunto de datos disponible en la plataforma Kaggle. Este conjunto de datos contiene información sobre Pokemones disponibles hasta la séptima generación. 96 | 97 | Esta información abarca desde los nombres, generación, tipos y stats de los diferentes Pokemones, la cual utilizaremos para analizar a las diferentes generaciones de pokemones. 98 | 99 | 100 | Una copia del dataset `The last update was made on 2019.` se encuentra aqui [descarga directa](https://labcomp.cl/~sborquez/datasets/pokemon/pokemon.csv) 101 | 102 | 103 |
104 | 105 | 106 | ## Imágenes 107 | 108 | Colección de imágenes interesantes para analizar. Esta tiene distintas fuentes desconocidas. 109 | 110 | 111 | ```https://labcomp.cl/~sborquez/datasets/images/``` 112 | 113 | [carpeta](https://labcomp.cl/~sborquez/datasets/images/) 114 | 115 | 116 |
117 | 118 | 119 | ## Fuentes favoritas 120 | 121 | Algunas páginas como fuente de inspiración 122 | 123 | * Kaggle [web](https://www.kaggle.com/competitions) 124 | * UCI repository [web](http://archive.ics.uci.edu/ml/) 125 | * ECML [web](http://www.ecmlpkdd2015.org) 126 | * NIPS [web](https://nips.cc) 127 | 128 | 129 |
130 | 131 | 132 | 133 | # Datasets Privados 134 | 135 | Estos datos no son públicos, pero puedes comunicarte conmigo para concederte acceso sebastian.borquez.g@gmail.com. 136 | 137 | 138 | 139 | ## Her2Net 140 | 141 | Imágenes histopatologicas para la segmentación de sobreexpresión de la proteina HER2 en la membrana celular. 142 | 143 | 144 | 145 | 146 | ## CTA gamma rays Simulations 147 | 148 | 149 | 150 | 151 | Fuente: [**CTA Prod3B**](https://www.cta-observatory.org/science/cta-performance/cta-prod3b-v1/) 152 | 153 | 154 | Simulaciones de MC para la reconstrucción de eventos de gamma rays. 155 | 156 | 157 | -------------------------------------------------------------------------------- /2. Vectores, Eventos Aleatorios y Probabilidad.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "
\n", 8 | "

Laboratorio de Estadística Computacional
con Python

\n", 9 | "\n", 10 | " \n", 11 | "

Tema 2: Vectores, Eventos Aleatorios y Probabilidad

\n", 12 | "Notebook creado por Sebastián Bórquez G. - sebastian.borquez.g@gmail.com - DI UTFSM - Diciembre 2019.\n", 13 | "
\n", 14 | "\n", 15 | "## Tabla de Contenido\n", 16 | "\n", 17 | "* [Introducción a NumPy](#2.1)\n", 18 | " * [NumPy ndarray: El Objeto Arreglo Multidimensional](#2.1.1)\n", 19 | "* [Simulaciones](#2.2)\n", 20 | " * [Eventos Aleatorios](#2.2.1)\n", 21 | " * [Random Walk](#2.2.2)\n", 22 | "* [Teorema de Bayes](#2.3)\n", 23 | " " 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "
\n", 31 | "\n", 32 | "## Introducción a NumPy\n", 33 | "\n", 34 | "\n", 35 | "**[NumPy](http://www.numpy.org/)\n", 36 | " (Numeric Python)** es el módulo de Python para el cálculo científico, incluye soporte para el uso de **arrays n dimensionales (ndarray)**, un rápido y eficiente arreglo multidimensional provisto de operaciones aritméticas vectorizadas. Es requisito para la mayoría de los módulos que realizan operaciones de alto rendimiento. Además incluye el submodulo **numpy.random** para la generación de variables aleatorias.\n", 37 | "\n", 38 | "Para poder utilizarlo debemos agregar la siguiente linea a nuestro código:\n", 39 | "\n", 40 | "```python\n", 41 | "import numpy as np\n", 42 | "```\n", 43 | "\n", 44 | "A continuación se revisarán los comandos básicos que se utilizarán durante esta actividad, para mayor información del módulo se recomienda revisar el siguiente [tutorial](https://docs.scipy.org/doc/numpy/user/quickstart.html)\n", 45 | "\n", 46 | "
\n", 47 | "\n", 48 | "### NumPy ndarray: El Objeto Arreglo Multidimensional\n", 49 | "\n", 50 | "La característica principal de NumPy es su arreglo N-dimensional, o **ndarray**, contenedor flexible y rápido para grandes conjuntos de datos en Python. Nos permiten realizar operaciones matemáticas en un bloque de datos usando una sintaxis similar a realizar operaciones con elementos escalares:\n" 51 | ] 52 | }, 53 | { 54 | "cell_type": "code", 55 | "execution_count": 1, 56 | "metadata": {}, 57 | "outputs": [ 58 | { 59 | "name": "stdout", 60 | "output_type": "stream", 61 | "text": [ 62 | "\n" 63 | ] 64 | }, 65 | { 66 | "data": { 67 | "text/plain": [ 68 | "array([[ 0.932, -0.323, 0.147],\n", 69 | " [ 0.442, 0. , -0.231]])" 70 | ] 71 | }, 72 | "execution_count": 1, 73 | "metadata": {}, 74 | "output_type": "execute_result" 75 | } 76 | ], 77 | "source": [ 78 | "import numpy as np\n", 79 | "\n", 80 | "data = np.array([[0.932, -0.323, 0.147], [0.442, 0.0, -0.231]])\n", 81 | "\n", 82 | "print(type(data))\n", 83 | "\n", 84 | "data" 85 | ] 86 | }, 87 | { 88 | "cell_type": "code", 89 | "execution_count": 2, 90 | "metadata": {}, 91 | "outputs": [ 92 | { 93 | "data": { 94 | "text/plain": [ 95 | "array([[4.63587323, 5.8798375 , 5.3429182 ],\n", 96 | " [5.05328923, 5.5 , 5.76640805]])" 97 | ] 98 | }, 99 | "execution_count": 2, 100 | "metadata": {}, 101 | "output_type": "execute_result" 102 | } 103 | ], 104 | "source": [ 105 | "55 / (2*data + 10)" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "metadata": {}, 111 | "source": [ 112 | "Un _ndarray_ es un contenedor generico multidimensional para data homogenia; esto es, **todos los elementos deben ser del mismo tipo**. Cada array tiene su forma o **shape**, una tupla que indica el tamaño de cada dimension, y un **dtype**, un objeto que describe el tipo de la data almacenada en el array:" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": 3, 118 | "metadata": {}, 119 | "outputs": [ 120 | { 121 | "name": "stdout", 122 | "output_type": "stream", 123 | "text": [ 124 | "Dimensiones: 2\n", 125 | "Tamaño de las dimensiones del arreglo: (2, 3)\n", 126 | "Tipos de los elementos: float64\n" 127 | ] 128 | } 129 | ], 130 | "source": [ 131 | "print(\"Dimensiones:\", data.ndim)\n", 132 | "print(\"Tamaño de las dimensiones del arreglo:\", data.shape)\n", 133 | "print(\"Tipos de los elementos:\", data.dtype)" 134 | ] 135 | }, 136 | { 137 | "cell_type": "markdown", 138 | "metadata": {}, 139 | "source": [ 140 | "### Crear Arreglos\n", 141 | "\n", 142 | "La manera más fácil de crear arreglos es usando `np.array(iterable)`, pero existe más funciones que se adecuan a distintas necesidades." 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 5, 148 | "metadata": {}, 149 | "outputs": [ 150 | { 151 | "name": "stdout", 152 | "output_type": "stream", 153 | "text": [ 154 | "Array constructor\n", 155 | "[ 2 3 5 10 -1]\n", 156 | "\n", 157 | "Ceros:\n", 158 | "[[0. 0. 0.]\n", 159 | " [0. 0. 0.]\n", 160 | " [0. 0. 0.]]\n", 161 | "\n", 162 | "Unos:\n", 163 | "[[1. 1. 1.]\n", 164 | " [1. 1. 1.]\n", 165 | " [1. 1. 1.]]\n", 166 | "\n", 167 | "Empty:\n", 168 | "[[6.23042070e-307 4.67296746e-307 1.69121096e-306]\n", 169 | " [8.01095173e-307 1.89146896e-307 1.37961302e-306]\n", 170 | " [1.05699242e-307 8.01097889e-307 1.78020169e-306]\n", 171 | " [7.56601165e-307 1.02359984e-306 1.33510679e-306]\n", 172 | " [2.22522597e-306 1.78019761e-306 1.11260144e-306]\n", 173 | " [6.89812281e-307 2.22522596e-306 2.13621350e-306]]\n", 174 | "\n", 175 | "Range:\n", 176 | "[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]\n", 177 | "\n", 178 | "Regular grid:\n", 179 | "[0. 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1. ]\n", 180 | "\n", 181 | "Random:\n", 182 | "[1.63085501 5.36278087 4.35527252 5.09886798 6.83911219 5.61694616]\n" 183 | ] 184 | } 185 | ], 186 | "source": [ 187 | "# Array constructor: np.array( python_iterable )\n", 188 | "print(\"Array constructor\")\n", 189 | "print( np.array([2, 3, 5, 10, -1]) )\n", 190 | "\n", 191 | "# Arrays de ceros: np.zeros(shape)\n", 192 | "print(\"\\nCeros:\")\n", 193 | "print( np.zeros((3,3)) )\n", 194 | "\n", 195 | "# Arrays de unos: np.ones(shape)\n", 196 | "print(\"\\nUnos:\")\n", 197 | "print( np.ones((3,3)) )\n", 198 | "\n", 199 | "# Array vacio: np.empty(shape)\n", 200 | "print(\"\\nEmpty:\")\n", 201 | "print( np.empty((6,3)) )\n", 202 | "\n", 203 | "# Range: np.range(start, stop, step)\n", 204 | "print(\"\\nRange:\")\n", 205 | "print( np.arange(0., 10., 1.) )\n", 206 | "\n", 207 | "# Regular grid: np.linspace(start, end, n_values)\n", 208 | "print(\"\\nRegular grid:\")\n", 209 | "print( np.linspace(0., 1., 9) )\n", 210 | "\n", 211 | "# Secuencia random: np.random\n", 212 | "print(\"\\nRandom:\")\n", 213 | "print( np.random.uniform(10, size=6) )" 214 | ] 215 | }, 216 | { 217 | "cell_type": "markdown", 218 | "metadata": {}, 219 | "source": [ 220 | "### Operaciones matemáticas básicas\n", 221 | "\n", 222 | "La mayoría de las operaciones realizadas en NumPy son realizadas `element-wise`, por ejemplo calcular $C = A + B$ se traduce a $C[i,j] = A[i,j] + B[i,j]$." 223 | ] 224 | }, 225 | { 226 | "cell_type": "code", 227 | "execution_count": 7, 228 | "metadata": {}, 229 | "outputs": [ 230 | { 231 | "name": "stdout", 232 | "output_type": "stream", 233 | "text": [ 234 | "[[0.57272943 0.46531185 0.92287039]\n", 235 | " [0.20186139 0.16607915 0.92157951]]\n", 236 | "[[0.27430109 0.85422118 0.50129763]\n", 237 | " [0.83846618 0.14699148 0.84202488]]\n", 238 | "Sum:\n", 239 | "[[0.84703052 1.31953303 1.42416803]\n", 240 | " [1.04032757 0.31307063 1.76360439]]\n", 241 | "\n", 242 | "Subtraction\n", 243 | "[[ 0.29842835 -0.38890933 0.42157276]\n", 244 | " [-0.63660479 0.01908767 0.07955462]]\n", 245 | "\n", 246 | "Product\n", 247 | "[[0.15710031 0.39747924 0.46263274]\n", 248 | " [0.16925395 0.02441222 0.77599288]]\n", 249 | "\n", 250 | "Matricial Product (A*B^T)\n", 251 | "[[1.01721229 1.32569097]\n", 252 | " [0.65922475 0.96965905]]\n", 253 | "\n", 254 | "Transpose\n", 255 | "[[0.57272943 0.20186139]\n", 256 | " [0.46531185 0.16607915]\n", 257 | " [0.92287039 0.92157951]]\n", 258 | "[[0.27430109 0.83846618]\n", 259 | " [0.85422118 0.14699148]\n", 260 | " [0.50129763 0.84202488]]\n", 261 | "\n", 262 | " Power\n", 263 | "[[0.32801901 0.21651512 0.85168976]\n", 264 | " [0.04074802 0.02758228 0.84930879]]\n", 265 | "\n", 266 | " np.exp()\n", 267 | "[[1.77310001 1.59251073 2.51650338]\n", 268 | " [1.22367838 1.18066655 2.51325697]]\n", 269 | "\n", 270 | " np.sin()\n", 271 | "[[0.54192795 0.44870152 0.79733728]\n", 272 | " [0.20049327 0.16531673 0.79655753]]\n", 273 | "\n", 274 | " np.cos()\n", 275 | "[[0.84042495 0.89368168 0.60353398]\n", 276 | " [0.97969508 0.98624053 0.60456274]]\n", 277 | "\n", 278 | " np.tan()\n", 279 | "[[0.64482611 0.50208203 1.32111416]\n", 280 | " [0.20464865 0.16762313 1.31757627]]\n" 281 | ] 282 | } 283 | ], 284 | "source": [ 285 | "# first we create two random arrays:\n", 286 | "A = np.random.random((2,3))\n", 287 | "B = np.random.random((2,3))\n", 288 | "print(A)\n", 289 | "print(B)\n", 290 | "\n", 291 | "# sum\n", 292 | "print(\"Sum:\")\n", 293 | "print( A+B )\n", 294 | "\n", 295 | "# subtraction\n", 296 | "print(\"\\nSubtraction\")\n", 297 | "print( A-B )\n", 298 | "\n", 299 | "# product\n", 300 | "print(\"\\nProduct\")\n", 301 | "print( A*B )\n", 302 | "\n", 303 | "# matricial product\n", 304 | "print(\"\\nMatricial Product (A*B^T)\")\n", 305 | "print( np.dot(A,B.T) )\n", 306 | "print(\"\\nTranspose\")\n", 307 | "print( A.T )\n", 308 | "print( B.T )\n", 309 | "\n", 310 | "\n", 311 | "\n", 312 | "# power\n", 313 | "print(\"\\n Power\")\n", 314 | "print( A**2 )\n", 315 | "\n", 316 | "# Some common mathematical functions\n", 317 | "print(\"\\n np.exp()\")\n", 318 | "print( np.exp(A) )\n", 319 | "print(\"\\n np.sin()\")\n", 320 | "print( np.sin(A) )\n", 321 | "print(\"\\n np.cos()\")\n", 322 | "print( np.cos(A))\n", 323 | "print(\"\\n np.tan()\")\n", 324 | "print( np.tan(A) )" 325 | ] 326 | }, 327 | { 328 | "cell_type": "markdown", 329 | "metadata": {}, 330 | "source": [ 331 | "### Operaciones Booleanas" 332 | ] 333 | }, 334 | { 335 | "cell_type": "code", 336 | "execution_count": 8, 337 | "metadata": {}, 338 | "outputs": [ 339 | { 340 | "name": "stdout", 341 | "output_type": "stream", 342 | "text": [ 343 | "A > B:\n", 344 | "[[False False False]\n", 345 | " [False False False]\n", 346 | " [ True True True]]\n", 347 | "\n", 348 | "A =< B:\n", 349 | "[[ True True True]\n", 350 | " [ True True True]\n", 351 | " [False False False]]\n", 352 | "\n", 353 | " A==B:\n", 354 | "[[ True True True]\n", 355 | " [False False True]\n", 356 | " [False False False]]\n", 357 | "\n", 358 | " A!=B:\n", 359 | "[[False False False]\n", 360 | " [ True True False]\n", 361 | " [ True True True]]\n", 362 | "\n", 363 | " A and B:\n", 364 | "[[ True True True]\n", 365 | " [False False True]\n", 366 | " [False False False]]\n", 367 | "[[ True True True]\n", 368 | " [False False True]\n", 369 | " [False False False]]\n", 370 | "\n", 371 | " A or B:\n", 372 | "[[ True True True]\n", 373 | " [False False True]\n", 374 | " [ True True True]]\n", 375 | "[[ True True True]\n", 376 | " [False False True]\n", 377 | " [ True True True]]\n", 378 | "\n", 379 | " not A:\n", 380 | "[[False False False]\n", 381 | " [ True True False]\n", 382 | " [ True True True]]\n", 383 | "[[False False False]\n", 384 | " [ True True False]\n", 385 | " [ True True True]]\n" 386 | ] 387 | } 388 | ], 389 | "source": [ 390 | "# Creating two 2d-arrays\n", 391 | "A = np.array( [[1, 2, 3], [2, 3, 5], [1, 9, 6]] )\n", 392 | "B = np.array( [[1, 2, 3], [3, 5, 5], [0, 8, 5]] )\n", 393 | "\n", 394 | "print(\"A > B:\")\n", 395 | "print( A > B )\n", 396 | "\n", 397 | "print(\"\\nA =< B:\")\n", 398 | "print( A <= B )\n", 399 | "\n", 400 | "print(\"\\n A==B:\")\n", 401 | "print( A==B )\n", 402 | "\n", 403 | "print(\"\\n A!=B:\")\n", 404 | "print( A!=B )\n", 405 | "\n", 406 | "# Creating two 2d boolean arrays\n", 407 | "C = A==B\n", 408 | "D = A>=B\n", 409 | "\n", 410 | "print(\"\\n A and B:\")\n", 411 | "print( C & D)\n", 412 | "print( np.logical_and(C,D) )\n", 413 | "\n", 414 | "print(\"\\n A or B:\")\n", 415 | "print( C | D)\n", 416 | "print( np.logical_or(C,D) )\n", 417 | "\n", 418 | "print(\"\\n not A:\")\n", 419 | "print( ~C )\n", 420 | "print( np.logical_not(C))" 421 | ] 422 | }, 423 | { 424 | "cell_type": "markdown", 425 | "metadata": {}, 426 | "source": [ 427 | "### Basic Indexing and Slicing\n", 428 | "\n", 429 | "Indexar en un tópico amplio en NumPy existe una variedad de formas y métodos para seleccionar un subconjunto desde tu array o elementos individuales. \n", 430 | "\n", 431 | "Un arreglo de una dimensión son similares a las listas de Python: \n" 432 | ] 433 | }, 434 | { 435 | "cell_type": "code", 436 | "execution_count": 9, 437 | "metadata": {}, 438 | "outputs": [ 439 | { 440 | "name": "stdout", 441 | "output_type": "stream", 442 | "text": [ 443 | "arr: [0 1 2 3 4 5 6 7 8 9]\n", 444 | "\n", 445 | "arr[5]: 5\n", 446 | "arr[5:8]: [5 6 7]\n", 447 | "\n", 448 | "arr[5:8] = 12\n", 449 | "arr: [ 0 1 2 3 4 12 12 12 8 9]\n", 450 | "\n", 451 | "arr_slice: [12 12 12]\n", 452 | "arr: [0 1 2 3 4 0 0 0 8 9]\n" 453 | ] 454 | } 455 | ], 456 | "source": [ 457 | "# Nuevo arrray\n", 458 | "arr = np.arange(10)\n", 459 | "print(\"arr:\",arr)\n", 460 | "\n", 461 | "# Index an element\n", 462 | "print(\"\\narr[5]:\", arr[5])\n", 463 | "\n", 464 | "# Index a slice\n", 465 | "print(\"arr[5:8]:\", arr[5:8])\n", 466 | "\n", 467 | "# Change values to a slice\n", 468 | "print(\"\\narr[5:8] = 12\")\n", 469 | "arr[5:8] = 12\n", 470 | "print(\"arr:\",arr)\n", 471 | "\n", 472 | "# slice are references, not copies.\n", 473 | "arr_slice = arr[5:8]\n", 474 | "print(\"\\narr_slice:\", arr_slice)\n", 475 | "arr_slice[:] = 0\n", 476 | "\n", 477 | "print(\"arr:\", arr)" 478 | ] 479 | }, 480 | { 481 | "cell_type": "markdown", 482 | "metadata": {}, 483 | "source": [ 484 | "Para *n-dimensiones* se utiliza la sintaxis: `arr[i,j,k,...]`, cada indice se separa por una coma:" 485 | ] 486 | }, 487 | { 488 | "cell_type": "code", 489 | "execution_count": 10, 490 | "metadata": {}, 491 | "outputs": [ 492 | { 493 | "name": "stdout", 494 | "output_type": "stream", 495 | "text": [ 496 | "arr2d:\n", 497 | " [[1 2 3]\n", 498 | " [4 5 6]\n", 499 | " [7 8 9]]\n", 500 | "arr2d[2]: [7 8 9]\n", 501 | "arr2d[0][2]: 3\n" 502 | ] 503 | } 504 | ], 505 | "source": [ 506 | "arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n", 507 | "print(\"arr2d:\\n\", arr2d)\n", 508 | "print(\"arr2d[2]:\",arr2d[2])\n", 509 | "\n", 510 | "print(\"arr2d[0][2]:\", arr2d[0,2])" 511 | ] 512 | }, 513 | { 514 | "cell_type": "markdown", 515 | "metadata": {}, 516 | "source": [ 517 | "Para _slice_ se usa las siguientes sintaxis:\n", 518 | "\n", 519 | "1. `arr[i_0:i_n,...]`: slice desde i_0 a i_n (exclusivo),\n", 520 | "2. `arr[i_0:i_n: i_step,...]`: slice desde i_0 a i_n con salto de i_step.\n", 521 | "\n", 522 | "Si i_0 y/o i_n no son especificados, se utiliza el inicio y el fin del array respectivamente.\n" 523 | ] 524 | }, 525 | { 526 | "cell_type": "code", 527 | "execution_count": 11, 528 | "metadata": {}, 529 | "outputs": [ 530 | { 531 | "name": "stdout", 532 | "output_type": "stream", 533 | "text": [ 534 | "arr3d:\n", 535 | " [[[ 1 2 3]\n", 536 | " [ 4 5 6]]\n", 537 | "\n", 538 | " [[ 7 8 9]\n", 539 | " [10 11 12]]]\n", 540 | "\n", 541 | "arr3d[:2, 1:]:\n", 542 | " [[ 4]\n", 543 | " [10]]\n" 544 | ] 545 | } 546 | ], 547 | "source": [ 548 | "arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])\n", 549 | "\n", 550 | "print(\"arr3d:\\n\", arr3d)\n", 551 | "\n", 552 | "print(\"\\narr3d[:2, 1:]:\\n\", arr3d[:2, 1:, 0])" 553 | ] 554 | }, 555 | { 556 | "cell_type": "markdown", 557 | "metadata": {}, 558 | "source": [ 559 | "### Boolean indexing\n", 560 | "\n", 561 | "También es posible usar _masks_ o condiciones booleanas para selecionar valores de un array." 562 | ] 563 | }, 564 | { 565 | "cell_type": "code", 566 | "execution_count": 12, 567 | "metadata": {}, 568 | "outputs": [ 569 | { 570 | "name": "stdout", 571 | "output_type": "stream", 572 | "text": [ 573 | "arr: [0 1 2 3 4 5 6 7]\n", 574 | "arr[mask]: [0 1 3 5 7]\n", 575 | "arr[arr%2 == 0]: [6]\n" 576 | ] 577 | } 578 | ], 579 | "source": [ 580 | "arr = np.arange(8)\n", 581 | "print(\"arr:\", arr)\n", 582 | "\n", 583 | "# Implicit list\n", 584 | "mask = [True, True, False, True, False, True, False, True]\n", 585 | "print(\"arr[mask]:\", arr[mask])\n", 586 | "\n", 587 | "# Boolean condition\n", 588 | "print(\"arr[arr%2 == 0]:\", arr[arr == 6])" 589 | ] 590 | }, 591 | { 592 | "cell_type": "markdown", 593 | "metadata": {}, 594 | "source": [ 595 | "### Statistics methods\n", 596 | "\n", 597 | "Además de las funciones algebraicas, tambien incluye subrutinas comunes para la estadistica:" 598 | ] 599 | }, 600 | { 601 | "cell_type": "code", 602 | "execution_count": 13, 603 | "metadata": {}, 604 | "outputs": [ 605 | { 606 | "name": "stdout", 607 | "output_type": "stream", 608 | "text": [ 609 | "[[1 2 3]\n", 610 | " [3 4 5]]\n", 611 | "[2. 3. 4.]\n", 612 | "[2. 4.]\n", 613 | "axis 0\n", 614 | "2.0\n", 615 | "3.0\n", 616 | "4.0\n", 617 | "\n", 618 | "axis 1\n", 619 | "2.0\n", 620 | "4.0\n" 621 | ] 622 | } 623 | ], 624 | "source": [ 625 | "arr = np.array([[1,2, 3],\n", 626 | " [3,4,5]])\n", 627 | "print(arr)\n", 628 | "\n", 629 | "print(arr.mean(axis=0))\n", 630 | "print(arr.mean(axis=1))\n", 631 | "\n", 632 | "#axis 0\n", 633 | "print(\"axis 0\")\n", 634 | "print(arr[:,0].mean())\n", 635 | "print(arr[:,1].mean())\n", 636 | "print(arr[:,2].mean())\n", 637 | "\n", 638 | "#axis 1\n", 639 | "print(\"\\naxis 1\")\n", 640 | "print(arr[0,:].mean())\n", 641 | "print(arr[1,:].mean())" 642 | ] 643 | }, 644 | { 645 | "cell_type": "code", 646 | "execution_count": 80, 647 | "metadata": {}, 648 | "outputs": [ 649 | { 650 | "name": "stdout", 651 | "output_type": "stream", 652 | "text": [ 653 | "arr: [ -3 5 -9 8 -5 -9 -3 6 9 0 -4 7 -7 -9 -2 -9 0 -4\n", 654 | " 9 -3 -5 -1 -1 -5 7 -5 2 -8 -5 8 -6 8 8 -10 -2 3\n", 655 | " 0 2 7 8 3 9 3 6 -5 -10 0 5 1 -6 -7 7 6 9\n", 656 | " 1 -7 4 -4 -8 -8 -1 0 -2 -6 -7 3 -5 -8 -10 -10 3 3\n", 657 | " -9 -2 8 9 2 7 8 -5 -4 0 -6 1 7 -4 4 0 -2 4\n", 658 | " -6 5 -9 -1 5 4 8 -8 -1 -6]\n", 659 | "\n", 660 | "min: -10\n", 661 | "max: 9\n", 662 | "ptp (max - min): 19\n", 663 | "\n", 664 | "mean: -0.5\n", 665 | "median: -1.0\n", 666 | "Percentil 95: 8.049999999999997\n", 667 | "\n", 668 | "std: 5.8966091951222275\n", 669 | "var: 34.77\n", 670 | "Cov: 35.121212121212125\n", 671 | "histogram\n", 672 | "\tbins: [-10. -8.1 -6.2 -4.3 -2.4 -0.5 1.4 3.3 5.2 7.1 9. ]\n", 673 | "\tfrec: [10 9 14 8 10 10 9 8 9 13]\n", 674 | "\n" 675 | ] 676 | } 677 | ], 678 | "source": [ 679 | "arr = np.random.randint(-10, 10, 100)\n", 680 | "print(\"arr:\", arr)\n", 681 | "\n", 682 | "# range\n", 683 | "print(\"\\nmin:\", arr.min())\n", 684 | "print(\"max:\", arr.max())\n", 685 | "print(\"ptp (max - min):\", arr.ptp())\n", 686 | "\n", 687 | "# measures of central tendency\n", 688 | "print(\"\\nmean:\", np.mean(arr))\n", 689 | "print(\"median:\", np.median(arr))\n", 690 | "print(\"Percentil 95:\", np.percentile(arr, 95))\n", 691 | "\n", 692 | "# measure of the spread of a distribution\n", 693 | "print(\"\\nstd:\", np.std(arr))\n", 694 | "print(\"var:\", np.var(arr))\n", 695 | "print(\"Cov:\", np.cov(arr))\n", 696 | "\n", 697 | "# and more\n", 698 | "print(\"histogram\")\n", 699 | "print(\"\\tbins:\", np.histogram(arr)[1])\n", 700 | "print(\"\\tfrec:\", np.histogram(arr)[0])\n", 701 | "\n", 702 | "print()" 703 | ] 704 | }, 705 | { 706 | "cell_type": "markdown", 707 | "metadata": {}, 708 | "source": [ 709 | "
\n", 710 | "\n", 711 | "## Simulaciones\n", 712 | "\n", 713 | "\n", 714 | "\n", 715 | "Una **simulación** de computadora es la reproducción del comportamiento de un sistema usando la capacidad de computación de nuestros ordenadores para así poder **simular las salidas del modelo matemático** asociadado a dicho sistema. \n", 716 | "\n", 717 | "En nuestro caso, este modelo matemático son las probabilidades de ocurrir un **evento aleatorio**. De esta forma, una simulación de probabilidades no es más que un **experimento** donde se intenta replicar la salida real de una observación real, de tal forma que las probabilidades de dicha observación concuerdan con lo simulado. " 718 | ] 719 | }, 720 | { 721 | "cell_type": "markdown", 722 | "metadata": {}, 723 | "source": [ 724 | "
\n", 725 | "\n", 726 | "### Eventos Aleatorios\n", 727 | "\n", 728 | "Como habrán notados de los ejemplos anteriores, otra forma de crear arreglos es utilizando el submodulo de [`np.random`](https://docs.scipy.org/doc/numpy/reference/routines.random.html?highlight=random#module-numpy.random), este nos entrega diferentes formas de poder generar datos aleatorios:" 729 | ] 730 | }, 731 | { 732 | "cell_type": "code", 733 | "execution_count": 71, 734 | "metadata": {}, 735 | "outputs": [ 736 | { 737 | "name": "stdout", 738 | "output_type": "stream", 739 | "text": [ 740 | "np.random.random():\n", 741 | " [[0.20891013 0.00296997 0.51148049]\n", 742 | " [0.89019044 0.15820597 0.27209639]]\n", 743 | "\n", 744 | "(b - a) * np.random.random() + a:\n", 745 | " [[8.66335984 5.65024063 4.18754926]\n", 746 | " [4.86677011 6.3331849 4.32728307]]\n", 747 | "\n", 748 | "np.random.randint():\n", 749 | " [[ 7 0 3]\n", 750 | " [10 -8 -9]]\n", 751 | "\n", 752 | "np.random.choice with replace:\n", 753 | " ['a' 'c' 'c' 'b' 'a' 'b' 'b' 'b']\n", 754 | "['a', 'a', 'b', 'b', 'b', 'c']\n", 755 | "\n", 756 | "np.random.choice without replace:\n", 757 | " ['b' 'b' 'a' 'b' 'c' 'a']\n" 758 | ] 759 | } 760 | ], 761 | "source": [ 762 | "# uniform distribution [0.0, 1.0)\n", 763 | "print(\"np.random.random():\\n\", np.random.random(size=(2, 3)))\n", 764 | "\n", 765 | "# uniform distribution [a, b)\n", 766 | "a = 4\n", 767 | "b = 10\n", 768 | "print(\"\\n(b - a) * np.random.random() + a:\\n\", (b - a) * np.random.random(size=(2, 3)) + a)\n", 769 | "\n", 770 | "# discrete (int) uniform distribution [low, high)\n", 771 | "low=-10\n", 772 | "high=11\n", 773 | "print(\"\\nnp.random.randint():\\n\", np.random.randint(low, high, size=(2, 3)))\n", 774 | "\n", 775 | "# Choice from 1D array with replace\n", 776 | "choices = [\"a\"] * 2 + [\"b\"] * 3 + [\"c\"]\n", 777 | "print(\"\\nnp.random.choice with replace:\\n\", np.random.choice(choices, size=8))\n", 778 | "\n", 779 | "print(choices)\n", 780 | "# Choice from 1D array without replace\n", 781 | "print(\"\\nnp.random.choice without replace:\\n\",np.random.choice(choices, size=6, replace=False))" 782 | ] 783 | }, 784 | { 785 | "cell_type": "markdown", 786 | "metadata": {}, 787 | "source": [ 788 | "Podemos utilizar esto para simular **eventos aleatorios** con salidas esperadas, por ejemplo el lanzamiento de una moneda." 789 | ] 790 | }, 791 | { 792 | "cell_type": "code", 793 | "execution_count": 26, 794 | "metadata": {}, 795 | "outputs": [ 796 | { 797 | "name": "stdout", 798 | "output_type": "stream", 799 | "text": [ 800 | "Lanzar 1 moneda:\n", 801 | " sello\n", 802 | "\n", 803 | "Lanzar 1 moneda 5 veces:\n", 804 | " ['sello' 'sello' 'sello' 'sello' 'sello']\n", 805 | "\n", 806 | "Lanzar 2 moneda 4 veces:\n", 807 | " [['cara' 'cara']\n", 808 | " ['cara' 'sello']\n", 809 | " ['cara' 'cara']\n", 810 | " ['cara' 'cara']]\n" 811 | ] 812 | } 813 | ], 814 | "source": [ 815 | "moneda = [\"cara\", \"sello\"]\n", 816 | "\n", 817 | "print(\"Lanzar 1 moneda:\\n\", np.random.choice(moneda))\n", 818 | "\n", 819 | "print(\"\\nLanzar 1 moneda 5 veces:\\n\", np.random.choice(moneda, size=5))\n", 820 | "\n", 821 | "print(\"\\nLanzar 2 moneda 4 veces:\\n\", np.random.choice(moneda, size=(4,2)))" 822 | ] 823 | }, 824 | { 825 | "cell_type": "markdown", 826 | "metadata": {}, 827 | "source": [ 828 | "
\n", 829 | "\n", 830 | "### Random Walk\n", 831 | "\n", 832 | "La **caminata aleatoria** o paseo aleatorio o camino aleatorio, abreviado en inglés como RW ([**Random Walks**](https://es.wikipedia.org/wiki/Camino_aleatorio)), es una formalización matemática de la trayectoria que resulta de hacer sucesivos pasos aleatorios.\n", 833 | "\n", 834 | "En su forma más general, las caminatas aleatorias son cualquier **proceso aleatorio** donde la posición de una partícula en cierto instante depende solo de su posición en algún **instante previo** y alguna **variable aleatoria** que determina su subsecuente dirección y la longitud de paso.\n", 835 | "\n", 836 | "\n", 837 | "Digamos que $X(t)$, define una trayectoria que empieza en la posición $X(0) = X_0$.\n", 838 | "\n", 839 | "Un paseo aleatorio se modela mediante la siguiente expresión:\n", 840 | "\n", 841 | "$$X(t+\\tau) = X(t) + \\Phi(\\tau)$$\n", 842 | "\n", 843 | "\n", 844 | "Donde $\\Phi$ es la variable aleatoria que describe la ley de probabilidad para tomar el siguiente paso y $\\tau$ es el intervalo de tiempo entre pasos subsecuentes. " 845 | ] 846 | }, 847 | { 848 | "cell_type": "markdown", 849 | "metadata": {}, 850 | "source": [ 851 | "#### Simulando un random walk\n", 852 | "\n", 853 | "A continuación utilizaremos el módulo random de numpy para simular un _random walk_ con $s$ pasos.\n", 854 | "\n", 855 | "Para este caso, nuestra particula vive en un espacio unidimensional, además la particula solo puede moverse una unidad a la izquierda (-1) o una unidad a la derecha (+1) por cada intervalo de tiempo, y esta se ubica inicialmente en el origen.\n", 856 | "\n", 857 | "Revisemos su comportamiento después de $s=500$ pasos." 858 | ] 859 | }, 860 | { 861 | "cell_type": "code", 862 | "execution_count": 74, 863 | "metadata": {}, 864 | "outputs": [], 865 | "source": [ 866 | "def random_walk(X_0=0, s=500):\n", 867 | " # Definimos las posibles elecciones\n", 868 | " step = [-1, 1]\n", 869 | "\n", 870 | " # Sabemos que cada paso es independiente, por lo que podemos elegir alatoriamente los 1000 pasos\n", 871 | " walk = np.random.choice(step, s)\n", 872 | " return walk\n", 873 | "#random_walk()" 874 | ] 875 | }, 876 | { 877 | "cell_type": "code", 878 | "execution_count": 17, 879 | "metadata": {}, 880 | "outputs": [ 881 | { 882 | "data": { 883 | "image/png": "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\n", 884 | "text/plain": [ 885 | "
" 886 | ] 887 | }, 888 | "metadata": { 889 | "needs_background": "light" 890 | }, 891 | "output_type": "display_data" 892 | } 893 | ], 894 | "source": [ 895 | "# Cantidad de pasos\n", 896 | "s = 500\n", 897 | "\n", 898 | "# X_0, o posicion inicial\n", 899 | "X_0 = 0\n", 900 | "walk = random_walk(X_0, s)\n", 901 | "\n", 902 | "# Finalmente podemos sumar los pasos, para temas de visualización se realiza la cumsum\n", 903 | "position_by_step = np.insert(X_0 + walk.cumsum(), 0, X_0) #se agrega la posicion inicial\n", 904 | "final_position = X_0 + walk.sum()\n", 905 | "t_step = np.arange(s + 1) + 1\n", 906 | "\n", 907 | "plt.figure(figsize=(15,5))\n", 908 | "plt.title(\"Random Walk con 500 pasos\")\n", 909 | "plt.ylabel(\"X(t)\")\n", 910 | "plt.xlabel(\"t\")\n", 911 | "\n", 912 | "plt.axhline(y=0, color='k')\n", 913 | "plt.plot(t_step, position_by_step);" 914 | ] 915 | }, 916 | { 917 | "cell_type": "markdown", 918 | "metadata": {}, 919 | "source": [ 920 | "Nos interesa saber cuál es la **distancia media** a la que llegan los random walk, para esto realizaremos $n$ simulaciones y observaremos como se distribuyen sus posiciones finales." 921 | ] 922 | }, 923 | { 924 | "cell_type": "code", 925 | "execution_count": 65, 926 | "metadata": {}, 927 | "outputs": [ 928 | { 929 | "data": { 930 | "text/plain": [ 931 | "(500, 100)" 932 | ] 933 | }, 934 | "execution_count": 65, 935 | "metadata": {}, 936 | "output_type": "execute_result" 937 | } 938 | ], 939 | "source": [ 940 | "def n_random_walk(X_0, s, n):\n", 941 | " # Definimos las posibles elecciones\n", 942 | " step = [-1, 1]\n", 943 | " \n", 944 | " # Sabemos que cada paso es independiente, por lo que podemos elegir alatoriamente los 10000 pasos\n", 945 | " walk = np.random.choice(step, (s, n))\n", 946 | " return walk\n", 947 | "\n", 948 | "# Cantidad de simulaciones\n", 949 | "n = 100\n", 950 | "\n", 951 | "# Cantidad de pasos\n", 952 | "s = 500\n", 953 | "\n", 954 | "# X_0, o posicion inicial\n", 955 | "X_0 = 0\n", 956 | "\n", 957 | "walk = n_random_walk(X_0, s, n)\n", 958 | "walk.shape" 959 | ] 960 | }, 961 | { 962 | "cell_type": "code", 963 | "execution_count": 19, 964 | "metadata": {}, 965 | "outputs": [ 966 | { 967 | "data": { 968 | "image/png": "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+NnPfgbAueeey0477cSLX/xinvzkJ7PvvvtSVV3Fs/vuu5OEJGy77bYsWLBg3PKnnXYau+22G6uuuuqk1p8MW6IlSZIGwKGHHvpgy+pU2WqrrfjYxz42Ybm9996bo446ij333JNf//rXHHDAAfz4xz8G4L3vfS/Pfe5zOe6447j99tvZdtttef7zn88666zDOeecw4wZM/jtb3/LPvvsw/nnnw/ARRddxOWXX856663H9ttvz09/+lN22GEHjjzySObNm8dee+3VUfyLFi3ihBNO4OMf//i45U455RQOO+ywSa8/GSbRkiRJy7ktt9yS+fPnc/LJJ7P77rs/bNnZZ5/NGWecwYc+9CGgGZbv+uuvZ7311uM1r3kNF198MSuuuCJXX331g+tsu+22zJ49G2gS+fnz57PDDjtw1FFHdRXXq1/9ap797Gez4447jlnmpptu4tJLL2WXXXaZ1PqTZRItSZI0ADppMe6lvfbaize84Q2ce+653HbbbQ/OrypOP/10Nttss4eVf+c738m6667LJZdcwt/+9jdmzJjx4LJVVlnlwfcrrrgiixcvHrfuXXbZhZtvvpl58+Zx7LHHAvCud72LhQsX8tnPfnbcdU899VRe9KIXPeLJg52uP1km0ZIkSeKAAw5grbXW4mlPexrnnnvug/N32WUXPvnJT/LJT36SJFx00UVsvfXW3HHHHcyePZsVVliB448/ngceeGDSdZ911lkPmz722GM566yz+P73v88KK4x/C9/JJ5/M+973vkmvP1neWChJkiRmz57NIYcc8oj5RxxxBIsWLWLLLbdkiy224IgjjgCarhLHH3882223HVdffTWrrbbahHUceeSRnHHGGROWO/jgg7n55pt51rOexVZbbfVgN5Dzzz+fAw888MFy8+fP54YbbuA5z3lOR+tPpXR7t2Q/zJs3r4Y6qktacg5xN/V22mkngIe13kjSRK688kqe8pSn9DuM5dZoxz/JBVU1b6J1bYmWJEmSutSzJDrJcUluSXLZiPmvTXJVksuTfKBX9UuSJEm90suW6C8Cuw6fkWRn4IXAllX1VOBDPaxfkiRp4C0NXWuXRUt63HuWRFfVj4A/jZj9KuDoqvprW+aWXtUvSZI06GbMmMFtt91mIj3NqorbbrvtYcPydWu6h7h7ErBjkvcC9wFvqKpfjVYwyUHAQQBz5syZ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\n", 969 | "text/plain": [ 970 | "
" 971 | ] 972 | }, 973 | "metadata": { 974 | "needs_background": "light" 975 | }, 976 | "output_type": "display_data" 977 | } 978 | ], 979 | "source": [ 980 | "def show_random_walks(walks):\n", 981 | " # Finalmente podemos sumar los pasos, para temas de visualización se realiza la cumsum\n", 982 | " final_positions = X_0 + walks.sum(axis=0)\n", 983 | "\n", 984 | " plt.figure(figsize=(12,4))\n", 985 | "\n", 986 | " plt.axvline(x=final_positions.mean(), color=\"k\", label=\"Mean: \"+ str(final_positions.mean()))\n", 987 | " plt.hist(final_positions, bins=20);\n", 988 | "\n", 989 | " plt.title(\"Distribución de posiciones finales - \" + str(len(final_positions)) + \" simulaciones\")\n", 990 | " plt.ylabel(\"N° de simulaciones\")\n", 991 | " plt.xlabel(\"X(t_final)\")\n", 992 | " plt.legend();\n", 993 | " \n", 994 | "show_random_walks(walk)" 995 | ] 996 | }, 997 | { 998 | "cell_type": "markdown", 999 | "metadata": {}, 1000 | "source": [ 1001 | "Observemos como cambia la distribución a medida de que aumentamos las cantidad de simulaciones." 1002 | ] 1003 | }, 1004 | { 1005 | "cell_type": "code", 1006 | "execution_count": 20, 1007 | "metadata": {}, 1008 | "outputs": [ 1009 | { 1010 | "data": { 1011 | "image/png": "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JEldZpItSZK0EkvC4Ycf/tT0okWLmDx5MgceeGDfYrrjjjt4yUtewrRp03j961/PY4899oxlrrjiCnbZZRde9KIXscsuu/C9730PgN///vcccMABbL/99uy4446cdNJJT61z1113sffee7Pzzjuz00478Y1vfKNn++CJj5KkMTH1pMufev672+c/o6yXZp9xwJjUI01Ea6+9NjfccAN/+MMfeNaznsUVV1zBZptt1teYTjzxRN7xjndw6KGH8uY3v5lzzjmHt7zlLUsss+GGG3LZZZex6aabcsMNN7Dvvvvy29/+FoATTjiBvffem8cee4x99tmHb37zm+y333584AMf4HWvex1vectbuOmmm9h///2ZPXt2T/bBnmxJkqSV3H777cfllzdfes8//3wOO+ywp+Y98sgjHHnkkey6667svPPOXHLJJQDMnj2bl73sZcyYMYMZM2bw3//93wBcddVV7LXXXhxyyCFsv/32vOENb6CqOo6lqvje977HIYccAsARRxzB1772tWcst/POO7PpppsCsOOOO7Jw4UIeffRR1lprLfbee28A1lhjDWbMmMGcOXOAptf+wQcfBOCBBx54av1esCdbkiRpHDjuuOO4/vrru7rN6dOn84lPfGLU5Q499FBOO+00DjzwQH7xi19w5JFH8sMf/hCA008/nZe//OWce+65LFiwgN12241XvOIVbLTRRlxxxRVMmjSJX/3qVxx22GFcc801AFx33XXceOONbLrppuyxxx7813/9F3vuuSennHIKM2fO5KCDDho2lvnz57P++uuz2mpNmjplypSneqiHc/HFF7Pzzjuz5pprLlG+YMECLrvsMo499lgATj31VF75ylfy6U9/mkceeYTvfve7o742y8okW5JWMmM1REPSxLHTTjsxe/Zszj//fPbff/8l5n3nO9/h0ksv5SMf+QjQXHbwrrvuYtNNN+Vtb3sb119/Pauuuiq33nrrU+vstttuTJkyBWgS/dmzZ7Pnnnty2mmnjRrLUL3eI13x48Ybb+TEE0/kO9/5zhLlixYt4rDDDuOYY45h6623Bppe+je+8Y0cf/zx/PjHP+bwww/nhhtuYJVVuj+4wyRbkiRpHOikx7mXDjroIE444QSuuuoq5s+f/1R5VXHxxRez3XbbLbH8qaeeysYbb8zPf/5znnzySSZNmvTUvIE9yquu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\n", 1012 | "text/plain": [ 1013 | "
" 1014 | ] 1015 | }, 1016 | "metadata": { 1017 | "needs_background": "light" 1018 | }, 1019 | "output_type": "display_data" 1020 | } 1021 | ], 1022 | "source": [ 1023 | "walks = n_random_walk(X_0, s, n=1000)\n", 1024 | "show_random_walks(walks)" 1025 | ] 1026 | }, 1027 | { 1028 | "cell_type": "code", 1029 | "execution_count": 21, 1030 | "metadata": {}, 1031 | "outputs": [ 1032 | { 1033 | "data": { 1034 | "image/png": "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HnjgAQDuv/9+Ntlkk66PpVuj1kJeVYseYVP+D4OUnQOcM0T92cB2g5TPB16zdFFK0tixLFumJS17hx9++FOttCNl6tSpfOUrX1lsvf32249jjz2WvffemyuvvJKDDjqIX/7ylwAcd9xxvPrVr2b69Oncd9997Ljjjrz2ta9lww03ZNasWUyYMIEbb7yR/fffn9mzZwPw+9//nmuuuYZNNtmEV7ziFfz3f/83u+yyC0cffTTTpk3jTW9605CxzJ8/n3XWWYdVVmnS1EmTJnH77bePwKvxtFtuuYWbb76ZV7/61YssmzFjBkccccRT86eeeip77bUXq6++OmuvvTaXXHLJiMYC3qlTkiRp3Nt+++2ZO3cuZ555JnvttddCy376059y/PHHM3XqVHbddVceffRRbr31Vp544gne+9738uIXv5i3v/3tXHvttU+ts+OOOzJp0iRWWmklpk6dyty5cwE49thjh03GgUFb00d6JJoZM2bwtre9jZVXXnmh8jvvvJOrrrqK3Xff/amyE044gfPPP5++vj4OPPDAhZL1kdKLPuSSJEkaoJuW7NH0pje9iY9+9KNcdNFFzJ8//6nyquKcc85hm222Waj+Mcccw0YbbcQVV1zBX//614W6jqy22mpPTa+88sosWLBg2H3vvvvu3HXXXUybNo1TTjmF++67jwULFrDKKqvQ19c34t1EZsyYwde//vVFys866yze8pa3PHXXzXnz5nHFFVew0047AbDvvvuyxx57jGgsYAu5JEmSgIMOOoijjz6aF7/4xQuV77777px44olPtVz3Xwh5//33s/HGG7PSSitxxhln8OSTTy7xvi+44AIuv/xyTj31VJKw2267cfbZZwNw+umns88++yzxtge6/vrruffee/mbv/mbRZYN7Fe+7rrrcv/993PDDTcAMGvWLF74wheOWCz9TMglSZLEpEmT+NCHPrRI+VFHHcUTTzzB9ttvz3bbbcdRRx0FwPvf/35OP/10dt55Z2644QbWWGONxe7j6KOPZubMmYut9/nPf54vf/nLbLXVVsyfP5/3vKcZG2TmzJkcffTRT9WbPHkyRxxxBKeddhqTJk16qtvMxz/+cSZNmsQjjzzCpEmTOOaYY55a58wzz2S//fZbpBvM3Llzue2223jVq171VNkqq6zCKaecwlvf+lZe8pKXcMYZZ/DFL35x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\n", 1035 | "text/plain": [ 1036 | "
" 1037 | ] 1038 | }, 1039 | "metadata": { 1040 | "needs_background": "light" 1041 | }, 1042 | "output_type": "display_data" 1043 | } 1044 | ], 1045 | "source": [ 1046 | "walks = n_random_walk(X_0, s, n=100000)\n", 1047 | "show_random_walks(walks)" 1048 | ] 1049 | }, 1050 | { 1051 | "cell_type": "code", 1052 | "execution_count": 22, 1053 | "metadata": {}, 1054 | "outputs": [ 1055 | { 1056 | "data": { 1057 | "image/png": "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ZQrDhg1j5MiR/PGPf2TEiBFMmjSJQw45hAkTJjBp0iQmTZrERRddxMCBA7n33nvp3r07d9xxB+PHj2fu3LksWLCAK664ggceeIAtt9yS4cOHc8QRR1BTU8NZZ53Feeedx4gRI5g1axZnnXVWq//6skfUzczMzKwkI0aM4Pbbsz+4r732WkaPHr1u2xtvvMGJJ57Ixz72MfbZZx9uvfVWAJYtW8YnP/lJ9t13X/bdd1/+8Y9/AHDPPfdw0EEH8YUvfIEPf/jDfOUrX1k38l3MrbfeypgxY5DEsGHDeOWVV6ivr29Qpr6+njVr1vAf//EfSGLMmDH8/ve/X1d/7NixAIwdO3Zd/BOf+ATdu3cHYNiwYdTV1QGwaNEihg0bxjbbbEPnzp351Kc+xS233AJk3zCsWbMGgFdffZXevXu38FUtziPqZmZmZu3ImWeeyfz581u1zaFDhzaY1lHMcccdx8SJEznyyCN57LHHOPHEE/nrX/8KwIUXXsinP/1ppk2bxiuvvML+++/PZz7zGXbddVdmz55N165dWbx4MaNHj2bevHkAPPLIIyxcuJDevXtzwAEH8Pe//50DDzyQc889l9raWo466qgG+3/++efp16/fuud9+/bl+eefp1evXg3K9O3bd4MyAC+88MK6sr169WLlypUbHOPUqVMZMWIEAHvttRff//73Wb16NVtvvTWzZs2itrYWgEsuuYTDDz+cb3/727z//vvr/gBpTU7UzczMzKwkQ4YMYdmyZVx77bWMHDmywbY//elPzJw5k5/85CdAtqTk8uXL6d27N6eddhrz58+nU6dOPPXUU+vq7L///uuS6qFDh7Js2TIOPPBAJk6cWHD/hUbcG6+sUkqZYv7yl78wdepU/va3vwHwkY98hLPPPptDDz2U7bbbjo9+9KN07pylz5MnT+biiy/mmGOO4YYbbmDcuHHcddddJe2nVE7UzczMzNqRUka+y+moo47i29/+Nvfccw+rV69eF48IbrrpJvbYY48G5c8//3x69uzJo48+yvvvv0/Xrl3Xbdtqq63WPe7UqRNr165tct99+/blueeeW/e8rq5ugyknffv2XTd1pXGZnj17Ul9fT69evaivr2fXXXddV+6xxx7jpJNO4o477mDnnXdeFx83bhzjxo0D4Hvf+966PyymT5/OpZdeCsCxxx7LSSed1GTfW8Jz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\n", 1058 | "text/plain": [ 1059 | "
" 1060 | ] 1061 | }, 1062 | "metadata": { 1063 | "needs_background": "light" 1064 | }, 1065 | "output_type": "display_data" 1066 | } 1067 | ], 1068 | "source": [ 1069 | "walks = n_random_walk(X_0, s, n=1000000)\n", 1070 | "show_random_walks(walks)" 1071 | ] 1072 | }, 1073 | { 1074 | "cell_type": "markdown", 1075 | "metadata": {}, 1076 | "source": [ 1077 | "Dada nuestras simulaciones realizadas podemos concluir que: \n", 1078 | "\n", 1079 | "La distancia del origen esperado de un random walk de una dimension es 0." 1080 | ] 1081 | }, 1082 | { 1083 | "cell_type": "markdown", 1084 | "metadata": {}, 1085 | "source": [ 1086 | "
\n", 1087 | "\n", 1088 | "## Teorema de Bayes\n", 1089 | "\n", 1090 | "\n", 1091 | "\n", 1092 | "\n", 1093 | "El teorema de Bayes, es una proposición planteada por el matemático inglés Thomas Bayes y extendida por Pierre-Simon Laplace que expresa la probabilidad condicional de un evento aleatorio A dado B:\n", 1094 | "\n", 1095 | "$$P(A|B) = \\frac{P(A)P(B|A)}{P(B)}$$\n", 1096 | "\n", 1097 | "\n", 1098 | "Sin embargo, existe otra interpretación conocida como la **interpretación diacrónica**. Con esta interpretacion obtenemos una expresión que nos indica como actualizar nuestra creencia de una hipotesis inicial **H** la evidencia entregada por los datos __D__.\n", 1099 | "\n", 1100 | "$$P(H|D) = P(H)\\frac{P(D|H)}{P(D)}$$\n", 1101 | "\n", 1102 | "En esta interpretación los terminos son conocidos como:\n", 1103 | "\n", 1104 | " * $P(H)$: Priori, la probabilidad de la hipotesis antes de ver los datos.\n", 1105 | " * $P(H|D)$: Posteriori, la probabilidad de la hipotesis antes de ver los datos, lo que queremos computar.\n", 1106 | " * $P(D|H)$: Likelihood, la probabilidad de la evidencia bajo una hipotesis.\n", 1107 | " * $P(D)$: Constante de normalización, la probabilidad de la evidencia bajo cualquier hipotesis.\n", 1108 | "\n", 1109 | "Además contamos con la **versión de Laplace** donde contamos con $A_1, A_2,..., A_i,..., A_n$, una partición de $\\Omega$, y sea $B$ un evento cualquiera (las mismas hipótesis del teorema de la probabilidad total). Se cumple:\n", 1110 | "\n", 1111 | "$$P(A_i|B) = \\frac{P(A_i)P(B|A_i)}{P(B)} = \\frac{P(A_i)P(B|A_i)}{\\sum_{j=1}^n P(B|A_j)P(A_j)}$$\n" 1112 | ] 1113 | }, 1114 | { 1115 | "cell_type": "markdown", 1116 | "metadata": {}, 1117 | "source": [ 1118 | "Recomiendo los video del canal **3blue1brown** [Bayes theorem, and making probability intuitive](https://www.youtube.com/watch?v=HZGCoVF3YvM) y [The quick proof of Bayes' theorem](https://www.youtube.com/watch?v=U_85TaXbeIo) para poder entenderlo de manera visual." 1119 | ] 1120 | }, 1121 | { 1122 | "cell_type": "markdown", 1123 | "metadata": {}, 1124 | "source": [ 1125 | "Veamos como es utilizado el teorema con un ejemplo.\n", 1126 | "\n", 1127 | "Suponga que en su visita más reciente al consultorio del médico, decide hacerse la prueba de detección de una enfermedad rara. Si tiene la mala suerte de recibir un resultado positivo, la siguiente pregunta lógica es: **\"Dado el resultado de la prueba, ¿cuál es la probabilidad de que realmente tenga esta enfermedad?\"** (Después de todo, las pruebas médicas no son perfectamente precisas). El teorema de Bayes nos dice exactamente cómo calcular esta probabilidad:\n", 1128 | "\n", 1129 | "$$P(E|+)=\\frac{P(+|E)P(E)}{P(+)}$$\n", 1130 | "\n", 1131 | "Como indica la ecuación, la probabilidad posterior de tener la enfermedad (E) dado que la prueba fue positiva (+) depende de la probabilidad a priori de la enfermedad $P(E)$. Piense en esto como la incidencia de la enfermedad en la población general. La cual es solo de un $10\\%$\n", 1132 | "\n", 1133 | "$$P(E) = 0.1$$\n", 1134 | "$$P(¬E) = P(S) = 0.9$$\n", 1135 | "\n", 1136 | "La probabilidad posterior también depende de la precisión de la prueba: ¿con qué frecuencia la prueba informa correctamente un resultado negativo para un paciente sano y con qué frecuencia informa un resultado positivo para alguien con la enfermedad?\n", 1137 | "\n", 1138 | "$$P(-|S) = 0.75$$\n", 1139 | "$$P(+|S) = 0.25$$\n", 1140 | "$$P(-|E) = 0.25$$\n", 1141 | "$$P(+|E) = 0.75$$\n", 1142 | "\n", 1143 | "Finalmente, necesitamos saber la probabilidad general de un resultado positivo $P(+)$. La cual puede calcularse o obtenerse como parte de la información del problema." 1144 | ] 1145 | }, 1146 | { 1147 | "cell_type": "code", 1148 | "execution_count": 66, 1149 | "metadata": {}, 1150 | "outputs": [ 1151 | { 1152 | "data": { 1153 | "image/png": "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\n", 1154 | "text/plain": [ 1155 | "
" 1156 | ] 1157 | }, 1158 | "metadata": { 1159 | "needs_background": "light" 1160 | }, 1161 | "output_type": "display_data" 1162 | } 1163 | ], 1164 | "source": [ 1165 | "# Prior\n", 1166 | "P_E = 0.1\n", 1167 | "P_S = 0.9\n", 1168 | "\n", 1169 | "# Likelihood\n", 1170 | "P_neg_S = 0.75\n", 1171 | "P_pos_S = 0.25\n", 1172 | "P_neg_E = 0.25\n", 1173 | "P_pos_E = 0.75\n", 1174 | "\n", 1175 | "# Const\n", 1176 | "P_pos = P_pos_S*P_S + P_pos_E*P_E\n", 1177 | "P_neg = P_neg_S*P_S + P_neg_E*P_E\n", 1178 | "\n", 1179 | "import matplotlib.pyplot as plt\n", 1180 | "\n", 1181 | "widths = [P_E, P_S]\n", 1182 | "indices = [widths[0]/2., widths[0] + widths[1]/2.]\n", 1183 | "\n", 1184 | "plt.bar(indices, [1,1], widths, label=\"Negativo (-)\")\n", 1185 | "plt.bar(indices, [P_pos_E,P_pos_S], widths, label=\"Positivo (+)\")\n", 1186 | "plt.legend()\n", 1187 | "plt.yticks([0, P_pos_E, P_pos_S, 1], [0, P_pos_E, P_pos_S, 1])\n", 1188 | "plt.xticks(indices + [0, P_E, 1], ['P(E)', 'P(S)']+[0, P_E, 1])\n", 1189 | "plt.axvline(x=P_E, linewidth=1, color='r')\n", 1190 | "plt.show()" 1191 | ] 1192 | }, 1193 | { 1194 | "cell_type": "markdown", 1195 | "metadata": {}, 1196 | "source": [ 1197 | "Finalmente podemos obtener la probabilidad posterior utilizando la fórmula" 1198 | ] 1199 | }, 1200 | { 1201 | "cell_type": "code", 1202 | "execution_count": 70, 1203 | "metadata": {}, 1204 | "outputs": [ 1205 | { 1206 | "name": "stdout", 1207 | "output_type": "stream", 1208 | "text": [ 1209 | "0.25 0.7499999999999999\n", 1210 | "0.03571428571428571 0.9642857142857143\n" 1211 | ] 1212 | } 1213 | ], 1214 | "source": [ 1215 | "P_E_pos = P_pos_E*P_E/P_pos\n", 1216 | "P_E_neg = P_neg_E*P_E/P_neg\n", 1217 | "P_S_pos = P_pos_S*P_S/P_pos\n", 1218 | "P_S_neg = P_neg_S*P_S/P_neg\n", 1219 | "\n", 1220 | "print(P_E_pos, P_S_pos)\n", 1221 | "\n", 1222 | "print(P_E_neg, P_S_neg)" 1223 | ] 1224 | }, 1225 | { 1226 | "cell_type": "markdown", 1227 | "metadata": {}, 1228 | "source": [ 1229 | "Dado el resultado positivo de la prueba, ¿cuál es la probabilidad de que realmente tenga esta enfermedad?\n", 1230 | "\n", 1231 | "Es solo un **25%**." 1232 | ] 1233 | } 1234 | ], 1235 | "metadata": { 1236 | "kernelspec": { 1237 | "display_name": "Python 3", 1238 | "language": "python", 1239 | "name": "python3" 1240 | }, 1241 | "language_info": { 1242 | "codemirror_mode": { 1243 | "name": "ipython", 1244 | "version": 3 1245 | }, 1246 | "file_extension": ".py", 1247 | "mimetype": "text/x-python", 1248 | "name": "python", 1249 | "nbconvert_exporter": "python", 1250 | "pygments_lexer": "ipython3", 1251 | "version": "3.7.3" 1252 | } 1253 | }, 1254 | "nbformat": 4, 1255 | "nbformat_minor": 2 1256 | } 1257 | --------------------------------------------------------------------------------