From fca8a678eeaf7765c9fb36970c0ab3858b5c9dac Mon Sep 17 00:00:00 2001 From: Jamer Rebolledo Date: Tue, 31 Oct 2023 22:11:42 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=83=20Soluci=C3=B3n=20Reto=2043,=20Pyt?= =?UTF-8?q?hon-Jupyter=20by=20@jamerrq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/jamerrq.ipynb" | 238 ++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 "Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" diff --git "a/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" new file mode 100644 index 0000000000..7c0a243258 --- /dev/null +++ "b/Retos/Reto #43 - SIMULADOR DE CLIMA [F\303\241cil]/python/jamerrq.ipynb" @@ -0,0 +1,238 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Simulador de clima\n", + "\n", + "## Parámetros iniciales (a definir o modificar por el usuario)\n", + "\n", + "- Temperatura inicial (en grados Celsius)\n", + "- Probabilidad de lluvia (en porcentaje)" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [], + "source": [ + "temperatura_inicial = 20\n", + "probabilidad_lluvia = 0.1 # 0 <= probabilidad_lluvia <= 1\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reglas\n", + "\n", + "En cada día que pasa tenemos que\n", + "\n", + "- 10% de probabilidad de que la temperatura aumente o disminuya en 2 grados\n", + "- Si la temperatura supera los 25 grados, la probabilidad de lluvia aumenta en\n", + " 20%\n", + "- Si la temperatura es menor a 5 grados, la probabilidad de lluvia disminuye en\n", + " 20%\n", + "- Si llueve, la temperatura disminuye en 1 grado" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Función\n", + "\n", + "La función recibe:\n", + "\n", + "- Número de días a simular\n", + "\n", + "Y devuelve (muestra):\n", + "\n", + "- Temperatura de cada día\n", + "- Si llovió o no\n", + "- Probabilidad de lluvia de cada día\n", + "- Número de días que llovió" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Algunas librerías útiles" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import random as rnd\n", + "from scipy import interpolate\n", + "import numpy as np\n" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "metadata": {}, + "outputs": [], + "source": [ + "def suavizador(x, y, kind='linear'):\n", + " f = interpolate.interp1d(x, y, kind=kind)\n", + " xnew = np.linspace(min(x), max(x), 100)\n", + " ynew = f(xnew)\n", + " return xnew, ynew\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Función principal (simulación)" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "def simulador(numero_dias=30, verbose=False, min_prob=0):\n", + "\n", + " temperatura_actual = temperatura_inicial\n", + " temperaturas = [temperatura_actual]\n", + " dias = [0]\n", + " lluvias = [0] * numero_dias\n", + " probabilidad_actual = probabilidad_lluvia\n", + " probabilidades = [probabilidad_actual]\n", + "\n", + " for dia in range(1, numero_dias):\n", + " random = rnd.random()\n", + " # 10% de probabilidad de que la temperatura aumente\n", + " # o disminuya en 2 grados\n", + " if random < 0.1:\n", + " delta = rnd.choice([-2, 2])\n", + " temperatura_actual += delta\n", + " if verbose:\n", + " print(f'El día {dia} la temperatura cambió en {delta} grados')\n", + "\n", + " # Lluvia\n", + " random_lluvia = rnd.random()\n", + " if random_lluvia < probabilidad_actual:\n", + " temperatura_actual -= 1\n", + " lluvias[dia] = 1\n", + " if verbose:\n", + " print(f'El día {dia} llovió')\n", + "\n", + " # Si temperatura actual > 25\n", + " if temperatura_actual > 25:\n", + " probabilidad_actual = min(1, probabilidad_actual + 0.2)\n", + " if verbose:\n", + " print(f'El día {dia} la probabilidad de lluvia aumentó a {probabilidad_actual}')\n", + "\n", + " # Si temperatura actual < 5\n", + " if temperatura_actual < 5:\n", + " probabilidad_actual = max(0, probabilidad_actual - 0.2)\n", + " if verbose:\n", + " print(f'El día {dia} la probabilidad de lluvia disminuyó a {probabilidad_actual}')\n", + "\n", + " temperaturas.append(temperatura_actual)\n", + " dias.append(dia)\n", + " probabilidades.append(probabilidad_actual)\n", + "\n", + " return dias, temperaturas, lluvias, probabilidades\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Resultados" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "El día 5 la temperatura cambió en 2 grados\n", + "El día 9 llovió\n", + "El día 14 llovió\n", + "El día 20 llovió\n" + ] + }, + { + "data": { + "image/png": "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5hu1m29O1W4JCdFe9zR5HZSGDx/Opk2bmDRpkqe35oYbbsA0TYYOHcpVV13l7SFxOBzceeedHDlyhPfff5/k5GTPY02aNMFut7N9+3YuuOACz/Zt27YB0LJlS69f7+QJ6FXhdAbmxHW53AE7dm1gO5IOgCs52at2CPd281WotVtRk2ZEA8aO7QF9X6HWbtVBbeYbtZtv/NVuPq2j9K9//Yurr76apUuXcvToUZKTk7nwwgs5++yzvT6W0+lk/PjxbNq0ibfeeotGjRqVejwiIoJevXqxaNEiRo0a5dm+YMEC6tWr59WaTQAbN25k586dXH311V7XKtWjZLFJd526Qa5EaiNX02YAWHftDGodIhIafF6Zu2vXrn5Zm2jixIksXbqU+++/n4KCAtasWeN5rFWrVsTFxTF27FhuvPFGHnnkEQYNGsQvv/zChx9+yMSJE0utoTRgwABSU1OZM2cOALNmzWLPnj306NGDOnXqsHXrVl555RUaNmxYqYUqJTgs6cU9SrrPm/jC1az4ClnLvr3gcEBkZJArEpHazOegtHr1alauXElGRgZJSUn06NHDpx6l5cuXA8XrM/3R3Llz6dmzJ926dePll19mypQpfPLJJzRs2JBHHnmkTNhxuVy43Se62Zo3b86XX37JwoULyc3NJTk5mT59+nD33Xd7PbdJqo9nVW6toSQ+MFNSMGNiMfJyse7djatl62CXJCK1mNdBqaCggHvuuYevv/661FwfwzDo06cPU6dOJSoqqtLHW7JkSaX269OnD3369PHqWH379qVv376VrkVqBs993tSjJL4wDFzNmmP7bT3WnTsUlESkSnxamfvbb7/l7rvvZvHixaxdu5bFixczfvx4li9fXm7PkIg3dPsSqaqSeUqWnTuDWoeI1H5eB6WFCxdy55138te//pVGjRoRERFBo0aNuOOOO7jjjjv4/PPPA1GnhBFPj5KG3sRHnpvjanVuEakir4NSQUFBhXORzj77bBwOR5WLkvDmmaOkHiXxka58ExF/8ToodenShXXr1pX72Lp16+jUqVOVi5Iw5nZjZGQA6lES33l6lHapR0lEqsbrydyPPPIIt99+O7GxsQwcOJDExEQyMzOZP38+77//PjNmzAhEnRImjMwMjONXLqpHSXzlbtYMON6jZJpQxXtQikj48ukWJk6nk8cff5zHH38cq9WK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oCQiItXGceXVZOfnY//2a+w/rsS6b68nJOWN/zuFl15+6gOIVDMFJRERqT5WKwU3jqTgxuIrjy1792D/cQVGQQEF190Q5OJEylJQEhGRoHGf2RjHmY2DXYZIhTSZW0RERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJREREpAIKSiIiIiIVUFASERERqYCCkoiIiEgFFJREREREKmCYpmkGu4jayDRN3G7/N53VasHlcvv9uKFO7eYbtZtv1G7eU5v5Ru3mm4razWIxMAzDq2MpKImIiIhUQENvIiIiIhVQUBIRERGpgIKSiIiISAUUlEREREQqoKAkIiIiUgEFJREREZEKKCiJiIiIVEBBSURERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQWlGmLHjh3ceuutdO3alT/96U88/vjjFBQUBLusGmvevHm0bdu2zMfkyZODXVqNsmvXLh599FEGDx5Mhw4dGDhwYLn7LVu2jCuvvJJOnToxYMAA3n777WqutGapTLtNmDCh3HPwm2++CULFwbdo0SLGjBlDnz596Nq1K4MGDeKdd97B7XaX2k/nWmmVaTeda6V9++233HjjjfTq1YuOHTvSr18/Jk2aRHZ2dqn9/HWu2fxRtFRNVlYWI0eOJDU1lRdeeIGjR48yadIkMjIy9Iv/NGbOnEl8fLzn6wYNGgSxmppn69atLFu2jC5duuB2uzFNs8w+q1evZsyYMQwePJgJEybwyy+/8PjjjxMREcHQoUODUHXwVabdABo3blzme7Rly5bVUWKNM3v2bFJTU3nggQeoW7cuK1eu5IknnmDPnj08+OCDgM618lSm3UDn2skyMzPp1q0bI0eOJCEhga1bt/Liiy+ydetWXn/9dcDP55opQTdjxgyzS5cuZnp6umfbZ599ZrZp08bctm1bECuruT766COzTZs2pdpMynK5XJ7PH3zwQfPyyy8vs8+tt95qXnPNNaW2PfLII+Z5551X6vnhpDLtVtH2cFXe9+KTTz5pdurUyXQ4HKZp6lwrT2XaTefa6b3//vtmmzZtzAMHDpim6d9zTUNvNcA333zDn/70J+rUqePZdvHFFxMREcGyZcuCWJnUdhbLqb/FCwsLWbFiBZdffnmp7YMGDeLw4cP89ttvgSyvxjpdu0lZJ//8KtG+fXscDgcZGRk61ypwunaTyklKSgLA6XT6/VzTT4MaIC0trUwXakREBE2aNCEtLS1IVdUOAwcOpH379vTr148ZM2bgcrmCXVKtsnv3boqKimjRokWp7a1atQLQ+Xcau3fv5txzz6Vjx44MGTKEr776Ktgl1SirVq0iKSmJunXr6lzzwsntVkLnWlkulwuHw8GGDRuYNm0aF110EY0aNfL7uaY5SjVAVlYWCQkJZbYnJCSQmZkZhIpqvnr16vG3v/2NLl26YBgGS5YsYerUqRw8eJBHH3002OXVGiXn1x/Pv5Kvdf5VrH379nTq1IlWrVqRnZ3Nu+++y9ixY3n++ee55JJLgl1e0K1bt4558+YxduxYrFarzrVK+mO7gc61ilx00UUcPHgQgPPPP58pU6YA/v+5pqBUg5mmiWEYwS6jRjr//PM5//zzPV/37t2byMhI5syZwx133EH9+vWDWF3tU9F5pvOvYiNHjiz1dd++fRk2bBgvvPBCWP/yAjh8+DDjxo2jU6dOjB49utRjOtcqVlG76Vwr36uvvkpeXh7btm3j5Zdf5o477mD27Nmex/11rmnorQZISEggKyurzPbs7Oxye5qkfJdeeikul4uNGzcGu5RaIzExESj7F1bJ+ajzr/IsFgt/+ctfSEtLC+ulPbKzsxk9ejRRUVFMnz4du90O6Fw7nYrarTw614q1a9eOs88+m2uvvZaXXnqJlStX8r///c/v55qCUg3QsmXLMmOmhYWF7N69O2wv/5Tq0aRJE+x2O9u3by+1fdu2bUD4Xn7sK7OCZQTChcPh4M477+TIkSPMnDmT5ORkz2M61yp2qnarSLifa3/Uvn17rFYru3fv9vu5pqBUA1xwwQWsWLGCY8eOebb973//o7CwkD59+gSxstpl4cKFWK1WOnToEOxSao2IiAh69erFokWLSm1fsGAB9erVU1t6we1289///pfWrVsTFRUV7HKqndPpZPz48WzatImZM2fSqFGjUo/rXCvf6dqtPOF+rpVn9erVuFwuzjzzTL+fa5qjVAMMGzaMt956izFjxjBmzBjS09N56qmnGDRoUFj/lXUqt956K7169aJNmzYALF68mA8++ICbbrqJevXqBbm6miM/P9+zxMS+ffvIycnhiy++AKBHjx7UqVOHsWPHcuONN/LII48waNAgfvnlFz788EMmTpwYtpfJn67d8vPzmTBhAgMHDqRJkyZkZmby7rvvsn79el588cVglh40EydOZOnSpdx///0UFBSwZs0az2OtWrUiLi5O51o5TtdumZmZOtf+4K677qJjx460bduWqKgoT8hs27Yt/fv3B/DruWaY6r+rEXbs2MHjjz/OqlWriIqKYuDAgdx33336a6ECjz/+ON9++y0HDhzA7XbTrFkzhg4dyogRIzQp9CR79+6lX79+5T42d+5cevbsCRQv9T9lyhTS0tJo2LAhN998M8OHD6/OUmuU07Vb27Zteeihh9iwYQNHjx7FbrfTsWNHbr/99lIXGYSTvn37sm/fvnIf07lWsdO1m861sl599VUWLlzI7t27MU2TRo0aMWDAAG699Vbi4uI8+/nrXFNQEhEREalAePZ1ioiIiFSCgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJRKQcR44coXfv3kyaNCnYpYhIEGkdJREJefPmzeOhhx7yfB0REUFCQgItWrSgd+/eXHPNNdStW9fzuNvt5uabbyYpKYmpU6dqEVORMKZbmIhI2Jg0aRItWrTA6XSSnp7OqlWreO2113j99df597//zZ///GcAXnjhBVwuF88++6xCkkiYU4+SiIS8kh6l//znP3Tq1KnUY/v37+eGG24gKyuLL7/8kpSUlCBVKSI1keYoiUhYS01N5cEHHyQ3N5f33nsPgBdffJG2bduW2m/hwoXccsst9O7dm86dO3PppZcyefJk8vLyglG2iFQTDb2JSNjr06cPVquVn3/+ucJ9du7cyQUXXMDIkSOJjo5m+/btvPbaa6xdu5a5c+dWY7UiUp0UlEQk7MXExJCcnMyhQ4cq3GfMmDGez03T5Oyzz6Zly5bceOONbNq0iXbt2lVHqSJSzRSUREQoDj+nsmfPHqZOncqKFStIT08vtf/27dsVlERClIKSiIS9vLw8MjIyaNOmTbmP5+bmcsMNNxAZGcndd99Ns2bNiIqK4sCBA9x1110UFBRUc8UiUl0UlEQk7H399de4XC569OhR7uMrVqzg0KFDvPnmm6X2yc7Orq4SRSRIdNWbiIS1/fv388wzzxAfH8+wYcPK3adkLaWIiIhS20uukhOR0KUeJREJG1u3bsXlcuF0Ojl69Cg///wz8+bNw2q18tJLL1GnTp1yn9etWzcSExP5f//v/3HXXXdhs9mYP38+mzdvruZ3ICLVTUFJRMJGyW1M7HY7CQkJtGzZktGjRzN06NAKQxJAcnIyM2bM4Omnn+b+++8nOjqafv368e9//5urrrqqusoXkSDQytwiIiIiFdAcJREREZEKKCiJiIiIVEBBSURERKQCCkoiIiIiFVBQEhEREamAgpKIiIhIBRSURERERCqgoCQiIiJSAQUlERERkQooKImIiIhUQEFJREREpAIKSiIiIiIV+P8iYpgxrwN/MAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.set_theme(style=\"darkgrid\")\n", + "\n", + "dias, temperaturas, lluvias, probabilidades = simulador(verbose=True)\n", + "\n", + "xnew, ynew = suavizador(dias, temperaturas, kind='cubic')\n", + "data = {'Día': xnew, 'Temperatura': ynew}\n", + "df = pd.DataFrame(data)\n", + "sns.lineplot(data=df, x='Día', y='Temperatura', color='red')\n", + "\n", + "\n", + "# data = {'Día': dias, 'Temperatura': temperaturas, 'Lluvia': lluvias, 'Probabilidad': probabilidades}\n", + "# df = pd.DataFrame(data)\n", + "# sns.lineplot(data=df, x='Día', y='Temperatura', color='red')\n", + "\n", + "# Marcar los días de lluvia\n", + "for dia, lluvia in enumerate(lluvias):\n", + " if lluvia:\n", + " plt.plot(dia, temperaturas[dia], 'bo')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Referencias\n", + "\n", + "- [Seaborn Lineplot](https://seaborn.pydata.org/generated/seaborn.lineplot.html)\n", + "\n", + "- [Scipy\n", + " Interpolate](https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "base", + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}