{"id":8213,"date":"2022-08-05T21:00:38","date_gmt":"2022-08-06T02:00:38","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/analisisnumerico\/?p=8213"},"modified":"2026-08-19T07:08:20","modified_gmt":"2026-08-19T12:08:20","slug":"regresion-polinomio-gradom-ejercicio-temperatura-dia","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u08\/regresion-polinomio-gradom-ejercicio-temperatura-dia\/","title":{"rendered":"8.3.1 Regresi\u00f3n polinomial de grado m - Ejercicio Temperatura para un d\u00eda con Python"},"content":{"rendered":"\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>De una estaci\u00f3n meteorol\u00f3gica se obtiene un <strong>archivo.csv<\/strong> con los datos de los sensores disponibles durante una semana.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/www.dropbox.com\/scl\/fi\/u0uzkwlsn42g5rs3drso3\/2021_10_EstMeteorologica.csv?rlkey=10bsv51iin8kdgq0d8zwud3ia&amp;st=th9w9wqw&amp;dl=0\">2021OctubreEstMetorologica.csv<\/a><\/p>\n\n\n\n<p><br>Para analizar el comportamiento de la variable de temperatura, se requiere disponer de un modelo polinomial que describa la temperatura a lo largo del d\u00eda, para un solo d\u00eda.<\/p>\n\n\n\n<p>Como valores de variable independiente utilice un equivalente num\u00e9rico decimal de la hora, minuto y segundo.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"450\" height=\"352\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2022\/08\/EstacionMeteorologica01.png\" alt=\"Estaci\u00f3n Meteorol\u00f3gica 01\" class=\"wp-image-13928\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1077\" height=\"617\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2022\/08\/RegresionPolinomial2021101.png\" alt=\"Regresi\u00f3n Polin\u00f3mica 2021101\" class=\"wp-image-13930\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>a. Realice la lectura del archivo, puede usar las instrucciones descritas en el&nbsp; enlace: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ccpg1001\/archivos-csv-ejercicio-con-grafica-de-temperatura-y-humedad\/\">Archivos.csv con Python \u2013 Ejercicio con gr\u00e1fica de temperatura y Humedad<\/a> (CCPG1001: Fundamentos de programaci\u00f3n)<\/p>\n\n\n\n<p>b. Seleccione los datos del d\u00eda 1 del mes para realizar la gr\u00e1fica, y convierta tiempo en equivalente decimal.<\/p>\n\n\n\n<p>c. Mediante pruebas, determine el grado del polinomio m\u00e1s apropiado para minimizar los errores.<\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Desarrollo<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">literal a<\/h3>\n\n\n\n<p>Se empieza con las instrucciones del enlace dadas a\u00f1adiendo los par\u00e1metros de entrada como <code>undia = 0<\/code> y grado del polinomio como <code>gradom = 2<\/code> como el ejercicio anterior.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">literal b<\/h3>\n\n\n\n<p>En el modelo polinomial, el eje x es un n\u00famero decimal, por lo que los valores de hora:minuto:segundo se convierte a un valor decimal. Para el valor decimal de xi se usa la unidad de horas y las fracciones proporcionales de cada minuto y segundo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">literal c<\/h3>\n\n\n\n<p>Se inicia con el valor de <code>gradom = 2<\/code>, observando el resultado se puede ir incrementando el grado del polinomio observando los par\u00e1metros de error y coeficiente de determinaci\u00f3n hasta cumplir con la tolerancia esperada seg\u00fan la aplicaci\u00f3n del ejercicio.<\/p>\n\n\n\n<p>Resultados obtenidos:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>columnas en tabla: \nIndex(&#091;'No', 'Date', 'Time', 'ColdJunc0', 'PowerVolt', 'PowerKind', 'WS(ave)',\n       'WD(ave)', 'WS(max)', 'WD(most)', 'WS(inst_m)', 'WD(inst_m)',\n       'Max_time', 'Solar_rad', 'TEMP', 'Humidity', 'Rainfall', 'Bar_press.',\n       'Soil_temp', 'fecha', 'horadec'],\n      dtype='object')\nymedia =  25.036805555555553\n f = -6.57404678141012e-6*x**6 + 0.00052869201494877*x**5 - 0.0152875582352169*x**4 + 0.184200388015364*x**3 - 0.761164009032398*x**2 + 0.393278389794015*x + 22.1142936414255\ncoef_determinacion r2 =  0.9860621424061621\n98.61% de los datos\n     se describe con el modelo<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo en Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# lecturas archivo.csv de estaci\u00f3n meteorol\u00f3gica\nimport numpy as np\nimport sympy as sym\nimport pandas as pd\n\n# INGRESO\nnarchivo = &quot;2021OctubreEstMetorologica.csv&quot;\nsensor = 'TEMP'\nundia  = 2 # dia a revisar\ngradom = 6 # grado del polinomio\n\n# PROCEDIMIENTO\ntabla = pd.read_csv(narchivo, sep=';',decimal=',')\nn_tabla = len(tabla)\n\n# fechas concatenando columnas de texto\ntabla&#x5B;'fecha'] = tabla&#x5B;'Date']+' '+tabla&#x5B;'Time']\n\n# convierte a datetime\nfechaformato = &quot;%d\/%m\/%Y %H:%M:%S&quot;\ntabla&#x5B;'fecha'] = pd.to_datetime(tabla&#x5B;'fecha'],\n                                format=fechaformato)\n# serie por dia, busca indices\ndiaIndice = &#x5B;0] # indice inicial\nfor i in range(1,n_tabla-1,1):\n    i0_fecha = tabla&#x5B;'fecha']&#x5B;i-1]\n    i1_fecha = tabla&#x5B;'fecha']&#x5B;i]\n    if i0_fecha.day != i1_fecha.day:\n        diaIndice.append(i)\ndiaIndice.append(len(tabla)-1) # indice final\nm = len(diaIndice)\n\n# horas decimales en un d\u00eda\nhoradia = tabla&#x5B;'fecha'].dt.hour\nhoramin = tabla&#x5B;'fecha'].dt.minute\nhoraseg = tabla&#x5B;'fecha'].dt.second\ntabla&#x5B;'horadec'] = horadia + horamin\/60 + horaseg\/3600\n\n# PROCEDIMIENTO Regresi\u00f3n Polinomial grado m\nm = gradom\n# Selecciona dia\ni0 = diaIndice&#x5B;undia]\ni1 = diaIndice&#x5B;undia+1]\n# valores a usar en regresi\u00f3n\nxi = tabla&#x5B;'horadec']&#x5B;i0:i1]\nyi = tabla&#x5B;sensor]&#x5B;i0:i1]\nn  = len(xi)\n\n# llenar matriz a y vector B\nk = m + 1\nA = np.zeros(shape=(k,k),dtype=float)\nB = np.zeros(k,dtype=float)\nfor i in range(0,k,1):\n    for j in range(0,i+1,1):\n        coeficiente = np.sum(xi**(i+j))\n        A&#x5B;i,j] = coeficiente\n        A&#x5B;j,i] = coeficiente\n    B&#x5B;i] = np.sum(yi*(xi**i))\n\n# coeficientes, resuelve sistema de ecuaciones\nC = np.linalg.solve(A,B)\n\n# polinomio\nx = sym.Symbol('x')\nf = 0\nfetiq = 0\nfor i in range(0,k,1):\n    f = f + C&#x5B;i]*(x**i)\n    fetiq = fetiq + np.around(C&#x5B;i],4)*(x**i)\n\nfx = sym.lambdify(x,f)\nfi = fx(xi)\n\n# errores\nym = np.mean(yi)\nxm = np.mean(xi)\nerrado = fi - yi\n\nsr = np.sum((yi-fi)**2)\nsyx = np.sqrt(sr\/(n-(m+1)))\nst = np.sum((yi-ym)**2)\n\n# coeficiente de determinacion\nr2 = (st-sr)\/st\nr2_porcentaje = np.around(r2*100,2)\n\n# SALIDA\nprint(' columnas en tabla: ')\nprint(tabla.keys())\nprint('ymedia = ',ym)\nprint(' f =',f)\nprint('coef_determinacion r2 = ',r2)\nprint(str(r2_porcentaje)+'% de los datos')\nprint('     se describe con el modelo')\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Gr\u00e1fica con Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA\nimport matplotlib.pyplot as plt\nfrom matplotlib.dates import DateFormatter, DayLocator\n\nplt.plot(xi,yi,'o',label='(xi,yi)')\nplt.plot(xi,fi, color='orange', label=fetiq)\n\n# lineas de error\nfor i in range(i0,i1,1):\n    y0 = np.min(&#x5B;yi&#x5B;i],fi&#x5B;i]])\n    y1 = np.max(&#x5B;yi&#x5B;i],fi&#x5B;i]])\n    plt.vlines(xi&#x5B;i],y0,y1, color='red',\n               linestyle = 'dotted')\n\nplt.xlabel('xi - hora en decimal')\nplt.ylabel('yi - '+ sensor)\nplt.legend()\netiq_titulo = sensor+ ' dia '+str(undia)\nplt.title(etiq_titulo+': Regresion polinomial grado '+str(m))\nplt.show()\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Tarea<\/h2>\n\n\n\n<p>Determinar el polinomio de regresi\u00f3n para los d\u00edas 3 y 5, y repetir el proceso para el sensor de Humedad ('Humidity')<\/p>\n\n\n\n<p><strong>Referencia<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/ccpg1001\/archivos-csv-ejercicio-con-grafica-de-temperatura-y-humedad\/\">Archivos.csv con Python \u2013 Ejercicio con gr\u00e1fica de temperatura y Humedad<\/a> en Fundamentos de Programaci\u00f3n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>De una estaci\u00f3n meteorol\u00f3gica se obtiene un archivo.csv con los datos de los sensores disponibles durante una semana. 2021OctubreEstMetorologica.csv Para analizar el comportamiento de la variable de temperatura, se requiere disponer de un modelo polinomial que describa la temperatura a lo largo del d\u00eda, para un solo d\u00eda. Como valores de variable independiente utilice un [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-mn-unidades","format":"standard","meta":{"footnotes":""},"categories":[42],"tags":[],"class_list":["post-8213","post","type-post","status-publish","format-standard","hentry","category-mn-u08"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/8213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=8213"}],"version-history":[{"count":6,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/8213\/revisions"}],"predecessor-version":[{"id":25481,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/8213\/revisions\/25481"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=8213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=8213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=8213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}