{"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-01-22T05:44:27","modified_gmt":"2026-01-22T10:44:27","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<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\/s\/ivldz1f9a02oz2z\/2021OctubreEstMetorologica.csv?dl=0\">2021OctubreEstMetorologica.csv<\/a><\/p>\n\n\n\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\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\n\n\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\n\n\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\n\n\n<h3 class=\"wp-block-heading\">Desarrollo<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">literal a<\/h4>\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<h4 class=\"wp-block-heading\">literal b<\/h4>\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<h4 class=\"wp-block-heading\">literal c<\/h4>\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 segun la aplicaci\u00f3n del ejercicio.<\/p>\n\n\n\n<p>Resultados obtenidos:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; gutter: false; title: ; notranslate\" title=\"\">\ncolumnas en tabla: \nIndex(&#x5B;'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\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Instrucciones en Python<\/h2>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><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\nimport matplotlib.pyplot as plt\nfrom matplotlib.dates import DateFormatter, DayLocator\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\n# grafica\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":2,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/8213\/revisions"}],"predecessor-version":[{"id":13931,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/8213\/revisions\/13931"}],"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}]}}