From f7082d497dfc9f40bae89c83f0c612b3b0f9307c Mon Sep 17 00:00:00 2001 From: Laura <laura.marcela.becerra@gmail.com> Date: Sat, 26 Aug 2023 17:16:49 -0500 Subject: [PATCH] update library makesens --- .../DatosII-checkpoint.ipynb | 228 +++++++++++-- .../DatosIII-checkpoint.ipynb | 4 +- .../DatosII_a-checkpoint.ipynb | 36 +- .../apiMakeSens-checkpoint.ipynb | 317 +++++++++--------- Book/Jupyter_Notebooks/DatosII.ipynb | 228 +++++++++++-- Book/Jupyter_Notebooks/DatosIII.ipynb | 4 +- Book/Jupyter_Notebooks/DatosII_a.ipynb | 4 +- Book/Jupyter_Notebooks/apiMakeSens.ipynb | 317 +++++++++--------- 8 files changed, 749 insertions(+), 389 deletions(-) diff --git a/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosII-checkpoint.ipynb b/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosII-checkpoint.ipynb index c169c61..f5294fc 100644 --- a/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosII-checkpoint.ipynb +++ b/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosII-checkpoint.ipynb @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 23, "metadata": { "tags": [] }, @@ -77,16 +77,37 @@ "Mediante el uso de la API de MakeSens, descargamos los datos de temperatura de una de las estaciones (en este caso, usaremos los datos de la estación del [Instituto Técnico Damazo Zapata](https://makesens.aws.thinger.io/dashboards/DmE1_00004?authorization=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJEYXNoYm9hcmRfRG1FMV8wMDAwNCIsInN2ciI6Im1ha2VzZW5zLmF3cy50aGluZ2VyLmlvIiwidXNyIjoiTWFrZVNlbnMifQ.ymDNV3g-sdbJmhR4vH1CGUioHffuoKbKvQl-LSQCXvg)) de la red de RACIMO-Móncora. \n", "\n", "Para esto definimos:\n", - "- la fechas de inicio y fin en formato *YYYY-MM-DD HH:MM:SS*\n", + "- la fechas de inicio y fin en formato: `%Y-%m-%d %H:%M:%S` Por ejemplo: `2023-08-01 00:00:00`\n", "- el *ID* de la estación\n", - "- la frecuencia de muestreo, en este caso, vamos a descargar los datos por hora (*h*). \n", - "\n", - "Luego, utilizamos la función download_data con las variables definidas para obtener los datos de temperatura en un DataFrame de Pandas. Para más información sobre la API de MakeSens, puedes consultar la [documentación](https://docs.makesens.co/help/api-sdk/makesensapi-en-python)." + "- Frecuencia de muestreo: `1T`, `1H`, `D`, `W`.\n", + "\n", + "Frecuencias de muestreo:\n", + "||Significado|\n", + "|--|--|\n", + "|`1T`|minutos|\n", + "|`1H`|horas|\n", + "|`1D`|dÃas|\n", + "|`1W`|semanas|\n", + "\n", + " *ID* de las Estaciones:\n", + "|`ID`|Colegio|\n", + "|--|--|\n", + "|`mE1_00004`|Instituto Técnico Damaso Zapata|\n", + "|`mE1_00005`|Colegio Santander|\n", + "|`mE1_00006`|Institución Educativa Nuestra Señora del Pilar|\n", + "|`mE1_00007`|Escuela Normal Superior|\n", + "|`mE1_00008`|Fundación Colegio UIS|\n", + "|`mE1_00012`| Institución Educativa Café Madrid|\n", + "|`mE2_00000`|Institución Educativa Piloto Simón Bolivar|\n", + "|`mE2_00000`|Institución Educativa Luis Carlos Galán Sarmiento|\n", + "|`E2_00023`|Grupo Halley-UIS|\n", + "\n", + "Luego, utilizamos la función ```download_data()``` con las variables definidas para obtener los datos de temperatura en un DataFrame de Pandas. Para más información sobre la API de MakeSens, puedes consultar la [documentación](https://docs.makesens.co/help/api-sdk/makesensapi-en-python)." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -94,7 +115,7 @@ "fecha_inicio = \"2023-04-23 00:00:00\"\n", "fecha_fin = \"2023-04-30 00:00:00\"\n", "estacion = \"mE1_00004\" #Damaso Zapata\n", - "frecuencia = \"h\"\n", + "frecuencia = \"1H\"\n", "\n", "#Descargamos los datos de MakeSens\n", "data = MakeSens.download_data(estacion, fecha_inicio, fecha_fin, frecuencia)" @@ -110,12 +131,16 @@ "\n", "> ¿Por qué tenemos dos columnas de temperatura?\n", "\n", - " Luego, renombraremos las columnas para que tengan nombres más cortos y entendibles. Finalmente, convertiremos el Ãndice de los datos a formato de fecha y hora con la función ```to_datetime()``` para manejarlos facilmente y utilizarlos en la visualización." + " Luego, renombraremos las columnas para que tengan nombres más cortos y entendibles. Finalmente, convertiremos el Ãndice de los datos a formato de fecha y hora con la función ```to_datetime()``` para manejarlos facilmente y utilizarlos en la visualización.\n", + "\n", + " **Nota: Copiamos dataset**\n", + "\n", + "* Debemos copiar el dataset para evitar errores de sincronización de datos con el dataset viejo." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -142,32 +167,37 @@ " <th>T1</th>\n", " <th>T2</th>\n", " </tr>\n", + " <tr>\n", + " <th>ts</th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>2023-04-23 00:00:00</th>\n", - " <td>25.454298</td>\n", - " <td>26.207681</td>\n", + " <td>25.461412</td>\n", + " <td>26.223011</td>\n", " </tr>\n", " <tr>\n", " <th>2023-04-23 01:00:00</th>\n", - " <td>25.305798</td>\n", - " <td>26.074235</td>\n", + " <td>25.296955</td>\n", + " <td>26.060955</td>\n", " </tr>\n", " <tr>\n", " <th>2023-04-23 02:00:00</th>\n", - " <td>25.187994</td>\n", - " <td>25.943823</td>\n", + " <td>25.188348</td>\n", + " <td>25.949191</td>\n", " </tr>\n", " <tr>\n", " <th>2023-04-23 03:00:00</th>\n", - " <td>25.072544</td>\n", - " <td>25.844376</td>\n", + " <td>25.073048</td>\n", + " <td>25.849771</td>\n", " </tr>\n", " <tr>\n", " <th>2023-04-23 04:00:00</th>\n", - " <td>24.998870</td>\n", - " <td>25.780380</td>\n", + " <td>25.000205</td>\n", + " <td>25.777762</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", @@ -175,22 +205,25 @@ ], "text/plain": [ " T1 T2\n", - "2023-04-23 00:00:00 25.454298 26.207681\n", - "2023-04-23 01:00:00 25.305798 26.074235\n", - "2023-04-23 02:00:00 25.187994 25.943823\n", - "2023-04-23 03:00:00 25.072544 25.844376\n", - "2023-04-23 04:00:00 24.998870 25.780380" + "ts \n", + "2023-04-23 00:00:00 25.461412 26.223011\n", + "2023-04-23 01:00:00 25.296955 26.060955\n", + "2023-04-23 02:00:00 25.188348 25.949191\n", + "2023-04-23 03:00:00 25.073048 25.849771\n", + "2023-04-23 04:00:00 25.000205 25.777762" ] }, - "execution_count": 3, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Obtenemos los datos de temperatura de los sensores mediante una copia del dataFrame\n", - "temp = data[[\"temperatura\", \"temperatura2\"]].copy()\n", - "temp.columns = [\"T1\", \"T2\"] #renombramos las columnas \n", + "temp = data[[\"ts\",\"temperatura\", \"temperatura2\"]].copy()\n", + "temp.columns = [\"ts\",\"T1\", \"T2\"] #renombramos las columnas \n", + "temp = temp.set_index('ts')\n", + "temp.index = temp.index.strftime('%Y-%m-%d %H:%M:%S')\n", "temp.index = pd.to_datetime(temp.index) #Convertimos el indice a formato fecha\n", "\n", "temp.head() #exploremos como quedo nuestro nuevo dataFrame." @@ -200,6 +233,140 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "> Convertir los indices en formato de fecha, nos permite hacer cosas interesantes. Por ejemplo:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>T1</th>\n", + " <th>T2</th>\n", + " </tr>\n", + " <tr>\n", + " <th>ts</th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>2023-04-23 00:00:00</th>\n", + " <td>25.461412</td>\n", + " <td>26.223011</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-23 01:00:00</th>\n", + " <td>25.296955</td>\n", + " <td>26.060955</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-23 02:00:00</th>\n", + " <td>25.188348</td>\n", + " <td>25.949191</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-23 03:00:00</th>\n", + " <td>25.073048</td>\n", + " <td>25.849771</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-23 04:00:00</th>\n", + " <td>25.000205</td>\n", + " <td>25.777762</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 19:00:00</th>\n", + " <td>27.274842</td>\n", + " <td>27.945907</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 20:00:00</th>\n", + " <td>27.512799</td>\n", + " <td>28.181474</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 21:00:00</th>\n", + " <td>27.880514</td>\n", + " <td>28.550688</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 22:00:00</th>\n", + " <td>27.937186</td>\n", + " <td>28.646966</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 23:00:00</th>\n", + " <td>27.612088</td>\n", + " <td>28.328476</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>169 rows × 2 columns</p>\n", + "</div>" + ], + "text/plain": [ + " T1 T2\n", + "ts \n", + "2023-04-23 00:00:00 25.461412 26.223011\n", + "2023-04-23 01:00:00 25.296955 26.060955\n", + "2023-04-23 02:00:00 25.188348 25.949191\n", + "2023-04-23 03:00:00 25.073048 25.849771\n", + "2023-04-23 04:00:00 25.000205 25.777762\n", + "... ... ...\n", + "2023-04-29 19:00:00 27.274842 27.945907\n", + "2023-04-29 20:00:00 27.512799 28.181474\n", + "2023-04-29 21:00:00 27.880514 28.550688\n", + "2023-04-29 22:00:00 27.937186 28.646966\n", + "2023-04-29 23:00:00 27.612088 28.328476\n", + "\n", + "[169 rows x 2 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Datos de un mes especifico\n", + "temp.loc['2023-04']\n", + "\n", + "# Datos de un dÃa especifico ?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Analisis de datos\n", "> Para empezar a procesar los datos, primero debemos preguntarnos qué queremos analizar. \n", "\n", "Primero vamos a determinar si los dos sensores miden la misma temperatura. Una manera de hacerlo es calculando el promedio entre las medida de los dos sensores de temperatura para obtener un único valor de temperatura por cada medición. Para esto, utilizaremos la función ```.mean()``` de Pandas.\n", @@ -253,7 +420,9 @@ "\n", "Realizamos un formateo del eje de fechas para mostrar las etiquetas principales diariamente y las etiquetas menores cada 6 horas, esto con las funciones major_formatter, major_locator y minor_locator. Ajustamos los parámetros visuales de las marcas de los ejes para mejorar su apariencia mediante la función tick_params. \n", "\n", - "Finalmente, agregamos etiquetas y tÃtulos a los ejes, mostramos una cuadrÃcula de fondo y añadimos una leyenda para identificar cada serie de datos. Luego, mostramos la gráfica resultante." + "Finalmente, agregamos etiquetas y tÃtulos a los ejes, mostramos una cuadrÃcula de fondo y añadimos una leyenda para identificar cada serie de datos. Luego, mostramos la gráfica resultante.\n", + "\n", + "> **Revisa el modulo de Visualización de Datos para una introducción básica sobre matplotlib**" ] }, { @@ -510,6 +679,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "### Cuartiles y Digrama de Caja y Bigotes\n", "A primera vista, podemos observar que el área sombreada entre los valores máximos y mÃnimos registrados por hora es amplia, lo que nos indica que la temperatura varÃa durante los dÃas, dependiendo de la epoca del año. Por esto, vale la pena pensar: \n", "\n", "> ¿Qué tan representativo es el promedio de cada hora respecto al comportamiento real? \n", @@ -715,7 +885,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.10" + "version": "3.11.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosIII-checkpoint.ipynb b/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosIII-checkpoint.ipynb index d9bbe77..98779f3 100644 --- a/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosIII-checkpoint.ipynb +++ b/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosIII-checkpoint.ipynb @@ -148,7 +148,7 @@ "start = '2023-04-30 00:00:00' # Fecha de inicio: año-mes-dÃa hora:minuto:segundo\n", "end = '2023-05-07 23:00:00' # Fecha de fin: año-mes-dÃa hora:minuto:segundo\n", "\n", - "data = MakeSens.download_data(estacion, start, end,'m') # Descargar los datos\n", + "data = MakeSens.download_data(estacion, start, end,'1T') # Descargar los datos\n", "data.index = pd.DatetimeIndex(data.index) # Convertir a tipo datetime el Ãndice" ] }, @@ -2524,7 +2524,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.10" + "version": "3.11.3" } }, "nbformat": 4, diff --git a/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosII_a-checkpoint.ipynb b/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosII_a-checkpoint.ipynb index a7c5c91..810326b 100644 --- a/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosII_a-checkpoint.ipynb +++ b/Book/Jupyter_Notebooks/.ipynb_checkpoints/DatosII_a-checkpoint.ipynb @@ -11,7 +11,7 @@ "<table border = 5 align = center bgcolor=\"white\" cellspacing=\"10px\">\n", "\n", "<tr>\n", - "<td><a href=\"https://drive.google.com/file/d/14oQfOhwLDswvDw0uOIhQUNJZTmm6S0LE/view?usp=sharing\"> <img alt=\"Colaboratory logo\" width=\"150px\" src=\"https://miro.medium.com/max/986/1*S2AyJcdw8EPcn7gwDVSBCA.png\" align=\"left\" hspace=\"10px\" vspace=\"0px\" /> </a> </td>\n", + "<td><a href=\"https://drive.google.com/file/d/1--wnF2vQE2nDQ8rC8iMa2A2Sk1tNwPwz/view?usp=sharing\"> <img alt=\"Colaboratory logo\" width=\"150px\" src=\"https://miro.medium.com/max/986/1*S2AyJcdw8EPcn7gwDVSBCA.png\" align=\"left\" hspace=\"10px\" vspace=\"0px\" /> </a> </td>\n", " \n", " \n", " \n", @@ -81,7 +81,7 @@ "fecha_inicio = \"2023-04-15 00:00:00\"\n", "fecha_fin = \"2023-05-15 00:00:00\"\n", "estacion = \"mE1_00004\" #Damaso Zapata\n", - "frecuencia = \"h\"\n", + "frecuencia = \"1H\"\n", "\n", "#Descargar los datos\n", "data = MakeSens.download_data(estacion, fecha_inicio, fecha_fin, frecuencia)\n" @@ -1438,6 +1438,36 @@ "## Indice de Calidad de Aire" ] }, + { + "cell_type": "markdown", + "id": "7886b066", + "metadata": {}, + "source": [ + "Hemos visto que las estaciones cuentan el **número de partÃculas** presentes en el aire y a partir de allà se determina la **concentración** de cada una de ellas. Sin embargo, no todas las partÃculas son iguales, algunas son más dañinas que otras. Por ejemplo, las partÃculas de menos de 2.5 micrómetros de diámetro son las más dañinas para la salud humana, ya que pueden penetrar profundamente en los pulmones y causar problemas respiratorios. Por otro lado, las partÃculas de menos de 10 micrómetros de diámetro pueden penetrar en los pulmones y causar problemas respiratorios y cardiovasculares. Además, una concentración no nos dice mucho respecto a qué tan dañado está el aire que respiramos.\n", + "\n", + "Es por esto que surge la necesidad de establecer un **Ãndice de Calidad de Aire (ICA)** que nos permita conocer el estado del aire que respiramos. Este Ãndice es un **valor representativo de los Ãndices de contaminación más significativos**. AsÃ, es posible clasificar la calidad del aire en seis categorÃas, cada una de ellas asociada a un color y a un valor del ICA, tal como vimos en la tabla de la sección [calidad del aire](../Monitoreo_Ambiental/Normatividad.md)." + ] + }, + { + "cell_type": "markdown", + "id": "8c0a488d", + "metadata": {}, + "source": [ + "La fórmula para calcular el ICA es la siguiente:\n", + "\n", + "$ {ICA}_{p} = \\frac{I_{alto}-I_{bajo}}{PC_{alto}-PC_{bajo}}\\times (C_{p}-PC_{bajo})+I_{bajo} , $\n", + "\n", + "donde:\n", + "- ${ICA}_{p}$ es el Ãndice de calidad del aire para el contaminante $p$.\n", + "- ${C_{p}}$ es la concentración del contaminante $p$.\n", + "- ${PC_{bajo}}$ es el punto de corte menor o igual a $C_{p}$.\n", + "- ${PC_{alto}}$ es el punto de corte mayor o igual a $C_{p}$.\n", + "- ${I_{bajo}}$ es el Ãndice correspondiente al punto de corte ${PC_{bajo}}$.\n", + "- ${I_{alto}}$ es el Ãndice correspondiente al punto de corte ${PC_{alto}}$.\n", + "\n", + "Todos estos valores se pueden encontrar en la página del [IDEAM](http://www.ideam.gov.co/documents/11769/641368/2.01+HM+Indice+calidad+aire.pdf/5130ffb3-a1bf-4d23-a663-b4c51327cc05).\n" + ] + }, { "cell_type": "code", "execution_count": null, @@ -1463,7 +1493,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.10" + "version": "3.11.3" } }, "nbformat": 4, diff --git a/Book/Jupyter_Notebooks/.ipynb_checkpoints/apiMakeSens-checkpoint.ipynb b/Book/Jupyter_Notebooks/.ipynb_checkpoints/apiMakeSens-checkpoint.ipynb index f449ef7..8f745c7 100644 --- a/Book/Jupyter_Notebooks/.ipynb_checkpoints/apiMakeSens-checkpoint.ipynb +++ b/Book/Jupyter_Notebooks/.ipynb_checkpoints/apiMakeSens-checkpoint.ipynb @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": { "id": "METaVqUqOPPp" }, @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": { "id": "LulIK6c9_-GT" }, @@ -113,7 +113,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -123,7 +123,7 @@ }, "outputs": [], "source": [ - "data = MakeSens.download_data('mE1_00004', fechaInicio, fechaFin, 'h')" + "data = MakeSens.download_data('mE1_00004', fechaInicio, fechaFin, '1H')" ] }, { @@ -135,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -159,195 +159,188 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", + " <th>ts</th>\n", + " <th>humedad</th>\n", " <th>humedad2</th>\n", - " <th>pm_n_2_5_2</th>\n", - " <th>pm25_1</th>\n", - " <th>pm25_2</th>\n", - " <th>pm1_1_AE</th>\n", - " <th>pm10_2_AE</th>\n", - " <th>pm_n_2_5_1</th>\n", " <th>iluminancia</th>\n", + " <th>pm10_1</th>\n", + " <th>pm10_1_AE</th>\n", + " <th>pm10_2</th>\n", + " <th>pm10_2_AE</th>\n", " <th>pm1_1</th>\n", - " <th>pm25_1_AE</th>\n", + " <th>pm1_1_AE</th>\n", " <th>...</th>\n", - " <th>pm_n_0_3_1</th>\n", - " <th>pm_n_5_0_1</th>\n", - " <th>pm_n_5_0_2</th>\n", - " <th>pm10_2</th>\n", - " <th>pm10_1</th>\n", - " <th>pm25_2_AE</th>\n", + " <th>pm_n_10_0_2</th>\n", " <th>pm_n_1_0_1</th>\n", " <th>pm_n_1_0_2</th>\n", - " <th>longitud</th>\n", - " <th>latitud</th>\n", + " <th>pm_n_2_5_1</th>\n", + " <th>pm_n_2_5_2</th>\n", + " <th>pm_n_5_0_1</th>\n", + " <th>pm_n_5_0_2</th>\n", + " <th>presion</th>\n", + " <th>temperatura</th>\n", + " <th>temperatura2</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", - " <th>2023-04-15 02:00:00</th>\n", - " <td>62.688538</td>\n", - " <td>15.666667</td>\n", - " <td>26.466667</td>\n", - " <td>27.066667</td>\n", - " <td>18.133333</td>\n", - " <td>29.600000</td>\n", - " <td>13.066667</td>\n", - " <td>5.933333</td>\n", - " <td>18.133333</td>\n", - " <td>26.400000</td>\n", + " <th>0</th>\n", + " <td>2023-08-16 17:00:00</td>\n", + " <td>38.897320</td>\n", + " <td>41.228504</td>\n", + " <td>6.000000</td>\n", + " <td>13.700000</td>\n", + " <td>13.700000</td>\n", + " <td>14.200000</td>\n", + " <td>14.200000</td>\n", + " <td>10.000000</td>\n", + " <td>10.000000</td>\n", " <td>...</td>\n", - " <td>2955.800000</td>\n", - " <td>4.800000</td>\n", - " <td>3.857143</td>\n", - " <td>29.600000</td>\n", - " <td>28.666667</td>\n", - " <td>26.866667</td>\n", - " <td>165.866667</td>\n", - " <td>185.866667</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.200000</td>\n", + " <td>66.700000</td>\n", + " <td>71.300000</td>\n", + " <td>5.000000</td>\n", + " <td>7.400000</td>\n", + " <td>1.800000</td>\n", + " <td>2.000000</td>\n", + " <td>969.452265</td>\n", + " <td>28.068901</td>\n", + " <td>28.687991</td>\n", " </tr>\n", " <tr>\n", - " <th>2023-04-15 03:00:00</th>\n", - " <td>63.074693</td>\n", - " <td>12.656250</td>\n", - " <td>29.062500</td>\n", - " <td>29.031250</td>\n", - " <td>19.343750</td>\n", - " <td>31.468750</td>\n", - " <td>15.218750</td>\n", - " <td>6.000000</td>\n", - " <td>19.593750</td>\n", - " <td>28.812500</td>\n", + " <th>1</th>\n", + " <td>2023-08-16 18:00:00</td>\n", + " <td>41.789214</td>\n", + " <td>44.269801</td>\n", + " <td>39.071429</td>\n", + " <td>10.000000</td>\n", + " <td>10.000000</td>\n", + " <td>10.285714</td>\n", + " <td>10.285714</td>\n", + " <td>7.071429</td>\n", + " <td>7.071429</td>\n", " <td>...</td>\n", - " <td>3255.375000</td>\n", - " <td>4.181818</td>\n", - " <td>4.640000</td>\n", - " <td>31.468750</td>\n", - " <td>31.343750</td>\n", - " <td>28.781250</td>\n", - " <td>182.687500</td>\n", - " <td>194.218750</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.142857</td>\n", + " <td>49.785714</td>\n", + " <td>54.071429</td>\n", + " <td>3.857143</td>\n", + " <td>4.285714</td>\n", + " <td>1.428571</td>\n", + " <td>1.000000</td>\n", + " <td>967.443556</td>\n", + " <td>28.146178</td>\n", + " <td>28.780804</td>\n", " </tr>\n", " <tr>\n", - " <th>2023-04-15 04:00:00</th>\n", - " <td>63.844043</td>\n", - " <td>13.161290</td>\n", - " <td>28.225806</td>\n", - " <td>29.645161</td>\n", - " <td>19.064516</td>\n", - " <td>32.000000</td>\n", - " <td>12.516129</td>\n", - " <td>6.000000</td>\n", - " <td>19.322581</td>\n", - " <td>27.935484</td>\n", + " <th>2</th>\n", + " <td>2023-08-16 19:00:00</td>\n", + " <td>42.114675</td>\n", + " <td>44.522121</td>\n", + " <td>41.428571</td>\n", + " <td>8.428571</td>\n", + " <td>8.428571</td>\n", + " <td>7.571429</td>\n", + " <td>7.571429</td>\n", + " <td>5.428571</td>\n", + " <td>5.428571</td>\n", " <td>...</td>\n", - " <td>3189.290323</td>\n", - " <td>3.727273</td>\n", - " <td>4.307692</td>\n", - " <td>32.000000</td>\n", - " <td>30.096774</td>\n", - " <td>29.129032</td>\n", - " <td>179.387097</td>\n", - " <td>207.516129</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.000000</td>\n", + " <td>40.071429</td>\n", + " <td>39.571429</td>\n", + " <td>5.142857</td>\n", + " <td>3.000000</td>\n", + " <td>1.285714</td>\n", + " <td>0.571429</td>\n", + " <td>966.713915</td>\n", + " <td>28.195374</td>\n", + " <td>28.835164</td>\n", " </tr>\n", " <tr>\n", - " <th>2023-04-15 05:00:00</th>\n", - " <td>63.372091</td>\n", - " <td>12.800000</td>\n", - " <td>28.466667</td>\n", - " <td>28.500000</td>\n", - " <td>19.333333</td>\n", - " <td>30.600000</td>\n", - " <td>13.931034</td>\n", - " <td>6.000000</td>\n", - " <td>19.500000</td>\n", - " <td>28.200000</td>\n", + " <th>3</th>\n", + " <td>2023-08-16 20:00:00</td>\n", + " <td>38.560408</td>\n", + " <td>40.723931</td>\n", + " <td>41.857143</td>\n", + " <td>5.857143</td>\n", + " <td>5.857143</td>\n", + " <td>5.428571</td>\n", + " <td>5.428571</td>\n", + " <td>3.714286</td>\n", + " <td>3.714286</td>\n", " <td>...</td>\n", - " <td>3188.700000</td>\n", - " <td>3.920000</td>\n", - " <td>4.260870</td>\n", - " <td>30.600000</td>\n", - " <td>30.733333</td>\n", - " <td>28.233333</td>\n", - " <td>177.866667</td>\n", - " <td>193.600000</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.285714</td>\n", + " <td>26.571429</td>\n", + " <td>21.428571</td>\n", + " <td>3.428571</td>\n", + " <td>2.285714</td>\n", + " <td>0.857143</td>\n", + " <td>0.857143</td>\n", + " <td>966.744908</td>\n", + " <td>28.157669</td>\n", + " <td>28.842603</td>\n", " </tr>\n", " <tr>\n", - " <th>2023-04-15 06:00:00</th>\n", - " <td>62.761833</td>\n", - " <td>11.290323</td>\n", - " <td>26.677419</td>\n", - " <td>26.225806</td>\n", - " <td>17.903226</td>\n", - " <td>29.064516</td>\n", - " <td>12.838710</td>\n", - " <td>6.000000</td>\n", - " <td>18.000000</td>\n", - " <td>26.483871</td>\n", + " <th>4</th>\n", + " <td>2023-08-16 21:00:00</td>\n", + " <td>38.032839</td>\n", + " <td>40.042586</td>\n", + " <td>42.000000</td>\n", + " <td>6.045455</td>\n", + " <td>6.045455</td>\n", + " <td>5.363636</td>\n", + " <td>5.363636</td>\n", + " <td>4.181818</td>\n", + " <td>4.181818</td>\n", " <td>...</td>\n", - " <td>2998.354839</td>\n", - " <td>3.833333</td>\n", - " <td>4.962963</td>\n", - " <td>29.064516</td>\n", - " <td>28.935484</td>\n", - " <td>26.225806</td>\n", - " <td>168.903226</td>\n", - " <td>174.612903</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.363636</td>\n", + " <td>26.000000</td>\n", + " <td>22.818182</td>\n", + " <td>3.454545</td>\n", + " <td>2.545455</td>\n", + " <td>1.000000</td>\n", + " <td>0.818182</td>\n", + " <td>982.620261</td>\n", + " <td>27.273129</td>\n", + " <td>27.939668</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", - "<p>5 rows × 32 columns</p>\n", + "<p>5 rows × 31 columns</p>\n", "</div>" ], "text/plain": [ - " humedad2 pm_n_2_5_2 pm25_1 pm25_2 pm1_1_AE \\\n", - "2023-04-15 02:00:00 62.688538 15.666667 26.466667 27.066667 18.133333 \n", - "2023-04-15 03:00:00 63.074693 12.656250 29.062500 29.031250 19.343750 \n", - "2023-04-15 04:00:00 63.844043 13.161290 28.225806 29.645161 19.064516 \n", - "2023-04-15 05:00:00 63.372091 12.800000 28.466667 28.500000 19.333333 \n", - "2023-04-15 06:00:00 62.761833 11.290323 26.677419 26.225806 17.903226 \n", + " ts humedad humedad2 iluminancia pm10_1 \\\n", + "0 2023-08-16 17:00:00 38.897320 41.228504 6.000000 13.700000 \n", + "1 2023-08-16 18:00:00 41.789214 44.269801 39.071429 10.000000 \n", + "2 2023-08-16 19:00:00 42.114675 44.522121 41.428571 8.428571 \n", + "3 2023-08-16 20:00:00 38.560408 40.723931 41.857143 5.857143 \n", + "4 2023-08-16 21:00:00 38.032839 40.042586 42.000000 6.045455 \n", "\n", - " pm10_2_AE pm_n_2_5_1 iluminancia pm1_1 pm25_1_AE \\\n", - "2023-04-15 02:00:00 29.600000 13.066667 5.933333 18.133333 26.400000 \n", - "2023-04-15 03:00:00 31.468750 15.218750 6.000000 19.593750 28.812500 \n", - "2023-04-15 04:00:00 32.000000 12.516129 6.000000 19.322581 27.935484 \n", - "2023-04-15 05:00:00 30.600000 13.931034 6.000000 19.500000 28.200000 \n", - "2023-04-15 06:00:00 29.064516 12.838710 6.000000 18.000000 26.483871 \n", + " pm10_1_AE pm10_2 pm10_2_AE pm1_1 pm1_1_AE ... pm_n_10_0_2 \\\n", + "0 13.700000 14.200000 14.200000 10.000000 10.000000 ... 0.200000 \n", + "1 10.000000 10.285714 10.285714 7.071429 7.071429 ... 0.142857 \n", + "2 8.428571 7.571429 7.571429 5.428571 5.428571 ... 0.000000 \n", + "3 5.857143 5.428571 5.428571 3.714286 3.714286 ... 0.285714 \n", + "4 6.045455 5.363636 5.363636 4.181818 4.181818 ... 0.363636 \n", "\n", - " ... pm_n_0_3_1 pm_n_5_0_1 pm_n_5_0_2 pm10_2 \\\n", - "2023-04-15 02:00:00 ... 2955.800000 4.800000 3.857143 29.600000 \n", - "2023-04-15 03:00:00 ... 3255.375000 4.181818 4.640000 31.468750 \n", - "2023-04-15 04:00:00 ... 3189.290323 3.727273 4.307692 32.000000 \n", - "2023-04-15 05:00:00 ... 3188.700000 3.920000 4.260870 30.600000 \n", - "2023-04-15 06:00:00 ... 2998.354839 3.833333 4.962963 29.064516 \n", + " pm_n_1_0_1 pm_n_1_0_2 pm_n_2_5_1 pm_n_2_5_2 pm_n_5_0_1 pm_n_5_0_2 \\\n", + "0 66.700000 71.300000 5.000000 7.400000 1.800000 2.000000 \n", + "1 49.785714 54.071429 3.857143 4.285714 1.428571 1.000000 \n", + "2 40.071429 39.571429 5.142857 3.000000 1.285714 0.571429 \n", + "3 26.571429 21.428571 3.428571 2.285714 0.857143 0.857143 \n", + "4 26.000000 22.818182 3.454545 2.545455 1.000000 0.818182 \n", "\n", - " pm10_1 pm25_2_AE pm_n_1_0_1 pm_n_1_0_2 longitud \\\n", - "2023-04-15 02:00:00 28.666667 26.866667 165.866667 185.866667 None \n", - "2023-04-15 03:00:00 31.343750 28.781250 182.687500 194.218750 None \n", - "2023-04-15 04:00:00 30.096774 29.129032 179.387097 207.516129 None \n", - "2023-04-15 05:00:00 30.733333 28.233333 177.866667 193.600000 None \n", - "2023-04-15 06:00:00 28.935484 26.225806 168.903226 174.612903 None \n", + " presion temperatura temperatura2 \n", + "0 969.452265 28.068901 28.687991 \n", + "1 967.443556 28.146178 28.780804 \n", + "2 966.713915 28.195374 28.835164 \n", + "3 966.744908 28.157669 28.842603 \n", + "4 982.620261 27.273129 27.939668 \n", "\n", - " latitud \n", - "2023-04-15 02:00:00 None \n", - "2023-04-15 03:00:00 None \n", - "2023-04-15 04:00:00 None \n", - "2023-04-15 05:00:00 None \n", - "2023-04-15 06:00:00 None \n", - "\n", - "[5 rows x 32 columns]" + "[5 rows x 31 columns]" ] }, - "execution_count": 7, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -471,7 +464,9 @@ { "cell_type": "code", "execution_count": 11, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { @@ -556,7 +551,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.7" + "version": "3.11.3" } }, "nbformat": 4, diff --git a/Book/Jupyter_Notebooks/DatosII.ipynb b/Book/Jupyter_Notebooks/DatosII.ipynb index c169c61..f5294fc 100644 --- a/Book/Jupyter_Notebooks/DatosII.ipynb +++ b/Book/Jupyter_Notebooks/DatosII.ipynb @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 23, "metadata": { "tags": [] }, @@ -77,16 +77,37 @@ "Mediante el uso de la API de MakeSens, descargamos los datos de temperatura de una de las estaciones (en este caso, usaremos los datos de la estación del [Instituto Técnico Damazo Zapata](https://makesens.aws.thinger.io/dashboards/DmE1_00004?authorization=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJEYXNoYm9hcmRfRG1FMV8wMDAwNCIsInN2ciI6Im1ha2VzZW5zLmF3cy50aGluZ2VyLmlvIiwidXNyIjoiTWFrZVNlbnMifQ.ymDNV3g-sdbJmhR4vH1CGUioHffuoKbKvQl-LSQCXvg)) de la red de RACIMO-Móncora. \n", "\n", "Para esto definimos:\n", - "- la fechas de inicio y fin en formato *YYYY-MM-DD HH:MM:SS*\n", + "- la fechas de inicio y fin en formato: `%Y-%m-%d %H:%M:%S` Por ejemplo: `2023-08-01 00:00:00`\n", "- el *ID* de la estación\n", - "- la frecuencia de muestreo, en este caso, vamos a descargar los datos por hora (*h*). \n", - "\n", - "Luego, utilizamos la función download_data con las variables definidas para obtener los datos de temperatura en un DataFrame de Pandas. Para más información sobre la API de MakeSens, puedes consultar la [documentación](https://docs.makesens.co/help/api-sdk/makesensapi-en-python)." + "- Frecuencia de muestreo: `1T`, `1H`, `D`, `W`.\n", + "\n", + "Frecuencias de muestreo:\n", + "||Significado|\n", + "|--|--|\n", + "|`1T`|minutos|\n", + "|`1H`|horas|\n", + "|`1D`|dÃas|\n", + "|`1W`|semanas|\n", + "\n", + " *ID* de las Estaciones:\n", + "|`ID`|Colegio|\n", + "|--|--|\n", + "|`mE1_00004`|Instituto Técnico Damaso Zapata|\n", + "|`mE1_00005`|Colegio Santander|\n", + "|`mE1_00006`|Institución Educativa Nuestra Señora del Pilar|\n", + "|`mE1_00007`|Escuela Normal Superior|\n", + "|`mE1_00008`|Fundación Colegio UIS|\n", + "|`mE1_00012`| Institución Educativa Café Madrid|\n", + "|`mE2_00000`|Institución Educativa Piloto Simón Bolivar|\n", + "|`mE2_00000`|Institución Educativa Luis Carlos Galán Sarmiento|\n", + "|`E2_00023`|Grupo Halley-UIS|\n", + "\n", + "Luego, utilizamos la función ```download_data()``` con las variables definidas para obtener los datos de temperatura en un DataFrame de Pandas. Para más información sobre la API de MakeSens, puedes consultar la [documentación](https://docs.makesens.co/help/api-sdk/makesensapi-en-python)." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -94,7 +115,7 @@ "fecha_inicio = \"2023-04-23 00:00:00\"\n", "fecha_fin = \"2023-04-30 00:00:00\"\n", "estacion = \"mE1_00004\" #Damaso Zapata\n", - "frecuencia = \"h\"\n", + "frecuencia = \"1H\"\n", "\n", "#Descargamos los datos de MakeSens\n", "data = MakeSens.download_data(estacion, fecha_inicio, fecha_fin, frecuencia)" @@ -110,12 +131,16 @@ "\n", "> ¿Por qué tenemos dos columnas de temperatura?\n", "\n", - " Luego, renombraremos las columnas para que tengan nombres más cortos y entendibles. Finalmente, convertiremos el Ãndice de los datos a formato de fecha y hora con la función ```to_datetime()``` para manejarlos facilmente y utilizarlos en la visualización." + " Luego, renombraremos las columnas para que tengan nombres más cortos y entendibles. Finalmente, convertiremos el Ãndice de los datos a formato de fecha y hora con la función ```to_datetime()``` para manejarlos facilmente y utilizarlos en la visualización.\n", + "\n", + " **Nota: Copiamos dataset**\n", + "\n", + "* Debemos copiar el dataset para evitar errores de sincronización de datos con el dataset viejo." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -142,32 +167,37 @@ " <th>T1</th>\n", " <th>T2</th>\n", " </tr>\n", + " <tr>\n", + " <th>ts</th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>2023-04-23 00:00:00</th>\n", - " <td>25.454298</td>\n", - " <td>26.207681</td>\n", + " <td>25.461412</td>\n", + " <td>26.223011</td>\n", " </tr>\n", " <tr>\n", " <th>2023-04-23 01:00:00</th>\n", - " <td>25.305798</td>\n", - " <td>26.074235</td>\n", + " <td>25.296955</td>\n", + " <td>26.060955</td>\n", " </tr>\n", " <tr>\n", " <th>2023-04-23 02:00:00</th>\n", - " <td>25.187994</td>\n", - " <td>25.943823</td>\n", + " <td>25.188348</td>\n", + " <td>25.949191</td>\n", " </tr>\n", " <tr>\n", " <th>2023-04-23 03:00:00</th>\n", - " <td>25.072544</td>\n", - " <td>25.844376</td>\n", + " <td>25.073048</td>\n", + " <td>25.849771</td>\n", " </tr>\n", " <tr>\n", " <th>2023-04-23 04:00:00</th>\n", - " <td>24.998870</td>\n", - " <td>25.780380</td>\n", + " <td>25.000205</td>\n", + " <td>25.777762</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", @@ -175,22 +205,25 @@ ], "text/plain": [ " T1 T2\n", - "2023-04-23 00:00:00 25.454298 26.207681\n", - "2023-04-23 01:00:00 25.305798 26.074235\n", - "2023-04-23 02:00:00 25.187994 25.943823\n", - "2023-04-23 03:00:00 25.072544 25.844376\n", - "2023-04-23 04:00:00 24.998870 25.780380" + "ts \n", + "2023-04-23 00:00:00 25.461412 26.223011\n", + "2023-04-23 01:00:00 25.296955 26.060955\n", + "2023-04-23 02:00:00 25.188348 25.949191\n", + "2023-04-23 03:00:00 25.073048 25.849771\n", + "2023-04-23 04:00:00 25.000205 25.777762" ] }, - "execution_count": 3, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Obtenemos los datos de temperatura de los sensores mediante una copia del dataFrame\n", - "temp = data[[\"temperatura\", \"temperatura2\"]].copy()\n", - "temp.columns = [\"T1\", \"T2\"] #renombramos las columnas \n", + "temp = data[[\"ts\",\"temperatura\", \"temperatura2\"]].copy()\n", + "temp.columns = [\"ts\",\"T1\", \"T2\"] #renombramos las columnas \n", + "temp = temp.set_index('ts')\n", + "temp.index = temp.index.strftime('%Y-%m-%d %H:%M:%S')\n", "temp.index = pd.to_datetime(temp.index) #Convertimos el indice a formato fecha\n", "\n", "temp.head() #exploremos como quedo nuestro nuevo dataFrame." @@ -200,6 +233,140 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "> Convertir los indices en formato de fecha, nos permite hacer cosas interesantes. Por ejemplo:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>T1</th>\n", + " <th>T2</th>\n", + " </tr>\n", + " <tr>\n", + " <th>ts</th>\n", + " <th></th>\n", + " <th></th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>2023-04-23 00:00:00</th>\n", + " <td>25.461412</td>\n", + " <td>26.223011</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-23 01:00:00</th>\n", + " <td>25.296955</td>\n", + " <td>26.060955</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-23 02:00:00</th>\n", + " <td>25.188348</td>\n", + " <td>25.949191</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-23 03:00:00</th>\n", + " <td>25.073048</td>\n", + " <td>25.849771</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-23 04:00:00</th>\n", + " <td>25.000205</td>\n", + " <td>25.777762</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 19:00:00</th>\n", + " <td>27.274842</td>\n", + " <td>27.945907</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 20:00:00</th>\n", + " <td>27.512799</td>\n", + " <td>28.181474</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 21:00:00</th>\n", + " <td>27.880514</td>\n", + " <td>28.550688</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 22:00:00</th>\n", + " <td>27.937186</td>\n", + " <td>28.646966</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2023-04-29 23:00:00</th>\n", + " <td>27.612088</td>\n", + " <td>28.328476</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>169 rows × 2 columns</p>\n", + "</div>" + ], + "text/plain": [ + " T1 T2\n", + "ts \n", + "2023-04-23 00:00:00 25.461412 26.223011\n", + "2023-04-23 01:00:00 25.296955 26.060955\n", + "2023-04-23 02:00:00 25.188348 25.949191\n", + "2023-04-23 03:00:00 25.073048 25.849771\n", + "2023-04-23 04:00:00 25.000205 25.777762\n", + "... ... ...\n", + "2023-04-29 19:00:00 27.274842 27.945907\n", + "2023-04-29 20:00:00 27.512799 28.181474\n", + "2023-04-29 21:00:00 27.880514 28.550688\n", + "2023-04-29 22:00:00 27.937186 28.646966\n", + "2023-04-29 23:00:00 27.612088 28.328476\n", + "\n", + "[169 rows x 2 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Datos de un mes especifico\n", + "temp.loc['2023-04']\n", + "\n", + "# Datos de un dÃa especifico ?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Analisis de datos\n", "> Para empezar a procesar los datos, primero debemos preguntarnos qué queremos analizar. \n", "\n", "Primero vamos a determinar si los dos sensores miden la misma temperatura. Una manera de hacerlo es calculando el promedio entre las medida de los dos sensores de temperatura para obtener un único valor de temperatura por cada medición. Para esto, utilizaremos la función ```.mean()``` de Pandas.\n", @@ -253,7 +420,9 @@ "\n", "Realizamos un formateo del eje de fechas para mostrar las etiquetas principales diariamente y las etiquetas menores cada 6 horas, esto con las funciones major_formatter, major_locator y minor_locator. Ajustamos los parámetros visuales de las marcas de los ejes para mejorar su apariencia mediante la función tick_params. \n", "\n", - "Finalmente, agregamos etiquetas y tÃtulos a los ejes, mostramos una cuadrÃcula de fondo y añadimos una leyenda para identificar cada serie de datos. Luego, mostramos la gráfica resultante." + "Finalmente, agregamos etiquetas y tÃtulos a los ejes, mostramos una cuadrÃcula de fondo y añadimos una leyenda para identificar cada serie de datos. Luego, mostramos la gráfica resultante.\n", + "\n", + "> **Revisa el modulo de Visualización de Datos para una introducción básica sobre matplotlib**" ] }, { @@ -510,6 +679,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "### Cuartiles y Digrama de Caja y Bigotes\n", "A primera vista, podemos observar que el área sombreada entre los valores máximos y mÃnimos registrados por hora es amplia, lo que nos indica que la temperatura varÃa durante los dÃas, dependiendo de la epoca del año. Por esto, vale la pena pensar: \n", "\n", "> ¿Qué tan representativo es el promedio de cada hora respecto al comportamiento real? \n", @@ -715,7 +885,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.10" + "version": "3.11.3" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/Book/Jupyter_Notebooks/DatosIII.ipynb b/Book/Jupyter_Notebooks/DatosIII.ipynb index d9bbe77..98779f3 100644 --- a/Book/Jupyter_Notebooks/DatosIII.ipynb +++ b/Book/Jupyter_Notebooks/DatosIII.ipynb @@ -148,7 +148,7 @@ "start = '2023-04-30 00:00:00' # Fecha de inicio: año-mes-dÃa hora:minuto:segundo\n", "end = '2023-05-07 23:00:00' # Fecha de fin: año-mes-dÃa hora:minuto:segundo\n", "\n", - "data = MakeSens.download_data(estacion, start, end,'m') # Descargar los datos\n", + "data = MakeSens.download_data(estacion, start, end,'1T') # Descargar los datos\n", "data.index = pd.DatetimeIndex(data.index) # Convertir a tipo datetime el Ãndice" ] }, @@ -2524,7 +2524,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.10" + "version": "3.11.3" } }, "nbformat": 4, diff --git a/Book/Jupyter_Notebooks/DatosII_a.ipynb b/Book/Jupyter_Notebooks/DatosII_a.ipynb index 6558e85..810326b 100644 --- a/Book/Jupyter_Notebooks/DatosII_a.ipynb +++ b/Book/Jupyter_Notebooks/DatosII_a.ipynb @@ -81,7 +81,7 @@ "fecha_inicio = \"2023-04-15 00:00:00\"\n", "fecha_fin = \"2023-05-15 00:00:00\"\n", "estacion = \"mE1_00004\" #Damaso Zapata\n", - "frecuencia = \"h\"\n", + "frecuencia = \"1H\"\n", "\n", "#Descargar los datos\n", "data = MakeSens.download_data(estacion, fecha_inicio, fecha_fin, frecuencia)\n" @@ -1493,7 +1493,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.10" + "version": "3.11.3" } }, "nbformat": 4, diff --git a/Book/Jupyter_Notebooks/apiMakeSens.ipynb b/Book/Jupyter_Notebooks/apiMakeSens.ipynb index f449ef7..8f745c7 100644 --- a/Book/Jupyter_Notebooks/apiMakeSens.ipynb +++ b/Book/Jupyter_Notebooks/apiMakeSens.ipynb @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": { "id": "METaVqUqOPPp" }, @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": { "id": "LulIK6c9_-GT" }, @@ -113,7 +113,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -123,7 +123,7 @@ }, "outputs": [], "source": [ - "data = MakeSens.download_data('mE1_00004', fechaInicio, fechaFin, 'h')" + "data = MakeSens.download_data('mE1_00004', fechaInicio, fechaFin, '1H')" ] }, { @@ -135,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -159,195 +159,188 @@ " <thead>\n", " <tr style=\"text-align: right;\">\n", " <th></th>\n", + " <th>ts</th>\n", + " <th>humedad</th>\n", " <th>humedad2</th>\n", - " <th>pm_n_2_5_2</th>\n", - " <th>pm25_1</th>\n", - " <th>pm25_2</th>\n", - " <th>pm1_1_AE</th>\n", - " <th>pm10_2_AE</th>\n", - " <th>pm_n_2_5_1</th>\n", " <th>iluminancia</th>\n", + " <th>pm10_1</th>\n", + " <th>pm10_1_AE</th>\n", + " <th>pm10_2</th>\n", + " <th>pm10_2_AE</th>\n", " <th>pm1_1</th>\n", - " <th>pm25_1_AE</th>\n", + " <th>pm1_1_AE</th>\n", " <th>...</th>\n", - " <th>pm_n_0_3_1</th>\n", - " <th>pm_n_5_0_1</th>\n", - " <th>pm_n_5_0_2</th>\n", - " <th>pm10_2</th>\n", - " <th>pm10_1</th>\n", - " <th>pm25_2_AE</th>\n", + " <th>pm_n_10_0_2</th>\n", " <th>pm_n_1_0_1</th>\n", " <th>pm_n_1_0_2</th>\n", - " <th>longitud</th>\n", - " <th>latitud</th>\n", + " <th>pm_n_2_5_1</th>\n", + " <th>pm_n_2_5_2</th>\n", + " <th>pm_n_5_0_1</th>\n", + " <th>pm_n_5_0_2</th>\n", + " <th>presion</th>\n", + " <th>temperatura</th>\n", + " <th>temperatura2</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", - " <th>2023-04-15 02:00:00</th>\n", - " <td>62.688538</td>\n", - " <td>15.666667</td>\n", - " <td>26.466667</td>\n", - " <td>27.066667</td>\n", - " <td>18.133333</td>\n", - " <td>29.600000</td>\n", - " <td>13.066667</td>\n", - " <td>5.933333</td>\n", - " <td>18.133333</td>\n", - " <td>26.400000</td>\n", + " <th>0</th>\n", + " <td>2023-08-16 17:00:00</td>\n", + " <td>38.897320</td>\n", + " <td>41.228504</td>\n", + " <td>6.000000</td>\n", + " <td>13.700000</td>\n", + " <td>13.700000</td>\n", + " <td>14.200000</td>\n", + " <td>14.200000</td>\n", + " <td>10.000000</td>\n", + " <td>10.000000</td>\n", " <td>...</td>\n", - " <td>2955.800000</td>\n", - " <td>4.800000</td>\n", - " <td>3.857143</td>\n", - " <td>29.600000</td>\n", - " <td>28.666667</td>\n", - " <td>26.866667</td>\n", - " <td>165.866667</td>\n", - " <td>185.866667</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.200000</td>\n", + " <td>66.700000</td>\n", + " <td>71.300000</td>\n", + " <td>5.000000</td>\n", + " <td>7.400000</td>\n", + " <td>1.800000</td>\n", + " <td>2.000000</td>\n", + " <td>969.452265</td>\n", + " <td>28.068901</td>\n", + " <td>28.687991</td>\n", " </tr>\n", " <tr>\n", - " <th>2023-04-15 03:00:00</th>\n", - " <td>63.074693</td>\n", - " <td>12.656250</td>\n", - " <td>29.062500</td>\n", - " <td>29.031250</td>\n", - " <td>19.343750</td>\n", - " <td>31.468750</td>\n", - " <td>15.218750</td>\n", - " <td>6.000000</td>\n", - " <td>19.593750</td>\n", - " <td>28.812500</td>\n", + " <th>1</th>\n", + " <td>2023-08-16 18:00:00</td>\n", + " <td>41.789214</td>\n", + " <td>44.269801</td>\n", + " <td>39.071429</td>\n", + " <td>10.000000</td>\n", + " <td>10.000000</td>\n", + " <td>10.285714</td>\n", + " <td>10.285714</td>\n", + " <td>7.071429</td>\n", + " <td>7.071429</td>\n", " <td>...</td>\n", - " <td>3255.375000</td>\n", - " <td>4.181818</td>\n", - " <td>4.640000</td>\n", - " <td>31.468750</td>\n", - " <td>31.343750</td>\n", - " <td>28.781250</td>\n", - " <td>182.687500</td>\n", - " <td>194.218750</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.142857</td>\n", + " <td>49.785714</td>\n", + " <td>54.071429</td>\n", + " <td>3.857143</td>\n", + " <td>4.285714</td>\n", + " <td>1.428571</td>\n", + " <td>1.000000</td>\n", + " <td>967.443556</td>\n", + " <td>28.146178</td>\n", + " <td>28.780804</td>\n", " </tr>\n", " <tr>\n", - " <th>2023-04-15 04:00:00</th>\n", - " <td>63.844043</td>\n", - " <td>13.161290</td>\n", - " <td>28.225806</td>\n", - " <td>29.645161</td>\n", - " <td>19.064516</td>\n", - " <td>32.000000</td>\n", - " <td>12.516129</td>\n", - " <td>6.000000</td>\n", - " <td>19.322581</td>\n", - " <td>27.935484</td>\n", + " <th>2</th>\n", + " <td>2023-08-16 19:00:00</td>\n", + " <td>42.114675</td>\n", + " <td>44.522121</td>\n", + " <td>41.428571</td>\n", + " <td>8.428571</td>\n", + " <td>8.428571</td>\n", + " <td>7.571429</td>\n", + " <td>7.571429</td>\n", + " <td>5.428571</td>\n", + " <td>5.428571</td>\n", " <td>...</td>\n", - " <td>3189.290323</td>\n", - " <td>3.727273</td>\n", - " <td>4.307692</td>\n", - " <td>32.000000</td>\n", - " <td>30.096774</td>\n", - " <td>29.129032</td>\n", - " <td>179.387097</td>\n", - " <td>207.516129</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.000000</td>\n", + " <td>40.071429</td>\n", + " <td>39.571429</td>\n", + " <td>5.142857</td>\n", + " <td>3.000000</td>\n", + " <td>1.285714</td>\n", + " <td>0.571429</td>\n", + " <td>966.713915</td>\n", + " <td>28.195374</td>\n", + " <td>28.835164</td>\n", " </tr>\n", " <tr>\n", - " <th>2023-04-15 05:00:00</th>\n", - " <td>63.372091</td>\n", - " <td>12.800000</td>\n", - " <td>28.466667</td>\n", - " <td>28.500000</td>\n", - " <td>19.333333</td>\n", - " <td>30.600000</td>\n", - " <td>13.931034</td>\n", - " <td>6.000000</td>\n", - " <td>19.500000</td>\n", - " <td>28.200000</td>\n", + " <th>3</th>\n", + " <td>2023-08-16 20:00:00</td>\n", + " <td>38.560408</td>\n", + " <td>40.723931</td>\n", + " <td>41.857143</td>\n", + " <td>5.857143</td>\n", + " <td>5.857143</td>\n", + " <td>5.428571</td>\n", + " <td>5.428571</td>\n", + " <td>3.714286</td>\n", + " <td>3.714286</td>\n", " <td>...</td>\n", - " <td>3188.700000</td>\n", - " <td>3.920000</td>\n", - " <td>4.260870</td>\n", - " <td>30.600000</td>\n", - " <td>30.733333</td>\n", - " <td>28.233333</td>\n", - " <td>177.866667</td>\n", - " <td>193.600000</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.285714</td>\n", + " <td>26.571429</td>\n", + " <td>21.428571</td>\n", + " <td>3.428571</td>\n", + " <td>2.285714</td>\n", + " <td>0.857143</td>\n", + " <td>0.857143</td>\n", + " <td>966.744908</td>\n", + " <td>28.157669</td>\n", + " <td>28.842603</td>\n", " </tr>\n", " <tr>\n", - " <th>2023-04-15 06:00:00</th>\n", - " <td>62.761833</td>\n", - " <td>11.290323</td>\n", - " <td>26.677419</td>\n", - " <td>26.225806</td>\n", - " <td>17.903226</td>\n", - " <td>29.064516</td>\n", - " <td>12.838710</td>\n", - " <td>6.000000</td>\n", - " <td>18.000000</td>\n", - " <td>26.483871</td>\n", + " <th>4</th>\n", + " <td>2023-08-16 21:00:00</td>\n", + " <td>38.032839</td>\n", + " <td>40.042586</td>\n", + " <td>42.000000</td>\n", + " <td>6.045455</td>\n", + " <td>6.045455</td>\n", + " <td>5.363636</td>\n", + " <td>5.363636</td>\n", + " <td>4.181818</td>\n", + " <td>4.181818</td>\n", " <td>...</td>\n", - " <td>2998.354839</td>\n", - " <td>3.833333</td>\n", - " <td>4.962963</td>\n", - " <td>29.064516</td>\n", - " <td>28.935484</td>\n", - " <td>26.225806</td>\n", - " <td>168.903226</td>\n", - " <td>174.612903</td>\n", - " <td>None</td>\n", - " <td>None</td>\n", + " <td>0.363636</td>\n", + " <td>26.000000</td>\n", + " <td>22.818182</td>\n", + " <td>3.454545</td>\n", + " <td>2.545455</td>\n", + " <td>1.000000</td>\n", + " <td>0.818182</td>\n", + " <td>982.620261</td>\n", + " <td>27.273129</td>\n", + " <td>27.939668</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", - "<p>5 rows × 32 columns</p>\n", + "<p>5 rows × 31 columns</p>\n", "</div>" ], "text/plain": [ - " humedad2 pm_n_2_5_2 pm25_1 pm25_2 pm1_1_AE \\\n", - "2023-04-15 02:00:00 62.688538 15.666667 26.466667 27.066667 18.133333 \n", - "2023-04-15 03:00:00 63.074693 12.656250 29.062500 29.031250 19.343750 \n", - "2023-04-15 04:00:00 63.844043 13.161290 28.225806 29.645161 19.064516 \n", - "2023-04-15 05:00:00 63.372091 12.800000 28.466667 28.500000 19.333333 \n", - "2023-04-15 06:00:00 62.761833 11.290323 26.677419 26.225806 17.903226 \n", + " ts humedad humedad2 iluminancia pm10_1 \\\n", + "0 2023-08-16 17:00:00 38.897320 41.228504 6.000000 13.700000 \n", + "1 2023-08-16 18:00:00 41.789214 44.269801 39.071429 10.000000 \n", + "2 2023-08-16 19:00:00 42.114675 44.522121 41.428571 8.428571 \n", + "3 2023-08-16 20:00:00 38.560408 40.723931 41.857143 5.857143 \n", + "4 2023-08-16 21:00:00 38.032839 40.042586 42.000000 6.045455 \n", "\n", - " pm10_2_AE pm_n_2_5_1 iluminancia pm1_1 pm25_1_AE \\\n", - "2023-04-15 02:00:00 29.600000 13.066667 5.933333 18.133333 26.400000 \n", - "2023-04-15 03:00:00 31.468750 15.218750 6.000000 19.593750 28.812500 \n", - "2023-04-15 04:00:00 32.000000 12.516129 6.000000 19.322581 27.935484 \n", - "2023-04-15 05:00:00 30.600000 13.931034 6.000000 19.500000 28.200000 \n", - "2023-04-15 06:00:00 29.064516 12.838710 6.000000 18.000000 26.483871 \n", + " pm10_1_AE pm10_2 pm10_2_AE pm1_1 pm1_1_AE ... pm_n_10_0_2 \\\n", + "0 13.700000 14.200000 14.200000 10.000000 10.000000 ... 0.200000 \n", + "1 10.000000 10.285714 10.285714 7.071429 7.071429 ... 0.142857 \n", + "2 8.428571 7.571429 7.571429 5.428571 5.428571 ... 0.000000 \n", + "3 5.857143 5.428571 5.428571 3.714286 3.714286 ... 0.285714 \n", + "4 6.045455 5.363636 5.363636 4.181818 4.181818 ... 0.363636 \n", "\n", - " ... pm_n_0_3_1 pm_n_5_0_1 pm_n_5_0_2 pm10_2 \\\n", - "2023-04-15 02:00:00 ... 2955.800000 4.800000 3.857143 29.600000 \n", - "2023-04-15 03:00:00 ... 3255.375000 4.181818 4.640000 31.468750 \n", - "2023-04-15 04:00:00 ... 3189.290323 3.727273 4.307692 32.000000 \n", - "2023-04-15 05:00:00 ... 3188.700000 3.920000 4.260870 30.600000 \n", - "2023-04-15 06:00:00 ... 2998.354839 3.833333 4.962963 29.064516 \n", + " pm_n_1_0_1 pm_n_1_0_2 pm_n_2_5_1 pm_n_2_5_2 pm_n_5_0_1 pm_n_5_0_2 \\\n", + "0 66.700000 71.300000 5.000000 7.400000 1.800000 2.000000 \n", + "1 49.785714 54.071429 3.857143 4.285714 1.428571 1.000000 \n", + "2 40.071429 39.571429 5.142857 3.000000 1.285714 0.571429 \n", + "3 26.571429 21.428571 3.428571 2.285714 0.857143 0.857143 \n", + "4 26.000000 22.818182 3.454545 2.545455 1.000000 0.818182 \n", "\n", - " pm10_1 pm25_2_AE pm_n_1_0_1 pm_n_1_0_2 longitud \\\n", - "2023-04-15 02:00:00 28.666667 26.866667 165.866667 185.866667 None \n", - "2023-04-15 03:00:00 31.343750 28.781250 182.687500 194.218750 None \n", - "2023-04-15 04:00:00 30.096774 29.129032 179.387097 207.516129 None \n", - "2023-04-15 05:00:00 30.733333 28.233333 177.866667 193.600000 None \n", - "2023-04-15 06:00:00 28.935484 26.225806 168.903226 174.612903 None \n", + " presion temperatura temperatura2 \n", + "0 969.452265 28.068901 28.687991 \n", + "1 967.443556 28.146178 28.780804 \n", + "2 966.713915 28.195374 28.835164 \n", + "3 966.744908 28.157669 28.842603 \n", + "4 982.620261 27.273129 27.939668 \n", "\n", - " latitud \n", - "2023-04-15 02:00:00 None \n", - "2023-04-15 03:00:00 None \n", - "2023-04-15 04:00:00 None \n", - "2023-04-15 05:00:00 None \n", - "2023-04-15 06:00:00 None \n", - "\n", - "[5 rows x 32 columns]" + "[5 rows x 31 columns]" ] }, - "execution_count": 7, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -471,7 +464,9 @@ { "cell_type": "code", "execution_count": 11, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { @@ -556,7 +551,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.7" + "version": "3.11.3" } }, "nbformat": 4, -- GitLab