<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Foros Python - Visualización y análisis de datos]]></title>
		<link>https://foro.recursospython.com/</link>
		<description><![CDATA[Foros Python - https://foro.recursospython.com]]></description>
		<pubDate>Wed, 22 Apr 2026 12:16:42 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Validador CFDI]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1521</link>
			<pubDate>Tue, 18 Mar 2025 10:42:56 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1702">jlgarduzamx</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1521</guid>
			<description><![CDATA[Hola colegas, estoy desarrollando un pequeño sistema validador de CFDI, ya tengo el código que me lee el xml y me extrae datos, también me conecto a la página de SAT (Aquí en México).<br />
<br />
Pero tengo el error que no detecta el id "method":"css selector","selector":"[id="ctl00_MainContent_txtRFCEmisor"]", comparto el código que utilizo, igual y alguien le sirve.<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import xml.etree.ElementTree as ET<br />
from selenium import webdriver<br />
from selenium.webdriver.common.by import By<br />
from selenium.webdriver.chrome.service import Service<br />
from webdriver_manager.chrome import ChromeDriverManager<br />
import time<br />
<br />
def leer_datos_xml(ruta_xml):<br />
    try:<br />
        tree = ET.parse(ruta_xml)<br />
        root = tree.getroot()<br />
<br />
        # Espacio de nombres SAT (verifica en tu XML)<br />
        ns = {'cfdi': 'http://www.sat.gob.mx/cfd/4', 'tfd': 'http://www.sat.gob.mx/TimbreFiscalDigital'}<br />
<br />
        # Extraer datos clave<br />
        emisor = root.find(".//cfdi:Emisor", ns).attrib.get('Rfc', 'No encontrado')<br />
        receptor = root.find(".//cfdi:Receptor", ns).attrib.get('Rfc', 'No encontrado')<br />
        total = root.attrib.get('Total', '0.00')<br />
        uuid = root.find(".//tfd:TimbreFiscalDigital", ns).attrib.get('UUID', 'No encontrado')<br />
<br />
        return emisor, receptor, total, uuid<br />
<br />
    except Exception as e:<br />
        print(f"Error al leer el XML: {e}")<br />
        return None, None, None, None<br />
<br />
def validar_cfdi_sat(rfc_emisor, rfc_receptor, total, uuid):<br />
    url = "https://verificacfdi.facturaelectronica.sat.gob.mx/default.aspx"<br />
<br />
    params = {<br />
        'id': uuid,<br />
        're': rfc_emisor,<br />
        'rr': rfc_receptor,<br />
        'tt': f"{float(total):.6f}"<br />
    }<br />
<br />
    try:<br />
        ruta = r"C:&#92;chromedriver&#92;chromedriver.exe"<br />
        service = Service(ruta)<br />
        options = webdriver.ChromeOptions()<br />
        # options.add_argument("--headless")<br />
        driver = webdriver.Chrome(service=service, options=options)<br />
        driver.get(url)<br />
        driver.save_screenshot(r"validadorCFDI&#92;error.png")<br />
        # driver.quit<br />
<br />
        # Esperar que cargue la página<br />
        time.sleep(3)<br />
<br />
        # Llenar los campos<br />
        driver.find_element(By.ID, "ctl00_MainContent_txtRFCEmisor").send_keys(rfc_emisor)<br />
        driver.find_element(By.ID, "ctl00_MainContent_txtRFCReceptor").send_keys(rfc_receptor)<br />
        driver.find_element(By.ID, "ctl00_MainContent_txtUUID").send_keys(uuid)<br />
        driver.find_element(By.ID, "ctl00_MainContent_txtTotal").send_keys(f"{float(total):.6f}")<br />
<br />
        # Clic en el botón de consulta<br />
        driver.find_element(By.ID, "ctl00_MainContent_btnConsultar").click()<br />
<br />
        print(driver.page_source)<br />
<br />
        # Esperar la respuesta<br />
        time.sleep(5)<br />
<br />
        # Obtener el estado del CFDI<br />
        estado_element = driver.find_element(By.ID, "ctl00_MainContent_lblEstado")<br />
<br />
        if estado_element:<br />
            estado = estado_element.text.strip()<br />
            driver.quit()<br />
            return f"Estado del CFDI: {estado}"<br />
        else:<br />
            driver.quit()<br />
            return "No se pudo obtener el estado del CFDI."<br />
<br />
    except Exception as e:<br />
        return f"Error en la consulta: {e}"<br />
<br />
# ? Archivo XML de la factura<br />
archivo_xml = r"validadorCFDI&#92;OOTN8605082G3_FACCB7C.xml"<br />
<br />
# Leer datos del XML<br />
rfc_emisor, rfc_receptor, total, uuid = leer_datos_xml(archivo_xml)<br />
<br />
if rfc_emisor and rfc_receptor and total and uuid:<br />
    # Validar en el SAT<br />
    resultado = validar_cfdi_sat(rfc_emisor, rfc_receptor, total, uuid)<br />
    print(resultado)<br />
else:<br />
    print("No se pudieron extraer los datos del XML.")</code></div></div><br />
El error que me arroja es el siguiente:<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>DevTools listening on ws://127.0.0.1:63266/devtools/browser/c00d1670-621d-4c29-838e-fd84e69745c6<br />
Error en la consulta: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="ctl00_MainContent_txtRFCEmisor"]"}<br />
  (Session info: chrome=134.0.6998.89); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception<br />
Stacktrace:<br />
        GetHandleVerifier [0x00007FF7B78BFE45+26629]<br />
        (No symbol) [0x00007FF7B7826010]<br />
        (No symbol) [0x00007FF7B76B931A]<br />
        (No symbol) [0x00007FF7B770F8E7]<br />
        (No symbol) [0x00007FF7B770FB1C]<br />
        (No symbol) [0x00007FF7B77634A7]<br />
        (No symbol) [0x00007FF7B7737AEF]<br />
        (No symbol) [0x00007FF7B7760169]<br />
        (No symbol) [0x00007FF7B7737883]<br />
        (No symbol) [0x00007FF7B7700550]<br />
        (No symbol) [0x00007FF7B7701803]<br />
        GetHandleVerifier [0x00007FF7B7C172BD+3529853]<br />
        GetHandleVerifier [0x00007FF7B7C2DA22+3621858]<br />
        GetHandleVerifier [0x00007FF7B7C224D3+3575443]<br />
        GetHandleVerifier [0x00007FF7B798B77A+860474]<br />
        (No symbol) [0x00007FF7B783088F]<br />
        (No symbol) [0x00007FF7B782CBC4]<br />
        (No symbol) [0x00007FF7B782CD66]<br />
        (No symbol) [0x00007FF7B781C2C9]<br />
        BaseThreadInitThunk [0x00007FFAB05E7374+20]<br />
        RtlUserThreadStart [0x00007FFAB199CC91+33]</code></div></div>]]></description>
			<content:encoded><![CDATA[Hola colegas, estoy desarrollando un pequeño sistema validador de CFDI, ya tengo el código que me lee el xml y me extrae datos, también me conecto a la página de SAT (Aquí en México).<br />
<br />
Pero tengo el error que no detecta el id "method":"css selector","selector":"[id="ctl00_MainContent_txtRFCEmisor"]", comparto el código que utilizo, igual y alguien le sirve.<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import xml.etree.ElementTree as ET<br />
from selenium import webdriver<br />
from selenium.webdriver.common.by import By<br />
from selenium.webdriver.chrome.service import Service<br />
from webdriver_manager.chrome import ChromeDriverManager<br />
import time<br />
<br />
def leer_datos_xml(ruta_xml):<br />
    try:<br />
        tree = ET.parse(ruta_xml)<br />
        root = tree.getroot()<br />
<br />
        # Espacio de nombres SAT (verifica en tu XML)<br />
        ns = {'cfdi': 'http://www.sat.gob.mx/cfd/4', 'tfd': 'http://www.sat.gob.mx/TimbreFiscalDigital'}<br />
<br />
        # Extraer datos clave<br />
        emisor = root.find(".//cfdi:Emisor", ns).attrib.get('Rfc', 'No encontrado')<br />
        receptor = root.find(".//cfdi:Receptor", ns).attrib.get('Rfc', 'No encontrado')<br />
        total = root.attrib.get('Total', '0.00')<br />
        uuid = root.find(".//tfd:TimbreFiscalDigital", ns).attrib.get('UUID', 'No encontrado')<br />
<br />
        return emisor, receptor, total, uuid<br />
<br />
    except Exception as e:<br />
        print(f"Error al leer el XML: {e}")<br />
        return None, None, None, None<br />
<br />
def validar_cfdi_sat(rfc_emisor, rfc_receptor, total, uuid):<br />
    url = "https://verificacfdi.facturaelectronica.sat.gob.mx/default.aspx"<br />
<br />
    params = {<br />
        'id': uuid,<br />
        're': rfc_emisor,<br />
        'rr': rfc_receptor,<br />
        'tt': f"{float(total):.6f}"<br />
    }<br />
<br />
    try:<br />
        ruta = r"C:&#92;chromedriver&#92;chromedriver.exe"<br />
        service = Service(ruta)<br />
        options = webdriver.ChromeOptions()<br />
        # options.add_argument("--headless")<br />
        driver = webdriver.Chrome(service=service, options=options)<br />
        driver.get(url)<br />
        driver.save_screenshot(r"validadorCFDI&#92;error.png")<br />
        # driver.quit<br />
<br />
        # Esperar que cargue la página<br />
        time.sleep(3)<br />
<br />
        # Llenar los campos<br />
        driver.find_element(By.ID, "ctl00_MainContent_txtRFCEmisor").send_keys(rfc_emisor)<br />
        driver.find_element(By.ID, "ctl00_MainContent_txtRFCReceptor").send_keys(rfc_receptor)<br />
        driver.find_element(By.ID, "ctl00_MainContent_txtUUID").send_keys(uuid)<br />
        driver.find_element(By.ID, "ctl00_MainContent_txtTotal").send_keys(f"{float(total):.6f}")<br />
<br />
        # Clic en el botón de consulta<br />
        driver.find_element(By.ID, "ctl00_MainContent_btnConsultar").click()<br />
<br />
        print(driver.page_source)<br />
<br />
        # Esperar la respuesta<br />
        time.sleep(5)<br />
<br />
        # Obtener el estado del CFDI<br />
        estado_element = driver.find_element(By.ID, "ctl00_MainContent_lblEstado")<br />
<br />
        if estado_element:<br />
            estado = estado_element.text.strip()<br />
            driver.quit()<br />
            return f"Estado del CFDI: {estado}"<br />
        else:<br />
            driver.quit()<br />
            return "No se pudo obtener el estado del CFDI."<br />
<br />
    except Exception as e:<br />
        return f"Error en la consulta: {e}"<br />
<br />
# ? Archivo XML de la factura<br />
archivo_xml = r"validadorCFDI&#92;OOTN8605082G3_FACCB7C.xml"<br />
<br />
# Leer datos del XML<br />
rfc_emisor, rfc_receptor, total, uuid = leer_datos_xml(archivo_xml)<br />
<br />
if rfc_emisor and rfc_receptor and total and uuid:<br />
    # Validar en el SAT<br />
    resultado = validar_cfdi_sat(rfc_emisor, rfc_receptor, total, uuid)<br />
    print(resultado)<br />
else:<br />
    print("No se pudieron extraer los datos del XML.")</code></div></div><br />
El error que me arroja es el siguiente:<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>DevTools listening on ws://127.0.0.1:63266/devtools/browser/c00d1670-621d-4c29-838e-fd84e69745c6<br />
Error en la consulta: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="ctl00_MainContent_txtRFCEmisor"]"}<br />
  (Session info: chrome=134.0.6998.89); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception<br />
Stacktrace:<br />
        GetHandleVerifier [0x00007FF7B78BFE45+26629]<br />
        (No symbol) [0x00007FF7B7826010]<br />
        (No symbol) [0x00007FF7B76B931A]<br />
        (No symbol) [0x00007FF7B770F8E7]<br />
        (No symbol) [0x00007FF7B770FB1C]<br />
        (No symbol) [0x00007FF7B77634A7]<br />
        (No symbol) [0x00007FF7B7737AEF]<br />
        (No symbol) [0x00007FF7B7760169]<br />
        (No symbol) [0x00007FF7B7737883]<br />
        (No symbol) [0x00007FF7B7700550]<br />
        (No symbol) [0x00007FF7B7701803]<br />
        GetHandleVerifier [0x00007FF7B7C172BD+3529853]<br />
        GetHandleVerifier [0x00007FF7B7C2DA22+3621858]<br />
        GetHandleVerifier [0x00007FF7B7C224D3+3575443]<br />
        GetHandleVerifier [0x00007FF7B798B77A+860474]<br />
        (No symbol) [0x00007FF7B783088F]<br />
        (No symbol) [0x00007FF7B782CBC4]<br />
        (No symbol) [0x00007FF7B782CD66]<br />
        (No symbol) [0x00007FF7B781C2C9]<br />
        BaseThreadInitThunk [0x00007FFAB05E7374+20]<br />
        RtlUserThreadStart [0x00007FFAB199CC91+33]</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[No consigo activar pip en Python]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1508</link>
			<pubDate>Tue, 19 Nov 2024 01:07:44 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1219">Baldomero123</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1508</guid>
			<description><![CDATA[Estoy intentando trabajar de nuevo con Python PyQt5 para lo que necesito ejecutar pip install PyQt5 pero no consigo que me funcine.-<br />
Tengo tanto pip.exe como Python.exe en el directorio<br />
C:\usuarios\usuario\source\repos\venv\scripts\<br />
si quiero ejecutar pip install en c. del sistema recibo:<br />
pip no se reconoce como un comando<br />
si dentro del directorio donde está pip.exe (y Python, repito) escribo pip install pyqt5 - tool recibo<br />
"No Python at C:\usuarios\usuario\AppData\Local....qvz5n2kfra8p0\python.exe"<br />
Llevo varias horas buscando por todas partes y no consigo que me aparezca PyQt5. ¿Qué puedo hacer? Gracias.]]></description>
			<content:encoded><![CDATA[Estoy intentando trabajar de nuevo con Python PyQt5 para lo que necesito ejecutar pip install PyQt5 pero no consigo que me funcine.-<br />
Tengo tanto pip.exe como Python.exe en el directorio<br />
C:\usuarios\usuario\source\repos\venv\scripts\<br />
si quiero ejecutar pip install en c. del sistema recibo:<br />
pip no se reconoce como un comando<br />
si dentro del directorio donde está pip.exe (y Python, repito) escribo pip install pyqt5 - tool recibo<br />
"No Python at C:\usuarios\usuario\AppData\Local....qvz5n2kfra8p0\python.exe"<br />
Llevo varias horas buscando por todas partes y no consigo que me aparezca PyQt5. ¿Qué puedo hacer? Gracias.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Comparar dos imagenes]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1461</link>
			<pubDate>Wed, 17 Apr 2024 22:38:11 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1544">Linit</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1461</guid>
			<description><![CDATA[Ante todo un condial saludos.<br />
<br />
Vengo por aca con un pequeño problema en python en un proyecto personal a ver si alguien me puede ayudar, pero como soy nuevo en python tiendo a complicarme mucho, lo que estoy tratando  de hacer es comparar dos imagenes y ver si son iguales y no logro conseguirlo, uso openCV para comprar las imagenes:<br />
<br />
Bueno la segunda imagen practicamente es la misma que la primea en cuanto tamaño y fondo, pero no tiene las letras por tal son diferentes. Pero mi codigo la detecta como iguales.<br />
<br />
Imagen 1:<br />
<img src="https://i.ibb.co/qgs81bY/Error-No-Captcha-Base.png" loading="lazy"  alt="[Imagen: Error-No-Captcha-Base.png]" class="mycode_img" /><br />
Imagen 2:<br />
<img src="https://i.ibb.co/phy2P0g/Error-No-Captcha-Actual.png" loading="lazy"  alt="[Imagen: Error-No-Captcha-Actual.png]" class="mycode_img" /><br />
<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import cv2<br />
import os<br />
import numpy as np<br />
<br />
original = cv2.imread(os.getcwd() + '&#92;&#92;source&#92;&#92;capturas&#92;&#92;_ErrorSomethingWentWrongBase.png',1)        <br />
comparar = cv2.imread(os.getcwd() + '&#92;&#92;source&#92;&#92;capturas&#92;&#92;_ErrorSomethingWentWrongActual.png',1)<br />
<br />
if original.shape == comparar.shape:<br />
    difference = cv2.subtract(original, comparar)<br />
    b, g, r = cv2.split(difference)<br />
    if (cv2.countNonZero(b) == 0 and cv2.countNonZero(g) == 0 and cv2.countNonZero(r) == 0):<br />
        print("IGUALES")</code></div></div><br />
Creo que hay que hacer una comparacion mas profunda pixel por pixel algo asi.<br />
<br />
Cabe mencionar que cuando la segunda imagen tiene otro color de fondo si la detecta como diferentes.<br />
<br />
Gracias de antemano por cualquier ayuda.]]></description>
			<content:encoded><![CDATA[Ante todo un condial saludos.<br />
<br />
Vengo por aca con un pequeño problema en python en un proyecto personal a ver si alguien me puede ayudar, pero como soy nuevo en python tiendo a complicarme mucho, lo que estoy tratando  de hacer es comparar dos imagenes y ver si son iguales y no logro conseguirlo, uso openCV para comprar las imagenes:<br />
<br />
Bueno la segunda imagen practicamente es la misma que la primea en cuanto tamaño y fondo, pero no tiene las letras por tal son diferentes. Pero mi codigo la detecta como iguales.<br />
<br />
Imagen 1:<br />
<img src="https://i.ibb.co/qgs81bY/Error-No-Captcha-Base.png" loading="lazy"  alt="[Imagen: Error-No-Captcha-Base.png]" class="mycode_img" /><br />
Imagen 2:<br />
<img src="https://i.ibb.co/phy2P0g/Error-No-Captcha-Actual.png" loading="lazy"  alt="[Imagen: Error-No-Captcha-Actual.png]" class="mycode_img" /><br />
<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import cv2<br />
import os<br />
import numpy as np<br />
<br />
original = cv2.imread(os.getcwd() + '&#92;&#92;source&#92;&#92;capturas&#92;&#92;_ErrorSomethingWentWrongBase.png',1)        <br />
comparar = cv2.imread(os.getcwd() + '&#92;&#92;source&#92;&#92;capturas&#92;&#92;_ErrorSomethingWentWrongActual.png',1)<br />
<br />
if original.shape == comparar.shape:<br />
    difference = cv2.subtract(original, comparar)<br />
    b, g, r = cv2.split(difference)<br />
    if (cv2.countNonZero(b) == 0 and cv2.countNonZero(g) == 0 and cv2.countNonZero(r) == 0):<br />
        print("IGUALES")</code></div></div><br />
Creo que hay que hacer una comparacion mas profunda pixel por pixel algo asi.<br />
<br />
Cabe mencionar que cuando la segunda imagen tiene otro color de fondo si la detecta como diferentes.<br />
<br />
Gracias de antemano por cualquier ayuda.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Scraping TikTok]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1419</link>
			<pubDate>Sun, 17 Dec 2023 15:24:09 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1498">pint34</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1419</guid>
			<description><![CDATA[Buenas noches,<br />
<br />
Estoy intentando realizar un código para recoger información referente a vídeos de TikTok. No estoy consiguiendo conectar con TikTok. ¿Algún usuario tiene experiencia en este tema?]]></description>
			<content:encoded><![CDATA[Buenas noches,<br />
<br />
Estoy intentando realizar un código para recoger información referente a vídeos de TikTok. No estoy consiguiendo conectar con TikTok. ¿Algún usuario tiene experiencia en este tema?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Leer archivos .sor OTDR]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1384</link>
			<pubDate>Sun, 23 Jul 2023 23:14:36 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1454">aldahirr.v21@gmail.com</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1384</guid>
			<description><![CDATA[¡Hola a todos!<br />
<br />
Espero que estén teniendo un excelente día. Me encuentro trabajando en un proyecto en Python donde necesito leer y graficar datos de un archivo .sor. Lamentablemente, estoy teniendo dificultades para lograrlo y me gustaría pedir su valiosa ayuda.<br />
<br />
El archivo .sor contiene datos de mediciones en el contexto de la industria de las telecomunicaciones, y necesito extraer información relevante y representarla gráficamente para su análisis.<br />
<br />
El problema que enfrento es que no estoy seguro de cómo abrir y leer correctamente el archivo .sor, y luego procesar los datos para graficarlos de manera adecuada. He investigado sobre diferentes bibliotecas en Python para trabajar con archivos .sor, pero aún no logro obtener los resultados deseados.<br />
<br />
Si alguien tiene experiencia trabajando con archivos .sor o conoce alguna biblioteca o enfoque adecuado para abordar este problema, estaría inmensamente agradecido si pudiera compartir su conocimiento conmigo.<br />
<br />
Adjunto aquí el código que he intentado hasta ahora <br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import pandas as pd<br />
import matplotlib.pyplot as plt<br />
from google.colab import files<br />
<br />
def graficar_datos_otdr(contenido_archivo):<br />
    try:<br />
        # Decodificar el contenido binario a texto utilizando diferentes codificaciones<br />
        codificaciones = ['utf-8', 'ISO-8859-1', 'Latin-1', 'Windows-1252']<br />
        contenido_texto = None<br />
        for codificacion in codificaciones:<br />
            try:<br />
                contenido_texto = contenido_archivo.decode(codificacion)<br />
                break<br />
            except UnicodeDecodeError:<br />
                continue<br />
<br />
        if contenido_texto is None:<br />
            raise UnicodeDecodeError("No se pudo decodificar el archivo con ninguna de las codificaciones soportadas.")<br />
<br />
        # Buscar la línea que contiene la pérdida total y la pérdida por kilómetro<br />
        perdida_total_linea = None<br />
        perdida_por_km_linea = None<br />
        lineas = contenido_texto.split('&#92;n')<br />
        for linea in lineas:<br />
            if "pérdida total" in linea.lower():<br />
                perdida_total_linea = linea<br />
            elif "pérdida por kilómetro" in linea.lower():<br />
                perdida_por_km_linea = linea<br />
<br />
        # Extraer los valores de pérdida total y pérdida por kilómetro de las líneas encontradas<br />
        perdida_total = None<br />
        perdida_por_km = None<br />
        if perdida_total_linea:<br />
            perdida_total = float(perdida_total_linea.split(':')[1].strip().split()[0])<br />
        if perdida_por_km_linea:<br />
            perdida_por_km = float(perdida_por_km_linea.split(':')[1].strip().split()[0])<br />
<br />
        # Verificar si se encontraron los valores<br />
        if perdida_total is None or perdida_por_km is None:<br />
            raise ValueError("No se pudieron encontrar los valores de pérdida total o pérdida por kilómetro en el archivo.")<br />
<br />
        # Mostrar la información extraída<br />
        print("Pérdida Total: {} dB".format(perdida_total))<br />
        print("Pérdida por Kilómetro: {} dB/km".format(perdida_por_km))<br />
<br />
        # Graficar los resultados<br />
        plt.figure(figsize=(8, 6))<br />
        plt.bar(["Pérdida Total", "Pérdida por Kilómetro"], [perdida_total, perdida_por_km])<br />
        plt.ylabel("dB / dB/km")<br />
        plt.title("Resultados de la Prueba de Fibra Óptica")<br />
        plt.show()<br />
<br />
    except Exception as e:<br />
        print("Error:", e)<br />
<br />
# Cargar el archivo SOR utilizando el widget de Colab<br />
archivos_cargados = files.upload()<br />
<br />
# Obtener el contenido del archivo cargado<br />
nombre_archivo = next(iter(archivos_cargados))<br />
contenido_archivo = archivos_cargados[nombre_archivo]<br />
<br />
# Llamar a la función para procesar los datos del archivo y graficarlos<br />
graficar_datos_otdr(contenido_archivo)</code></div></div><br />
Agradezco enormemente su tiempo y espero poder aprender y superar este obstáculo con la ayuda y orientación de esta comunidad de programadores de Python.<br />
<br />
¡Muchas gracias de antemano por su apoyo!<br />
<br />
Saludos cordiales.]]></description>
			<content:encoded><![CDATA[¡Hola a todos!<br />
<br />
Espero que estén teniendo un excelente día. Me encuentro trabajando en un proyecto en Python donde necesito leer y graficar datos de un archivo .sor. Lamentablemente, estoy teniendo dificultades para lograrlo y me gustaría pedir su valiosa ayuda.<br />
<br />
El archivo .sor contiene datos de mediciones en el contexto de la industria de las telecomunicaciones, y necesito extraer información relevante y representarla gráficamente para su análisis.<br />
<br />
El problema que enfrento es que no estoy seguro de cómo abrir y leer correctamente el archivo .sor, y luego procesar los datos para graficarlos de manera adecuada. He investigado sobre diferentes bibliotecas en Python para trabajar con archivos .sor, pero aún no logro obtener los resultados deseados.<br />
<br />
Si alguien tiene experiencia trabajando con archivos .sor o conoce alguna biblioteca o enfoque adecuado para abordar este problema, estaría inmensamente agradecido si pudiera compartir su conocimiento conmigo.<br />
<br />
Adjunto aquí el código que he intentado hasta ahora <br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import pandas as pd<br />
import matplotlib.pyplot as plt<br />
from google.colab import files<br />
<br />
def graficar_datos_otdr(contenido_archivo):<br />
    try:<br />
        # Decodificar el contenido binario a texto utilizando diferentes codificaciones<br />
        codificaciones = ['utf-8', 'ISO-8859-1', 'Latin-1', 'Windows-1252']<br />
        contenido_texto = None<br />
        for codificacion in codificaciones:<br />
            try:<br />
                contenido_texto = contenido_archivo.decode(codificacion)<br />
                break<br />
            except UnicodeDecodeError:<br />
                continue<br />
<br />
        if contenido_texto is None:<br />
            raise UnicodeDecodeError("No se pudo decodificar el archivo con ninguna de las codificaciones soportadas.")<br />
<br />
        # Buscar la línea que contiene la pérdida total y la pérdida por kilómetro<br />
        perdida_total_linea = None<br />
        perdida_por_km_linea = None<br />
        lineas = contenido_texto.split('&#92;n')<br />
        for linea in lineas:<br />
            if "pérdida total" in linea.lower():<br />
                perdida_total_linea = linea<br />
            elif "pérdida por kilómetro" in linea.lower():<br />
                perdida_por_km_linea = linea<br />
<br />
        # Extraer los valores de pérdida total y pérdida por kilómetro de las líneas encontradas<br />
        perdida_total = None<br />
        perdida_por_km = None<br />
        if perdida_total_linea:<br />
            perdida_total = float(perdida_total_linea.split(':')[1].strip().split()[0])<br />
        if perdida_por_km_linea:<br />
            perdida_por_km = float(perdida_por_km_linea.split(':')[1].strip().split()[0])<br />
<br />
        # Verificar si se encontraron los valores<br />
        if perdida_total is None or perdida_por_km is None:<br />
            raise ValueError("No se pudieron encontrar los valores de pérdida total o pérdida por kilómetro en el archivo.")<br />
<br />
        # Mostrar la información extraída<br />
        print("Pérdida Total: {} dB".format(perdida_total))<br />
        print("Pérdida por Kilómetro: {} dB/km".format(perdida_por_km))<br />
<br />
        # Graficar los resultados<br />
        plt.figure(figsize=(8, 6))<br />
        plt.bar(["Pérdida Total", "Pérdida por Kilómetro"], [perdida_total, perdida_por_km])<br />
        plt.ylabel("dB / dB/km")<br />
        plt.title("Resultados de la Prueba de Fibra Óptica")<br />
        plt.show()<br />
<br />
    except Exception as e:<br />
        print("Error:", e)<br />
<br />
# Cargar el archivo SOR utilizando el widget de Colab<br />
archivos_cargados = files.upload()<br />
<br />
# Obtener el contenido del archivo cargado<br />
nombre_archivo = next(iter(archivos_cargados))<br />
contenido_archivo = archivos_cargados[nombre_archivo]<br />
<br />
# Llamar a la función para procesar los datos del archivo y graficarlos<br />
graficar_datos_otdr(contenido_archivo)</code></div></div><br />
Agradezco enormemente su tiempo y espero poder aprender y superar este obstáculo con la ayuda y orientación de esta comunidad de programadores de Python.<br />
<br />
¡Muchas gracias de antemano por su apoyo!<br />
<br />
Saludos cordiales.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ayuda tipo de visualización]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1347</link>
			<pubDate>Mon, 24 Apr 2023 09:02:59 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1419">Scapekel</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1347</guid>
			<description><![CDATA[Hola a todos,<br />
<br />
He estado viendo que últimamente se han puesto muy de moda este tipo de visualizaciones: <br />
<img src="https://www.visualcapitalist.com/wp-content/uploads/2022/07/wheat-production-by-country-2000-2020.jpg" loading="lazy"  width="500" height="707" alt="[Imagen: wheat-production-by-country-2000-2020.jpg]" class="mycode_img" /><br />
<br />
Según he estado investigando, los creadores utilizan Python para crearlas. Sabrían decir cómo las hacen? Alguna librería que estén utilizando?<br />
<br />
Gracias.]]></description>
			<content:encoded><![CDATA[Hola a todos,<br />
<br />
He estado viendo que últimamente se han puesto muy de moda este tipo de visualizaciones: <br />
<img src="https://www.visualcapitalist.com/wp-content/uploads/2022/07/wheat-production-by-country-2000-2020.jpg" loading="lazy"  width="500" height="707" alt="[Imagen: wheat-production-by-country-2000-2020.jpg]" class="mycode_img" /><br />
<br />
Según he estado investigando, los creadores utilizan Python para crearlas. Sabrían decir cómo las hacen? Alguna librería que estén utilizando?<br />
<br />
Gracias.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Extraer parquet de ruta a partir de una expresión]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1304</link>
			<pubDate>Mon, 02 Jan 2023 19:19:39 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1380">Nicolás Pyspark</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1304</guid>
			<description><![CDATA[Buenos días, he estado buscando la solución a extraer parquet de ruta a partir de una expresión, archivos distribuidos<br />
<br />
Tengo un dataframe que me ayuda a construir el path donde estara almacenado el parquet que necesito, pero no logro reconstruir el path por completo entonces mi dataframe queda de la siguiente manera<br />
Registro 1 | /data/master/uuaa/tabla1/ko_tabla1*campo1*<br />
Registro n | /data/master/uuaa/tablan/ko_tablan*campon*<br />
<br />
Ahora busco una función que tome cada expresión y me traiga los path coincidentes, ya que en la terminal puedo usar el siguiente comando:<br />
<br />
hdfs dfs -ls  /data/master/uuaa/tabla1/ko_tabla1*campo1*<br />
<br />
Y el resultado será:<br />
/data/master/uuaa/tabla1/ko_tabla_fechaconmilisegundos1_campo1_version1<br />
/data/master/uuaa/tabla1/ko_tabla_fechaconmilisegundos2_campo1_version2<br />
<br />
Utilice la función glob.glob como me ayudo a encontrar el chatGpt3 openai, sin embargo esta función pide que el path se defina como:<br />
hdfs://namenode/data/master/uuaa/tabla1/ko_tabla1*campo1*<br />
<br />
No puedo obtener el namenode puesto que la única forma que encontré es mediante comandos de configuración y están restringidos, (hdfs getconf -namenodes)<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import glob<br />
<br />
def get_paths(path_expression):<br />
    return glob.glob(path_expression)<br />
<br />
path_expression = 'hdfs://namenode/path/to/*'<br />
<br />
# Crea un RDD con la expresión de path<br />
path_expression_rdd = sc.parallelize([path_expression])<br />
<br />
# Aplica la función get_paths a cada elemento del RDD y guarda el resultado en una lista<br />
paths = path_expression_rdd.map(get_paths).collect()<br />
<br />
print(paths)  # imprime una lista con todos los paths que coinciden con la expresión dada en HDFS</code></div></div><br />
Si alguno tiene alguna idea agradezco su ayuda, cuando tenga los paths espero poderlos cargar para hacer mi dataframe mas completo]]></description>
			<content:encoded><![CDATA[Buenos días, he estado buscando la solución a extraer parquet de ruta a partir de una expresión, archivos distribuidos<br />
<br />
Tengo un dataframe que me ayuda a construir el path donde estara almacenado el parquet que necesito, pero no logro reconstruir el path por completo entonces mi dataframe queda de la siguiente manera<br />
Registro 1 | /data/master/uuaa/tabla1/ko_tabla1*campo1*<br />
Registro n | /data/master/uuaa/tablan/ko_tablan*campon*<br />
<br />
Ahora busco una función que tome cada expresión y me traiga los path coincidentes, ya que en la terminal puedo usar el siguiente comando:<br />
<br />
hdfs dfs -ls  /data/master/uuaa/tabla1/ko_tabla1*campo1*<br />
<br />
Y el resultado será:<br />
/data/master/uuaa/tabla1/ko_tabla_fechaconmilisegundos1_campo1_version1<br />
/data/master/uuaa/tabla1/ko_tabla_fechaconmilisegundos2_campo1_version2<br />
<br />
Utilice la función glob.glob como me ayudo a encontrar el chatGpt3 openai, sin embargo esta función pide que el path se defina como:<br />
hdfs://namenode/data/master/uuaa/tabla1/ko_tabla1*campo1*<br />
<br />
No puedo obtener el namenode puesto que la única forma que encontré es mediante comandos de configuración y están restringidos, (hdfs getconf -namenodes)<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import glob<br />
<br />
def get_paths(path_expression):<br />
    return glob.glob(path_expression)<br />
<br />
path_expression = 'hdfs://namenode/path/to/*'<br />
<br />
# Crea un RDD con la expresión de path<br />
path_expression_rdd = sc.parallelize([path_expression])<br />
<br />
# Aplica la función get_paths a cada elemento del RDD y guarda el resultado en una lista<br />
paths = path_expression_rdd.map(get_paths).collect()<br />
<br />
print(paths)  # imprime una lista con todos los paths que coinciden con la expresión dada en HDFS</code></div></div><br />
Si alguno tiene alguna idea agradezco su ayuda, cuando tenga los paths espero poderlos cargar para hacer mi dataframe mas completo]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Detectar ciclos con NumPy]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1263</link>
			<pubDate>Tue, 23 Aug 2022 12:34:43 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1321">Imja</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1263</guid>
			<description><![CDATA[Hola, soy muy nueva en Python (2 meses aprendiendo) y debo realizar esta tarea: <br />
<br />
Tengo dos columnas: <br />
<br />
Fecha:     Estado<br />
1                10 (inicio)<br />
2                12<br />
3                11<br />
4                13<br />
5                14<br />
6                18<br />
7                20 (pico)<br />
8                16<br />
9                14<br />
10              12 (fin e inicio del siguiente pico)<br />
11              13<br />
12              14<br />
13              15<br />
<br />
La consigna es que debo escribir el código en Pyhton y que este identifique los ciclos con las siguientes consideraciones: <br />
<br />
- la duración aproximada del ciclo total (inicio-pico-fin) es de 10 días, que pueden variar. <br />
- después del inicio del ciclo los estados que le siguen deben ser más grandes que el inicio. <br />
- si el valor actual es mas grande que todos los anteriores entonces ese valor es el pico<br />
- pasados 5 días si el valor actual es el más pequeño ese es el fin del ciclo. <br />
<br />
Entiendo que primero debo definir las variables y luego trabajar con excepciones...pero no sé bien cómo empezar a escribir el código. He visto varios tutoriales, etc, pero para este caso en específico me cuesta identificar cómo empezar!! POR FAVOR, si alguien puede darme unas ideas de cómo debería verse el código lo agradecería muchísimo!!]]></description>
			<content:encoded><![CDATA[Hola, soy muy nueva en Python (2 meses aprendiendo) y debo realizar esta tarea: <br />
<br />
Tengo dos columnas: <br />
<br />
Fecha:     Estado<br />
1                10 (inicio)<br />
2                12<br />
3                11<br />
4                13<br />
5                14<br />
6                18<br />
7                20 (pico)<br />
8                16<br />
9                14<br />
10              12 (fin e inicio del siguiente pico)<br />
11              13<br />
12              14<br />
13              15<br />
<br />
La consigna es que debo escribir el código en Pyhton y que este identifique los ciclos con las siguientes consideraciones: <br />
<br />
- la duración aproximada del ciclo total (inicio-pico-fin) es de 10 días, que pueden variar. <br />
- después del inicio del ciclo los estados que le siguen deben ser más grandes que el inicio. <br />
- si el valor actual es mas grande que todos los anteriores entonces ese valor es el pico<br />
- pasados 5 días si el valor actual es el más pequeño ese es el fin del ciclo. <br />
<br />
Entiendo que primero debo definir las variables y luego trabajar con excepciones...pero no sé bien cómo empezar a escribir el código. He visto varios tutoriales, etc, pero para este caso en específico me cuesta identificar cómo empezar!! POR FAVOR, si alguien puede darme unas ideas de cómo debería verse el código lo agradecería muchísimo!!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ayuda con histograma sencillo.]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1229</link>
			<pubDate>Wed, 22 Jun 2022 09:05:18 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1290">Rufinete</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1229</guid>
			<description><![CDATA[Buenas tardes:<br />
<br />
Soy nuevo en esto y estaba tratando un sencillo histograma pero no me sale correctamente, me gustaría saber si alguien podría ayudarme.<br />
<br />
Adjunto imagen.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://foro.recursospython.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=146" target="_blank" title="">Captura de Pantalla 2022-06-22 a las 17.44.08.png</a> (Tamaño: 232,02 KB / Descargas: 6)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Buenas tardes:<br />
<br />
Soy nuevo en esto y estaba tratando un sencillo histograma pero no me sale correctamente, me gustaría saber si alguien podría ayudarme.<br />
<br />
Adjunto imagen.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://foro.recursospython.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=146" target="_blank" title="">Captura de Pantalla 2022-06-22 a las 17.44.08.png</a> (Tamaño: 232,02 KB / Descargas: 6)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[/MACHINE LEARNING/ problema al adaptar el código de la predicción del Churn Modelling]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1222</link>
			<pubDate>Thu, 09 Jun 2022 14:43:58 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1282">davma</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1222</guid>
			<description><![CDATA[Hola.<br />
<br />
Me surge un problema al adaptar el código de la predicción del Churn Modelling.<br />
<br />
He cambiado el esquema del OneHotEncoder quitando los parámetros, pero me da error en la línea de ajuste del modelo:<br />
classifier.fit(X_train, y_train, batch_size = 10, epochs = 50)<br />
<br />
Te dejo Google Colab para que puedas ver el error: <a href="https://colab.research.google.com/drive/1J8idZnNotIna4mkug5JQu04FYHvTy0MR?usp=sharing" target="_blank" rel="noopener" class="mycode_url">https://colab.research.google.com/drive/...sp=sharing</a><br />
<br />
Muchisimas gracias<br />
<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import numpy as np <br />
import matplotlib.pyplot as plt<br />
import pandas as pd<br />
<br />
# Importar la base de datos<br />
dataset = pd.read_csv('https://raw.githubusercontent.com/AaronWard/Churn-Modelling-Artificial-Neural-Network/master/Churn_Modelling.csv');<br />
X = dataset.iloc[:, 3:13].values<br />
Y = dataset.iloc[:, 13].values<br />
<br />
from sklearn.preprocessing import LabelEncoder, OneHotEncoder<br />
labelencoder_X_1 = LabelEncoder()<br />
X[:,1] = labelencoder_X_1.fit_transform(X[:,1])<br />
labelencoder_X_2 = LabelEncoder()<br />
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])<br />
<br />
onehotencoder = OneHotEncoder()<br />
X = onehotencoder.fit_transform(X).toarray()<br />
X = X[:, 1:]<br />
<br />
<br />
#Dividir el dataset en Training set y Test Set<br />
from sklearn.model_selection import train_test_split<br />
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2)<br />
<br />
# Feature Scaling<br />
from sklearn.preprocessing import StandardScaler<br />
sc = StandardScaler() <br />
X_train = sc.fit_transform(X_train) <br />
X_test = sc.transform(X_test) <br />
<br />
# Importar la libreria de Keras y sus paquetes <br />
import keras <br />
from keras.models import Sequential <br />
from keras.layers import Dense <br />
<br />
#Inicializar la red neuronal <br />
classifier = Sequential() <br />
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', <br />
activation = 'relu', input_dim = 11)) <br />
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', <br />
activation = 'relu')) <br />
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', <br />
activation = 'sigmoid')) <br />
<br />
# Compilar red neuronal <br />
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) <br />
classifier.fit(X_train, y_train, batch_size = 10, epochs = 50) <br />
<br />
# Predecir los resultados del Test set <br />
y_pred = classifier.predict(X_test) <br />
y_pred = (y_pred &gt; 0.5) <br />
new_prediction = classifier.predict(sc.transform <br />
(np.array([[0.0, 0, 500, 1, 40, 3, 50000, 2, 1, 1, 40000]]))) <br />
new_prediction = (new_prediction &gt; 0.5) <br />
<br />
from sklearn.metrics import confusion_matrix <br />
cm = confusion_matrix(y_test, y_pred) <br />
<br />
print('cm: ', cm) <br />
print('New prediction: ', new_prediction)</code></div></div>]]></description>
			<content:encoded><![CDATA[Hola.<br />
<br />
Me surge un problema al adaptar el código de la predicción del Churn Modelling.<br />
<br />
He cambiado el esquema del OneHotEncoder quitando los parámetros, pero me da error en la línea de ajuste del modelo:<br />
classifier.fit(X_train, y_train, batch_size = 10, epochs = 50)<br />
<br />
Te dejo Google Colab para que puedas ver el error: <a href="https://colab.research.google.com/drive/1J8idZnNotIna4mkug5JQu04FYHvTy0MR?usp=sharing" target="_blank" rel="noopener" class="mycode_url">https://colab.research.google.com/drive/...sp=sharing</a><br />
<br />
Muchisimas gracias<br />
<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import numpy as np <br />
import matplotlib.pyplot as plt<br />
import pandas as pd<br />
<br />
# Importar la base de datos<br />
dataset = pd.read_csv('https://raw.githubusercontent.com/AaronWard/Churn-Modelling-Artificial-Neural-Network/master/Churn_Modelling.csv');<br />
X = dataset.iloc[:, 3:13].values<br />
Y = dataset.iloc[:, 13].values<br />
<br />
from sklearn.preprocessing import LabelEncoder, OneHotEncoder<br />
labelencoder_X_1 = LabelEncoder()<br />
X[:,1] = labelencoder_X_1.fit_transform(X[:,1])<br />
labelencoder_X_2 = LabelEncoder()<br />
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])<br />
<br />
onehotencoder = OneHotEncoder()<br />
X = onehotencoder.fit_transform(X).toarray()<br />
X = X[:, 1:]<br />
<br />
<br />
#Dividir el dataset en Training set y Test Set<br />
from sklearn.model_selection import train_test_split<br />
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2)<br />
<br />
# Feature Scaling<br />
from sklearn.preprocessing import StandardScaler<br />
sc = StandardScaler() <br />
X_train = sc.fit_transform(X_train) <br />
X_test = sc.transform(X_test) <br />
<br />
# Importar la libreria de Keras y sus paquetes <br />
import keras <br />
from keras.models import Sequential <br />
from keras.layers import Dense <br />
<br />
#Inicializar la red neuronal <br />
classifier = Sequential() <br />
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', <br />
activation = 'relu', input_dim = 11)) <br />
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', <br />
activation = 'relu')) <br />
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', <br />
activation = 'sigmoid')) <br />
<br />
# Compilar red neuronal <br />
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy']) <br />
classifier.fit(X_train, y_train, batch_size = 10, epochs = 50) <br />
<br />
# Predecir los resultados del Test set <br />
y_pred = classifier.predict(X_test) <br />
y_pred = (y_pred &gt; 0.5) <br />
new_prediction = classifier.predict(sc.transform <br />
(np.array([[0.0, 0, 500, 1, 40, 3, 50000, 2, 1, 1, 40000]]))) <br />
new_prediction = (new_prediction &gt; 0.5) <br />
<br />
from sklearn.metrics import confusion_matrix <br />
cm = confusion_matrix(y_test, y_pred) <br />
<br />
print('cm: ', cm) <br />
print('New prediction: ', new_prediction)</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Manejo de Strings en Dataframes]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1215</link>
			<pubDate>Sun, 29 May 2022 16:58:49 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1274">Horacio Sánchez</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1215</guid>
			<description><![CDATA[Hola todos.<br />
La consulta es:<br />
Tengo una columna del dataframe con datos de tipo string y quiero sacar de esa columna un substring que cumpla determinada condición y colocarlo en una columna nueva.<br />
Ejemplo:<br />
Columnas               A                                                 B (columna nueva)<br />
datos             el auto verde                (acá tendrìa que figurar solo el color)<br />
datos1           la moto azul                 (acá tendrìa que figurar solo el color) <br />
datos 2          celeste es el cielo          (acá tendrìa que figurar solo el color)<br />
<br />
<br />
Espero haber sido claro, para que me puedan ayudar.<br />
<br />
<br />
Muchas Gracias.<br />
<br />
sds]]></description>
			<content:encoded><![CDATA[Hola todos.<br />
La consulta es:<br />
Tengo una columna del dataframe con datos de tipo string y quiero sacar de esa columna un substring que cumpla determinada condición y colocarlo en una columna nueva.<br />
Ejemplo:<br />
Columnas               A                                                 B (columna nueva)<br />
datos             el auto verde                (acá tendrìa que figurar solo el color)<br />
datos1           la moto azul                 (acá tendrìa que figurar solo el color) <br />
datos 2          celeste es el cielo          (acá tendrìa que figurar solo el color)<br />
<br />
<br />
Espero haber sido claro, para que me puedan ayudar.<br />
<br />
<br />
Muchas Gracias.<br />
<br />
sds]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Creación de un ionograma]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1190</link>
			<pubDate>Tue, 26 Apr 2022 13:31:33 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1244">MycroftPinJ</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1190</guid>
			<description><![CDATA[saludos gente..... les comento lo estoy tratando de hacer:<br />
La foto que adjunto es un ionograma, y es la representación grafica de las mediciones de una ionosonda, se encarga de medir cambios en las capas de la ionosfera. <br />
El ionograma se crea a partir de un sondeo en algunas frecuencias y esta compuesto por una linea de datos de 1 y 0 (señal digital de binarios puros), en una matriz de 570 x 512, la matriz se llena en columnas de abajo hacia arriba y pasa a la siguiente columna. Estas señales van dadas por unas entradas  llamadas CLOCK, DATA  y YB. La señal DATA es la que indica qué se transmite en cada frecuencia (durante el periodo entre flancos de bajada). La señal Y son los datos del eje Y, que indican la altura de la ionosfera. El flanco de bajada del CLOCK es el que indica en qué momento hay que muestrear las señales digitales.<br />
<br />
En síntesis es crear una una matriz según los condiciones dadas y los datos dados, puede ser un 1 o 0, en el caso que sea uno indica un pixel de matriz en color blanco, recreando algo similiar a la imagen con un interfaz grafica simple.<br />
<br />
Pense en la serializacion de datos para la recreacion de la matriz pero talvez a alguien se le ocurra alguna idea mejor.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://foro.recursospython.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=135" target="_blank" title="">ionograma.PNG</a> (Tamaño: 41,84 KB / Descargas: 2)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[saludos gente..... les comento lo estoy tratando de hacer:<br />
La foto que adjunto es un ionograma, y es la representación grafica de las mediciones de una ionosonda, se encarga de medir cambios en las capas de la ionosfera. <br />
El ionograma se crea a partir de un sondeo en algunas frecuencias y esta compuesto por una linea de datos de 1 y 0 (señal digital de binarios puros), en una matriz de 570 x 512, la matriz se llena en columnas de abajo hacia arriba y pasa a la siguiente columna. Estas señales van dadas por unas entradas  llamadas CLOCK, DATA  y YB. La señal DATA es la que indica qué se transmite en cada frecuencia (durante el periodo entre flancos de bajada). La señal Y son los datos del eje Y, que indican la altura de la ionosfera. El flanco de bajada del CLOCK es el que indica en qué momento hay que muestrear las señales digitales.<br />
<br />
En síntesis es crear una una matriz según los condiciones dadas y los datos dados, puede ser un 1 o 0, en el caso que sea uno indica un pixel de matriz en color blanco, recreando algo similiar a la imagen con un interfaz grafica simple.<br />
<br />
Pense en la serializacion de datos para la recreacion de la matriz pero talvez a alguien se le ocurra alguna idea mejor.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://foro.recursospython.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=135" target="_blank" title="">ionograma.PNG</a> (Tamaño: 41,84 KB / Descargas: 2)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Consulta de base de datos con Panda y Selenium]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1168</link>
			<pubDate>Sat, 19 Mar 2022 16:46:01 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1220">JimmyL</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1168</guid>
			<description><![CDATA[Buenas noches a todos, tengo un problema con una extracción de datos web de tablas. Aclaro que tengo conocimientos básicos y necesito ayuda para buscar una solución.<br />
<br />
La tabla que extraido a veces tiene campos en blanco y al crear las listas para exportarlo a csv, luego <span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">no me calzan las columnas en Excel</span></span>. paso a explicarlo con un ejemplo:<br />
<br />
Registro #1 (María, González, 18 años, España, Barcelona)<br />
Registro #2 (José, Pérez, España, Barcelona) #Acá falta la edad por ejemplo<br />
<br />
<br />
Así capturo cada registro y creo el data frame en Panda:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>Lineas=driver.find_elements_by_tag_name('//*[@id="datos"]/td')<br />
driver.quit()<br />
    <br />
    datos=[]<br />
    for linea in Lineas:<br />
        datos.append(linea)<br />
    <br />
    df = pd.DataFrame(datos)<br />
    my_path='C:/Users/Jaime/Desktop/python-course/Archivo.csv'<br />
    df.to_csv(my_path , index=false)</code></div></div>]]></description>
			<content:encoded><![CDATA[Buenas noches a todos, tengo un problema con una extracción de datos web de tablas. Aclaro que tengo conocimientos básicos y necesito ayuda para buscar una solución.<br />
<br />
La tabla que extraido a veces tiene campos en blanco y al crear las listas para exportarlo a csv, luego <span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">no me calzan las columnas en Excel</span></span>. paso a explicarlo con un ejemplo:<br />
<br />
Registro #1 (María, González, 18 años, España, Barcelona)<br />
Registro #2 (José, Pérez, España, Barcelona) #Acá falta la edad por ejemplo<br />
<br />
<br />
Así capturo cada registro y creo el data frame en Panda:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>Lineas=driver.find_elements_by_tag_name('//*[@id="datos"]/td')<br />
driver.quit()<br />
    <br />
    datos=[]<br />
    for linea in Lineas:<br />
        datos.append(linea)<br />
    <br />
    df = pd.DataFrame(datos)<br />
    my_path='C:/Users/Jaime/Desktop/python-course/Archivo.csv'<br />
    df.to_csv(my_path , index=false)</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Consultar por asunto en gmail]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1153</link>
			<pubDate>Sat, 26 Feb 2022 07:44:47 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1201">UNIX</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1153</guid>
			<description><![CDATA[Buen día, espero que anden bien, tengo la tarea de conseguir como realizar en Python esta tarea:<br />
<br />
Pido que me ORIENTEN donde puedo encontrar algo similar o igual. <br />
<br />
A modo de investigación dado que soy novato debo encontrar informacion de como hacer un programa en Python que:<br />
<br />
<ul class="mycode_list"><li>Se conecte a una cuenta de Gmail, <br />
</li>
<li>Recorra el inbox, <br />
</li>
<li>Detecte los emails con un título específico .<br />
</li>
<li>Descargue solamente los adjuntos tipo excel de esa lista de emails. <br />
</li>
<li>Los grabe en un directorio.<br />
</li>
</ul>
<br />
Ahi concluiría.<br />
<br />
<br />
Algún tutorial tambien puede servir por supuesto.<br />
<br />
Muchas gracias!<br />
<hr class="mycode_hr" />
Adjunto codigo que encontre, tal vez me digan que con modificarlo un poco pueda resolverlo.<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import imaplib<br />
import email<br />
from email.header import decode_header<br />
import webbrowser<br />
import os<br />
from getpass import getpass<br />
<br />
# Datos del usuario<br />
username = input("Correo: ")<br />
password = getpass("Password: ")<br />
<br />
# Crear conexión<br />
imap = imaplib.IMAP4_SSL("imap.gmail.com")<br />
# iniciar sesión<br />
imap.login(username, password)<br />
<br />
status, mensajes = imap.select("INBOX")<br />
# print(mensajes)<br />
# mensajes a recibir<br />
N = 3<br />
# cantidad total de correos<br />
mensajes = int(mensajes[0])<br />
<br />
for i in range(mensajes, mensajes - N, -1):<br />
    # print(f"vamos por el mensaje: {i}")<br />
#   &nbsp;&nbsp;# Obtener el mensaje<br />
    try:<br />
        res, mensaje = imap.fetch(str(i), "(RFC822)")<br />
    except:<br />
        break<br />
    for respuesta in mensaje:<br />
        if isinstance(respuesta, tuple):<br />
            # Obtener el contenido<br />
            mensaje = email.message_from_bytes(respuesta[1])<br />
            # decodificar el contenido<br />
            subject = decode_header(mensaje["Subject"])[0][0]<br />
            if isinstance(subject, bytes):<br />
                # convertir a string<br />
                subject = subject.decode()<br />
            # de donde viene el correo<br />
            from_ = mensaje.get("From")<br />
            print("Subject:", subject)<br />
            print("From:", from_)<br />
            print("Mensaje obtenido con exito")<br />
            # si el correo es html<br />
            if mensaje.is_multipart():<br />
                # Recorrer las partes del correo<br />
                for part in mensaje.walk():<br />
                    # Extraer el contenido<br />
                    content_type = part.get_content_type()<br />
                    content_disposition = str(part.get("Content-Disposition"))<br />
                    try:<br />
                        # el cuerpo del correo<br />
                        body = part.get_payload(decode=True).decode()<br />
                    except:<br />
                        pass<br />
                    if content_type == "text/plain" and "attachment" not in content_disposition:<br />
                        # Mostrar el cuerpo del correo<br />
                        print(body)<br />
                    elif "attachment" in content_disposition:<br />
#                       &nbsp;&nbsp;# download attachment<br />
                        nombre_archivo = part.get_filename()<br />
                        if nombre_archivo:<br />
                            if not os.path.isdir(subject):<br />
                                # crear una carpeta para el mensaje<br />
                                os.mkdir(subject)<br />
                            ruta_archivo = os.path.join(subject, nombre_archivo)<br />
                            # download attachment and save it<br />
                            open(ruta_archivo, "wb").write(part.get_payload(decode=True))<br />
            else:<br />
                # contenido del mensaje<br />
                content_type = mensaje.get_content_type()<br />
                # cuerpo del mensaje<br />
                body = mensaje.get_payload(decode=True).decode()<br />
                if content_type == "text/plain":<br />
#                   &nbsp;&nbsp;# mostrar solo el texto<br />
                    print(body)<br />
            # if content_type == "text/html":<br />
            #   &nbsp;&nbsp;# Abrir el html en el navegador<br />
            #   &nbsp;&nbsp;if not os.path.isdir(subject):<br />
            #       &nbsp;&nbsp;os.mkdir(subject)<br />
            #   &nbsp;&nbsp;nombre_archivo = f"{subject}.html"<br />
            #   &nbsp;&nbsp;ruta_archivo = os.path.join(subject, nombre_archivo)<br />
            #   &nbsp;&nbsp;open(ruta_archivo, "w").write(body)<br />
            #   &nbsp;&nbsp;# abrir el navegador<br />
            #   &nbsp;&nbsp;webbrowser.open(ruta_archivo)<br />
#           &nbsp;&nbsp;print("********************************")<br />
imap.close()<br />
imap.logout()</code></div></div>]]></description>
			<content:encoded><![CDATA[Buen día, espero que anden bien, tengo la tarea de conseguir como realizar en Python esta tarea:<br />
<br />
Pido que me ORIENTEN donde puedo encontrar algo similar o igual. <br />
<br />
A modo de investigación dado que soy novato debo encontrar informacion de como hacer un programa en Python que:<br />
<br />
<ul class="mycode_list"><li>Se conecte a una cuenta de Gmail, <br />
</li>
<li>Recorra el inbox, <br />
</li>
<li>Detecte los emails con un título específico .<br />
</li>
<li>Descargue solamente los adjuntos tipo excel de esa lista de emails. <br />
</li>
<li>Los grabe en un directorio.<br />
</li>
</ul>
<br />
Ahi concluiría.<br />
<br />
<br />
Algún tutorial tambien puede servir por supuesto.<br />
<br />
Muchas gracias!<br />
<hr class="mycode_hr" />
Adjunto codigo que encontre, tal vez me digan que con modificarlo un poco pueda resolverlo.<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import imaplib<br />
import email<br />
from email.header import decode_header<br />
import webbrowser<br />
import os<br />
from getpass import getpass<br />
<br />
# Datos del usuario<br />
username = input("Correo: ")<br />
password = getpass("Password: ")<br />
<br />
# Crear conexión<br />
imap = imaplib.IMAP4_SSL("imap.gmail.com")<br />
# iniciar sesión<br />
imap.login(username, password)<br />
<br />
status, mensajes = imap.select("INBOX")<br />
# print(mensajes)<br />
# mensajes a recibir<br />
N = 3<br />
# cantidad total de correos<br />
mensajes = int(mensajes[0])<br />
<br />
for i in range(mensajes, mensajes - N, -1):<br />
    # print(f"vamos por el mensaje: {i}")<br />
#   &nbsp;&nbsp;# Obtener el mensaje<br />
    try:<br />
        res, mensaje = imap.fetch(str(i), "(RFC822)")<br />
    except:<br />
        break<br />
    for respuesta in mensaje:<br />
        if isinstance(respuesta, tuple):<br />
            # Obtener el contenido<br />
            mensaje = email.message_from_bytes(respuesta[1])<br />
            # decodificar el contenido<br />
            subject = decode_header(mensaje["Subject"])[0][0]<br />
            if isinstance(subject, bytes):<br />
                # convertir a string<br />
                subject = subject.decode()<br />
            # de donde viene el correo<br />
            from_ = mensaje.get("From")<br />
            print("Subject:", subject)<br />
            print("From:", from_)<br />
            print("Mensaje obtenido con exito")<br />
            # si el correo es html<br />
            if mensaje.is_multipart():<br />
                # Recorrer las partes del correo<br />
                for part in mensaje.walk():<br />
                    # Extraer el contenido<br />
                    content_type = part.get_content_type()<br />
                    content_disposition = str(part.get("Content-Disposition"))<br />
                    try:<br />
                        # el cuerpo del correo<br />
                        body = part.get_payload(decode=True).decode()<br />
                    except:<br />
                        pass<br />
                    if content_type == "text/plain" and "attachment" not in content_disposition:<br />
                        # Mostrar el cuerpo del correo<br />
                        print(body)<br />
                    elif "attachment" in content_disposition:<br />
#                       &nbsp;&nbsp;# download attachment<br />
                        nombre_archivo = part.get_filename()<br />
                        if nombre_archivo:<br />
                            if not os.path.isdir(subject):<br />
                                # crear una carpeta para el mensaje<br />
                                os.mkdir(subject)<br />
                            ruta_archivo = os.path.join(subject, nombre_archivo)<br />
                            # download attachment and save it<br />
                            open(ruta_archivo, "wb").write(part.get_payload(decode=True))<br />
            else:<br />
                # contenido del mensaje<br />
                content_type = mensaje.get_content_type()<br />
                # cuerpo del mensaje<br />
                body = mensaje.get_payload(decode=True).decode()<br />
                if content_type == "text/plain":<br />
#                   &nbsp;&nbsp;# mostrar solo el texto<br />
                    print(body)<br />
            # if content_type == "text/html":<br />
            #   &nbsp;&nbsp;# Abrir el html en el navegador<br />
            #   &nbsp;&nbsp;if not os.path.isdir(subject):<br />
            #       &nbsp;&nbsp;os.mkdir(subject)<br />
            #   &nbsp;&nbsp;nombre_archivo = f"{subject}.html"<br />
            #   &nbsp;&nbsp;ruta_archivo = os.path.join(subject, nombre_archivo)<br />
            #   &nbsp;&nbsp;open(ruta_archivo, "w").write(body)<br />
            #   &nbsp;&nbsp;# abrir el navegador<br />
            #   &nbsp;&nbsp;webbrowser.open(ruta_archivo)<br />
#           &nbsp;&nbsp;print("********************************")<br />
imap.close()<br />
imap.logout()</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[insertar grafico en ventana independiente]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1139</link>
			<pubDate>Mon, 07 Feb 2022 16:34:25 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1120">valencia7291</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1139</guid>
			<description><![CDATA[Buenas noches, necesito su amable ayuda por favor<br />
<br />
Tengo el siguiente codigo python que genera un grafico y mi intención es que lo muestre en una ventana (Interfaz grafica) ya sea con tkinter o cualquier otro. Muchas gracias a quien pueda ayudarme<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import urllib.request<br />
import json<br />
import math<br />
import matplotlib.pyplot as plt<br />
<br />
#START-END POINT<br />
P1=[-33.965526,18.377388]<br />
P2=[-33.959881,18.478549]<br />
<br />
#NUMBER OF POINTS<br />
s=100<br />
interval_lat=(P2[0]-P1[0])/s #interval for latitude<br />
interval_lon=(P2[1]-P1[1])/s #interval for longitude<br />
<br />
#SET A NEW VARIABLE FOR START POINT<br />
lat0=P1[0]<br />
lon0=P1[1]<br />
<br />
#LATITUDE AND LONGITUDE LIST<br />
lat_list=[lat0]<br />
lon_list=[lon0]<br />
<br />
#GENERATING POINTS<br />
for i in range(s):<br />
    lat_step=lat0+interval_lat<br />
    lon_step=lon0+interval_lon<br />
    lon0=lon_step<br />
    lat0=lat_step<br />
    lat_list.append(lat_step)<br />
    lon_list.append(lon_step)<br />
<br />
#HAVERSINE FUNCTION<br />
def haversine(lat1,lon1,lat2,lon2):<br />
    lat1_rad=math.radians(lat1)<br />
    lat2_rad=math.radians(lat2)<br />
    lon1_rad=math.radians(lon1)<br />
    lon2_rad=math.radians(lon2)<br />
    delta_lat=lat2_rad-lat1_rad<br />
    delta_lon=lon2_rad-lon1_rad<br />
    a=math.sqrt((math.sin(delta_lat/2))**2+math.cos(lat1_rad)*math.cos(lat2_rad)*(math.sin(delta_lon/2))**2)<br />
    d=2*6371000*math.asin(a)<br />
    return d<br />
<br />
#DISTANCE CALCULATION<br />
d_list=[]<br />
for j in range(len(lat_list)):<br />
    lat_p=lat_list[j]<br />
    lon_p=lon_list[j]<br />
    dp=haversine(lat0,lon0,lat_p,lon_p)/1000 #km<br />
    d_list.append(dp)<br />
d_list_rev=d_list[::-1] #reverse list<br />
<br />
<br />
#CONSTRUCT JSON<br />
d_ar=[{}]*len(lat_list)<br />
for i in range(len(lat_list)):<br />
    d_ar[i]={"latitude":lat_list[i],"longitude":lon_list[i]}<br />
location={"locations":d_ar}<br />
json_data=json.dumps(location,skipkeys=int).encode('utf8')<br />
<br />
#SEND REQUEST <br />
url="https://api.open-elevation.com/api/v1/lookup"<br />
response = urllib.request.Request(url,json_data,headers={'Content-Type': 'application/json'})<br />
fp=urllib.request.urlopen(response)<br />
<br />
#RESPONSE PROCESSING<br />
res_byte=fp.read()<br />
res_str=res_byte.decode("utf8")<br />
js_str=json.loads(res_str)<br />
#print (js_mystr)<br />
fp.close()<br />
<br />
#GETTING ELEVATION <br />
response_len=len(js_str['results'])<br />
elev_list=[]<br />
for j in range(response_len):<br />
    elev_list.append(js_str['results'][j]['elevation'])<br />
<br />
#BASIC STAT INFORMATION<br />
mean_elev=round((sum(elev_list)/len(elev_list)),3)<br />
min_elev=min(elev_list)<br />
max_elev=max(elev_list)<br />
distance=d_list_rev[-1]<br />
<br />
#PLOT ELEVATION PROFILE<br />
base_reg=0<br />
plt.figure(figsize=(10,4))<br />
plt.plot(d_list_rev,elev_list)<br />
plt.plot([0,distance],[min_elev,min_elev],'--g',label='min: '+str(min_elev)+' m')<br />
plt.plot([0,distance],[max_elev,max_elev],'--r',label='max: '+str(max_elev)+' m')<br />
plt.plot([0,distance],[mean_elev,mean_elev],'--y',label='ave: '+str(mean_elev)+' m')<br />
plt.fill_between(d_list_rev,elev_list,base_reg,alpha=0.1)<br />
plt.text(d_list_rev[0],elev_list[0],"P1")<br />
plt.text(d_list_rev[-1],elev_list[-1],"P2")<br />
plt.xlabel("Distance(km)")<br />
plt.ylabel("Elevation(m)")<br />
plt.grid()<br />
plt.legend(fontsize='small')<br />
plt.show()</code></div></div>]]></description>
			<content:encoded><![CDATA[Buenas noches, necesito su amable ayuda por favor<br />
<br />
Tengo el siguiente codigo python que genera un grafico y mi intención es que lo muestre en una ventana (Interfaz grafica) ya sea con tkinter o cualquier otro. Muchas gracias a quien pueda ayudarme<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>import urllib.request<br />
import json<br />
import math<br />
import matplotlib.pyplot as plt<br />
<br />
#START-END POINT<br />
P1=[-33.965526,18.377388]<br />
P2=[-33.959881,18.478549]<br />
<br />
#NUMBER OF POINTS<br />
s=100<br />
interval_lat=(P2[0]-P1[0])/s #interval for latitude<br />
interval_lon=(P2[1]-P1[1])/s #interval for longitude<br />
<br />
#SET A NEW VARIABLE FOR START POINT<br />
lat0=P1[0]<br />
lon0=P1[1]<br />
<br />
#LATITUDE AND LONGITUDE LIST<br />
lat_list=[lat0]<br />
lon_list=[lon0]<br />
<br />
#GENERATING POINTS<br />
for i in range(s):<br />
    lat_step=lat0+interval_lat<br />
    lon_step=lon0+interval_lon<br />
    lon0=lon_step<br />
    lat0=lat_step<br />
    lat_list.append(lat_step)<br />
    lon_list.append(lon_step)<br />
<br />
#HAVERSINE FUNCTION<br />
def haversine(lat1,lon1,lat2,lon2):<br />
    lat1_rad=math.radians(lat1)<br />
    lat2_rad=math.radians(lat2)<br />
    lon1_rad=math.radians(lon1)<br />
    lon2_rad=math.radians(lon2)<br />
    delta_lat=lat2_rad-lat1_rad<br />
    delta_lon=lon2_rad-lon1_rad<br />
    a=math.sqrt((math.sin(delta_lat/2))**2+math.cos(lat1_rad)*math.cos(lat2_rad)*(math.sin(delta_lon/2))**2)<br />
    d=2*6371000*math.asin(a)<br />
    return d<br />
<br />
#DISTANCE CALCULATION<br />
d_list=[]<br />
for j in range(len(lat_list)):<br />
    lat_p=lat_list[j]<br />
    lon_p=lon_list[j]<br />
    dp=haversine(lat0,lon0,lat_p,lon_p)/1000 #km<br />
    d_list.append(dp)<br />
d_list_rev=d_list[::-1] #reverse list<br />
<br />
<br />
#CONSTRUCT JSON<br />
d_ar=[{}]*len(lat_list)<br />
for i in range(len(lat_list)):<br />
    d_ar[i]={"latitude":lat_list[i],"longitude":lon_list[i]}<br />
location={"locations":d_ar}<br />
json_data=json.dumps(location,skipkeys=int).encode('utf8')<br />
<br />
#SEND REQUEST <br />
url="https://api.open-elevation.com/api/v1/lookup"<br />
response = urllib.request.Request(url,json_data,headers={'Content-Type': 'application/json'})<br />
fp=urllib.request.urlopen(response)<br />
<br />
#RESPONSE PROCESSING<br />
res_byte=fp.read()<br />
res_str=res_byte.decode("utf8")<br />
js_str=json.loads(res_str)<br />
#print (js_mystr)<br />
fp.close()<br />
<br />
#GETTING ELEVATION <br />
response_len=len(js_str['results'])<br />
elev_list=[]<br />
for j in range(response_len):<br />
    elev_list.append(js_str['results'][j]['elevation'])<br />
<br />
#BASIC STAT INFORMATION<br />
mean_elev=round((sum(elev_list)/len(elev_list)),3)<br />
min_elev=min(elev_list)<br />
max_elev=max(elev_list)<br />
distance=d_list_rev[-1]<br />
<br />
#PLOT ELEVATION PROFILE<br />
base_reg=0<br />
plt.figure(figsize=(10,4))<br />
plt.plot(d_list_rev,elev_list)<br />
plt.plot([0,distance],[min_elev,min_elev],'--g',label='min: '+str(min_elev)+' m')<br />
plt.plot([0,distance],[max_elev,max_elev],'--r',label='max: '+str(max_elev)+' m')<br />
plt.plot([0,distance],[mean_elev,mean_elev],'--y',label='ave: '+str(mean_elev)+' m')<br />
plt.fill_between(d_list_rev,elev_list,base_reg,alpha=0.1)<br />
plt.text(d_list_rev[0],elev_list[0],"P1")<br />
plt.text(d_list_rev[-1],elev_list[-1],"P2")<br />
plt.xlabel("Distance(km)")<br />
plt.ylabel("Elevation(m)")<br />
plt.grid()<br />
plt.legend(fontsize='small')<br />
plt.show()</code></div></div>]]></content:encoded>
		</item>
	</channel>
</rss>