{"id":2950,"date":"2021-01-14T12:35:12","date_gmt":"2021-01-14T17:35:12","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=2950"},"modified":"2026-08-04T21:33:11","modified_gmt":"2026-08-05T02:33:11","slug":"rssi-vs-distancia-linealiza-un-intervalo","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/rssi-vs-distancia-linealiza-un-intervalo\/","title":{"rendered":"4.1 Rssi vs Distancia - Linealiza UN intervalo"},"content":{"rendered":"\n<p><strong>Referencia<\/strong>: Chapra 17.1 p 466. Burden 8.1 p498, <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u08\/minimos-cuadrados-con-python\/\">M\u00ednimos cuadrados en M\u00e9todos num\u00e9ricos<\/a><\/p>\n\n\n\n<p>La linealizaci\u00f3n de curvas con M\u00e9todo de m\u00ednimos cuadrados se realiza usando las funciones de Numpy: <a href=\"https:\/\/numpy.org\/doc\/stable\/reference\/generated\/numpy.linalg.lstsq.html\">np.linalg.lstsq()<\/a><\/p>\n\n\n\n<p>Para el an\u00e1lisis de una baliza, 'gtwFIEC', se obtienen los datos desde el archivo '<a href=\"https:\/\/drive.google.com\/file\/d\/1Jwks868oP4CnX-JD3_oIFDjAM0CdHrZv\/view?usp=sharing\">resumen_RssiUbica01<\/a>' obtenido en:<\/p>\n\n\n\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/integrar-las-tablas-de-rssi-y-coordenadas-de-los-puntos\/\">Integrar las tablas de Rssi y coordenadas de los puntos<\/a><\/p>\n\n\n\n<p>entregando como resultado un archivo con las ecuaciones obtenidas: 'resumen_ecuacionSimple05.json'<\/p>\n\n\n\n<p>La selecci\u00f3n de la baliza&nbsp; se realiza con un diccionario indicando la acci\u00f3n de <strong>'analizar'<\/strong> como verdadero o falso (1,0), entre otros par\u00e1metros.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code> <span style=\"color: #008000\">'gtwFIEC'<\/span>:{<span style=\"color: #008000\">'analizar'<\/span>  : 1,\n            <span style=\"color: #008000\">'atipico_std'<\/span> : 1,\n            <span style=\"color: #008000\">'grp'<\/span> : &#091;<span style=\"color: #008000\">'FIEC'<\/span>,<span style=\"color: #008000\">'FCNM'<\/span>],\n            <span style=\"color: #008000\">'tip'<\/span> : &#091;<span style=\"color: #008000\">'punto'<\/span>],\n            <span style=\"color: #008000\">'LOS'<\/span> : &#091;1,0]}<\/code><\/pre>\n\n\n\n<p>Los valores at\u00edpicos se los discrimina a partir de la <a href=\"https:\/\/es.wikipedia.org\/wiki\/Desviaci%C3%B3n_t%C3%ADpica\">desviaci\u00f3n est\u00e1ndar<\/a>, indicando el n\u00famero de veces que se la considera como medida de dispersi\u00f3n.<\/p>\n\n\n\n<p>Los puntos identificados en cada sector se seleccionan en '<strong>grp<\/strong>': FIEC, FCNM, RECT.<\/p>\n\n\n\n<p>El tipo de medici\u00f3n tomada, '<strong>tip<\/strong>', se identifica por: punto, 1m, gtw, dispositivo.<\/p>\n\n\n\n<p>Un par\u00e1metro auxiliar es 'LOS', que indica los puntos seleccionados con L\u00ednea de vista (1) y sin linea de vista (0). Para incluir todos de debe ingresar [1,0]. Este par\u00e1metro se puede modificar en el archivo de entrada: arch_medidaubica.<\/p>\n\n\n\n<p>Los datos de cada eje se seleccionan mediante la funci\u00f3n <strong>pares_usar<\/strong>(tabla, baliza, analiza, unabaliza, medida, modo) que entrega como resultado los arreglos de <strong>pares<\/strong> ordenados y las etiquetas con los nombres, par_etiqueta).<\/p>\n\n\n\n<p>La linealizaci\u00f3n se realiza con el m\u00e9todo de los m\u00ednimos cuadrados, con lo que se establece el |error| promedio y desviaci\u00f3n est\u00e1ndar.<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |error| = |yi - f(xi)| <\/span>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> |error_{medio}| = \\frac{1}{n}\\sum|yi - f(xi)| <\/span>\n\n\n\n<h3 class=\"wp-block-heading\">Procedimiento aplicado<\/h3>\n\n\n\n<p>Para el an\u00e1lisis primero se consideran todos los puntos disponibles para obtener la primera ecuaci\u00f3n, mostrada en el ejemplo con la l\u00ednea azul.<\/p>\n\n\n\n<p>Con \u00e9sto es posible determinar un error de estimaci\u00f3n, para luego proceder a discriminar los puntos at\u00edpicos.<\/p>\n\n\n\n<p>Se realiza una nueva estimaci\u00f3n de linealizaci\u00f3n habiendo discriminado los puntos at\u00edpicos y se observa el resultado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resultados para baliza: gtwFIEC<\/h2>\n\n\n\n<p>El resultado del algoritmo se presenta como gr\u00e1fica, en pantalla y un archivo con los datos de las f\u00f3rmulas.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1083\" height=\"616\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01.png\" alt=\"\" class=\"wp-image-2960\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01.png 1083w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01-300x171.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01-768x437.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFIEC01-1024x582.png 1024w\" sizes=\"auto, (max-width: 1083px) 100vw, 1083px\" \/><\/a><\/figure>\n\n\n\n<p>los resultados se pueden observar en lo mostrado.:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>baliza:  gtwFIEC\nPuntos usados: todos\n$ -10(4.908).log_{10}(d)+(1.406)$\n|error| promedio:  4.84  , std: 5.56\nPuntos usados: NoAtipico\n$ -10(5.12).log_{10}(d)+(6.714)$\n|error| promedio:  2.98  , std: 3.31\n&gt;&gt;&gt; <\/code><\/pre>\n\n\n\n<p>Se observa que los valores fuera de la banda de valores con una desviaci\u00f3n est\u00e1ndar (\u03c3) se muestran distribuidos en tres grupos: dos grupos a la izquierda y derecha de la gr\u00e1fica por debajo de la banda y un grupo en el centro por sobre la banda.<\/p>\n\n\n\n<p>Se considera explorar la divisi\u00f3n del intervalo en dos, puesto que existen dos entornos: uno principalmente conformado con vegetaci\u00f3n y otro con edificaciones.<\/p>\n\n\n\n<p>los resultados que se van al archivo, incluyen todos los decimales:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>exportar resultados :\n{'todos': {'intervalox': &#091;52.543, 397.148], \n      'intervaloy': &#091;-129.132183908046, -86.98969072164948], \n      'alpha': 4.907571379870146, 'beta': 1.4062384027235748, \n      'error_medio': 4.840153103044936, 'error_std': 5.562835152792785, \n      'eq_latex': '$ -10(4.908).log_{10}(d)+(1.406)<\/code><\/pre>\n\n\n\n<p>Para revisar la situaci\u00f3n se presentan los resultados con otra baliza.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Baliza: gtwFCNM<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1086\" height=\"617\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01.png\" alt=\"\" class=\"wp-image-2962\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01.png 1086w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01-300x170.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01-768x436.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwFCNM01-1024x582.png 1024w\" sizes=\"auto, (max-width: 1086px) 100vw, 1086px\" \/><\/a><\/figure>\n\n\n\n<p>Resultados del algoritmo.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>baliza:  gtwFCNM\nPuntos usados: todos\n$ -10(5.403).log_{10}(d)+(8.423)$\n|error| promedio:  4.59  , std: 5.48\nPuntos usados: NoAtipico\n$ -10(5.574).log_{10}(d)+(10.758)$\n|error| promedio:  2.31  , std: 2.79<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Baliza: gtwRECT<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1083\" height=\"616\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01.png\" alt=\"\" class=\"wp-image-2964\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01.png 1083w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01-300x171.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01-768x437.png 768w, https:\/\/blog.espol.edu.ec\/girni\/files\/2021\/01\/Rss_distanciaGtwRECT01-1024x582.png 1024w\" sizes=\"auto, (max-width: 1083px) 100vw, 1083px\" \/><\/a><\/figure>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>baliza:  gtwRECT\nPuntos usados: todos\n$ -10(4.89).log_{10}(d)+(8.541)$\n|error| promedio:  2.9  , std: 3.73\nPuntos usados: NoAtipico\n$ -10(4.587).log_{10}(d)+(0.326)$\n|error| promedio:  1.41  , std: 1.72\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">Algoritmo en Python<\/h2>\n\n\n\n<p>El algoritmo realiza el proceso de datos para cada baliza usando los datos del archivo \"resumen_rssiUbica01.txt\", que el el resultado del proceso realizado en <a href=\"http:\/\/blog.espol.edu.ec\/girni\/integrar-las-tablas-de-rssi-y-coordenadas-de-los-puntos\/\">Integrar las tablas de Rssi y coordenadas de los puntos<\/a><\/p>\n\n\n\n<p>Los resultados del algoritmo se almacenan en el archivo \"arch_ecuaciones\".<\/p>\n\n\n\n<p>Los par\u00e1metros para el an\u00e1lisis se incorporan en el diccionario \"analiza\". Los par\u00e1metros se describen al inicio de la p\u00e1gina.<\/p>\n\n\n\n<p>Como el proceso de linealizaci\u00f3n se reutiliza, se lo incorpora como parte de la librer\u00eda <a href=\"http:\/\/blog.espol.edu.ec\/girni\/funciones-girni_lora_libreria\/\">girni_lora_libreria<\/a>, sin embargo la funci\u00f3n se describe en detalle en&nbsp;<a href=\"http:\/\/blog.espol.edu.ec\/girni\/rssidistancia-linealizacion-funcion-python\/\">Rssi(distancia) Linealizaci\u00f3n - funci\u00f3n Python<\/a> .<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Procedimiento<\/h2>\n\n\n\n<p>Los datos se leen desde el archivo y se incorporan a una estructura de datos en Pandas.<\/p>\n\n\n\n<p>Para cada baliza se determina si se ha indicado 'analizar', con lo que se seleccionan los pares ordenados y etiquetas a usar mediante la funci\u00f3n girni.pares_usar().<\/p>\n\n\n\n<p>Con los datos seleccionados, se aplica m\u00ednimos cuadrados\u00a0 y se obtienen los errores mediante la funci\u00f3n girni.linealiza_lstsq(). Mediante el criterio de desviaci\u00f3n est\u00e1ndar se discriminan los datos at\u00edpicos y se vuelve a evaluar los datos <strong><em>sin at\u00edpicos<\/em><\/strong>, entregando el resultado mediante archivos y gr\u00e1ficas.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# LoRa-Multipunto, Rssi vs distancia\n# linealizaci\u00f3n Rssi vs log10(distancia)\n# por m\u00ednimos cuadrados, Graficas 2D y 3D\n# Girni 2020-10-07 propuesta: edelros@espol.edu.ec\n\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\n\nimport girni_lora_libreria as girni\n\n# INGRESO\n# archivos de entrada\nmodo = 'rx'\nmedida = 'rssi'\narch_medidaubica = 'resumen_rssiUbica01.txt'\n\n# archivos de salida\narch_ecuaciones  = 'resumen_ecuacionSimple05.json'\n\nanaliza = {'gtwRECT':{'analizar'  : 1,\n                      'atipico_std' : 1,\n                      'grp' : &#x5B;'FIEC','RECT'],\n                      'tip' : &#x5B;'punto'],\n                      'LOS' : &#x5B;1,0]},\n           'gtwFIEC':{'analizar'  : 1,\n                      'atipico_std' : 1,\n                      'grp' : &#x5B;'FIEC','FCNM'],\n                      'tip' : &#x5B;'punto'],\n                      'LOS' : &#x5B;1,0]},\n           'gtwFCNM':{'analizar'   : 1,\n                      'atipico_std' : 1,\n                      'grp' : &#x5B;'FIEC','FCNM'],\n                      'tip' : &#x5B;'punto'],\n                      'LOS' : &#x5B;1,0]}\n           }\n\nbaliza = {'d1':'gtwRECT',\n          'd2':'gtwFIEC',\n          'd3':'gtwFCNM'}\n\n# Par\u00e1metros de grafica\ntipograf   = '2D'  # '2D','3D'\nescala     = 'log' # 'normal','log'\nescalabase = 10    # 10, np.exp()\n\n# PROCEDIMIENTO\n# Resultados de an\u00e1lisis\necuacion  = {}\neq_graf = {}\n\n# leer datos\ntabla = pd.read_csv(arch_medidaubica, index_col='etiqueta')\ntabla = pd.DataFrame(tabla)\n\n# Analizar datos hacia una baliza\nfor unabaliza in analiza:\n\n    # Par\u00e1metros \n    analizar = analiza&#x5B;unabaliza]&#x5B;'analizar']\n    atipico_std = analiza&#x5B;unabaliza]&#x5B;'atipico_std']\n\n    if analizar:\n        ecuacion&#x5B;unabaliza] ={}\n        eq_graf&#x5B;unabaliza] = {}\n        # pares a usar\n        &#x5B;pares,par_etiqueta] = girni.pares_usar(tabla,baliza,\n                                                analiza,unabaliza,\n                                                medida,modo)\n        # analiza puntos para m\u00ednimos cuadrados\n        xi = pares&#x5B;:,0]\n        yi = pares&#x5B;:,1]\n        \n        ecuacion0 = girni.linealiza_lstsq(xi,yi)\n\n        fdist0 = ecuacion0&#x5B;'eq_lambda']\n        yi0  = fdist0(xi)\n\n        # Selecciona atipicos\n        dyi0std = ecuacion0&#x5B;'error_std']\n        dyi0 = yi - yi0\n        atipicos = np.abs(dyi0) &gt;= dyi0std*atipico_std\n        xi0_e = xi&#x5B;atipicos]\n        yi0_e = yi&#x5B;atipicos]\n        etiq0_e = par_etiqueta&#x5B;atipicos]\n\n        # datos sin atipicos ----------\n        atipicoNo = np.abs(dyi0) &lt;= dyi0std*atipico_std\n        xi1 = xi&#x5B;atipicoNo]\n        yi1 = yi&#x5B;atipicoNo]\n        etiq1 = par_etiqueta&#x5B;atipicoNo]\n\n        ecuacion1 = girni.linealiza_lstsq(xi1,yi1)\n\n        fdist1 = ecuacion1&#x5B;'eq_lambda']\n        yi1  = fdist1(xi)\n\n        # para exportar\n        ecuacion&#x5B;unabaliza] = {'todos': ecuacion0,\n                               'NoAtipico': ecuacion1\n                               }\n        \n        eq_graf&#x5B;unabaliza]  = {'puntos': &#x5B;xi,yi],\n                               'todos' : yi0,\n                               'atipicos':&#x5B;xi0_e,yi0_e],\n                               'atip_etiq': etiq0_e,\n                               'NoAtipico':yi1\n                               }\n\n# SALIDA\nfor unabaliza in ecuacion:\n    print('baliza: ',unabaliza)\n    for unaecuacion  in ecuacion&#x5B;unabaliza]:\n        error_medio = ecuacion&#x5B;unabaliza]&#x5B;unaecuacion]&#x5B;'error_medio']\n        error_std = ecuacion&#x5B;unabaliza]&#x5B;unaecuacion]&#x5B;'error_std']\n        print('Puntos usados:', unaecuacion)\n        print(ecuacion&#x5B;unabaliza]&#x5B;unaecuacion]&#x5B;'eq_latex'])\n        print('|error| promedio: ',np.round(error_medio,2),\n              ' , std:',np.round(error_std,2))\n\n    print('\\n',ecuacion&#x5B;unabaliza],'\\n')\n    print()\n\n# salida a archivo\necuacion = pd.DataFrame.from_dict(ecuacion)\necuacion.to_json(arch_ecuaciones)\n\n# GRAFICAR\n# Referencias para gr\u00e1fica\ngrupo   = &#x5B;'FIEC' ,'FCNM'  ,'RECT','CIRC']\ncolores = &#x5B;'green','orange','grey','magenta']\ntipo    = &#x5B;'punto','1m' ,'gtw','dispositivo']\nmarcas  = &#x5B;    'o','D'  ,'D'  ,'*' ]\n\nmostrargrpeti = &#x5B;'FIEC','FCNM','RECT']\nmostrartipeti = &#x5B;'1m','gtw']\n\nfor unabaliza in ecuacion:\n    figura,grafica = plt.subplots()\n    if escala == 'log':\n        grafica.set_xscale(escala,base=escalabase)\n\n    # todos los puntos\n    &#x5B;xi, yi] = eq_graf&#x5B;unabaliza]&#x5B;'puntos']\n    grafica.scatter(xi,yi,marker='.')\n    fdtxt = ecuacion&#x5B;unabaliza]&#x5B;'todos']&#x5B;'eq_latex']\n    \n    # linea con todos los puntos\n    yi0 = eq_graf&#x5B;unabaliza]&#x5B;'todos']\n    grafica.plot(xi,yi0,color='blue', label = fdtxt)\n    \n    &#x5B;xi0_e,yi0_e] = eq_graf&#x5B;unabaliza]&#x5B;'atipicos']\n    etiq0_e = eq_graf&#x5B;unabaliza]&#x5B;'atip_etiq']\n    \n    # cotas de error\n    atipico_std = analiza&#x5B;unabaliza]&#x5B;'atipico_std']\n    dyi0std = ecuacion&#x5B;unabaliza]&#x5B;'todos']&#x5B;'error_std']\n    \n    grafica.plot(xi,yi0 + dyi0std*atipico_std,\n                    color='blue',linestyle='dotted')\n    grafica.plot(xi,yi0 - dyi0std*atipico_std,\n                    color='blue',linestyle='dotted')\n    # atipicos\n    grafica.scatter(xi0_e,yi0_e, color='red')\n    # atipicos etiquetas\n    m = len(xi0_e)\n    for i in range(0,m,1):\n        grafica.annotate(etiq0_e&#x5B;i],\n                        (xi0_e&#x5B;i],yi0_e&#x5B;i]),)\n    \n    # linea Sin Atipicos\n    yi1 = eq_graf&#x5B;unabaliza]&#x5B;'NoAtipico']\n    fdtxt1 = ecuacion&#x5B;unabaliza]&#x5B;'NoAtipico']&#x5B;'eq_latex']\n    grafica.plot(xi,yi1, color='orange', label = fdtxt1)\n\n    # etiquetas y t\u00edtulos\n    grafica.legend()\n    grafica.set_ylabel(medida+'_'+modo)\n    grafica.set_xlabel('distancia')\n\n    untitulo = unabaliza+': '+medida+'_'+modo + ' vs distancia'\n    grafica.set_title(untitulo)\n    grafica.grid(True,linestyle='dotted',\n                 axis='x', which='both')\n    \n    plt.show()\n\n<\/pre><\/div>\n\n\n<pre class=\"wp-block-code alignwide\"><code>}, 'NoAtipico': {'intervalox': &#091;78.492, 397.148], 'intervaloy': &#091;-129.132183908046, -86.98969072164948], 'alpha': 5.119532447831607, 'beta': 6.713572849706863, 'error_medio': 2.9780010745912833, 'error_std': 3.312804227070313, 'eq_latex': '$ -10(5.12).log_{10}(d)+(6.714)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Referencia: Chapra 17.1 p 466. Burden 8.1 p498, M\u00ednimos cuadrados en M\u00e9todos num\u00e9ricos La linealizaci\u00f3n de curvas con M\u00e9todo de m\u00ednimos cuadrados se realiza usando las funciones de Numpy: np.linalg.lstsq() Para el an\u00e1lisis de una baliza, 'gtwFIEC', se obtienen los datos desde el archivo 'resumen_RssiUbica01' obtenido en: Integrar las tablas de Rssi y coordenadas de [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1463489],"tags":[20777],"class_list":["post-2950","post","type-post","status-publish","format-standard","hentry","category-lorawan-localizacion-rssi","tag-python"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/comments?post=2950"}],"version-history":[{"count":19,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2950\/revisions"}],"predecessor-version":[{"id":4847,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/2950\/revisions\/4847"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=2950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=2950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=2950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}